@lumx/react 3.20.1-alpha.15 → 3.20.1-alpha.17

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 (163) hide show
  1. package/_internal/{Button-f19e18df.js → Button-1f227024.js} +30 -28
  2. package/_internal/{Button-f19e18df.js.map → Button-1f227024.js.map} +1 -1
  3. package/_internal/{ButtonRoot-ab633b1d.js → ButtonRoot-823f3e9c.js} +18 -16
  4. package/_internal/{ButtonRoot-ab633b1d.js.map → ButtonRoot-823f3e9c.js.map} +1 -1
  5. package/_internal/{Chip-4c572eec.js → Chip-a34f6905.js} +31 -34
  6. package/_internal/{Chip-4c572eec.js.map → Chip-a34f6905.js.map} +1 -1
  7. package/_internal/{ClickAwayProvider-bcce6ceb.js → ClickAwayProvider-7093ba23.js} +6 -4
  8. package/_internal/{ClickAwayProvider-bcce6ceb.js.map → ClickAwayProvider-7093ba23.js.map} +1 -1
  9. package/_internal/{DisabledStateContext-077b7bef.js → DisabledStateContext-ea04260d.js} +6 -6
  10. package/_internal/{DisabledStateContext-077b7bef.js.map → DisabledStateContext-ea04260d.js.map} +1 -1
  11. package/_internal/{HeadingLevelProvider-e4817816.js → HeadingLevelProvider-ebdcb0c7.js} +6 -4
  12. package/_internal/{HeadingLevelProvider-e4817816.js.map → HeadingLevelProvider-ebdcb0c7.js.map} +1 -1
  13. package/_internal/{IconButton-10585058.js → IconButton-f4df224c.js} +29 -24
  14. package/_internal/{IconButton-10585058.js.map → IconButton-f4df224c.js.map} +1 -1
  15. package/_internal/ImageCaption-8134a3aa.js +75 -0
  16. package/_internal/{ImageCaption-4279b2b6.js.map → ImageCaption-8134a3aa.js.map} +1 -1
  17. package/_internal/{List-d5f5d465.js → List-54237e0e.js} +52 -50
  18. package/_internal/{List-d5f5d465.js.map → List-54237e0e.js.map} +1 -1
  19. package/_internal/{PopoverDialog-21e5c9dd.js → PopoverDialog-e0967e5f.js} +166 -158
  20. package/_internal/{PopoverDialog-21e5c9dd.js.map → PopoverDialog-e0967e5f.js.map} +1 -1
  21. package/_internal/{Portal-c43d098b.js → Portal-3f86608e.js} +5 -2
  22. package/_internal/{Portal-c43d098b.js.map → Portal-3f86608e.js.map} +1 -1
  23. package/_internal/{RawClickable-c76bbc4c.js → RawClickable-2c2b6a89.js} +9 -7
  24. package/_internal/{RawClickable-c76bbc4c.js.map → RawClickable-2c2b6a89.js.map} +1 -1
  25. package/_internal/{Slides-01f513ce.js → Slides-b7a67f32.js} +99 -96
  26. package/_internal/{Slides-01f513ce.js.map → Slides-b7a67f32.js.map} +1 -1
  27. package/_internal/{Thumbnail-30d2a781.js → Thumbnail-b5dea0af.js} +46 -45
  28. package/_internal/{Thumbnail-30d2a781.js.map → Thumbnail-b5dea0af.js.map} +1 -1
  29. package/_internal/components/{alert-dialog-8f1c163c.js → alert-dialog-b284b191.js} +50 -35
  30. package/_internal/components/{alert-dialog-8f1c163c.js.map → alert-dialog-b284b191.js.map} +1 -1
  31. package/_internal/components/{autocomplete-bfbdeb3c.js → autocomplete-8d3f37ea.js} +64 -67
  32. package/_internal/components/{autocomplete-bfbdeb3c.js.map → autocomplete-8d3f37ea.js.map} +1 -1
  33. package/_internal/components/{avatar-6990e3e9.js → avatar-5fc70e00.js} +28 -32
  34. package/_internal/components/{avatar-6990e3e9.js.map → avatar-5fc70e00.js.map} +1 -1
  35. package/_internal/components/{badge-81543bc7.js → badge-8390e590.js} +18 -18
  36. package/_internal/components/{badge-81543bc7.js.map → badge-8390e590.js.map} +1 -1
  37. package/_internal/components/{button-927abe71.js → button-e3c7f2eb.js} +11 -13
  38. package/_internal/components/{button-927abe71.js.map → button-e3c7f2eb.js.map} +1 -1
  39. package/_internal/components/{checkbox-dc4caec8.js → checkbox-d1ca9748.js} +53 -44
  40. package/_internal/components/{checkbox-dc4caec8.js.map → checkbox-d1ca9748.js.map} +1 -1
  41. package/_internal/components/{chip-fb3d0c76.js → chip-e40c5521.js} +10 -12
  42. package/_internal/components/{chip-fb3d0c76.js.map → chip-e40c5521.js.map} +1 -1
  43. package/_internal/components/comment-block-a3cf7b9b.js +138 -0
  44. package/_internal/components/{comment-block-b84c4694.js.map → comment-block-a3cf7b9b.js.map} +1 -1
  45. package/_internal/components/date-picker-6c1b14e4.js +2 -0
  46. package/_internal/components/date-picker-6c1b14e4.js.map +1 -0
  47. package/_internal/components/{dialog-7dbcb485.js → dialog-ebdb9500.js} +70 -58
  48. package/_internal/components/{dialog-7dbcb485.js.map → dialog-ebdb9500.js.map} +1 -1
  49. package/_internal/components/{divider-12e9b6a0.js → divider-116af6b9.js} +7 -10
  50. package/_internal/components/{divider-12e9b6a0.js.map → divider-116af6b9.js.map} +1 -1
  51. package/_internal/components/{drag-handle-a38ff757.js → drag-handle-5215cd21.js} +14 -16
  52. package/_internal/components/{drag-handle-a38ff757.js.map → drag-handle-5215cd21.js.map} +1 -1
  53. package/_internal/components/{dropdown-38b0b6a0.js → dropdown-0baed51b.js} +15 -16
  54. package/_internal/components/{dropdown-38b0b6a0.js.map → dropdown-0baed51b.js.map} +1 -1
  55. package/_internal/components/{expansion-panel-c4b93653.js → expansion-panel-5533a680.js} +48 -39
  56. package/_internal/components/{expansion-panel-c4b93653.js.map → expansion-panel-5533a680.js.map} +1 -1
  57. package/_internal/components/{flag-c5e2f5f0.js → flag-8d4a7e72.js} +20 -16
  58. package/_internal/components/{flag-c5e2f5f0.js.map → flag-8d4a7e72.js.map} +1 -1
  59. package/_internal/components/{flex-box-c8701a85.js → flex-box-55144e5f.js} +9 -11
  60. package/_internal/components/{flex-box-c8701a85.js.map → flex-box-55144e5f.js.map} +1 -1
  61. package/_internal/components/{generic-block-0d6ad5a6.js → generic-block-ff0509ee.js} +35 -26
  62. package/_internal/components/{generic-block-0d6ad5a6.js.map → generic-block-ff0509ee.js.map} +1 -1
  63. package/_internal/components/{grid-3b194fe8.js → grid-6f1b5a41.js} +15 -20
  64. package/_internal/components/{grid-3b194fe8.js.map → grid-6f1b5a41.js.map} +1 -1
  65. package/_internal/components/{grid-column-985b9327.js → grid-column-f01df853.js} +8 -9
  66. package/_internal/components/{grid-column-985b9327.js.map → grid-column-f01df853.js.map} +1 -1
  67. package/_internal/components/{heading-5e954dfc.js → heading-89239843.js} +11 -12
  68. package/_internal/components/{heading-5e954dfc.js.map → heading-89239843.js.map} +1 -1
  69. package/_internal/components/{icon-2e7345ad.js → icon-b708cca4.js} +24 -25
  70. package/_internal/components/{icon-2e7345ad.js.map → icon-b708cca4.js.map} +1 -1
  71. package/_internal/components/{image-block-8d21dd7e.js → image-block-7938422d.js} +35 -34
  72. package/_internal/components/{image-block-8d21dd7e.js.map → image-block-7938422d.js.map} +1 -1
  73. package/_internal/components/{image-lightbox-4a5ab962.js → image-lightbox-58331704.js} +113 -100
  74. package/_internal/components/{image-lightbox-4a5ab962.js.map → image-lightbox-58331704.js.map} +1 -1
  75. package/_internal/components/{inline-list-4884f004.js → inline-list-e6f19a98.js} +24 -24
  76. package/_internal/components/{inline-list-4884f004.js.map → inline-list-e6f19a98.js.map} +1 -1
  77. package/_internal/components/{input-helper-e644e05e.js → input-helper-64153099.js} +9 -11
  78. package/_internal/components/{input-helper-e644e05e.js.map → input-helper-64153099.js.map} +1 -1
  79. package/_internal/components/{input-label-5e509a1b.js → input-label-2feb0bb0.js} +9 -11
  80. package/_internal/components/{input-label-5e509a1b.js.map → input-label-2feb0bb0.js.map} +1 -1
  81. package/_internal/components/{lightbox-bec1b95f.js → lightbox-570ad9e5.js} +55 -49
  82. package/_internal/components/{lightbox-bec1b95f.js.map → lightbox-570ad9e5.js.map} +1 -1
  83. package/_internal/components/{link-9637b9e4.js → link-91f76477.js} +25 -23
  84. package/_internal/components/{link-9637b9e4.js.map → link-91f76477.js.map} +1 -1
  85. package/_internal/components/link-preview-fdd8d738.js +117 -0
  86. package/_internal/components/{link-preview-7a4a6e4b.js.map → link-preview-fdd8d738.js.map} +1 -1
  87. package/_internal/components/{list-5c8f7122.js → list-b08d8423.js} +14 -20
  88. package/_internal/components/{list-5c8f7122.js.map → list-b08d8423.js.map} +1 -1
  89. package/_internal/components/{message-a67067d9.js → message-29cb9181.js} +24 -24
  90. package/_internal/components/{message-a67067d9.js.map → message-29cb9181.js.map} +1 -1
  91. package/_internal/components/{mosaic-92b66c80.js → mosaic-cdb9f563.js} +36 -33
  92. package/_internal/components/{mosaic-92b66c80.js.map → mosaic-cdb9f563.js.map} +1 -1
  93. package/_internal/components/navigation-8b7d9bd8.js +225 -0
  94. package/_internal/components/{navigation-4fd3917d.js.map → navigation-8b7d9bd8.js.map} +1 -1
  95. package/_internal/components/{notification-9063c963.js → notification-a45fda96.js} +45 -40
  96. package/_internal/components/{notification-9063c963.js.map → notification-a45fda96.js.map} +1 -1
  97. package/_internal/components/popover-65bfbc57.js +3 -0
  98. package/_internal/components/popover-65bfbc57.js.map +1 -0
  99. package/_internal/components/post-block-52e58dd5.js +109 -0
  100. package/_internal/components/{post-block-0cfc2206.js.map → post-block-52e58dd5.js.map} +1 -1
  101. package/_internal/components/{progress-eaf5b33d.js → progress-f39c3fa2.js} +44 -50
  102. package/_internal/components/{progress-eaf5b33d.js.map → progress-f39c3fa2.js.map} +1 -1
  103. package/_internal/components/{progress-tracker-4a65718d.js → progress-tracker-512d7a08.js} +59 -63
  104. package/_internal/components/{progress-tracker-4a65718d.js.map → progress-tracker-512d7a08.js.map} +1 -1
  105. package/_internal/components/{radio-button-3ef8a325.js → radio-button-559a4863.js} +54 -53
  106. package/_internal/components/{radio-button-3ef8a325.js.map → radio-button-559a4863.js.map} +1 -1
  107. package/_internal/components/select-48d4fa8c.js +454 -0
  108. package/_internal/components/{select-d46cfe35.js.map → select-48d4fa8c.js.map} +1 -1
  109. package/_internal/components/{side-navigation-75b22f19.js → side-navigation-f9bc5b4e.js} +62 -56
  110. package/_internal/components/{side-navigation-75b22f19.js.map → side-navigation-f9bc5b4e.js.map} +1 -1
  111. package/_internal/components/{skeleton-361ce335.js → skeleton-c66516ee.js} +23 -31
  112. package/_internal/components/{skeleton-361ce335.js.map → skeleton-c66516ee.js.map} +1 -1
  113. package/_internal/components/{slider-8094cb5c.js → slider-efbfbc45.js} +62 -56
  114. package/_internal/components/{slider-8094cb5c.js.map → slider-efbfbc45.js.map} +1 -1
  115. package/_internal/components/{slideshow-2e8cd372.js → slideshow-dd312470.js} +39 -38
  116. package/_internal/components/{slideshow-2e8cd372.js.map → slideshow-dd312470.js.map} +1 -1
  117. package/_internal/components/{switch-5516949b.js → switch-769a2a04.js} +49 -45
  118. package/_internal/components/{switch-5516949b.js.map → switch-769a2a04.js.map} +1 -1
  119. package/_internal/components/{table-fa198ee6.js → table-8617b1ba.js} +68 -73
  120. package/_internal/components/{table-fa198ee6.js.map → table-8617b1ba.js.map} +1 -1
  121. package/_internal/components/{tabs-bb9bc2a5.js → tabs-884c57b6.js} +41 -41
  122. package/_internal/components/{tabs-bb9bc2a5.js.map → tabs-884c57b6.js.map} +1 -1
  123. package/_internal/components/text-c7b1e079.js +2 -0
  124. package/_internal/components/text-c7b1e079.js.map +1 -0
  125. package/_internal/components/{text-field-82733568.js → text-field-478acd86.js} +116 -103
  126. package/_internal/components/{text-field-82733568.js.map → text-field-478acd86.js.map} +1 -1
  127. package/_internal/components/{thumbnail-e3acff82.js → thumbnail-310a4c4b.js} +2 -2
  128. package/_internal/components/{thumbnail-e3acff82.js.map → thumbnail-310a4c4b.js.map} +1 -1
  129. package/_internal/components/{toolbar-155562be.js → toolbar-a43533a2.js} +18 -17
  130. package/_internal/components/{toolbar-155562be.js.map → toolbar-a43533a2.js.map} +1 -1
  131. package/_internal/components/{tooltip-84ffb4f9.js → tooltip-2885ab2e.js} +44 -35
  132. package/_internal/components/{tooltip-84ffb4f9.js.map → tooltip-2885ab2e.js.map} +1 -1
  133. package/_internal/components/{uploader-896a1d89.js → uploader-1e7f5bbb.js} +35 -32
  134. package/_internal/components/{uploader-896a1d89.js.map → uploader-1e7f5bbb.js.map} +1 -1
  135. package/_internal/components/{user-block-8fd15895.js → user-block-68a51ed0.js} +43 -41
  136. package/_internal/components/{user-block-8fd15895.js.map → user-block-68a51ed0.js.map} +1 -1
  137. package/_internal/{context-21aeb1c7.js → context-9d1336a1.js} +6 -6
  138. package/_internal/{context-21aeb1c7.js.map → context-9d1336a1.js.map} +1 -1
  139. package/_internal/{forwardRef-49d2bb84.js → forwardRef-15f62847.js} +2 -12
  140. package/_internal/{forwardRef-49d2bb84.js.map → forwardRef-15f62847.js.map} +1 -1
  141. package/_internal/{index-f415b08e.js → index-9df37c0d.js} +45 -39
  142. package/_internal/{index-f415b08e.js.map → index-9df37c0d.js.map} +1 -1
  143. package/_internal/{index-b4d256e7.js → index-a9c5cd69.js} +10 -11
  144. package/_internal/{index-b4d256e7.js.map → index-a9c5cd69.js.map} +1 -1
  145. package/_internal/{useDisableStateProps-fffc365f.js → useDisableStateProps-69e16b7c.js} +2 -2
  146. package/_internal/{useDisableStateProps-fffc365f.js.map → useDisableStateProps-69e16b7c.js.map} +1 -1
  147. package/_internal/{wrapChildrenIconWithSpaces-f86106ce.js → wrapChildrenIconWithSpaces-c1faaae4.js} +2 -2
  148. package/_internal/{wrapChildrenIconWithSpaces-f86106ce.js.map → wrapChildrenIconWithSpaces-c1faaae4.js.map} +1 -1
  149. package/index.js +61 -61
  150. package/package.json +4 -3
  151. package/utils/index.js +3 -3
  152. package/_internal/ImageCaption-4279b2b6.js +0 -65
  153. package/_internal/components/comment-block-b84c4694.js +0 -121
  154. package/_internal/components/date-picker-a425534c.js +0 -2
  155. package/_internal/components/date-picker-a425534c.js.map +0 -1
  156. package/_internal/components/link-preview-7a4a6e4b.js +0 -108
  157. package/_internal/components/navigation-4fd3917d.js +0 -210
  158. package/_internal/components/popover-3c4c54bd.js +0 -3
  159. package/_internal/components/popover-3c4c54bd.js.map +0 -1
  160. package/_internal/components/post-block-0cfc2206.js +0 -99
  161. package/_internal/components/select-d46cfe35.js +0 -404
  162. package/_internal/components/text-289c0526.js +0 -2
  163. package/_internal/components/text-289c0526.js.map +0 -1
@@ -1,13 +1,14 @@
1
- import { f as forwardRef, _ as _extends, c as classNames } from './forwardRef-49d2bb84.js';
2
1
  import React__default, { useState, useEffect, useMemo } from 'react';
2
+ import { f as forwardRef, c as classNames } from './forwardRef-15f62847.js';
3
3
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
4
4
  import { mdiImageBroken } from '@lumx/icons';
5
5
  import { u as useMergeRefs } from './mergeRefs-f0d7d6ea.js';
6
6
  import { AspectRatio, Theme, Size } from '@lumx/core/js/constants';
7
7
  import { u as useTheme } from './ThemeContext-3181f000.js';
8
- import { R as RawClickable } from './RawClickable-c76bbc4c.js';
9
- import { u as useDisableStateProps } from './useDisableStateProps-fffc365f.js';
10
- import { Icon } from './components/icon-2e7345ad.js';
8
+ import { R as RawClickable } from './RawClickable-2c2b6a89.js';
9
+ import { jsxs, jsx } from 'react/jsx-runtime';
10
+ import { u as useDisableStateProps } from './useDisableStateProps-69e16b7c.js';
11
+ import { Icon } from './components/icon-b708cca4.js';
11
12
 
12
13
  function getState(img, event) {
13
14
  // Error event occurred or image has no source.
@@ -146,10 +147,6 @@ const useFocusPointStyle = ({
146
147
  return style;
147
148
  };
148
149
 
149
- /**
150
- * Defines the props of the component.
151
- */
152
-
153
150
  /**
154
151
  * Component display name.
155
152
  */
@@ -252,7 +249,8 @@ const Thumbnail = forwardRef((props, ref) => {
252
249
  const loadingStyle = loadingPlaceholderImage ? {
253
250
  backgroundImage: `url(${loadingPlaceholderImage.src})`
254
251
  } : undefined;
255
- return /*#__PURE__*/React__default.createElement(Wrapper, _extends({}, wrapperProps, {
252
+ return /*#__PURE__*/jsxs(Wrapper, {
253
+ ...wrapperProps,
256
254
  ref: ref,
257
255
  className: classNames(linkProps?.className, className, handleBasicClasses({
258
256
  align,
@@ -268,45 +266,48 @@ const Thumbnail = forwardRef((props, ref) => {
268
266
  isLoading,
269
267
  objectFit,
270
268
  hasBadge: !!badge
271
- }), fillHeight && `${CLASSNAME}--fill-height`)
272
- }), /*#__PURE__*/React__default.createElement("span", {
273
- className: `${CLASSNAME}__background`
274
- }, /*#__PURE__*/React__default.createElement("img", _extends({
275
- // Use placeholder image size
276
- width: loadingPlaceholderImage?.naturalWidth,
277
- height: loadingPlaceholderImage?.naturalHeight
278
- }, imgProps, {
279
- style: {
280
- // Reserve space while loading (when possible)
281
- width: isLoading ? imgProps?.width || loadingPlaceholderImage?.naturalWidth : undefined,
282
- ...imgProps?.style,
283
- ...imageErrorStyle,
284
- ...focusPointStyle,
285
- ...loadingStyle
286
- },
287
- ref: useMergeRefs(setImgElement, propImgRef),
288
- className: classNames(handleBasicClasses({
289
- prefix: `${CLASSNAME}__image`,
290
- isLoading,
291
- hasDefinedSize: Boolean(imgProps?.height && imgProps.width)
292
- }), imgProps?.className),
293
- crossOrigin: crossOrigin,
294
- src: image,
295
- alt: alt,
296
- loading: loading
297
- })), !isLoading && hasError && /*#__PURE__*/React__default.createElement("span", {
298
- className: `${CLASSNAME}__fallback`
299
- }, hasIconErrorFallback ? /*#__PURE__*/React__default.createElement(Icon, {
300
- icon: fallback,
301
- size: Size.xxs,
302
- theme: theme
303
- }) : fallback)), badge && /*#__PURE__*/React__default.cloneElement(badge, {
304
- className: classNames(`${CLASSNAME}__badge`, badge.props.className)
305
- }));
269
+ }), fillHeight && `${CLASSNAME}--fill-height`),
270
+ children: [/*#__PURE__*/jsxs("span", {
271
+ className: `${CLASSNAME}__background`,
272
+ children: [/*#__PURE__*/jsx("img", {
273
+ // Use placeholder image size
274
+ width: loadingPlaceholderImage?.naturalWidth,
275
+ height: loadingPlaceholderImage?.naturalHeight,
276
+ ...imgProps,
277
+ style: {
278
+ // Reserve space while loading (when possible)
279
+ width: isLoading ? imgProps?.width || loadingPlaceholderImage?.naturalWidth : undefined,
280
+ ...imgProps?.style,
281
+ ...imageErrorStyle,
282
+ ...focusPointStyle,
283
+ ...loadingStyle
284
+ },
285
+ ref: useMergeRefs(setImgElement, propImgRef),
286
+ className: classNames(handleBasicClasses({
287
+ prefix: `${CLASSNAME}__image`,
288
+ isLoading,
289
+ hasDefinedSize: Boolean(imgProps?.height && imgProps.width)
290
+ }), imgProps?.className),
291
+ crossOrigin: crossOrigin,
292
+ src: image,
293
+ alt: alt,
294
+ loading: loading
295
+ }), !isLoading && hasError && /*#__PURE__*/jsx("span", {
296
+ className: `${CLASSNAME}__fallback`,
297
+ children: hasIconErrorFallback ? /*#__PURE__*/jsx(Icon, {
298
+ icon: fallback,
299
+ size: Size.xxs,
300
+ theme: theme
301
+ }) : fallback
302
+ })]
303
+ }), badge && /*#__PURE__*/React__default.cloneElement(badge, {
304
+ className: classNames(`${CLASSNAME}__badge`, badge.props.className)
305
+ })]
306
+ });
306
307
  });
307
308
  Thumbnail.displayName = COMPONENT_NAME;
308
309
  Thumbnail.className = CLASSNAME;
309
310
  Thumbnail.defaultProps = DEFAULT_PROPS;
310
311
 
311
312
  export { Thumbnail as T, useFocusPointStyle as u };
312
- //# sourceMappingURL=Thumbnail-30d2a781.js.map
313
+ //# sourceMappingURL=Thumbnail-b5dea0af.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Thumbnail-30d2a781.js","sources":["../../src/components/thumbnail/useImageLoad.ts","../../src/components/thumbnail/useFocusPointStyle.tsx","../../src/components/thumbnail/Thumbnail.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type LoadingState = 'isLoading' | 'isLoaded' | 'hasError';\n\nfunction getState(img: HTMLImageElement | null | undefined, event?: Event) {\n // Error event occurred or image has no source.\n if (event?.type === 'error' || (img?.complete && !img.getAttribute('src'))) {\n return 'hasError';\n }\n // Image is undefined or incomplete.\n if (!img || !img.complete) {\n return 'isLoading';\n }\n // Else loaded.\n return 'isLoaded';\n}\n\nexport function useImageLoad(imageURL: string, imgRef?: HTMLImageElement): LoadingState {\n const [state, setState] = useState<LoadingState>(getState(imgRef));\n\n // Update state when changing image URL or DOM reference.\n useEffect(() => {\n setState(getState(imgRef));\n }, [imageURL, imgRef]);\n\n // Listen to `load` and `error` event on image\n useEffect(() => {\n const img = imgRef;\n if (!img) return undefined;\n const update = (event?: Event) => setState(getState(img, event));\n img.addEventListener('load', update);\n img.addEventListener('error', update);\n return () => {\n img.removeEventListener('load', update);\n img.removeEventListener('error', update);\n };\n }, [imgRef, imgRef?.src]);\n\n return state;\n}\n","import { CSSProperties, useEffect, useMemo, useState } from 'react';\nimport { AspectRatio } from '@lumx/core/js/constants';\nimport { ThumbnailProps } from '@lumx/react/components/thumbnail/Thumbnail';\nimport { RectSize } from '@lumx/react/utils/type';\n\n// Calculate shift to center the focus point in the container.\nexport function shiftPosition({\n scale,\n focusPoint,\n imageSize,\n containerSize,\n}: {\n scale: number;\n focusPoint: number;\n imageSize: number;\n containerSize: number;\n}) {\n const scaledSize = imageSize / scale;\n if (scaledSize === containerSize) return 0;\n\n const scaledFocusHeight = focusPoint * scaledSize;\n const startFocus = scaledFocusHeight - containerSize / 2;\n const shift = startFocus / (scaledSize - containerSize);\n\n return Math.floor(Math.max(Math.min(shift, 1), 0) * 100);\n}\n\n// Compute CSS properties to apply the focus point.\nexport const useFocusPointStyle = (\n { image, aspectRatio, focusPoint, imgProps: { width, height } = {} }: ThumbnailProps,\n element: HTMLImageElement | undefined,\n isLoaded: boolean,\n): CSSProperties => {\n // Get natural image size from imgProps or img element.\n const imageSize: RectSize | undefined = useMemo(() => {\n // Focus point is not applicable => exit early\n if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) return undefined;\n if (typeof width === 'number' && typeof height === 'number') return { width, height };\n if (element && isLoaded) return { width: element.naturalWidth, height: element.naturalHeight };\n return undefined;\n }, [aspectRatio, element, focusPoint?.x, focusPoint?.y, height, image, isLoaded, width]);\n\n // Get container size (dependant on imageSize).\n const [containerSize, setContainerSize] = useState<RectSize | undefined>(undefined);\n useEffect(\n function updateContainerSize() {\n const cWidth = element?.offsetWidth;\n const cHeight = element?.offsetHeight;\n if (cWidth && cHeight) {\n // Update only if needed.\n setContainerSize((oldContainerSize) =>\n oldContainerSize?.width === cWidth && oldContainerSize.height === cHeight\n ? oldContainerSize\n : { width: cWidth, height: cHeight },\n );\n } else if (imageSize) {\n // Wait for a render (in case the container size is dependent on the image size).\n requestAnimationFrame(updateContainerSize);\n }\n },\n [element?.offsetHeight, element?.offsetWidth, imageSize],\n );\n\n // Compute style.\n const style: CSSProperties = useMemo(() => {\n // Focus point is not applicable => exit early\n if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) {\n return {};\n }\n if (!element || !imageSize) {\n // Focus point can be computed but now right now (image size unknown).\n return { visibility: 'hidden' };\n }\n if (!containerSize || !imageSize.height || !imageSize.width) {\n // Missing container or image size abort focus point compute.\n return {};\n }\n\n const heightScale = imageSize.height / containerSize.height;\n const widthScale = imageSize.width / containerSize.width;\n const scale = Math.min(widthScale, heightScale);\n\n // Focus Y relative to the top (instead of the center)\n const focusPointFromTop = Math.abs((focusPoint?.y || 0) - 1) / 2;\n const y = shiftPosition({\n scale,\n focusPoint: focusPointFromTop,\n imageSize: imageSize.height,\n containerSize: containerSize.height,\n });\n\n // Focus X relative to the left (instead of the center)\n const focusPointFromLeft = Math.abs((focusPoint?.x || 0) + 1) / 2;\n const x = shiftPosition({\n scale,\n focusPoint: focusPointFromLeft,\n imageSize: imageSize.width,\n containerSize: containerSize.width,\n });\n\n const objectPosition = `${x}% ${y}%`;\n\n return { objectPosition };\n }, [aspectRatio, containerSize, element, focusPoint?.x, focusPoint?.y, image, imageSize]);\n\n return style;\n};\n","import React, {\n CSSProperties,\n ImgHTMLAttributes,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n ReactNode,\n Ref,\n useState,\n} from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, HorizontalAlignment, Icon, Size, Theme, ThumbnailObjectFit } from '@lumx/react';\nimport { Falsy, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { mdiImageBroken } from '@lumx/icons';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useImageLoad } from '@lumx/react/components/thumbnail/useImageLoad';\nimport { useFocusPointStyle } from '@lumx/react/components/thumbnail/useFocusPointStyle';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useDisableStateProps } from '@lumx/react/utils/disabled';\nimport { RawClickable } from '@lumx/react/utils/react/RawClickable';\nimport { FocusPoint, ThumbnailSize, ThumbnailVariant } from './types';\n\ntype ImgHTMLProps = ImgHTMLAttributes<HTMLImageElement>;\n\n/**\n * Defines the props of the component.\n */\nexport interface ThumbnailProps extends GenericProps, HasTheme {\n /** Alignment of the thumbnail in it's parent (requires flex parent). */\n align?: HorizontalAlignment;\n /** Image alternative text. */\n alt: string;\n /** Image aspect ratio. */\n aspectRatio?: AspectRatio;\n /** Badge. */\n badge?: ReactElement | Falsy;\n /** Image cross origin resource policy. */\n crossOrigin?: ImgHTMLProps['crossOrigin'];\n /** Fallback icon (SVG path) or react node when image fails to load. */\n fallback?: string | ReactNode;\n /** Whether the thumbnail should fill it's parent size (requires flex parent) or not. */\n fillHeight?: boolean;\n /** Apply relative vertical and horizontal shift (from -1 to 1) on the image position inside the thumbnail. */\n focusPoint?: FocusPoint;\n /** Image URL. */\n image: string;\n /** Props to inject into the native <img> element. */\n imgProps?: ImgHTMLProps;\n /** Reference to the native <img> element. */\n imgRef?: Ref<HTMLImageElement>;\n /** Set to true to force the display of the loading skeleton. */\n isLoading?: boolean;\n /** Set how the image should fit when its aspect ratio is constrained */\n objectFit?: ThumbnailObjectFit;\n /** Size variant of the component. */\n size?: ThumbnailSize;\n /** Image loading mode. */\n loading?: ImgHTMLProps['loading'];\n /** Ref of an existing placeholder image to display while loading. */\n loadingPlaceholderImageRef?: React.RefObject<HTMLImageElement>;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Variant of the component. */\n variant?: ThumbnailVariant;\n /** Props to pass to the link wrapping the thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Thumbnail';\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<ThumbnailProps> = {\n fallback: mdiImageBroken,\n loading: 'lazy',\n};\n\n/**\n * Thumbnail component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Thumbnail = forwardRef<ThumbnailProps>((props, ref) => {\n const { isAnyDisabled, otherProps, disabledStateProps } = useDisableStateProps(props);\n const defaultTheme = useTheme() || Theme.light;\n const {\n align,\n alt,\n aspectRatio = AspectRatio.original,\n badge,\n className,\n crossOrigin,\n fallback = DEFAULT_PROPS.fallback,\n fillHeight,\n // `focusPoint` needs to be here to remove it from `forwardedProps`.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n focusPoint,\n image,\n imgProps,\n imgRef: propImgRef,\n isLoading: isLoadingProp,\n objectFit,\n loading = DEFAULT_PROPS.loading,\n loadingPlaceholderImageRef,\n size,\n theme = defaultTheme,\n variant,\n linkProps,\n linkAs,\n ...forwardedProps\n } = otherProps;\n const [imgElement, setImgElement] = useState<HTMLImageElement>();\n\n // Image loading state.\n const loadingState = useImageLoad(image, imgElement);\n const isLoaded = loadingState === 'isLoaded';\n const isLoading = isLoadingProp || loadingState === 'isLoading';\n const hasError = loadingState === 'hasError';\n\n // Focus point.\n const focusPointStyle = useFocusPointStyle(props, imgElement, isLoaded);\n\n const hasIconErrorFallback = hasError && typeof fallback === 'string';\n const hasCustomErrorFallback = hasError && !hasIconErrorFallback;\n const imageErrorStyle: CSSProperties = {};\n if (hasIconErrorFallback) {\n // Keep the image layout on icon fallback.\n imageErrorStyle.visibility = 'hidden';\n } else if (hasCustomErrorFallback) {\n // Remove the image on custom fallback.\n imageErrorStyle.display = 'none';\n }\n\n const isLink = Boolean(linkProps?.href || linkAs);\n const isClickable = !isAnyDisabled && Boolean(isLink || !!forwardedProps.onClick);\n\n const Wrapper: any = isClickable ? RawClickable : 'div';\n const wrapperProps = { ...forwardedProps };\n if (isClickable) {\n Object.assign(wrapperProps, { as: linkAs || (linkProps?.href ? 'a' : 'button') }, disabledStateProps);\n if (isLink) {\n Object.assign(wrapperProps, linkProps);\n } else {\n wrapperProps['aria-label'] = forwardedProps['aria-label'] || alt;\n }\n }\n\n // If we have a loading placeholder image that is really loaded (complete)\n const loadingPlaceholderImage =\n (isLoading && loadingPlaceholderImageRef?.current?.complete && loadingPlaceholderImageRef?.current) ||\n undefined;\n\n // Set loading placeholder image as background\n const loadingStyle = loadingPlaceholderImage\n ? { backgroundImage: `url(${loadingPlaceholderImage.src})` }\n : undefined;\n\n return (\n <Wrapper\n {...wrapperProps}\n ref={ref}\n className={classNames(\n linkProps?.className,\n className,\n handleBasicClasses({\n align,\n aspectRatio,\n prefix: CLASSNAME,\n size,\n theme,\n variant,\n isClickable,\n hasError,\n hasIconErrorFallback,\n hasCustomErrorFallback,\n isLoading,\n objectFit,\n hasBadge: !!badge,\n }),\n fillHeight && `${CLASSNAME}--fill-height`,\n )}\n >\n <span className={`${CLASSNAME}__background`}>\n <img\n // Use placeholder image size\n width={loadingPlaceholderImage?.naturalWidth}\n height={loadingPlaceholderImage?.naturalHeight}\n {...imgProps}\n style={{\n // Reserve space while loading (when possible)\n width: isLoading ? imgProps?.width || loadingPlaceholderImage?.naturalWidth : undefined,\n ...imgProps?.style,\n ...imageErrorStyle,\n ...focusPointStyle,\n ...loadingStyle,\n }}\n ref={useMergeRefs(setImgElement, propImgRef)}\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__image`,\n isLoading,\n hasDefinedSize: Boolean(imgProps?.height && imgProps.width),\n }),\n imgProps?.className,\n )}\n crossOrigin={crossOrigin}\n src={image}\n alt={alt}\n loading={loading}\n />\n {!isLoading && hasError && (\n <span className={`${CLASSNAME}__fallback`}>\n {hasIconErrorFallback ? (\n <Icon icon={fallback as string} size={Size.xxs} theme={theme} />\n ) : (\n fallback\n )}\n </span>\n )}\n </span>\n {badge &&\n React.cloneElement(badge, { className: classNames(`${CLASSNAME}__badge`, badge.props.className) })}\n </Wrapper>\n );\n});\nThumbnail.displayName = COMPONENT_NAME;\nThumbnail.className = CLASSNAME;\nThumbnail.defaultProps = DEFAULT_PROPS;\n"],"names":["getState","img","event","type","complete","getAttribute","useImageLoad","imageURL","imgRef","state","setState","useState","useEffect","undefined","update","addEventListener","removeEventListener","src","shiftPosition","scale","focusPoint","imageSize","containerSize","scaledSize","scaledFocusHeight","startFocus","shift","Math","floor","max","min","useFocusPointStyle","image","aspectRatio","imgProps","width","height","element","isLoaded","useMemo","AspectRatio","original","x","y","naturalWidth","naturalHeight","setContainerSize","updateContainerSize","cWidth","offsetWidth","cHeight","offsetHeight","oldContainerSize","requestAnimationFrame","style","visibility","heightScale","widthScale","focusPointFromTop","abs","focusPointFromLeft","objectPosition","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","fallback","mdiImageBroken","loading","Thumbnail","forwardRef","props","ref","isAnyDisabled","otherProps","disabledStateProps","useDisableStateProps","defaultTheme","useTheme","Theme","light","align","alt","badge","className","crossOrigin","fillHeight","propImgRef","isLoading","isLoadingProp","objectFit","loadingPlaceholderImageRef","size","theme","variant","linkProps","linkAs","forwardedProps","imgElement","setImgElement","loadingState","hasError","focusPointStyle","hasIconErrorFallback","hasCustomErrorFallback","imageErrorStyle","display","isLink","Boolean","href","isClickable","onClick","Wrapper","RawClickable","wrapperProps","Object","assign","as","loadingPlaceholderImage","current","loadingStyle","backgroundImage","React","createElement","_extends","classNames","handleBasicClasses","prefix","hasBadge","useMergeRefs","hasDefinedSize","Icon","icon","Size","xxs","cloneElement","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"Thumbnail-b5dea0af.js","sources":["../../src/components/thumbnail/useImageLoad.ts","../../src/components/thumbnail/useFocusPointStyle.tsx","../../src/components/thumbnail/Thumbnail.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type LoadingState = 'isLoading' | 'isLoaded' | 'hasError';\n\nfunction getState(img: HTMLImageElement | null | undefined, event?: Event) {\n // Error event occurred or image has no source.\n if (event?.type === 'error' || (img?.complete && !img.getAttribute('src'))) {\n return 'hasError';\n }\n // Image is undefined or incomplete.\n if (!img || !img.complete) {\n return 'isLoading';\n }\n // Else loaded.\n return 'isLoaded';\n}\n\nexport function useImageLoad(imageURL: string, imgRef?: HTMLImageElement): LoadingState {\n const [state, setState] = useState<LoadingState>(getState(imgRef));\n\n // Update state when changing image URL or DOM reference.\n useEffect(() => {\n setState(getState(imgRef));\n }, [imageURL, imgRef]);\n\n // Listen to `load` and `error` event on image\n useEffect(() => {\n const img = imgRef;\n if (!img) return undefined;\n const update = (event?: Event) => setState(getState(img, event));\n img.addEventListener('load', update);\n img.addEventListener('error', update);\n return () => {\n img.removeEventListener('load', update);\n img.removeEventListener('error', update);\n };\n }, [imgRef, imgRef?.src]);\n\n return state;\n}\n","import { CSSProperties, useEffect, useMemo, useState } from 'react';\nimport { AspectRatio } from '@lumx/core/js/constants';\nimport { ThumbnailProps } from '@lumx/react/components/thumbnail/Thumbnail';\nimport { RectSize } from '@lumx/react/utils/type';\n\n// Calculate shift to center the focus point in the container.\nexport function shiftPosition({\n scale,\n focusPoint,\n imageSize,\n containerSize,\n}: {\n scale: number;\n focusPoint: number;\n imageSize: number;\n containerSize: number;\n}) {\n const scaledSize = imageSize / scale;\n if (scaledSize === containerSize) return 0;\n\n const scaledFocusHeight = focusPoint * scaledSize;\n const startFocus = scaledFocusHeight - containerSize / 2;\n const shift = startFocus / (scaledSize - containerSize);\n\n return Math.floor(Math.max(Math.min(shift, 1), 0) * 100);\n}\n\n// Compute CSS properties to apply the focus point.\nexport const useFocusPointStyle = (\n { image, aspectRatio, focusPoint, imgProps: { width, height } = {} }: ThumbnailProps,\n element: HTMLImageElement | undefined,\n isLoaded: boolean,\n): CSSProperties => {\n // Get natural image size from imgProps or img element.\n const imageSize: RectSize | undefined = useMemo(() => {\n // Focus point is not applicable => exit early\n if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) return undefined;\n if (typeof width === 'number' && typeof height === 'number') return { width, height };\n if (element && isLoaded) return { width: element.naturalWidth, height: element.naturalHeight };\n return undefined;\n }, [aspectRatio, element, focusPoint?.x, focusPoint?.y, height, image, isLoaded, width]);\n\n // Get container size (dependant on imageSize).\n const [containerSize, setContainerSize] = useState<RectSize | undefined>(undefined);\n useEffect(\n function updateContainerSize() {\n const cWidth = element?.offsetWidth;\n const cHeight = element?.offsetHeight;\n if (cWidth && cHeight) {\n // Update only if needed.\n setContainerSize((oldContainerSize) =>\n oldContainerSize?.width === cWidth && oldContainerSize.height === cHeight\n ? oldContainerSize\n : { width: cWidth, height: cHeight },\n );\n } else if (imageSize) {\n // Wait for a render (in case the container size is dependent on the image size).\n requestAnimationFrame(updateContainerSize);\n }\n },\n [element?.offsetHeight, element?.offsetWidth, imageSize],\n );\n\n // Compute style.\n const style: CSSProperties = useMemo(() => {\n // Focus point is not applicable => exit early\n if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) {\n return {};\n }\n if (!element || !imageSize) {\n // Focus point can be computed but now right now (image size unknown).\n return { visibility: 'hidden' };\n }\n if (!containerSize || !imageSize.height || !imageSize.width) {\n // Missing container or image size abort focus point compute.\n return {};\n }\n\n const heightScale = imageSize.height / containerSize.height;\n const widthScale = imageSize.width / containerSize.width;\n const scale = Math.min(widthScale, heightScale);\n\n // Focus Y relative to the top (instead of the center)\n const focusPointFromTop = Math.abs((focusPoint?.y || 0) - 1) / 2;\n const y = shiftPosition({\n scale,\n focusPoint: focusPointFromTop,\n imageSize: imageSize.height,\n containerSize: containerSize.height,\n });\n\n // Focus X relative to the left (instead of the center)\n const focusPointFromLeft = Math.abs((focusPoint?.x || 0) + 1) / 2;\n const x = shiftPosition({\n scale,\n focusPoint: focusPointFromLeft,\n imageSize: imageSize.width,\n containerSize: containerSize.width,\n });\n\n const objectPosition = `${x}% ${y}%`;\n\n return { objectPosition };\n }, [aspectRatio, containerSize, element, focusPoint?.x, focusPoint?.y, image, imageSize]);\n\n return style;\n};\n","import React, {\n CSSProperties,\n ImgHTMLAttributes,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n ReactNode,\n Ref,\n useState,\n} from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, HorizontalAlignment, Icon, Size, Theme, ThumbnailObjectFit } from '@lumx/react';\nimport { Falsy, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { mdiImageBroken } from '@lumx/icons';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useImageLoad } from '@lumx/react/components/thumbnail/useImageLoad';\nimport { useFocusPointStyle } from '@lumx/react/components/thumbnail/useFocusPointStyle';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useDisableStateProps } from '@lumx/react/utils/disabled';\nimport { RawClickable } from '@lumx/react/utils/react/RawClickable';\nimport { FocusPoint, ThumbnailSize, ThumbnailVariant } from './types';\n\ntype ImgHTMLProps = ImgHTMLAttributes<HTMLImageElement>;\n\n/**\n * Defines the props of the component.\n */\nexport interface ThumbnailProps extends GenericProps, HasTheme {\n /** Alignment of the thumbnail in it's parent (requires flex parent). */\n align?: HorizontalAlignment;\n /** Image alternative text. */\n alt: string;\n /** Image aspect ratio. */\n aspectRatio?: AspectRatio;\n /** Badge. */\n badge?: ReactElement | Falsy;\n /** Image cross origin resource policy. */\n crossOrigin?: ImgHTMLProps['crossOrigin'];\n /** Fallback icon (SVG path) or react node when image fails to load. */\n fallback?: string | ReactNode;\n /** Whether the thumbnail should fill it's parent size (requires flex parent) or not. */\n fillHeight?: boolean;\n /** Apply relative vertical and horizontal shift (from -1 to 1) on the image position inside the thumbnail. */\n focusPoint?: FocusPoint;\n /** Image URL. */\n image: string;\n /** Props to inject into the native <img> element. */\n imgProps?: ImgHTMLProps;\n /** Reference to the native <img> element. */\n imgRef?: Ref<HTMLImageElement>;\n /** Set to true to force the display of the loading skeleton. */\n isLoading?: boolean;\n /** Set how the image should fit when its aspect ratio is constrained */\n objectFit?: ThumbnailObjectFit;\n /** Size variant of the component. */\n size?: ThumbnailSize;\n /** Image loading mode. */\n loading?: ImgHTMLProps['loading'];\n /** Ref of an existing placeholder image to display while loading. */\n loadingPlaceholderImageRef?: React.RefObject<HTMLImageElement>;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Variant of the component. */\n variant?: ThumbnailVariant;\n /** Props to pass to the link wrapping the thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Thumbnail';\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<ThumbnailProps> = {\n fallback: mdiImageBroken,\n loading: 'lazy',\n};\n\n/**\n * Thumbnail component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Thumbnail = forwardRef<ThumbnailProps>((props, ref) => {\n const { isAnyDisabled, otherProps, disabledStateProps } = useDisableStateProps(props);\n const defaultTheme = useTheme() || Theme.light;\n const {\n align,\n alt,\n aspectRatio = AspectRatio.original,\n badge,\n className,\n crossOrigin,\n fallback = DEFAULT_PROPS.fallback,\n fillHeight,\n // `focusPoint` needs to be here to remove it from `forwardedProps`.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n focusPoint,\n image,\n imgProps,\n imgRef: propImgRef,\n isLoading: isLoadingProp,\n objectFit,\n loading = DEFAULT_PROPS.loading,\n loadingPlaceholderImageRef,\n size,\n theme = defaultTheme,\n variant,\n linkProps,\n linkAs,\n ...forwardedProps\n } = otherProps;\n const [imgElement, setImgElement] = useState<HTMLImageElement>();\n\n // Image loading state.\n const loadingState = useImageLoad(image, imgElement);\n const isLoaded = loadingState === 'isLoaded';\n const isLoading = isLoadingProp || loadingState === 'isLoading';\n const hasError = loadingState === 'hasError';\n\n // Focus point.\n const focusPointStyle = useFocusPointStyle(props, imgElement, isLoaded);\n\n const hasIconErrorFallback = hasError && typeof fallback === 'string';\n const hasCustomErrorFallback = hasError && !hasIconErrorFallback;\n const imageErrorStyle: CSSProperties = {};\n if (hasIconErrorFallback) {\n // Keep the image layout on icon fallback.\n imageErrorStyle.visibility = 'hidden';\n } else if (hasCustomErrorFallback) {\n // Remove the image on custom fallback.\n imageErrorStyle.display = 'none';\n }\n\n const isLink = Boolean(linkProps?.href || linkAs);\n const isClickable = !isAnyDisabled && Boolean(isLink || !!forwardedProps.onClick);\n\n const Wrapper: any = isClickable ? RawClickable : 'div';\n const wrapperProps = { ...forwardedProps };\n if (isClickable) {\n Object.assign(wrapperProps, { as: linkAs || (linkProps?.href ? 'a' : 'button') }, disabledStateProps);\n if (isLink) {\n Object.assign(wrapperProps, linkProps);\n } else {\n wrapperProps['aria-label'] = forwardedProps['aria-label'] || alt;\n }\n }\n\n // If we have a loading placeholder image that is really loaded (complete)\n const loadingPlaceholderImage =\n (isLoading && loadingPlaceholderImageRef?.current?.complete && loadingPlaceholderImageRef?.current) ||\n undefined;\n\n // Set loading placeholder image as background\n const loadingStyle = loadingPlaceholderImage\n ? { backgroundImage: `url(${loadingPlaceholderImage.src})` }\n : undefined;\n\n return (\n <Wrapper\n {...wrapperProps}\n ref={ref}\n className={classNames(\n linkProps?.className,\n className,\n handleBasicClasses({\n align,\n aspectRatio,\n prefix: CLASSNAME,\n size,\n theme,\n variant,\n isClickable,\n hasError,\n hasIconErrorFallback,\n hasCustomErrorFallback,\n isLoading,\n objectFit,\n hasBadge: !!badge,\n }),\n fillHeight && `${CLASSNAME}--fill-height`,\n )}\n >\n <span className={`${CLASSNAME}__background`}>\n <img\n // Use placeholder image size\n width={loadingPlaceholderImage?.naturalWidth}\n height={loadingPlaceholderImage?.naturalHeight}\n {...imgProps}\n style={{\n // Reserve space while loading (when possible)\n width: isLoading ? imgProps?.width || loadingPlaceholderImage?.naturalWidth : undefined,\n ...imgProps?.style,\n ...imageErrorStyle,\n ...focusPointStyle,\n ...loadingStyle,\n }}\n ref={useMergeRefs(setImgElement, propImgRef)}\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__image`,\n isLoading,\n hasDefinedSize: Boolean(imgProps?.height && imgProps.width),\n }),\n imgProps?.className,\n )}\n crossOrigin={crossOrigin}\n src={image}\n alt={alt}\n loading={loading}\n />\n {!isLoading && hasError && (\n <span className={`${CLASSNAME}__fallback`}>\n {hasIconErrorFallback ? (\n <Icon icon={fallback as string} size={Size.xxs} theme={theme} />\n ) : (\n fallback\n )}\n </span>\n )}\n </span>\n {badge &&\n React.cloneElement(badge, { className: classNames(`${CLASSNAME}__badge`, badge.props.className) })}\n </Wrapper>\n );\n});\nThumbnail.displayName = COMPONENT_NAME;\nThumbnail.className = CLASSNAME;\nThumbnail.defaultProps = DEFAULT_PROPS;\n"],"names":["getState","img","event","type","complete","getAttribute","useImageLoad","imageURL","imgRef","state","setState","useState","useEffect","undefined","update","addEventListener","removeEventListener","src","shiftPosition","scale","focusPoint","imageSize","containerSize","scaledSize","scaledFocusHeight","startFocus","shift","Math","floor","max","min","useFocusPointStyle","image","aspectRatio","imgProps","width","height","element","isLoaded","useMemo","AspectRatio","original","x","y","naturalWidth","naturalHeight","setContainerSize","updateContainerSize","cWidth","offsetWidth","cHeight","offsetHeight","oldContainerSize","requestAnimationFrame","style","visibility","heightScale","widthScale","focusPointFromTop","abs","focusPointFromLeft","objectPosition","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","fallback","mdiImageBroken","loading","Thumbnail","forwardRef","props","ref","isAnyDisabled","otherProps","disabledStateProps","useDisableStateProps","defaultTheme","useTheme","Theme","light","align","alt","badge","className","crossOrigin","fillHeight","propImgRef","isLoading","isLoadingProp","objectFit","loadingPlaceholderImageRef","size","theme","variant","linkProps","linkAs","forwardedProps","imgElement","setImgElement","loadingState","hasError","focusPointStyle","hasIconErrorFallback","hasCustomErrorFallback","imageErrorStyle","display","isLink","Boolean","href","isClickable","onClick","Wrapper","RawClickable","wrapperProps","Object","assign","as","loadingPlaceholderImage","current","loadingStyle","backgroundImage","_jsxs","classNames","handleBasicClasses","prefix","hasBadge","children","_jsx","useMergeRefs","hasDefinedSize","Icon","icon","Size","xxs","React","cloneElement","displayName","defaultProps"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import { f as forwardRef, _ as _extends, c as classNames } from '../forwardRef-49d2bb84.js';
2
1
  import React__default from 'react';
2
+ import { f as forwardRef, c as classNames } from '../forwardRef-15f62847.js';
3
3
  import { mdiAlert, mdiInformation, mdiCheckCircle, mdiAlertCircle } from '@lumx/icons';
4
4
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
5
5
  import { u as useId } from '../useId-3a1facc0.js';
6
- import { Dialog } from './dialog-7dbcb485.js';
7
- import { Toolbar } from './toolbar-155562be.js';
8
- import { Icon } from './icon-2e7345ad.js';
9
- import { a as Button } from '../Button-f19e18df.js';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+ import { Dialog } from './dialog-ebdb9500.js';
8
+ import { Toolbar } from './toolbar-a43533a2.js';
9
+ import { Icon } from './icon-b708cca4.js';
10
+ import { a as Button } from '../Button-1f227024.js';
10
11
  import { Kind, ColorPalette, Size, Emphasis } from '@lumx/core/js/constants';
11
12
 
12
13
  /**
@@ -96,7 +97,7 @@ const AlertDialog = forwardRef((props, ref) => {
96
97
  onClick: cancelOnClick,
97
98
  ...forwardedCancelProps
98
99
  } = cancelProps || {};
99
- return /*#__PURE__*/React__default.createElement(Dialog, _extends({
100
+ return /*#__PURE__*/jsxs(Dialog, {
100
101
  ref: ref,
101
102
  focusElement: cancelProps ? cancelButtonRef : confirmationButtonRef,
102
103
  size: size,
@@ -110,38 +111,52 @@ const AlertDialog = forwardRef((props, ref) => {
110
111
  className: classNames(className, handleBasicClasses({
111
112
  kind,
112
113
  prefix: CLASSNAME
113
- }))
114
- }, forwardedProps), /*#__PURE__*/React__default.createElement("header", null, /*#__PURE__*/React__default.createElement(Toolbar, {
115
- className: "lumx-spacing-margin-horizontal",
116
- before: /*#__PURE__*/React__default.createElement(Icon, {
117
- icon: icon,
118
- size: Size.s,
119
- color: color
120
- }),
121
- label: /*#__PURE__*/React__default.createElement("h2", {
122
- id: titleId,
123
- className: "lumx-typography-title"
124
- }, title)
125
- })), children && /*#__PURE__*/React__default.createElement(DescriptionElement, {
126
- id: descriptionId,
127
- className: "lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge"
128
- }, children), /*#__PURE__*/React__default.createElement("footer", null, /*#__PURE__*/React__default.createElement(Toolbar, {
129
- className: "lumx-spacing-margin-horizontal",
130
- after: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, cancelProps && /*#__PURE__*/React__default.createElement(Button, _extends({}, forwardedCancelProps, {
131
- ref: cancelButtonRef,
132
- emphasis: Emphasis.medium,
133
- onClick: cancelOnClick
134
- }), cancelLabel), /*#__PURE__*/React__default.createElement(Button, _extends({}, forwardedConfirmProps, {
135
- ref: confirmationButtonRef,
136
- color: color,
137
- className: "lumx-spacing-margin-left-regular",
138
- onClick: confirmOnClick
139
- }), confirmLabel))
140
- })));
114
+ })),
115
+ ...forwardedProps,
116
+ children: [/*#__PURE__*/jsx("header", {
117
+ children: /*#__PURE__*/jsx(Toolbar, {
118
+ className: "lumx-spacing-margin-horizontal",
119
+ before: /*#__PURE__*/jsx(Icon, {
120
+ icon: icon,
121
+ size: Size.s,
122
+ color: color
123
+ }),
124
+ label: /*#__PURE__*/jsx("h2", {
125
+ id: titleId,
126
+ className: "lumx-typography-title",
127
+ children: title
128
+ })
129
+ })
130
+ }), children && /*#__PURE__*/jsx(DescriptionElement, {
131
+ id: descriptionId,
132
+ className: "lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge",
133
+ children: children
134
+ }), /*#__PURE__*/jsx("footer", {
135
+ children: /*#__PURE__*/jsx(Toolbar, {
136
+ className: "lumx-spacing-margin-horizontal",
137
+ after: /*#__PURE__*/jsxs(Fragment, {
138
+ children: [cancelProps && /*#__PURE__*/jsx(Button, {
139
+ ...forwardedCancelProps,
140
+ ref: cancelButtonRef,
141
+ emphasis: Emphasis.medium,
142
+ onClick: cancelOnClick,
143
+ children: cancelLabel
144
+ }), /*#__PURE__*/jsx(Button, {
145
+ ...forwardedConfirmProps,
146
+ ref: confirmationButtonRef,
147
+ color: color,
148
+ className: "lumx-spacing-margin-left-regular",
149
+ onClick: confirmOnClick,
150
+ children: confirmLabel
151
+ })]
152
+ })
153
+ })
154
+ })]
155
+ });
141
156
  });
142
157
  AlertDialog.displayName = COMPONENT_NAME;
143
158
  AlertDialog.className = CLASSNAME;
144
159
  AlertDialog.defaultProps = DEFAULT_PROPS;
145
160
 
146
161
  export { AlertDialog };
147
- //# sourceMappingURL=alert-dialog-8f1c163c.js.map
162
+ //# sourceMappingURL=alert-dialog-b284b191.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-8f1c163c.js","sources":["../../../src/components/alert-dialog/AlertDialog.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n DialogProps,\n Dialog,\n Button,\n Emphasis,\n ColorPalette,\n Icon,\n Size,\n Kind,\n Toolbar,\n ButtonProps,\n} from '@lumx/react';\nimport { mdiAlert, mdiAlertCircle, mdiCheckCircle, mdiInformation } from '@lumx/icons';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface AlertDialogProps extends Omit<DialogProps, 'header' | 'footer'> {\n /** Message variant. */\n kind?: Kind;\n /** Dialog title. */\n title?: string;\n /** Props forwarded to the confirm button */\n confirmProps: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Props forwarded to the cancel button.\n * Will not render a cancel button if undefined.\n */\n cancelProps?: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Associative map from message kind to color and icon.\n */\nconst CONFIG = {\n [Kind.error]: { color: ColorPalette.red, icon: mdiAlert },\n [Kind.info]: { color: ColorPalette.blue, icon: mdiInformation },\n [Kind.success]: { color: ColorPalette.green, icon: mdiCheckCircle },\n [Kind.warning]: { color: ColorPalette.yellow, icon: mdiAlertCircle },\n};\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'AlertDialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.tiny,\n kind: Kind.info,\n};\n\n/**\n * AlertDialog component.\n *\n * An alert dialog is a modal dialog that interrupts the user's workflow to\n * communicate an important message and acquire a response.\n *\n * It should not have a complex content.\n * Children of this component should only be strings, paragraphs or links.\n */\nexport const AlertDialog = forwardRef<AlertDialogProps, HTMLDivElement>((props, ref) => {\n const {\n id,\n title,\n className,\n cancelProps,\n confirmProps,\n kind = DEFAULT_PROPS.kind,\n size = DEFAULT_PROPS.size,\n dialogProps,\n children,\n ...forwardedProps\n } = props;\n\n const cancelButtonRef = React.useRef(null);\n const confirmationButtonRef = React.useRef(null);\n const { color, icon } = CONFIG[kind as Kind] || {};\n\n // Define a unique ID to target title and description for aria attributes.\n const generatedId = useId();\n const uniqueId = id || generatedId;\n const titleId = `${uniqueId}-title`;\n const descriptionId = `${uniqueId}-description`;\n\n // If content is a string, set in a paragraph.\n const DescriptionElement = typeof children === 'string' ? 'p' : 'div';\n\n const { label: confirmLabel, onClick: confirmOnClick, ...forwardedConfirmProps } = confirmProps;\n const { label: cancelLabel, onClick: cancelOnClick, ...forwardedCancelProps } = cancelProps || {};\n\n return (\n <Dialog\n ref={ref}\n focusElement={cancelProps ? cancelButtonRef : confirmationButtonRef}\n size={size}\n dialogProps={{\n id: uniqueId,\n role: 'alertdialog',\n 'aria-labelledby': titleId,\n 'aria-describedby': descriptionId,\n ...dialogProps,\n }}\n className={classNames(\n className,\n handleBasicClasses({\n kind,\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n <header>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n before={<Icon icon={icon} size={Size.s} color={color} />}\n label={\n <h2 id={titleId} className=\"lumx-typography-title\">\n {title}\n </h2>\n }\n />\n </header>\n\n {children && (\n <DescriptionElement\n id={descriptionId}\n className=\"lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge\"\n >\n {children}\n </DescriptionElement>\n )}\n\n <footer>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n after={\n <>\n {cancelProps && (\n <Button\n {...forwardedCancelProps}\n ref={cancelButtonRef}\n emphasis={Emphasis.medium}\n onClick={cancelOnClick}\n >\n {cancelLabel}\n </Button>\n )}\n <Button\n {...forwardedConfirmProps}\n ref={confirmationButtonRef}\n color={color}\n className=\"lumx-spacing-margin-left-regular\"\n onClick={confirmOnClick}\n >\n {confirmLabel}\n </Button>\n </>\n }\n />\n </footer>\n </Dialog>\n );\n});\n\nAlertDialog.displayName = COMPONENT_NAME;\nAlertDialog.className = CLASSNAME;\nAlertDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["CONFIG","Kind","error","color","ColorPalette","red","icon","mdiAlert","info","blue","mdiInformation","success","green","mdiCheckCircle","warning","yellow","mdiAlertCircle","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","tiny","kind","AlertDialog","forwardRef","props","ref","id","title","className","cancelProps","confirmProps","dialogProps","children","forwardedProps","cancelButtonRef","React","useRef","confirmationButtonRef","generatedId","useId","uniqueId","titleId","descriptionId","DescriptionElement","label","confirmLabel","onClick","confirmOnClick","forwardedConfirmProps","cancelLabel","cancelOnClick","forwardedCancelProps","createElement","Dialog","_extends","focusElement","role","classNames","handleBasicClasses","prefix","Toolbar","before","Icon","s","after","Fragment","Button","emphasis","Emphasis","medium","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"alert-dialog-b284b191.js","sources":["../../../src/components/alert-dialog/AlertDialog.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n DialogProps,\n Dialog,\n Button,\n Emphasis,\n ColorPalette,\n Icon,\n Size,\n Kind,\n Toolbar,\n ButtonProps,\n} from '@lumx/react';\nimport { mdiAlert, mdiAlertCircle, mdiCheckCircle, mdiInformation } from '@lumx/icons';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface AlertDialogProps extends Omit<DialogProps, 'header' | 'footer'> {\n /** Message variant. */\n kind?: Kind;\n /** Dialog title. */\n title?: string;\n /** Props forwarded to the confirm button */\n confirmProps: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Props forwarded to the cancel button.\n * Will not render a cancel button if undefined.\n */\n cancelProps?: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Associative map from message kind to color and icon.\n */\nconst CONFIG = {\n [Kind.error]: { color: ColorPalette.red, icon: mdiAlert },\n [Kind.info]: { color: ColorPalette.blue, icon: mdiInformation },\n [Kind.success]: { color: ColorPalette.green, icon: mdiCheckCircle },\n [Kind.warning]: { color: ColorPalette.yellow, icon: mdiAlertCircle },\n};\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'AlertDialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.tiny,\n kind: Kind.info,\n};\n\n/**\n * AlertDialog component.\n *\n * An alert dialog is a modal dialog that interrupts the user's workflow to\n * communicate an important message and acquire a response.\n *\n * It should not have a complex content.\n * Children of this component should only be strings, paragraphs or links.\n */\nexport const AlertDialog = forwardRef<AlertDialogProps, HTMLDivElement>((props, ref) => {\n const {\n id,\n title,\n className,\n cancelProps,\n confirmProps,\n kind = DEFAULT_PROPS.kind,\n size = DEFAULT_PROPS.size,\n dialogProps,\n children,\n ...forwardedProps\n } = props;\n\n const cancelButtonRef = React.useRef(null);\n const confirmationButtonRef = React.useRef(null);\n const { color, icon } = CONFIG[kind as Kind] || {};\n\n // Define a unique ID to target title and description for aria attributes.\n const generatedId = useId();\n const uniqueId = id || generatedId;\n const titleId = `${uniqueId}-title`;\n const descriptionId = `${uniqueId}-description`;\n\n // If content is a string, set in a paragraph.\n const DescriptionElement = typeof children === 'string' ? 'p' : 'div';\n\n const { label: confirmLabel, onClick: confirmOnClick, ...forwardedConfirmProps } = confirmProps;\n const { label: cancelLabel, onClick: cancelOnClick, ...forwardedCancelProps } = cancelProps || {};\n\n return (\n <Dialog\n ref={ref}\n focusElement={cancelProps ? cancelButtonRef : confirmationButtonRef}\n size={size}\n dialogProps={{\n id: uniqueId,\n role: 'alertdialog',\n 'aria-labelledby': titleId,\n 'aria-describedby': descriptionId,\n ...dialogProps,\n }}\n className={classNames(\n className,\n handleBasicClasses({\n kind,\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n <header>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n before={<Icon icon={icon} size={Size.s} color={color} />}\n label={\n <h2 id={titleId} className=\"lumx-typography-title\">\n {title}\n </h2>\n }\n />\n </header>\n\n {children && (\n <DescriptionElement\n id={descriptionId}\n className=\"lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge\"\n >\n {children}\n </DescriptionElement>\n )}\n\n <footer>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n after={\n <>\n {cancelProps && (\n <Button\n {...forwardedCancelProps}\n ref={cancelButtonRef}\n emphasis={Emphasis.medium}\n onClick={cancelOnClick}\n >\n {cancelLabel}\n </Button>\n )}\n <Button\n {...forwardedConfirmProps}\n ref={confirmationButtonRef}\n color={color}\n className=\"lumx-spacing-margin-left-regular\"\n onClick={confirmOnClick}\n >\n {confirmLabel}\n </Button>\n </>\n }\n />\n </footer>\n </Dialog>\n );\n});\n\nAlertDialog.displayName = COMPONENT_NAME;\nAlertDialog.className = CLASSNAME;\nAlertDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["CONFIG","Kind","error","color","ColorPalette","red","icon","mdiAlert","info","blue","mdiInformation","success","green","mdiCheckCircle","warning","yellow","mdiAlertCircle","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","tiny","kind","AlertDialog","forwardRef","props","ref","id","title","className","cancelProps","confirmProps","dialogProps","children","forwardedProps","cancelButtonRef","React","useRef","confirmationButtonRef","generatedId","useId","uniqueId","titleId","descriptionId","DescriptionElement","label","confirmLabel","onClick","confirmOnClick","forwardedConfirmProps","cancelLabel","cancelOnClick","forwardedCancelProps","_jsxs","Dialog","focusElement","role","classNames","handleBasicClasses","prefix","_jsx","Toolbar","before","Icon","s","after","_Fragment","Button","emphasis","Emphasis","medium","displayName","defaultProps"],"mappings":"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"}
@@ -1,21 +1,18 @@
1
- import { f as forwardRef, _ as _extends, c as classNames } from '../forwardRef-49d2bb84.js';
2
1
  import { useRef } from 'react';
2
+ import { f as forwardRef, c as classNames } from '../forwardRef-15f62847.js';
3
3
  import { getRootClassName } from '@lumx/core/js/utils/className';
4
- import { u as useFocus } from '../index-f415b08e.js';
4
+ import { u as useFocus } from '../index-9df37c0d.js';
5
5
  import { m as mergeRefs } from '../mergeRefs-f0d7d6ea.js';
6
6
  import { u as useTheme } from '../ThemeContext-3181f000.js';
7
- import { u as useDisableStateProps } from '../useDisableStateProps-fffc365f.js';
8
- import { TextField } from './text-field-82733568.js';
9
- import { Dropdown } from './dropdown-38b0b6a0.js';
7
+ import { u as useDisableStateProps } from '../useDisableStateProps-69e16b7c.js';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+ import { TextField } from './text-field-478acd86.js';
10
+ import { Dropdown } from './dropdown-0baed51b.js';
10
11
  import { mdiClose } from '@lumx/icons';
11
- import { C as Chip } from '../Chip-4c572eec.js';
12
- import { Icon } from './icon-2e7345ad.js';
12
+ import { C as Chip } from '../Chip-a34f6905.js';
13
+ import { Icon } from './icon-b708cca4.js';
13
14
  import { Size } from '@lumx/core/js/constants';
14
15
 
15
- /**
16
- * Defines the props of the component.
17
- */
18
-
19
16
  /**
20
17
  * Component display name.
21
18
  */
@@ -88,54 +85,53 @@ const Autocomplete = forwardRef((props, ref) => {
88
85
  const inputAnchorRef = useRef(null);
89
86
  const textFieldRef = useRef(null);
90
87
  useFocus(inputAnchorRef.current, !isOpen && shouldFocusOnClose);
91
- return /*#__PURE__*/React.createElement("div", _extends({
92
- ref: ref
93
- }, forwardedProps, {
94
- className: classNames(className, CLASSNAME$1)
95
- }), /*#__PURE__*/React.createElement(TextField, _extends({}, textFieldProps, {
96
- chips: chips,
97
- error: error,
98
- hasError: hasError,
99
- helper: helper,
100
- icon: icon,
101
- inputRef: mergeRefs(inputAnchorRef, inputRef),
102
- clearButtonProps: clearButtonProps
103
- }, disabledStateProps, {
104
- isRequired: isRequired,
105
- isValid: isValid,
106
- label: label,
107
- name: name,
108
- onBlur: onBlur,
109
- onChange: onChange,
110
- onFocus: onFocus,
111
- placeholder: placeholder,
112
- textFieldRef: textFieldRef,
113
- theme: theme,
114
- value: value
115
- })), /*#__PURE__*/React.createElement(Dropdown, {
116
- anchorRef: anchorToInput ? inputAnchorRef : textFieldRef,
117
- closeOnClick: closeOnClick,
118
- closeOnClickAway: closeOnClickAway,
119
- closeOnEscape: closeOnEscape,
120
- focusAnchorOnClose: focusAnchorOnClose,
121
- fitToAnchorWidth: fitToAnchorWidth,
122
- isOpen: isOpen,
123
- offset: offset,
124
- onClose: onClose,
125
- onInfiniteScroll: onInfiniteScroll,
126
- placement: placement,
127
- shouldFocusOnOpen: false,
128
- theme: theme
129
- }, children));
88
+ return /*#__PURE__*/jsxs("div", {
89
+ ref: ref,
90
+ ...forwardedProps,
91
+ className: classNames(className, CLASSNAME$1),
92
+ children: [/*#__PURE__*/jsx(TextField, {
93
+ ...textFieldProps,
94
+ chips: chips,
95
+ error: error,
96
+ hasError: hasError,
97
+ helper: helper,
98
+ icon: icon,
99
+ inputRef: mergeRefs(inputAnchorRef, inputRef),
100
+ clearButtonProps: clearButtonProps,
101
+ ...disabledStateProps,
102
+ isRequired: isRequired,
103
+ isValid: isValid,
104
+ label: label,
105
+ name: name,
106
+ onBlur: onBlur,
107
+ onChange: onChange,
108
+ onFocus: onFocus,
109
+ placeholder: placeholder,
110
+ textFieldRef: textFieldRef,
111
+ theme: theme,
112
+ value: value
113
+ }), /*#__PURE__*/jsx(Dropdown, {
114
+ anchorRef: anchorToInput ? inputAnchorRef : textFieldRef,
115
+ closeOnClick: closeOnClick,
116
+ closeOnClickAway: closeOnClickAway,
117
+ closeOnEscape: closeOnEscape,
118
+ focusAnchorOnClose: focusAnchorOnClose,
119
+ fitToAnchorWidth: fitToAnchorWidth,
120
+ isOpen: isOpen,
121
+ offset: offset,
122
+ onClose: onClose,
123
+ onInfiniteScroll: onInfiniteScroll,
124
+ placement: placement,
125
+ shouldFocusOnOpen: false,
126
+ theme: theme,
127
+ children: children
128
+ })]
129
+ });
130
130
  });
131
131
  Autocomplete.displayName = COMPONENT_NAME$1;
132
132
  Autocomplete.className = CLASSNAME$1;
133
133
  Autocomplete.defaultProps = DEFAULT_PROPS$1;
134
134
 
135
- /**
136
- * Defines the props of the component.
137
- */
138
-
139
135
  /**
140
136
  * Component display name.
141
137
  */
@@ -154,17 +150,17 @@ const DEFAULT_PROPS = {
154
150
  closeOnEscape: true,
155
151
  selectedChipRender(choice, index, onClear, isDisabled) {
156
152
  const onClick = event => onClear && onClear(event, choice);
157
- return /*#__PURE__*/React.createElement(Chip, {
158
- key: index,
159
- after: onClear && /*#__PURE__*/React.createElement(Icon, {
153
+ return /*#__PURE__*/jsx(Chip, {
154
+ after: onClear && /*#__PURE__*/jsx(Icon, {
160
155
  icon: mdiClose,
161
156
  size: Size.xxs
162
157
  }),
163
158
  isDisabled: isDisabled,
164
159
  size: Size.s,
165
160
  onAfterClick: onClick,
166
- onClick: onClick
167
- }, choice);
161
+ onClick: onClick,
162
+ children: choice
163
+ }, index);
168
164
  },
169
165
  values: []
170
166
  };
@@ -220,9 +216,9 @@ const AutocompleteMultiple = forwardRef((props, ref) => {
220
216
  values = DEFAULT_PROPS.values,
221
217
  ...forwardedProps
222
218
  } = otherProps;
223
- return /*#__PURE__*/React.createElement(Autocomplete, _extends({
224
- ref: ref
225
- }, forwardedProps, {
219
+ return /*#__PURE__*/jsx(Autocomplete, {
220
+ ref: ref,
221
+ ...forwardedProps,
226
222
  anchorToInput: anchorToInput,
227
223
  className: classNames(className, CLASSNAME),
228
224
  name: name,
@@ -236,8 +232,8 @@ const AutocompleteMultiple = forwardRef((props, ref) => {
236
232
  helper: helper,
237
233
  icon: icon,
238
234
  inputRef: inputRef,
239
- chips: values && values.map((chip, index) => selectedChipRender?.(chip, index, onClear))
240
- }, disabledStateProps, {
235
+ chips: values && values.map((chip, index) => selectedChipRender?.(chip, index, onClear)),
236
+ ...disabledStateProps,
241
237
  isRequired: isRequired,
242
238
  clearButtonProps: clearButtonProps,
243
239
  isValid: isValid,
@@ -253,12 +249,13 @@ const AutocompleteMultiple = forwardRef((props, ref) => {
253
249
  offset: offset,
254
250
  placement: placement,
255
251
  fitToAnchorWidth: fitToAnchorWidth,
256
- onInfiniteScroll: onInfiniteScroll
257
- }), children);
252
+ onInfiniteScroll: onInfiniteScroll,
253
+ children: children
254
+ });
258
255
  });
259
256
  AutocompleteMultiple.displayName = COMPONENT_NAME;
260
257
  AutocompleteMultiple.className = CLASSNAME;
261
258
  AutocompleteMultiple.defaultProps = DEFAULT_PROPS;
262
259
 
263
260
  export { Autocomplete, AutocompleteMultiple };
264
- //# sourceMappingURL=autocomplete-bfbdeb3c.js.map
261
+ //# sourceMappingURL=autocomplete-8d3f37ea.js.map