@danske/sapphire-react-lab 0.106.3 → 0.107.0

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 (327) hide show
  1. package/build/cjs/index.js +2557 -64
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/core/src/BreakpointProvider/useBreakpointContext.js +11 -0
  4. package/build/esm/core/src/BreakpointProvider/useBreakpointContext.js.map +1 -0
  5. package/build/esm/core/src/Flex/src/Flex.js +64 -0
  6. package/build/esm/core/src/Flex/src/Flex.js.map +1 -0
  7. package/build/esm/core/src/Grid/src/Grid.js +55 -0
  8. package/build/esm/core/src/Grid/src/Grid.js.map +1 -0
  9. package/build/esm/core/src/Icon/src/Icon.js +37 -0
  10. package/build/esm/core/src/Icon/src/Icon.js.map +1 -0
  11. package/build/esm/core/src/ListBox/i18n/da-DK.json.js +7 -0
  12. package/build/esm/core/src/ListBox/i18n/de-DE.json.js +7 -0
  13. package/build/esm/core/src/ListBox/i18n/en-US.json.js +7 -0
  14. package/build/esm/core/src/ListBox/i18n/fi-FI.json.js +7 -0
  15. package/build/esm/core/src/ListBox/i18n/index.js.map +1 -0
  16. package/build/esm/core/src/ListBox/i18n/nb-NO.json.js +7 -0
  17. package/build/esm/core/src/ListBox/i18n/pl-PL.json.js +7 -0
  18. package/build/esm/core/src/ListBox/i18n/sv-SE.json.js +7 -0
  19. package/build/esm/core/src/ListBox/src/ListBoxContext.js +8 -0
  20. package/build/esm/core/src/ListBox/src/ListBoxContext.js.map +1 -0
  21. package/build/esm/core/src/ListBox/src/ListBoxEmptyState.js +26 -0
  22. package/build/esm/core/src/ListBox/src/ListBoxEmptyState.js.map +1 -0
  23. package/build/esm/core/src/ListBox/src/ListBoxItemSkeleton.js +37 -0
  24. package/build/esm/core/src/ListBox/src/ListBoxItemSkeleton.js.map +1 -0
  25. package/build/esm/core/src/ListBox/src/ListBoxOption.js +105 -0
  26. package/build/esm/core/src/ListBox/src/ListBoxOption.js.map +1 -0
  27. package/build/esm/core/src/ListBox/src/ListBoxSection.js +86 -0
  28. package/build/esm/core/src/ListBox/src/ListBoxSection.js.map +1 -0
  29. package/build/esm/core/src/ListBox/src/StatelessListBox.js +162 -0
  30. package/build/esm/core/src/ListBox/src/StatelessListBox.js.map +1 -0
  31. package/build/esm/core/src/Pagination/src/usePaginationContext.js +8 -0
  32. package/build/esm/core/src/Pagination/src/usePaginationContext.js.map +1 -0
  33. package/build/esm/core/src/Popover/src/Popover.js +62 -0
  34. package/build/esm/core/src/Popover/src/Popover.js.map +1 -0
  35. package/build/esm/core/src/Radio/src/RadioBox.js +58 -0
  36. package/build/esm/core/src/Radio/src/RadioBox.js.map +1 -0
  37. package/build/esm/core/src/Separator/src/Separator.js +32 -0
  38. package/build/esm/core/src/Separator/src/Separator.js.map +1 -0
  39. package/build/esm/core/src/Skeleton/src/Skeleton.js +19 -0
  40. package/build/esm/core/src/Skeleton/src/Skeleton.js.map +1 -0
  41. package/build/esm/core/src/Skeleton/src/SkeletonCircle.js +39 -0
  42. package/build/esm/core/src/Skeleton/src/SkeletonCircle.js.map +1 -0
  43. package/build/esm/core/src/Skeleton/src/SkeletonText.js +59 -0
  44. package/build/esm/core/src/Skeleton/src/SkeletonText.js.map +1 -0
  45. package/build/esm/core/src/Skeleton/src/animation.js +4 -0
  46. package/build/esm/core/src/Skeleton/src/animation.js.map +1 -0
  47. package/build/esm/core/src/ThemeRoot/src/ThemeRoot.js +42 -0
  48. package/build/esm/core/src/ThemeRoot/src/ThemeRoot.js.map +1 -0
  49. package/build/esm/core/src/View/src/View.js +60 -0
  50. package/build/esm/core/src/View/src/View.js.map +1 -0
  51. package/build/esm/core/src/utils/SapphireStyleProps.js +48 -0
  52. package/build/esm/core/src/utils/SapphireStyleProps.js.map +1 -0
  53. package/build/esm/core/src/utils/useCollectionFocusProxy.js +53 -0
  54. package/build/esm/core/src/utils/useCollectionFocusProxy.js.map +1 -0
  55. package/build/esm/core/src/utils/usePreventTouchEnd.js +16 -0
  56. package/build/esm/core/src/utils/usePreventTouchEnd.js.map +1 -0
  57. package/build/esm/core/src/utils/useSapphireStyleProps.js +179 -0
  58. package/build/esm/core/src/utils/useSapphireStyleProps.js.map +1 -0
  59. package/build/esm/core/src/utils/useSapphireTextStyleProps.js +9 -0
  60. package/build/esm/core/src/utils/useSapphireTextStyleProps.js.map +1 -0
  61. package/build/esm/core/src/utils/useScrollCheck.js +38 -0
  62. package/build/esm/core/src/utils/useScrollCheck.js.map +1 -0
  63. package/build/esm/core/src/utils/useThemeCheck.js +14 -0
  64. package/build/esm/core/src/utils/useThemeCheck.js.map +1 -0
  65. package/build/esm/core/src/utils/virtualization/ListWithLoadingStateLayout.js +158 -0
  66. package/build/esm/core/src/utils/virtualization/ListWithLoadingStateLayout.js.map +1 -0
  67. package/build/esm/core/src/utils/virtualization/VariableWidthListLayout.js +69 -0
  68. package/build/esm/core/src/utils/virtualization/VariableWidthListLayout.js.map +1 -0
  69. package/build/esm/core/src/utils/virtualization/VirtualizerWithLoadingSkeleton.js +40 -0
  70. package/build/esm/core/src/utils/virtualization/VirtualizerWithLoadingSkeleton.js.map +1 -0
  71. package/build/esm/core/src/utils/virtualization/useListWithLoadingStateLayout.js +35 -0
  72. package/build/esm/core/src/utils/virtualization/useListWithLoadingStateLayout.js.map +1 -0
  73. package/build/esm/index.js +23 -20
  74. package/build/esm/index.js.map +1 -1
  75. package/build/esm/lab/src/Accordion/index.js.map +1 -0
  76. package/build/esm/lab/src/Accordion/src/Accordion.js.map +1 -0
  77. package/build/esm/lab/src/Accordion/src/AccordionContext.js.map +1 -0
  78. package/build/esm/lab/src/Accordion/src/AccordionHeading.js.map +1 -0
  79. package/build/esm/lab/src/Accordion/src/AccordionItem.js.map +1 -0
  80. package/build/esm/lab/src/Accordion/src/AccordionPanel.js.map +1 -0
  81. package/build/esm/lab/src/Accordion/src/utils.js.map +1 -0
  82. package/build/esm/lab/src/Alert/src/Alert.js.map +1 -0
  83. package/build/esm/lab/src/Amount/src/Amount.js.map +1 -0
  84. package/build/esm/lab/src/Amount/src/useGroupAmount.js.map +1 -0
  85. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/da-DK.json.js +2 -2
  86. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/de-DE.json.js +2 -2
  87. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/en-US.json.js +2 -2
  88. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/fi-FI.json.js +2 -2
  89. package/build/esm/lab/src/Autocomplete/i18n/index.js +20 -0
  90. package/build/esm/lab/src/Autocomplete/i18n/index.js.map +1 -0
  91. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/nb-NO.json.js +2 -2
  92. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/pl-PL.json.js +2 -2
  93. package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/sv-SE.json.js +2 -2
  94. package/build/esm/lab/src/Autocomplete/src/Autocomplete.js.map +1 -0
  95. package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItem.js.map +1 -0
  96. package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItemLink.js.map +1 -0
  97. package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItemStatic.js.map +1 -0
  98. package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +1 -0
  99. package/build/esm/lab/src/Breadcrumbs/src/Breadcrumbs.js.map +1 -0
  100. package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbsSeparator.js.map +1 -0
  101. package/build/esm/lab/src/Breadcrumbs/src/useBreadcrumbThreshold.js.map +1 -0
  102. package/build/esm/lab/src/DataGrid/index.js +9 -0
  103. package/build/esm/lab/src/DataGrid/index.js.map +1 -0
  104. package/build/esm/lab/src/DataGrid/src/DataGrid.js +463 -0
  105. package/build/esm/lab/src/DataGrid/src/DataGrid.js.map +1 -0
  106. package/build/esm/lab/src/DataGrid/src/DataGridCellContext.js +6 -0
  107. package/build/esm/lab/src/DataGrid/src/DataGridCellContext.js.map +1 -0
  108. package/build/esm/lab/src/DataGrid/src/EditableCellContent.js +125 -0
  109. package/build/esm/lab/src/DataGrid/src/EditableCellContent.js.map +1 -0
  110. package/build/esm/lab/src/DataGrid/src/createDataGridColumnHelper.js +15 -0
  111. package/build/esm/lab/src/DataGrid/src/createDataGridColumnHelper.js.map +1 -0
  112. package/build/esm/lab/src/DataGrid/src/useGridKeyboardNavigation.js +417 -0
  113. package/build/esm/lab/src/DataGrid/src/useGridKeyboardNavigation.js.map +1 -0
  114. package/build/esm/lab/src/DataGrid/src/useMeasureColumnWidths.js +55 -0
  115. package/build/esm/lab/src/DataGrid/src/useMeasureColumnWidths.js.map +1 -0
  116. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/da-DK.json.js +2 -2
  117. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/de-DE.json.js +2 -2
  118. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/en-US.json.js +2 -2
  119. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/fi-FI.json.js +2 -2
  120. package/build/esm/lab/src/FileDropzone/i18n/index.js.map +1 -0
  121. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/nb-NO.json.js +2 -2
  122. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/pl-PL.json.js +2 -2
  123. package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/sv-SE.json.js +2 -2
  124. package/build/esm/lab/src/FileDropzone/src/FileDropzone.js.map +1 -0
  125. package/build/esm/lab/src/FileDropzone/src/FileTrigger.js.map +1 -0
  126. package/build/esm/lab/src/FileDropzone/src/utils.js.map +1 -0
  127. package/build/esm/lab/src/Filtering/src/FilterDropdown.js.map +1 -0
  128. package/build/esm/{Filtering → lab/src/Filtering}/src/SearchableSelectFilter.js +2 -0
  129. package/build/esm/lab/src/Filtering/src/SearchableSelectFilter.js.map +1 -0
  130. package/build/esm/lab/src/Flag/src/Flag.js.map +1 -0
  131. package/build/esm/lab/src/LabeledValue/src/LabeledValue.js.map +1 -0
  132. package/build/esm/{NumberField → lab/src/NumberField}/i18n/da-DK.json.js +2 -2
  133. package/build/esm/{NumberField → lab/src/NumberField}/i18n/de-DE.json.js +2 -2
  134. package/build/esm/{NumberField → lab/src/NumberField}/i18n/en-US.json.js +2 -2
  135. package/build/esm/{NumberField → lab/src/NumberField}/i18n/fi-FI.json.js +2 -2
  136. package/build/esm/lab/src/NumberField/i18n/index.js.map +1 -0
  137. package/build/esm/{NumberField → lab/src/NumberField}/i18n/nb-NO.json.js +2 -2
  138. package/build/esm/{NumberField → lab/src/NumberField}/i18n/pl-PL.json.js +2 -2
  139. package/build/esm/{NumberField → lab/src/NumberField}/i18n/sv-SE.json.js +2 -2
  140. package/build/esm/lab/src/NumberField/src/NumberField.js.map +1 -0
  141. package/build/esm/lab/src/NumberField/src/StepperButton.js.map +1 -0
  142. package/build/esm/lab/src/NumberField/src/cursorHelpers.js.map +1 -0
  143. package/build/esm/lab/src/NumberField/src/formatHelpers.js.map +1 -0
  144. package/build/esm/lab/src/NumberField/src/keyboardHelpers.js.map +1 -0
  145. package/build/esm/lab/src/NumberField/src/useAutofillStyle.js.map +1 -0
  146. package/build/esm/lab/src/NumberField/src/useNumberFieldFormatting.js.map +1 -0
  147. package/build/esm/lab/src/NumberField/src/useSapphireNumberField.js.map +1 -0
  148. package/build/esm/lab/src/ProgressIndicator/src/ProgressIndicator.js.map +1 -0
  149. package/build/esm/lab/src/Sidebar/index.js.map +1 -0
  150. package/build/esm/lab/src/Sidebar/src/Body.js.map +1 -0
  151. package/build/esm/lab/src/Sidebar/src/ExpandableItem.js.map +1 -0
  152. package/build/esm/lab/src/Sidebar/src/Header.js.map +1 -0
  153. package/build/esm/lab/src/Sidebar/src/Item.js.map +1 -0
  154. package/build/esm/lab/src/Sidebar/src/List.js.map +1 -0
  155. package/build/esm/lab/src/Sidebar/src/Panel.js.map +1 -0
  156. package/build/esm/lab/src/Sidebar/src/ResponsiveSidebarContext.js.map +1 -0
  157. package/build/esm/lab/src/Sidebar/src/SecondarySidebarContext.js.map +1 -0
  158. package/build/esm/lab/src/Sidebar/src/Section.js.map +1 -0
  159. package/build/esm/lab/src/Sidebar/src/Sidebar.js.map +1 -0
  160. package/build/esm/lab/src/Sidebar/src/useSidebar.js.map +1 -0
  161. package/build/esm/lab/src/Slider/index.js.map +1 -0
  162. package/build/esm/lab/src/Slider/src/Slider.js.map +1 -0
  163. package/build/esm/lab/src/TagGroup/src/Tag.js.map +1 -0
  164. package/build/esm/lab/src/TagGroup/src/TagGroup.js.map +1 -0
  165. package/build/esm/lab/src/TagGroup/src/TagItem.js.map +1 -0
  166. package/build/esm/{TimeField → lab/src/TimeField}/i18n/da-DK.json.js +2 -2
  167. package/build/esm/lab/src/TimeField/i18n/da-DK.json.js.map +1 -0
  168. package/build/esm/{TimeField → lab/src/TimeField}/i18n/de-DE.json.js +2 -2
  169. package/build/esm/lab/src/TimeField/i18n/de-DE.json.js.map +1 -0
  170. package/build/esm/{TimeField → lab/src/TimeField}/i18n/en-US.json.js +2 -2
  171. package/build/esm/lab/src/TimeField/i18n/en-US.json.js.map +1 -0
  172. package/build/esm/{TimeField → lab/src/TimeField}/i18n/fi-FI.json.js +2 -2
  173. package/build/esm/lab/src/TimeField/i18n/fi-FI.json.js.map +1 -0
  174. package/build/esm/lab/src/TimeField/i18n/index.js.map +1 -0
  175. package/build/esm/{TimeField → lab/src/TimeField}/i18n/nb-NO.json.js +2 -2
  176. package/build/esm/lab/src/TimeField/i18n/nb-NO.json.js.map +1 -0
  177. package/build/esm/{TimeField → lab/src/TimeField}/i18n/pl-PL.json.js +2 -2
  178. package/build/esm/lab/src/TimeField/i18n/pl-PL.json.js.map +1 -0
  179. package/build/esm/{TimeField → lab/src/TimeField}/i18n/sv-SE.json.js +2 -2
  180. package/build/esm/lab/src/TimeField/i18n/sv-SE.json.js.map +1 -0
  181. package/build/esm/lab/src/TimeField/src/TimeField.js.map +1 -0
  182. package/build/esm/lab/src/TimeField/src/TimeFieldSegment.js.map +1 -0
  183. package/build/esm/lab/src/TruncateOverflow/src/TruncateOverflow.js +46 -0
  184. package/build/esm/lab/src/TruncateOverflow/src/TruncateOverflow.js.map +1 -0
  185. package/build/index.d.ts +551 -8
  186. package/package.json +7 -5
  187. package/build/esm/Accordion/index.js.map +0 -1
  188. package/build/esm/Accordion/src/Accordion.js.map +0 -1
  189. package/build/esm/Accordion/src/AccordionContext.js.map +0 -1
  190. package/build/esm/Accordion/src/AccordionHeading.js.map +0 -1
  191. package/build/esm/Accordion/src/AccordionItem.js.map +0 -1
  192. package/build/esm/Accordion/src/AccordionPanel.js.map +0 -1
  193. package/build/esm/Accordion/src/utils.js.map +0 -1
  194. package/build/esm/Alert/src/Alert.js.map +0 -1
  195. package/build/esm/Amount/src/Amount.js.map +0 -1
  196. package/build/esm/Amount/src/useGroupAmount.js.map +0 -1
  197. package/build/esm/Autocomplete/i18n/index.js.map +0 -1
  198. package/build/esm/Autocomplete/src/Autocomplete.js.map +0 -1
  199. package/build/esm/Breadcrumbs/src/BreadcrumbItem.js.map +0 -1
  200. package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js.map +0 -1
  201. package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js.map +0 -1
  202. package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +0 -1
  203. package/build/esm/Breadcrumbs/src/Breadcrumbs.js.map +0 -1
  204. package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js.map +0 -1
  205. package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js.map +0 -1
  206. package/build/esm/FileDropzone/i18n/index.js.map +0 -1
  207. package/build/esm/FileDropzone/src/FileDropzone.js.map +0 -1
  208. package/build/esm/FileDropzone/src/FileTrigger.js.map +0 -1
  209. package/build/esm/FileDropzone/src/utils.js.map +0 -1
  210. package/build/esm/Filtering/src/FilterDropdown.js.map +0 -1
  211. package/build/esm/Filtering/src/SearchableSelectFilter.js.map +0 -1
  212. package/build/esm/Flag/src/Flag.js.map +0 -1
  213. package/build/esm/LabeledValue/src/LabeledValue.js.map +0 -1
  214. package/build/esm/NumberField/i18n/index.js.map +0 -1
  215. package/build/esm/NumberField/src/NumberField.js.map +0 -1
  216. package/build/esm/NumberField/src/StepperButton.js.map +0 -1
  217. package/build/esm/NumberField/src/cursorHelpers.js.map +0 -1
  218. package/build/esm/NumberField/src/formatHelpers.js.map +0 -1
  219. package/build/esm/NumberField/src/keyboardHelpers.js.map +0 -1
  220. package/build/esm/NumberField/src/useAutofillStyle.js.map +0 -1
  221. package/build/esm/NumberField/src/useNumberFieldFormatting.js.map +0 -1
  222. package/build/esm/NumberField/src/useSapphireNumberField.js.map +0 -1
  223. package/build/esm/ProgressIndicator/src/ProgressIndicator.js.map +0 -1
  224. package/build/esm/Sidebar/index.js.map +0 -1
  225. package/build/esm/Sidebar/src/Body.js.map +0 -1
  226. package/build/esm/Sidebar/src/ExpandableItem.js.map +0 -1
  227. package/build/esm/Sidebar/src/Header.js.map +0 -1
  228. package/build/esm/Sidebar/src/Item.js.map +0 -1
  229. package/build/esm/Sidebar/src/List.js.map +0 -1
  230. package/build/esm/Sidebar/src/Panel.js.map +0 -1
  231. package/build/esm/Sidebar/src/ResponsiveSidebarContext.js.map +0 -1
  232. package/build/esm/Sidebar/src/SecondarySidebarContext.js.map +0 -1
  233. package/build/esm/Sidebar/src/Section.js.map +0 -1
  234. package/build/esm/Sidebar/src/Sidebar.js.map +0 -1
  235. package/build/esm/Sidebar/src/useSidebar.js.map +0 -1
  236. package/build/esm/Slider/index.js.map +0 -1
  237. package/build/esm/Slider/src/Slider.js.map +0 -1
  238. package/build/esm/TagGroup/src/Tag.js.map +0 -1
  239. package/build/esm/TagGroup/src/TagGroup.js.map +0 -1
  240. package/build/esm/TagGroup/src/TagItem.js.map +0 -1
  241. package/build/esm/TimeField/i18n/index.js.map +0 -1
  242. package/build/esm/TimeField/src/TimeField.js.map +0 -1
  243. package/build/esm/TimeField/src/TimeFieldSegment.js.map +0 -1
  244. /package/build/esm/{TimeField → core/src/ListBox}/i18n/da-DK.json.js.map +0 -0
  245. /package/build/esm/{TimeField → core/src/ListBox}/i18n/de-DE.json.js.map +0 -0
  246. /package/build/esm/{TimeField → core/src/ListBox}/i18n/en-US.json.js.map +0 -0
  247. /package/build/esm/{TimeField → core/src/ListBox}/i18n/fi-FI.json.js.map +0 -0
  248. /package/build/esm/{TimeField → core/src/ListBox}/i18n/index.js +0 -0
  249. /package/build/esm/{TimeField → core/src/ListBox}/i18n/nb-NO.json.js.map +0 -0
  250. /package/build/esm/{TimeField → core/src/ListBox}/i18n/pl-PL.json.js.map +0 -0
  251. /package/build/esm/{TimeField → core/src/ListBox}/i18n/sv-SE.json.js.map +0 -0
  252. /package/build/esm/{Accordion → lab/src/Accordion}/index.js +0 -0
  253. /package/build/esm/{Accordion → lab/src/Accordion}/src/Accordion.js +0 -0
  254. /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionContext.js +0 -0
  255. /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionHeading.js +0 -0
  256. /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionItem.js +0 -0
  257. /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionPanel.js +0 -0
  258. /package/build/esm/{Accordion → lab/src/Accordion}/src/utils.js +0 -0
  259. /package/build/esm/{Alert → lab/src/Alert}/src/Alert.js +0 -0
  260. /package/build/esm/{Amount → lab/src/Amount}/src/Amount.js +0 -0
  261. /package/build/esm/{Amount → lab/src/Amount}/src/useGroupAmount.js +0 -0
  262. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/da-DK.json.js.map +0 -0
  263. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/de-DE.json.js.map +0 -0
  264. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/en-US.json.js.map +0 -0
  265. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/fi-FI.json.js.map +0 -0
  266. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/nb-NO.json.js.map +0 -0
  267. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/pl-PL.json.js.map +0 -0
  268. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/sv-SE.json.js.map +0 -0
  269. /package/build/esm/{Autocomplete → lab/src/Autocomplete}/src/Autocomplete.js +0 -0
  270. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItem.js +0 -0
  271. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItemLink.js +0 -0
  272. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItemStatic.js +0 -0
  273. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbOverflowMenu.js +0 -0
  274. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/Breadcrumbs.js +0 -0
  275. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbsSeparator.js +0 -0
  276. /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/useBreadcrumbThreshold.js +0 -0
  277. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/da-DK.json.js.map +0 -0
  278. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/de-DE.json.js.map +0 -0
  279. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/en-US.json.js.map +0 -0
  280. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/fi-FI.json.js.map +0 -0
  281. /package/build/esm/{Autocomplete → lab/src/FileDropzone}/i18n/index.js +0 -0
  282. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/nb-NO.json.js.map +0 -0
  283. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/pl-PL.json.js.map +0 -0
  284. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/sv-SE.json.js.map +0 -0
  285. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/FileDropzone.js +0 -0
  286. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/FileTrigger.js +0 -0
  287. /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/utils.js +0 -0
  288. /package/build/esm/{Filtering → lab/src/Filtering}/src/FilterDropdown.js +0 -0
  289. /package/build/esm/{Flag → lab/src/Flag}/src/Flag.js +0 -0
  290. /package/build/esm/{LabeledValue → lab/src/LabeledValue}/src/LabeledValue.js +0 -0
  291. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/da-DK.json.js.map +0 -0
  292. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/de-DE.json.js.map +0 -0
  293. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/en-US.json.js.map +0 -0
  294. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/fi-FI.json.js.map +0 -0
  295. /package/build/esm/{FileDropzone → lab/src/NumberField}/i18n/index.js +0 -0
  296. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/nb-NO.json.js.map +0 -0
  297. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/pl-PL.json.js.map +0 -0
  298. /package/build/esm/{NumberField → lab/src/NumberField}/i18n/sv-SE.json.js.map +0 -0
  299. /package/build/esm/{NumberField → lab/src/NumberField}/src/NumberField.js +0 -0
  300. /package/build/esm/{NumberField → lab/src/NumberField}/src/StepperButton.js +0 -0
  301. /package/build/esm/{NumberField → lab/src/NumberField}/src/cursorHelpers.js +0 -0
  302. /package/build/esm/{NumberField → lab/src/NumberField}/src/formatHelpers.js +0 -0
  303. /package/build/esm/{NumberField → lab/src/NumberField}/src/keyboardHelpers.js +0 -0
  304. /package/build/esm/{NumberField → lab/src/NumberField}/src/useAutofillStyle.js +0 -0
  305. /package/build/esm/{NumberField → lab/src/NumberField}/src/useNumberFieldFormatting.js +0 -0
  306. /package/build/esm/{NumberField → lab/src/NumberField}/src/useSapphireNumberField.js +0 -0
  307. /package/build/esm/{ProgressIndicator → lab/src/ProgressIndicator}/src/ProgressIndicator.js +0 -0
  308. /package/build/esm/{Sidebar → lab/src/Sidebar}/index.js +0 -0
  309. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Body.js +0 -0
  310. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/ExpandableItem.js +0 -0
  311. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Header.js +0 -0
  312. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Item.js +0 -0
  313. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/List.js +0 -0
  314. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Panel.js +0 -0
  315. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/ResponsiveSidebarContext.js +0 -0
  316. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/SecondarySidebarContext.js +0 -0
  317. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Section.js +0 -0
  318. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Sidebar.js +0 -0
  319. /package/build/esm/{Sidebar → lab/src/Sidebar}/src/useSidebar.js +0 -0
  320. /package/build/esm/{Slider → lab/src/Slider}/index.js +0 -0
  321. /package/build/esm/{Slider → lab/src/Slider}/src/Slider.js +0 -0
  322. /package/build/esm/{TagGroup → lab/src/TagGroup}/src/Tag.js +0 -0
  323. /package/build/esm/{TagGroup → lab/src/TagGroup}/src/TagGroup.js +0 -0
  324. /package/build/esm/{TagGroup → lab/src/TagGroup}/src/TagItem.js +0 -0
  325. /package/build/esm/{NumberField → lab/src/TimeField}/i18n/index.js +0 -0
  326. /package/build/esm/{TimeField → lab/src/TimeField}/src/TimeField.js +0 -0
  327. /package/build/esm/{TimeField → lab/src/TimeField}/src/TimeFieldSegment.js +0 -0
@@ -0,0 +1,158 @@
1
+ import { Rect, LayoutInfo } from 'react-stately/useVirtualizerState';
2
+ import { VariableWidthListLayout } from './VariableWidthListLayout.js';
3
+
4
+ class ListWithLoadingStateLayout extends VariableWidthListLayout {
5
+ options;
6
+ constructor(options) {
7
+ super(options);
8
+ this.options = options;
9
+ this.loaderSize = options.loadingRowsCount * (options.rowHeight ?? options.estimatedRowHeight ?? 50);
10
+ }
11
+ doBuildCollection() {
12
+ let nodes = [];
13
+ if (this.options.loadingState === "loading" || this.collection.size === 0) {
14
+ this.contentSize.height = 0;
15
+ } else {
16
+ nodes = super.doBuildCollection();
17
+ }
18
+ if (this.options.loadingState) {
19
+ const loaderNode = this.buildLoader();
20
+ nodes.push(loaderNode);
21
+ this.contentSize.height = this.contentSize.height + loaderNode.layoutInfo.rect.height;
22
+ }
23
+ if (!this.options.loadingState && this.collection.size === 0) {
24
+ const emptyStateNode = this.buildEmptyState();
25
+ nodes.push(emptyStateNode);
26
+ this.contentSize.height = emptyStateNode.layoutInfo.rect.height;
27
+ }
28
+ return nodes;
29
+ }
30
+ /**
31
+ * Adds the section header node (which is rendered as a divider and
32
+ * optional heading text)
33
+ */
34
+ buildSection(node, x, y) {
35
+ const headerNode = {
36
+ type: "header",
37
+ key: node.key + ":header",
38
+ parentKey: node.key,
39
+ value: null,
40
+ level: node.level,
41
+ index: node.index,
42
+ hasChildNodes: false,
43
+ childNodes: [],
44
+ rendered: node.rendered,
45
+ textValue: node.textValue
46
+ };
47
+ this.headingSize = node.rendered ? this.options.headingHeight : 0;
48
+ const header = this.buildSectionHeader(headerNode, x, y);
49
+ header.node = headerNode;
50
+ header.layoutInfo.parentKey = node.key;
51
+ this.layoutNodes.set(headerNode.key, header);
52
+ header.layoutInfo.rect.height += // if first item is the section, we don't show the divider
53
+ node.prevKey ? this.options.sectionDividerHeight : 0;
54
+ y += header.layoutInfo.rect.height;
55
+ const section = super.buildSection(node, x, y);
56
+ section.children.unshift(header);
57
+ if (node.nextKey && node.index !== void 0) {
58
+ const nextNode = this.nextNodeAtLevel(node.level, node.index);
59
+ if (nextNode && nextNode.type !== "section") {
60
+ const dividerRect = new Rect(
61
+ 0,
62
+ section.layoutInfo.rect.maxY,
63
+ this.virtualizer?.visibleRect.width,
64
+ this.options.sectionDividerHeight
65
+ );
66
+ const layoutInfo = new LayoutInfo(
67
+ "divider",
68
+ `${node.key}:divider`,
69
+ dividerRect
70
+ );
71
+ layoutInfo.parentKey = node.key;
72
+ const layoutNode = {
73
+ layoutInfo,
74
+ validRect: layoutInfo.rect.intersection(this.validRect)
75
+ };
76
+ this.layoutNodes.set(layoutInfo.key, layoutNode);
77
+ section.children?.push(layoutNode);
78
+ section.layoutInfo.rect.height += dividerRect.height;
79
+ y += dividerRect.height;
80
+ }
81
+ }
82
+ return section;
83
+ }
84
+ nextNodeAtLevel(level, startAt) {
85
+ for (const item of this.collection) {
86
+ if (item.level === level && item.index && item.index > startAt) {
87
+ return item;
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Builds loader node (containing all loading rows at the end of the view)
93
+ */
94
+ buildLoader() {
95
+ const rect = new Rect(
96
+ 0,
97
+ this.contentSize.height,
98
+ this.virtualizer?.visibleRect.width,
99
+ this.loaderSize ?? 0
100
+ );
101
+ const previousLayoutNode = this.layoutNodes.get("loader");
102
+ if (previousLayoutNode?.layoutInfo.rect.y === rect.y) {
103
+ return previousLayoutNode;
104
+ }
105
+ const layoutNode = {
106
+ layoutInfo: new LayoutInfo("loader", "loader", rect),
107
+ validRect: rect
108
+ };
109
+ layoutNode.layoutInfo.estimatedSize = true;
110
+ this.layoutNodes.set("loader", layoutNode);
111
+ return layoutNode;
112
+ }
113
+ /**
114
+ * Builds empty state node
115
+ */
116
+ buildEmptyState() {
117
+ const rect = new Rect(
118
+ 0,
119
+ this.contentSize.height,
120
+ this.virtualizer?.visibleRect.width,
121
+ this.options.rowHeight ?? this.options.estimatedRowHeight ?? 50
122
+ );
123
+ const previousLayoutNode = this.layoutNodes.get("empty-state");
124
+ if (previousLayoutNode?.layoutInfo.rect.y === rect.y) {
125
+ return previousLayoutNode;
126
+ }
127
+ const layoutNode = {
128
+ layoutInfo: new LayoutInfo("empty-state", "empty-state", rect),
129
+ validRect: rect
130
+ };
131
+ layoutNode.layoutInfo.estimatedSize = true;
132
+ this.layoutNodes.set("empty-state", layoutNode);
133
+ return layoutNode;
134
+ }
135
+ /**
136
+ * estimatedSize is set to false by default after size is updated, assuming item
137
+ * height is not dynamic. In some cases (including loading skeleton rows) the height can
138
+ * change as custom loading skeleton render can be passed as a prop. Setting estimatedSize to
139
+ * true makes sure size is calculated and updated if needed after each render.
140
+ * See useVirtualizerItem code for more details.
141
+ */
142
+ updateItemSize(key, size) {
143
+ const result = super.updateItemSize(key, size);
144
+ if (this.canNodeHaveVariableHeight(key)) {
145
+ const loaderLayoutInfo = this.virtualizer?.getVisibleLayoutInfos().get(key);
146
+ if (loaderLayoutInfo) {
147
+ loaderLayoutInfo.estimatedSize = true;
148
+ }
149
+ }
150
+ return result;
151
+ }
152
+ canNodeHaveVariableHeight(key) {
153
+ return key === "loader";
154
+ }
155
+ }
156
+
157
+ export { ListWithLoadingStateLayout };
158
+ //# sourceMappingURL=ListWithLoadingStateLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListWithLoadingStateLayout.js","sources":["../../../../../../../core/src/utils/virtualization/ListWithLoadingStateLayout.ts"],"sourcesContent":["import { LayoutInfo, Rect, Size } from 'react-stately/useVirtualizerState';\nimport {\n LayoutNode,\n ListLayoutOptions,\n} from 'react-stately/useVirtualizerState';\nimport { Node } from '@react-types/shared';\nimport { Key } from 'react';\nimport { VariableWidthListLayout } from './VariableWidthListLayout';\n\ninterface ListWithLoadingStateLayoutProps {\n loadingState?: 'loading' | 'loadingMore';\n loadingRowsCount: number;\n sectionDividerHeight: number;\n headingHeight: number;\n}\n\nexport class ListWithLoadingStateLayout<T> extends VariableWidthListLayout<T> {\n readonly options;\n\n constructor(\n options: Pick<ListLayoutOptions, 'rowHeight' | 'estimatedRowHeight'> &\n ListWithLoadingStateLayoutProps\n ) {\n super(options);\n this.options = options;\n\n this.loaderSize =\n options.loadingRowsCount *\n (options.rowHeight ?? options.estimatedRowHeight ?? 50);\n }\n\n override doBuildCollection(): LayoutNode[] {\n let nodes: LayoutNode[] = [];\n if (this.options.loadingState === 'loading' || this.collection.size === 0) {\n this.contentSize.height = 0;\n } else {\n nodes = super.doBuildCollection();\n }\n if (this.options.loadingState) {\n const loaderNode = this.buildLoader();\n nodes.push(loaderNode);\n this.contentSize.height =\n this.contentSize.height + loaderNode.layoutInfo.rect.height;\n }\n\n if (!this.options.loadingState && this.collection.size === 0) {\n const emptyStateNode = this.buildEmptyState();\n nodes.push(emptyStateNode);\n this.contentSize.height = emptyStateNode.layoutInfo.rect.height;\n }\n return nodes;\n }\n\n /**\n * Adds the section header node (which is rendered as a divider and\n * optional heading text)\n */\n override buildSection(node: Node<T>, x: number, y: number): LayoutNode {\n // Synthesize a collection node for the header.\n const headerNode = {\n type: 'header',\n key: node.key + ':header',\n parentKey: node.key,\n value: null,\n level: node.level,\n index: node.index,\n hasChildNodes: false,\n childNodes: [],\n rendered: node.rendered,\n textValue: node.textValue,\n };\n\n // `node.rendered` is undefined if Section doesn't have a title.\n // `this.headingSize` is used in `this.buildSectionHeader`\n this.headingSize = node.rendered ? this.options.headingHeight : 0;\n\n // Build layout node for it and adjust y offset of section children.\n const header = this.buildSectionHeader(headerNode, x, y);\n header.node = headerNode;\n header.layoutInfo.parentKey = node.key;\n this.layoutNodes.set(headerNode.key, header);\n header.layoutInfo.rect.height +=\n // if first item is the section, we don't show the divider\n node.prevKey ? this.options.sectionDividerHeight : 0;\n\n y += header.layoutInfo.rect.height;\n\n const section = super.buildSection(node, x, y);\n section.children!.unshift(header);\n\n // Add a separator after the section if it is not followed by a section;\n if (node.nextKey && node.index !== undefined) {\n const nextNode = this.nextNodeAtLevel(node.level, node.index);\n if (nextNode && nextNode.type !== 'section') {\n const dividerRect = new Rect(\n 0,\n section.layoutInfo.rect.maxY,\n this.virtualizer?.visibleRect.width,\n this.options.sectionDividerHeight\n );\n\n const layoutInfo = new LayoutInfo(\n 'divider',\n `${node.key}:divider`,\n dividerRect\n );\n layoutInfo.parentKey = node.key;\n\n const layoutNode = {\n layoutInfo: layoutInfo,\n validRect: layoutInfo.rect.intersection(this.validRect),\n };\n\n this.layoutNodes.set(layoutInfo.key, layoutNode);\n section.children?.push(layoutNode);\n\n section.layoutInfo.rect.height += dividerRect.height;\n y += dividerRect.height;\n }\n }\n\n return section;\n }\n\n nextNodeAtLevel(level: number, startAt: number): Node<T> | undefined {\n for (const item of this.collection) {\n if (item.level === level && item.index && item.index > startAt) {\n return item;\n }\n }\n }\n\n /**\n * Builds loader node (containing all loading rows at the end of the view)\n */\n buildLoader(): LayoutNode {\n const rect = new Rect(\n 0,\n this.contentSize.height,\n this.virtualizer?.visibleRect.width,\n this.loaderSize ?? 0\n );\n const previousLayoutNode = this.layoutNodes.get('loader');\n if (previousLayoutNode?.layoutInfo.rect.y === rect.y) {\n return previousLayoutNode;\n }\n const layoutNode = {\n layoutInfo: new LayoutInfo('loader', 'loader', rect),\n validRect: rect,\n };\n layoutNode.layoutInfo.estimatedSize = true;\n this.layoutNodes.set('loader', layoutNode);\n return layoutNode;\n }\n\n /**\n * Builds empty state node\n */\n buildEmptyState(): LayoutNode {\n const rect = new Rect(\n 0,\n this.contentSize.height,\n this.virtualizer?.visibleRect.width,\n this.options.rowHeight ?? this.options.estimatedRowHeight ?? 50\n );\n const previousLayoutNode = this.layoutNodes.get('empty-state');\n if (previousLayoutNode?.layoutInfo.rect.y === rect.y) {\n return previousLayoutNode;\n }\n const layoutNode = {\n layoutInfo: new LayoutInfo('empty-state', 'empty-state', rect),\n validRect: rect,\n };\n layoutNode.layoutInfo.estimatedSize = true;\n this.layoutNodes.set('empty-state', layoutNode);\n return layoutNode;\n }\n\n /**\n * estimatedSize is set to false by default after size is updated, assuming item\n * height is not dynamic. In some cases (including loading skeleton rows) the height can\n * change as custom loading skeleton render can be passed as a prop. Setting estimatedSize to\n * true makes sure size is calculated and updated if needed after each render.\n * See useVirtualizerItem code for more details.\n */\n override updateItemSize(key: Key, size: Size): boolean {\n const result = super.updateItemSize(key, size);\n if (this.canNodeHaveVariableHeight(key)) {\n const loaderLayoutInfo = this.virtualizer\n ?.getVisibleLayoutInfos()\n .get(key);\n if (loaderLayoutInfo) {\n loaderLayoutInfo.estimatedSize = true;\n }\n }\n return result;\n }\n\n private canNodeHaveVariableHeight(key: Key) {\n return key === 'loader';\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { ListLayout } from 'react-stately/useVirtualizerState';
2
+
3
+ class VariableWidthListLayout extends ListLayout {
4
+ /**
5
+ * content width of items are stored here, if the content width is bigger than the Virtualizer's
6
+ * visible rect's width.
7
+ */
8
+ keyToWidth = /* @__PURE__ */ new Map();
9
+ visibleContentWidth = 0;
10
+ constructor(options) {
11
+ super(options);
12
+ }
13
+ buildItem(node, x, y) {
14
+ const previousLayoutNode = this.layoutNodes.get(node.key);
15
+ const layoutNode = super.buildItem(node, x, y);
16
+ if (this.visibleContentWidth) {
17
+ layoutNode.layoutInfo.rect.width = this.visibleContentWidth;
18
+ }
19
+ if (previousLayoutNode && previousLayoutNode.node === node && !previousLayoutNode.layoutInfo.estimatedSize) {
20
+ layoutNode.layoutInfo.estimatedSize = false;
21
+ }
22
+ return layoutNode;
23
+ }
24
+ /**
25
+ * Allows for overriding buildCollection in a sub-class
26
+ */
27
+ doBuildCollection() {
28
+ return super.buildCollection();
29
+ }
30
+ buildCollection() {
31
+ this.visibleContentWidth = this.getVisibleContentWidth();
32
+ const layoutNodes = this.doBuildCollection();
33
+ this.contentSize.width = this.visibleContentWidth;
34
+ return layoutNodes;
35
+ }
36
+ shouldInvalidate(newRect, oldRect) {
37
+ return super.shouldInvalidate(newRect, oldRect) || this.getVisibleContentWidth() !== this.visibleContentWidth;
38
+ }
39
+ shouldInvalidateEverything(invalidationContext) {
40
+ return super.shouldInvalidateEverything(invalidationContext) || // in buildChild, if invalidateEverything is false and y is not changed, it will reuse the existing layoutInfo.
41
+ // which can be problematic, if it was created in a time when the visible content width was different.
42
+ // A more efficient approach (instead of rebuilding the whole collection), might be to set layout width to
43
+ // visibleContentWidth, in getVisibleLayoutInfos, if mutation is ok.
44
+ // UPDATE: using getFinalLayoutInfo seems to be a legitimate last minute way to mutate layout infos.
45
+ this.contentSize?.width !== this.visibleContentWidth;
46
+ }
47
+ updateItemSize(key, size) {
48
+ const changed = super.updateItemSize(key, size);
49
+ const layoutNode = this.layoutNodes.get(key);
50
+ if (!layoutNode) return false;
51
+ const layoutInfo = layoutNode.layoutInfo;
52
+ if (layoutInfo && size.width > this.contentSize.width) {
53
+ this.keyToWidth.set(key, size.width);
54
+ this.contentSize.width = size.width;
55
+ return true;
56
+ } else {
57
+ return changed;
58
+ }
59
+ }
60
+ getVisibleContentWidth() {
61
+ return this.virtualizer ? Math.max(
62
+ this.virtualizer.visibleRect.width,
63
+ ...Array.from(this.keyToWidth.values())
64
+ ) : 0;
65
+ }
66
+ }
67
+
68
+ export { VariableWidthListLayout };
69
+ //# sourceMappingURL=VariableWidthListLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VariableWidthListLayout.js","sources":["../../../../../../../core/src/utils/virtualization/VariableWidthListLayout.ts"],"sourcesContent":["import {\n LayoutNode,\n ListLayout,\n ListLayoutOptions,\n} from 'react-stately/useVirtualizerState';\nimport React, { Key } from 'react';\nimport {\n InvalidationContext,\n Rect,\n Size,\n} from 'react-stately/useVirtualizerState';\nimport { Node } from '@react-types/shared';\n\n/**\n * Extends `ListLayout` and allows items of the list to have width based on the content.\n * `ListLayout` by default sets width based on the virtualizer's visible rect. This means the\n * overflow of list items will be clipped. In `VariableWidthListLayout`, the width of the list\n * depends on the content of the visible items.\n *\n * NOTE: At the time of writing this class, Virtualization in @react-aria and @react-stately don't\n * have proper documentation, and it wasn't clear if there could be better ways of letting list's\n * width grow based on the content.\n */\nexport class VariableWidthListLayout<T> extends ListLayout<T> {\n /**\n * content width of items are stored here, if the content width is bigger than the Virtualizer's\n * visible rect's width.\n */\n keyToWidth = new Map<Key, number>();\n private visibleContentWidth: number = 0;\n\n constructor(options: ListLayoutOptions) {\n super(options);\n }\n\n override buildItem(node: Node<T>, x: number, y: number): LayoutNode {\n const previousLayoutNode = this.layoutNodes.get(node.key);\n const layoutNode = super.buildItem(node, x, y);\n if (this.visibleContentWidth) {\n layoutNode.layoutInfo.rect.width = this.visibleContentWidth;\n }\n // If only the width changed (not the content) and the item was already\n // measured, don't mark as estimated. This prevents re-measurement cascades\n // where width expansion → re-measure → new wider items → more width\n // expansion can exceed React's update depth limit.\n if (\n previousLayoutNode &&\n previousLayoutNode.node === node &&\n !previousLayoutNode.layoutInfo.estimatedSize\n ) {\n layoutNode.layoutInfo.estimatedSize = false;\n }\n return layoutNode;\n }\n\n /**\n * Allows for overriding buildCollection in a sub-class\n */\n protected doBuildCollection(): LayoutNode[] {\n return super.buildCollection();\n }\n\n buildCollection(): LayoutNode[] {\n this.visibleContentWidth = this.getVisibleContentWidth();\n const layoutNodes = this.doBuildCollection();\n this.contentSize.width = this.visibleContentWidth;\n return layoutNodes;\n }\n\n override shouldInvalidate(newRect: Rect, oldRect: Rect): boolean {\n return (\n super.shouldInvalidate(newRect, oldRect) ||\n this.getVisibleContentWidth() !== this.visibleContentWidth\n );\n }\n\n override shouldInvalidateEverything(\n invalidationContext: InvalidationContext<ListLayoutOptions>\n ): boolean {\n return (\n super.shouldInvalidateEverything(invalidationContext) ||\n // in buildChild, if invalidateEverything is false and y is not changed, it will reuse the existing layoutInfo.\n // which can be problematic, if it was created in a time when the visible content width was different.\n // A more efficient approach (instead of rebuilding the whole collection), might be to set layout width to\n // visibleContentWidth, in getVisibleLayoutInfos, if mutation is ok.\n // UPDATE: using getFinalLayoutInfo seems to be a legitimate last minute way to mutate layout infos.\n this.contentSize?.width !== this.visibleContentWidth\n );\n }\n\n override updateItemSize(key: React.Key, size: Size): boolean {\n const changed = super.updateItemSize(key, size);\n const layoutNode = this.layoutNodes.get(key);\n // If no layoutInfo, item has been deleted/removed.\n if (!layoutNode) return false;\n const layoutInfo = layoutNode.layoutInfo;\n if (layoutInfo && size.width > this.contentSize.width) {\n this.keyToWidth.set(key, size.width);\n // Update contentSize.width immediately so that subsequent items measured\n // in the same render cycle compare against the latest max width, avoiding\n // redundant invalidations that can exceed React's update depth limit.\n this.contentSize.width = size.width;\n return true;\n } else {\n return changed;\n }\n }\n\n private getVisibleContentWidth() {\n return this.virtualizer\n ? Math.max(\n this.virtualizer.visibleRect.width,\n ...Array.from(this.keyToWidth.values())\n )\n : 0;\n }\n}\n"],"names":[],"mappings":";;AAuBO,MAAM,gCAAmC,UAAA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAK5D,UAAA,uBAAiB,GAAA,EAAiB;AAAA,EAC1B,mBAAA,GAA8B,CAAA;AAAA,EAEtC,YAAY,OAAA,EAA4B;AACtC,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf;AAAA,EAES,SAAA,CAAU,IAAA,EAAe,CAAA,EAAW,CAAA,EAAuB;AAClE,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAK,GAAG,CAAA;AACxD,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,CAAU,IAAA,EAAM,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAC5B,MAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,mBAAA;AAAA,IAC1C;AAKA,IAAA,IACE,sBACA,kBAAA,CAAmB,IAAA,KAAS,QAC5B,CAAC,kBAAA,CAAmB,WAAW,aAAA,EAC/B;AACA,MAAA,UAAA,CAAW,WAAW,aAAA,GAAgB,KAAA;AAAA,IACxC;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,iBAAA,GAAkC;AAC1C,IAAA,OAAO,MAAM,eAAA,EAAgB;AAAA,EAC/B;AAAA,EAEA,eAAA,GAAgC;AAC9B,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAK,sBAAA,EAAuB;AACvD,IAAA,MAAM,WAAA,GAAc,KAAK,iBAAA,EAAkB;AAC3C,IAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAA,CAAK,mBAAA;AAC9B,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAES,gBAAA,CAAiB,SAAe,OAAA,EAAwB;AAC/D,IAAA,OACE,KAAA,CAAM,iBAAiB,OAAA,EAAS,OAAO,KACvC,IAAA,CAAK,sBAAA,OAA6B,IAAA,CAAK,mBAAA;AAAA,EAE3C;AAAA,EAES,2BACP,mBAAA,EACS;AACT,IAAA,OACE,KAAA,CAAM,2BAA2B,mBAAmB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMpD,IAAA,CAAK,WAAA,EAAa,KAAA,KAAU,IAAA,CAAK,mBAAA;AAAA,EAErC;AAAA,EAES,cAAA,CAAe,KAAgB,IAAA,EAAqB;AAC3D,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAE3C,IAAA,IAAI,CAAC,YAAY,OAAO,KAAA;AACxB,IAAA,MAAM,aAAa,UAAA,CAAW,UAAA;AAC9B,IAAA,IAAI,UAAA,IAAc,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,YAAY,KAAA,EAAO;AACrD,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAInC,MAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAA,CAAK,KAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,sBAAA,GAAyB;AAC/B,IAAA,OAAO,IAAA,CAAK,cACR,IAAA,CAAK,GAAA;AAAA,MACH,IAAA,CAAK,YAAY,WAAA,CAAY,KAAA;AAAA,MAC7B,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ;AAAA,KACxC,GACA,CAAA;AAAA,EACN;AACF;;;;"}
@@ -0,0 +1,40 @@
1
+ import { useObjectRef } from 'react-aria/useObjectRef';
2
+ import { Virtualizer } from 'react-aria/private/virtualizer/Virtualizer';
3
+ import React, { createContext } from 'react';
4
+
5
+ const LoadingRendererContext = createContext({
6
+ loadingSkeletonRowsCount: NaN,
7
+ renderLoadingSkeleton: () => {
8
+ throw new Error("Illegal state.");
9
+ }
10
+ });
11
+ function _VirtualizerWithLoading({
12
+ renderLoadingSkeleton,
13
+ loadingSkeletonRowsCount,
14
+ emptyState,
15
+ ...props
16
+ }, ref) {
17
+ return /* @__PURE__ */ React.createElement(
18
+ LoadingRendererContext.Provider,
19
+ {
20
+ value: { renderLoadingSkeleton, loadingSkeletonRowsCount }
21
+ },
22
+ /* @__PURE__ */ React.createElement(Virtualizer, { ...props, ref: useObjectRef(ref) }, (kind, item) => {
23
+ if (kind === "loader") {
24
+ return /* @__PURE__ */ React.createElement(LoadingRendererContext.Consumer, null, ({ renderLoadingSkeleton: renderLoadingSkeleton2, loadingSkeletonRowsCount: loadingSkeletonRowsCount2 }) => Array.from(Array(loadingSkeletonRowsCount2)).map(
25
+ (_, index) => renderLoadingSkeleton2(index)
26
+ ));
27
+ }
28
+ if (!!emptyState && kind === "empty-state") {
29
+ return emptyState;
30
+ }
31
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.children(kind, item));
32
+ })
33
+ );
34
+ }
35
+ const VirtualizerWithLoadingSkeleton = React.forwardRef(
36
+ _VirtualizerWithLoading
37
+ );
38
+
39
+ export { VirtualizerWithLoadingSkeleton };
40
+ //# sourceMappingURL=VirtualizerWithLoadingSkeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualizerWithLoadingSkeleton.js","sources":["../../../../../../../core/src/utils/virtualization/VirtualizerWithLoadingSkeleton.tsx"],"sourcesContent":["import { useObjectRef } from 'react-aria/useObjectRef';\nimport { Virtualizer } from 'react-aria/private/virtualizer/Virtualizer';\nimport React, {\n ComponentProps,\n createContext,\n ForwardedRef,\n ReactNode,\n} from 'react';\n\nconst LoadingRendererContext = createContext<{\n renderLoadingSkeleton: (index: number) => ReactNode;\n loadingSkeletonRowsCount: number;\n}>({\n loadingSkeletonRowsCount: NaN,\n renderLoadingSkeleton: () => {\n throw new Error('Illegal state.');\n },\n});\n\ntype VirtualizerWithLoadingProps = Omit<\n ComponentProps<typeof Virtualizer>,\n 'isLoading'\n> & {\n loadingSkeletonRowsCount: number;\n renderLoadingSkeleton: (index: number) => ReactNode;\n emptyState?: ReactNode;\n};\n\n/**\n * Wraps Virtualizer from @react-aria/virtualizer to render skeleton loading rows for \"loader\" node,\n * in a way that it's reactive to `loadingSkeletonRowsCount` and `renderLoadingSkeleton` props.\n * By default, the renderer function passed as Virtualizer children is not called in each re-render,\n * and a React context is used to make the rendered UI reactive to loading-related props.\n */\nfunction _VirtualizerWithLoading(\n {\n renderLoadingSkeleton,\n loadingSkeletonRowsCount,\n emptyState,\n ...props\n }: VirtualizerWithLoadingProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n return (\n <LoadingRendererContext.Provider\n value={{ renderLoadingSkeleton, loadingSkeletonRowsCount }}\n >\n <Virtualizer {...props} ref={useObjectRef(ref)}>\n {(kind, item) => {\n if (kind === 'loader') {\n return (\n <LoadingRendererContext.Consumer>\n {({ renderLoadingSkeleton, loadingSkeletonRowsCount }) =>\n Array.from(Array(loadingSkeletonRowsCount)).map((_, index) =>\n renderLoadingSkeleton(index)\n )\n }\n </LoadingRendererContext.Consumer>\n );\n }\n if (!!emptyState && kind === 'empty-state') {\n return emptyState;\n }\n return <>{props.children(kind, item)}</>;\n }}\n </Virtualizer>\n </LoadingRendererContext.Provider>\n );\n}\n\nexport const VirtualizerWithLoadingSkeleton = React.forwardRef(\n _VirtualizerWithLoading\n) as (\n props: VirtualizerWithLoadingProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n }\n) => React.ReactElement;\n"],"names":["renderLoadingSkeleton","loadingSkeletonRowsCount"],"mappings":";;;;AASA,MAAM,yBAAyB,aAAA,CAG5B;AAAA,EACD,wBAAA,EAA0B,GAAA;AAAA,EAC1B,uBAAuB,MAAM;AAC3B,IAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,EAClC;AACF,CAAC,CAAA;AAiBD,SAAS,uBAAA,CACP;AAAA,EACE,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,sBAAA,CAAuB,QAAA;AAAA,IAAvB;AAAA,MACC,KAAA,EAAO,EAAE,qBAAA,EAAuB,wBAAA;AAAyB,KAAA;AAAA,oBAEzD,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO,GAAA,EAAK,aAAa,GAAG,CAAA,EAAA,EAC1C,CAAC,IAAA,EAAM,IAAA,KAAS;AACf,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,2CACG,sBAAA,CAAuB,QAAA,EAAvB,IAAA,EACE,CAAC,EAAE,qBAAA,EAAAA,sBAAAA,EAAuB,wBAAA,EAAAC,yBAAAA,OACzB,KAAA,CAAM,IAAA,CAAK,KAAA,CAAMA,yBAAwB,CAAC,CAAA,CAAE,GAAA;AAAA,UAAI,CAAC,CAAA,EAAG,KAAA,KAClDD,sBAAAA,CAAsB,KAAK;AAAA,SAGjC,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,CAAC,CAAC,UAAA,IAAc,IAAA,KAAS,aAAA,EAAe;AAC1C,QAAA,OAAO,UAAA;AAAA,MACT;AACA,MAAA,uBAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,KAAA,CAAM,QAAA,CAAS,IAAA,EAAM,IAAI,CAAE,CAAA;AAAA,IACvC,CACF;AAAA,GACF;AAEJ;AAEO,MAAM,iCAAiC,KAAA,CAAM,UAAA;AAAA,EAClD;AACF;;;;"}
@@ -0,0 +1,35 @@
1
+ import { useMemo } from 'react';
2
+ import { ListWithLoadingStateLayout } from './ListWithLoadingStateLayout.js';
3
+
4
+ function useListWithLoadingStateLayout({
5
+ loadingState,
6
+ loadingSkeletonRowsCount,
7
+ sectionDividerHeight = 5,
8
+ headingHeight = 34
9
+ // default css height
10
+ }) {
11
+ const layout = useMemo(
12
+ () => new ListWithLoadingStateLayout({
13
+ /**
14
+ * The estimated height is an average between the min and max height
15
+ * of list items built with our own exports. Which is the only way
16
+ * to render InteractiveList items.
17
+ */
18
+ estimatedRowHeight: 60,
19
+ loadingState,
20
+ sectionDividerHeight,
21
+ headingHeight,
22
+ loadingRowsCount: loadingSkeletonRowsCount
23
+ }),
24
+ [
25
+ loadingState,
26
+ loadingSkeletonRowsCount,
27
+ sectionDividerHeight,
28
+ headingHeight
29
+ ]
30
+ );
31
+ return layout;
32
+ }
33
+
34
+ export { useListWithLoadingStateLayout };
35
+ //# sourceMappingURL=useListWithLoadingStateLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListWithLoadingStateLayout.js","sources":["../../../../../../../core/src/utils/virtualization/useListWithLoadingStateLayout.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { ListWithLoadingStateLayout } from './ListWithLoadingStateLayout';\n\nexport function useListWithLoadingStateLayout<T>({\n loadingState,\n loadingSkeletonRowsCount,\n sectionDividerHeight = 5,\n headingHeight = 34, // default css height\n}: {\n loadingState?: 'loading' | 'loadingMore';\n loadingSkeletonRowsCount: number;\n sectionDividerHeight?: number;\n headingHeight?: number;\n}) {\n const layout = useMemo(\n () =>\n new ListWithLoadingStateLayout<T>({\n /**\n * The estimated height is an average between the min and max height\n * of list items built with our own exports. Which is the only way\n * to render InteractiveList items.\n */\n estimatedRowHeight: 60,\n loadingState,\n sectionDividerHeight,\n headingHeight,\n loadingRowsCount: loadingSkeletonRowsCount,\n }),\n [\n loadingState,\n loadingSkeletonRowsCount,\n sectionDividerHeight,\n headingHeight,\n ]\n );\n\n return layout;\n}\n"],"names":[],"mappings":";;;AAGO,SAAS,6BAAA,CAAiC;AAAA,EAC/C,YAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA,GAAuB,CAAA;AAAA,EACvB,aAAA,GAAgB;AAAA;AAClB,CAAA,EAKG;AACD,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,MACE,IAAI,0BAAA,CAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhC,kBAAA,EAAoB,EAAA;AAAA,MACpB,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAAA,IACH;AAAA,MACE,YAAA;AAAA,MACA,wBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
@@ -1,22 +1,25 @@
1
- export { Accordion } from './Accordion/index.js';
2
- export { Alert } from './Alert/src/Alert.js';
3
- export { Amount } from './Amount/src/Amount.js';
4
- export { Autocomplete } from './Autocomplete/src/Autocomplete.js';
5
- export { Breadcrumbs } from './Breadcrumbs/src/Breadcrumbs.js';
6
- export { BreadcrumbItem } from './Breadcrumbs/src/BreadcrumbItem.js';
7
- export { FileDropzone } from './FileDropzone/src/FileDropzone.js';
8
- export { FileTrigger } from './FileDropzone/src/FileTrigger.js';
9
- export { FilterDropdown } from './Filtering/src/FilterDropdown.js';
10
- export { SearchableSelectFilter } from './Filtering/src/SearchableSelectFilter.js';
11
- export { Flag } from './Flag/src/Flag.js';
12
- export { LabeledValue } from './LabeledValue/src/LabeledValue.js';
13
- export { NumberField } from './NumberField/src/NumberField.js';
14
- export { Sidebar } from './Sidebar/index.js';
15
- export { ProgressIndicator } from './ProgressIndicator/src/ProgressIndicator.js';
16
- export { Slider } from './Slider/index.js';
17
- export { TagGroup } from './TagGroup/src/TagGroup.js';
18
- export { TagItem } from './TagGroup/src/TagItem.js';
19
- export { TimeField } from './TimeField/src/TimeField.js';
1
+ export { Accordion } from './lab/src/Accordion/index.js';
2
+ export { Alert } from './lab/src/Alert/src/Alert.js';
3
+ export { Amount } from './lab/src/Amount/src/Amount.js';
4
+ export { Autocomplete } from './lab/src/Autocomplete/src/Autocomplete.js';
5
+ export { Breadcrumbs } from './lab/src/Breadcrumbs/src/Breadcrumbs.js';
6
+ export { BreadcrumbItem } from './lab/src/Breadcrumbs/src/BreadcrumbItem.js';
7
+ export { FileDropzone } from './lab/src/FileDropzone/src/FileDropzone.js';
8
+ export { FileTrigger } from './lab/src/FileDropzone/src/FileTrigger.js';
9
+ export { FilterDropdown } from './lab/src/Filtering/src/FilterDropdown.js';
10
+ export { SearchableSelectFilter } from './lab/src/Filtering/src/SearchableSelectFilter.js';
11
+ export { Flag } from './lab/src/Flag/src/Flag.js';
12
+ export { LabeledValue } from './lab/src/LabeledValue/src/LabeledValue.js';
13
+ export { NumberField } from './lab/src/NumberField/src/NumberField.js';
14
+ export { Sidebar } from './lab/src/Sidebar/index.js';
15
+ export { ProgressIndicator } from './lab/src/ProgressIndicator/src/ProgressIndicator.js';
16
+ export { Slider } from './lab/src/Slider/index.js';
17
+ export { TagGroup } from './lab/src/TagGroup/src/TagGroup.js';
18
+ export { TagItem } from './lab/src/TagGroup/src/TagItem.js';
19
+ export { TimeField } from './lab/src/TimeField/src/TimeField.js';
20
+ export { TruncateOverflow } from './lab/src/TruncateOverflow/src/TruncateOverflow.js';
21
+ export { DataGrid } from './lab/src/DataGrid/index.js';
20
22
  export { useLocale } from 'react-aria/I18nProvider';
21
- export { AccordionContext } from './Accordion/src/AccordionContext.js';
23
+ export { AccordionContext } from './lab/src/Accordion/src/AccordionContext.js';
24
+ export { createDataGridColumnHelper } from './lab/src/DataGrid/src/createDataGridColumnHelper.js';
22
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/Accordion/index.ts"],"sourcesContent":["import { Accordion, type AccordionProps } from './src/Accordion';\nimport {\n AccordionHeading,\n type AccordionHeadingProps,\n} from './src/AccordionHeading';\nimport { AccordionItem, type AccordionItemProps } from './src/AccordionItem';\nimport { AccordionContext } from './src/AccordionContext';\nimport { AccordionPanel, type AccordionPanelProps } from './src/AccordionPanel';\n\n/*\n * Before moving Accordion component to the core package, it's important to check on the\n * latest release of \"@react-aria/accordion\".\n * The hook and the component package are marked as \"pre-release\", so we can expect some changes.\n *\n * https://github.com/adobe/react-spectrum/issues/2801#issuecomment-1035377858\n * https://github.com/adobe/react-spectrum/discussions/6635#discussioncomment-9990027\n *\n * The current implementation is based on the SelectableCollection API, which creates bugs when\n * focusable items are used inside of the Accordion.Item.\n * E.g. UC-3414 (fixed), UC-3545 (to-do)\n *\n * Alternatively, we can re-implement the component.\n */\nconst _Accordion = Object.assign(Accordion, {\n Heading: AccordionHeading,\n Item: AccordionItem,\n Panel: AccordionPanel,\n});\n\nexport {\n _Accordion as Accordion,\n AccordionContext,\n type AccordionProps,\n type AccordionItemProps,\n type AccordionHeadingProps,\n type AccordionPanelProps,\n};\n"],"names":[],"mappings":";;;;;;AAuBA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW;AAAA,EAC1C,OAAA,EAAS,gBAAA;AAAA,EACT,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","sources":["../../../../../../src/Accordion/src/Accordion.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport { useObjectRef } from 'react-aria/useObjectRef';\nimport { DOMProps } from '@react-types/shared';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport {\n SapphireStyleProps,\n TypographyHeadingProps,\n useSapphireStyleProps,\n useThemeCheck,\n withTruthyZero as hasAllowedCustomSidePadding,\n GlobalDomAttributes,\n} from '@danske/sapphire-react';\nimport { FocusScope } from 'react-aria/FocusScope';\n\nimport { AccordionContext } from './AccordionContext';\nimport { DisclosureGroup, DisclosureGroupProps } from 'react-aria-components';\n\nexport type TreeExpansionMode = 'single' | 'multiple';\n\nexport interface AccordionProps\n extends GlobalDomAttributes,\n SapphireStyleProps,\n DOMProps,\n Pick<\n DisclosureGroupProps,\n | 'allowsMultipleExpanded'\n | 'expandedKeys'\n | 'defaultExpandedKeys'\n | 'onExpandedChange'\n | 'children'\n | 'isDisabled'\n > {\n /** Set aria-level attribute for item's header. Accessibility requirement.\n * Defines the hierarchical level of an element within a page structure.\n * @default 5\n */\n headerLevel?: TypographyHeadingProps['level'];\n /**\n * Removes the divider after the last accordion item.\n * Useful when rendered in a container which already has borders.\n */\n hideLastDivider?: boolean;\n /**\n * Counter acts the side padding, so that accordion is shifted to the left with same amount\n * and having side padding * 2 added to width – resulting in full width accordion.\n * Useful in scenarions where accordion is inside a padded container and desired layout has accordion going from edge to edge horizontally.\n * @example\n * ```tsx\n * <Accordion hasNegativeSideMargin>...</Accordion>\n * ```\n */\n hasNegativeSideMargin?: boolean;\n /**\n * Add custom sized padding to the sides of the accordion items.\n * @example\n * ```tsx\n * <Accordion sidePadding={tokens.size.spacingContainerHorizontalM.value} hasNegativeSideMargin>...</Accordion>\n * ```\n */\n sidePadding?: number | string;\n}\n\n/**\n * Accordion is a vertically stacked set of items, that consist of an interactive header and expandable content section. An accordion item’s content display can be toggled on and off by clicking the component’s header above.\n */\nexport const Accordion = forwardRef(function Accordion(\n {\n allowsMultipleExpanded = true,\n headerLevel = 5,\n hideLastDivider = false,\n hasNegativeSideMargin = false,\n sidePadding,\n children,\n expandedKeys,\n defaultExpandedKeys,\n onExpandedChange,\n isDisabled,\n ...props\n }: AccordionProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n const forwardedRef = useObjectRef<HTMLDivElement>(ref);\n\n return (\n <FocusScope>\n <AccordionContext.Provider value={{ sidePadding, headerLevel }}>\n <DisclosureGroup\n {...filterDOMProps(props, { global: true, labelable: true })}\n allowsMultipleExpanded={allowsMultipleExpanded}\n expandedKeys={expandedKeys}\n defaultExpandedKeys={defaultExpandedKeys}\n onExpandedChange={onExpandedChange}\n isDisabled={isDisabled}\n ref={forwardedRef}\n className={clsx(\n styles['sapphire-accordion'],\n {\n [styles['sapphire-accordion--without-last-divider']]:\n hideLastDivider,\n [styles['sapphire-accordion--negative-margin-self']]:\n !hasAllowedCustomSidePadding(sidePadding) &&\n hasNegativeSideMargin,\n },\n styleProps.className\n )}\n style={{\n ...(hasAllowedCustomSidePadding(sidePadding) &&\n hasNegativeSideMargin\n ? {\n marginLeft:\n typeof sidePadding === 'string'\n ? `calc(${sidePadding} * -1)`\n : `-${sidePadding}px`,\n width: `calc(100% + calc(${sidePadding} * 2${\n typeof sidePadding === 'string' ? '' : 'px'\n }))`,\n }\n : {}),\n ...styleProps.style,\n }}\n >\n {children}\n </DisclosureGroup>\n </AccordionContext.Provider>\n </FocusScope>\n );\n});\n"],"names":["Accordion","hasAllowedCustomSidePadding"],"mappings":";;;;;;;;;;AAmEO,MAAM,SAAA,GAAY,UAAA,CAAW,SAASA,UAAAA,CAC3C;AAAA,EACE,sBAAA,GAAyB,IAAA;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,eAAA,GAAkB,KAAA;AAAA,EAClB,qBAAA,GAAwB,KAAA;AAAA,EACxB,WAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,aAAA,EAAc;AACd,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,KAAK,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,aAA6B,GAAG,CAAA;AAErD,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,UAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,EAAE,WAAA,EAAa,WAAA,EAAY,EAAA,kBAC3D,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACE,GAAG,eAAe,KAAA,EAAO,EAAE,QAAQ,IAAA,EAAM,SAAA,EAAW,MAAM,CAAA;AAAA,MAC3D,sBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,IAAA;AAAA,QACT,OAAO,oBAAoB,CAAA;AAAA,QAC3B;AAAA,UACE,CAAC,MAAA,CAAO,0CAA0C,CAAC,GACjD,eAAA;AAAA,UACF,CAAC,OAAO,0CAA0C,CAAC,GACjD,CAACC,cAAA,CAA4B,WAAW,CAAA,IACxC;AAAA,SACJ;AAAA,QACA,UAAA,CAAW;AAAA,OACb;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAIA,cAAA,CAA4B,WAAW,CAAA,IAC3C,qBAAA,GACI;AAAA,UACE,UAAA,EACE,OAAO,WAAA,KAAgB,QAAA,GACnB,QAAQ,WAAW,CAAA,MAAA,CAAA,GACnB,IAAI,WAAW,CAAA,EAAA,CAAA;AAAA,UACrB,KAAA,EAAO,oBAAoB,WAAW,CAAA,IAAA,EACpC,OAAO,WAAA,KAAgB,QAAA,GAAW,KAAK,IACzC,CAAA,EAAA;AAAA,YAEF,EAAC;AAAA,QACL,GAAG,UAAA,CAAW;AAAA;AAChB,KAAA;AAAA,IAEC;AAAA,GAEL,CACF,CAAA;AAEJ,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionContext.js","sources":["../../../../../../src/Accordion/src/AccordionContext.ts"],"sourcesContent":["import { TypographyHeadingProps } from '@danske/sapphire-react';\nimport React, { useContext } from 'react';\n\ninterface AccordionContextProps {\n sidePadding?: number | string;\n headerLevel?: TypographyHeadingProps['level'];\n}\n\nexport const AccordionContext = React.createContext<AccordionContextProps>({\n sidePadding: undefined,\n headerLevel: 5,\n});\n\nexport function useAccordionContext(): AccordionContextProps {\n const context = useContext(AccordionContext);\n if (context) {\n return context;\n }\n throw new Error(\n 'Accordion context can only be used within Accordion component.'\n );\n}\n"],"names":[],"mappings":";;AAQO,MAAM,gBAAA,GAAmB,MAAM,aAAA,CAAqC;AAAA,EACzE,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa;AACf,CAAC;AAEM,SAAS,mBAAA,GAA6C;AAC3D,EAAA,MAAM,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAC3C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionHeading.js","sources":["../../../../../../src/Accordion/src/AccordionHeading.tsx"],"sourcesContent":["import React, { forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport { DOMProps } from '@react-types/shared';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport {\n Icon,\n Typography,\n TypographyHeadingProps,\n withTruthyZero as hasAllowedCustomSidePadding,\n} from '@danske/sapphire-react';\nimport { ChevronDown } from '@danske/sapphire-icons/react';\nimport { Button } from 'react-aria-components';\nimport { useAccordionContext } from './AccordionContext';\nimport { customPaddingStyleProps } from './utils';\n\nexport interface AccordionHeadingProps extends DOMProps {\n children?: ReactNode;\n headerLevel?: TypographyHeadingProps['level'];\n}\n\nexport const AccordionHeading = forwardRef(function AccordionHeading(\n { children, headerLevel, ...props }: AccordionHeadingProps,\n ref: React.Ref<HTMLDivElement>\n): React.JSX.Element {\n const { sidePadding, headerLevel: contextHeaderLevel } =\n useAccordionContext();\n\n return (\n <div\n role=\"heading\"\n aria-level={headerLevel ?? contextHeaderLevel}\n {...filterDOMProps(props, { global: true })}\n ref={ref}\n >\n <Button\n slot=\"trigger\"\n className={({ isFocusVisible }) =>\n clsx(styles['sapphire-accordion__item-header'], styles['js-focus'], {\n [styles['is-focus']]: isFocusVisible,\n })\n }\n style={\n hasAllowedCustomSidePadding(sidePadding)\n ? customPaddingStyleProps(sidePadding)\n : {}\n }\n >\n <Typography.Heading level={6} elementType=\"span\">\n <div className={clsx(styles['sapphire-accordion__item-heading'])}>\n {children}\n </div>\n </Typography.Heading>\n <div className={clsx(styles['sapphire-accordion__item-arrow'])}>\n <Icon size=\"lg\">\n <ChevronDown />\n </Icon>\n </div>\n </Button>\n </div>\n );\n});\n"],"names":["AccordionHeading","hasAllowedCustomSidePadding"],"mappings":";;;;;;;;;;AAqBO,MAAM,gBAAA,GAAmB,UAAA,CAAW,SAASA,iBAAAA,CAClD,EAAE,UAAU,WAAA,EAAa,GAAG,KAAA,EAAM,EAClC,GAAA,EACmB;AACnB,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAa,kBAAA,KAChC,mBAAA,EAAoB;AAEtB,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,SAAA;AAAA,MACL,cAAY,WAAA,IAAe,kBAAA;AAAA,MAC1B,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC1C;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAW,CAAC,EAAE,cAAA,EAAe,KAC3B,IAAA,CAAK,MAAA,CAAO,iCAAiC,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,EAAG;AAAA,UAClE,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG;AAAA,SACvB,CAAA;AAAA,QAEH,OACEC,cAAA,CAA4B,WAAW,IACnC,uBAAA,CAAwB,WAAW,IACnC;AAAC,OAAA;AAAA,0CAGN,UAAA,CAAW,OAAA,EAAX,EAAmB,KAAA,EAAO,GAAG,WAAA,EAAY,MAAA,EAAA,kBACxC,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAW,IAAA,CAAK,MAAA,CAAO,kCAAkC,CAAC,CAAA,EAAA,EAC5D,QACH,CACF,CAAA;AAAA,sBACA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,IAAA,CAAK,OAAO,gCAAgC,CAAC,CAAA,EAAA,kBAC3D,KAAA,CAAA,aAAA,CAAC,QAAK,IAAA,EAAK,IAAA,EAAA,kBACT,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,IAAY,CACf,CACF;AAAA;AACF,GACF;AAEJ,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionItem.js","sources":["../../../../../../src/Accordion/src/AccordionItem.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\n\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\n\nimport { Disclosure } from 'react-aria-components';\nimport { DisclosureProps } from 'react-aria-components';\nimport { useFocusManager } from 'react-aria/FocusScope';\nimport { useEvent } from 'react-aria/private/utils/useEvent';\nimport { useObjectRef } from 'react-aria/useObjectRef';\nimport { DOMProps } from '@react-types/shared';\n\nexport interface AccordionItemProps\n extends DOMProps,\n Pick<DisclosureProps, 'children' | 'isDisabled'> {}\n\nexport const AccordionItem = forwardRef(function AccordionItem(\n { children, id, ...props }: AccordionItemProps,\n forwardedRef: React.Ref<HTMLDivElement>\n): JSX.Element {\n const ref = useObjectRef<HTMLDivElement>(forwardedRef);\n const focusManager = useFocusManager();\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (!focusManager) return;\n\n if (\n !(e.target instanceof Element) ||\n e.target.getAttribute('slot') !== 'trigger'\n )\n return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusManager.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusManager.focusPrevious();\n break;\n case 'Home':\n e.preventDefault();\n focusManager.focusFirst();\n break;\n case 'End':\n e.preventDefault();\n focusManager.focusLast();\n break;\n default:\n return;\n }\n };\n\n useEvent(ref, 'keydown', onKeyDown);\n\n return (\n <Disclosure\n ref={ref}\n id={id}\n className={({ isExpanded, isDisabled }) =>\n clsx(styles['sapphire-accordion__item'], {\n [styles['sapphire-accordion__item--open']]: isExpanded,\n [styles['is-disabled']]: isDisabled,\n })\n }\n {...props}\n >\n <div className={clsx(styles['sapphire-accordion__item-content-wrapper'])}>\n {children}\n </div>\n </Disclosure>\n );\n});\n"],"names":["AccordionItem"],"mappings":";;;;;;;;AAgBO,MAAM,aAAA,GAAgB,UAAA,CAAW,SAASA,cAAAA,CAC/C,EAAE,UAAU,EAAA,EAAI,GAAG,KAAA,EAAM,EACzB,YAAA,EACa;AACb,EAAA,MAAM,GAAA,GAAM,aAA6B,YAAY,CAAA;AACrD,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqB;AACtC,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,IACE,EAAE,EAAE,MAAA,YAAkB,OAAA,CAAA,IACtB,EAAE,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,KAAM,SAAA;AAElC,MAAA;AAEF,IAAA,QAAQ,EAAE,GAAA;AAAK,MACb,KAAK,WAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,YAAA,CAAa,SAAA,EAAU;AACvB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,YAAA,CAAa,aAAA,EAAc;AAC3B,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,YAAA,CAAa,UAAA,EAAW;AACxB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,YAAA,CAAa,SAAA,EAAU;AACvB,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,QAAA,CAAS,GAAA,EAAK,WAAW,SAAS,CAAA;AAElC,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,SAAA,EAAW,CAAC,EAAE,UAAA,EAAY,YAAW,KACnC,IAAA,CAAK,MAAA,CAAO,0BAA0B,CAAA,EAAG;AAAA,QACvC,CAAC,MAAA,CAAO,gCAAgC,CAAC,GAAG,UAAA;AAAA,QAC5C,CAAC,MAAA,CAAO,aAAa,CAAC,GAAG;AAAA,OAC1B,CAAA;AAAA,MAEF,GAAG;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,IAAA,CAAK,OAAO,0CAA0C,CAAC,KACpE,QACH;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionPanel.js","sources":["../../../../../../src/Accordion/src/AccordionPanel.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport { DisclosurePanel, DisclosurePanelProps } from 'react-aria-components';\nimport { useAccordionContext } from './AccordionContext';\nimport { customPaddingStyleProps } from './utils';\nimport { withTruthyZero as hasAllowedCustomSidePadding } from '@danske/sapphire-react';\nimport { DOMProps } from '@react-types/shared';\n\nexport interface AccordionPanelProps\n extends DOMProps,\n Pick<DisclosurePanelProps, 'children' | 'role'> {}\n\nexport const AccordionPanel = forwardRef(function AccordionPanel(\n { children, ...props }: AccordionPanelProps,\n ref: React.Ref<HTMLDivElement>\n): React.JSX.Element {\n const { sidePadding } = useAccordionContext();\n\n return (\n <DisclosurePanel\n ref={ref}\n {...filterDOMProps(props, { global: true })}\n className={clsx(styles['sapphire-accordion__item-content'])}\n style={{\n /**\n * useDisclosure hook from react-aria uses css variable --disclosure-panel-height to\n * animate the height of the panel.\n */\n height: 'var(--disclosure-panel-height)',\n }}\n {...props}\n >\n <div\n style={{\n ...(hasAllowedCustomSidePadding(sidePadding)\n ? customPaddingStyleProps(sidePadding)\n : {}),\n }}\n className={styles['sapphire-accordion__item-content-inner']}\n >\n {children}\n </div>\n </DisclosurePanel>\n );\n});\n"],"names":["AccordionPanel","hasAllowedCustomSidePadding"],"mappings":";;;;;;;;;AAcO,MAAM,cAAA,GAAiB,WAAW,SAASA,eAAAA,CAChD,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,EACrB,GAAA,EACmB;AACnB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAE5C,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC1C,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,kCAAkC,CAAC,CAAA;AAAA,MAC1D,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,QAKL,MAAA,EAAQ;AAAA,OACV;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,GAAIC,cAAA,CAA4B,WAAW,IACvC,uBAAA,CAAwB,WAAW,IACnC;AAAC,SACP;AAAA,QACA,SAAA,EAAW,OAAO,wCAAwC;AAAA,OAAA;AAAA,MAEzD;AAAA;AACH,GACF;AAEJ,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../src/Accordion/src/utils.ts"],"sourcesContent":["export const customPaddingStyleProps = (sidePadding: number | string) => ({\n paddingLeft:\n typeof sidePadding === 'string' ? sidePadding : `${sidePadding}px`,\n paddingRight:\n typeof sidePadding === 'string' ? sidePadding : `${sidePadding}px`,\n});\n"],"names":[],"mappings":"AAAO,MAAM,uBAAA,GAA0B,CAAC,WAAA,MAAkC;AAAA,EACxE,aACE,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc,GAAG,WAAW,CAAA,EAAA,CAAA;AAAA,EAChE,cACE,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc,GAAG,WAAW,CAAA,EAAA;AAClE,CAAA;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","sources":["../../../../../../src/Alert/src/Alert.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n SapphireStyleProps,\n useThemeCheck,\n useSapphireStyleProps,\n Typography,\n Icon,\n GlobalDomAttributes,\n} from '@danske/sapphire-react';\nimport {\n CheckmarkOutline,\n Information,\n Warning,\n Error,\n} from '@danske/sapphire-icons/react';\nimport alertStyles from '@danske/sapphire-css/components/alert/alert.module.css';\nimport { clsx } from 'clsx';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\n\nexport interface SapphireAlertProps\n extends GlobalDomAttributes,\n SapphireStyleProps {\n /**\n * The content of the alert.\n */\n children?: ReactNode;\n\n /**\n * The title of the alert.\n */\n title?: ReactNode;\n\n /**\n * @default 'info'\n */\n variant?: 'info' | 'positive' | 'negative' | 'warning';\n}\n\nexport function Alert({\n children,\n title,\n variant = 'info',\n ...props\n}: SapphireAlertProps): React.JSX.Element {\n useThemeCheck();\n const {\n styleProps: { style, className },\n } = useSapphireStyleProps(props);\n\n const getIcon = (variant: string) => {\n switch (variant) {\n case 'warning':\n return <Warning />;\n case 'positive':\n return <CheckmarkOutline />;\n case 'negative':\n return <Error />;\n default:\n return <Information />;\n }\n };\n\n return (\n <div\n {...filterDOMProps(props, { global: true })}\n className={clsx(\n alertStyles['sapphire-alert'],\n {\n [alertStyles['sapphire-alert--positive']]: variant === 'positive',\n [alertStyles['sapphire-alert--negative']]: variant === 'negative',\n [alertStyles['sapphire-alert--warning']]: variant === 'warning',\n },\n className\n )}\n style={style}\n role=\"alert\"\n >\n <span className={alertStyles['sapphire-alert__icon']}>\n <Icon size=\"sm\">{getIcon(variant)}</Icon>\n </span>\n <div className={alertStyles['sapphire-alert__title']}>\n <Typography.Body size=\"sm\" isSemibold>\n {title}\n </Typography.Body>\n </div>\n <div className={alertStyles['sapphire-alert__content']}>\n <Typography.Body elementType=\"section\" size=\"md\">\n {children}\n </Typography.Body>\n </div>\n </div>\n );\n}\n"],"names":["variant"],"mappings":";;;;;;;AAsCO,SAAS,KAAA,CAAM;AAAA,EACpB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,GAAG;AACL,CAAA,EAA0C;AACxC,EAAA,aAAA,EAAc;AACd,EAAA,MAAM;AAAA,IACJ,UAAA,EAAY,EAAE,KAAA,EAAO,SAAA;AAAU,GACjC,GAAI,sBAAsB,KAAK,CAAA;AAE/B,EAAA,MAAM,OAAA,GAAU,CAACA,QAAAA,KAAoB;AACnC,IAAA,QAAQA,QAAAA;AAAS,MACf,KAAK,SAAA;AACH,QAAA,2CAAQ,OAAA,EAAA,IAAQ,CAAA;AAAA,MAClB,KAAK,UAAA;AACH,QAAA,2CAAQ,gBAAA,EAAA,IAAiB,CAAA;AAAA,MAC3B,KAAK,UAAA;AACH,QAAA,2CAAQ,KAAA,EAAA,IAAM,CAAA;AAAA,MAChB;AACE,QAAA,2CAAQ,WAAA,EAAA,IAAY,CAAA;AAAA;AACxB,EACF,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC1C,SAAA,EAAW,IAAA;AAAA,QACT,YAAY,gBAAgB,CAAA;AAAA,QAC5B;AAAA,UACE,CAAC,WAAA,CAAY,0BAA0B,CAAC,GAAG,OAAA,KAAY,UAAA;AAAA,UACvD,CAAC,WAAA,CAAY,0BAA0B,CAAC,GAAG,OAAA,KAAY,UAAA;AAAA,UACvD,CAAC,WAAA,CAAY,yBAAyB,CAAC,GAAG,OAAA,KAAY;AAAA,SACxD;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA;AAAA,MACA,IAAA,EAAK;AAAA,KAAA;AAAA,oBAEL,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,WAAA,CAAY,sBAAsB,CAAA,EAAA,kBACjD,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAA,EAAM,OAAA,CAAQ,OAAO,CAAE,CACpC,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAA,CAAY,uBAAuB,CAAA,EAAA,kBACjD,KAAA,CAAA,aAAA,CAAC,UAAA,CAAW,IAAA,EAAX,EAAgB,IAAA,EAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAA,EAClC,KACH,CACF,CAAA;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,WAAA,CAAY,yBAAyB,CAAA,EAAA,kBACnD,KAAA,CAAA,aAAA,CAAC,UAAA,CAAW,IAAA,EAAX,EAAgB,WAAA,EAAY,SAAA,EAAU,IAAA,EAAK,IAAA,EAAA,EACzC,QACH,CACF;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Amount.js","sources":["../../../../../../src/Amount/src/Amount.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n useThemeCheck,\n SapphireStyleProps,\n GlobalDomAttributes,\n Typography,\n TypographyBodyProps,\n useSapphireStyleProps,\n} from '@danske/sapphire-react';\nimport React from 'react';\nimport { useLocale } from 'react-aria/I18nProvider';\nimport { useGroupAmount } from './useGroupAmount';\nimport styles from '@danske/sapphire-css/components/amount/amount.module.css';\n\n/**\n * Format options for currency amounts.\n * The style is always 'currency', so only currency-related options are exposed.\n */\nexport type CurrencyFormatOptions = Pick<\n Intl.NumberFormatOptions,\n | 'currency'\n | 'currencyDisplay'\n | 'currencySign'\n | 'signDisplay'\n | 'minimumFractionDigits'\n | 'maximumFractionDigits'\n | 'minimumSignificantDigits'\n | 'maximumSignificantDigits'\n | 'useGrouping'\n | 'notation'\n>;\n\nexport type AmountProps = {\n /**\n * When displaying amounts, readability and visual hierarchy are key. Use medium weight for primary emphasis to highlight amounts or regular weight for secondary emphasis.\n *\n * @default 'regular'\n */\n emphasis?: 'primary' | 'regular';\n /**\n * The variant of the Amount component. `positive` shows a green color, and should be used for amounts greater than zero.\n *\n * @default 'neutal'\n */\n variant?: 'neutal' | 'positive';\n /**\n * The amount value to be formatted and displayed.\n *\n * If displaying the sign is a requirement, ensure the value is a string that starts with '+' or '-'.\n * Alternatively, you can use the `signDisplay` option in `formatOptions` to control the display of the sign for numeric values.\n */\n value: string | number;\n /** Currency formatting options */\n formatOptions?: CurrencyFormatOptions;\n} & Pick<TypographyBodyProps, 'size'> &\n SapphireStyleProps &\n GlobalDomAttributes;\n\nexport const Amount = ({\n emphasis = 'regular',\n variant,\n formatOptions,\n value,\n size,\n ...props\n}: AmountProps): JSX.Element => {\n useThemeCheck();\n const { styleProps, filteredProps } = useSapphireStyleProps(props);\n const { locale } = useLocale();\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n style: formatOptions?.currency ? 'currency' : undefined,\n /**\n * Always show the sign if the value starts with '+' or '-'.\n */\n signDisplay:\n formatOptions?.signDisplay || String(value).startsWith('+')\n ? 'always'\n : 'auto',\n minimumFractionDigits: 2,\n ...formatOptions,\n }),\n [locale, formatOptions, value]\n );\n\n const { formattedValue, groupedParts } = useGroupAmount(value, formatter);\n\n return (\n <span\n style={styleProps.style}\n className={styles['sapphire-amount']}\n {...filteredProps}\n aria-label={formattedValue}\n >\n {groupedParts.map((part, index) => (\n <Typography.Body\n elementType=\"span\"\n key={index}\n color={variant === 'positive' ? 'positive' : 'primary'}\n isSemibold={emphasis === 'primary' ? true : false}\n size={size}\n >\n {part.value}\n </Typography.Body>\n ))}\n </span>\n );\n};\n"],"names":[],"mappings":";;;;;;AA0DO,MAAM,SAAS,CAAC;AAAA,EACrB,QAAA,GAAW,SAAA;AAAA,EACX,OAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAgC;AAC9B,EAAA,aAAA,EAAc;AACd,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,sBAAsB,KAAK,CAAA;AACjE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAE7B,EAAA,MAAM,SAAA,GAAY,OAAA;AAAA,IAChB,MACE,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,MAC5B,KAAA,EAAO,aAAA,EAAe,QAAA,GAAW,UAAA,GAAa,MAAA;AAAA;AAAA;AAAA;AAAA,MAI9C,WAAA,EACE,eAAe,WAAA,IAAe,MAAA,CAAO,KAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,GACtD,QAAA,GACA,MAAA;AAAA,MACN,qBAAA,EAAuB,CAAA;AAAA,MACvB,GAAG;AAAA,KACJ,CAAA;AAAA,IACH,CAAC,MAAA,EAAQ,aAAA,EAAe,KAAK;AAAA,GAC/B;AAEA,EAAA,MAAM,EAAE,cAAA,EAAgB,YAAA,EAAa,GAAI,cAAA,CAAe,OAAO,SAAS,CAAA;AAExE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,SAAA,EAAW,OAAO,iBAAiB,CAAA;AAAA,MAClC,GAAG,aAAA;AAAA,MACJ,YAAA,EAAY;AAAA,KAAA;AAAA,IAEX,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACvB,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA,CAAW,IAAA;AAAA,MAAX;AAAA,QACC,WAAA,EAAY,MAAA;AAAA,QACZ,GAAA,EAAK,KAAA;AAAA,QACL,KAAA,EAAO,OAAA,KAAY,UAAA,GAAa,UAAA,GAAa,SAAA;AAAA,QAC7C,UAAA,EAAY,QAAA,KAAa,SAAA,GAAY,IAAA,GAAO,KAAA;AAAA,QAC5C;AAAA,OAAA;AAAA,MAEC,IAAA,CAAK;AAAA,KAET;AAAA,GACH;AAEJ;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGroupAmount.js","sources":["../../../../../../src/Amount/src/useGroupAmount.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nexport interface GroupedPart {\n type: 'sign' | 'number' | 'currency';\n value: string;\n}\n\n/**\n * Process the value that is being provided and format it using the provided formatter.\n * It returns both the formatted value as a string and the grouped parts for further processing.\n * It's useful for keeping track of diffrent parts of the formatted amount and where currency symbols are located.\n *\n * Example: value = \"+30000\", formatter for DKK currency\n * formattedValue = \"+DKK 30,000.00\"\n * groupedParts = [\n * { type: 'sign', value: '+' },\n * { type: 'currency', value: 'DKK' },\n * { type: 'number', value: '30,000.00' }\n * ]\n */\nexport const useGroupAmount = (\n value: string | number,\n formatter: Intl.NumberFormat\n) => {\n const numberValue = useMemo(() => {\n const parsed = Number(value);\n return isNaN(parsed) ? 0 : parsed;\n }, [value]);\n\n const groupedParts = useMemo(() => {\n const parts = formatter.formatToParts(numberValue);\n const result: GroupedPart[] = [];\n let currentNumber = '';\n\n parts.forEach((part) => {\n if (part.type === 'plusSign' || part.type === 'minusSign') {\n result.push({ type: 'sign', value: part.value });\n } else if (part.type === 'currency') {\n if (currentNumber) {\n result.push({ type: 'number', value: currentNumber });\n currentNumber = '';\n }\n result.push({ type: 'currency', value: part.value });\n } else if (part.type !== 'literal') {\n currentNumber += part.value;\n }\n });\n\n if (currentNumber) {\n result.push({ type: 'number', value: currentNumber });\n }\n\n return result;\n }, [numberValue, formatter]);\n\n const formattedValue = useMemo(\n () => groupedParts.map((part) => part.value).join(''),\n [groupedParts]\n );\n\n return { formattedValue, groupedParts };\n};\n"],"names":[],"mappings":";;AAoBO,MAAM,cAAA,GAAiB,CAC5B,KAAA,EACA,SAAA,KACG;AACH,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,IAAA,OAAO,KAAA,CAAM,MAAM,CAAA,GAAI,CAAA,GAAI,MAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,aAAA,CAAc,WAAW,CAAA;AACjD,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,IAAI,aAAA,GAAgB,EAAA;AAEpB,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,SAAS,WAAA,EAAa;AACzD,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MACjD,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,UAAA,EAAY;AACnC,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,eAAe,CAAA;AACpD,UAAA,aAAA,GAAgB,EAAA;AAAA,QAClB;AACA,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,YAAY,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MACrD,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW;AAClC,QAAA,aAAA,IAAiB,IAAA,CAAK,KAAA;AAAA,MACxB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,eAAe,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,WAAA,EAAa,SAAS,CAAC,CAAA;AAE3B,EAAA,MAAM,cAAA,GAAiB,OAAA;AAAA,IACrB,MAAM,aAAa,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,IACpD,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,OAAO,EAAE,gBAAgB,YAAA,EAAa;AACxC;;;;"}
@@ -1,6 +1,6 @@
1
- var da$3 = {
1
+ var da$4 = {
2
2
  "listbox-suggestions": "Forslag"
3
3
  };
4
4
 
5
- export { da$3 as default };
5
+ export { da$4 as default };
6
6
  //# sourceMappingURL=da-DK.json.js.map
@@ -1,6 +1,6 @@
1
- var de$3 = {
1
+ var de$4 = {
2
2
  "listbox-suggestions": "Vorschläge"
3
3
  };
4
4
 
5
- export { de$3 as default };
5
+ export { de$4 as default };
6
6
  //# sourceMappingURL=de-DE.json.js.map
@@ -1,6 +1,6 @@
1
- var en$3 = {
1
+ var en$4 = {
2
2
  "listbox-suggestions": "Suggestions"
3
3
  };
4
4
 
5
- export { en$3 as default };
5
+ export { en$4 as default };
6
6
  //# sourceMappingURL=en-US.json.js.map
@@ -1,6 +1,6 @@
1
- var fi$3 = {
1
+ var fi$4 = {
2
2
  "listbox-suggestions": "Ehdotukset"
3
3
  };
4
4
 
5
- export { fi$3 as default };
5
+ export { fi$4 as default };
6
6
  //# sourceMappingURL=fi-FI.json.js.map
@@ -0,0 +1,20 @@
1
+ import da from './da-DK.json.js';
2
+ import en from './en-US.json.js';
3
+ import de from './de-DE.json.js';
4
+ import fi from './fi-FI.json.js';
5
+ import no from './nb-NO.json.js';
6
+ import pl from './pl-PL.json.js';
7
+ import se from './sv-SE.json.js';
8
+
9
+ var intlMessages$4 = {
10
+ "da-DK": da,
11
+ "en-US": en,
12
+ "de-DE": de,
13
+ "fi-FI": fi,
14
+ "nb-NO": no,
15
+ "pl-PL": pl,
16
+ "sv-SE": se
17
+ };
18
+
19
+ export { intlMessages$4 as default };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/Autocomplete/i18n/index.ts"],"sourcesContent":["import da from './da-DK.json';\nimport en from './en-US.json';\nimport de from './de-DE.json';\nimport fi from './fi-FI.json';\nimport no from './nb-NO.json';\nimport pl from './pl-PL.json';\nimport se from './sv-SE.json';\n\nexport default {\n 'da-DK': da,\n 'en-US': en,\n 'de-DE': de,\n 'fi-FI': fi,\n 'nb-NO': no,\n 'pl-PL': pl,\n 'sv-SE': se,\n};\n"],"names":[],"mappings":";;;;;;;;AAQA,qBAAe;AAAA,EACb,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
- var no$3 = {
1
+ var no$4 = {
2
2
  "listbox-suggestions": "Forslag"
3
3
  };
4
4
 
5
- export { no$3 as default };
5
+ export { no$4 as default };
6
6
  //# sourceMappingURL=nb-NO.json.js.map
@@ -1,6 +1,6 @@
1
- var pl$3 = {
1
+ var pl$4 = {
2
2
  "listbox-suggestions": "Sugestie"
3
3
  };
4
4
 
5
- export { pl$3 as default };
5
+ export { pl$4 as default };
6
6
  //# sourceMappingURL=pl-PL.json.js.map
@@ -1,6 +1,6 @@
1
- var se$3 = {
1
+ var se$4 = {
2
2
  "listbox-suggestions": "Förslag"
3
3
  };
4
4
 
5
- export { se$3 as default };
5
+ export { se$4 as default };
6
6
  //# sourceMappingURL=sv-SE.json.js.map