@danske/sapphire-react-lab 0.106.2 → 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 +553 -10
  186. package/package.json +8 -8
  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,162 @@
1
+ import React, { forwardRef, useState, useLayoutEffect, useCallback } from 'react';
2
+ import clsx from 'clsx';
3
+ import { useListBox } from 'react-aria/useListBox';
4
+ import { VirtualizerItem } from 'react-aria/private/virtualizer/VirtualizerItem';
5
+ import { useObjectRef } from 'react-aria/useObjectRef';
6
+ import { mergeProps } from 'react-aria/mergeProps';
7
+ import styles from '@danske/sapphire-css/components/listbox/listbox.module.css';
8
+ import { ListBoxContext } from './ListBoxContext.js';
9
+ import { ListBoxItemSkeleton } from './ListBoxItemSkeleton.js';
10
+ import { ListBoxOption } from './ListBoxOption.js';
11
+ import { ListBoxSection } from './ListBoxSection.js';
12
+ import { useListWithLoadingStateLayout } from '../../utils/virtualization/useListWithLoadingStateLayout.js';
13
+ import { VirtualizerWithLoadingSkeleton } from '../../utils/virtualization/VirtualizerWithLoadingSkeleton.js';
14
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
15
+ import '../../utils/useSapphireTextStyleProps.js';
16
+ import '../../Popover/src/Popover.js';
17
+ import '@danske/sapphire-react-context';
18
+ import { useScrollCheck } from '../../utils/useScrollCheck.js';
19
+ import 'react-aria/useButton';
20
+ import { useCollectionFocusProxy } from '../../utils/useCollectionFocusProxy.js';
21
+ import { tokens } from '@danske/sapphire-css/themes';
22
+ import { ListBoxEmptyState } from './ListBoxEmptyState.js';
23
+ import { useMessageFormatter } from '@react-aria/i18n';
24
+ import intlMessages from '../i18n/index.js';
25
+
26
+ const _StatelessListBox = ({
27
+ loadingState,
28
+ loadingSkeletonRowsCount = 4,
29
+ state,
30
+ renderLoadingSkeleton = (index) => /* @__PURE__ */ React.createElement(ListBoxItemSkeleton, { key: index, index }),
31
+ onLoadMore,
32
+ hasScrollDividers = false,
33
+ connectedInputRef,
34
+ shouldUseVirtualFocus = Boolean(connectedInputRef),
35
+ disableSelectedStyles = false,
36
+ negativeSideMargin,
37
+ emptyState: emptyStateProp,
38
+ ...otherProps
39
+ }, ref) => {
40
+ const { styleProps } = useSapphireStyleProps(otherProps);
41
+ const listBoxRef = useObjectRef(ref);
42
+ const { listBoxProps } = useListBox(
43
+ {
44
+ ...otherProps,
45
+ shouldUseVirtualFocus,
46
+ isVirtualized: true
47
+ },
48
+ state,
49
+ listBoxRef
50
+ );
51
+ const formatMessage = useMessageFormatter(intlMessages);
52
+ const emptyState = emptyStateProp === null ? null : /* @__PURE__ */ React.createElement(ListBoxEmptyState, null, emptyStateProp || formatMessage("empty"));
53
+ const layout = useListWithLoadingStateLayout({
54
+ loadingState,
55
+ loadingSkeletonRowsCount,
56
+ sectionDividerHeight: 5,
57
+ headingHeight: 34
58
+ });
59
+ useCollectionFocusProxy({
60
+ state,
61
+ focusProxyRef: connectedInputRef,
62
+ collectionRef: listBoxRef
63
+ });
64
+ const { scrollCheckProps, isScrolled, isScrollable } = useScrollCheck(listBoxRef);
65
+ const constrainWidth = styleProps.style?.maxWidth !== void 0 || styleProps.style?.width !== void 0;
66
+ const [containerMaxWidth, setContainerMaxWidth] = useState(void 0);
67
+ useLayoutEffect(() => {
68
+ setContainerMaxWidth(
69
+ constrainWidth && listBoxRef.current ? listBoxRef.current.offsetWidth : void 0
70
+ );
71
+ }, [constrainWidth]);
72
+ const renderWrapper = useCallback(
73
+ (parent, reusableView, children, renderChildren) => {
74
+ if (reusableView.viewType === "section" && reusableView.content) {
75
+ return /* @__PURE__ */ React.createElement(
76
+ ListBoxSection,
77
+ {
78
+ key: reusableView.key,
79
+ item: reusableView.content,
80
+ layoutInfo: reusableView.layoutInfo,
81
+ virtualizer: reusableView.virtualizer,
82
+ childrenViews: children
83
+ },
84
+ renderChildren(children.filter((c) => c.viewType === "item"))
85
+ );
86
+ }
87
+ return /* @__PURE__ */ React.createElement(
88
+ VirtualizerItem,
89
+ {
90
+ key: reusableView.key,
91
+ layoutInfo: reusableView.layoutInfo,
92
+ virtualizer: reusableView.virtualizer,
93
+ parent: parent?.layoutInfo
94
+ },
95
+ reusableView.rendered
96
+ );
97
+ },
98
+ []
99
+ );
100
+ return /* @__PURE__ */ React.createElement(
101
+ ListBoxContext.Provider,
102
+ {
103
+ value: {
104
+ state,
105
+ shouldUseVirtualFocus,
106
+ disableSelectedStyles,
107
+ containerMaxWidth
108
+ }
109
+ },
110
+ /* @__PURE__ */ React.createElement(
111
+ VirtualizerWithLoadingSkeleton,
112
+ {
113
+ ...mergeProps(listBoxProps, scrollCheckProps),
114
+ onLoadMore,
115
+ scrollDirection: "vertical",
116
+ autoFocus: Boolean(otherProps.autoFocus),
117
+ layout,
118
+ collection: state.collection,
119
+ persistedKeys: new Set(
120
+ [
121
+ ...state.selectionManager.selectedKeys,
122
+ state.selectionManager.focusedKey
123
+ ].filter((key) => key !== null)
124
+ ),
125
+ className: clsx(
126
+ styles["sapphire-listbox"],
127
+ {
128
+ [styles["sapphire-listbox--selection"]]: !disableSelectedStyles
129
+ },
130
+ styleProps.className
131
+ ),
132
+ style: {
133
+ ...styleProps.style,
134
+ padding: void 0,
135
+ ...negativeSideMargin ? {
136
+ marginLeft: typeof negativeSideMargin === "string" ? `calc(${negativeSideMargin} * -1)` : `-${negativeSideMargin}px`,
137
+ marginRight: typeof negativeSideMargin === "string" ? `calc(${negativeSideMargin} * -1)` : `-${negativeSideMargin}px`
138
+ } : {},
139
+ // Should be moved to css when we are a little more sure about what we want, and specially
140
+ // when/if we need the same feature in Sapphire Angular.
141
+ borderTop: hasScrollDividers && isScrolled ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}` : "",
142
+ borderBottom: hasScrollDividers && isScrollable ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}` : ""
143
+ },
144
+ renderWrapper,
145
+ renderLoadingSkeleton,
146
+ loadingSkeletonRowsCount,
147
+ emptyState,
148
+ ref: listBoxRef,
149
+ "aria-busy": loadingState && true
150
+ },
151
+ (kind, item) => {
152
+ const node = item;
153
+ if (kind === "item") {
154
+ return /* @__PURE__ */ React.createElement(ListBoxOption, { key: node.key, item: node });
155
+ }
156
+ return null;
157
+ }
158
+ )
159
+ );
160
+ };
161
+ forwardRef(_StatelessListBox);
162
+ //# sourceMappingURL=StatelessListBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatelessListBox.js","sources":["../../../../../../../core/src/ListBox/src/StatelessListBox.tsx"],"sourcesContent":["import React, {\n forwardRef,\n ForwardedRef,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useLayoutEffect,\n useState,\n RefObject,\n} from 'react';\nimport clsx from 'clsx';\nimport { AriaListBoxOptions, useListBox } from 'react-aria/useListBox';\nimport { VirtualizerItem } from 'react-aria/private/virtualizer/VirtualizerItem';\nimport { useObjectRef } from 'react-aria/useObjectRef';\nimport { mergeProps } from 'react-aria/mergeProps';\nimport { ListState } from 'react-stately/useListState';\nimport { ReusableView } from 'react-stately/useVirtualizerState';\nimport { Node } from '@react-types/shared';\nimport { AriaListBoxProps } from 'react-aria/useListBox';\nimport styles from '@danske/sapphire-css/components/listbox/listbox.module.css';\nimport { ListBoxContext } from './ListBoxContext';\nimport { ListBoxItemSkeleton } from './ListBoxItemSkeleton';\nimport { ListBoxOption } from './ListBoxOption';\nimport { ListBoxSection } from './ListBoxSection';\nimport { useListWithLoadingStateLayout } from '../../utils/virtualization/useListWithLoadingStateLayout';\nimport { VirtualizerWithLoadingSkeleton } from '../../utils/virtualization/VirtualizerWithLoadingSkeleton';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useScrollCheck,\n} from '../../utils';\nimport { useCollectionFocusProxy } from '../../utils/useCollectionFocusProxy';\nimport { tokens } from '@danske/sapphire-css/themes';\nimport {\n CollectionBaseKeys,\n GlobalDomAttributes,\n MultipleSelectionKeys,\n} from '../../utils/types';\nimport { ListBoxEmptyState } from './ListBoxEmptyState';\nimport { useMessageFormatter } from '@react-aria/i18n';\nimport intlMessages from '../i18n';\n\n/**\n * Component not exported externally which can render and manage the UI of the\n * listbox.\n * The `state` needs to be provided.\n */\nexport type StatelessListBoxProps<T> = Pick<\n AriaListBoxOptions<T>,\n | 'shouldUseVirtualFocus'\n | 'onAction'\n | 'autoFocus'\n | MultipleSelectionKeys\n | CollectionBaseKeys\n | 'id'\n | 'selectionMode'\n> &\n Pick<AriaListBoxProps<T>, 'children'> &\n SapphireStyleProps &\n GlobalDomAttributes & {\n loadingState?: 'loading';\n loadingSkeletonRowsCount?: number;\n /**\n * Callback called when the user scrolled to the bottom of the listbox.\n * Useful when implementing infinite scroll.\n */\n onLoadMore?: () => void;\n disableSelectedStyles?: boolean;\n state: ListState<T>;\n renderLoadingSkeleton?: (index: number) => React.ReactNode;\n\n /**\n * Renders a message indicating the list is empty.\n * Default is a simple \"No results\" (in given language) message.\n * Passing `null` will hide the empty state message.\n */\n emptyState?: React.ReactNode;\n\n // TODO(v5): remove. Check usages in Sapphire Insights before writing a codemod.\n // The usage is likely to be very limited if any.\n /**\n * @deprecated use marginX instead. negativeSideMargin={x} => marginX={`calc(-1 * ${x})`}\n */\n negativeSideMargin?: number | string;\n\n /**\n * Allows for connecting a (search) input to the ListBox, so that the ListBox\n * items can be navigated and selected by keyboard when the input is focused.\n */\n connectedInputRef?: RefObject<HTMLElement>;\n\n /**\n * Whether top and bottom dividers should be shown to mark ListBox's scrollable area.\n * The top divider will be shown when the list is **scrolled** down,\n * and the bottom divider will be shown when the list is **scrollable**.\n */\n hasScrollDividers?: boolean;\n\n /**\n * Whether the listbox items should use virtual focus instead of being focused directly.\n *\n * @default `true` if `connectedInputRef` is provided, `false` otherwise\n */\n shouldUseVirtualFocus?: boolean;\n };\n\nconst _StatelessListBox = <T extends object>(\n {\n loadingState,\n loadingSkeletonRowsCount = 4,\n state,\n renderLoadingSkeleton = (index: number) => (\n <ListBoxItemSkeleton key={index} index={index} />\n ),\n onLoadMore,\n hasScrollDividers = false,\n connectedInputRef,\n shouldUseVirtualFocus = Boolean(connectedInputRef),\n disableSelectedStyles = false,\n negativeSideMargin,\n emptyState: emptyStateProp,\n ...otherProps\n }: StatelessListBoxProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n): JSX.Element => {\n const { styleProps } = useSapphireStyleProps(otherProps);\n\n const listBoxRef = useObjectRef(ref);\n const { listBoxProps } = useListBox(\n {\n ...otherProps,\n shouldUseVirtualFocus,\n isVirtualized: true,\n },\n state,\n listBoxRef\n );\n\n const formatMessage = useMessageFormatter(intlMessages);\n\n const emptyState =\n emptyStateProp === null ? null : (\n <ListBoxEmptyState>\n {emptyStateProp || formatMessage('empty')}\n </ListBoxEmptyState>\n );\n\n const layout = useListWithLoadingStateLayout<T>({\n loadingState,\n loadingSkeletonRowsCount,\n sectionDividerHeight: 5,\n headingHeight: 34,\n });\n\n useCollectionFocusProxy({\n state,\n focusProxyRef: connectedInputRef,\n collectionRef: listBoxRef,\n });\n\n const { scrollCheckProps, isScrolled, isScrollable } =\n useScrollCheck(listBoxRef);\n\n const constrainWidth =\n styleProps.style?.maxWidth !== undefined ||\n styleProps.style?.width !== undefined;\n const [containerMaxWidth, setContainerMaxWidth] = useState<\n number | undefined\n >(undefined);\n useLayoutEffect(() => {\n setContainerMaxWidth(\n constrainWidth && listBoxRef.current\n ? listBoxRef.current.offsetWidth\n : undefined\n );\n }, [constrainWidth]);\n\n type View = ReusableView<Node<T>, ReactNode>;\n\n const renderWrapper = useCallback(\n (\n parent: View | null,\n reusableView: View,\n children: View[],\n renderChildren: (views: View[]) => ReactElement[]\n ) => {\n if (reusableView.viewType === 'section' && reusableView.content) {\n return (\n <ListBoxSection\n key={reusableView.key}\n item={reusableView.content!}\n layoutInfo={reusableView.layoutInfo!}\n virtualizer={reusableView.virtualizer}\n childrenViews={children}\n >\n {renderChildren(children.filter((c) => c.viewType === 'item'))}\n </ListBoxSection>\n );\n }\n\n return (\n <VirtualizerItem\n key={reusableView.key}\n layoutInfo={reusableView.layoutInfo!}\n virtualizer={reusableView.virtualizer}\n parent={parent?.layoutInfo}\n >\n {reusableView.rendered}\n </VirtualizerItem>\n );\n },\n []\n );\n\n return (\n <ListBoxContext.Provider\n value={{\n state,\n shouldUseVirtualFocus,\n disableSelectedStyles,\n containerMaxWidth,\n }}\n >\n <VirtualizerWithLoadingSkeleton\n {...mergeProps(listBoxProps, scrollCheckProps)}\n onLoadMore={onLoadMore}\n scrollDirection=\"vertical\"\n autoFocus={Boolean(otherProps.autoFocus)}\n layout={layout}\n collection={state.collection}\n persistedKeys={\n new Set(\n [\n ...state.selectionManager.selectedKeys,\n state.selectionManager.focusedKey,\n ].filter((key): key is React.Key => key !== null)\n )\n }\n className={clsx(\n styles['sapphire-listbox'],\n {\n [styles['sapphire-listbox--selection']]: !disableSelectedStyles,\n },\n styleProps.className\n )}\n style={{\n ...styleProps.style,\n padding:\n undefined /* virtualizer tries to take control of padding. this stops that */,\n ...(negativeSideMargin\n ? {\n marginLeft:\n typeof negativeSideMargin === 'string'\n ? `calc(${negativeSideMargin} * -1)`\n : `-${negativeSideMargin}px`,\n marginRight:\n typeof negativeSideMargin === 'string'\n ? `calc(${negativeSideMargin} * -1)`\n : `-${negativeSideMargin}px`,\n }\n : {}),\n // Should be moved to css when we are a little more sure about what we want, and specially\n // when/if we need the same feature in Sapphire Angular.\n borderTop:\n hasScrollDividers && isScrolled\n ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}`\n : '',\n borderBottom:\n hasScrollDividers && isScrollable\n ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}`\n : '',\n }}\n renderWrapper={renderWrapper as any}\n renderLoadingSkeleton={renderLoadingSkeleton}\n loadingSkeletonRowsCount={loadingSkeletonRowsCount}\n emptyState={emptyState}\n ref={listBoxRef}\n aria-busy={loadingState && true}\n >\n {(kind, item) => {\n const node = item as Node<T>;\n if (kind === 'item') {\n return <ListBoxOption key={node.key} item={node} />;\n }\n return null;\n }}\n </VirtualizerWithLoadingSkeleton>\n </ListBoxContext.Provider>\n );\n};\n\nexport const StatelessListBox = forwardRef(_StatelessListBox) as <\n T extends object\n>(\n props: StatelessListBoxProps<T> & { ref?: Ref<HTMLUListElement> }\n) => React.ReactElement;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ const PaginationContext = React.createContext({
4
+ scrollableRef: void 0
5
+ });
6
+
7
+ export { PaginationContext };
8
+ //# sourceMappingURL=usePaginationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePaginationContext.js","sources":["../../../../../../../core/src/Pagination/src/usePaginationContext.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface PaginationContextValue {\n scrollableRef?: React.RefObject<HTMLElement>;\n}\n\nexport const PaginationContext = React.createContext<PaginationContextValue>({\n scrollableRef: undefined,\n});\nexport const usePaginationContext = (): PaginationContextValue => {\n return React.useContext(PaginationContext);\n};\n"],"names":[],"mappings":";;AAMO,MAAM,iBAAA,GAAoB,MAAM,aAAA,CAAsC;AAAA,EAC3E,aAAA,EAAe;AACjB,CAAC;;;;"}
@@ -0,0 +1,62 @@
1
+ import React, { forwardRef, useEffect } from 'react';
2
+ import { Popover, OverlayTriggerStateContext } from 'react-aria-components';
3
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
4
+ import clsx from 'clsx';
5
+ import popoverStyles from '@danske/sapphire-css/components/popover/popover.module.css';
6
+ import { FocusScope } from 'react-aria/FocusScope';
7
+ import { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside';
8
+ import { useObjectRef } from 'react-aria/useObjectRef';
9
+
10
+ forwardRef(function Popover2({
11
+ children,
12
+ padded,
13
+ defaultMaxWidth,
14
+ maxHeight,
15
+ state,
16
+ restoreFocus = false,
17
+ ...props
18
+ }, forwardedRef) {
19
+ const ref = useObjectRef(forwardedRef);
20
+ const { styleProps } = useSapphireStyleProps({ ...props, maxHeight });
21
+ useEffect(() => {
22
+ if (state && state.isOpen && props.isNonModal) {
23
+ return ariaHideOutside([
24
+ props.triggerRef?.current,
25
+ ref?.current
26
+ ]);
27
+ }
28
+ }, [state?.isOpen, props.isNonModal, ref, props.triggerRef]);
29
+ const popover = /* @__PURE__ */ React.createElement(
30
+ Popover,
31
+ {
32
+ ...props,
33
+ ref,
34
+ style: styleProps.style,
35
+ className: clsx(styleProps.className, popoverStyles["sapphire-popover"], {
36
+ [popoverStyles["sapphire-popover--padded"]]: padded,
37
+ [popoverStyles["sapphire-popover--max-width"]]: defaultMaxWidth
38
+ })
39
+ },
40
+ /* @__PURE__ */ React.createElement(
41
+ "div",
42
+ {
43
+ className: popoverStyles["sapphire-popover__content"],
44
+ role: "presentation"
45
+ },
46
+ /* @__PURE__ */ React.createElement(
47
+ FocusScope,
48
+ {
49
+ autoFocus: !props.isNonModal,
50
+ contain: !props.isNonModal,
51
+ restoreFocus
52
+ },
53
+ children
54
+ )
55
+ )
56
+ );
57
+ if (state) {
58
+ return /* @__PURE__ */ React.createElement(OverlayTriggerStateContext.Provider, { value: state }, popover);
59
+ }
60
+ return popover;
61
+ });
62
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","sources":["../../../../../../../core/src/Popover/src/Popover.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useEffect } from 'react';\nimport {\n OverlayTriggerState,\n Popover as AriaPopover,\n PopoverProps as RACPopoverProps,\n OverlayTriggerStateContext,\n} from 'react-aria-components';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n} from '../../utils/useSapphireStyleProps';\nimport clsx from 'clsx';\nimport popoverStyles from '@danske/sapphire-css/components/popover/popover.module.css';\nimport { AriaPositionPropsKeys, GlobalDomAttributes } from '../../utils/types';\nimport { FocusScope } from 'react-aria/FocusScope';\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside';\nimport { useObjectRef } from 'react-aria/useObjectRef';\n\nexport interface PopoverProps\n extends Pick<\n RACPopoverProps,\n | 'triggerRef'\n | 'isNonModal'\n | 'isKeyboardDismissDisabled'\n | 'shouldCloseOnInteractOutside'\n | AriaPositionPropsKeys\n >,\n SapphireStyleProps,\n GlobalDomAttributes {\n state?: OverlayTriggerState;\n children: React.ReactNode;\n /**\n * Whether to include the default popover padding.\n * @default false\n */\n padded?: boolean;\n /**\n * Whether it has a predefined size constraint. Useful when the popover is\n * used as a dropdown of selects, menus etc.\n * @default false\n */\n defaultMaxWidth?: boolean;\n\n restoreFocus?: boolean;\n}\n\n/**\n * Helper component intended for internal use within Sapphire in components\n * like Select and Menu.\n *\n * *Popovers* are containers used to display transient content such as menus,\n * options, additional actions etc.\n *\n * @internal\n */\nexport const Popover = forwardRef(function Popover(\n {\n children,\n padded,\n defaultMaxWidth,\n maxHeight,\n state,\n restoreFocus = false,\n ...props\n }: PopoverProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const ref = useObjectRef(forwardedRef);\n const { styleProps } = useSapphireStyleProps({ ...props, maxHeight });\n\n /*\n * We need this effect to fix an issue in react-aria's \"usePopover\". The\n * issue is that a popover which is not a modal (see prop \"isNonModal\") will\n * get aria-hidden if opened in an existing modal. See more here\n * https://github.com/adobe/react-spectrum/issues/4213\n *\n * This same hack is present in react-aria's useComboBox.\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/combobox/src/useComboBox.ts#L300-L304\n */\n useEffect(() => {\n if (state && state.isOpen && props.isNonModal) {\n // input to ariaHideOutside is what NOT to hide (and their ancestors).\n return ariaHideOutside([\n props.triggerRef?.current as Element,\n ref?.current as Element,\n ]);\n }\n }, [state?.isOpen, props.isNonModal, ref, props.triggerRef]);\n\n const popover = (\n <AriaPopover\n {...props}\n ref={ref}\n style={styleProps.style}\n className={clsx(styleProps.className, popoverStyles['sapphire-popover'], {\n [popoverStyles['sapphire-popover--padded']]: padded,\n [popoverStyles['sapphire-popover--max-width']]: defaultMaxWidth,\n })}\n >\n <div\n className={popoverStyles['sapphire-popover__content']}\n role=\"presentation\"\n >\n {/*\n * TODO UC-5016\n * The Overlay component (from react-aria-components) already wraps the\n * portal content in a FocusScope with restoreFocus and contain.\n * We only need autoFocus here to focus the first focusable child\n * (rather than the popover container itself, which is what RAC does by default).\n */}\n <FocusScope\n autoFocus={!props.isNonModal}\n contain={!props.isNonModal}\n restoreFocus={restoreFocus}\n >\n {children}\n </FocusScope>\n </div>\n </AriaPopover>\n );\n\n if (state) {\n return (\n <OverlayTriggerStateContext.Provider value={state}>\n {popover}\n </OverlayTriggerStateContext.Provider>\n );\n }\n\n return popover;\n});\n"],"names":["Popover","AriaPopover"],"mappings":";;;;;;;;;AAuDuB,UAAA,CAAW,SAASA,QAAAA,CACzC;AAAA,EACE,QAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,GAAG;AACL,CAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,aAAa,YAAY,CAAA;AACrC,EAAA,MAAM,EAAE,YAAW,GAAI,qBAAA,CAAsB,EAAE,GAAG,KAAA,EAAO,WAAW,CAAA;AAWpE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,UAAA,EAAY;AAE7C,MAAA,OAAO,eAAA,CAAgB;AAAA,QACrB,MAAM,UAAA,EAAY,OAAA;AAAA,QAClB,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAM,UAAA,EAAY,GAAA,EAAK,KAAA,CAAM,UAAU,CAAC,CAAA;AAE3D,EAAA,MAAM,OAAA,mBACJ,KAAA,CAAA,aAAA;AAAA,IAACC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA;AAAA,MACA,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,WAAW,IAAA,CAAK,UAAA,CAAW,SAAA,EAAW,aAAA,CAAc,kBAAkB,CAAA,EAAG;AAAA,QACvE,CAAC,aAAA,CAAc,0BAA0B,CAAC,GAAG,MAAA;AAAA,QAC7C,CAAC,aAAA,CAAc,6BAA6B,CAAC,GAAG;AAAA,OACjD;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,cAAc,2BAA2B,CAAA;AAAA,QACpD,IAAA,EAAK;AAAA,OAAA;AAAA,sBASL,KAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAC,KAAA,CAAM,UAAA;AAAA,UAClB,OAAA,EAAS,CAAC,KAAA,CAAM,UAAA;AAAA,UAChB;AAAA,SAAA;AAAA,QAEC;AAAA;AACH;AACF,GACF;AAGF,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,2CACG,0BAAA,CAA2B,QAAA,EAA3B,EAAoC,KAAA,EAAO,SACzC,OACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,OAAA;AACT,CAAC"}
@@ -0,0 +1,58 @@
1
+ import React, { forwardRef } from 'react';
2
+ import clsx from 'clsx';
3
+ import styles from '@danske/sapphire-css/components/radio/radio.module.css';
4
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
5
+ import '../../utils/useSapphireTextStyleProps.js';
6
+ import '../../ListBox/src/StatelessListBox.js';
7
+ import '../../Popover/src/Popover.js';
8
+ import '@danske/sapphire-react-context';
9
+ import 'react-aria/mergeProps';
10
+ import 'react-aria/useButton';
11
+ import { useContextProps, CheckboxContext } from 'react-aria-components';
12
+
13
+ const RadioBox = forwardRef(function RadioBox2(props, ref) {
14
+ [props, ref] = useContextProps(props, ref, CheckboxContext);
15
+ const {
16
+ elementType: CustomElement = "div",
17
+ size,
18
+ isDisabled,
19
+ isHovered,
20
+ isFocusVisible,
21
+ isPressed,
22
+ isSelected,
23
+ label,
24
+ role,
25
+ children,
26
+ slot,
27
+ ...otherProps
28
+ } = props;
29
+ const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);
30
+ const ariaProps = role === "checkbox" ? { role, "aria-checked": isSelected } : { role };
31
+ return /* @__PURE__ */ React.createElement(
32
+ CustomElement,
33
+ {
34
+ ...filteredProps,
35
+ ...ariaProps,
36
+ ref,
37
+ className: clsx(
38
+ styles["sapphire-radio"],
39
+ {
40
+ [styles["sapphire-radio--checked"]]: isSelected,
41
+ [styles["sapphire-radio--md"]]: size === "md",
42
+ [styles["is-hover"]]: isHovered,
43
+ [styles["is-focus"]]: isFocusVisible,
44
+ [styles["is-active"]]: isPressed
45
+ },
46
+ styles["js-focus"],
47
+ styleProps.className
48
+ ),
49
+ style: styleProps.style
50
+ },
51
+ children,
52
+ /* @__PURE__ */ React.createElement("span", { className: clsx(styles["sapphire-radio__box"]) }),
53
+ label && /* @__PURE__ */ React.createElement("span", { className: clsx(styles["sapphire-radio__label"]) }, label)
54
+ );
55
+ });
56
+
57
+ export { RadioBox };
58
+ //# sourceMappingURL=RadioBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioBox.js","sources":["../../../../../../../core/src/Radio/src/RadioBox.tsx"],"sourcesContent":["import React, { AriaRole, ForwardedRef, forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/radio/radio.module.css';\nimport { SapphireStyleProps, useSapphireStyleProps } from '../../utils';\nimport { GlobalDomAttributes } from '../../utils/types';\nimport {\n CheckboxContext,\n SlotProps,\n useContextProps,\n} from 'react-aria-components';\n\nexport type RadioBoxProps = GlobalDomAttributes &\n SapphireStyleProps &\n SlotProps & {\n elementType?: 'div' | 'label';\n size?: 'lg' | 'md';\n isDisabled?: boolean;\n isHovered?: boolean;\n isFocusVisible?: boolean;\n isPressed?: boolean;\n isSelected?: boolean;\n label?: ReactNode;\n children?: ReactNode;\n role?: AriaRole;\n };\n\n/**\n * Internal \"dumb\" component which allows one to render the radio box. This\n * does not come with any radio-related functionality. It is just the plain UI\n * element.\n */\nexport const RadioBox = forwardRef(function RadioBox(\n props: RadioBoxProps,\n ref: ForwardedRef<HTMLLabelElement>\n) {\n [props, ref] = useContextProps(props, ref, CheckboxContext);\n const {\n elementType: CustomElement = 'div',\n size,\n isDisabled,\n isHovered,\n isFocusVisible,\n isPressed,\n isSelected,\n label,\n role,\n children,\n slot,\n ...otherProps\n } = props;\n const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);\n const ariaProps =\n role === 'checkbox' ? { role, 'aria-checked': isSelected } : { role };\n\n return (\n <CustomElement\n {...filteredProps}\n {...ariaProps}\n ref={ref as ForwardedRef<any>}\n className={clsx(\n styles['sapphire-radio'],\n {\n [styles['sapphire-radio--checked']]: isSelected,\n [styles['sapphire-radio--md']]: size === 'md',\n [styles['is-hover']]: isHovered,\n [styles['is-focus']]: isFocusVisible,\n [styles['is-active']]: isPressed,\n },\n styles['js-focus'],\n styleProps.className\n )}\n style={styleProps.style}\n >\n {children}\n <span className={clsx(styles['sapphire-radio__box'])} />\n {label && (\n <span className={clsx(styles['sapphire-radio__label'])}>{label}</span>\n )}\n </CustomElement>\n );\n});\n"],"names":["RadioBox"],"mappings":";;;;;;;;;;;;AA+BO,MAAM,QAAA,GAAW,UAAA,CAAW,SAASA,SAAAA,CAC1C,OACA,GAAA,EACA;AACA,EAAA,CAAC,OAAO,GAAG,CAAA,GAAI,eAAA,CAAgB,KAAA,EAAO,KAAK,eAAe,CAAA;AAC1D,EAAA,MAAM;AAAA,IACJ,aAAa,aAAA,GAAgB,KAAA;AAAA,IAC7B,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,sBAAsB,UAAU,CAAA;AACtE,EAAA,MAAM,SAAA,GACJ,SAAS,UAAA,GAAa,EAAE,MAAM,cAAA,EAAgB,UAAA,EAAW,GAAI,EAAE,IAAA,EAAK;AAEtE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACJ,GAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,QACT,OAAO,gBAAgB,CAAA;AAAA,QACvB;AAAA,UACE,CAAC,MAAA,CAAO,yBAAyB,CAAC,GAAG,UAAA;AAAA,UACrC,CAAC,MAAA,CAAO,oBAAoB,CAAC,GAAG,IAAA,KAAS,IAAA;AAAA,UACzC,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,SAAA;AAAA,UACtB,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,cAAA;AAAA,UACtB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG;AAAA,SACzB;AAAA,QACA,OAAO,UAAU,CAAA;AAAA,QACjB,UAAA,CAAW;AAAA,OACb;AAAA,MACA,OAAO,UAAA,CAAW;AAAA,KAAA;AAAA,IAEjB,QAAA;AAAA,wCACA,MAAA,EAAA,EAAK,SAAA,EAAW,KAAK,MAAA,CAAO,qBAAqB,CAAC,CAAA,EAAG,CAAA;AAAA,IACrD,KAAA,wCACE,MAAA,EAAA,EAAK,SAAA,EAAW,KAAK,MAAA,CAAO,uBAAuB,CAAC,CAAA,EAAA,EAAI,KAAM;AAAA,GAEnE;AAEJ,CAAC;;;;"}
@@ -0,0 +1,32 @@
1
+ import React, { forwardRef } from 'react';
2
+ import clsx from 'clsx';
3
+ import { Separator as Separator$1 } from 'react-aria-components';
4
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
5
+ import '../../utils/useSapphireTextStyleProps.js';
6
+ import '../../ListBox/src/StatelessListBox.js';
7
+ import '../../Popover/src/Popover.js';
8
+ import { useThemeCheck } from '../../utils/useThemeCheck.js';
9
+ import 'react-aria/mergeProps';
10
+ import 'react-aria/useButton';
11
+ import { filterDOMProps } from 'react-aria/filterDOMProps';
12
+ import styles from '@danske/sapphire-css/components/separator/separator.module.css';
13
+
14
+ const Separator = forwardRef(function Separator2(props, ref) {
15
+ useThemeCheck();
16
+ const { orientation = "horizontal", ...otherProps } = props;
17
+ const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);
18
+ return /* @__PURE__ */ React.createElement(
19
+ Separator$1,
20
+ {
21
+ ref,
22
+ ...filteredProps,
23
+ ...filterDOMProps(props, { global: true }),
24
+ style: styleProps.style,
25
+ className: clsx(styles["sapphire-separator"], styleProps.className),
26
+ orientation
27
+ }
28
+ );
29
+ });
30
+
31
+ export { Separator };
32
+ //# sourceMappingURL=Separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator.js","sources":["../../../../../../../core/src/Separator/src/Separator.tsx"],"sourcesContent":["/**\n * Based on: https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/divider/src/Divider.tsx\n */\nimport React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { DOMProps } from '@react-types/shared';\nimport { Separator as RACSeparator } from 'react-aria-components';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '../../utils';\nimport { GlobalDomAttributes } from '../../utils/types';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport styles from '@danske/sapphire-css/components/separator/separator.module.css';\n\nexport interface SeparatorProps\n extends DOMProps,\n GlobalDomAttributes,\n SapphireStyleProps {\n /**\n * The orientation of the separator.\n *\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Separator = forwardRef(function Separator(\n props: SeparatorProps,\n ref: React.ForwardedRef<HTMLElement>\n) {\n useThemeCheck();\n const { orientation = 'horizontal', ...otherProps } = props;\n const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);\n\n return (\n <RACSeparator\n ref={ref}\n {...filteredProps}\n {...filterDOMProps(props, { global: true })}\n style={styleProps.style}\n className={clsx(styles['sapphire-separator'], styleProps.className)}\n orientation={orientation}\n />\n );\n});\n"],"names":["Separator","RACSeparator"],"mappings":";;;;;;;;;;;;;AA4BO,MAAM,SAAA,GAAY,UAAA,CAAW,SAASA,UAAAA,CAC3C,OACA,GAAA,EACA;AACA,EAAA,aAAA,EAAc;AACd,EAAA,MAAM,EAAE,WAAA,GAAc,YAAA,EAAc,GAAG,YAAW,GAAI,KAAA;AACtD,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,sBAAsB,UAAU,CAAA;AAEtE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,aAAA;AAAA,MACH,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC1C,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,WAAW,IAAA,CAAK,MAAA,CAAO,oBAAoB,CAAA,EAAG,WAAW,SAAS,CAAA;AAAA,MAClE;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -0,0 +1,19 @@
1
+ import 'react';
2
+ import 'clsx';
3
+ import '@danske/sapphire-css/components/skeleton/skeleton.module.css';
4
+ import '@danske/sapphire-react-context';
5
+ import 'react-aria/useId';
6
+ import '../../utils/useSapphireTextStyleProps.js';
7
+ import '../../ListBox/src/StatelessListBox.js';
8
+ import '../../Popover/src/Popover.js';
9
+ import 'react-aria/mergeProps';
10
+ import 'react-aria/useButton';
11
+ import { SkeletonText } from './SkeletonText.js';
12
+ import { SkeletonCircle } from './SkeletonCircle.js';
13
+
14
+ const Skeleton = {
15
+ Circle: SkeletonCircle,
16
+ Text: SkeletonText};
17
+
18
+ export { Skeleton };
19
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.js","sources":["../../../../../../../core/src/Skeleton/src/Skeleton.tsx"],"sourcesContent":["import { SkeletonBlock, type SkeletonBlockProps } from './SkeletonBlock';\nimport { SkeletonText, type SkeletonTextProps } from './SkeletonText';\nimport { SkeletonCircle, type SkeletonCircleProps } from './SkeletonCircle';\nimport { SkeletonFrom, type SkeletonFromProps } from './SkeletonFrom';\n\nexport const Skeleton = {\n Block: SkeletonBlock,\n Circle: SkeletonCircle,\n Text: SkeletonText,\n From: SkeletonFrom,\n};\n\nexport type {\n SkeletonBlockProps,\n SkeletonCircleProps,\n SkeletonFromProps,\n SkeletonTextProps,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAKO,MAAM,QAAA,GAAW;AAAA,EAEtB,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,YAER;;;;"}
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';
4
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
5
+ import '../../utils/useSapphireTextStyleProps.js';
6
+ import '../../ListBox/src/StatelessListBox.js';
7
+ import '../../Popover/src/Popover.js';
8
+ import { useThemeCheck } from '../../utils/useThemeCheck.js';
9
+ import 'react-aria/mergeProps';
10
+ import 'react-aria/useButton';
11
+ import { getAnimationDelay } from './animation.js';
12
+
13
+ const SkeletonCircle = ({
14
+ index,
15
+ children,
16
+ ...rest
17
+ }) => {
18
+ useThemeCheck();
19
+ const { styleProps } = useSapphireStyleProps(rest);
20
+ const animationDelay = getAnimationDelay(index);
21
+ return /* @__PURE__ */ React.createElement(
22
+ "div",
23
+ {
24
+ ...rest,
25
+ style: {
26
+ animationDelay,
27
+ ...styleProps.style
28
+ },
29
+ className: clsx(
30
+ styles["sapphire-skeleton"],
31
+ styles["sapphire-skeleton--circle"],
32
+ styleProps.className
33
+ )
34
+ }
35
+ );
36
+ };
37
+
38
+ export { SkeletonCircle };
39
+ //# sourceMappingURL=SkeletonCircle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkeletonCircle.js","sources":["../../../../../../../core/src/Skeleton/src/SkeletonCircle.tsx"],"sourcesContent":["import React from 'react';\nimport cx from 'clsx';\n\nimport styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';\n\nimport { useSapphireStyleProps, useThemeCheck } from '../../utils';\nimport { getAnimationDelay } from './animation';\nimport { SkeletonProps } from './skeleton.model';\n\nexport type SkeletonCircleProps = SkeletonProps;\n\nexport const SkeletonCircle: React.FC<SkeletonCircleProps> = ({\n index,\n children,\n ...rest\n}) => {\n useThemeCheck();\n\n const { styleProps } = useSapphireStyleProps(rest);\n\n const animationDelay = getAnimationDelay(index);\n\n return (\n <div\n {...rest}\n style={{\n animationDelay,\n ...styleProps.style,\n }}\n className={cx(\n styles['sapphire-skeleton'],\n styles['sapphire-skeleton--circle'],\n styleProps.className\n )}\n />\n );\n};\n"],"names":["cx"],"mappings":";;;;;;;;;;;;AAWO,MAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,IAAI,CAAA;AAEjD,EAAA,MAAM,cAAA,GAAiB,kBAAkB,KAAK,CAAA;AAE9C,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,cAAA;AAAA,QACA,GAAG,UAAA,CAAW;AAAA,OAChB;AAAA,MACA,SAAA,EAAWA,IAAA;AAAA,QACT,OAAO,mBAAmB,CAAA;AAAA,QAC1B,OAAO,2BAA2B,CAAA;AAAA,QAClC,UAAA,CAAW;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,59 @@
1
+ import React, { useMemo } from 'react';
2
+ import clsx from 'clsx';
3
+ import styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';
4
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
5
+ import '../../utils/useSapphireTextStyleProps.js';
6
+ import '../../ListBox/src/StatelessListBox.js';
7
+ import '../../Popover/src/Popover.js';
8
+ import { useThemeCheck } from '../../utils/useThemeCheck.js';
9
+ import 'react-aria/mergeProps';
10
+ import 'react-aria/useButton';
11
+ import { getAnimationDelay } from './animation.js';
12
+
13
+ const isFixedWidthType = (props) => {
14
+ return props.widthType === "fixed";
15
+ };
16
+ const SkeletonText = (props) => {
17
+ useThemeCheck();
18
+ const {
19
+ index,
20
+ widthType = "randomPct",
21
+ UNSAFE_className,
22
+ UNSAFE_style,
23
+ children,
24
+ minWidth = 50,
25
+ maxWidth = 100,
26
+ ...rest
27
+ } = props;
28
+ const animationDelay = getAnimationDelay(index);
29
+ const { styleProps } = useSapphireStyleProps({
30
+ UNSAFE_className,
31
+ UNSAFE_style
32
+ });
33
+ const skeletonWidth = useMemo(() => {
34
+ if (isFixedWidthType(props)) {
35
+ return props.width;
36
+ }
37
+ const calculatedWidth = Math.random() * (maxWidth - minWidth) + minWidth;
38
+ return widthType === "randomPct" ? `${calculatedWidth}%` : calculatedWidth;
39
+ }, []);
40
+ return /* @__PURE__ */ React.createElement(
41
+ "span",
42
+ {
43
+ ...rest,
44
+ style: {
45
+ width: skeletonWidth,
46
+ animationDelay,
47
+ ...styleProps.style
48
+ },
49
+ className: clsx(
50
+ styles["sapphire-skeleton"],
51
+ styles["sapphire-skeleton--text"],
52
+ styleProps.className
53
+ )
54
+ }
55
+ );
56
+ };
57
+
58
+ export { SkeletonText };
59
+ //# sourceMappingURL=SkeletonText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkeletonText.js","sources":["../../../../../../../core/src/Skeleton/src/SkeletonText.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport cx from 'clsx';\n\nimport styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';\n\nimport { useSapphireStyleProps, useThemeCheck } from '../../utils';\nimport { SkeletonProps } from './skeleton.model';\nimport { getAnimationDelay } from './animation';\n\ninterface SkeletonTextFixedWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n * */\n widthType?: 'fixed';\n /** Allowed width of a skeleton */\n width: number;\n minWidth?: never;\n maxWidth?: never;\n}\n\ninterface SkeletonTextRandomPxWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n */\n widthType?: 'randomPx';\n /** Min width of skeleton. Used internally to calculate width of a component */\n minWidth?: number;\n /** Max width of skeleton. Used internally to calculate width of a component */\n maxWidth?: number;\n}\n\ninterface SkeletonTextRandomPcWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n */\n widthType?: 'randomPct';\n /** Min width of skeleton. Used internally to calculate width of a component */\n minWidth?: number;\n /** Max width of skeleton. Used internally to calculate width of a component */\n maxWidth?: number;\n}\n\nexport type SkeletonTextProps = SkeletonProps &\n (\n | SkeletonTextFixedWidth\n | SkeletonTextRandomPxWidth\n | SkeletonTextRandomPcWidth\n );\n\nconst isFixedWidthType = (\n props: SkeletonTextProps\n): props is SkeletonProps & SkeletonTextFixedWidth => {\n return props.widthType === 'fixed';\n};\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n useThemeCheck();\n\n const {\n index,\n widthType = 'randomPct',\n UNSAFE_className,\n UNSAFE_style,\n children,\n minWidth = 50,\n maxWidth = 100,\n ...rest\n } = props;\n\n const animationDelay = getAnimationDelay(index);\n // Excluding minWidth & maxWidth props here as they're used only to calculate relevant width but not to define constraints.\n const { styleProps } = useSapphireStyleProps({\n UNSAFE_className,\n UNSAFE_style,\n });\n\n const skeletonWidth = useMemo(() => {\n if (isFixedWidthType(props)) {\n return props.width;\n }\n\n const calculatedWidth = Math.random() * (maxWidth - minWidth) + minWidth;\n\n return widthType === 'randomPct' ? `${calculatedWidth}%` : calculatedWidth;\n }, []);\n\n return (\n <span\n {...rest}\n style={{\n width: skeletonWidth,\n animationDelay,\n ...styleProps.style,\n }}\n className={cx(\n styles['sapphire-skeleton'],\n styles['sapphire-skeleton--text'],\n styleProps.className\n )}\n />\n );\n};\n"],"names":["cx"],"mappings":";;;;;;;;;;;;AAoDA,MAAM,gBAAA,GAAmB,CACvB,KAAA,KACoD;AACpD,EAAA,OAAO,MAAM,SAAA,KAAc,OAAA;AAC7B,CAAA;AAEO,MAAM,YAAA,GAA4C,CAAC,KAAA,KAAU;AAClE,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,SAAA,GAAY,WAAA;AAAA,IACZ,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,EAAA;AAAA,IACX,QAAA,GAAW,GAAA;AAAA,IACX,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,kBAAkB,KAAK,CAAA;AAE9C,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB;AAAA,IAC3C,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,MAAA,EAAO,IAAK,WAAW,QAAA,CAAA,GAAY,QAAA;AAEhE,IAAA,OAAO,SAAA,KAAc,WAAA,GAAc,CAAA,EAAG,eAAe,CAAA,CAAA,CAAA,GAAM,eAAA;AAAA,EAC7D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,cAAA;AAAA,QACA,GAAG,UAAA,CAAW;AAAA,OAChB;AAAA,MACA,SAAA,EAAWA,IAAA;AAAA,QACT,OAAO,mBAAmB,CAAA;AAAA,QAC1B,OAAO,yBAAyB,CAAA;AAAA,QAChC,UAAA,CAAW;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,4 @@
1
+ const getAnimationDelay = (order) => order ? `${order * 80}ms` : void 0;
2
+
3
+ export { getAnimationDelay };
4
+ //# sourceMappingURL=animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.js","sources":["../../../../../../../core/src/Skeleton/src/animation.ts"],"sourcesContent":["export const getAnimationDelay = (order?: number): string | undefined =>\n order ? `${order * 80}ms` : undefined;\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,CAAC,KAAA,KAChC,QAAQ,CAAA,EAAG,KAAA,GAAQ,EAAE,CAAA,EAAA,CAAA,GAAO;;;;"}
@@ -0,0 +1,42 @@
1
+ import React, { forwardRef, useContext } from 'react';
2
+ import clsx from 'clsx';
3
+ import { ThemeContext } from '@danske/sapphire-react-context';
4
+ import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
5
+ import '../../utils/useSapphireTextStyleProps.js';
6
+ import '../../ListBox/src/StatelessListBox.js';
7
+ import '../../Popover/src/Popover.js';
8
+ import 'react-aria/mergeProps';
9
+ import 'react-aria/useButton';
10
+ import surfaceStyles from '@danske/sapphire-css/components/surface/surface.module.css';
11
+ import { viewStylePropHandlers } from '../../View/src/View.js';
12
+ import { filterDOMProps } from 'react-aria/filterDOMProps';
13
+
14
+ forwardRef(function ThemeRoot2({ children, variant, noSurface = false, ...props }, ref) {
15
+ const themeContext = useContext(ThemeContext);
16
+ if (typeof themeContext.theme === "undefined") {
17
+ throw new Error(
18
+ "<ThemeRoot> must be rendered inside a <SapphireProvider>."
19
+ );
20
+ }
21
+ const { styleProps } = useSapphireStyleProps(props, viewStylePropHandlers);
22
+ const theme = themeContext.theme;
23
+ const themeVariant = variant || themeContext.themeVariant;
24
+ const themeClassName = theme?.themeClassName;
25
+ const colorScheme = themeClassName?.includes("dark") ? "dark" : "light";
26
+ return /* @__PURE__ */ React.createElement(
27
+ "div",
28
+ {
29
+ className: clsx(
30
+ themeClassName,
31
+ themeVariant === "secondary" ? theme?.themeSecondaryModifierClassName : themeVariant === "tertiary" ? theme?.themeTertiaryModifierClassName : themeVariant === "contrast" ? theme?.themeContrastModifierClassName : null,
32
+ styleProps.className,
33
+ !noSurface && surfaceStyles["sapphire-surface"]
34
+ ),
35
+ style: { ...styleProps.style, colorScheme },
36
+ ref,
37
+ ...filterDOMProps(props, { global: true })
38
+ },
39
+ children
40
+ );
41
+ });
42
+ //# sourceMappingURL=ThemeRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeRoot.js","sources":["../../../../../../../core/src/ThemeRoot/src/ThemeRoot.tsx"],"sourcesContent":["import React, { ReactNode, useContext, forwardRef, ForwardedRef } from 'react';\nimport clsx from 'clsx';\nimport { ThemeContext, ThemeContextProps } from '@danske/sapphire-react-context';\nimport { Theme } from '@danske/sapphire-css/themes';\nimport { SapphireStyleProps, useSapphireStyleProps } from '../../utils';\nimport { ThemeVariant } from '../../SapphireProvider/src';\nimport surfaceStyles from '@danske/sapphire-css/components/surface/surface.module.css';\nimport { SapphireViewStyleProps } from '../../View';\nimport { DOMProps, DOMAttributes } from '@react-types/shared';\nimport { viewStylePropHandlers } from '../../View/src/View';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\n\nexport interface ThemeRootProps\n extends SapphireStyleProps,\n Omit<SapphireViewStyleProps, 'backgroundColor' | 'color'>,\n DOMProps,\n Omit<\n DOMAttributes,\n 'children' | 'style' | 'className' | 'dangerouslySetInnerHTML'\n > {\n /**\n * The theme variation, if the theme supports any.\n */\n variant?: ThemeVariant;\n noSurface?: boolean;\n children: ReactNode;\n}\n\n/**\n * ThemeRoot wraps the children with an element that provides the design tokens\n * in the DOM subtree. Also renders the necessary background surface for the\n * theme's components to be rendered on.\n */\nexport const ThemeRoot = forwardRef(function ThemeRoot(\n { children, variant, noSurface = false, ...props }: ThemeRootProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const themeContext = useContext(ThemeContext);\n\n if (typeof themeContext.theme === 'undefined') {\n throw new Error(\n '<ThemeRoot> must be rendered inside a <SapphireProvider>.'\n );\n }\n const { styleProps } = useSapphireStyleProps(props, viewStylePropHandlers);\n const theme = themeContext.theme as ThemeContextProps<\n Theme,\n ThemeVariant\n >['theme'];\n const themeVariant =\n variant ||\n (themeContext.themeVariant as ThemeContextProps<\n Theme,\n ThemeVariant\n >['themeVariant']);\n\n const themeClassName = theme?.themeClassName;\n const colorScheme = themeClassName?.includes('dark') ? 'dark' : 'light';\n\n return (\n <div\n className={clsx(\n themeClassName,\n themeVariant === 'secondary'\n ? theme?.themeSecondaryModifierClassName\n : themeVariant === 'tertiary'\n ? theme?.themeTertiaryModifierClassName\n : themeVariant === 'contrast'\n ? theme?.themeContrastModifierClassName\n : null,\n styleProps.className,\n !noSurface && surfaceStyles['sapphire-surface']\n )}\n style={{ ...styleProps.style, colorScheme }}\n ref={ref}\n {...filterDOMProps(props, { global: true })}\n >\n {children}\n </div>\n );\n});\n"],"names":["ThemeRoot"],"mappings":";;;;;;;;;;;;;AAiCyB,UAAA,CAAW,SAASA,UAAAA,CAC3C,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,GAAG,KAAA,EAAM,EACjD,GAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAe,WAAW,YAAY,CAAA;AAE5C,EAAA,IAAI,OAAO,YAAA,CAAa,KAAA,KAAU,WAAA,EAAa;AAC7C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,OAAO,qBAAqB,CAAA;AACzE,EAAA,MAAM,QAAQ,YAAA,CAAa,KAAA;AAI3B,EAAA,MAAM,YAAA,GACJ,WACC,YAAA,CAAa,YAAA;AAKhB,EAAA,MAAM,iBAAiB,KAAA,EAAO,cAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,cAAA,EAAgB,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,OAAA;AAEhE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA;AAAA,QACT,cAAA;AAAA,QACA,YAAA,KAAiB,WAAA,GACb,KAAA,EAAO,+BAAA,GACP,YAAA,KAAiB,UAAA,GACjB,KAAA,EAAO,8BAAA,GACP,YAAA,KAAiB,UAAA,GACjB,KAAA,EAAO,8BAAA,GACP,IAAA;AAAA,QACJ,UAAA,CAAW,SAAA;AAAA,QACX,CAAC,SAAA,IAAa,aAAA,CAAc,kBAAkB;AAAA,OAChD;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,UAAA,CAAW,OAAO,WAAA,EAAY;AAAA,MAC1C,GAAA;AAAA,MACC,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,KAAA;AAAA,IAEzC;AAAA,GACH;AAEJ,CAAC"}