@lumx/react 3.20.1-alpha.31 → 3.20.1-alpha.32

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 (171) hide show
  1. package/_internal/{Button-f382ee1c.js → Button-1b7d3b79.js} +9 -8
  2. package/_internal/Button-1b7d3b79.js.map +1 -0
  3. package/_internal/ButtonRoot-a70baf82.js.map +1 -1
  4. package/_internal/{Chip-70af04b4.js → Chip-8fbedc93.js} +10 -7
  5. package/_internal/Chip-8fbedc93.js.map +1 -0
  6. package/_internal/{ClickAwayProvider-1204f237.js → ClickAwayProvider-7093ba23.js} +2 -2
  7. package/_internal/ClickAwayProvider-7093ba23.js.map +1 -0
  8. package/_internal/{IconButton-1790b47e.js → IconButton-e11b5e74.js} +3 -3
  9. package/_internal/{IconButton-1790b47e.js.map → IconButton-e11b5e74.js.map} +1 -1
  10. package/_internal/{ImageCaption-16bf224b.js → ImageCaption-6f2f4131.js} +3 -3
  11. package/_internal/{ImageCaption-16bf224b.js.map → ImageCaption-6f2f4131.js.map} +1 -1
  12. package/_internal/{List-c75646f2.js → List-4e95288a.js} +9 -7
  13. package/_internal/List-4e95288a.js.map +1 -0
  14. package/_internal/{PopoverDialog-3b63f140.js → PopoverDialog-d85ff977.js} +10 -10
  15. package/_internal/PopoverDialog-d85ff977.js.map +1 -0
  16. package/_internal/{Slides-2a427c44.js → Slides-68a7d0e6.js} +13 -6
  17. package/_internal/Slides-68a7d0e6.js.map +1 -0
  18. package/_internal/{Thumbnail-d2001ccb.js → Thumbnail-22bbea7e.js} +4 -3
  19. package/_internal/Thumbnail-22bbea7e.js.map +1 -0
  20. package/_internal/check-circle-de24f857.js +4 -0
  21. package/_internal/check-circle-de24f857.js.map +1 -0
  22. package/_internal/chevron-right-827b804a.js +6 -0
  23. package/_internal/chevron-right-827b804a.js.map +1 -0
  24. package/_internal/chevron-up-0b9c76cb.js +6 -0
  25. package/_internal/chevron-up-0b9c76cb.js.map +1 -0
  26. package/_internal/close-circle-ef5d1aac.js +4 -0
  27. package/_internal/close-circle-ef5d1aac.js.map +1 -0
  28. package/_internal/close-eaf6c45a.js +4 -0
  29. package/_internal/close-eaf6c45a.js.map +1 -0
  30. package/_internal/components/{alert-dialog-bd1b2532.js → alert-dialog-5326cf04.js} +6 -5
  31. package/_internal/components/{alert-dialog-bd1b2532.js.map → alert-dialog-5326cf04.js.map} +1 -1
  32. package/_internal/components/{autocomplete-8ae2c4f9.js → autocomplete-7d9581e8.js} +7 -7
  33. package/_internal/components/{autocomplete-8ae2c4f9.js.map → autocomplete-7d9581e8.js.map} +1 -1
  34. package/_internal/components/{avatar-778d7df6.js → avatar-52bb217f.js} +2 -2
  35. package/_internal/components/{avatar-778d7df6.js.map → avatar-52bb217f.js.map} +1 -1
  36. package/_internal/components/{button-4aff084a.js → button-c4127e86.js} +3 -3
  37. package/_internal/components/{button-4aff084a.js.map → button-c4127e86.js.map} +1 -1
  38. package/_internal/components/{checkbox-a448ca6c.js → checkbox-f7751583.js} +6 -3
  39. package/_internal/components/checkbox-f7751583.js.map +1 -0
  40. package/_internal/components/{chip-19e40755.js → chip-1ed080fb.js} +2 -2
  41. package/_internal/components/{chip-19e40755.js.map → chip-1ed080fb.js.map} +1 -1
  42. package/_internal/components/{comment-block-bcbedf3c.js → comment-block-343e1922.js} +3 -3
  43. package/_internal/components/{comment-block-bcbedf3c.js.map → comment-block-343e1922.js.map} +1 -1
  44. package/_internal/components/date-picker-b6b3dc77.js +2 -0
  45. package/_internal/components/date-picker-b6b3dc77.js.map +1 -0
  46. package/_internal/components/{dialog-30336ccb.js → dialog-d0e090b1.js} +6 -6
  47. package/_internal/components/dialog-d0e090b1.js.map +1 -0
  48. package/_internal/components/{drag-handle-137f71b6.js → drag-handle-eec23fc2.js} +4 -3
  49. package/_internal/components/drag-handle-eec23fc2.js.map +1 -0
  50. package/_internal/components/{dropdown-d18122d7.js → dropdown-25170b7c.js} +4 -4
  51. package/_internal/components/{dropdown-d18122d7.js.map → dropdown-25170b7c.js.map} +1 -1
  52. package/_internal/components/{expansion-panel-38ed3d9f.js → expansion-panel-df812318.js} +9 -9
  53. package/_internal/components/expansion-panel-df812318.js.map +1 -0
  54. package/_internal/components/{flag-c2e41e8d.js → flag-c8d690bc.js} +3 -3
  55. package/_internal/components/{flag-c2e41e8d.js.map → flag-c8d690bc.js.map} +1 -1
  56. package/_internal/components/{flex-box-15be92f6.js → flex-box-4eeba972.js} +2 -2
  57. package/_internal/components/flex-box-4eeba972.js.map +1 -0
  58. package/_internal/components/{generic-block-5d843f1e.js → generic-block-964b2724.js} +11 -14
  59. package/_internal/components/generic-block-964b2724.js.map +1 -0
  60. package/_internal/components/{grid-column-85e305e7.js → grid-column-99652545.js} +3 -2
  61. package/_internal/components/grid-column-99652545.js.map +1 -0
  62. package/_internal/components/{heading-28520e1c.js → heading-6cc0f178.js} +2 -2
  63. package/_internal/components/{heading-28520e1c.js.map → heading-6cc0f178.js.map} +1 -1
  64. package/_internal/components/icon-9cf785b1.js +2 -0
  65. package/_internal/components/icon-9cf785b1.js.map +1 -0
  66. package/_internal/components/{image-block-10976174.js → image-block-4f3fe64c.js} +3 -3
  67. package/_internal/components/{image-block-10976174.js.map → image-block-4f3fe64c.js.map} +1 -1
  68. package/_internal/components/{image-lightbox-86f1e1fb.js → image-lightbox-7b172571.js} +12 -9
  69. package/_internal/components/image-lightbox-7b172571.js.map +1 -0
  70. package/_internal/components/{lightbox-c618a33b.js → lightbox-10ff28f9.js} +6 -6
  71. package/_internal/components/{lightbox-c618a33b.js.map → lightbox-10ff28f9.js.map} +1 -1
  72. package/_internal/components/{link-9c3feb34.js → link-9d1bd2f6.js} +3 -3
  73. package/_internal/components/{link-9c3feb34.js.map → link-9d1bd2f6.js.map} +1 -1
  74. package/_internal/components/{link-preview-79500604.js → link-preview-9525e97f.js} +3 -3
  75. package/_internal/components/{link-preview-79500604.js.map → link-preview-9525e97f.js.map} +1 -1
  76. package/_internal/components/{list-2f256244.js → list-c8c7a6eb.js} +2 -2
  77. package/_internal/components/{list-2f256244.js.map → list-c8c7a6eb.js.map} +1 -1
  78. package/_internal/components/{message-a3806f51.js → message-edd6a28a.js} +6 -4
  79. package/_internal/components/{message-a3806f51.js.map → message-edd6a28a.js.map} +1 -1
  80. package/_internal/components/{mosaic-e6581097.js → mosaic-c8084ee8.js} +4 -3
  81. package/_internal/components/mosaic-c8084ee8.js.map +1 -0
  82. package/_internal/components/{navigation-5378f128.js → navigation-c9121998.js} +6 -6
  83. package/_internal/components/{navigation-5378f128.js.map → navigation-c9121998.js.map} +1 -1
  84. package/_internal/components/{notification-49837625.js → notification-97a8a04a.js} +9 -5
  85. package/_internal/components/notification-97a8a04a.js.map +1 -0
  86. package/_internal/components/popover-f93484cd.js +3 -0
  87. package/_internal/components/popover-f93484cd.js.map +1 -0
  88. package/_internal/components/{post-block-478bc3b8.js → post-block-7e63c4f4.js} +12 -12
  89. package/_internal/components/post-block-7e63c4f4.js.map +1 -0
  90. package/_internal/components/{progress-tracker-0fd35bea.js → progress-tracker-c9758d83.js} +7 -3
  91. package/_internal/components/progress-tracker-c9758d83.js.map +1 -0
  92. package/_internal/components/{select-a145edbb.js → select-bea40e77.js} +15 -10
  93. package/_internal/components/select-bea40e77.js.map +1 -0
  94. package/_internal/components/{side-navigation-b99d6022.js → side-navigation-385825d4.js} +7 -6
  95. package/_internal/components/side-navigation-385825d4.js.map +1 -0
  96. package/_internal/components/{slideshow-b78ac3d6.js → slideshow-e0880d40.js} +3 -3
  97. package/_internal/components/{slideshow-b78ac3d6.js.map → slideshow-e0880d40.js.map} +1 -1
  98. package/_internal/components/{switch-25b65051.js → switch-24fea8d7.js} +3 -2
  99. package/_internal/components/switch-24fea8d7.js.map +1 -0
  100. package/_internal/components/{table-3cbee034.js → table-834af792.js} +6 -3
  101. package/_internal/components/table-834af792.js.map +1 -0
  102. package/_internal/components/{tabs-5d8ea1a5.js → tabs-bebfe959.js} +3 -3
  103. package/_internal/components/{tabs-5d8ea1a5.js.map → tabs-bebfe959.js.map} +1 -1
  104. package/_internal/components/text-9074f440.js +2 -0
  105. package/_internal/components/text-9074f440.js.map +1 -0
  106. package/_internal/components/{text-field-c26582c5.js → text-field-8597b7f7.js} +7 -5
  107. package/_internal/components/text-field-8597b7f7.js.map +1 -0
  108. package/_internal/components/{thumbnail-cb55b26c.js → thumbnail-4928bba2.js} +2 -2
  109. package/_internal/components/{thumbnail-cb55b26c.js.map → thumbnail-4928bba2.js.map} +1 -1
  110. package/_internal/components/{tooltip-dcb43bbe.js → tooltip-21018736.js} +2 -2
  111. package/_internal/components/{tooltip-dcb43bbe.js.map → tooltip-21018736.js.map} +1 -1
  112. package/_internal/components/{uploader-873b9bc1.js → uploader-2e1b080e.js} +2 -2
  113. package/_internal/components/{uploader-873b9bc1.js.map → uploader-2e1b080e.js.map} +1 -1
  114. package/_internal/components/{user-block-7cbaffe0.js → user-block-5fd51607.js} +12 -11
  115. package/_internal/components/user-block-5fd51607.js.map +1 -0
  116. package/_internal/{index-151e2652.js → index-77f213b1.js} +2 -2
  117. package/_internal/{index-151e2652.js.map → index-77f213b1.js.map} +1 -1
  118. package/_internal/{index-25d2a45e.js → index-aa6d1d90.js} +4 -4
  119. package/_internal/{index-25d2a45e.js.map → index-aa6d1d90.js.map} +1 -1
  120. package/_internal/{components/icon-a00d698b.js → index-d3e86bd8.js} +6 -5
  121. package/_internal/index-d3e86bd8.js.map +1 -0
  122. package/_internal/information-49bbeed3.js +6 -0
  123. package/_internal/information-49bbeed3.js.map +1 -0
  124. package/_internal/{isComponent-b9762ff1.js → isComponent-78df9309.js} +5 -3
  125. package/_internal/isComponent-78df9309.js.map +1 -0
  126. package/_internal/partitionMulti-4daccdd5.js +25 -0
  127. package/_internal/partitionMulti-4daccdd5.js.map +1 -0
  128. package/_internal/{useCallbackOnEscape-b956a85d.js → useCallbackOnEscape-ea4d9eb4.js} +4 -6
  129. package/_internal/useCallbackOnEscape-ea4d9eb4.js.map +1 -0
  130. package/_internal/{useFocusTrap-2dbae79e.js → useFocusTrap-c3c6378b.js} +2 -2
  131. package/_internal/{useFocusTrap-2dbae79e.js.map → useFocusTrap-c3c6378b.js.map} +1 -1
  132. package/_internal/{wrapChildrenIconWithSpaces-ef2a6772.js → wrapChildrenIconWithSpaces-fb85a743.js} +2 -2
  133. package/_internal/{wrapChildrenIconWithSpaces-ef2a6772.js.map → wrapChildrenIconWithSpaces-fb85a743.js.map} +1 -1
  134. package/index.d.ts +15 -4
  135. package/index.js +49 -49
  136. package/package.json +3 -3
  137. package/utils/index.js +1 -1
  138. package/_internal/Button-f382ee1c.js.map +0 -1
  139. package/_internal/Chip-70af04b4.js.map +0 -1
  140. package/_internal/ClickAwayProvider-1204f237.js.map +0 -1
  141. package/_internal/List-c75646f2.js.map +0 -1
  142. package/_internal/PopoverDialog-3b63f140.js.map +0 -1
  143. package/_internal/Slides-2a427c44.js.map +0 -1
  144. package/_internal/Thumbnail-d2001ccb.js.map +0 -1
  145. package/_internal/components/checkbox-a448ca6c.js.map +0 -1
  146. package/_internal/components/date-picker-b6d4048e.js +0 -2
  147. package/_internal/components/date-picker-b6d4048e.js.map +0 -1
  148. package/_internal/components/dialog-30336ccb.js.map +0 -1
  149. package/_internal/components/drag-handle-137f71b6.js.map +0 -1
  150. package/_internal/components/expansion-panel-38ed3d9f.js.map +0 -1
  151. package/_internal/components/flex-box-15be92f6.js.map +0 -1
  152. package/_internal/components/generic-block-5d843f1e.js.map +0 -1
  153. package/_internal/components/grid-column-85e305e7.js.map +0 -1
  154. package/_internal/components/icon-a00d698b.js.map +0 -1
  155. package/_internal/components/image-lightbox-86f1e1fb.js.map +0 -1
  156. package/_internal/components/mosaic-e6581097.js.map +0 -1
  157. package/_internal/components/notification-49837625.js.map +0 -1
  158. package/_internal/components/popover-dfcddda4.js +0 -3
  159. package/_internal/components/popover-dfcddda4.js.map +0 -1
  160. package/_internal/components/post-block-478bc3b8.js.map +0 -1
  161. package/_internal/components/progress-tracker-0fd35bea.js.map +0 -1
  162. package/_internal/components/select-a145edbb.js.map +0 -1
  163. package/_internal/components/side-navigation-b99d6022.js.map +0 -1
  164. package/_internal/components/switch-25b65051.js.map +0 -1
  165. package/_internal/components/table-3cbee034.js.map +0 -1
  166. package/_internal/components/text-f84a5417.js +0 -2
  167. package/_internal/components/text-f84a5417.js.map +0 -1
  168. package/_internal/components/text-field-c26582c5.js.map +0 -1
  169. package/_internal/components/user-block-7cbaffe0.js.map +0 -1
  170. package/_internal/isComponent-b9762ff1.js.map +0 -1
  171. package/_internal/useCallbackOnEscape-b956a85d.js.map +0 -1
@@ -1,13 +1,14 @@
1
1
  import classNames from 'classnames';
2
- import { i as isComponent } from './isComponent-b9762ff1.js';
2
+ import isEmpty from 'lodash/isEmpty';
3
+ import { i as isComponent } from './isComponent-78df9309.js';
3
4
  import { getRootClassName, getBasicClass } from '@lumx/core/js/utils/className';
4
5
  import { u as useTheme, T as ThemeProvider } from './ThemeContext-3181f000.js';
5
6
  import { f as forwardRef } from './forwardRef-8bce732e.js';
6
7
  import { B as ButtonRoot } from './ButtonRoot-a70baf82.js';
7
8
  import { jsxs, jsx } from 'react/jsx-runtime';
8
- import { T as Text } from './index-151e2652.js';
9
+ import { T as Text } from './index-77f213b1.js';
9
10
  import { Emphasis, Size, Theme } from '@lumx/core/js/constants';
10
- import { Icon } from './components/icon-a00d698b.js';
11
+ import { I as Icon } from './index-d3e86bd8.js';
11
12
 
12
13
  const ButtonEmphasis = Emphasis;
13
14
 
@@ -55,11 +56,11 @@ const Button = forwardRef((props, ref) => {
55
56
  const buttonClassName = classNames(className, getBasicClass({
56
57
  prefix: CLASSNAME,
57
58
  type: 'hasLeftIcon',
58
- value: !!leftIcon
59
+ value: !isEmpty(leftIcon)
59
60
  }), getBasicClass({
60
61
  prefix: CLASSNAME,
61
62
  type: 'hasRightIcon',
62
- value: !!rightIcon
63
+ value: !isEmpty(rightIcon)
63
64
  }));
64
65
  return /*#__PURE__*/jsxs(ButtonRoot, {
65
66
  ref: ref,
@@ -69,7 +70,7 @@ const Button = forwardRef((props, ref) => {
69
70
  ...forwardedProps,
70
71
  className: buttonClassName,
71
72
  variant: "button",
72
- children: [leftIcon &&
73
+ children: [leftIcon && !isEmpty(leftIcon) &&
73
74
  /*#__PURE__*/
74
75
  // Theme is handled in the button scss
75
76
  jsx(ThemeProvider, {
@@ -79,7 +80,7 @@ const Button = forwardRef((props, ref) => {
79
80
  })
80
81
  }), children && (isComponent(Text)(children) ? children : /*#__PURE__*/jsx("span", {
81
82
  children: children
82
- })), rightIcon &&
83
+ })), rightIcon && !isEmpty(rightIcon) &&
83
84
  /*#__PURE__*/
84
85
  // Theme is handled in the button scss
85
86
  jsx(ThemeProvider, {
@@ -95,4 +96,4 @@ Button.className = CLASSNAME;
95
96
  Button.defaultProps = DEFAULT_PROPS;
96
97
 
97
98
  export { ButtonEmphasis as B, Button as a };
98
- //# sourceMappingURL=Button-f382ee1c.js.map
99
+ //# sourceMappingURL=Button-1b7d3b79.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button-1b7d3b79.js","sources":["../../src/components/button/Button.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Emphasis, Icon, Size, Theme, Text, ThemeProvider } from '@lumx/react';\nimport { isComponent } from '@lumx/react/utils/type';\nimport { getBasicClass, getRootClassName } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { BaseButtonProps, ButtonRoot } from './ButtonRoot';\n\n/**\n * Button emphasis definition.\n * @deprecated Use Emphasis instead.\n */\nexport const ButtonEmphasis = Emphasis;\n\n/**\n * Defines the props of the component.\n */\nexport interface ButtonProps extends BaseButtonProps {\n /** Left icon (SVG path). */\n leftIcon?: string;\n /** Right icon (SVG path). */\n rightIcon?: string;\n /** When `true`, the button gets as large as possible. */\n fullWidth?: boolean;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Button';\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<ButtonProps> = {\n emphasis: Emphasis.high,\n size: Size.m,\n};\n\n/**\n * Button component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Button = forwardRef<ButtonProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n children,\n className,\n emphasis = DEFAULT_PROPS.emphasis,\n leftIcon,\n rightIcon,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n ...forwardedProps\n } = props;\n\n const buttonClassName = classNames(\n className,\n getBasicClass({ prefix: CLASSNAME, type: 'hasLeftIcon', value: !isEmpty(leftIcon) }),\n getBasicClass({ prefix: CLASSNAME, type: 'hasRightIcon', value: !isEmpty(rightIcon) }),\n );\n\n return (\n <ButtonRoot\n ref={ref}\n {...{ emphasis, size, theme, ...forwardedProps }}\n className={buttonClassName}\n variant=\"button\"\n >\n {leftIcon && !isEmpty(leftIcon) && (\n // Theme is handled in the button scss\n <ThemeProvider value={undefined}>\n <Icon icon={leftIcon} />\n </ThemeProvider>\n )}\n {children && (isComponent(Text)(children) ? children : <span>{children}</span>)}\n {rightIcon && !isEmpty(rightIcon) && (\n // Theme is handled in the button scss\n <ThemeProvider value={undefined}>\n <Icon icon={rightIcon} />\n </ThemeProvider>\n )}\n </ButtonRoot>\n );\n});\nButton.displayName = COMPONENT_NAME;\nButton.className = CLASSNAME;\nButton.defaultProps = DEFAULT_PROPS;\n"],"names":["ButtonEmphasis","Emphasis","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","emphasis","high","size","Size","m","Button","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","children","className","leftIcon","rightIcon","theme","forwardedProps","buttonClassName","classNames","getBasicClass","prefix","type","value","isEmpty","_jsxs","ButtonRoot","variant","_jsx","ThemeProvider","undefined","Icon","icon","isComponent","Text","displayName","defaultProps"],"mappings":";;;;;;;;;;;;AAeO,MAAMA,cAAc,GAAGC,SAAQ;;AAEtC;AACA;AACA;;AAYA;AACA;AACA;AACA,MAAMC,cAAc,GAAG,QAAQ,CAAA;;AAE/B;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAmC,GAAG;EACxCC,QAAQ,EAAEL,QAAQ,CAACM,IAAI;EACvBC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGC,UAAU,CAAqD,CAACC,KAAK,EAAEC,GAAG,KAAK;EACjG,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFC,QAAQ;IACRC,SAAS;IACTd,QAAQ,GAAGD,aAAa,CAACC,QAAQ;IACjCe,QAAQ;IACRC,SAAS;IACTd,IAAI,GAAGH,aAAa,CAACG,IAAI;AACzBe,IAAAA,KAAK,GAAGR,YAAY;IACpB,GAAGS,cAAAA;AACP,GAAC,GAAGX,KAAK,CAAA;AAET,EAAA,MAAMY,eAAe,GAAGC,UAAU,CAC9BN,SAAS,EACTO,aAAa,CAAC;AAAEC,IAAAA,MAAM,EAAEzB,SAAS;AAAE0B,IAAAA,IAAI,EAAE,aAAa;AAAEC,IAAAA,KAAK,EAAE,CAACC,OAAO,CAACV,QAAQ,CAAA;GAAG,CAAC,EACpFM,aAAa,CAAC;AAAEC,IAAAA,MAAM,EAAEzB,SAAS;AAAE0B,IAAAA,IAAI,EAAE,cAAc;AAAEC,IAAAA,KAAK,EAAE,CAACC,OAAO,CAACT,SAAS,CAAA;AAAE,GAAC,CACzF,CAAC,CAAA;EAED,oBACIU,IAAA,CAACC,UAAU,EAAA;AACPnB,IAAAA,GAAG,EAAEA,GAAI;IACHR,QAAQ;IAAEE,IAAI;IAAEe,KAAK;AAAE,IAAA,GAAGC,cAAc;AAC9CJ,IAAAA,SAAS,EAAEK,eAAgB;AAC3BS,IAAAA,OAAO,EAAC,QAAQ;AAAAf,IAAAA,QAAA,GAEfE,QAAQ,IAAI,CAACU,OAAO,CAACV,QAAQ,CAAC;AAAA;AAC3B;AACAc,IAAAA,GAAA,CAACC,aAAa,EAAA;AAACN,MAAAA,KAAK,EAAEO,SAAU;MAAAlB,QAAA,eAC5BgB,GAAA,CAACG,IAAI,EAAA;AAACC,QAAAA,IAAI,EAAElB,QAAAA;OAAW,CAAA;AAAC,KACb,CAClB,EACAF,QAAQ,KAAKqB,WAAW,CAACC,IAAI,CAAC,CAACtB,QAAQ,CAAC,GAAGA,QAAQ,gBAAGgB,GAAA,CAAA,MAAA,EAAA;AAAAhB,MAAAA,QAAA,EAAOA,QAAAA;KAAe,CAAC,CAAC,EAC9EG,SAAS,IAAI,CAACS,OAAO,CAACT,SAAS,CAAC;AAAA;AAC7B;AACAa,IAAAA,GAAA,CAACC,aAAa,EAAA;AAACN,MAAAA,KAAK,EAAEO,SAAU;MAAAlB,QAAA,eAC5BgB,GAAA,CAACG,IAAI,EAAA;AAACC,QAAAA,IAAI,EAAEjB,SAAAA;OAAY,CAAA;AAAC,KACd,CAClB,CAAA;AAAA,GACO,CAAC,CAAA;AAErB,CAAC,EAAC;AACFX,MAAM,CAAC+B,WAAW,GAAGxC,cAAc,CAAA;AACnCS,MAAM,CAACS,SAAS,GAAGjB,SAAS,CAAA;AAC5BQ,MAAM,CAACgC,YAAY,GAAGtC,aAAa;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonRoot-a70baf82.js","sources":["../../src/components/button/ButtonRoot.tsx"],"sourcesContent":["import { AriaAttributes, ButtonHTMLAttributes, DetailedHTMLProps, RefObject } from 'react';\nimport classNames from 'classnames';\n\nimport { ColorPalette, Emphasis, Size, Theme } from '@lumx/react';\nimport { CSS_PREFIX } from '@lumx/react/constants';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { HasAriaDisabled } from '@lumx/react/utils/type/HasAriaDisabled';\nimport { RawClickable } from '@lumx/react/utils/react/RawClickable';\nimport { useDisableStateProps } from '@lumx/react/utils/disabled';\n\ntype HTMLButtonProps = DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\n/**\n * Button size definition.\n */\nexport type ButtonSize = Extract<Size, 's' | 'm'>;\n\nexport interface BaseButtonProps\n extends GenericProps,\n Pick<AriaAttributes, 'aria-expanded' | 'aria-haspopup' | 'aria-pressed' | 'aria-label'>,\n HasTheme,\n HasAriaDisabled {\n /** Color variant. */\n color?: ColorPalette;\n /** Emphasis variant. */\n emphasis?: Emphasis;\n /** Whether or not the button has a background color in low emphasis. */\n hasBackground?: boolean;\n /** Native anchor href property. It determines whether the Button will be a <button> or an <a>. */\n href?: string;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is selected or not (unsupported in `high` emphasis). */\n isSelected?: boolean;\n /** Native button name property. */\n name?: string;\n /** Size variant. */\n size?: ButtonSize;\n /** Native anchor target property. */\n target?: '_self' | '_blank' | '_parent' | '_top';\n /** Native button type. */\n type?: HTMLButtonProps['type'];\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n}\n\nexport interface ButtonRootProps extends BaseButtonProps {\n variant: 'button' | 'icon';\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'ButtonRoot';\n\nexport const BUTTON_WRAPPER_CLASSNAME = `${CSS_PREFIX}-button-wrapper`;\nexport const BUTTON_CLASSNAME = `${CSS_PREFIX}-button`;\n\n/**\n * Render a button wrapper with the ButtonRoot inside.\n *\n * @param props Component props.\n * @return React element.\n */\nconst renderButtonWrapper: React.FC<ButtonRootProps> = (props) => {\n const { color, emphasis, variant, fullWidth } = props;\n\n const adaptedColor =\n emphasis === Emphasis.low && (color === ColorPalette.light ? ColorPalette.dark : ColorPalette.light);\n\n const wrapperClassName = classNames(\n handleBasicClasses({\n color: adaptedColor,\n prefix: BUTTON_WRAPPER_CLASSNAME,\n variant,\n fullWidth,\n }),\n );\n const buttonProps = { ...props, hasBackground: false };\n\n return (\n <div className={wrapperClassName}>\n {/* eslint-disable-next-line @typescript-eslint/no-use-before-define */}\n <ButtonRoot {...buttonProps} />\n </div>\n );\n};\n\n/**\n * ButtonRoot component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const ButtonRoot = forwardRef<ButtonRootProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {\n const { isAnyDisabled, disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n 'aria-label': ariaLabel,\n children,\n className,\n color,\n emphasis,\n hasBackground,\n isSelected,\n isActive,\n isFocused,\n isHovered,\n linkAs,\n size,\n theme,\n variant,\n fullWidth,\n ...forwardedProps\n } = otherProps;\n\n const adaptedColor =\n color ||\n (emphasis !== Emphasis.high && theme === Theme.dark && ColorPalette.light) ||\n (emphasis === Emphasis.high && ColorPalette.primary) ||\n ColorPalette.dark;\n\n if (hasBackground) {\n return renderButtonWrapper({ ...props, ref, variant, color: adaptedColor });\n }\n\n const buttonClassName = classNames(\n className,\n handleBasicClasses({\n color: adaptedColor,\n emphasis,\n isSelected,\n isDisabled: props.isDisabled || props['aria-disabled'],\n isActive,\n isFocused,\n isHovered,\n prefix: BUTTON_CLASSNAME,\n size,\n theme: emphasis === Emphasis.high && theme,\n variant,\n fullWidth,\n }),\n );\n\n return (\n <RawClickable\n as={linkAs || (forwardedProps.href ? 'a' : 'button')}\n {...forwardedProps}\n {...disabledStateProps}\n aria-disabled={isAnyDisabled}\n aria-label={ariaLabel}\n ref={ref as RefObject<HTMLButtonElement>}\n className={buttonClassName}\n >\n {children}\n </RawClickable>\n );\n});\nButtonRoot.displayName = COMPONENT_NAME;\nButtonRoot.defaultProps = {};\n"],"names":["COMPONENT_NAME","BUTTON_WRAPPER_CLASSNAME","CSS_PREFIX","BUTTON_CLASSNAME","renderButtonWrapper","props","color","emphasis","variant","fullWidth","adaptedColor","Emphasis","low","ColorPalette","light","dark","wrapperClassName","classNames","handleBasicClasses","prefix","buttonProps","hasBackground","_jsx","className","children","ButtonRoot","forwardRef","ref","isAnyDisabled","disabledStateProps","otherProps","useDisableStateProps","ariaLabel","isSelected","isActive","isFocused","isHovered","linkAs","size","theme","forwardedProps","high","Theme","primary","buttonClassName","isDisabled","RawClickable","as","href","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"ButtonRoot-a70baf82.js","sources":["../../src/components/button/ButtonRoot.tsx"],"sourcesContent":["import { AriaAttributes, ButtonHTMLAttributes, DetailedHTMLProps, RefObject } from 'react';\n\nimport classNames from 'classnames';\n\nimport { ColorPalette, Emphasis, Size, Theme } from '@lumx/react';\nimport { CSS_PREFIX } from '@lumx/react/constants';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { HasAriaDisabled } from '@lumx/react/utils/type/HasAriaDisabled';\nimport { RawClickable } from '@lumx/react/utils/react/RawClickable';\nimport { useDisableStateProps } from '@lumx/react/utils/disabled';\n\ntype HTMLButtonProps = DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\n/**\n * Button size definition.\n */\nexport type ButtonSize = Extract<Size, 's' | 'm'>;\n\nexport interface BaseButtonProps\n extends GenericProps,\n Pick<AriaAttributes, 'aria-expanded' | 'aria-haspopup' | 'aria-pressed' | 'aria-label'>,\n HasTheme,\n HasAriaDisabled {\n /** Color variant. */\n color?: ColorPalette;\n /** Emphasis variant. */\n emphasis?: Emphasis;\n /** Whether or not the button has a background color in low emphasis. */\n hasBackground?: boolean;\n /** Native anchor href property. It determines whether the Button will be a <button> or an <a>. */\n href?: string;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is selected or not (unsupported in `high` emphasis). */\n isSelected?: boolean;\n /** Native button name property. */\n name?: string;\n /** Size variant. */\n size?: ButtonSize;\n /** Native anchor target property. */\n target?: '_self' | '_blank' | '_parent' | '_top';\n /** Native button type. */\n type?: HTMLButtonProps['type'];\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n}\n\nexport interface ButtonRootProps extends BaseButtonProps {\n variant: 'button' | 'icon';\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'ButtonRoot';\n\nexport const BUTTON_WRAPPER_CLASSNAME = `${CSS_PREFIX}-button-wrapper`;\nexport const BUTTON_CLASSNAME = `${CSS_PREFIX}-button`;\n\n/**\n * Render a button wrapper with the ButtonRoot inside.\n *\n * @param props Component props.\n * @return React element.\n */\nconst renderButtonWrapper: React.FC<ButtonRootProps> = (props) => {\n const { color, emphasis, variant, fullWidth } = props;\n\n const adaptedColor =\n emphasis === Emphasis.low && (color === ColorPalette.light ? ColorPalette.dark : ColorPalette.light);\n\n const wrapperClassName = classNames(\n handleBasicClasses({\n color: adaptedColor,\n prefix: BUTTON_WRAPPER_CLASSNAME,\n variant,\n fullWidth,\n }),\n );\n const buttonProps = { ...props, hasBackground: false };\n\n return (\n <div className={wrapperClassName}>\n {/* eslint-disable-next-line @typescript-eslint/no-use-before-define */}\n <ButtonRoot {...buttonProps} />\n </div>\n );\n};\n\n/**\n * ButtonRoot component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const ButtonRoot = forwardRef<ButtonRootProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {\n const { isAnyDisabled, disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n 'aria-label': ariaLabel,\n children,\n className,\n color,\n emphasis,\n hasBackground,\n isSelected,\n isActive,\n isFocused,\n isHovered,\n linkAs,\n size,\n theme,\n variant,\n fullWidth,\n ...forwardedProps\n } = otherProps;\n\n const adaptedColor =\n color ||\n (emphasis !== Emphasis.high && theme === Theme.dark && ColorPalette.light) ||\n (emphasis === Emphasis.high && ColorPalette.primary) ||\n ColorPalette.dark;\n\n if (hasBackground) {\n return renderButtonWrapper({ ...props, ref, variant, color: adaptedColor });\n }\n\n const buttonClassName = classNames(\n className,\n handleBasicClasses({\n color: adaptedColor,\n emphasis,\n isSelected,\n isDisabled: props.isDisabled || props['aria-disabled'],\n isActive,\n isFocused,\n isHovered,\n prefix: BUTTON_CLASSNAME,\n size,\n theme: emphasis === Emphasis.high && theme,\n variant,\n fullWidth,\n }),\n );\n\n return (\n <RawClickable\n as={linkAs || (forwardedProps.href ? 'a' : 'button')}\n {...forwardedProps}\n {...disabledStateProps}\n aria-disabled={isAnyDisabled}\n aria-label={ariaLabel}\n ref={ref as RefObject<HTMLButtonElement>}\n className={buttonClassName}\n >\n {children}\n </RawClickable>\n );\n});\nButtonRoot.displayName = COMPONENT_NAME;\nButtonRoot.defaultProps = {};\n"],"names":["COMPONENT_NAME","BUTTON_WRAPPER_CLASSNAME","CSS_PREFIX","BUTTON_CLASSNAME","renderButtonWrapper","props","color","emphasis","variant","fullWidth","adaptedColor","Emphasis","low","ColorPalette","light","dark","wrapperClassName","classNames","handleBasicClasses","prefix","buttonProps","hasBackground","_jsx","className","children","ButtonRoot","forwardRef","ref","isAnyDisabled","disabledStateProps","otherProps","useDisableStateProps","ariaLabel","isSelected","isActive","isFocused","isHovered","linkAs","size","theme","forwardedProps","high","Theme","primary","buttonClassName","isDisabled","RawClickable","as","href","displayName","defaultProps"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import classNames from 'classnames';
2
+ import isFunction from 'lodash/isFunction';
2
3
  import { useCallback } from 'react';
3
4
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
4
5
  import { onEnterPressed } from '@lumx/core/js/utils';
@@ -16,7 +17,7 @@ import { Size, Theme, ColorPalette } from '@lumx/core/js/constants';
16
17
  */
17
18
  function useStopPropagation(handler) {
18
19
  return useCallback(evt => {
19
- if (!evt || !handler) {
20
+ if (!evt || !isFunction(handler)) {
20
21
  return;
21
22
  }
22
23
  handler(evt);
@@ -73,7 +74,9 @@ const Chip = forwardRef((props, ref) => {
73
74
  onKeyDown,
74
75
  ...forwardedProps
75
76
  } = otherProps;
76
- const hasOnClick = Boolean(props.onClick);
77
+ const hasAfterClick = isFunction(onAfterClick);
78
+ const hasBeforeClick = isFunction(onBeforeClick);
79
+ const hasOnClick = isFunction(props.onClick);
77
80
  const isButton = hasOnClick && !href;
78
81
  const isClickable = Boolean(hasOnClick) || Boolean(href) || propIsClickable;
79
82
 
@@ -83,7 +86,7 @@ const Chip = forwardRef((props, ref) => {
83
86
  const handleOnAfterClick = useStopPropagation(onAfterClick);
84
87
  const handleKeyDown = evt => {
85
88
  onKeyDown?.(evt);
86
- if (onClick) {
89
+ if (hasOnClick) {
87
90
  onEnterPressed(onClick)(evt);
88
91
  }
89
92
  };
@@ -109,14 +112,14 @@ const Chip = forwardRef((props, ref) => {
109
112
  unselected: Boolean(!isSelected)
110
113
  })),
111
114
  "aria-disabled": isClickable && isAnyDisabled || undefined,
112
- onClick: onClick || undefined,
115
+ onClick: hasOnClick ? onClick : undefined,
113
116
  onKeyDown: handleKeyDown,
114
117
  children: [before &&
115
118
  /*#__PURE__*/
116
119
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
117
120
  jsx("div", {
118
121
  className: classNames(`${CLASSNAME}__before`, {
119
- [`${CLASSNAME}__before--is-clickable`]: !!onBeforeClick
122
+ [`${CLASSNAME}__before--is-clickable`]: hasBeforeClick
120
123
  }),
121
124
  onClick: handleOnBeforeClick,
122
125
  children: before
@@ -128,7 +131,7 @@ const Chip = forwardRef((props, ref) => {
128
131
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
129
132
  jsx("div", {
130
133
  className: classNames(`${CLASSNAME}__after`, {
131
- [`${CLASSNAME}__after--is-clickable`]: !!onAfterClick
134
+ [`${CLASSNAME}__after--is-clickable`]: hasAfterClick
132
135
  }),
133
136
  onClick: handleOnAfterClick,
134
137
  children: after
@@ -141,4 +144,4 @@ Chip.className = CLASSNAME;
141
144
  Chip.defaultProps = DEFAULT_PROPS;
142
145
 
143
146
  export { Chip as C };
144
- //# sourceMappingURL=Chip-70af04b4.js.map
147
+ //# sourceMappingURL=Chip-8fbedc93.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chip-8fbedc93.js","sources":["../../src/hooks/useStopPropagation.ts","../../src/components/chip/Chip.tsx"],"sourcesContent":["import isFunction from 'lodash/isFunction';\nimport { MouseEventHandler, useCallback } from 'react';\n\n/**\n * Wrap mouse event handler to stop event propagation.\n *\n * @param handler The mouse handler to wrap.\n * @return Mouse handler stopping propagation.\n */\nexport function useStopPropagation(handler?: MouseEventHandler): MouseEventHandler {\n return useCallback(\n (evt) => {\n if (!evt || !isFunction(handler)) {\n return;\n }\n handler(evt);\n evt.stopPropagation();\n },\n [handler],\n );\n}\n","import { MouseEventHandler, ReactNode } from 'react';\n\nimport classNames from 'classnames';\nimport isFunction from 'lodash/isFunction';\n\nimport { ColorPalette, Size, Theme } from '@lumx/react';\nimport { useStopPropagation } from '@lumx/react/hooks/useStopPropagation';\n\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { onEnterPressed } from '@lumx/core/js/utils';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { useDisableStateProps } from '@lumx/react/utils/disabled/useDisableStateProps';\nimport { HasAriaDisabled } from '@lumx/react/utils/type/HasAriaDisabled';\n\n/**\n * Chip sizes.\n */\ntype ChipSize = Extract<Size, 's' | 'm'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface ChipProps extends GenericProps, HasTheme, HasAriaDisabled {\n /** A component to be rendered after the content. */\n after?: ReactNode;\n /** A component to be rendered before the content. */\n before?: ReactNode;\n /** Color variant. */\n color?: ColorPalette;\n /** Whether the component is clickable or not. */\n isClickable?: boolean;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the chip is currently in a highlighted state or not. */\n isHighlighted?: boolean;\n /** Whether the component is selected or not. */\n isSelected?: boolean;\n /** Size variant. */\n size?: ChipSize;\n /** On \"after\" element clicked callback. */\n onAfterClick?: MouseEventHandler;\n /** On \"before\" element clicked callback. */\n onBeforeClick?: MouseEventHandler;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Chip';\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<ChipProps> = {\n size: Size.m,\n};\n\n/**\n * Chip component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Chip = forwardRef<ChipProps, HTMLAnchorElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const { isAnyDisabled, disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n after,\n before,\n children,\n className,\n color,\n isClickable: propIsClickable,\n isHighlighted,\n isSelected,\n onAfterClick,\n onBeforeClick,\n onClick,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n href,\n onKeyDown,\n ...forwardedProps\n } = otherProps;\n const hasAfterClick = isFunction(onAfterClick);\n const hasBeforeClick = isFunction(onBeforeClick);\n const hasOnClick = isFunction(props.onClick);\n const isButton = hasOnClick && !href;\n const isClickable = Boolean(hasOnClick) || Boolean(href) || propIsClickable;\n\n // Adapt color to the theme.\n const chipColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);\n\n const handleOnBeforeClick = useStopPropagation(onBeforeClick);\n const handleOnAfterClick = useStopPropagation(onAfterClick);\n const handleKeyDown = (evt: React.KeyboardEvent) => {\n onKeyDown?.(evt);\n if (hasOnClick) {\n onEnterPressed(onClick)(evt);\n }\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <a\n role={isButton ? 'button' : undefined}\n tabIndex={isClickable && !disabledStateProps.disabled ? 0 : undefined}\n {...forwardedProps}\n href={!disabledStateProps.disabled ? href : undefined}\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n clickable: isClickable,\n color: chipColor,\n isDisabled: isAnyDisabled,\n hasAfter: Boolean(after),\n hasBefore: Boolean(before),\n highlighted: Boolean(isHighlighted),\n prefix: CLASSNAME,\n selected: Boolean(isSelected),\n size,\n unselected: Boolean(!isSelected),\n }),\n )}\n aria-disabled={(isClickable && isAnyDisabled) || undefined}\n onClick={hasOnClick ? onClick : undefined}\n onKeyDown={handleKeyDown}\n >\n {before && (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div\n className={classNames(`${CLASSNAME}__before`, {\n [`${CLASSNAME}__before--is-clickable`]: hasBeforeClick,\n })}\n onClick={handleOnBeforeClick}\n >\n {before}\n </div>\n )}\n <div className={`${CLASSNAME}__label`}>{children}</div>\n {after && (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div\n className={classNames(`${CLASSNAME}__after`, {\n [`${CLASSNAME}__after--is-clickable`]: hasAfterClick,\n })}\n onClick={handleOnAfterClick}\n >\n {after}\n </div>\n )}\n </a>\n );\n});\nChip.displayName = COMPONENT_NAME;\nChip.className = CLASSNAME;\nChip.defaultProps = DEFAULT_PROPS;\n"],"names":["useStopPropagation","handler","useCallback","evt","isFunction","stopPropagation","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","m","Chip","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","isAnyDisabled","disabledStateProps","otherProps","useDisableStateProps","after","before","children","className","color","isClickable","propIsClickable","isHighlighted","isSelected","onAfterClick","onBeforeClick","onClick","theme","href","onKeyDown","forwardedProps","hasAfterClick","hasBeforeClick","hasOnClick","isButton","Boolean","chipColor","ColorPalette","dark","handleOnBeforeClick","handleOnAfterClick","handleKeyDown","onEnterPressed","_jsxs","role","undefined","tabIndex","disabled","classNames","handleBasicClasses","clickable","isDisabled","hasAfter","hasBefore","highlighted","prefix","selected","unselected","_jsx","displayName","defaultProps"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useContext, useMemo, useRef, createContext } from 'react';
2
- import { isEmpty } from '@lumx/core/js/utils/collection/isEmpty';
2
+ import isEmpty from 'lodash/isEmpty';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  const EVENT_TYPES = ['mousedown', 'touchstart'];
@@ -92,4 +92,4 @@ const ClickAwayProvider = ({
92
92
  ClickAwayProvider.displayName = 'ClickAwayProvider';
93
93
 
94
94
  export { ClickAwayProvider as C };
95
- //# sourceMappingURL=ClickAwayProvider-1204f237.js.map
95
+ //# sourceMappingURL=ClickAwayProvider-7093ba23.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickAwayProvider-7093ba23.js","sources":["../../src/hooks/useClickAway.tsx","../../src/utils/ClickAwayProvider/ClickAwayProvider.tsx"],"sourcesContent":["import { RefObject, useEffect } from 'react';\n\nimport { Falsy } from '@lumx/react/utils/type';\n\nimport isEmpty from 'lodash/isEmpty';\n\nconst EVENT_TYPES = ['mousedown', 'touchstart'];\n\nfunction isClickAway(targets: HTMLElement[], refs: Array<RefObject<HTMLElement>>): boolean {\n // The targets elements are not contained in any of the listed element references.\n return !refs.some((ref) => targets.some((target) => ref?.current?.contains(target)));\n}\n\nexport interface ClickAwayParameters {\n /**\n * A callback function to call when the user clicks away from the elements.\n */\n callback: EventListener | Falsy;\n /**\n * Elements considered within the click away context (clicking outside them will trigger the click away callback).\n */\n childrenRefs: RefObject<Array<RefObject<HTMLElement>>>;\n}\n\n/**\n * Listen to clicks away from the given elements and callback the passed in function.\n *\n * Warning: If you need to detect click away on nested React portals, please use the `ClickAwayProvider` component.\n */\nexport function useClickAway({ callback, childrenRefs }: ClickAwayParameters): void {\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!callback || !currentRefs || isEmpty(currentRefs)) {\n return undefined;\n }\n const listener: EventListener = (evt) => {\n const targets = [evt.composedPath?.()[0], evt.target] as HTMLElement[];\n if (isClickAway(targets, currentRefs)) {\n callback(evt);\n }\n };\n\n EVENT_TYPES.forEach((evtType) => document.addEventListener(evtType, listener));\n return () => {\n EVENT_TYPES.forEach((evtType) => document.removeEventListener(evtType, listener));\n };\n }, [callback, childrenRefs]);\n}\n","import { createContext, RefObject, useContext, useEffect, useMemo, useRef } from 'react';\nimport { ClickAwayParameters, useClickAway } from '@lumx/react/hooks/useClickAway';\n\ninterface ContextValue {\n childrenRefs: Array<RefObject<HTMLElement>>;\n addRefs(...newChildrenRefs: Array<RefObject<HTMLElement>>): void;\n}\n\nconst ClickAwayAncestorContext = createContext<ContextValue | null>(null);\n\ninterface ClickAwayProviderProps extends ClickAwayParameters {\n /**\n * (Optional) Element that should be considered as part of the parent\n */\n parentRef?: RefObject<HTMLElement>;\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Component combining the `useClickAway` hook with a React context to hook into the React component tree and make sure\n * we take into account both the DOM tree and the React tree to detect click away.\n *\n * @return the react component.\n */\nexport const ClickAwayProvider: React.FC<ClickAwayProviderProps> = ({\n children,\n callback,\n childrenRefs,\n parentRef,\n}) => {\n const parentContext = useContext(ClickAwayAncestorContext);\n const currentContext = useMemo(() => {\n const context: ContextValue = {\n childrenRefs: [],\n /**\n * Add element refs to the current context and propagate to the parent context.\n */\n addRefs(...newChildrenRefs) {\n // Add element refs that should be considered as inside the click away context.\n context.childrenRefs.push(...newChildrenRefs);\n\n if (parentContext) {\n // Also add then to the parent context\n parentContext.addRefs(...newChildrenRefs);\n if (parentRef) {\n // The parent element is also considered as inside the parent click away context but not inside the current context\n parentContext.addRefs(parentRef);\n }\n }\n },\n };\n return context;\n }, [parentContext, parentRef]);\n\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!currentRefs) {\n return;\n }\n currentContext.addRefs(...currentRefs);\n }, [currentContext, childrenRefs]);\n\n useClickAway({ callback, childrenRefs: useRef(currentContext.childrenRefs) });\n return <ClickAwayAncestorContext.Provider value={currentContext}>{children}</ClickAwayAncestorContext.Provider>;\n};\nClickAwayProvider.displayName = 'ClickAwayProvider';\n"],"names":["EVENT_TYPES","isClickAway","targets","refs","some","ref","target","current","contains","useClickAway","callback","childrenRefs","useEffect","currentRefs","isEmpty","undefined","listener","evt","composedPath","forEach","evtType","document","addEventListener","removeEventListener","ClickAwayAncestorContext","createContext","ClickAwayProvider","children","parentRef","parentContext","useContext","currentContext","useMemo","context","addRefs","newChildrenRefs","push","useRef","_jsx","Provider","value","displayName"],"mappings":"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"}
@@ -3,9 +3,9 @@ import { getRootClassName } from '@lumx/core/js/utils/className';
3
3
  import { u as useTheme, T as ThemeProvider } from './ThemeContext-3181f000.js';
4
4
  import { f as forwardRef } from './forwardRef-8bce732e.js';
5
5
  import { jsx } from 'react/jsx-runtime';
6
- import { Tooltip } from './components/tooltip-dcb43bbe.js';
6
+ import { Tooltip } from './components/tooltip-21018736.js';
7
7
  import { Emphasis, Size, Theme } from '@lumx/core/js/constants';
8
- import { Icon } from './components/icon-a00d698b.js';
8
+ import { I as Icon } from './index-d3e86bd8.js';
9
9
 
10
10
  /**
11
11
  * Component display name.
@@ -74,4 +74,4 @@ IconButton.className = CLASSNAME;
74
74
  IconButton.defaultProps = DEFAULT_PROPS;
75
75
 
76
76
  export { IconButton as I };
77
- //# sourceMappingURL=IconButton-1790b47e.js.map
77
+ //# sourceMappingURL=IconButton-e11b5e74.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton-1790b47e.js","sources":["../../src/components/button/IconButton.tsx"],"sourcesContent":["import { Emphasis, Icon, Size, Theme, ThemeProvider, Tooltip, TooltipProps } from '@lumx/react';\nimport { BaseButtonProps, ButtonRoot } from '@lumx/react/components/button/ButtonRoot';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface IconButtonProps extends BaseButtonProps {\n /**\n * Icon (SVG path).\n * If `image` is also set, `image` will be used instead.\n */\n icon?: string;\n /**\n * Image (image url).\n * Has priority over `icon`.\n */\n image?: string;\n /**\n * Label text (required for a11y purpose).\n * If you really don't want an aria-label, you can set an empty label (this is not recommended).\n */\n label: string;\n /**\n * Props to pass to the tooltip.\n * If undefined or if tooltipProps.label is undefined, the label prop will be used as tooltip label.\n * */\n tooltipProps?: Partial<TooltipProps>;\n /** Whether the tooltip should be hidden or not. */\n hideTooltip?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'IconButton';\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<IconButtonProps> = {\n emphasis: Emphasis.high,\n size: Size.m,\n};\n\n/**\n * IconButton component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const IconButton = forwardRef<IconButtonProps, HTMLButtonElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n emphasis = DEFAULT_PROPS.emphasis,\n image,\n icon,\n label,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n tooltipProps,\n hideTooltip,\n ...forwardedProps\n } = props;\n\n return (\n <Tooltip label={hideTooltip ? '' : label} {...tooltipProps}>\n <ButtonRoot ref={ref} {...{ emphasis, size, theme, ...forwardedProps }} aria-label={label} variant=\"icon\">\n {image ? (\n <img\n // no need to set alt as an aria-label is already set on the button\n alt=\"\"\n src={image}\n />\n ) : (\n <ThemeProvider value={undefined}>\n <Icon icon={icon as string} />\n </ThemeProvider>\n )}\n </ButtonRoot>\n </Tooltip>\n );\n});\nIconButton.displayName = COMPONENT_NAME;\nIconButton.className = CLASSNAME;\nIconButton.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","emphasis","Emphasis","high","size","Size","m","IconButton","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","image","icon","label","theme","tooltipProps","hideTooltip","forwardedProps","_jsx","Tooltip","children","ButtonRoot","variant","alt","src","ThemeProvider","value","undefined","Icon","displayName","className","defaultProps"],"mappings":";;;;;;;;;AA+BA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,YAAY,CAAA;;AAEnC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAuC,GAAG;EAC5CC,QAAQ,EAAEC,QAAQ,CAACC,IAAI;EACvBC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAGC,UAAU,CAAqC,CAACC,KAAK,EAAEC,GAAG,KAAK;EACrF,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFb,QAAQ,GAAGD,aAAa,CAACC,QAAQ;IACjCc,KAAK;IACLC,IAAI;IACJC,KAAK;IACLb,IAAI,GAAGJ,aAAa,CAACI,IAAI;AACzBc,IAAAA,KAAK,GAAGP,YAAY;IACpBQ,YAAY;IACZC,WAAW;IACX,GAAGC,cAAAA;AACP,GAAC,GAAGZ,KAAK,CAAA;EAET,oBACIa,GAAA,CAACC,OAAO,EAAA;AAACN,IAAAA,KAAK,EAAEG,WAAW,GAAG,EAAE,GAAGH,KAAM;AAAA,IAAA,GAAKE,YAAY;IAAAK,QAAA,eACtDF,GAAA,CAACG,UAAU,EAAA;AAACf,MAAAA,GAAG,EAAEA,GAAI;MAAOT,QAAQ;MAAEG,IAAI;MAAEc,KAAK;AAAE,MAAA,GAAGG,cAAc;AAAI,MAAA,YAAA,EAAYJ,KAAM;AAACS,MAAAA,OAAO,EAAC,MAAM;MAAAF,QAAA,EACpGT,KAAK,gBACFO,GAAA,CAAA,KAAA,EAAA;AACI;AACAK,QAAAA,GAAG,EAAC,EAAE;AACNC,QAAAA,GAAG,EAAEb,KAAAA;AAAM,OACd,CAAC,gBAEFO,GAAA,CAACO,aAAa,EAAA;AAACC,QAAAA,KAAK,EAAEC,SAAU;QAAAP,QAAA,eAC5BF,GAAA,CAACU,IAAI,EAAA;AAAChB,UAAAA,IAAI,EAAEA,IAAAA;SAAiB,CAAA;OAClB,CAAA;KAEX,CAAA;AAAC,GACR,CAAC,CAAA;AAElB,CAAC,EAAC;AACFT,UAAU,CAAC0B,WAAW,GAAGpC,cAAc,CAAA;AACvCU,UAAU,CAAC2B,SAAS,GAAGpC,SAAS,CAAA;AAChCS,UAAU,CAAC4B,YAAY,GAAGnC,aAAa;;;;"}
1
+ {"version":3,"file":"IconButton-e11b5e74.js","sources":["../../src/components/button/IconButton.tsx"],"sourcesContent":["import { Emphasis, Icon, Size, Theme, ThemeProvider, Tooltip, TooltipProps } from '@lumx/react';\nimport { BaseButtonProps, ButtonRoot } from '@lumx/react/components/button/ButtonRoot';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface IconButtonProps extends BaseButtonProps {\n /**\n * Icon (SVG path).\n * If `image` is also set, `image` will be used instead.\n */\n icon?: string;\n /**\n * Image (image url).\n * Has priority over `icon`.\n */\n image?: string;\n /**\n * Label text (required for a11y purpose).\n * If you really don't want an aria-label, you can set an empty label (this is not recommended).\n */\n label: string;\n /**\n * Props to pass to the tooltip.\n * If undefined or if tooltipProps.label is undefined, the label prop will be used as tooltip label.\n * */\n tooltipProps?: Partial<TooltipProps>;\n /** Whether the tooltip should be hidden or not. */\n hideTooltip?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'IconButton';\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<IconButtonProps> = {\n emphasis: Emphasis.high,\n size: Size.m,\n};\n\n/**\n * IconButton component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const IconButton = forwardRef<IconButtonProps, HTMLButtonElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n emphasis = DEFAULT_PROPS.emphasis,\n image,\n icon,\n label,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n tooltipProps,\n hideTooltip,\n ...forwardedProps\n } = props;\n\n return (\n <Tooltip label={hideTooltip ? '' : label} {...tooltipProps}>\n <ButtonRoot ref={ref} {...{ emphasis, size, theme, ...forwardedProps }} aria-label={label} variant=\"icon\">\n {image ? (\n <img\n // no need to set alt as an aria-label is already set on the button\n alt=\"\"\n src={image}\n />\n ) : (\n <ThemeProvider value={undefined}>\n <Icon icon={icon as string} />\n </ThemeProvider>\n )}\n </ButtonRoot>\n </Tooltip>\n );\n});\nIconButton.displayName = COMPONENT_NAME;\nIconButton.className = CLASSNAME;\nIconButton.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","emphasis","Emphasis","high","size","Size","m","IconButton","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","image","icon","label","theme","tooltipProps","hideTooltip","forwardedProps","_jsx","Tooltip","children","ButtonRoot","variant","alt","src","ThemeProvider","value","undefined","Icon","displayName","className","defaultProps"],"mappings":";;;;;;;;;AA+BA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,YAAY,CAAA;;AAEnC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAuC,GAAG;EAC5CC,QAAQ,EAAEC,QAAQ,CAACC,IAAI;EACvBC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAGC,UAAU,CAAqC,CAACC,KAAK,EAAEC,GAAG,KAAK;EACrF,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFb,QAAQ,GAAGD,aAAa,CAACC,QAAQ;IACjCc,KAAK;IACLC,IAAI;IACJC,KAAK;IACLb,IAAI,GAAGJ,aAAa,CAACI,IAAI;AACzBc,IAAAA,KAAK,GAAGP,YAAY;IACpBQ,YAAY;IACZC,WAAW;IACX,GAAGC,cAAAA;AACP,GAAC,GAAGZ,KAAK,CAAA;EAET,oBACIa,GAAA,CAACC,OAAO,EAAA;AAACN,IAAAA,KAAK,EAAEG,WAAW,GAAG,EAAE,GAAGH,KAAM;AAAA,IAAA,GAAKE,YAAY;IAAAK,QAAA,eACtDF,GAAA,CAACG,UAAU,EAAA;AAACf,MAAAA,GAAG,EAAEA,GAAI;MAAOT,QAAQ;MAAEG,IAAI;MAAEc,KAAK;AAAE,MAAA,GAAGG,cAAc;AAAI,MAAA,YAAA,EAAYJ,KAAM;AAACS,MAAAA,OAAO,EAAC,MAAM;MAAAF,QAAA,EACpGT,KAAK,gBACFO,GAAA,CAAA,KAAA,EAAA;AACI;AACAK,QAAAA,GAAG,EAAC,EAAE;AACNC,QAAAA,GAAG,EAAEb,KAAAA;AAAM,OACd,CAAC,gBAEFO,GAAA,CAACO,aAAa,EAAA;AAACC,QAAAA,KAAK,EAAEC,SAAU;QAAAP,QAAA,eAC5BF,GAAA,CAACU,IAAI,EAAA;AAAChB,UAAAA,IAAI,EAAEA,IAAAA;SAAiB,CAAA;OAClB,CAAA;KAEX,CAAA;AAAC,GACR,CAAC,CAAA;AAElB,CAAC,EAAC;AACFT,UAAU,CAAC0B,WAAW,GAAGpC,cAAc,CAAA;AACvCU,UAAU,CAAC2B,SAAS,GAAGpC,SAAS,CAAA;AAChCS,UAAU,CAAC4B,YAAY,GAAGnC,aAAa;;;;"}
@@ -1,8 +1,8 @@
1
1
  import classNames from 'classnames';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { u as useTheme } from './ThemeContext-3181f000.js';
4
- import { FlexBox } from './components/flex-box-15be92f6.js';
5
- import { T as Text } from './index-151e2652.js';
4
+ import { FlexBox } from './components/flex-box-4eeba972.js';
5
+ import { T as Text } from './index-77f213b1.js';
6
6
 
7
7
  /** Internal component used to render image captions */
8
8
  const ImageCaption = props => {
@@ -72,4 +72,4 @@ const ImageCaption = props => {
72
72
  };
73
73
 
74
74
  export { ImageCaption as I };
75
- //# sourceMappingURL=ImageCaption-16bf224b.js.map
75
+ //# sourceMappingURL=ImageCaption-6f2f4131.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageCaption-16bf224b.js","sources":["../../src/components/image-block/ImageCaption.tsx"],"sourcesContent":["import { CSSProperties, ReactNode } from 'react';\n\nimport { FlexBox, HorizontalAlignment, Text, TextProps, useTheme } from '@lumx/react';\nimport { HasPolymorphicAs, HasTheme } from '@lumx/react/utils/type';\nimport classNames from 'classnames';\n\ntype As = 'div' | 'figcaption';\n\ntype ForwardedTextProps = Omit<TextProps, 'as' | 'typography' | 'color' | 'colorVariant'>;\n\nexport type ImageCaptionMetadata = {\n /** Image title to display in the caption. */\n title?: string;\n /** Props to pass to the title. */\n titleProps?: ForwardedTextProps;\n /** Image description. Can be either a string, or sanitized html. */\n description?: string | { __html: string };\n /** Props to pass to the title. */\n descriptionProps?: ForwardedTextProps;\n /** Tag content. */\n tags?: ReactNode;\n /** Caption custom CSS style. */\n captionStyle?: CSSProperties;\n};\n\nexport type ImageCaptionProps<AS extends As = 'figcaption'> = HasTheme &\n HasPolymorphicAs<AS> &\n ImageCaptionMetadata & {\n /** Base className for sub elements */\n baseClassName?: string;\n /** Alignment. */\n align?: HorizontalAlignment;\n /** Truncate text on title & description (no line wrapping). */\n truncate?: TextProps['truncate'];\n };\n\n/** Internal component used to render image captions */\nexport const ImageCaption = <AS extends As>(props: ImageCaptionProps<AS>) => {\n const defaultTheme = useTheme();\n const {\n baseClassName,\n theme = defaultTheme,\n as = 'figcaption',\n title,\n titleProps,\n description,\n descriptionProps,\n tags,\n captionStyle,\n align,\n truncate,\n } = props;\n if (!title && !description && !tags) return null;\n\n const titleColor = { color: theme === 'dark' ? 'light' : 'dark' } as const;\n const baseColor = { color: theme === 'dark' ? 'light' : 'dark', colorVariant: 'L2' } as const;\n\n // Display description as string or HTML\n const descriptionContent =\n typeof description === 'string' ? { children: description } : { dangerouslySetInnerHTML: description };\n\n return (\n <FlexBox\n as={as}\n className={classNames(baseClassName && `${baseClassName}__wrapper`)}\n style={captionStyle}\n orientation=\"vertical\"\n vAlign={align}\n hAlign={align === 'center' ? align : undefined}\n gap=\"regular\"\n >\n {(title || description) && (\n <Text\n as=\"p\"\n className={classNames(baseClassName && `${baseClassName}__caption`)}\n truncate={truncate}\n {...baseColor}\n >\n {title && (\n <Text\n {...titleProps}\n as=\"span\"\n className={classNames(titleProps?.className, baseClassName && `${baseClassName}__title`)}\n typography=\"subtitle1\"\n {...titleColor}\n >\n {title}\n </Text>\n )}{' '}\n {description && (\n <Text\n {...descriptionProps}\n as=\"span\"\n className={classNames(\n descriptionProps?.className,\n baseClassName && `${baseClassName}__description`,\n )}\n typography=\"body1\"\n {...descriptionContent}\n />\n )}\n </Text>\n )}\n {tags && (\n <FlexBox\n className={classNames(baseClassName && `${baseClassName}__tags`)}\n orientation=\"horizontal\"\n vAlign={align}\n >\n {tags}\n </FlexBox>\n )}\n </FlexBox>\n );\n};\n"],"names":["ImageCaption","props","defaultTheme","useTheme","baseClassName","theme","as","title","titleProps","description","descriptionProps","tags","captionStyle","align","truncate","titleColor","color","baseColor","colorVariant","descriptionContent","children","dangerouslySetInnerHTML","_jsxs","FlexBox","className","classNames","style","orientation","vAlign","hAlign","undefined","gap","Text","_jsx","typography"],"mappings":"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"}
1
+ {"version":3,"file":"ImageCaption-6f2f4131.js","sources":["../../src/components/image-block/ImageCaption.tsx"],"sourcesContent":["import { CSSProperties, ReactNode } from 'react';\n\nimport { FlexBox, HorizontalAlignment, Text, TextProps, useTheme } from '@lumx/react';\nimport { HasPolymorphicAs, HasTheme } from '@lumx/react/utils/type';\nimport classNames from 'classnames';\n\ntype As = 'div' | 'figcaption';\n\ntype ForwardedTextProps = Omit<TextProps, 'as' | 'typography' | 'color' | 'colorVariant'>;\n\nexport type ImageCaptionMetadata = {\n /** Image title to display in the caption. */\n title?: string;\n /** Props to pass to the title. */\n titleProps?: ForwardedTextProps;\n /** Image description. Can be either a string, or sanitized html. */\n description?: string | { __html: string };\n /** Props to pass to the title. */\n descriptionProps?: ForwardedTextProps;\n /** Tag content. */\n tags?: ReactNode;\n /** Caption custom CSS style. */\n captionStyle?: CSSProperties;\n};\n\nexport type ImageCaptionProps<AS extends As = 'figcaption'> = HasTheme &\n HasPolymorphicAs<AS> &\n ImageCaptionMetadata & {\n /** Base className for sub elements */\n baseClassName?: string;\n /** Alignment. */\n align?: HorizontalAlignment;\n /** Truncate text on title & description (no line wrapping). */\n truncate?: TextProps['truncate'];\n };\n\n/** Internal component used to render image captions */\nexport const ImageCaption = <AS extends As>(props: ImageCaptionProps<AS>) => {\n const defaultTheme = useTheme();\n const {\n baseClassName,\n theme = defaultTheme,\n as = 'figcaption',\n title,\n titleProps,\n description,\n descriptionProps,\n tags,\n captionStyle,\n align,\n truncate,\n } = props;\n if (!title && !description && !tags) return null;\n\n const titleColor = { color: theme === 'dark' ? 'light' : 'dark' } as const;\n const baseColor = { color: theme === 'dark' ? 'light' : 'dark', colorVariant: 'L2' } as const;\n\n // Display description as string or HTML\n const descriptionContent =\n typeof description === 'string' ? { children: description } : { dangerouslySetInnerHTML: description };\n\n return (\n <FlexBox\n as={as}\n className={classNames(baseClassName && `${baseClassName}__wrapper`)}\n style={captionStyle}\n orientation=\"vertical\"\n vAlign={align}\n hAlign={align === 'center' ? align : undefined}\n gap=\"regular\"\n >\n {(title || description) && (\n <Text\n as=\"p\"\n className={classNames(baseClassName && `${baseClassName}__caption`)}\n truncate={truncate}\n {...baseColor}\n >\n {title && (\n <Text\n {...titleProps}\n as=\"span\"\n className={classNames(titleProps?.className, baseClassName && `${baseClassName}__title`)}\n typography=\"subtitle1\"\n {...titleColor}\n >\n {title}\n </Text>\n )}{' '}\n {description && (\n <Text\n {...descriptionProps}\n as=\"span\"\n className={classNames(\n descriptionProps?.className,\n baseClassName && `${baseClassName}__description`,\n )}\n typography=\"body1\"\n {...descriptionContent}\n />\n )}\n </Text>\n )}\n {tags && (\n <FlexBox\n className={classNames(baseClassName && `${baseClassName}__tags`)}\n orientation=\"horizontal\"\n vAlign={align}\n >\n {tags}\n </FlexBox>\n )}\n </FlexBox>\n );\n};\n"],"names":["ImageCaption","props","defaultTheme","useTheme","baseClassName","theme","as","title","titleProps","description","descriptionProps","tags","captionStyle","align","truncate","titleColor","color","baseColor","colorVariant","descriptionContent","children","dangerouslySetInnerHTML","_jsxs","FlexBox","className","classNames","style","orientation","vAlign","hAlign","undefined","gap","Text","_jsx","typography"],"mappings":";;;;;;AAoCA;AACaA,MAAAA,YAAY,GAAmBC,KAA4B,IAAK;AACzE,EAAA,MAAMC,YAAY,GAAGC,QAAQ,EAAE,CAAA;EAC/B,MAAM;IACFC,aAAa;AACbC,IAAAA,KAAK,GAAGH,YAAY;AACpBI,IAAAA,EAAE,GAAG,YAAY;IACjBC,KAAK;IACLC,UAAU;IACVC,WAAW;IACXC,gBAAgB;IAChBC,IAAI;IACJC,YAAY;IACZC,KAAK;AACLC,IAAAA,QAAAA;AACJ,GAAC,GAAGb,KAAK,CAAA;EACT,IAAI,CAACM,KAAK,IAAI,CAACE,WAAW,IAAI,CAACE,IAAI,EAAE,OAAO,IAAI,CAAA;AAEhD,EAAA,MAAMI,UAAU,GAAG;AAAEC,IAAAA,KAAK,EAAEX,KAAK,KAAK,MAAM,GAAG,OAAO,GAAG,MAAA;GAAiB,CAAA;AAC1E,EAAA,MAAMY,SAAS,GAAG;AAAED,IAAAA,KAAK,EAAEX,KAAK,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM;AAAEa,IAAAA,YAAY,EAAE,IAAA;GAAe,CAAA;;AAE7F;AACA,EAAA,MAAMC,kBAAkB,GACpB,OAAOV,WAAW,KAAK,QAAQ,GAAG;AAAEW,IAAAA,QAAQ,EAAEX,WAAAA;AAAY,GAAC,GAAG;AAAEY,IAAAA,uBAAuB,EAAEZ,WAAAA;GAAa,CAAA;EAE1G,oBACIa,IAAA,CAACC,OAAO,EAAA;AACJjB,IAAAA,EAAE,EAAEA,EAAG;IACPkB,SAAS,EAAEC,UAAU,CAACrB,aAAa,IAAI,CAAGA,EAAAA,aAAa,WAAW,CAAE;AACpEsB,IAAAA,KAAK,EAAEd,YAAa;AACpBe,IAAAA,WAAW,EAAC,UAAU;AACtBC,IAAAA,MAAM,EAAEf,KAAM;AACdgB,IAAAA,MAAM,EAAEhB,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGiB,SAAU;AAC/CC,IAAAA,GAAG,EAAC,SAAS;IAAAX,QAAA,EAAA,CAEZ,CAACb,KAAK,IAAIE,WAAW,kBAClBa,IAAA,CAACU,IAAI,EAAA;AACD1B,MAAAA,EAAE,EAAC,GAAG;MACNkB,SAAS,EAAEC,UAAU,CAACrB,aAAa,IAAI,CAAGA,EAAAA,aAAa,WAAW,CAAE;AACpEU,MAAAA,QAAQ,EAAEA,QAAS;AAAA,MAAA,GACfG,SAAS;AAAAG,MAAAA,QAAA,EAEZb,CAAAA,KAAK,iBACF0B,GAAA,CAACD,IAAI,EAAA;AAAA,QAAA,GACGxB,UAAU;AACdF,QAAAA,EAAE,EAAC,MAAM;AACTkB,QAAAA,SAAS,EAAEC,UAAU,CAACjB,UAAU,EAAEgB,SAAS,EAAEpB,aAAa,IAAI,CAAA,EAAGA,aAAa,CAAA,OAAA,CAAS,CAAE;AACzF8B,QAAAA,UAAU,EAAC,WAAW;AAAA,QAAA,GAClBnB,UAAU;AAAAK,QAAAA,QAAA,EAEbb,KAAAA;OACC,CACT,EAAE,GAAG,EACLE,WAAW,iBACRwB,GAAA,CAACD,IAAI,EAAA;AAAA,QAAA,GACGtB,gBAAgB;AACpBJ,QAAAA,EAAE,EAAC,MAAM;AACTkB,QAAAA,SAAS,EAAEC,UAAU,CACjBf,gBAAgB,EAAEc,SAAS,EAC3BpB,aAAa,IAAI,CAAA,EAAGA,aAAa,CAAA,aAAA,CACrC,CAAE;AACF8B,QAAAA,UAAU,EAAC,OAAO;QAAA,GACdf,kBAAAA;AAAkB,OACzB,CACJ,CAAA;AAAA,KACC,CACT,EACAR,IAAI,iBACDsB,GAAA,CAACV,OAAO,EAAA;MACJC,SAAS,EAAEC,UAAU,CAACrB,aAAa,IAAI,CAAGA,EAAAA,aAAa,QAAQ,CAAE;AACjEuB,MAAAA,WAAW,EAAC,YAAY;AACxBC,MAAAA,MAAM,EAAEf,KAAM;AAAAO,MAAAA,QAAA,EAEbT,IAAAA;AAAI,KACA,CACZ,CAAA;AAAA,GACI,CAAC,CAAA;AAElB;;;;"}
@@ -1,13 +1,15 @@
1
1
  import React__default, { useState, useEffect, useMemo, Children, isValidElement, cloneElement, useRef } from 'react';
2
2
  import classNames from 'classnames';
3
+ import get from 'lodash/get';
3
4
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
4
5
  import { m as mergeRefs } from './mergeRefs-f0d7d6ea.js';
5
6
  import { f as forwardRef } from './forwardRef-8bce732e.js';
7
+ import isEmpty from 'lodash/isEmpty';
6
8
  import { onEnterPressed, onButtonPressed } from '@lumx/core/js/utils';
7
9
  import { u as useDisableStateProps } from './useDisableStateProps-69e16b7c.js';
8
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
11
  import { Size } from '@lumx/core/js/constants';
10
- import { i as isComponent } from './isComponent-b9762ff1.js';
12
+ import { i as isComponent } from './isComponent-78df9309.js';
11
13
 
12
14
  const INITIAL_INDEX$1 = -1;
13
15
 
@@ -105,7 +107,7 @@ const useKeyboardListNavigation = (items, ref, onListItemSelected, onListItemNav
105
107
  onListItemSelected(selectedItem);
106
108
  resetActiveIndex();
107
109
  } else if (activeItemIndex === initialIndex && onEnterPressed) {
108
- const value = evt.target?.value;
110
+ const value = get(evt, 'target.value');
109
111
  onEnterPressed(value);
110
112
  resetActiveIndex();
111
113
  }
@@ -116,7 +118,7 @@ const useKeyboardListNavigation = (items, ref, onListItemSelected, onListItemNav
116
118
  * @param evt - key pressed event
117
119
  */
118
120
  const onTabKeyPressed = evt => {
119
- const value = evt.target?.value;
121
+ const value = get(evt, 'target.value');
120
122
  if (preventTabOnEnteredValue && value && value.length > 0) {
121
123
  preventDefaultAndStopPropagation(evt);
122
124
  }
@@ -212,7 +214,7 @@ function isClickable({
212
214
  linkProps,
213
215
  onItemSelected
214
216
  }) {
215
- return !!linkProps?.href || !!onItemSelected;
217
+ return !isEmpty(linkProps?.href) || !!onItemSelected;
216
218
  }
217
219
 
218
220
  /**
@@ -587,7 +589,7 @@ var reactIsExports = requireReactIs();
587
589
  function flattenChildren(children) {
588
590
  function recur(nodes, keys = []) {
589
591
  return Children.toArray(nodes).reduce((acc, node, index) => {
590
- const nodeKeys = keys.concat(node?.key ?? index);
592
+ const nodeKeys = keys.concat(get(node, 'key') ?? index);
591
593
  if (reactIsExports.isFragment(node)) {
592
594
  acc.push(...recur(node.props.children, nodeKeys));
593
595
  } else if (/*#__PURE__*/isValidElement(node)) {
@@ -697,7 +699,7 @@ const useInteractiveList = options => {
697
699
  setActiveItemIndex(nextIndex);
698
700
  evt.preventDefault();
699
701
  evt.stopPropagation();
700
- onListItemNavigated?.(nextIndex, items[nextIndex]?.key);
702
+ onListItemNavigated?.(nextIndex, get(items, [nextIndex, 'key']));
701
703
  };
702
704
 
703
705
  /**
@@ -815,4 +817,4 @@ const List = Object.assign(InternalList, {
815
817
  });
816
818
 
817
819
  export { List as L, ListItem as a, isClickable as i };
818
- //# sourceMappingURL=List-c75646f2.js.map
820
+ //# sourceMappingURL=List-4e95288a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List-4e95288a.js","sources":["../../src/hooks/useKeyboardListNavigation.tsx","../../src/utils/react/renderLink.tsx","../../src/components/list/ListItem.tsx","../../../../node_modules/react-is/cjs/react-is.production.min.js","../../../../node_modules/react-is/cjs/react-is.development.js","../../../../node_modules/react-is/index.js","../../src/utils/react/flattenChildren.ts","../../src/components/list/useInteractiveList.tsx","../../src/components/list/List.tsx"],"sourcesContent":["import { RefObject, SetStateAction, useEffect, useState } from 'react';\n\nimport get from 'lodash/get';\n\ntype Listener = (evt: KeyboardEvent) => void;\n\ninterface UseKeyboardListNavigationType {\n /** the current active index */\n activeItemIndex: number;\n /** callback to be used when a key is pressed. usually used with the native prop `onKeyDown` */\n onKeyboardNavigation: Listener;\n /** Resets the active index to the initial state */\n resetActiveIndex(): void;\n /** Sets the active index to a given value */\n setActiveItemIndex(value: SetStateAction<number>): void;\n}\n\nexport type useKeyboardListNavigationType = <I>(\n items: I[],\n ref: RefObject<HTMLElement>,\n onListItemSelected: (itemSelected: I) => void,\n onListItemNavigated?: (itemSelected: I) => void,\n onEnterPressed?: (itemSelected: string) => void,\n onBackspacePressed?: Listener,\n keepFocusAfterSelection?: boolean,\n initialIndex?: number,\n preventTabOnEnteredValue?: boolean,\n) => UseKeyboardListNavigationType;\n\nconst INITIAL_INDEX = -1;\n\n/**\n * This custom hook provides the necessary set of functions and values to properly navigate\n * a list using the keyboard.\n *\n * @param items the list of items that will be navigated using the keyboard.\n * @param ref A reference to the element that is controlling the navigation.\n * @param onListItemSelected callback to be executed when the ENTER key is pressed on an item.\n * @param onListItemNavigated callback to be executed when the Arrow keys are pressed.\n * @param onEnterPressed callback to be executed when the ENTER key is pressed.\n * @param onBackspacePressed callback to be executed when the BACKSPACE key is pressed.\n * @param keepFocusAfterSelection determines whether after selecting an item, the focus should be maintained on the current target or not.\n * @param initialIndex where should the navigation start from. it defaults to `-1`, so the first item navigated is the item on position `0`.\n * @param preventTabOnEnteredValue determines whether upon TAB, if there is a value entered, the event is prevented or not.\n * @return useKeyboardListNavigation helpers.\n */\nexport const useKeyboardListNavigation: useKeyboardListNavigationType = (\n items,\n ref,\n onListItemSelected,\n onListItemNavigated,\n onEnterPressed,\n onBackspacePressed,\n keepFocusAfterSelection = false,\n initialIndex = INITIAL_INDEX,\n preventTabOnEnteredValue = true,\n) => {\n const [activeItemIndex, setActiveItemIndex] = useState(initialIndex);\n\n /**\n * This function calculates the next index in the list to be highlighted\n * @param key - key code pressed\n * @return next active index\n */\n const calculateActiveIndex = (key: string): number => {\n switch (key) {\n case 'ArrowDown':\n return activeItemIndex + 1 < items.length ? activeItemIndex + 1 : 0;\n case 'ArrowUp':\n return activeItemIndex - 1 >= 0 ? activeItemIndex - 1 : items.length - 1;\n default:\n return initialIndex;\n }\n };\n\n /**\n * Resets the active index to the initial state\n */\n const resetActiveIndex = () => {\n setActiveItemIndex(initialIndex);\n };\n\n /**\n * Prevents the default event and stops the propagation of said event\n * @param evt - key pressed event\n */\n const preventDefaultAndStopPropagation: Listener = (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n /**\n * Handles navigation with the arrows using the keyboard\n * @param evt - key pressed event\n */\n const onArrowPressed: Listener = (evt) => {\n const { key } = evt;\n const nextActiveIndex = calculateActiveIndex(key);\n setActiveItemIndex(nextActiveIndex);\n preventDefaultAndStopPropagation(evt);\n if (onListItemNavigated) {\n const selectedItem = items[nextActiveIndex];\n onListItemNavigated(selectedItem);\n }\n };\n\n /**\n * Handles the event when the backspace key is pressed\n * @param evt - key pressed event\n */\n const onBackspaceKeyPressed: Listener = (evt) => {\n if (onBackspacePressed) {\n onBackspacePressed(evt);\n }\n };\n\n /**\n * Handles when the ENTER key is pressed\n * @param evt - key pressed event\n */\n const onEnterKeyPressed: Listener = (evt) => {\n if (!onListItemSelected) {\n return;\n }\n\n preventDefaultAndStopPropagation(evt);\n\n if (!keepFocusAfterSelection) {\n (evt.currentTarget as HTMLElement).blur();\n }\n\n const selectedItem = items[activeItemIndex];\n\n if (selectedItem) {\n onListItemSelected(selectedItem);\n resetActiveIndex();\n } else if (activeItemIndex === initialIndex && onEnterPressed) {\n const value = get(evt, 'target.value');\n onEnterPressed(value);\n resetActiveIndex();\n }\n };\n\n /**\n * Handles when the TAB key is pressed\n * @param evt - key pressed event\n */\n const onTabKeyPressed: Listener = (evt) => {\n const value = get(evt, 'target.value');\n\n if (preventTabOnEnteredValue && value && value.length > 0) {\n preventDefaultAndStopPropagation(evt);\n }\n };\n\n /**\n * In order to make it easier in the future to add new events depending on the key\n * a map was created to add these handlers. In the future, if there is another event\n * that we need to manage depending on a specific key, we just need to add the key code\n * here, and as a value, the handler for said key.\n */\n const eventsForKeyPressed: Record<string, Listener> = {\n ArrowDown: onArrowPressed,\n Tab: onTabKeyPressed,\n ArrowUp: onArrowPressed,\n Enter: onEnterKeyPressed,\n Backspace: onBackspaceKeyPressed,\n };\n\n /**\n * Calculates the next active item index depending on the key pressed.\n * If the key pressed was ENTER, the function executes the callback `onListItemSelected`\n * and resets the active index, since an item was selected.\n * @param evt - key pressed or key down event\n */\n const onKeyboardNavigation: Listener = (evt) => {\n const { key } = evt;\n const handler = eventsForKeyPressed[key];\n\n if (handler) {\n handler(evt);\n }\n };\n\n useEffect(() => {\n const { current: currentElement } = ref;\n if (!currentElement) {\n return undefined;\n }\n currentElement.addEventListener('focus', resetActiveIndex);\n currentElement.addEventListener('keydown', onKeyboardNavigation);\n return () => {\n currentElement.removeEventListener('focus', resetActiveIndex);\n currentElement.removeEventListener('keydown', onKeyboardNavigation);\n };\n });\n\n return {\n activeItemIndex,\n onKeyboardNavigation,\n resetActiveIndex,\n setActiveItemIndex,\n };\n};\n","import React, { ReactElement, ReactNode } from 'react';\n\ninterface Props {\n linkAs?: any;\n}\n\n/**\n * Render link with default <a> HTML component or a custom one provided by `linkAs`.\n *\n * Can be used to inject the `Link` component from `react-router` and provide better a11y on LumX components.\n *\n * @param linkAs Custom link component.\n * @param children Link children.\n * @return A link.\n */\nexport const renderLink = <P extends Props>({ linkAs, ...forwardedProps }: P, ...children: ReactNode[]): ReactElement =>\n React.createElement(linkAs || 'a', forwardedProps, ...children);\n","import { ReactNode, Ref, SyntheticEvent, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { ListProps, Size } from '@lumx/react';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { onEnterPressed, onButtonPressed } from '@lumx/core/js/utils';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { renderLink } from '@lumx/react/utils/react/renderLink';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useDisableStateProps } from '@lumx/react/utils/disabled/useDisableStateProps';\nimport { HasAriaDisabled } from '@lumx/react/utils/type/HasAriaDisabled';\n\nexport type ListItemSize = Extract<Size, 'tiny' | 'regular' | 'big' | 'huge'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface ListItemProps extends GenericProps, HasAriaDisabled {\n /** A component to be rendered after the content. */\n after?: ReactNode;\n /** A component to be rendered before the content. */\n before?: ReactNode;\n /** Content. */\n children: string | ReactNode;\n /** Whether the list item should be highlighted or not. */\n isHighlighted?: boolean;\n /** Whether the component is selected or not. */\n isSelected?: boolean;\n /** Whether link/button is disabled or not. */\n isDisabled?: boolean;\n /** Reference to the <li> element. */\n listItemRef?: Ref<HTMLLIElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n /** Props that will be passed on to the Link */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Reference to the link element. */\n linkRef?: Ref<HTMLAnchorElement>;\n /** Size variant. */\n size?: ListItemSize;\n\n /** On selected callback. */\n onItemSelected?(evt: SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'ListItem';\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<ListProps> = {\n size: Size.regular,\n};\n\n/**\n * Check if the list item is clickable.\n * @return `true` if the list item is clickable; `false` otherwise.\n */\nexport function isClickable({ linkProps, onItemSelected }: Partial<ListItemProps>): boolean {\n return !isEmpty(linkProps?.href) || !!onItemSelected;\n}\n\n/**\n * ListItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const ListItem = forwardRef<ListItemProps, HTMLLIElement>((props, ref) => {\n const { isAnyDisabled, disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n after,\n before,\n children,\n className,\n isHighlighted,\n isSelected,\n linkAs,\n linkProps = {},\n linkRef,\n onItemSelected,\n size = DEFAULT_PROPS.size,\n ...forwardedProps\n } = otherProps;\n\n const role = linkAs || linkProps.href ? 'link' : 'button';\n const onKeyDown = useMemo(() => {\n if (onItemSelected && role === 'link') return onEnterPressed(onItemSelected as any);\n if (onItemSelected && role === 'button') return onButtonPressed(onItemSelected as any);\n return undefined;\n }, [role, onItemSelected]);\n\n const content = (\n <>\n {before && <div className={`${CLASSNAME}__before`}>{before}</div>}\n <div className={`${CLASSNAME}__content`}>{children}</div>\n {after && <div className={`${CLASSNAME}__after`}>{after}</div>}\n </>\n );\n\n return (\n <li\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n size,\n }),\n )}\n >\n {isClickable({ linkProps, onItemSelected }) ? (\n /* Clickable list item */\n renderLink(\n {\n linkAs,\n tabIndex: !disabledStateProps.disabled ? 0 : undefined,\n role,\n 'aria-disabled': isAnyDisabled,\n ...linkProps,\n href: isAnyDisabled ? undefined : linkProps.href,\n className: classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__link`,\n isHighlighted,\n isSelected,\n isDisabled: isAnyDisabled,\n }),\n ),\n onClick: isAnyDisabled ? undefined : onItemSelected,\n onKeyDown: isAnyDisabled ? undefined : onKeyDown,\n ref: linkRef,\n },\n content,\n )\n ) : (\n /* Non clickable list item */\n <div className={`${CLASSNAME}__wrapper`}>{content}</div>\n )}\n </li>\n );\n});\nListItem.displayName = COMPONENT_NAME;\nListItem.className = CLASSNAME;\nListItem.defaultProps = DEFAULT_PROPS;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import get from 'lodash/get';\nimport { Children, Key, ReactChild, ReactNode, cloneElement, isValidElement } from 'react';\nimport { isFragment } from 'react-is';\n\n/**\n * Flatten list of react nodes removing fragments and adding keys.\n * based on: https://github.com/grrowl/react-keyed-flatten-children/blob/5d421644a449765ddd62b659946196b4b5d7b135/index.ts\n *\n * @param children React nodes to flatten.\n * @return Flattened react nodes.\n * @deprecated This function was used to develop keyboard navigation in the List component,\n * but we will replace this with a better method that does not require to hack the children inspection\n *\n * TODO: remove List keyboard navigation once we have provided alternative component (Menu, Combobox, etc.),\n * remove this function and then remove react-is from the dependencies\n */\nexport function flattenChildren(children: ReactNode) {\n function recur(nodes: ReactNode, keys: Key[] = []) {\n return Children.toArray(nodes).reduce((acc: ReactChild[], node, index) => {\n const nodeKeys = keys.concat(get(node, 'key') ?? index);\n if (isFragment(node)) {\n acc.push(...recur(node.props.children, nodeKeys));\n } else if (isValidElement(node)) {\n acc.push(cloneElement(node, { key: nodeKeys.join('.') }));\n } else if (typeof node === 'string' || typeof node === 'number') {\n acc.push(node);\n }\n return acc;\n }, []);\n }\n return recur(children);\n}\n","import { ListItemProps } from '@lumx/react';\nimport { isClickable } from '@lumx/react/components/list/ListItem';\n\nimport { isComponent } from '@lumx/react/utils/type';\nimport { flattenChildren } from '@lumx/react/utils/react/flattenChildren';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport get from 'lodash/get';\nimport {\n cloneElement,\n Key,\n ReactElement,\n ReactNode,\n RefObject,\n SyntheticEvent,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\ntype Listener = (evt: KeyboardEvent) => void;\n\ninterface Options {\n /** List of items to navigate on. */\n items: ReactNode[] | ReactNode;\n /** Reference to the list-like element controlling the navigation. */\n ref: RefObject<HTMLElement>;\n\n /**\n * On list item navigated callback (triggered on ARROW key navigation).\n *\n * @param index Index of the navigated item among the sibling items.\n * @param key React key of the navigated item.\n */\n onListItemNavigated?(index: number, key: Key | null): void;\n\n /**\n * On list item selected callback (via ENTER key or click).\n *\n * @param index Index of the selected item among the sibling items.\n * @param key React key of the selected item.\n * @param evt Source event (either mouse or keyboard event).\n */\n onListItemSelected?(index: number, key: Key | null, evt: SyntheticEvent): void;\n}\n\ninterface Output {\n /** List of items transformed to accommodate keyboard navigation. */\n items: ReactNode[];\n /** Whether the list contains clickable items or not. */\n hasClickableItem: boolean;\n}\n\nexport type useInteractiveList = (options: Options) => Output;\n\nconst INITIAL_INDEX = -1;\n\nfunction onKeyboardFocus(props: any, handler: (evt: FocusEvent) => void) {\n let isMouseDown = false;\n return {\n onFocus(evt: FocusEvent) {\n props.onFocus?.(evt);\n if (!isMouseDown) {\n handler(evt);\n }\n },\n onMouseDown(evt: MouseEvent) {\n props.onMouseDown?.(evt);\n isMouseDown = true;\n },\n onMouseUp(evt: MouseEvent) {\n props.onMouseUp?.(evt);\n isMouseDown = false;\n },\n };\n}\n\nconst isNavigableItem = (node: ReactNode): node is ReactElement => {\n return isComponent('ListItem')(node) && isClickable(node.props) && !node.props.isDisabled;\n};\n\n/**\n * This custom hook detects clickable list item in a list and make them navigable with the keyboard.\n *\n * @param options See {@link Options}\n * @return See {@link Output}\n */\nexport const useInteractiveList: useInteractiveList = (options) => {\n const { ref, onListItemSelected, onListItemNavigated } = options;\n const items = useMemo(() => flattenChildren(options.items), [options.items]);\n const [activeItemIndex, setActiveItemIndex] = useState(INITIAL_INDEX);\n\n // Attach listeners to the list.\n useEffect(() => {\n const { current: listElement } = ref;\n if (!listElement) {\n return undefined;\n }\n\n /**\n * This function calculates the next index in the list to be active\n * @param index current index\n * @param code key code pressed\n * @return next index\n */\n const getNextIndex = (index: number, key: string): number => {\n switch (key) {\n case 'ArrowDown':\n return index + 1 < items.length ? index + 1 : 0;\n case 'ArrowUp':\n return index - 1 >= 0 ? index - 1 : items.length - 1;\n default:\n return INITIAL_INDEX;\n }\n };\n\n /**\n * Resets the active index to the initial state\n */\n const resetActiveIndex = () => {\n setActiveItemIndex(INITIAL_INDEX);\n };\n\n /**\n * Handles navigation with the arrows using the keyboard\n * @param evt Key event\n */\n const onArrowPressed: Listener = (evt) => {\n const { key } = evt;\n if (key !== 'ArrowUp' && key !== 'ArrowDown') {\n return;\n }\n\n let nextIndex = activeItemIndex;\n let iterations = 0;\n\n // Move to next navigable item.\n do {\n nextIndex = getNextIndex(nextIndex, key);\n iterations += 1;\n } while (\n nextIndex !== INITIAL_INDEX &&\n nextIndex !== activeItemIndex &&\n !isNavigableItem(items[nextIndex] as any) &&\n iterations < items.length\n );\n\n setActiveItemIndex(nextIndex);\n evt.preventDefault();\n evt.stopPropagation();\n onListItemNavigated?.(nextIndex, get(items, [nextIndex, 'key']));\n };\n\n /**\n * Reset active list item index when focusing outside the list.\n * @param evt Focus out event\n */\n const onFocusOut = (evt: FocusEvent) => {\n if (!evt.relatedTarget || !listElement.contains(evt.relatedTarget as any)) {\n resetActiveIndex();\n }\n };\n\n listElement.addEventListener('focusout', onFocusOut);\n listElement.addEventListener('keydown', onArrowPressed);\n return () => {\n listElement.removeEventListener('focusout', onFocusOut);\n listElement.removeEventListener('keydown', onArrowPressed);\n };\n }, [ref, activeItemIndex, items, onListItemNavigated]);\n\n return useMemo(() => {\n let hasClickableItem = false;\n const transformedItems = items.map((item, index) => {\n // Ignore if list not clickable or item is not a simple list item.\n if (!isNavigableItem(item)) {\n return item;\n }\n\n hasClickableItem = true;\n const isHighlighted = index === activeItemIndex;\n\n // Clone list item: inject ref, add tab index and active state.\n return cloneElement<ListItemProps>(item, {\n ...item.props,\n isHighlighted: item.props.isHighlighted ?? isHighlighted,\n linkRef: mergeRefs(item.props.linkRef, (element: any) => {\n if (isHighlighted) {\n element?.focus();\n }\n }),\n onItemSelected(evt) {\n item.props.onItemSelected?.();\n onListItemSelected?.(index, item.key, evt);\n },\n ...onKeyboardFocus(item.props, () => {\n setActiveItemIndex(index);\n }),\n });\n });\n return { items: transformedItems, hasClickableItem };\n }, [items, activeItemIndex, onListItemSelected]);\n};\n","import { Key, ReactNode, SyntheticEvent, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Size } from '@lumx/react';\nimport { useKeyboardListNavigation } from '@lumx/react/hooks/useKeyboardListNavigation';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useInteractiveList } from './useInteractiveList';\n\n/**\n * Defines the props of the component.\n */\nexport interface ListProps extends GenericProps {\n /** List content (should be ListItem, ListSubheader or ListDivider). */\n children: ReactNode;\n /**\n * Whether the list items are clickable.\n * @deprecated not needed anymore.\n */\n isClickable?: boolean;\n /** Item padding size. */\n itemPadding?: Extract<Size, 'big' | 'huge'>;\n /** Tab index of the list. Default to -1 */\n tabIndex?: number;\n /**\n * On list item selected callback.\n *\n * @param key React key of the selected item.\n * @param index Index of the selected item among the sibling items.\n * @param evt Source event (either mouse or keyboard event).\n */\n onListItemSelected?(key: Key, index: number, evt: SyntheticEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'List';\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<ListProps> = {\n tabIndex: -1,\n};\n\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/**\n * List component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalList = forwardRef<ListProps, HTMLUListElement>((props, ref) => {\n const {\n children,\n className,\n isClickable,\n itemPadding,\n onListItemSelected,\n tabIndex = DEFAULT_PROPS.tabIndex,\n ...forwardedProps\n } = props;\n const listElementRef = useRef<HTMLUListElement>(null);\n\n const { items, hasClickableItem } = useInteractiveList({\n items: children,\n ref: listElementRef,\n onListItemSelected,\n });\n const clickable = hasClickableItem || isClickable;\n\n return (\n <ul\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n itemPadding: itemPadding ?? (clickable ? Size.big : undefined),\n }),\n )}\n tabIndex={tabIndex}\n ref={mergeRefs(ref, listElementRef)}\n >\n {items}\n </ul>\n );\n});\nInternalList.displayName = COMPONENT_NAME;\nInternalList.className = CLASSNAME;\nInternalList.defaultProps = DEFAULT_PROPS;\n\nexport const List = Object.assign(InternalList, { useKeyboardListNavigation });\n"],"names":["INITIAL_INDEX","useKeyboardListNavigation","items","ref","onListItemSelected","onListItemNavigated","onEnterPressed","onBackspacePressed","keepFocusAfterSelection","initialIndex","preventTabOnEnteredValue","activeItemIndex","setActiveItemIndex","useState","calculateActiveIndex","key","length","resetActiveIndex","preventDefaultAndStopPropagation","evt","preventDefault","stopPropagation","onArrowPressed","nextActiveIndex","selectedItem","onBackspaceKeyPressed","onEnterKeyPressed","currentTarget","blur","value","get","onTabKeyPressed","eventsForKeyPressed","ArrowDown","Tab","ArrowUp","Enter","Backspace","onKeyboardNavigation","handler","useEffect","current","currentElement","undefined","addEventListener","removeEventListener","renderLink","linkAs","forwardedProps","children","React","createElement","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","regular","isClickable","linkProps","onItemSelected","isEmpty","href","ListItem","forwardRef","props","isAnyDisabled","disabledStateProps","otherProps","useDisableStateProps","after","before","className","isHighlighted","isSelected","linkRef","role","onKeyDown","useMemo","onButtonPressed","content","_jsxs","_Fragment","_jsx","classNames","handleBasicClasses","prefix","tabIndex","disabled","isDisabled","onClick","displayName","defaultProps","reactIsModule","require$$0","require$$1","flattenChildren","recur","nodes","keys","Children","toArray","reduce","acc","node","index","nodeKeys","concat","isFragment","push","isValidElement","cloneElement","join","onKeyboardFocus","isMouseDown","onFocus","onMouseDown","onMouseUp","isNavigableItem","isComponent","useInteractiveList","options","listElement","getNextIndex","nextIndex","iterations","onFocusOut","relatedTarget","contains","hasClickableItem","transformedItems","map","item","mergeRefs","element","focus","InternalList","itemPadding","listElementRef","useRef","clickable","big","List","Object","assign"],"mappings":"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","x_google_ignoreList":[3,4,5]}