@lumx/react 2.1.3 → 2.1.6-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm/_internal/Avatar2.js +5 -1
  2. package/esm/_internal/Avatar2.js.map +1 -1
  3. package/esm/_internal/Dialog2.js +13 -8
  4. package/esm/_internal/Dialog2.js.map +1 -1
  5. package/esm/_internal/DragHandle.js +1 -1
  6. package/esm/_internal/DragHandle.js.map +1 -1
  7. package/esm/_internal/Flag2.js +1 -3
  8. package/esm/_internal/Flag2.js.map +1 -1
  9. package/esm/_internal/Message2.js +2 -2
  10. package/esm/_internal/Message2.js.map +1 -1
  11. package/esm/_internal/SlideshowControls.js +2 -2
  12. package/esm/_internal/SlideshowControls.js.map +1 -1
  13. package/esm/_internal/Thumbnail2.js +29 -34
  14. package/esm/_internal/Thumbnail2.js.map +1 -1
  15. package/esm/_internal/UserBlock.js +44 -14
  16. package/esm/_internal/UserBlock.js.map +1 -1
  17. package/esm/_internal/user-block.js +1 -0
  18. package/esm/_internal/user-block.js.map +1 -1
  19. package/package.json +16 -17
  20. package/src/components/avatar/Avatar.tsx +8 -0
  21. package/src/components/dialog/Dialog.stories.tsx +44 -2
  22. package/src/components/dialog/Dialog.tsx +15 -11
  23. package/src/components/dialog/__snapshots__/Dialog.test.tsx.snap +76 -0
  24. package/src/components/drag-handle/DragHandle.tsx +5 -1
  25. package/src/components/flag/Flag.test.tsx +1 -2
  26. package/src/components/flag/Flag.tsx +2 -10
  27. package/src/components/flag/__snapshots__/Flag.test.tsx.snap +0 -15
  28. package/src/components/message/Message.tsx +2 -2
  29. package/src/components/slideshow/useKeyNavigate.ts +2 -2
  30. package/src/components/thumbnail/Thumbnail.stories.tsx +21 -0
  31. package/src/components/thumbnail/Thumbnail.test.tsx +20 -2
  32. package/src/components/thumbnail/Thumbnail.tsx +40 -15
  33. package/src/components/thumbnail/__snapshots__/Thumbnail.test.tsx.snap +53 -6
  34. package/src/components/user-block/UserBlock.stories.tsx +27 -4
  35. package/src/components/user-block/UserBlock.tsx +40 -16
  36. package/src/components/user-block/__snapshots__/UserBlock.test.tsx.snap +244 -145
  37. package/types.d.ts +12 -0
@@ -44,7 +44,9 @@ var Avatar = forwardRef(function (props, ref) {
44
44
  size = props.size,
45
45
  theme = props.theme,
46
46
  thumbnailProps = props.thumbnailProps,
47
- forwardedProps = _objectWithoutProperties(props, ["actions", "alt", "badge", "className", "image", "onClick", "onKeyPress", "size", "theme", "thumbnailProps"]);
47
+ linkProps = props.linkProps,
48
+ linkAs = props.linkAs,
49
+ forwardedProps = _objectWithoutProperties(props, ["actions", "alt", "badge", "className", "image", "onClick", "onKeyPress", "size", "theme", "thumbnailProps", "linkProps", "linkAs"]);
48
50
 
49
51
  return React.createElement("div", _extends({
50
52
  ref: ref
@@ -55,6 +57,8 @@ var Avatar = forwardRef(function (props, ref) {
55
57
  theme: theme
56
58
  }))
57
59
  }), React.createElement(Thumbnail, _extends({
60
+ linkProps: linkProps,
61
+ linkAs: linkAs,
58
62
  className: "".concat(CLASSNAME, "__thumbnail"),
59
63
  onClick: onClick,
60
64
  onKeyPress: onKeyPress
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar2.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import React, { forwardRef, KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, Size, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Avatar sizes.\n */\nexport type AvatarSize = Extract<Size, 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface AvatarProps extends GenericProps {\n /** Action toolbar content. */\n actions?: ReactNode;\n /** Image alternative text. */\n alt: string;\n /** Badge. */\n badge?: ReactElement;\n /** Image URL. */\n image: string;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Size variant. */\n size?: AvatarSize;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Props to pass to the thumbnail (minus those already set by the Avatar props). */\n thumbnailProps?: Omit<\n ThumbnailProps,\n 'image' | 'alt' | 'size' | 'theme' | 'align' | 'fillHeight' | 'variant' | 'aspectRatio'\n >;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Avatar';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AvatarProps> = {\n size: Size.m,\n theme: Theme.light,\n};\n\n/**\n * Avatar component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Avatar: Comp<AvatarProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n actions,\n alt,\n badge,\n className,\n image,\n onClick,\n onKeyPress,\n size,\n theme,\n thumbnailProps,\n ...forwardedProps\n } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, size, theme }))}\n >\n <Thumbnail\n className={`${CLASSNAME}__thumbnail`}\n onClick={onClick}\n onKeyPress={onKeyPress}\n {...thumbnailProps}\n aspectRatio={AspectRatio.square}\n size={size}\n image={image}\n alt={alt}\n />\n {actions && <div className={`${CLASSNAME}__actions`}>{actions}</div>}\n {badge && <div className={`${CLASSNAME}__badge`}>{badge}</div>}\n </div>\n );\n});\nAvatar.displayName = COMPONENT_NAME;\nAvatar.className = CLASSNAME;\nAvatar.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","m","theme","Theme","light","Avatar","forwardRef","props","ref","actions","alt","badge","className","image","onClick","onKeyPress","thumbnailProps","forwardedProps","classNames","handleBasicClasses","prefix","AspectRatio","square","displayName","defaultProps"],"mappings":";;;;;;AAQA;;;;AAgCA;;;AAGA,IAAMA,cAAc,GAAG,QAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,aAAmC,GAAG;AACxCC,EAAAA,IAAI,EAAEC,IAAI,CAACC,CAD6B;AAExCC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AAF2B,CAA5C;AAKA;;;;;;;;IAOaC,MAAyC,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAE5EC,OAF4E,GAa5EF,KAb4E,CAE5EE,OAF4E;AAAA,MAG5EC,GAH4E,GAa5EH,KAb4E,CAG5EG,GAH4E;AAAA,MAI5EC,KAJ4E,GAa5EJ,KAb4E,CAI5EI,KAJ4E;AAAA,MAK5EC,SAL4E,GAa5EL,KAb4E,CAK5EK,SAL4E;AAAA,MAM5EC,KAN4E,GAa5EN,KAb4E,CAM5EM,KAN4E;AAAA,MAO5EC,OAP4E,GAa5EP,KAb4E,CAO5EO,OAP4E;AAAA,MAQ5EC,UAR4E,GAa5ER,KAb4E,CAQ5EQ,UAR4E;AAAA,MAS5EhB,IAT4E,GAa5EQ,KAb4E,CAS5ER,IAT4E;AAAA,MAU5EG,KAV4E,GAa5EK,KAb4E,CAU5EL,KAV4E;AAAA,MAW5Ec,cAX4E,GAa5ET,KAb4E,CAW5ES,cAX4E;AAAA,MAYzEC,cAZyE,4BAa5EV,KAb4E;;AAehF,SACI;AACI,IAAA,GAAG,EAAEC;AADT,KAEQS,cAFR;AAGI,IAAA,SAAS,EAAEC,UAAU,CAACN,SAAD,EAAYO,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAExB,SAAV;AAAqBG,MAAAA,IAAI,EAAJA,IAArB;AAA2BG,MAAAA,KAAK,EAALA;AAA3B,KAAD,CAA9B;AAHzB,MAKI,oBAAC,SAAD;AACI,IAAA,SAAS,YAAKN,SAAL,gBADb;AAEI,IAAA,OAAO,EAAEkB,OAFb;AAGI,IAAA,UAAU,EAAEC;AAHhB,KAIQC,cAJR;AAKI,IAAA,WAAW,EAAEK,WAAW,CAACC,MAL7B;AAMI,IAAA,IAAI,EAAEvB,IANV;AAOI,IAAA,KAAK,EAAEc,KAPX;AAQI,IAAA,GAAG,EAAEH;AART,KALJ,EAeKD,OAAO,IAAI;AAAK,IAAA,SAAS,YAAKb,SAAL;AAAd,KAA0Ca,OAA1C,CAfhB,EAgBKE,KAAK,IAAI;AAAK,IAAA,SAAS,YAAKf,SAAL;AAAd,KAAwCe,KAAxC,CAhBd,CADJ;AAoBH,CAnCkE;AAoCnEN,MAAM,CAACkB,WAAP,GAAqB5B,cAArB;AACAU,MAAM,CAACO,SAAP,GAAmBhB,SAAnB;AACAS,MAAM,CAACmB,YAAP,GAAsB1B,aAAtB;;;;"}
1
+ {"version":3,"file":"Avatar2.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import React, { forwardRef, KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, Size, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Avatar sizes.\n */\nexport type AvatarSize = Extract<Size, 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface AvatarProps extends GenericProps {\n /** Action toolbar content. */\n actions?: ReactNode;\n /** Image alternative text. */\n alt: string;\n /** Badge. */\n badge?: ReactElement;\n /** Image URL. */\n image: string;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Size variant. */\n size?: AvatarSize;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Props to pass to the thumbnail (minus those already set by the Avatar props). */\n thumbnailProps?: Omit<\n ThumbnailProps,\n 'image' | 'alt' | 'size' | 'theme' | 'align' | 'fillHeight' | 'variant' | 'aspectRatio'\n >;\n /** Props to pass to the link wrapping the thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Avatar';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AvatarProps> = {\n size: Size.m,\n theme: Theme.light,\n};\n\n/**\n * Avatar component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Avatar: Comp<AvatarProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n actions,\n alt,\n badge,\n className,\n image,\n onClick,\n onKeyPress,\n size,\n theme,\n thumbnailProps,\n linkProps,\n linkAs,\n ...forwardedProps\n } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, size, theme }))}\n >\n <Thumbnail\n linkProps={linkProps}\n linkAs={linkAs}\n className={`${CLASSNAME}__thumbnail`}\n onClick={onClick}\n onKeyPress={onKeyPress}\n {...thumbnailProps}\n aspectRatio={AspectRatio.square}\n size={size}\n image={image}\n alt={alt}\n />\n {actions && <div className={`${CLASSNAME}__actions`}>{actions}</div>}\n {badge && <div className={`${CLASSNAME}__badge`}>{badge}</div>}\n </div>\n );\n});\nAvatar.displayName = COMPONENT_NAME;\nAvatar.className = CLASSNAME;\nAvatar.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","m","theme","Theme","light","Avatar","forwardRef","props","ref","actions","alt","badge","className","image","onClick","onKeyPress","thumbnailProps","linkProps","linkAs","forwardedProps","classNames","handleBasicClasses","prefix","AspectRatio","square","displayName","defaultProps"],"mappings":";;;;;;AAQA;;;;AAoCA;;;AAGA,IAAMA,cAAc,GAAG,QAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,aAAmC,GAAG;AACxCC,EAAAA,IAAI,EAAEC,IAAI,CAACC,CAD6B;AAExCC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AAF2B,CAA5C;AAKA;;;;;;;;IAOaC,MAAyC,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAE5EC,OAF4E,GAe5EF,KAf4E,CAE5EE,OAF4E;AAAA,MAG5EC,GAH4E,GAe5EH,KAf4E,CAG5EG,GAH4E;AAAA,MAI5EC,KAJ4E,GAe5EJ,KAf4E,CAI5EI,KAJ4E;AAAA,MAK5EC,SAL4E,GAe5EL,KAf4E,CAK5EK,SAL4E;AAAA,MAM5EC,KAN4E,GAe5EN,KAf4E,CAM5EM,KAN4E;AAAA,MAO5EC,OAP4E,GAe5EP,KAf4E,CAO5EO,OAP4E;AAAA,MAQ5EC,UAR4E,GAe5ER,KAf4E,CAQ5EQ,UAR4E;AAAA,MAS5EhB,IAT4E,GAe5EQ,KAf4E,CAS5ER,IAT4E;AAAA,MAU5EG,KAV4E,GAe5EK,KAf4E,CAU5EL,KAV4E;AAAA,MAW5Ec,cAX4E,GAe5ET,KAf4E,CAW5ES,cAX4E;AAAA,MAY5EC,SAZ4E,GAe5EV,KAf4E,CAY5EU,SAZ4E;AAAA,MAa5EC,MAb4E,GAe5EX,KAf4E,CAa5EW,MAb4E;AAAA,MAczEC,cAdyE,4BAe5EZ,KAf4E;;AAiBhF,SACI;AACI,IAAA,GAAG,EAAEC;AADT,KAEQW,cAFR;AAGI,IAAA,SAAS,EAAEC,UAAU,CAACR,SAAD,EAAYS,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAE1B,SAAV;AAAqBG,MAAAA,IAAI,EAAJA,IAArB;AAA2BG,MAAAA,KAAK,EAALA;AAA3B,KAAD,CAA9B;AAHzB,MAKI,oBAAC,SAAD;AACI,IAAA,SAAS,EAAEe,SADf;AAEI,IAAA,MAAM,EAAEC,MAFZ;AAGI,IAAA,SAAS,YAAKtB,SAAL,gBAHb;AAII,IAAA,OAAO,EAAEkB,OAJb;AAKI,IAAA,UAAU,EAAEC;AALhB,KAMQC,cANR;AAOI,IAAA,WAAW,EAAEO,WAAW,CAACC,MAP7B;AAQI,IAAA,IAAI,EAAEzB,IARV;AASI,IAAA,KAAK,EAAEc,KATX;AAUI,IAAA,GAAG,EAAEH;AAVT,KALJ,EAiBKD,OAAO,IAAI;AAAK,IAAA,SAAS,YAAKb,SAAL;AAAd,KAA0Ca,OAA1C,CAjBhB,EAkBKE,KAAK,IAAI;AAAK,IAAA,SAAS,YAAKf,SAAL;AAAd,KAAwCe,KAAxC,CAlBd,CADJ;AAsBH,CAvCkE;AAwCnEN,MAAM,CAACoB,WAAP,GAAqB9B,cAArB;AACAU,MAAM,CAACO,SAAP,GAAmBhB,SAAnB;AACAS,MAAM,CAACqB,YAAP,GAAsB5B,aAAtB;;;;"}
@@ -151,17 +151,22 @@ var Dialog = forwardRef(function (props, ref) {
151
151
  zIndex = props.zIndex,
152
152
  dialogProps = props.dialogProps,
153
153
  onVisibilityChange = props.onVisibilityChange,
154
- forwardedProps = _objectWithoutProperties(props, ["children", "className", "header", "focusElement", "forceFooterDivider", "forceHeaderDivider", "footer", "isLoading", "isOpen", "onClose", "parentElement", "contentRef", "preventAutoClose", "size", "zIndex", "dialogProps", "onVisibilityChange"]);
154
+ forwardedProps = _objectWithoutProperties(props, ["children", "className", "header", "focusElement", "forceFooterDivider", "forceHeaderDivider", "footer", "isLoading", "isOpen", "onClose", "parentElement", "contentRef", "preventAutoClose", "size", "zIndex", "dialogProps", "onVisibilityChange"]); // eslint-disable-next-line react-hooks/rules-of-hooks
155
155
 
156
- var handleClose = onClose ? function () {
157
- onClose(); // Focus the parent element on close.
158
156
 
159
- if (parentElement && parentElement.current) {
160
- parentElement.current.focus();
157
+ var previousOpen = React.useRef(isOpen); // eslint-disable-next-line react-hooks/rules-of-hooks
158
+
159
+ React.useEffect(function () {
160
+ if (isOpen !== previousOpen.current) {
161
+ previousOpen.current = isOpen; // Focus the parent element on close.
162
+
163
+ if (!isOpen && parentElement && parentElement.current) {
164
+ parentElement.current.focus();
165
+ }
161
166
  }
162
- } : undefined; // eslint-disable-next-line react-hooks/rules-of-hooks
167
+ }, [isOpen, parentElement]); // eslint-disable-next-line react-hooks/rules-of-hooks
163
168
 
164
- useCallbackOnEscape(handleClose, isOpen && !preventAutoClose); // eslint-disable-next-line react-hooks/rules-of-hooks
169
+ useCallbackOnEscape(onClose, isOpen && !preventAutoClose); // eslint-disable-next-line react-hooks/rules-of-hooks
165
170
 
166
171
  var wrapperRef = useRef(null);
167
172
  /**
@@ -234,7 +239,7 @@ var Dialog = forwardRef(function (props, ref) {
234
239
  role: "dialog",
235
240
  "aria-modal": "true"
236
241
  }, dialogProps), React.createElement(ClickAwayProvider, {
237
- callback: !preventAutoClose && handleClose,
242
+ callback: !preventAutoClose && onClose,
238
243
  refs: clickAwayRefs
239
244
  }, React.createElement("div", {
240
245
  className: "".concat(CLASSNAME, "__wrapper"),
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog2.js","sources":["../../../src/hooks/useIntersectionObserver.tsx","../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type Intersections<T> = Map<T, IntersectionObserverEntry>;\n\n/**\n * Convenient hook to create interaction observers.\n *\n * @param elements Elements to observe.\n * @param options IntersectionObserver options.\n * @return Map of intersections.\n */\nexport function useIntersectionObserver<T extends Element>(\n elements: Array<T | null | undefined>,\n options?: IntersectionObserverInit,\n): Intersections<T> {\n const [intersections, setIntersections] = useState<Intersections<T>>(() => new Map());\n\n useEffect(\n () => {\n if (elements.length < 1 || !elements.some(Boolean)) {\n return undefined;\n }\n\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n intersections.set(entry.target as T, entry);\n }\n setIntersections(new Map(intersections));\n }, options);\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n return () => observer.disconnect();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...elements],\n );\n\n return intersections;\n}\n","import React, { Children, forwardRef, ReactElement, ReactNode, RefObject, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport classNames from 'classnames';\n\nimport { Progress, ProgressVariant, Size } from '@lumx/react';\n\nimport { DIALOG_TRANSITION_DURATION, DOCUMENT } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useIntersectionObserver } from '@lumx/react/hooks/useIntersectionObserver';\nimport {\n Comp,\n GenericProps,\n getRootClassName,\n handleBasicClasses,\n isComponent,\n partitionMulti,\n} from '@lumx/react/utils';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\n\n/**\n * Defines the props of the component.\n */\nexport interface DialogProps extends GenericProps {\n /** Footer content. */\n footer?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceFooterDivider?: boolean;\n /** Header content. */\n header?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceHeaderDivider?: boolean;\n /** Whether the indefinite progress indicator over the dialog content is displayed or not. */\n isLoading?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the parent element that triggered modal opening (will get back focus on close). */\n parentElement?: RefObject<HTMLElement>;\n /** Reference to the dialog content element. */\n contentRef?: RefObject<HTMLDivElement>;\n /** Reference to the of the element that should get the focus when the dialogs opens. By default, the first child will take focus. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Size variant. */\n size?: DialogSizes;\n /** Z-axis position. */\n zIndex?: number;\n /** Z-axis position. */\n dialogProps?: GenericProps;\n /** On close callback. */\n onClose?(): void;\n /** Callback called when the open animation starts and the close animation finishes. */\n onVisibilityChange?(isVisible: boolean): void;\n}\n\nexport type DialogSizes = Extract<Size, 'tiny' | 'regular' | 'big' | 'huge'>;\n\nconst isHeader = isComponent('header');\nconst isFooter = isComponent('footer');\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Dialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.big,\n};\n\n/**\n * Dialog component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Dialog: Comp<DialogProps, HTMLDivElement> = forwardRef((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n const {\n children,\n className,\n header,\n focusElement,\n forceFooterDivider,\n forceHeaderDivider,\n footer,\n isLoading,\n isOpen,\n onClose,\n parentElement,\n contentRef,\n preventAutoClose,\n size,\n zIndex,\n dialogProps,\n onVisibilityChange,\n ...forwardedProps\n } = props;\n\n const handleClose = onClose\n ? () => {\n onClose();\n // Focus the parent element on close.\n if (parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n : undefined;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(handleClose, isOpen && !preventAutoClose);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n /**\n * Since the `contentRef` comes from the parent and is optional,\n * we need to create a stable contentRef that will always be available.\n */\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const localContentRef = useRef<HTMLDivElement>(null);\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(wrapperRef.current, focusElement?.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(isOpen && localContentRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelTop, setSentinelTop] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelBottom, setSentinelBottom] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {\n threshold: [0, 1],\n });\n\n const hasTopIntersection = sentinelTop && !(intersections.get(sentinelTop)?.isIntersecting ?? true);\n const hasBottomIntersection = sentinelBottom && !(intersections.get(sentinelBottom)?.isIntersecting ?? true);\n\n // Separate header, footer and dialog content from children.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [[headerChild], [footerChild], content] = useMemo(\n () => partitionMulti(Children.toArray(children), [isHeader, isFooter]),\n [children],\n );\n const headerChildProps = (headerChild as ReactElement)?.props;\n const headerChildContent = headerChildProps?.children;\n const footerChildProps = (footerChild as ReactElement)?.props;\n const footerChildContent = footerChildProps?.children;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useDelayedVisibility(Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n return isOpen || isVisible\n ? createPortal(\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n isHidden: !isOpen,\n isLoading,\n isShown: isOpen || isVisible,\n prefix: CLASSNAME,\n size,\n }),\n )}\n style={{ zIndex }}\n >\n <div className={`${CLASSNAME}__overlay`} />\n\n <section className={`${CLASSNAME}__container`} role=\"dialog\" aria-modal=\"true\" {...dialogProps}>\n <ClickAwayProvider callback={!preventAutoClose && handleClose} refs={clickAwayRefs}>\n <div className={`${CLASSNAME}__wrapper`} ref={wrapperRef}>\n {(header || headerChildContent) && (\n <header\n {...headerChildProps}\n className={classNames(\n `${CLASSNAME}__header`,\n (forceHeaderDivider || hasTopIntersection) &&\n `${CLASSNAME}__header--has-divider`,\n headerChildProps?.className,\n )}\n >\n {header}\n {headerChildContent}\n </header>\n )}\n\n <div ref={mergeRefs(contentRef, localContentRef)} className={`${CLASSNAME}__content`}>\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--top`}\n ref={setSentinelTop}\n />\n\n {content}\n\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--bottom`}\n ref={setSentinelBottom}\n />\n </div>\n\n {(footer || footerChildContent) && (\n <footer\n {...footerChildProps}\n className={classNames(\n `${CLASSNAME}__footer`,\n (forceFooterDivider || hasBottomIntersection) &&\n `${CLASSNAME}__footer--has-divider`,\n footerChildProps?.className,\n )}\n >\n {footer}\n {footerChildContent}\n </footer>\n )}\n\n {isLoading && (\n <div className={`${CLASSNAME}__progress-overlay`}>\n <Progress variant={ProgressVariant.circular} />\n </div>\n )}\n </div>\n </ClickAwayProvider>\n </section>\n </div>,\n document.body,\n )\n : null;\n});\nDialog.displayName = COMPONENT_NAME;\nDialog.className = CLASSNAME;\nDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["useIntersectionObserver","elements","options","useState","Map","intersections","setIntersections","useEffect","length","some","Boolean","undefined","observer","IntersectionObserver","entries","entry","set","target","element","observe","disconnect","isHeader","isComponent","isFooter","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","big","Dialog","forwardRef","props","ref","DOCUMENT","children","className","header","focusElement","forceFooterDivider","forceHeaderDivider","footer","isLoading","isOpen","onClose","parentElement","contentRef","preventAutoClose","zIndex","dialogProps","onVisibilityChange","forwardedProps","handleClose","current","focus","useCallbackOnEscape","wrapperRef","useRef","localContentRef","useFocusTrap","useDisableBodyScroll","sentinelTop","setSentinelTop","sentinelBottom","setSentinelBottom","threshold","hasTopIntersection","get","isIntersecting","hasBottomIntersection","useMemo","partitionMulti","Children","toArray","headerChild","footerChild","content","headerChildProps","headerChildContent","footerChildProps","footerChildContent","isVisible","useDelayedVisibility","DIALOG_TRANSITION_DURATION","clickAwayRefs","createPortal","classNames","handleBasicClasses","isHidden","isShown","prefix","mergeRefs","ProgressVariant","circular","document","body","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog2.js","sources":["../../../src/hooks/useIntersectionObserver.tsx","../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type Intersections<T> = Map<T, IntersectionObserverEntry>;\n\n/**\n * Convenient hook to create interaction observers.\n *\n * @param elements Elements to observe.\n * @param options IntersectionObserver options.\n * @return Map of intersections.\n */\nexport function useIntersectionObserver<T extends Element>(\n elements: Array<T | null | undefined>,\n options?: IntersectionObserverInit,\n): Intersections<T> {\n const [intersections, setIntersections] = useState<Intersections<T>>(() => new Map());\n\n useEffect(\n () => {\n if (elements.length < 1 || !elements.some(Boolean)) {\n return undefined;\n }\n\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n intersections.set(entry.target as T, entry);\n }\n setIntersections(new Map(intersections));\n }, options);\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n return () => observer.disconnect();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...elements],\n );\n\n return intersections;\n}\n","import React, { Children, forwardRef, ReactElement, ReactNode, RefObject, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport classNames from 'classnames';\n\nimport { Progress, ProgressVariant, Size } from '@lumx/react';\n\nimport { DIALOG_TRANSITION_DURATION, DOCUMENT } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useIntersectionObserver } from '@lumx/react/hooks/useIntersectionObserver';\nimport {\n Comp,\n GenericProps,\n getRootClassName,\n handleBasicClasses,\n isComponent,\n partitionMulti,\n} from '@lumx/react/utils';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\n\n/**\n * Defines the props of the component.\n */\nexport interface DialogProps extends GenericProps {\n /** Footer content. */\n footer?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceFooterDivider?: boolean;\n /** Header content. */\n header?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceHeaderDivider?: boolean;\n /** Whether the indefinite progress indicator over the dialog content is displayed or not. */\n isLoading?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the parent element that triggered modal opening (will get back focus on close). */\n parentElement?: RefObject<HTMLElement>;\n /** Reference to the dialog content element. */\n contentRef?: RefObject<HTMLDivElement>;\n /** Reference to the of the element that should get the focus when the dialogs opens. By default, the first child will take focus. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Size variant. */\n size?: DialogSizes;\n /** Z-axis position. */\n zIndex?: number;\n /** Z-axis position. */\n dialogProps?: GenericProps;\n /** On close callback. */\n onClose?(): void;\n /** Callback called when the open animation starts and the close animation finishes. */\n onVisibilityChange?(isVisible: boolean): void;\n}\n\nexport type DialogSizes = Extract<Size, 'tiny' | 'regular' | 'big' | 'huge'>;\n\nconst isHeader = isComponent('header');\nconst isFooter = isComponent('footer');\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Dialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.big,\n};\n\n/**\n * Dialog component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Dialog: Comp<DialogProps, HTMLDivElement> = forwardRef((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n const {\n children,\n className,\n header,\n focusElement,\n forceFooterDivider,\n forceHeaderDivider,\n footer,\n isLoading,\n isOpen,\n onClose,\n parentElement,\n contentRef,\n preventAutoClose,\n size,\n zIndex,\n dialogProps,\n onVisibilityChange,\n ...forwardedProps\n } = props;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const previousOpen = React.useRef(isOpen);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (isOpen !== previousOpen.current) {\n previousOpen.current = isOpen;\n\n // Focus the parent element on close.\n if (!isOpen && parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n }, [isOpen, parentElement]);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(onClose, isOpen && !preventAutoClose);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n /**\n * Since the `contentRef` comes from the parent and is optional,\n * we need to create a stable contentRef that will always be available.\n */\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const localContentRef = useRef<HTMLDivElement>(null);\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(wrapperRef.current, focusElement?.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(isOpen && localContentRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelTop, setSentinelTop] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelBottom, setSentinelBottom] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {\n threshold: [0, 1],\n });\n\n const hasTopIntersection = sentinelTop && !(intersections.get(sentinelTop)?.isIntersecting ?? true);\n const hasBottomIntersection = sentinelBottom && !(intersections.get(sentinelBottom)?.isIntersecting ?? true);\n\n // Separate header, footer and dialog content from children.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [[headerChild], [footerChild], content] = useMemo(\n () => partitionMulti(Children.toArray(children), [isHeader, isFooter]),\n [children],\n );\n const headerChildProps = (headerChild as ReactElement)?.props;\n const headerChildContent = headerChildProps?.children;\n const footerChildProps = (footerChild as ReactElement)?.props;\n const footerChildContent = footerChildProps?.children;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useDelayedVisibility(Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n return isOpen || isVisible\n ? createPortal(\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n isHidden: !isOpen,\n isLoading,\n isShown: isOpen || isVisible,\n prefix: CLASSNAME,\n size,\n }),\n )}\n style={{ zIndex }}\n >\n <div className={`${CLASSNAME}__overlay`} />\n\n <section className={`${CLASSNAME}__container`} role=\"dialog\" aria-modal=\"true\" {...dialogProps}>\n <ClickAwayProvider callback={!preventAutoClose && onClose} refs={clickAwayRefs}>\n <div className={`${CLASSNAME}__wrapper`} ref={wrapperRef}>\n {(header || headerChildContent) && (\n <header\n {...headerChildProps}\n className={classNames(\n `${CLASSNAME}__header`,\n (forceHeaderDivider || hasTopIntersection) &&\n `${CLASSNAME}__header--has-divider`,\n headerChildProps?.className,\n )}\n >\n {header}\n {headerChildContent}\n </header>\n )}\n\n <div ref={mergeRefs(contentRef, localContentRef)} className={`${CLASSNAME}__content`}>\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--top`}\n ref={setSentinelTop}\n />\n\n {content}\n\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--bottom`}\n ref={setSentinelBottom}\n />\n </div>\n\n {(footer || footerChildContent) && (\n <footer\n {...footerChildProps}\n className={classNames(\n `${CLASSNAME}__footer`,\n (forceFooterDivider || hasBottomIntersection) &&\n `${CLASSNAME}__footer--has-divider`,\n footerChildProps?.className,\n )}\n >\n {footer}\n {footerChildContent}\n </footer>\n )}\n\n {isLoading && (\n <div className={`${CLASSNAME}__progress-overlay`}>\n <Progress variant={ProgressVariant.circular} />\n </div>\n )}\n </div>\n </ClickAwayProvider>\n </section>\n </div>,\n document.body,\n )\n : null;\n});\nDialog.displayName = COMPONENT_NAME;\nDialog.className = CLASSNAME;\nDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["useIntersectionObserver","elements","options","useState","Map","intersections","setIntersections","useEffect","length","some","Boolean","undefined","observer","IntersectionObserver","entries","entry","set","target","element","observe","disconnect","isHeader","isComponent","isFooter","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","big","Dialog","forwardRef","props","ref","DOCUMENT","children","className","header","focusElement","forceFooterDivider","forceHeaderDivider","footer","isLoading","isOpen","onClose","parentElement","contentRef","preventAutoClose","zIndex","dialogProps","onVisibilityChange","forwardedProps","previousOpen","React","useRef","current","focus","useCallbackOnEscape","wrapperRef","localContentRef","useFocusTrap","useDisableBodyScroll","sentinelTop","setSentinelTop","sentinelBottom","setSentinelBottom","threshold","hasTopIntersection","get","isIntersecting","hasBottomIntersection","useMemo","partitionMulti","Children","toArray","headerChild","footerChild","content","headerChildProps","headerChildContent","footerChildProps","footerChildContent","isVisible","useDelayedVisibility","DIALOG_TRANSITION_DURATION","clickAwayRefs","createPortal","classNames","handleBasicClasses","isHidden","isShown","prefix","mergeRefs","ProgressVariant","circular","document","body","displayName","defaultProps"],"mappings":"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"}
@@ -40,7 +40,7 @@ var DragHandle = forwardRef(function (props, ref) {
40
40
  }))
41
41
  }), React.createElement(Icon, {
42
42
  icon: mdiDragVertical,
43
- color: theme === Theme.dark ? ColorPalette.light : undefined,
43
+ color: theme === Theme.dark ? ColorPalette.light : ColorPalette.dark,
44
44
  size: Size.xs
45
45
  }));
46
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DragHandle.js","sources":["../../../src/components/drag-handle/DragHandle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiDragVertical } from '@lumx/icons';\nimport { ColorPalette, Icon, Size, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface DragHandleProps extends GenericProps {\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'DragHandle';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * DragHandle component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const DragHandle: Comp<DragHandleProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, theme, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }))}\n >\n <Icon icon={mdiDragVertical} color={theme === Theme.dark ? ColorPalette.light : undefined} size={Size.xs} />\n </div>\n );\n});\nDragHandle.displayName = COMPONENT_NAME;\nDragHandle.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DragHandle","forwardRef","props","ref","className","theme","forwardedProps","classNames","handleBasicClasses","prefix","mdiDragVertical","Theme","dark","ColorPalette","light","undefined","Size","xs","displayName"],"mappings":";;;;;;;AAQA;;;;AAQA;;;AAGA,IAAMA,cAAc,GAAG,YAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;;;;;IAOaG,UAAiD,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAChFC,SADgF,GACxCF,KADwC,CAChFE,SADgF;AAAA,MACrEC,KADqE,GACxCH,KADwC,CACrEG,KADqE;AAAA,MAC3DC,cAD2D,4BACxCJ,KADwC;;AAGxF,SACI;AACI,IAAA,GAAG,EAAEC;AADT,KAEQG,cAFR;AAGI,IAAA,SAAS,EAAEC,UAAU,CAACH,SAAD,EAAYI,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEX,SAAV;AAAqBO,MAAAA,KAAK,EAALA;AAArB,KAAD,CAA9B;AAHzB,MAKI,oBAAC,IAAD;AAAM,IAAA,IAAI,EAAEK,eAAZ;AAA6B,IAAA,KAAK,EAAEL,KAAK,KAAKM,KAAK,CAACC,IAAhB,GAAuBC,YAAY,CAACC,KAApC,GAA4CC,SAAhF;AAA2F,IAAA,IAAI,EAAEC,IAAI,CAACC;AAAtG,IALJ,CADJ;AASH,CAZ0E;AAa3EjB,UAAU,CAACkB,WAAX,GAAyBrB,cAAzB;AACAG,UAAU,CAACI,SAAX,GAAuBN,SAAvB;;;;"}
1
+ {"version":3,"file":"DragHandle.js","sources":["../../../src/components/drag-handle/DragHandle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiDragVertical } from '@lumx/icons';\nimport { ColorPalette, Icon, Size, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface DragHandleProps extends GenericProps {\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'DragHandle';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * DragHandle component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const DragHandle: Comp<DragHandleProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, theme, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }))}\n >\n <Icon\n icon={mdiDragVertical}\n color={theme === Theme.dark ? ColorPalette.light : ColorPalette.dark}\n size={Size.xs}\n />\n </div>\n );\n});\nDragHandle.displayName = COMPONENT_NAME;\nDragHandle.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DragHandle","forwardRef","props","ref","className","theme","forwardedProps","classNames","handleBasicClasses","prefix","mdiDragVertical","Theme","dark","ColorPalette","light","Size","xs","displayName"],"mappings":";;;;;;;AAQA;;;;AAQA;;;AAGA,IAAMA,cAAc,GAAG,YAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;;;;;IAOaG,UAAiD,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAChFC,SADgF,GACxCF,KADwC,CAChFE,SADgF;AAAA,MACrEC,KADqE,GACxCH,KADwC,CACrEG,KADqE;AAAA,MAC3DC,cAD2D,4BACxCJ,KADwC;;AAGxF,SACI;AACI,IAAA,GAAG,EAAEC;AADT,KAEQG,cAFR;AAGI,IAAA,SAAS,EAAEC,UAAU,CAACH,SAAD,EAAYI,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEX,SAAV;AAAqBO,MAAAA,KAAK,EAALA;AAArB,KAAD,CAA9B;AAHzB,MAKI,oBAAC,IAAD;AACI,IAAA,IAAI,EAAEK,eADV;AAEI,IAAA,KAAK,EAAEL,KAAK,KAAKM,KAAK,CAACC,IAAhB,GAAuBC,YAAY,CAACC,KAApC,GAA4CD,YAAY,CAACD,IAFpE;AAGI,IAAA,IAAI,EAAEG,IAAI,CAACC;AAHf,IALJ,CADJ;AAaH,CAhB0E;AAiB3EhB,UAAU,CAACiB,WAAX,GAAyBpB,cAAzB;AACAG,UAAU,CAACI,SAAX,GAAuBN,SAAvB;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { b as _objectWithoutProperties, c as _extends } from './_rollupPluginBabelHelpers.js';
2
- import { ColorVariant, Size, Theme, ColorPalette } from './components.js';
2
+ import { Size, Theme, ColorPalette } from './components.js';
3
3
  import React, { forwardRef } from 'react';
4
4
  import { g as getRootClassName, c as classnames, h as handleBasicClasses } from './getRootClassName.js';
5
5
  import { I as Icon } from './Icon2.js';
@@ -34,8 +34,6 @@ var Flag = forwardRef(function (props, ref) {
34
34
  ref: ref
35
35
  }), icon && React.createElement(Icon, {
36
36
  icon: icon,
37
- color: color,
38
- colorVariant: ColorVariant.D2,
39
37
  size: Size.xxs,
40
38
  className: "".concat(CLASSNAME, "__icon")
41
39
  }), React.createElement("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"Flag2.js","sources":["../../../src/components/flag/Flag.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport classNames from 'classnames';\n\nimport { ColorPalette, ColorVariant, Icon, Size, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nexport interface FlagProps extends GenericProps {\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Color of the component. */\n color?: ColorPalette;\n /** Icon to use before the label. */\n icon?: string;\n /** Text label of the flag. */\n label: string;\n}\n\nconst COMPONENT_NAME = 'Flag';\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\nconst DEFAULT_PROPS: Partial<FlagProps> = {\n theme: Theme.light,\n};\n\n/**\n * Flag component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Flag: Comp<FlagProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { label, icon, color, className, theme, ...forwardedProps } = props;\n const flagColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);\n\n return (\n <div\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, color: flagColor }))}\n ref={ref}\n >\n {icon && (\n <Icon\n icon={icon}\n color={color}\n colorVariant={ColorVariant.D2}\n size={Size.xxs}\n className={`${CLASSNAME}__icon`}\n />\n )}\n <span className={`${CLASSNAME}__label`}>{label}</span>\n </div>\n );\n});\nFlag.displayName = COMPONENT_NAME;\nFlag.className = CLASSNAME;\nFlag.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","theme","Theme","light","Flag","forwardRef","props","ref","label","icon","color","className","forwardedProps","flagColor","ColorPalette","dark","classNames","handleBasicClasses","prefix","ColorVariant","D2","Size","xxs","displayName","defaultProps"],"mappings":";;;;;;AAiBA,IAAMA,cAAc,GAAG,MAAvB;AACA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AACA,IAAMG,aAAiC,GAAG;AACtCC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AADyB,CAA1C;AAIA;;;;;;;;IAOaC,IAAqC,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MACpEC,KADoE,GACRF,KADQ,CACpEE,KADoE;AAAA,MAC7DC,IAD6D,GACRH,KADQ,CAC7DG,IAD6D;AAAA,MACvDC,KADuD,GACRJ,KADQ,CACvDI,KADuD;AAAA,MAChDC,SADgD,GACRL,KADQ,CAChDK,SADgD;AAAA,MACrCV,KADqC,GACRK,KADQ,CACrCL,KADqC;AAAA,MAC3BW,cAD2B,4BACRN,KADQ;;AAE5E,MAAMO,SAAS,GAAGH,KAAK,KAAKT,KAAK,KAAKC,KAAK,CAACC,KAAhB,GAAwBW,YAAY,CAACC,IAArC,GAA4CD,YAAY,CAACX,KAA9D,CAAvB;AAEA,SACI,wCACQS,cADR;AAEI,IAAA,SAAS,EAAEI,UAAU,CAACL,SAAD,EAAYM,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEpB,SAAV;AAAqBY,MAAAA,KAAK,EAAEG;AAA5B,KAAD,CAA9B,CAFzB;AAGI,IAAA,GAAG,EAAEN;AAHT,MAKKE,IAAI,IACD,oBAAC,IAAD;AACI,IAAA,IAAI,EAAEA,IADV;AAEI,IAAA,KAAK,EAAEC,KAFX;AAGI,IAAA,YAAY,EAAES,YAAY,CAACC,EAH/B;AAII,IAAA,IAAI,EAAEC,IAAI,CAACC,GAJf;AAKI,IAAA,SAAS,YAAKxB,SAAL;AALb,IANR,EAcI;AAAM,IAAA,SAAS,YAAKA,SAAL;AAAf,KAAyCU,KAAzC,CAdJ,CADJ;AAkBH,CAtB8D;AAuB/DJ,IAAI,CAACmB,WAAL,GAAmB1B,cAAnB;AACAO,IAAI,CAACO,SAAL,GAAiBb,SAAjB;AACAM,IAAI,CAACoB,YAAL,GAAoBxB,aAApB;;;;"}
1
+ {"version":3,"file":"Flag2.js","sources":["../../../src/components/flag/Flag.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport classNames from 'classnames';\n\nimport { ColorPalette, Icon, Size, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nexport interface FlagProps extends GenericProps {\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Color of the component. */\n color?: ColorPalette;\n /** Icon to use before the label. */\n icon?: string;\n /** Text label of the flag. */\n label: string;\n}\n\nconst COMPONENT_NAME = 'Flag';\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\nconst DEFAULT_PROPS: Partial<FlagProps> = {\n theme: Theme.light,\n};\n\n/**\n * Flag component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Flag: Comp<FlagProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { label, icon, color, className, theme, ...forwardedProps } = props;\n const flagColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);\n\n return (\n <div\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, color: flagColor }))}\n ref={ref}\n >\n {icon && <Icon icon={icon} size={Size.xxs} className={`${CLASSNAME}__icon`} />}\n <span className={`${CLASSNAME}__label`}>{label}</span>\n </div>\n );\n});\nFlag.displayName = COMPONENT_NAME;\nFlag.className = CLASSNAME;\nFlag.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","theme","Theme","light","Flag","forwardRef","props","ref","label","icon","color","className","forwardedProps","flagColor","ColorPalette","dark","classNames","handleBasicClasses","prefix","Size","xxs","displayName","defaultProps"],"mappings":";;;;;;AAiBA,IAAMA,cAAc,GAAG,MAAvB;AACA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AACA,IAAMG,aAAiC,GAAG;AACtCC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AADyB,CAA1C;AAIA;;;;;;;;IAOaC,IAAqC,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MACpEC,KADoE,GACRF,KADQ,CACpEE,KADoE;AAAA,MAC7DC,IAD6D,GACRH,KADQ,CAC7DG,IAD6D;AAAA,MACvDC,KADuD,GACRJ,KADQ,CACvDI,KADuD;AAAA,MAChDC,SADgD,GACRL,KADQ,CAChDK,SADgD;AAAA,MACrCV,KADqC,GACRK,KADQ,CACrCL,KADqC;AAAA,MAC3BW,cAD2B,4BACRN,KADQ;;AAE5E,MAAMO,SAAS,GAAGH,KAAK,KAAKT,KAAK,KAAKC,KAAK,CAACC,KAAhB,GAAwBW,YAAY,CAACC,IAArC,GAA4CD,YAAY,CAACX,KAA9D,CAAvB;AAEA,SACI,wCACQS,cADR;AAEI,IAAA,SAAS,EAAEI,UAAU,CAACL,SAAD,EAAYM,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEpB,SAAV;AAAqBY,MAAAA,KAAK,EAAEG;AAA5B,KAAD,CAA9B,CAFzB;AAGI,IAAA,GAAG,EAAEN;AAHT,MAKKE,IAAI,IAAI,oBAAC,IAAD;AAAM,IAAA,IAAI,EAAEA,IAAZ;AAAkB,IAAA,IAAI,EAAEU,IAAI,CAACC,GAA7B;AAAkC,IAAA,SAAS,YAAKtB,SAAL;AAA3C,IALb,EAMI;AAAM,IAAA,SAAS,YAAKA,SAAL;AAAf,KAAyCU,KAAzC,CANJ,CADJ;AAUH,CAd8D;AAe/DJ,IAAI,CAACiB,WAAL,GAAmBxB,cAAnB;AACAO,IAAI,CAACO,SAAL,GAAiBb,SAAjB;AACAM,IAAI,CAACkB,YAAL,GAAoBtB,aAApB;;;;"}
@@ -64,11 +64,11 @@ var Message = forwardRef(function (props, ref) {
64
64
  prefix: CLASSNAME
65
65
  }))
66
66
  }, forwardedProps), (customIcon || icon) && React.createElement(Icon, {
67
- className: "lumx-message__icon",
67
+ className: "".concat(CLASSNAME, "__icon"),
68
68
  icon: customIcon || icon,
69
69
  size: Size.xs
70
70
  }), React.createElement("div", {
71
- className: "lumx-message__text"
71
+ className: "".concat(CLASSNAME, "__text")
72
72
  }, children));
73
73
  });
74
74
  Message.displayName = COMPONENT_NAME;
@@ -1 +1 @@
1
- {"version":3,"file":"Message2.js","sources":["../../../src/components/message/Message.tsx"],"sourcesContent":["import { mdiAlert, mdiAlertCircle, mdiCheckCircle, mdiInformation } from '@lumx/icons';\nimport { ColorPalette, Icon, Kind, Size } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport classNames from 'classnames';\nimport React, { forwardRef, ReactNode } from 'react';\n\n/**\n * Defines the props of the component.\n */\nexport interface MessageProps extends GenericProps {\n /** Content. */\n children?: ReactNode;\n /** Whether the message has a background or not. */\n hasBackground?: boolean;\n /** Message variant. */\n kind?: Kind;\n /** Message custom icon SVG path. */\n icon?: string;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Message';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Associative map from message kind to color and icon.\n */\nconst CONFIG = {\n [Kind.error]: { color: ColorPalette.red, icon: mdiAlert },\n [Kind.info]: { color: ColorPalette.dark, icon: mdiInformation },\n [Kind.success]: { color: ColorPalette.green, icon: mdiCheckCircle },\n [Kind.warning]: { color: ColorPalette.yellow, icon: mdiAlertCircle },\n};\n\n/**\n * Message component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Message: Comp<MessageProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, hasBackground, kind, icon: customIcon, ...forwardedProps } = props;\n const { color, icon } = CONFIG[kind as Kind] || {};\n\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n color,\n hasBackground,\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n {(customIcon || icon) && <Icon className=\"lumx-message__icon\" icon={customIcon || icon} size={Size.xs} />}\n <div className=\"lumx-message__text\">{children}</div>\n </div>\n );\n});\nMessage.displayName = COMPONENT_NAME;\nMessage.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","CONFIG","Kind","error","color","ColorPalette","red","icon","mdiAlert","info","dark","mdiInformation","success","green","mdiCheckCircle","warning","yellow","mdiAlertCircle","Message","forwardRef","props","ref","children","className","hasBackground","kind","customIcon","forwardedProps","classNames","handleBasicClasses","prefix","Size","xs","displayName"],"mappings":";;;;;;;;AAMA;;;;AAcA;;;AAGA,IAAMA,cAAc,GAAG,SAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,MAAM,2CACPC,IAAI,CAACC,KADE,EACM;AAAEC,EAAAA,KAAK,EAAEC,YAAY,CAACC,GAAtB;AAA2BC,EAAAA,IAAI,EAAEC;AAAjC,CADN,4BAEPN,IAAI,CAACO,IAFE,EAEK;AAAEL,EAAAA,KAAK,EAAEC,YAAY,CAACK,IAAtB;AAA4BH,EAAAA,IAAI,EAAEI;AAAlC,CAFL,4BAGPT,IAAI,CAACU,OAHE,EAGQ;AAAER,EAAAA,KAAK,EAAEC,YAAY,CAACQ,KAAtB;AAA6BN,EAAAA,IAAI,EAAEO;AAAnC,CAHR,4BAIPZ,IAAI,CAACa,OAJE,EAIQ;AAAEX,EAAAA,KAAK,EAAEC,YAAY,CAACW,MAAtB;AAA8BT,EAAAA,IAAI,EAAEU;AAApC,CAJR,WAAZ;AAOA;;;;;;;;IAOaC,OAA2C,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAC1EC,QAD0E,GACQF,KADR,CAC1EE,QAD0E;AAAA,MAChEC,SADgE,GACQH,KADR,CAChEG,SADgE;AAAA,MACrDC,aADqD,GACQJ,KADR,CACrDI,aADqD;AAAA,MACtCC,IADsC,GACQL,KADR,CACtCK,IADsC;AAAA,MAC1BC,UAD0B,GACQN,KADR,CAChCb,IADgC;AAAA,MACXoB,cADW,4BACQP,KADR;;AAAA,aAE1DnB,MAAM,CAACwB,IAAD,CAAN,IAAwB,EAFkC;AAAA,MAE1ErB,KAF0E,QAE1EA,KAF0E;AAAA,MAEnEG,IAFmE,QAEnEA,IAFmE;;AAIlF,SACI;AACI,IAAA,GAAG,EAAEc,GADT;AAEI,IAAA,SAAS,EAAEO,UAAU,CACjBL,SADiB,EAEjBM,kBAAkB,CAAC;AACfzB,MAAAA,KAAK,EAALA,KADe;AAEfoB,MAAAA,aAAa,EAAbA,aAFe;AAGfM,MAAAA,MAAM,EAAE/B;AAHO,KAAD,CAFD;AAFzB,KAUQ4B,cAVR,GAYK,CAACD,UAAU,IAAInB,IAAf,KAAwB,oBAAC,IAAD;AAAM,IAAA,SAAS,EAAC,oBAAhB;AAAqC,IAAA,IAAI,EAAEmB,UAAU,IAAInB,IAAzD;AAA+D,IAAA,IAAI,EAAEwB,IAAI,CAACC;AAA1E,IAZ7B,EAaI;AAAK,IAAA,SAAS,EAAC;AAAf,KAAqCV,QAArC,CAbJ,CADJ;AAiBH,CArBoE;AAsBrEJ,OAAO,CAACe,WAAR,GAAsBnC,cAAtB;AACAoB,OAAO,CAACK,SAAR,GAAoBxB,SAApB;;;;"}
1
+ {"version":3,"file":"Message2.js","sources":["../../../src/components/message/Message.tsx"],"sourcesContent":["import { mdiAlert, mdiAlertCircle, mdiCheckCircle, mdiInformation } from '@lumx/icons';\nimport { ColorPalette, Icon, Kind, Size } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport classNames from 'classnames';\nimport React, { forwardRef, ReactNode } from 'react';\n\n/**\n * Defines the props of the component.\n */\nexport interface MessageProps extends GenericProps {\n /** Content. */\n children?: ReactNode;\n /** Whether the message has a background or not. */\n hasBackground?: boolean;\n /** Message variant. */\n kind?: Kind;\n /** Message custom icon SVG path. */\n icon?: string;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Message';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Associative map from message kind to color and icon.\n */\nconst CONFIG = {\n [Kind.error]: { color: ColorPalette.red, icon: mdiAlert },\n [Kind.info]: { color: ColorPalette.dark, icon: mdiInformation },\n [Kind.success]: { color: ColorPalette.green, icon: mdiCheckCircle },\n [Kind.warning]: { color: ColorPalette.yellow, icon: mdiAlertCircle },\n};\n\n/**\n * Message component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Message: Comp<MessageProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, hasBackground, kind, icon: customIcon, ...forwardedProps } = props;\n const { color, icon } = CONFIG[kind as Kind] || {};\n\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n color,\n hasBackground,\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n {(customIcon || icon) && <Icon className={`${CLASSNAME}__icon`} icon={customIcon || icon} size={Size.xs} />}\n <div className={`${CLASSNAME}__text`}>{children}</div>\n </div>\n );\n});\nMessage.displayName = COMPONENT_NAME;\nMessage.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","CONFIG","Kind","error","color","ColorPalette","red","icon","mdiAlert","info","dark","mdiInformation","success","green","mdiCheckCircle","warning","yellow","mdiAlertCircle","Message","forwardRef","props","ref","children","className","hasBackground","kind","customIcon","forwardedProps","classNames","handleBasicClasses","prefix","Size","xs","displayName"],"mappings":";;;;;;;;AAMA;;;;AAcA;;;AAGA,IAAMA,cAAc,GAAG,SAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,MAAM,2CACPC,IAAI,CAACC,KADE,EACM;AAAEC,EAAAA,KAAK,EAAEC,YAAY,CAACC,GAAtB;AAA2BC,EAAAA,IAAI,EAAEC;AAAjC,CADN,4BAEPN,IAAI,CAACO,IAFE,EAEK;AAAEL,EAAAA,KAAK,EAAEC,YAAY,CAACK,IAAtB;AAA4BH,EAAAA,IAAI,EAAEI;AAAlC,CAFL,4BAGPT,IAAI,CAACU,OAHE,EAGQ;AAAER,EAAAA,KAAK,EAAEC,YAAY,CAACQ,KAAtB;AAA6BN,EAAAA,IAAI,EAAEO;AAAnC,CAHR,4BAIPZ,IAAI,CAACa,OAJE,EAIQ;AAAEX,EAAAA,KAAK,EAAEC,YAAY,CAACW,MAAtB;AAA8BT,EAAAA,IAAI,EAAEU;AAApC,CAJR,WAAZ;AAOA;;;;;;;;IAOaC,OAA2C,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MAC1EC,QAD0E,GACQF,KADR,CAC1EE,QAD0E;AAAA,MAChEC,SADgE,GACQH,KADR,CAChEG,SADgE;AAAA,MACrDC,aADqD,GACQJ,KADR,CACrDI,aADqD;AAAA,MACtCC,IADsC,GACQL,KADR,CACtCK,IADsC;AAAA,MAC1BC,UAD0B,GACQN,KADR,CAChCb,IADgC;AAAA,MACXoB,cADW,4BACQP,KADR;;AAAA,aAE1DnB,MAAM,CAACwB,IAAD,CAAN,IAAwB,EAFkC;AAAA,MAE1ErB,KAF0E,QAE1EA,KAF0E;AAAA,MAEnEG,IAFmE,QAEnEA,IAFmE;;AAIlF,SACI;AACI,IAAA,GAAG,EAAEc,GADT;AAEI,IAAA,SAAS,EAAEO,UAAU,CACjBL,SADiB,EAEjBM,kBAAkB,CAAC;AACfzB,MAAAA,KAAK,EAALA,KADe;AAEfoB,MAAAA,aAAa,EAAbA,aAFe;AAGfM,MAAAA,MAAM,EAAE/B;AAHO,KAAD,CAFD;AAFzB,KAUQ4B,cAVR,GAYK,CAACD,UAAU,IAAInB,IAAf,KAAwB,oBAAC,IAAD;AAAM,IAAA,SAAS,YAAKR,SAAL,WAAf;AAAuC,IAAA,IAAI,EAAE2B,UAAU,IAAInB,IAA3D;AAAiE,IAAA,IAAI,EAAEwB,IAAI,CAACC;AAA5E,IAZ7B,EAaI;AAAK,IAAA,SAAS,YAAKjC,SAAL;AAAd,KAAuCuB,QAAvC,CAbJ,CADJ;AAiBH,CArBoE;AAsBrEJ,OAAO,CAACe,WAAR,GAAsBnC,cAAtB;AACAoB,OAAO,CAACK,SAAR,GAAoBxB,SAApB;;;;"}
@@ -302,9 +302,9 @@ function useKeyNavigate(element, onNext, onPrevious) {
302
302
  var callback;
303
303
 
304
304
  if ((evt === null || evt === void 0 ? void 0 : evt.key) === 'ArrowRight') {
305
- callback = onPrevious;
306
- } else if ((evt === null || evt === void 0 ? void 0 : evt.key) === 'ArrowLeft') {
307
305
  callback = onNext;
306
+ } else if ((evt === null || evt === void 0 ? void 0 : evt.key) === 'ArrowLeft') {
307
+ callback = onPrevious;
308
308
  }
309
309
 
310
310
  if (!callback) return;
@@ -1 +1 @@
1
- {"version":3,"file":"SlideshowControls.js","sources":["../../../src/components/slideshow/constants.ts","../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useSwipeNavigate.ts","../../../src/components/slideshow/useKeyNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx"],"sourcesContent":["/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","import React, { CSSProperties, forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';\n\nimport { AUTOPLAY_DEFAULT_INTERVAL, FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n ...forwardedProps\n } = props;\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement>();\n\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n // Start\n useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(DEFAULT_PROPS.activeIndex as number);\n }\n }, [currentIndex, slidesCount]);\n\n // Handle click on a bullet to go to a specific slide.\n const handleControlGotToSlide = useCallback(\n (index: number) => {\n setIsAutoPlaying(false);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const handleControlNextSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const handleControlPreviousSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <div\n ref={mergeRefs(ref, setElement)}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n tabIndex={0}\n >\n <div className={`${CLASSNAME}__slides`}>\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {children}\n </div>\n </div>\n\n {slideshowControlsProps && slidesCount > 1 && (\n <div className={`${CLASSNAME}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={handleControlGotToSlide}\n onNextClick={handleControlNextSlide}\n onPreviousClick={handleControlPreviousSlide}\n slidesCount={slidesCount}\n parentRef={element}\n theme={theme}\n />\n </div>\n )}\n </div>\n );\n});\nSlideshow.displayName = COMPONENT_NAME;\nSlideshow.className = CLASSNAME;\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport type SlideshowItemProps = GenericProps;\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n >\n {children}\n </div>\n );\n});\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useEffect } from 'react';\n\n/**\n * Listen keyboard to navigate left and right.\n */\nexport function useKeyNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element) return undefined;\n const onKeyNavigate = (evt: KeyboardEvent) => {\n let callback;\n if (evt?.key === 'ArrowRight') {\n callback = onPrevious;\n } else if (evt?.key === 'ArrowLeft') {\n callback = onNext;\n }\n if (!callback) return;\n\n callback();\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n element.addEventListener('keydown', onKeyNavigate);\n return () => {\n element.removeEventListener('keydown', onKeyNavigate);\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { WINDOW } from '@lumx/react/constants';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { useKeyNavigate } from './useKeyNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n // Listen to keyboard navigate left & right.\n useKeyNavigate(parent, onNextClick, onPreviousClick);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n tabIndex={-1}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n // eslint-disable-next-line jsx-a11y/control-has-associated-label\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n tabIndex={-1}\n />\n );\n }),\n [slidesCount, visibleRange.min, visibleRange.max, activeIndex, onPaginationClick],\n )}\n </div>\n </div>\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n tabIndex={-1}\n />\n </div>\n );\n});\nSlideshowControls.displayName = COMPONENT_NAME;\nSlideshowControls.className = CLASSNAME;\nSlideshowControls.defaultProps = DEFAULT_PROPS;\n"],"names":["AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","activeIndex","groupBy","interval","theme","Theme","light","Slideshow","forwardRef","props","ref","autoPlay","children","className","fillHeight","onChange","slideshowControlsProps","forwardedProps","useState","currentIndex","setCurrentIndex","element","setElement","itemsCount","React","Children","count","slidesCount","Math","ceil","min","wrapperStyle","transform","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","handleControlGotToSlide","handleControlNextSlide","handleControlPreviousSlide","mergeRefs","classNames","handleBasicClasses","prefix","displayName","defaultProps","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","useKeyNavigate","onKeyNavigate","evt","key","preventDefault","stopPropagation","addEventListener","removeEventListener","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","SlideshowControls","nextButtonProps","onNextClick","onPaginationClick","onPreviousClick","parentRef","previousButtonProps","parent","WINDOW","HTMLElement","visibleRange","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiChevronRight"],"mappings":"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"}
1
+ {"version":3,"file":"SlideshowControls.js","sources":["../../../src/components/slideshow/constants.ts","../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useSwipeNavigate.ts","../../../src/components/slideshow/useKeyNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx"],"sourcesContent":["/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","import React, { CSSProperties, forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme } from '@lumx/react';\n\nimport { AUTOPLAY_DEFAULT_INTERVAL, FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n ...forwardedProps\n } = props;\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement>();\n\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * currentIndex}%)` };\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n // Start\n useInterval(goToNextSlide, isAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(DEFAULT_PROPS.activeIndex as number);\n }\n }, [currentIndex, slidesCount]);\n\n // Handle click on a bullet to go to a specific slide.\n const handleControlGotToSlide = useCallback(\n (index: number) => {\n setIsAutoPlaying(false);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const handleControlNextSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const handleControlPreviousSlide = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <div\n ref={mergeRefs(ref, setElement)}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n tabIndex={0}\n >\n <div className={`${CLASSNAME}__slides`}>\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {children}\n </div>\n </div>\n\n {slideshowControlsProps && slidesCount > 1 && (\n <div className={`${CLASSNAME}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={handleControlGotToSlide}\n onNextClick={handleControlNextSlide}\n onPreviousClick={handleControlPreviousSlide}\n slidesCount={slidesCount}\n parentRef={element}\n theme={theme}\n />\n </div>\n )}\n </div>\n );\n});\nSlideshow.displayName = COMPONENT_NAME;\nSlideshow.className = CLASSNAME;\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport type SlideshowItemProps = GenericProps;\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n >\n {children}\n </div>\n );\n});\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useEffect } from 'react';\n\n/**\n * Listen keyboard to navigate left and right.\n */\nexport function useKeyNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element) return undefined;\n const onKeyNavigate = (evt: KeyboardEvent) => {\n let callback;\n if (evt?.key === 'ArrowRight') {\n callback = onNext;\n } else if (evt?.key === 'ArrowLeft') {\n callback = onPrevious;\n }\n if (!callback) return;\n\n callback();\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n element.addEventListener('keydown', onKeyNavigate);\n return () => {\n element.removeEventListener('keydown', onKeyNavigate);\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { WINDOW } from '@lumx/react/constants';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { useKeyNavigate } from './useKeyNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n // Listen to keyboard navigate left & right.\n useKeyNavigate(parent, onNextClick, onPreviousClick);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n tabIndex={-1}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n // eslint-disable-next-line jsx-a11y/control-has-associated-label\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n tabIndex={-1}\n />\n );\n }),\n [slidesCount, visibleRange.min, visibleRange.max, activeIndex, onPaginationClick],\n )}\n </div>\n </div>\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n tabIndex={-1}\n />\n </div>\n );\n});\nSlideshowControls.displayName = COMPONENT_NAME;\nSlideshowControls.className = CLASSNAME;\nSlideshowControls.defaultProps = DEFAULT_PROPS;\n"],"names":["AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","activeIndex","groupBy","interval","theme","Theme","light","Slideshow","forwardRef","props","ref","autoPlay","children","className","fillHeight","onChange","slideshowControlsProps","forwardedProps","useState","currentIndex","setCurrentIndex","element","setElement","itemsCount","React","Children","count","slidesCount","Math","ceil","min","wrapperStyle","transform","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","handleControlGotToSlide","handleControlNextSlide","handleControlPreviousSlide","mergeRefs","classNames","handleBasicClasses","prefix","displayName","defaultProps","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","useKeyNavigate","onKeyNavigate","evt","key","preventDefault","stopPropagation","addEventListener","removeEventListener","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","SlideshowControls","nextButtonProps","onNextClick","onPaginationClick","onPreviousClick","parentRef","previousButtonProps","parent","WINDOW","HTMLElement","visibleRange","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiChevronRight"],"mappings":"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"}
@@ -750,26 +750,6 @@ function useImageLoad(imgRef) {
750
750
  return state;
751
751
  }
752
752
 
753
- var useClickable = function useClickable(_ref) {
754
- var onClick = _ref.onClick,
755
- _onKeyPress = _ref.onKeyPress;
756
- return useMemo(function () {
757
- if (!onClick) return undefined;
758
- return {
759
- role: 'button',
760
- tabIndex: 0,
761
- onClick: onClick,
762
- onKeyPress: function onKeyPress(event) {
763
- _onKeyPress === null || _onKeyPress === void 0 ? void 0 : _onKeyPress(event);
764
-
765
- if (event.key === 'Enter' || event.key === ' ') {
766
- onClick === null || onClick === void 0 ? void 0 : onClick();
767
- }
768
- }
769
- };
770
- }, [onClick, _onKeyPress]);
771
- };
772
-
773
753
  /**
774
754
  * Component display name.
775
755
  */
@@ -815,7 +795,9 @@ var Thumbnail = forwardRef(function (props, ref) {
815
795
  size = props.size,
816
796
  theme = props.theme,
817
797
  variant = props.variant,
818
- forwardedProps = _objectWithoutProperties(props, ["align", "alt", "aspectRatio", "badge", "className", "crossOrigin", "fallback", "fillHeight", "focusPoint", "image", "imgProps", "imgRef", "loading", "size", "theme", "variant"]);
798
+ linkProps = props.linkProps,
799
+ linkAs = props.linkAs,
800
+ forwardedProps = _objectWithoutProperties(props, ["align", "alt", "aspectRatio", "badge", "className", "crossOrigin", "fallback", "fillHeight", "focusPoint", "image", "imgProps", "imgRef", "loading", "size", "theme", "variant", "linkProps", "linkAs"]);
819
801
 
820
802
  var imgRef = useRef(null); // Image loading state.
821
803
 
@@ -828,18 +810,19 @@ var Thumbnail = forwardRef(function (props, ref) {
828
810
  wrapper = _useState2[0],
829
811
  setWrapper = _useState2[1];
830
812
 
831
- var wrapperProps = _objectSpread2({}, forwardedProps, {
832
- ref: mergeRefs(setWrapper, ref),
833
- className: classnames(className, handleBasicClasses({
834
- align: align,
835
- aspectRatio: aspectRatio,
836
- prefix: CLASSNAME,
837
- size: size,
838
- theme: theme,
839
- variant: variant,
840
- hasBadge: !!badge
841
- }), isLoading && (wrapper === null || wrapper === void 0 ? void 0 : (_wrapper$getBoundingC = wrapper.getBoundingClientRect()) === null || _wrapper$getBoundingC === void 0 ? void 0 : _wrapper$getBoundingC.height) && 'lumx-color-background-dark-L6', fillHeight && "".concat(CLASSNAME, "--fill-height"))
842
- }, useClickable(props)); // Update img style according to focus point and aspect ratio.
813
+ var isLink = Boolean((linkProps === null || linkProps === void 0 ? void 0 : linkProps.href) || linkAs);
814
+ var isButton = !!forwardedProps.onClick;
815
+ var isClickable = isButton || isLink;
816
+ var Wrapper = 'div';
817
+
818
+ var wrapperProps = _objectSpread2({}, forwardedProps);
819
+
820
+ if (isLink) {
821
+ Wrapper = linkAs || 'a';
822
+ Object.assign(wrapperProps, linkProps);
823
+ } else if (isButton) {
824
+ Wrapper = 'button';
825
+ } // Update img style according to focus point and aspect ratio.
843
826
 
844
827
 
845
828
  var style = useFocusPoint({
@@ -850,7 +833,19 @@ var Thumbnail = forwardRef(function (props, ref) {
850
833
  loadingState: loadingState,
851
834
  wrapper: wrapper
852
835
  });
853
- return React.createElement("div", wrapperProps, React.createElement("div", {
836
+ return React.createElement(Wrapper, _extends({}, wrapperProps, {
837
+ ref: mergeRefs(setWrapper, ref),
838
+ className: classnames(linkProps === null || linkProps === void 0 ? void 0 : linkProps.className, className, handleBasicClasses({
839
+ align: align,
840
+ aspectRatio: aspectRatio,
841
+ prefix: CLASSNAME,
842
+ size: size,
843
+ theme: theme,
844
+ variant: variant,
845
+ isClickable: isClickable,
846
+ hasBadge: !!badge
847
+ }), isLoading && (wrapper === null || wrapper === void 0 ? void 0 : (_wrapper$getBoundingC = wrapper.getBoundingClientRect()) === null || _wrapper$getBoundingC === void 0 ? void 0 : _wrapper$getBoundingC.height) && 'lumx-color-background-dark-L6', fillHeight && "".concat(CLASSNAME, "--fill-height"))
848
+ }), React.createElement("div", {
854
849
  className: "".concat(CLASSNAME, "__background"),
855
850
  style: _objectSpread2({}, style === null || style === void 0 ? void 0 : style.wrapper, {
856
851
  // Remove from layout if image not loaded correctly (use fallback)