summaryrefslogtreecommitdiffstats
path: root/src/components
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-05-17 18:43:24 +0200
committerArmand Philippot <git@armandphilippot.com>2022-05-17 18:43:24 +0200
commit4e53a8654441481029746ff4e35a4a19c8d83709 (patch)
treedeeb541d5be6c47cf119b28e4d4ad05241346d94 /src/components
parent7d9f874364ec6e255e62eb3027011bfed267904c (diff)
chore: make some widgets scrollable (like ToC)
Diffstat (limited to 'src/components')
-rw-r--r--src/components/molecules/layout/widget.module.scss20
-rw-r--r--src/components/molecules/layout/widget.tsx8
-rw-r--r--src/components/organisms/widgets/links-list-widget.tsx1
3 files changed, 28 insertions, 1 deletions
diff --git a/src/components/molecules/layout/widget.module.scss b/src/components/molecules/layout/widget.module.scss
index 5854206..27d7ffd 100644
--- a/src/components/molecules/layout/widget.module.scss
+++ b/src/components/molecules/layout/widget.module.scss
@@ -1,4 +1,5 @@
@use "@styles/abstracts/functions" as fun;
+@use "@styles/abstracts/mixins" as mix;
.widget {
display: flex;
@@ -32,6 +33,25 @@
}
}
+ &--expanded#{&}--has-scroll {
+ @include mix.media("screen") {
+ @include mix.dimensions("lg") {
+ max-height: 95vh;
+
+ .widget__body {
+ overflow: hidden;
+ }
+
+ &:hover,
+ &:focus-within {
+ .widget__body {
+ overflow-y: auto;
+ }
+ }
+ }
+ }
+ }
+
&--expanded & {
&__body {
max-height: 10000px; // needs a fixed value for transition.
diff --git a/src/components/molecules/layout/widget.tsx b/src/components/molecules/layout/widget.tsx
index feb2add..f50fe80 100644
--- a/src/components/molecules/layout/widget.tsx
+++ b/src/components/molecules/layout/widget.tsx
@@ -20,6 +20,10 @@ export type WidgetProps = Pick<
* Determine if the widget body should have borders. Default: false.
*/
withBorders?: boolean;
+ /**
+ * Determine if a vertical scrollbar should be displayed. Default: false.
+ */
+ withScroll?: boolean;
};
/**
@@ -34,16 +38,18 @@ const Widget: FC<WidgetProps> = ({
level,
title,
withBorders = false,
+ withScroll = false,
}) => {
const [isExpanded, setIsExpanded] = useState<boolean>(expanded);
const stateClass = isExpanded ? 'widget--expanded' : 'widget--collapsed';
const bordersClass = withBorders
? 'widget--has-borders'
: 'widget--no-borders';
+ const scrollClass = withScroll ? 'widget--has-scroll' : 'widget--no-scroll';
return (
<div
- className={`${styles.widget} ${styles[bordersClass]} ${styles[stateClass]} ${className}`}
+ className={`${styles.widget} ${styles[bordersClass]} ${styles[stateClass]} ${styles[scrollClass]} ${className}`}
>
<HeadingButton
level={level}
diff --git a/src/components/organisms/widgets/links-list-widget.tsx b/src/components/organisms/widgets/links-list-widget.tsx
index 3f291e3..90dae4a 100644
--- a/src/components/organisms/widgets/links-list-widget.tsx
+++ b/src/components/organisms/widgets/links-list-widget.tsx
@@ -69,6 +69,7 @@ const LinksListWidget: FC<LinksListWidgetProps> = ({
expanded={true}
withBorders={true}
className={styles.widget}
+ withScroll={true}
{...props}
>
<List