@lumx/react 2.1.9-prefer-css-color-variables4 → 2.2.1-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 (67) hide show
  1. package/esm/_internal/Avatar2.js +7 -2
  2. package/esm/_internal/Avatar2.js.map +1 -1
  3. package/esm/_internal/Slider2.js +21 -2
  4. package/esm/_internal/Slider2.js.map +1 -1
  5. package/esm/_internal/Thumbnail2.js +181 -782
  6. package/esm/_internal/Thumbnail2.js.map +1 -1
  7. package/esm/_internal/Tooltip2.js +0 -5
  8. package/esm/_internal/Tooltip2.js.map +1 -1
  9. package/esm/_internal/UserBlock.js +41 -17
  10. package/esm/_internal/UserBlock.js.map +1 -1
  11. package/esm/_internal/avatar.js +0 -3
  12. package/esm/_internal/avatar.js.map +1 -1
  13. package/esm/_internal/comment-block.js +0 -3
  14. package/esm/_internal/comment-block.js.map +1 -1
  15. package/esm/_internal/image-block.js +0 -3
  16. package/esm/_internal/image-block.js.map +1 -1
  17. package/esm/_internal/link-preview.js +0 -3
  18. package/esm/_internal/link-preview.js.map +1 -1
  19. package/esm/_internal/mdi.js +2 -2
  20. package/esm/_internal/mdi.js.map +1 -1
  21. package/esm/_internal/mosaic.js +0 -3
  22. package/esm/_internal/mosaic.js.map +1 -1
  23. package/esm/_internal/post-block.js +0 -3
  24. package/esm/_internal/post-block.js.map +1 -1
  25. package/esm/_internal/slider.js +1 -2
  26. package/esm/_internal/slider.js.map +1 -1
  27. package/esm/_internal/thumbnail.js +1 -4
  28. package/esm/_internal/thumbnail.js.map +1 -1
  29. package/esm/_internal/types.js +1 -0
  30. package/esm/_internal/types.js.map +1 -1
  31. package/esm/_internal/user-block.js +2 -3
  32. package/esm/_internal/user-block.js.map +1 -1
  33. package/esm/index.js +2 -4
  34. package/esm/index.js.map +1 -1
  35. package/package.json +4 -4
  36. package/src/components/avatar/Avatar.stories.tsx +30 -53
  37. package/src/components/avatar/Avatar.tsx +9 -0
  38. package/src/components/avatar/__snapshots__/Avatar.test.tsx.snap +220 -357
  39. package/src/components/image-block/__snapshots__/ImageBlock.test.tsx.snap +1 -1
  40. package/src/components/mosaic/__snapshots__/Mosaic.test.tsx.snap +30 -30
  41. package/src/components/post-block/__snapshots__/PostBlock.test.tsx.snap +1 -1
  42. package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +10 -10
  43. package/src/components/table/__snapshots__/Table.test.tsx.snap +3 -3
  44. package/src/components/thumbnail/Thumbnail.stories.tsx +428 -52
  45. package/src/components/thumbnail/Thumbnail.test.tsx +8 -2
  46. package/src/components/thumbnail/Thumbnail.tsx +84 -47
  47. package/src/components/thumbnail/__snapshots__/Thumbnail.test.tsx.snap +28 -81
  48. package/src/components/thumbnail/index.ts +1 -0
  49. package/src/components/thumbnail/useFocusPointStyle.tsx +89 -0
  50. package/src/components/thumbnail/useImageLoad.ts +24 -23
  51. package/src/components/tooltip/Tooltip.stories.tsx +7 -4
  52. package/src/components/tooltip/useInjectTooltipRef.tsx +1 -3
  53. package/src/components/user-block/UserBlock.stories.tsx +65 -105
  54. package/src/components/user-block/UserBlock.test.tsx +6 -0
  55. package/src/components/user-block/UserBlock.tsx +50 -25
  56. package/src/components/user-block/__snapshots__/UserBlock.test.tsx.snap +113 -144
  57. package/src/stories/generated/Badge/Demos.stories.tsx +1 -0
  58. package/src/stories/generated/Flag/Demos.stories.tsx +6 -0
  59. package/src/stories/generated/Thumbnail/Demos.stories.tsx +1 -0
  60. package/src/stories/knobs/focusKnob.ts +1 -1
  61. package/src/stories/knobs/image.ts +35 -3
  62. package/src/stories/utils/CustomLink.tsx +7 -0
  63. package/types.d.ts +21 -4
  64. package/esm/_internal/clamp.js +0 -22
  65. package/esm/_internal/clamp.js.map +0 -1
  66. package/src/components/thumbnail/useClickable.ts +0 -26
  67. package/src/components/thumbnail/useFocusPoint.ts +0 -154
@@ -39,12 +39,14 @@ var Avatar = forwardRef(function (props, ref) {
39
39
  badge = props.badge,
40
40
  className = props.className,
41
41
  image = props.image,
42
+ linkProps = props.linkProps,
43
+ linkAs = props.linkAs,
42
44
  onClick = props.onClick,
43
45
  onKeyPress = props.onKeyPress,
44
46
  size = props.size,
45
47
  theme = props.theme,
46
48
  thumbnailProps = props.thumbnailProps,
47
- forwardedProps = _objectWithoutProperties(props, ["actions", "alt", "badge", "className", "image", "onClick", "onKeyPress", "size", "theme", "thumbnailProps"]);
49
+ forwardedProps = _objectWithoutProperties(props, ["actions", "alt", "badge", "className", "image", "linkProps", "linkAs", "onClick", "onKeyPress", "size", "theme", "thumbnailProps"]);
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
@@ -62,7 +66,8 @@ var Avatar = forwardRef(function (props, ref) {
62
66
  aspectRatio: AspectRatio.square,
63
67
  size: size,
64
68
  image: image,
65
- alt: alt
69
+ alt: alt,
70
+ theme: theme
66
71
  })), actions && React.createElement("div", {
67
72
  className: "".concat(CLASSNAME, "__actions")
68
73
  }, actions), badge && React.createElement("div", {
@@ -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 /** 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 /** 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 linkProps,\n linkAs,\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 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 theme={theme}\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","linkProps","linkAs","onClick","onKeyPress","thumbnailProps","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,SAP4E,GAe5EP,KAf4E,CAO5EO,SAP4E;AAAA,MAQ5EC,MAR4E,GAe5ER,KAf4E,CAQ5EQ,MAR4E;AAAA,MAS5EC,OAT4E,GAe5ET,KAf4E,CAS5ES,OAT4E;AAAA,MAU5EC,UAV4E,GAe5EV,KAf4E,CAU5EU,UAV4E;AAAA,MAW5ElB,IAX4E,GAe5EQ,KAf4E,CAW5ER,IAX4E;AAAA,MAY5EG,KAZ4E,GAe5EK,KAf4E,CAY5EL,KAZ4E;AAAA,MAa5EgB,cAb4E,GAe5EX,KAf4E,CAa5EW,cAb4E;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,EAAEY,SADf;AAEI,IAAA,MAAM,EAAEC,MAFZ;AAGI,IAAA,SAAS,YAAKnB,SAAL,gBAHb;AAII,IAAA,OAAO,EAAEoB,OAJb;AAKI,IAAA,UAAU,EAAEC;AALhB,KAMQC,cANR;AAOI,IAAA,WAAW,EAAEK,WAAW,CAACC,MAP7B;AAQI,IAAA,IAAI,EAAEzB,IARV;AASI,IAAA,KAAK,EAAEc,KATX;AAUI,IAAA,GAAG,EAAEH,GAVT;AAWI,IAAA,KAAK,EAAER;AAXX,KALJ,EAkBKO,OAAO,IAAI;AAAK,IAAA,SAAS,YAAKb,SAAL;AAAd,KAA0Ca,OAA1C,CAlBhB,EAmBKE,KAAK,IAAI;AAAK,IAAA,SAAS,YAAKf,SAAL;AAAd,KAAwCe,KAAxC,CAnBd,CADJ;AAuBH,CAxCkE;AAyCnEN,MAAM,CAACoB,WAAP,GAAqB9B,cAArB;AACAU,MAAM,CAACO,SAAP,GAAmBhB,SAAnB;AACAS,MAAM,CAACqB,YAAP,GAAsB5B,aAAtB;;;;"}
@@ -5,7 +5,6 @@ import { g as getRootClassName, c as classnames, h as handleBasicClasses } from
5
5
  import { u as uid } from '../index2.js';
6
6
  import { I as InputHelper } from './InputHelper.js';
7
7
  import { I as InputLabel } from './InputLabel.js';
8
- import { c as clamp } from './clamp.js';
9
8
 
10
9
  var useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
11
10
  /**
@@ -25,6 +24,26 @@ function useEventCallback(fn) {
25
24
  }, []);
26
25
  }
27
26
 
27
+ /**
28
+ * Clamp value in range.
29
+ *
30
+ * @param value Value to clamp.
31
+ * @param min Minimum value.
32
+ * @param max Maximum value.
33
+ * @return Clamped value.
34
+ */
35
+ var clamp = function clamp(value, min, max) {
36
+ if (value < min) {
37
+ return min;
38
+ }
39
+
40
+ if (value > max) {
41
+ return max;
42
+ }
43
+
44
+ return value;
45
+ };
46
+
28
47
  /**
29
48
  * Defines the props of the component.
30
49
  */
@@ -304,5 +323,5 @@ Slider.displayName = COMPONENT_NAME;
304
323
  Slider.className = CLASSNAME;
305
324
  Slider.defaultProps = DEFAULT_PROPS;
306
325
 
307
- export { Slider as S };
326
+ export { Slider as S, clamp as c };
308
327
  //# sourceMappingURL=Slider2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Slider2.js","sources":["../../../src/hooks/useEventCallback.tsx","../../../src/components/slider/Slider.tsx"],"sourcesContent":["import React from 'react';\n\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param fn A function to run\n * @return A React callback\n */\nexport default function useEventCallback(fn: (...args: any[]) => any): (event: any) => any {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useCallback((event: any) => ref.current(event), []);\n}\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React, { forwardRef, SyntheticEvent, useMemo, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { InputHelper, InputLabel, Theme } from '@lumx/react';\n\nimport useEventCallback from '@lumx/react/hooks/useEventCallback';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { uid } from 'uid';\nimport { clamp } from '@lumx/react/utils/clamp';\n\n/**\n * Defines the props of the component.\n */\nexport interface SliderProps extends GenericProps {\n /** Helper text. */\n helper?: string;\n /** Whether the min and max labels should be hidden or not. */\n hideMinMaxLabel?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Label text. */\n label?: string;\n /** Maximum value on the range. */\n max: number;\n /** Minimum value of the range. */\n min: number;\n /** Native input name property. */\n name?: string;\n /** Number of digits in the fractional part of the selected value. */\n precision?: number;\n /** Range step value. */\n steps?: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Selected ranged value. */\n value: number;\n /** On change callback. */\n onChange(value: number, name?: string, event?: SyntheticEvent): void;\n /** On click callback. */\n onMouseDown?(event: React.SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slider';\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<SliderProps> = {\n precision: 0,\n steps: 0,\n theme: Theme.light,\n};\n\n/**\n * Convert a percent value to a value in range min - max.\n *\n * @param percent Value to convert.\n * @param min Minimum value.\n * @param max Maximum value.\n * @param precision Precision.\n * @return Value in range min - max\n */\nconst computeValueFromPercent = (percent: number, min: number, max: number, precision = 0): number =>\n Number((min + percent * (max - min)).toFixed(precision));\n\n/**\n * Convert a value in range min - max to a percent value.\n *\n * @param value Value to convert.\n * @param min Minimum value.\n * @param max Maximum value.\n * @return Value in percent\n */\nconst computePercentFromValue = (value: number, min: number, max: number): number =>\n Number((value - min) / (max - min));\n\n/**\n * Slider component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slider: Comp<SliderProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n className,\n disabled,\n helper,\n hideMinMaxLabel,\n id,\n isDisabled = disabled,\n label,\n max,\n min,\n name,\n onChange,\n onMouseDown,\n precision,\n steps,\n theme,\n value,\n ...forwardedProps\n } = props;\n const sliderId = useMemo(() => id || `slider-${uid()}`, [id]);\n const sliderLabelId = useMemo(() => `label-${sliderId}`, [sliderId]);\n const sliderRef = useRef<HTMLDivElement>(null);\n\n // build a lookup array for the steps.\n const availableSteps = useMemo((): number[] => {\n if (!steps) return [];\n\n const available = [0];\n const percentStep = 1 / ((max - min) / steps);\n let ptr = 0;\n while (ptr + percentStep < 1) {\n ptr += percentStep;\n available.push(ptr);\n }\n return available;\n }, [steps, min, max]);\n\n /**\n * Try to find the closest step to the current slider position.\n *\n * @param percentValue Reference value\n * @return The closest step value\n */\n const findClosestStep = (percentValue: number): number => {\n const closest = availableSteps.reduce(\n (acc, step) => {\n const aDst = Math.abs(percentValue - step);\n if (aDst < acc.dst) {\n return { dst: aDst, val: step };\n }\n return acc;\n },\n { dst: Infinity, val: -1 },\n );\n return closest.val;\n };\n\n /**\n * Convert slider's handle position to percent.\n *\n * @param event The interaction event\n * @param slider the slider element\n * @return The computed percent value\n */\n const getPercentValue = (event: React.MouseEvent, slider: HTMLDivElement): number => {\n const { width, left } = slider.getBoundingClientRect();\n let percent = (event.pageX - left - window.pageXOffset) / width;\n percent = clamp(percent, 0, 1);\n if (steps) {\n percent = findClosestStep(percent);\n }\n return percent;\n };\n\n /**\n * Register a handler for the mouse move event.\n */\n const handleMove = useEventCallback((event: React.MouseEvent) => {\n const { current: slider } = sliderRef;\n if (!slider || !onChange) return;\n const newValue = getPercentValue(event, slider);\n onChange(computeValueFromPercent(newValue, min, max, precision), name, event);\n });\n\n /**\n * Register a handler for the mouse up event.\n * Clean a all listeners.\n */\n const handleEnd = useEventCallback(() => {\n document.body.removeEventListener('mousemove', handleMove);\n document.body.removeEventListener('mouseup', handleEnd);\n document.body.removeEventListener('touchmove', handleMove);\n document.body.removeEventListener('touchend', handleEnd);\n });\n\n /**\n * Move to the next or previous value (i.e. + or - 10%) or next step\n * @param previous Should seek the previous value.\n */\n const hopToValue = (previous = false) => {\n const oldPercent = computePercentFromValue(value, min, max);\n let percent = clamp(oldPercent + (previous ? -0.1 : 0.1), 0, 1);\n if (steps) {\n percent = oldPercent + availableSteps[1] * (previous ? -1 : 1);\n percent = findClosestStep(percent);\n }\n if (onChange) {\n onChange(computeValueFromPercent(percent, min, max, precision), name);\n }\n };\n\n /**\n * Register a handler for keyboard interactions\n */\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent) => {\n if (event.key === 'ArrowRight') {\n hopToValue();\n } else if (event.key === 'ArrowLeft') {\n hopToValue(true);\n }\n });\n\n /**\n * Register a handler for the mouseDown event.\n */\n const handleMouseDown = useEventCallback((event: React.MouseEvent) => {\n onMouseDown?.(event);\n\n const { current: slider } = sliderRef;\n if (isDisabled || !slider) return;\n const newValue = getPercentValue(event, slider);\n if (onChange) {\n onChange(computeValueFromPercent(newValue, min, max, precision), name, event);\n }\n\n document.body.addEventListener('mousemove', handleMove);\n document.body.addEventListener('mouseup', handleEnd);\n });\n\n const percentString = `${computePercentFromValue(value, min, max) * 100}%`;\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({ prefix: CLASSNAME, theme, hasLabel: Boolean(label) }),\n )}\n onMouseDown={handleMouseDown}\n aria-disabled={isDisabled}\n >\n {label && (\n <InputLabel id={sliderLabelId} htmlFor={sliderId} className={`${CLASSNAME}__label`} theme={theme}>\n {label}\n </InputLabel>\n )}\n\n {helper && (\n <InputHelper className={`${CLASSNAME}__helper`} theme={theme}>\n {helper}\n </InputHelper>\n )}\n\n <div className={`${CLASSNAME}__ui-wrapper`}>\n {!hideMinMaxLabel && (\n <span className={`${CLASSNAME}__value-label ${CLASSNAME}__value-label--min`}>{min}</span>\n )}\n <div className={`${CLASSNAME}__wrapper`} ref={sliderRef}>\n <div className={`${CLASSNAME}__track ${CLASSNAME}__track--background`} />\n <div\n className={`${CLASSNAME}__track ${CLASSNAME}__track--active`}\n style={{ width: percentString }}\n />\n {steps ? (\n <div className={`${CLASSNAME}__ticks`}>\n {availableSteps.map((step, idx) => (\n <div\n key={`tick_${idx}`}\n className={`${CLASSNAME}__tick`}\n style={{ left: `${step * 100}%` }}\n />\n ))}\n </div>\n ) : null}\n <button\n type=\"button\"\n aria-labelledby={sliderLabelId}\n name={name}\n id={sliderId}\n className={`${CLASSNAME}__handle`}\n style={{ left: percentString }}\n onKeyDown={handleKeyDown}\n disabled={isDisabled}\n />\n </div>\n {!hideMinMaxLabel && (\n <span className={`${CLASSNAME}__value-label ${CLASSNAME}__value-label--max`}>{max}</span>\n )}\n </div>\n </div>\n );\n});\nSlider.displayName = COMPONENT_NAME;\nSlider.className = CLASSNAME;\nSlider.defaultProps = DEFAULT_PROPS;\n"],"names":["useEnhancedEffect","window","React","useLayoutEffect","useEffect","useEventCallback","fn","ref","useRef","current","useCallback","event","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","precision","steps","theme","Theme","light","computeValueFromPercent","percent","min","max","Number","toFixed","computePercentFromValue","value","Slider","forwardRef","props","className","disabled","helper","hideMinMaxLabel","id","isDisabled","label","name","onChange","onMouseDown","forwardedProps","sliderId","useMemo","uid","sliderLabelId","sliderRef","availableSteps","available","percentStep","ptr","push","findClosestStep","percentValue","closest","reduce","acc","step","aDst","Math","abs","dst","val","Infinity","getPercentValue","slider","getBoundingClientRect","width","left","pageX","pageXOffset","clamp","handleMove","newValue","handleEnd","document","body","removeEventListener","hopToValue","previous","oldPercent","handleKeyDown","key","handleMouseDown","addEventListener","percentString","classNames","handleBasicClasses","prefix","hasLabel","Boolean","map","idx","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"Slider2.js","sources":["../../../src/hooks/useEventCallback.tsx","../../../src/utils/clamp.ts","../../../src/components/slider/Slider.tsx"],"sourcesContent":["import React from 'react';\n\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param fn A function to run\n * @return A React callback\n */\nexport default function useEventCallback(fn: (...args: any[]) => any): (event: any) => any {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useCallback((event: any) => ref.current(event), []);\n}\n","/**\n * Clamp value in range.\n *\n * @param value Value to clamp.\n * @param min Minimum value.\n * @param max Maximum value.\n * @return Clamped value.\n */\nexport const clamp = (value: number, min: number, max: number): number => {\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n};\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React, { forwardRef, SyntheticEvent, useMemo, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { InputHelper, InputLabel, Theme } from '@lumx/react';\n\nimport useEventCallback from '@lumx/react/hooks/useEventCallback';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { uid } from 'uid';\nimport { clamp } from '@lumx/react/utils/clamp';\n\n/**\n * Defines the props of the component.\n */\nexport interface SliderProps extends GenericProps {\n /** Helper text. */\n helper?: string;\n /** Whether the min and max labels should be hidden or not. */\n hideMinMaxLabel?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Label text. */\n label?: string;\n /** Maximum value on the range. */\n max: number;\n /** Minimum value of the range. */\n min: number;\n /** Native input name property. */\n name?: string;\n /** Number of digits in the fractional part of the selected value. */\n precision?: number;\n /** Range step value. */\n steps?: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Selected ranged value. */\n value: number;\n /** On change callback. */\n onChange(value: number, name?: string, event?: SyntheticEvent): void;\n /** On click callback. */\n onMouseDown?(event: React.SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slider';\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<SliderProps> = {\n precision: 0,\n steps: 0,\n theme: Theme.light,\n};\n\n/**\n * Convert a percent value to a value in range min - max.\n *\n * @param percent Value to convert.\n * @param min Minimum value.\n * @param max Maximum value.\n * @param precision Precision.\n * @return Value in range min - max\n */\nconst computeValueFromPercent = (percent: number, min: number, max: number, precision = 0): number =>\n Number((min + percent * (max - min)).toFixed(precision));\n\n/**\n * Convert a value in range min - max to a percent value.\n *\n * @param value Value to convert.\n * @param min Minimum value.\n * @param max Maximum value.\n * @return Value in percent\n */\nconst computePercentFromValue = (value: number, min: number, max: number): number =>\n Number((value - min) / (max - min));\n\n/**\n * Slider component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slider: Comp<SliderProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n className,\n disabled,\n helper,\n hideMinMaxLabel,\n id,\n isDisabled = disabled,\n label,\n max,\n min,\n name,\n onChange,\n onMouseDown,\n precision,\n steps,\n theme,\n value,\n ...forwardedProps\n } = props;\n const sliderId = useMemo(() => id || `slider-${uid()}`, [id]);\n const sliderLabelId = useMemo(() => `label-${sliderId}`, [sliderId]);\n const sliderRef = useRef<HTMLDivElement>(null);\n\n // build a lookup array for the steps.\n const availableSteps = useMemo((): number[] => {\n if (!steps) return [];\n\n const available = [0];\n const percentStep = 1 / ((max - min) / steps);\n let ptr = 0;\n while (ptr + percentStep < 1) {\n ptr += percentStep;\n available.push(ptr);\n }\n return available;\n }, [steps, min, max]);\n\n /**\n * Try to find the closest step to the current slider position.\n *\n * @param percentValue Reference value\n * @return The closest step value\n */\n const findClosestStep = (percentValue: number): number => {\n const closest = availableSteps.reduce(\n (acc, step) => {\n const aDst = Math.abs(percentValue - step);\n if (aDst < acc.dst) {\n return { dst: aDst, val: step };\n }\n return acc;\n },\n { dst: Infinity, val: -1 },\n );\n return closest.val;\n };\n\n /**\n * Convert slider's handle position to percent.\n *\n * @param event The interaction event\n * @param slider the slider element\n * @return The computed percent value\n */\n const getPercentValue = (event: React.MouseEvent, slider: HTMLDivElement): number => {\n const { width, left } = slider.getBoundingClientRect();\n let percent = (event.pageX - left - window.pageXOffset) / width;\n percent = clamp(percent, 0, 1);\n if (steps) {\n percent = findClosestStep(percent);\n }\n return percent;\n };\n\n /**\n * Register a handler for the mouse move event.\n */\n const handleMove = useEventCallback((event: React.MouseEvent) => {\n const { current: slider } = sliderRef;\n if (!slider || !onChange) return;\n const newValue = getPercentValue(event, slider);\n onChange(computeValueFromPercent(newValue, min, max, precision), name, event);\n });\n\n /**\n * Register a handler for the mouse up event.\n * Clean a all listeners.\n */\n const handleEnd = useEventCallback(() => {\n document.body.removeEventListener('mousemove', handleMove);\n document.body.removeEventListener('mouseup', handleEnd);\n document.body.removeEventListener('touchmove', handleMove);\n document.body.removeEventListener('touchend', handleEnd);\n });\n\n /**\n * Move to the next or previous value (i.e. + or - 10%) or next step\n * @param previous Should seek the previous value.\n */\n const hopToValue = (previous = false) => {\n const oldPercent = computePercentFromValue(value, min, max);\n let percent = clamp(oldPercent + (previous ? -0.1 : 0.1), 0, 1);\n if (steps) {\n percent = oldPercent + availableSteps[1] * (previous ? -1 : 1);\n percent = findClosestStep(percent);\n }\n if (onChange) {\n onChange(computeValueFromPercent(percent, min, max, precision), name);\n }\n };\n\n /**\n * Register a handler for keyboard interactions\n */\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent) => {\n if (event.key === 'ArrowRight') {\n hopToValue();\n } else if (event.key === 'ArrowLeft') {\n hopToValue(true);\n }\n });\n\n /**\n * Register a handler for the mouseDown event.\n */\n const handleMouseDown = useEventCallback((event: React.MouseEvent) => {\n onMouseDown?.(event);\n\n const { current: slider } = sliderRef;\n if (isDisabled || !slider) return;\n const newValue = getPercentValue(event, slider);\n if (onChange) {\n onChange(computeValueFromPercent(newValue, min, max, precision), name, event);\n }\n\n document.body.addEventListener('mousemove', handleMove);\n document.body.addEventListener('mouseup', handleEnd);\n });\n\n const percentString = `${computePercentFromValue(value, min, max) * 100}%`;\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({ prefix: CLASSNAME, theme, hasLabel: Boolean(label) }),\n )}\n onMouseDown={handleMouseDown}\n aria-disabled={isDisabled}\n >\n {label && (\n <InputLabel id={sliderLabelId} htmlFor={sliderId} className={`${CLASSNAME}__label`} theme={theme}>\n {label}\n </InputLabel>\n )}\n\n {helper && (\n <InputHelper className={`${CLASSNAME}__helper`} theme={theme}>\n {helper}\n </InputHelper>\n )}\n\n <div className={`${CLASSNAME}__ui-wrapper`}>\n {!hideMinMaxLabel && (\n <span className={`${CLASSNAME}__value-label ${CLASSNAME}__value-label--min`}>{min}</span>\n )}\n <div className={`${CLASSNAME}__wrapper`} ref={sliderRef}>\n <div className={`${CLASSNAME}__track ${CLASSNAME}__track--background`} />\n <div\n className={`${CLASSNAME}__track ${CLASSNAME}__track--active`}\n style={{ width: percentString }}\n />\n {steps ? (\n <div className={`${CLASSNAME}__ticks`}>\n {availableSteps.map((step, idx) => (\n <div\n key={`tick_${idx}`}\n className={`${CLASSNAME}__tick`}\n style={{ left: `${step * 100}%` }}\n />\n ))}\n </div>\n ) : null}\n <button\n type=\"button\"\n aria-labelledby={sliderLabelId}\n name={name}\n id={sliderId}\n className={`${CLASSNAME}__handle`}\n style={{ left: percentString }}\n onKeyDown={handleKeyDown}\n disabled={isDisabled}\n />\n </div>\n {!hideMinMaxLabel && (\n <span className={`${CLASSNAME}__value-label ${CLASSNAME}__value-label--max`}>{max}</span>\n )}\n </div>\n </div>\n );\n});\nSlider.displayName = COMPONENT_NAME;\nSlider.className = CLASSNAME;\nSlider.defaultProps = DEFAULT_PROPS;\n"],"names":["useEnhancedEffect","window","React","useLayoutEffect","useEffect","useEventCallback","fn","ref","useRef","current","useCallback","event","clamp","value","min","max","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","precision","steps","theme","Theme","light","computeValueFromPercent","percent","Number","toFixed","computePercentFromValue","Slider","forwardRef","props","className","disabled","helper","hideMinMaxLabel","id","isDisabled","label","name","onChange","onMouseDown","forwardedProps","sliderId","useMemo","uid","sliderLabelId","sliderRef","availableSteps","available","percentStep","ptr","push","findClosestStep","percentValue","closest","reduce","acc","step","aDst","Math","abs","dst","val","Infinity","getPercentValue","slider","getBoundingClientRect","width","left","pageX","pageXOffset","handleMove","newValue","handleEnd","document","body","removeEventListener","hopToValue","previous","oldPercent","handleKeyDown","key","handleMouseDown","addEventListener","percentString","classNames","handleBasicClasses","prefix","hasLabel","Boolean","map","idx","displayName","defaultProps"],"mappings":"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"}