@danske/sapphire-react-lab 0.105.2 → 0.106.2

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 (216) hide show
  1. package/build/cjs/index.js +1607 -2284
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Accordion/index.js.map +1 -1
  4. package/build/esm/Accordion/src/Accordion.js +44 -75
  5. package/build/esm/Accordion/src/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/src/AccordionContext.js +3 -1
  7. package/build/esm/Accordion/src/AccordionContext.js.map +1 -1
  8. package/build/esm/Accordion/src/AccordionHeading.js +23 -55
  9. package/build/esm/Accordion/src/AccordionHeading.js.map +1 -1
  10. package/build/esm/Accordion/src/AccordionItem.js +18 -44
  11. package/build/esm/Accordion/src/AccordionItem.js.map +1 -1
  12. package/build/esm/Accordion/src/AccordionPanel.js +28 -45
  13. package/build/esm/Accordion/src/AccordionPanel.js.map +1 -1
  14. package/build/esm/Accordion/src/utils.js.map +1 -1
  15. package/build/esm/Alert/src/Alert.js +27 -65
  16. package/build/esm/Alert/src/Alert.js.map +1 -1
  17. package/build/esm/Amount/src/Amount.js +41 -63
  18. package/build/esm/Amount/src/Amount.js.map +1 -1
  19. package/build/esm/Amount/src/useGroupAmount.js +4 -1
  20. package/build/esm/Amount/src/useGroupAmount.js.map +1 -1
  21. package/build/esm/Autocomplete/i18n/da-DK.json.js +6 -0
  22. package/build/esm/Autocomplete/i18n/da-DK.json.js.map +1 -0
  23. package/build/esm/Autocomplete/i18n/de-DE.json.js +6 -0
  24. package/build/esm/Autocomplete/i18n/de-DE.json.js.map +1 -0
  25. package/build/esm/Autocomplete/i18n/en-US.json.js +6 -0
  26. package/build/esm/Autocomplete/i18n/en-US.json.js.map +1 -0
  27. package/build/esm/Autocomplete/i18n/fi-FI.json.js +6 -0
  28. package/build/esm/Autocomplete/i18n/fi-FI.json.js.map +1 -0
  29. package/build/esm/Autocomplete/i18n/index.js +9 -9
  30. package/build/esm/Autocomplete/i18n/index.js.map +1 -1
  31. package/build/esm/Autocomplete/i18n/nb-NO.json.js +6 -0
  32. package/build/esm/Autocomplete/i18n/nb-NO.json.js.map +1 -0
  33. package/build/esm/Autocomplete/i18n/pl-PL.json.js +6 -0
  34. package/build/esm/Autocomplete/i18n/pl-PL.json.js.map +1 -0
  35. package/build/esm/Autocomplete/i18n/sv-SE.json.js +6 -0
  36. package/build/esm/Autocomplete/i18n/sv-SE.json.js.map +1 -0
  37. package/build/esm/Autocomplete/src/Autocomplete.js +57 -76
  38. package/build/esm/Autocomplete/src/Autocomplete.js.map +1 -1
  39. package/build/esm/Breadcrumbs/src/BreadcrumbItem.js +46 -52
  40. package/build/esm/Breadcrumbs/src/BreadcrumbItem.js.map +1 -1
  41. package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js +17 -45
  42. package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js.map +1 -1
  43. package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js +25 -46
  44. package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js.map +1 -1
  45. package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js +18 -11
  46. package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +1 -1
  47. package/build/esm/Breadcrumbs/src/Breadcrumbs.js +47 -64
  48. package/build/esm/Breadcrumbs/src/Breadcrumbs.js.map +1 -1
  49. package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js +8 -6
  50. package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js.map +1 -1
  51. package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js +6 -6
  52. package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js.map +1 -1
  53. package/build/esm/FileDropzone/i18n/{da-DK.js → da-DK.json.js} +3 -3
  54. package/build/esm/FileDropzone/i18n/da-DK.json.js.map +1 -0
  55. package/build/esm/FileDropzone/i18n/{de-DE.js → de-DE.json.js} +3 -3
  56. package/build/esm/FileDropzone/i18n/de-DE.json.js.map +1 -0
  57. package/build/esm/FileDropzone/i18n/{en-US.js → en-US.json.js} +3 -3
  58. package/build/esm/FileDropzone/i18n/en-US.json.js.map +1 -0
  59. package/build/esm/FileDropzone/i18n/{fi-FI.js → fi-FI.json.js} +3 -3
  60. package/build/esm/FileDropzone/i18n/fi-FI.json.js.map +1 -0
  61. package/build/esm/FileDropzone/i18n/index.js +9 -9
  62. package/build/esm/FileDropzone/i18n/index.js.map +1 -1
  63. package/build/esm/FileDropzone/i18n/{nb-NO.js → nb-NO.json.js} +3 -3
  64. package/build/esm/FileDropzone/i18n/nb-NO.json.js.map +1 -0
  65. package/build/esm/FileDropzone/i18n/{pl-PL.js → pl-PL.json.js} +3 -3
  66. package/build/esm/FileDropzone/i18n/pl-PL.json.js.map +1 -0
  67. package/build/esm/FileDropzone/i18n/{sv-SE.js → sv-SE.json.js} +3 -3
  68. package/build/esm/FileDropzone/i18n/sv-SE.json.js.map +1 -0
  69. package/build/esm/FileDropzone/src/FileDropzone.js +68 -88
  70. package/build/esm/FileDropzone/src/FileDropzone.js.map +1 -1
  71. package/build/esm/FileDropzone/src/FileTrigger.js +29 -61
  72. package/build/esm/FileDropzone/src/FileTrigger.js.map +1 -1
  73. package/build/esm/FileDropzone/src/utils.js.map +1 -1
  74. package/build/esm/Filtering/src/FilterDropdown.js +91 -113
  75. package/build/esm/Filtering/src/FilterDropdown.js.map +1 -1
  76. package/build/esm/Filtering/src/SearchableSelectFilter.js +53 -70
  77. package/build/esm/Filtering/src/SearchableSelectFilter.js.map +1 -1
  78. package/build/esm/Flag/src/Flag.js +5 -37
  79. package/build/esm/Flag/src/Flag.js.map +1 -1
  80. package/build/esm/LabeledValue/src/LabeledValue.js +21 -55
  81. package/build/esm/LabeledValue/src/LabeledValue.js.map +1 -1
  82. package/build/esm/NumberField/i18n/da-DK.json.js +9 -0
  83. package/build/esm/NumberField/i18n/da-DK.json.js.map +1 -0
  84. package/build/esm/NumberField/i18n/de-DE.json.js +9 -0
  85. package/build/esm/NumberField/i18n/de-DE.json.js.map +1 -0
  86. package/build/esm/NumberField/i18n/en-US.json.js +9 -0
  87. package/build/esm/NumberField/i18n/en-US.json.js.map +1 -0
  88. package/build/esm/NumberField/i18n/fi-FI.json.js +9 -0
  89. package/build/esm/NumberField/i18n/fi-FI.json.js.map +1 -0
  90. package/build/esm/NumberField/i18n/index.js +9 -9
  91. package/build/esm/NumberField/i18n/index.js.map +1 -1
  92. package/build/esm/NumberField/i18n/nb-NO.json.js +9 -0
  93. package/build/esm/NumberField/i18n/nb-NO.json.js.map +1 -0
  94. package/build/esm/NumberField/i18n/pl-PL.json.js +9 -0
  95. package/build/esm/NumberField/i18n/pl-PL.json.js.map +1 -0
  96. package/build/esm/NumberField/i18n/sv-SE.json.js +9 -0
  97. package/build/esm/NumberField/i18n/sv-SE.json.js.map +1 -0
  98. package/build/esm/NumberField/src/NumberField.js +130 -111
  99. package/build/esm/NumberField/src/NumberField.js.map +1 -1
  100. package/build/esm/NumberField/src/StepperButton.js +32 -53
  101. package/build/esm/NumberField/src/StepperButton.js.map +1 -1
  102. package/build/esm/NumberField/src/cursorHelpers.js +13 -8
  103. package/build/esm/NumberField/src/cursorHelpers.js.map +1 -1
  104. package/build/esm/NumberField/src/formatHelpers.js +15 -18
  105. package/build/esm/NumberField/src/formatHelpers.js.map +1 -1
  106. package/build/esm/NumberField/src/keyboardHelpers.js +13 -8
  107. package/build/esm/NumberField/src/keyboardHelpers.js.map +1 -1
  108. package/build/esm/NumberField/src/useAutofillStyle.js.map +1 -1
  109. package/build/esm/NumberField/src/useNumberFieldFormatting.js +79 -45
  110. package/build/esm/NumberField/src/useNumberFieldFormatting.js.map +1 -1
  111. package/build/esm/NumberField/src/useSapphireNumberField.js +16 -42
  112. package/build/esm/NumberField/src/useSapphireNumberField.js.map +1 -1
  113. package/build/esm/ProgressIndicator/src/ProgressIndicator.js +23 -35
  114. package/build/esm/ProgressIndicator/src/ProgressIndicator.js.map +1 -1
  115. package/build/esm/Sidebar/index.js.map +1 -1
  116. package/build/esm/Sidebar/src/Body.js +19 -44
  117. package/build/esm/Sidebar/src/Body.js.map +1 -1
  118. package/build/esm/Sidebar/src/ExpandableItem.js +89 -97
  119. package/build/esm/Sidebar/src/ExpandableItem.js.map +1 -1
  120. package/build/esm/Sidebar/src/Header.js +14 -44
  121. package/build/esm/Sidebar/src/Header.js.map +1 -1
  122. package/build/esm/Sidebar/src/Item.js +17 -44
  123. package/build/esm/Sidebar/src/Item.js.map +1 -1
  124. package/build/esm/Sidebar/src/List.js +14 -43
  125. package/build/esm/Sidebar/src/List.js.map +1 -1
  126. package/build/esm/Sidebar/src/Panel.js +56 -69
  127. package/build/esm/Sidebar/src/Panel.js.map +1 -1
  128. package/build/esm/Sidebar/src/ResponsiveSidebarContext.js +17 -9
  129. package/build/esm/Sidebar/src/ResponsiveSidebarContext.js.map +1 -1
  130. package/build/esm/Sidebar/src/SecondarySidebarContext.js +15 -12
  131. package/build/esm/Sidebar/src/SecondarySidebarContext.js.map +1 -1
  132. package/build/esm/Sidebar/src/Section.js +38 -51
  133. package/build/esm/Sidebar/src/Section.js.map +1 -1
  134. package/build/esm/Sidebar/src/Sidebar.js +65 -93
  135. package/build/esm/Sidebar/src/Sidebar.js.map +1 -1
  136. package/build/esm/Sidebar/src/useSidebar.js.map +1 -1
  137. package/build/esm/Slider/index.js.map +1 -1
  138. package/build/esm/Slider/src/Slider.js +46 -71
  139. package/build/esm/Slider/src/Slider.js.map +1 -1
  140. package/build/esm/TagGroup/src/Tag.js +71 -86
  141. package/build/esm/TagGroup/src/Tag.js.map +1 -1
  142. package/build/esm/TagGroup/src/TagGroup.js +46 -67
  143. package/build/esm/TagGroup/src/TagGroup.js.map +1 -1
  144. package/build/esm/TagGroup/src/TagItem.js +1 -1
  145. package/build/esm/TagGroup/src/TagItem.js.map +1 -1
  146. package/build/esm/TimeField/i18n/da-DK.json.js +7 -0
  147. package/build/esm/TimeField/i18n/da-DK.json.js.map +1 -0
  148. package/build/esm/TimeField/i18n/de-DE.json.js +7 -0
  149. package/build/esm/TimeField/i18n/de-DE.json.js.map +1 -0
  150. package/build/esm/TimeField/i18n/en-US.json.js +7 -0
  151. package/build/esm/TimeField/i18n/en-US.json.js.map +1 -0
  152. package/build/esm/TimeField/i18n/fi-FI.json.js +7 -0
  153. package/build/esm/TimeField/i18n/fi-FI.json.js.map +1 -0
  154. package/build/esm/TimeField/i18n/index.js +7 -7
  155. package/build/esm/TimeField/i18n/index.js.map +1 -1
  156. package/build/esm/TimeField/i18n/nb-NO.json.js +7 -0
  157. package/build/esm/TimeField/i18n/nb-NO.json.js.map +1 -0
  158. package/build/esm/TimeField/i18n/pl-PL.json.js +7 -0
  159. package/build/esm/TimeField/i18n/pl-PL.json.js.map +1 -0
  160. package/build/esm/TimeField/i18n/{sv-SE.js → sv-SE.json.js} +1 -1
  161. package/build/esm/TimeField/i18n/sv-SE.json.js.map +1 -0
  162. package/build/esm/TimeField/src/TimeField.js +67 -84
  163. package/build/esm/TimeField/src/TimeField.js.map +1 -1
  164. package/build/esm/TimeField/src/TimeFieldSegment.js +25 -37
  165. package/build/esm/TimeField/src/TimeFieldSegment.js.map +1 -1
  166. package/build/esm/index.js +1 -1
  167. package/build/index.d.ts +19 -17
  168. package/package.json +16 -39
  169. package/build/esm/Autocomplete/i18n/da-DK.js +0 -6
  170. package/build/esm/Autocomplete/i18n/da-DK.js.map +0 -1
  171. package/build/esm/Autocomplete/i18n/de-DE.js +0 -6
  172. package/build/esm/Autocomplete/i18n/de-DE.js.map +0 -1
  173. package/build/esm/Autocomplete/i18n/en-US.js +0 -6
  174. package/build/esm/Autocomplete/i18n/en-US.js.map +0 -1
  175. package/build/esm/Autocomplete/i18n/fi-FI.js +0 -6
  176. package/build/esm/Autocomplete/i18n/fi-FI.js.map +0 -1
  177. package/build/esm/Autocomplete/i18n/nb-NO.js +0 -6
  178. package/build/esm/Autocomplete/i18n/nb-NO.js.map +0 -1
  179. package/build/esm/Autocomplete/i18n/pl-PL.js +0 -6
  180. package/build/esm/Autocomplete/i18n/pl-PL.js.map +0 -1
  181. package/build/esm/Autocomplete/i18n/sv-SE.js +0 -6
  182. package/build/esm/Autocomplete/i18n/sv-SE.js.map +0 -1
  183. package/build/esm/FileDropzone/i18n/da-DK.js.map +0 -1
  184. package/build/esm/FileDropzone/i18n/de-DE.js.map +0 -1
  185. package/build/esm/FileDropzone/i18n/en-US.js.map +0 -1
  186. package/build/esm/FileDropzone/i18n/fi-FI.js.map +0 -1
  187. package/build/esm/FileDropzone/i18n/nb-NO.js.map +0 -1
  188. package/build/esm/FileDropzone/i18n/pl-PL.js.map +0 -1
  189. package/build/esm/FileDropzone/i18n/sv-SE.js.map +0 -1
  190. package/build/esm/NumberField/i18n/da-DK.js +0 -9
  191. package/build/esm/NumberField/i18n/da-DK.js.map +0 -1
  192. package/build/esm/NumberField/i18n/de-DE.js +0 -9
  193. package/build/esm/NumberField/i18n/de-DE.js.map +0 -1
  194. package/build/esm/NumberField/i18n/en-US.js +0 -9
  195. package/build/esm/NumberField/i18n/en-US.js.map +0 -1
  196. package/build/esm/NumberField/i18n/fi-FI.js +0 -9
  197. package/build/esm/NumberField/i18n/fi-FI.js.map +0 -1
  198. package/build/esm/NumberField/i18n/nb-NO.js +0 -9
  199. package/build/esm/NumberField/i18n/nb-NO.js.map +0 -1
  200. package/build/esm/NumberField/i18n/pl-PL.js +0 -9
  201. package/build/esm/NumberField/i18n/pl-PL.js.map +0 -1
  202. package/build/esm/NumberField/i18n/sv-SE.js +0 -9
  203. package/build/esm/NumberField/i18n/sv-SE.js.map +0 -1
  204. package/build/esm/TimeField/i18n/da-DK.js +0 -7
  205. package/build/esm/TimeField/i18n/da-DK.js.map +0 -1
  206. package/build/esm/TimeField/i18n/de-DE.js +0 -7
  207. package/build/esm/TimeField/i18n/de-DE.js.map +0 -1
  208. package/build/esm/TimeField/i18n/en-US.js +0 -7
  209. package/build/esm/TimeField/i18n/en-US.js.map +0 -1
  210. package/build/esm/TimeField/i18n/fi-FI.js +0 -7
  211. package/build/esm/TimeField/i18n/fi-FI.js.map +0 -1
  212. package/build/esm/TimeField/i18n/nb-NO.js +0 -7
  213. package/build/esm/TimeField/i18n/nb-NO.js.map +0 -1
  214. package/build/esm/TimeField/i18n/pl-PL.js +0 -7
  215. package/build/esm/TimeField/i18n/pl-PL.js.map +0 -1
  216. package/build/esm/TimeField/i18n/sv-SE.js.map +0 -1
@@ -1,52 +1,20 @@
1
1
  import React, { useEffect } from 'react';
2
- import { Panel, ModalLayout, IconButton, tokens, View } from '@danske/sapphire-react';
2
+ import { Panel, ModalLayout, tokens, View, IconButton } from '@danske/sapphire-react';
3
3
  import { ChevronLeft } from '@danske/sapphire-icons/react';
4
4
  import { useSecondarySidebarContext } from './SecondarySidebarContext.js';
5
5
  import { useResponsiveSidebarContext, useIsSidebarCollapsed } from './ResponsiveSidebarContext.js';
6
6
 
7
- var __defProp = Object.defineProperty;
8
- var __defProps = Object.defineProperties;
9
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
10
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
- var __hasOwnProp = Object.prototype.hasOwnProperty;
12
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
13
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
- var __spreadValues = (a, b) => {
15
- for (var prop in b || (b = {}))
16
- if (__hasOwnProp.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- if (__getOwnPropSymbols)
19
- for (var prop of __getOwnPropSymbols(b)) {
20
- if (__propIsEnum.call(b, prop))
21
- __defNormalProp(a, prop, b[prop]);
22
- }
23
- return a;
24
- };
25
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
26
- var __objRest = (source, exclude) => {
27
- var target = {};
28
- for (var prop in source)
29
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
30
- target[prop] = source[prop];
31
- if (source != null && __getOwnPropSymbols)
32
- for (var prop of __getOwnPropSymbols(source)) {
33
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
34
- target[prop] = source[prop];
35
- }
36
- return target;
37
- };
38
- const SidebarPanel = (_a) => {
39
- var _b = _a, {
40
- children,
41
- header
42
- } = _b, props = __objRest(_b, [
43
- "children",
44
- "header"
45
- ]);
7
+ const SidebarPanel = ({
8
+ children,
9
+ header,
10
+ ...props
11
+ }) => {
46
12
  const { openedId, setOpenedId, content } = useSecondarySidebarContext();
47
13
  const responsiveContext = useResponsiveSidebarContext();
48
14
  if (!responsiveContext) {
49
- throw new Error("<SidebarPanel> must be rendered inside a <Sidebar.ResponsiveProvider>");
15
+ throw new Error(
16
+ "<SidebarPanel> must be rendered inside a <Sidebar.ResponsiveProvider>"
17
+ );
50
18
  }
51
19
  const { isPanelOpen, setPanelOpen } = responsiveContext;
52
20
  const isCollapsed = useIsSidebarCollapsed();
@@ -55,41 +23,60 @@ const SidebarPanel = (_a) => {
55
23
  setPanelOpen(false);
56
24
  }
57
25
  }, [isCollapsed]);
58
- return /* @__PURE__ */ React.createElement(Panel, __spreadProps(__spreadValues({}, props), {
59
- isOpen: isPanelOpen,
60
- onClose: () => setPanelOpen(false),
61
- onCloseTransitionDone: () => setOpenedId(null),
62
- alignLeft: true,
63
- isDismissable: true,
64
- width: 320
65
- }), /* @__PURE__ */ React.createElement(ModalLayout, {
66
- header: /* @__PURE__ */ React.createElement(ModalLayout.Header, {
67
- heading: openedId === null ? header : content == null ? void 0 : content.header,
68
- backButton: openedId !== null && /* @__PURE__ */ React.createElement(IconButton, {
69
- size: "md",
70
- "aria-label": "Back",
71
- variant: "tertiary",
72
- marginLeft: `calc(-1 * ${tokens.size.spacingSm})`,
73
- onPress: () => setOpenedId(null)
74
- }, /* @__PURE__ */ React.createElement(ChevronLeft, null))
75
- }),
76
- body: /* @__PURE__ */ React.createElement(ModalLayout.Body, {
77
- noPadding: true,
78
- UNSAFE_style: {
79
- paddingLeft: tokens.size.spacingMd.value,
80
- paddingRight: tokens.size.spacingMd.value
26
+ return /* @__PURE__ */ React.createElement(
27
+ Panel,
28
+ {
29
+ ...props,
30
+ isOpen: isPanelOpen,
31
+ onClose: () => setPanelOpen(false),
32
+ onCloseTransitionDone: () => setOpenedId(null),
33
+ alignLeft: true,
34
+ isDismissable: true,
35
+ width: 320
36
+ },
37
+ /* @__PURE__ */ React.createElement(
38
+ ModalLayout,
39
+ {
40
+ header: /* @__PURE__ */ React.createElement(
41
+ ModalLayout.Header,
42
+ {
43
+ heading: openedId === null ? header : content?.header,
44
+ backButton: openedId !== null && /* @__PURE__ */ React.createElement(
45
+ IconButton,
46
+ {
47
+ size: "md",
48
+ "aria-label": "Back",
49
+ variant: "tertiary",
50
+ marginLeft: `calc(-1 * ${tokens.size.spacingSm})`,
51
+ onPress: () => setOpenedId(null)
52
+ },
53
+ /* @__PURE__ */ React.createElement(ChevronLeft, null)
54
+ )
55
+ }
56
+ ),
57
+ body: /* @__PURE__ */ React.createElement(
58
+ ModalLayout.Body,
59
+ {
60
+ noPadding: true,
61
+ UNSAFE_style: {
62
+ paddingLeft: tokens.size.spacingMd.value,
63
+ paddingRight: tokens.size.spacingMd.value
64
+ }
65
+ },
66
+ /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(View, { isHidden: openedId !== null }, children), openedId && content?.body)
67
+ )
81
68
  }
82
- }, /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(View, {
83
- isHidden: openedId !== null
84
- }, children), openedId && (content == null ? void 0 : content.body)))
85
- }));
69
+ )
70
+ );
86
71
  };
87
72
  const SidebarPanelTrigger = ({
88
73
  children
89
74
  }) => {
90
75
  const context = useResponsiveSidebarContext();
91
76
  if (!context) {
92
- throw new Error("<Sidebar.PanelTrigger> should be rendered inside a <Sidebar.ResponsiveProvider>");
77
+ throw new Error(
78
+ "<Sidebar.PanelTrigger> should be rendered inside a <Sidebar.ResponsiveProvider>"
79
+ );
93
80
  }
94
81
  const isCollapsed = useIsSidebarCollapsed();
95
82
  const panelTriggerProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","sources":["../../../../src/Sidebar/src/Panel.tsx"],"sourcesContent":["import React, { ReactNode, useEffect } from 'react';\nimport {\n IconButton,\n ModalLayout,\n Panel,\n PanelProps,\n tokens,\n View,\n} from '@danske/sapphire-react';\nimport { ChevronLeft } from '@danske/sapphire-icons/react';\nimport { useSecondarySidebarContext } from './SecondarySidebarContext';\nimport {\n useIsSidebarCollapsed,\n useResponsiveSidebarContext,\n} from './ResponsiveSidebarContext';\n\nexport type SidebarPanelProps = Omit<\n PanelProps,\n 'isOpen' | 'size' | 'direction'\n> & { header: ReactNode };\n\nexport const SidebarPanel = ({\n children,\n header,\n ...props\n}: SidebarPanelProps) => {\n const { openedId, setOpenedId, content } = useSecondarySidebarContext();\n const responsiveContext = useResponsiveSidebarContext();\n\n if (!responsiveContext) {\n throw new Error(\n '<SidebarPanel> must be rendered inside a <Sidebar.ResponsiveProvider>'\n );\n }\n\n const { isPanelOpen, setPanelOpen } = responsiveContext;\n const isCollapsed = useIsSidebarCollapsed();\n\n useEffect(() => {\n if (!isCollapsed) {\n // if breakpoint changes, we want to close the panel until opened manually again\n setPanelOpen(false);\n }\n }, [isCollapsed]);\n\n return (\n <Panel\n {...props}\n isOpen={isPanelOpen}\n onClose={() => setPanelOpen(false)}\n onCloseTransitionDone={() => setOpenedId(null)}\n alignLeft\n isDismissable\n width={320}\n >\n <ModalLayout\n header={\n <ModalLayout.Header\n heading={openedId === null ? header : content?.header}\n backButton={\n openedId !== null && (\n <IconButton\n size=\"md\"\n aria-label=\"Back\"\n variant=\"tertiary\"\n marginLeft={`calc(-1 * ${tokens.size.spacingSm})`}\n onPress={() => setOpenedId(null)}\n >\n <ChevronLeft />\n </IconButton>\n )\n }\n />\n }\n body={\n <ModalLayout.Body\n noPadding\n UNSAFE_style={{\n paddingLeft: tokens.size.spacingMd.value,\n paddingRight: tokens.size.spacingMd.value,\n }}\n >\n <>\n <View isHidden={openedId !== null}>{children}</View>\n {openedId && content?.body}\n </>\n </ModalLayout.Body>\n }\n />\n </Panel>\n );\n};\n\nexport const SidebarPanelTrigger = ({\n children,\n}: {\n children: (triggerProps: any) => JSX.Element;\n}) => {\n const context = useResponsiveSidebarContext();\n if (!context) {\n throw new Error(\n '<Sidebar.PanelTrigger> should be rendered inside a <Sidebar.ResponsiveProvider>'\n );\n }\n const isCollapsed = useIsSidebarCollapsed();\n const panelTriggerProps = {\n onPress: () => {\n context.setPanelOpen(true);\n },\n };\n\n return isCollapsed ? children(panelTriggerProps) : null;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Panel.js","sources":["../../../../src/Sidebar/src/Panel.tsx"],"sourcesContent":["import React, { ReactNode, useEffect } from 'react';\nimport {\n IconButton,\n ModalLayout,\n Panel,\n PanelProps,\n tokens,\n View,\n} from '@danske/sapphire-react';\nimport { ChevronLeft } from '@danske/sapphire-icons/react';\nimport { useSecondarySidebarContext } from './SecondarySidebarContext';\nimport {\n useIsSidebarCollapsed,\n useResponsiveSidebarContext,\n} from './ResponsiveSidebarContext';\n\nexport type SidebarPanelProps = Omit<\n PanelProps,\n 'isOpen' | 'size' | 'direction'\n> & { header: ReactNode };\n\nexport const SidebarPanel = ({\n children,\n header,\n ...props\n}: SidebarPanelProps) => {\n const { openedId, setOpenedId, content } = useSecondarySidebarContext();\n const responsiveContext = useResponsiveSidebarContext();\n\n if (!responsiveContext) {\n throw new Error(\n '<SidebarPanel> must be rendered inside a <Sidebar.ResponsiveProvider>'\n );\n }\n\n const { isPanelOpen, setPanelOpen } = responsiveContext;\n const isCollapsed = useIsSidebarCollapsed();\n\n useEffect(() => {\n if (!isCollapsed) {\n // if breakpoint changes, we want to close the panel until opened manually again\n setPanelOpen(false);\n }\n }, [isCollapsed]);\n\n return (\n <Panel\n {...props}\n isOpen={isPanelOpen}\n onClose={() => setPanelOpen(false)}\n onCloseTransitionDone={() => setOpenedId(null)}\n alignLeft\n isDismissable\n width={320}\n >\n <ModalLayout\n header={\n <ModalLayout.Header\n heading={openedId === null ? header : content?.header}\n backButton={\n openedId !== null && (\n <IconButton\n size=\"md\"\n aria-label=\"Back\"\n variant=\"tertiary\"\n marginLeft={`calc(-1 * ${tokens.size.spacingSm})`}\n onPress={() => setOpenedId(null)}\n >\n <ChevronLeft />\n </IconButton>\n )\n }\n />\n }\n body={\n <ModalLayout.Body\n noPadding\n UNSAFE_style={{\n paddingLeft: tokens.size.spacingMd.value,\n paddingRight: tokens.size.spacingMd.value,\n }}\n >\n <>\n <View isHidden={openedId !== null}>{children}</View>\n {openedId && content?.body}\n </>\n </ModalLayout.Body>\n }\n />\n </Panel>\n );\n};\n\nexport const SidebarPanelTrigger = ({\n children,\n}: {\n children: (triggerProps: any) => JSX.Element;\n}) => {\n const context = useResponsiveSidebarContext();\n if (!context) {\n throw new Error(\n '<Sidebar.PanelTrigger> should be rendered inside a <Sidebar.ResponsiveProvider>'\n );\n }\n const isCollapsed = useIsSidebarCollapsed();\n const panelTriggerProps = {\n onPress: () => {\n context.setPanelOpen(true);\n },\n };\n\n return isCollapsed ? children(panelTriggerProps) : null;\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { useControlledState } from '@react-stately/utils';
1
+ import { useControlledState } from 'react-stately/useControlledState';
2
2
  import { useMatchedBreakpoints } from '@danske/sapphire-react';
3
3
  import React, { useContext } from 'react';
4
4
 
@@ -28,14 +28,22 @@ const ResponsiveSidebarProvider = ({
28
28
  onPanelOpenChange,
29
29
  children
30
30
  }) => {
31
- const [isOpen, setOpen] = useControlledState(isPanelOpen, defaultIsPanelOpen != null ? defaultIsPanelOpen : false, onPanelOpenChange);
32
- return /* @__PURE__ */ React.createElement(ResponsiveSidebarContext.Provider, {
33
- value: {
34
- isPanelOpen: isOpen,
35
- setPanelOpen: setOpen,
36
- collapsed
37
- }
38
- }, children);
31
+ const [isOpen, setOpen] = useControlledState(
32
+ isPanelOpen,
33
+ defaultIsPanelOpen ?? false,
34
+ onPanelOpenChange
35
+ );
36
+ return /* @__PURE__ */ React.createElement(
37
+ ResponsiveSidebarContext.Provider,
38
+ {
39
+ value: {
40
+ isPanelOpen: isOpen,
41
+ setPanelOpen: setOpen,
42
+ collapsed
43
+ }
44
+ },
45
+ children
46
+ );
39
47
  };
40
48
 
41
49
  export { ResponsiveSidebarContext, ResponsiveSidebarProvider, useIsSidebarCollapsed, useResponsiveSidebarContext };
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveSidebarContext.js","sources":["../../../../src/Sidebar/src/ResponsiveSidebarContext.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { BreakpointKey, useMatchedBreakpoints } from '@danske/sapphire-react';\nimport React, { ReactNode, useContext } from 'react';\n\nexport interface ResponsiveSidebarContextValue {\n isPanelOpen: boolean;\n setPanelOpen: (open: boolean) => void;\n collapsed: boolean | BreakpointKey | undefined;\n}\n\nexport const ResponsiveSidebarContext =\n React.createContext<ResponsiveSidebarContextValue | null>(null);\n\nexport function useResponsiveSidebarContext() {\n return useContext(ResponsiveSidebarContext);\n}\n\n/**\n * Hook to determine if the sidebar should be collapsed.\n * Returns true if collapsed, false if expanded, or null if not in responsive mode.\n */\nexport function useIsSidebarCollapsed(): boolean | null {\n const context = useContext(ResponsiveSidebarContext);\n const matchedBreakpoints: string[] = useMatchedBreakpoints();\n\n if (!context) {\n return null;\n }\n\n const { collapsed } = context;\n\n // If collapsed is a boolean, use it directly\n if (typeof collapsed === 'boolean') {\n return collapsed;\n }\n\n // If collapsed is a breakpoint string, check if we're below that breakpoint\n if (typeof collapsed === 'string') {\n return !matchedBreakpoints.includes(collapsed);\n }\n\n // If collapsed is undefined, default to 'md' breakpoint behavior\n return !matchedBreakpoints.includes('md');\n}\n\nexport const ResponsiveSidebarProvider = ({\n collapsed,\n isPanelOpen,\n defaultIsPanelOpen,\n onPanelOpenChange,\n children,\n}: {\n /**\n * Controls whether the sidebar is collapsed.\n * - When `true`: sidebar is always collapsed (shows as panel)\n * - When `false`: sidebar is always expanded (shows as sidebar)\n * - When a breakpoint string (e.g., 'md', 'lg'): automatically collapses below that breakpoint\n * - When `undefined`: defaults to 'md' breakpoint behavior (collapses below medium screens)\n * @default undefined (equivalent to 'md')\n */\n collapsed?: boolean | BreakpointKey;\n\n /**\n * If the sidebar panel is open (controlled)\n */\n isPanelOpen?: boolean;\n\n /**\n * The default state of the panel (uncontrolled)\n */\n defaultIsPanelOpen?: boolean;\n\n /**\n * Callback for when the state of the panel changes\n */\n onPanelOpenChange?: (open: boolean) => void;\n children: ReactNode;\n}) => {\n const [isOpen, setOpen] = useControlledState<boolean>(\n isPanelOpen,\n defaultIsPanelOpen ?? false,\n onPanelOpenChange\n );\n\n return (\n <ResponsiveSidebarContext.Provider\n value={{\n isPanelOpen: isOpen,\n setPanelOpen: setOpen,\n collapsed,\n }}\n >\n {children}\n </ResponsiveSidebarContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;AAUa,MAAA,wBAAA,GACX,MAAM,aAAoD,CAAA,IAAA,EAAA;AAEd,SAAA,2BAAA,GAAA;AAC5C,EAAA,OAAO,UAAW,CAAA,wBAAA,CAAA,CAAA;AAAA,CAAA;AAOoC,SAAA,qBAAA,GAAA;AACtD,EAAA,MAAM,UAAU,UAAW,CAAA,wBAAA,CAAA,CAAA;AAC3B,EAAA,MAAM,kBAA+B,GAAA,qBAAA,EAAA,CAAA;AAErC,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAGT,EAAA,MAAM,EAAE,SAAc,EAAA,GAAA,OAAA,CAAA;AAGtB,EAAI,IAAA,OAAO,cAAc,SAAW,EAAA;AAClC,IAAO,OAAA,SAAA,CAAA;AAAA,GAAA;AAIT,EAAI,IAAA,OAAO,cAAc,QAAU,EAAA;AACjC,IAAO,OAAA,CAAC,mBAAmB,QAAS,CAAA,SAAA,CAAA,CAAA;AAAA,GAAA;AAItC,EAAO,OAAA,CAAC,mBAAmB,QAAS,CAAA,IAAA,CAAA,CAAA;AAAA,CAAA;AAG/B,MAAM,4BAA4B,CAAC;AAAA,EACxC,SAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,CA2BI,KAAA;AACJ,EAAA,MAAM,CAAC,MAAQ,EAAA,OAAA,CAAA,GAAW,kBACxB,CAAA,WAAA,EACA,kDAAsB,KACtB,EAAA,iBAAA,CAAA,CAAA;AAGF,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,yBAAyB,QAA1B,EAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,WAAa,EAAA,MAAA;AAAA,MACb,YAAc,EAAA,OAAA;AAAA,MACd,SAAA;AAAA,KAAA;AAAA,GAGD,EAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"ResponsiveSidebarContext.js","sources":["../../../../src/Sidebar/src/ResponsiveSidebarContext.tsx"],"sourcesContent":["import { useControlledState } from 'react-stately/useControlledState';\nimport { BreakpointKey, useMatchedBreakpoints } from '@danske/sapphire-react';\nimport React, { ReactNode, useContext } from 'react';\n\nexport interface ResponsiveSidebarContextValue {\n isPanelOpen: boolean;\n setPanelOpen: (open: boolean) => void;\n collapsed: boolean | BreakpointKey | undefined;\n}\n\nexport const ResponsiveSidebarContext =\n React.createContext<ResponsiveSidebarContextValue | null>(null);\n\nexport function useResponsiveSidebarContext() {\n return useContext(ResponsiveSidebarContext);\n}\n\n/**\n * Hook to determine if the sidebar should be collapsed.\n * Returns true if collapsed, false if expanded, or null if not in responsive mode.\n */\nexport function useIsSidebarCollapsed(): boolean | null {\n const context = useContext(ResponsiveSidebarContext);\n const matchedBreakpoints: string[] = useMatchedBreakpoints();\n\n if (!context) {\n return null;\n }\n\n const { collapsed } = context;\n\n // If collapsed is a boolean, use it directly\n if (typeof collapsed === 'boolean') {\n return collapsed;\n }\n\n // If collapsed is a breakpoint string, check if we're below that breakpoint\n if (typeof collapsed === 'string') {\n return !matchedBreakpoints.includes(collapsed);\n }\n\n // If collapsed is undefined, default to 'md' breakpoint behavior\n return !matchedBreakpoints.includes('md');\n}\n\nexport const ResponsiveSidebarProvider = ({\n collapsed,\n isPanelOpen,\n defaultIsPanelOpen,\n onPanelOpenChange,\n children,\n}: {\n /**\n * Controls whether the sidebar is collapsed.\n * - When `true`: sidebar is always collapsed (shows as panel)\n * - When `false`: sidebar is always expanded (shows as sidebar)\n * - When a breakpoint string (e.g., 'md', 'lg'): automatically collapses below that breakpoint\n * - When `undefined`: defaults to 'md' breakpoint behavior (collapses below medium screens)\n * @default undefined (equivalent to 'md')\n */\n collapsed?: boolean | BreakpointKey;\n\n /**\n * If the sidebar panel is open (controlled)\n */\n isPanelOpen?: boolean;\n\n /**\n * The default state of the panel (uncontrolled)\n */\n defaultIsPanelOpen?: boolean;\n\n /**\n * Callback for when the state of the panel changes\n */\n onPanelOpenChange?: (open: boolean) => void;\n children: ReactNode;\n}) => {\n const [isOpen, setOpen] = useControlledState<boolean>(\n isPanelOpen,\n defaultIsPanelOpen ?? false,\n onPanelOpenChange\n );\n\n return (\n <ResponsiveSidebarContext.Provider\n value={{\n isPanelOpen: isOpen,\n setPanelOpen: setOpen,\n collapsed,\n }}\n >\n {children}\n </ResponsiveSidebarContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;AAUO,MAAM,wBAAA,GACX,KAAA,CAAM,aAAA,CAAoD,IAAI;AAEzD,SAAS,2BAAA,GAA8B;AAC5C,EAAA,OAAO,WAAW,wBAAwB,CAAA;AAC5C;AAMO,SAAS,qBAAA,GAAwC;AACtD,EAAA,MAAM,OAAA,GAAU,WAAW,wBAAwB,CAAA;AACnD,EAAA,MAAM,qBAA+B,qBAAA,EAAsB;AAE3D,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,WAAU,GAAI,OAAA;AAGtB,EAAA,IAAI,OAAO,cAAc,SAAA,EAAW;AAClC,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,IAAA,OAAO,CAAC,kBAAA,CAAmB,QAAA,CAAS,SAAS,CAAA;AAAA,EAC/C;AAGA,EAAA,OAAO,CAAC,kBAAA,CAAmB,QAAA,CAAS,IAAI,CAAA;AAC1C;AAEO,MAAM,4BAA4B,CAAC;AAAA,EACxC,SAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KA0BM;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,kBAAA;AAAA,IACxB,WAAA;AAAA,IACA,kBAAA,IAAsB,KAAA;AAAA,IACtB;AAAA,GACF;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,wBAAA,CAAyB,QAAA;AAAA,IAAzB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA,EAAa,MAAA;AAAA,QACb,YAAA,EAAc,OAAA;AAAA,QACd;AAAA;AACF,KAAA;AAAA,IAEC;AAAA,GACH;AAEJ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import React, { useContext, useState } from 'react';
2
- import { useControlledState } from '@react-stately/utils';
2
+ import { useControlledState } from 'react-stately/useControlledState';
3
3
 
4
4
  const SecondarySidebarContext = React.createContext(null);
5
5
  const useSecondarySidebarContext = () => {
@@ -16,19 +16,22 @@ const SecondarySidebarProvider = ({
16
16
  themeVariant,
17
17
  children
18
18
  }) => {
19
- var _a, _b, _c, _d;
20
19
  const context = useContext(SecondarySidebarContext);
21
- const [secondarySidebarId, setSecondarySidebarId] = useControlledState(openedId, defaultOpenedId != null ? defaultOpenedId : null, onOpenedIdChange);
20
+ const [secondarySidebarId, setSecondarySidebarId] = useControlledState(openedId, defaultOpenedId ?? null, onOpenedIdChange);
22
21
  const [content, setContent] = useState(null);
23
- return /* @__PURE__ */ React.createElement(SecondarySidebarContext.Provider, {
24
- value: {
25
- openedId: (_a = context == null ? void 0 : context.openedId) != null ? _a : secondarySidebarId,
26
- setOpenedId: (_b = context == null ? void 0 : context.setOpenedId) != null ? _b : setSecondarySidebarId,
27
- content: (_c = context == null ? void 0 : context.content) != null ? _c : content,
28
- setContent: (_d = context == null ? void 0 : context.setContent) != null ? _d : setContent,
29
- themeVariant: themeVariant != null ? themeVariant : context == null ? void 0 : context.themeVariant
30
- }
31
- }, children);
22
+ return /* @__PURE__ */ React.createElement(
23
+ SecondarySidebarContext.Provider,
24
+ {
25
+ value: {
26
+ openedId: context?.openedId ?? secondarySidebarId,
27
+ setOpenedId: context?.setOpenedId ?? setSecondarySidebarId,
28
+ content: context?.content ?? content,
29
+ setContent: context?.setContent ?? setContent,
30
+ themeVariant: themeVariant ?? context?.themeVariant
31
+ }
32
+ },
33
+ children
34
+ );
32
35
  };
33
36
 
34
37
  export { SecondarySidebarContext, SecondarySidebarProvider, useSecondarySidebarContext };
@@ -1 +1 @@
1
- {"version":3,"file":"SecondarySidebarContext.js","sources":["../../../../src/Sidebar/src/SecondarySidebarContext.tsx"],"sourcesContent":["import React, { ReactNode, useContext, useState } from 'react';\nimport { ThemeVariant } from '@danske/sapphire-react';\nimport { useControlledState } from '@react-stately/utils';\n\nexport type SecondarySidebarContent = {\n header: ReactNode;\n body: ReactNode;\n} | null;\n\nexport interface SecondarySidebarContextValue {\n content: SecondarySidebarContent;\n setContent: (content: SecondarySidebarContent) => void;\n openedId: string | null;\n setOpenedId: (id: string | null) => void;\n themeVariant: ThemeVariant | undefined;\n}\n\nexport const SecondarySidebarContext =\n React.createContext<SecondarySidebarContextValue | null>(null);\n\nexport const useSecondarySidebarContext = (): SecondarySidebarContextValue => {\n const context = useContext(SecondarySidebarContext);\n if (context) {\n return context;\n }\n throw new Error('This should be rendered inside a <Sidebar />.');\n};\n\nexport const SecondarySidebarProvider = ({\n openedId,\n defaultOpenedId,\n onOpenedIdChange,\n themeVariant,\n children,\n}: {\n openedId?: string | null;\n defaultOpenedId?: string | null;\n onOpenedIdChange?: (id: string | null) => void;\n themeVariant?: ThemeVariant;\n children: ReactNode;\n}) => {\n const context = useContext(SecondarySidebarContext);\n\n const [secondarySidebarId, setSecondarySidebarId] = useControlledState<\n string | null\n >(openedId, defaultOpenedId ?? null, onOpenedIdChange);\n\n const [content, setContent] = useState<SecondarySidebarContent>(null);\n\n return (\n <SecondarySidebarContext.Provider\n value={{\n openedId: context?.openedId ?? secondarySidebarId,\n setOpenedId: context?.setOpenedId ?? setSecondarySidebarId,\n content: context?.content ?? content,\n setContent: context?.setContent ?? setContent,\n themeVariant: themeVariant ?? context?.themeVariant,\n }}\n >\n {children}\n </SecondarySidebarContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;AAiBa,MAAA,uBAAA,GACX,MAAM,aAAmD,CAAA,IAAA,EAAA;AAEpD,MAAM,6BAA6B,MAAoC;AAC5E,EAAA,MAAM,UAAU,UAAW,CAAA,uBAAA,CAAA,CAAA;AAC3B,EAAA,IAAI,OAAS,EAAA;AACX,IAAO,OAAA,OAAA,CAAA;AAAA,GAAA;AAET,EAAA,MAAM,IAAI,KAAM,CAAA,+CAAA,CAAA,CAAA;AAAA,EAAA;AAGX,MAAM,2BAA2B,CAAC;AAAA,EACvC,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,CAOI,KAAA;AAxCN,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyCE,EAAA,MAAM,UAAU,UAAW,CAAA,uBAAA,CAAA,CAAA;AAE3B,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAA,CAAA,GAAyB,kBAElD,CAAA,QAAA,EAAU,4CAAmB,IAAM,EAAA,gBAAA,CAAA,CAAA;AAErC,EAAM,MAAA,CAAC,OAAS,EAAA,UAAA,CAAA,GAAc,QAAkC,CAAA,IAAA,CAAA,CAAA;AAEhE,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,wBAAwB,QAAzB,EAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,QAAA,EAAU,CAAS,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,KAAT,IAAqB,GAAA,EAAA,GAAA,kBAAA;AAAA,MAC/B,WAAA,EAAa,CAAS,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,WAAA,KAAT,IAAwB,GAAA,EAAA,GAAA,qBAAA;AAAA,MACrC,OAAA,EAAS,CAAS,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,OAAA,KAAT,IAAoB,GAAA,EAAA,GAAA,OAAA;AAAA,MAC7B,UAAA,EAAY,CAAS,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,UAAA,KAAT,IAAuB,GAAA,EAAA,GAAA,UAAA;AAAA,MACnC,YAAA,EAAc,sCAAgB,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,YAAA;AAAA,KAAA;AAAA,GAGxC,EAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"SecondarySidebarContext.js","sources":["../../../../src/Sidebar/src/SecondarySidebarContext.tsx"],"sourcesContent":["import React, { ReactNode, useContext, useState } from 'react';\nimport { ThemeVariant } from '@danske/sapphire-react';\nimport { useControlledState } from 'react-stately/useControlledState';\n\nexport type SecondarySidebarContent = {\n header: ReactNode;\n body: ReactNode;\n} | null;\n\nexport interface SecondarySidebarContextValue {\n content: SecondarySidebarContent;\n setContent: (content: SecondarySidebarContent) => void;\n openedId: string | null;\n setOpenedId: (id: string | null) => void;\n themeVariant: ThemeVariant | undefined;\n}\n\nexport const SecondarySidebarContext =\n React.createContext<SecondarySidebarContextValue | null>(null);\n\nexport const useSecondarySidebarContext = (): SecondarySidebarContextValue => {\n const context = useContext(SecondarySidebarContext);\n if (context) {\n return context;\n }\n throw new Error('This should be rendered inside a <Sidebar />.');\n};\n\nexport const SecondarySidebarProvider = ({\n openedId,\n defaultOpenedId,\n onOpenedIdChange,\n themeVariant,\n children,\n}: {\n openedId?: string | null;\n defaultOpenedId?: string | null;\n onOpenedIdChange?: (id: string | null) => void;\n themeVariant?: ThemeVariant;\n children: ReactNode;\n}) => {\n const context = useContext(SecondarySidebarContext);\n\n const [secondarySidebarId, setSecondarySidebarId] = useControlledState<\n string | null\n >(openedId, defaultOpenedId ?? null, onOpenedIdChange);\n\n const [content, setContent] = useState<SecondarySidebarContent>(null);\n\n return (\n <SecondarySidebarContext.Provider\n value={{\n openedId: context?.openedId ?? secondarySidebarId,\n setOpenedId: context?.setOpenedId ?? setSecondarySidebarId,\n content: context?.content ?? content,\n setContent: context?.setContent ?? setContent,\n themeVariant: themeVariant ?? context?.themeVariant,\n }}\n >\n {children}\n </SecondarySidebarContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;AAiBO,MAAM,uBAAA,GACX,KAAA,CAAM,aAAA,CAAmD,IAAI;AAExD,MAAM,6BAA6B,MAAoC;AAC5E,EAAA,MAAM,OAAA,GAAU,WAAW,uBAAuB,CAAA;AAClD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AACjE;AAEO,MAAM,2BAA2B,CAAC;AAAA,EACvC,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAMM;AACJ,EAAA,MAAM,OAAA,GAAU,WAAW,uBAAuB,CAAA;AAElD,EAAA,MAAM,CAAC,oBAAoB,qBAAqB,CAAA,GAAI,mBAElD,QAAA,EAAU,eAAA,IAAmB,MAAM,gBAAgB,CAAA;AAErD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkC,IAAI,CAAA;AAEpE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,uBAAA,CAAwB,QAAA;AAAA,IAAxB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,SAAS,QAAA,IAAY,kBAAA;AAAA,QAC/B,WAAA,EAAa,SAAS,WAAA,IAAe,qBAAA;AAAA,QACrC,OAAA,EAAS,SAAS,OAAA,IAAW,OAAA;AAAA,QAC7B,UAAA,EAAY,SAAS,UAAA,IAAc,UAAA;AAAA,QACnC,YAAA,EAAc,gBAAgB,OAAA,EAAS;AAAA;AACzC,KAAA;AAAA,IAEC;AAAA,GACH;AAEJ;;;;"}
@@ -2,64 +2,51 @@ import React from 'react';
2
2
  import clsx from 'clsx';
3
3
  import styles from '@danske/sapphire-css/components/sidebar/sidebar.module.css';
4
4
  import { useThemeCheck, useSapphireStyleProps } from '@danske/sapphire-react';
5
- import { useListBoxSection } from '@react-aria/listbox';
6
- import { filterDOMProps } from '@react-aria/utils';
5
+ import { useListBoxSection } from 'react-aria/useListBox';
6
+ import { filterDOMProps } from 'react-aria/filterDOMProps';
7
7
 
8
- var __defProp = Object.defineProperty;
9
- var __defProps = Object.defineProperties;
10
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
11
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
12
- var __hasOwnProp = Object.prototype.hasOwnProperty;
13
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
14
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
- var __spreadValues = (a, b) => {
16
- for (var prop in b || (b = {}))
17
- if (__hasOwnProp.call(b, prop))
18
- __defNormalProp(a, prop, b[prop]);
19
- if (__getOwnPropSymbols)
20
- for (var prop of __getOwnPropSymbols(b)) {
21
- if (__propIsEnum.call(b, prop))
22
- __defNormalProp(a, prop, b[prop]);
23
- }
24
- return a;
25
- };
26
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
27
- var __objRest = (source, exclude) => {
28
- var target = {};
29
- for (var prop in source)
30
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
31
- target[prop] = source[prop];
32
- if (source != null && __getOwnPropSymbols)
33
- for (var prop of __getOwnPropSymbols(source)) {
34
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
35
- target[prop] = source[prop];
36
- }
37
- return target;
38
- };
39
- const SidebarSection = (_a) => {
40
- var _b = _a, {
41
- title,
42
- "aria-label": label,
43
- children
44
- } = _b, props = __objRest(_b, [
45
- "title",
46
- "aria-label",
47
- "children"
48
- ]);
8
+ const SidebarSection = ({
9
+ title,
10
+ "aria-label": label,
11
+ children,
12
+ ...props
13
+ }) => {
49
14
  useThemeCheck();
50
15
  const { styleProps } = useSapphireStyleProps(props);
51
16
  const { itemProps, headingProps, groupProps } = useListBoxSection({
52
17
  heading: title,
53
18
  "aria-label": label
54
19
  });
55
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("li", {
56
- role: "separator",
57
- className: clsx(styles["sapphire-sidebar__separator"])
58
- }), /* @__PURE__ */ React.createElement("li", __spreadValues(__spreadValues(__spreadValues({}, itemProps), styleProps), filterDOMProps(props, { global: true })), title && /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, headingProps), {
59
- className: clsx(styles["sapphire-sidebar__section-header"])
60
- }), title), /* @__PURE__ */ React.createElement("ul", __spreadProps(__spreadValues({}, groupProps), {
61
- className: clsx(styles["sapphire-sidebar__section"])
62
- }), children)));
20
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
21
+ "li",
22
+ {
23
+ role: "separator",
24
+ className: clsx(styles["sapphire-sidebar__separator"])
25
+ }
26
+ ), /* @__PURE__ */ React.createElement(
27
+ "li",
28
+ {
29
+ ...itemProps,
30
+ ...styleProps,
31
+ ...filterDOMProps(props, { global: true })
32
+ },
33
+ title && /* @__PURE__ */ React.createElement(
34
+ "div",
35
+ {
36
+ ...headingProps,
37
+ className: clsx(styles["sapphire-sidebar__section-header"])
38
+ },
39
+ title
40
+ ),
41
+ /* @__PURE__ */ React.createElement(
42
+ "ul",
43
+ {
44
+ ...groupProps,
45
+ className: clsx(styles["sapphire-sidebar__section"])
46
+ },
47
+ children
48
+ )
49
+ ));
63
50
  };
64
51
 
65
52
  export { SidebarSection };
@@ -1 +1 @@
1
- {"version":3,"file":"Section.js","sources":["../../../../src/Sidebar/src/Section.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/sidebar/sidebar.module.css';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '@danske/sapphire-react';\nimport { useListBoxSection } from '@react-aria/listbox';\nimport { filterDOMProps } from '@react-aria/utils';\nimport { DOMProps } from '@react-types/shared';\n\nexport type SidebarSectionProps = DOMProps &\n SapphireStyleProps & {\n /**\n * Section title\n * If not provided, please pass the `aria-label`\n */\n title?: string;\n\n /**\n * Section aria title\n */\n 'aria-label'?: string;\n\n children?: ReactNode;\n };\n\nexport const SidebarSection = ({\n title,\n 'aria-label': label,\n children,\n ...props\n}: SidebarSectionProps) => {\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n const { itemProps, headingProps, groupProps } = useListBoxSection({\n heading: title,\n 'aria-label': label,\n });\n\n return (\n <>\n <li\n role=\"separator\"\n className={clsx(styles['sapphire-sidebar__separator'])}\n ></li>\n <li\n {...itemProps}\n {...styleProps}\n {...filterDOMProps(props, { global: true })}\n >\n {title && (\n <div\n {...headingProps}\n className={clsx(styles['sapphire-sidebar__section-header'])}\n >\n {title}\n </div>\n )}\n <ul\n {...groupProps}\n className={clsx(styles['sapphire-sidebar__section'])}\n >\n {children}\n </ul>\n </li>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4Ba,MAAA,cAAA,GAAiB,CAAC,EAKJ,KAAA;AALI,EAC7B,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,KAAA;AAAA,IACA,YAAc,EAAA,KAAA;AAAA,IACd,QAAA;AAAA,GAH6B,GAAA,EAAA,EAI1B,kBAJ0B,EAI1B,EAAA;AAAA,IAHH,OAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,GAAA,CAAA,CAAA;AAGA,EAAA,aAAA,EAAA,CAAA;AACA,EAAM,MAAA,EAAE,eAAe,qBAAsB,CAAA,KAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,EAAE,SAAA,EAAW,YAAc,EAAA,UAAA,EAAA,GAAe,iBAAkB,CAAA;AAAA,IAChE,OAAS,EAAA,KAAA;AAAA,IACT,YAAc,EAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAGhB,EACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,IAAD,EAAA;AAAA,IACE,IAAK,EAAA,WAAA;AAAA,IACL,SAAA,EAAW,KAAK,MAAO,CAAA,6BAAA,CAAA,CAAA;AAAA,GAAA,CAAA,kBAExB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAD,cACM,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EACA,aACA,cAAe,CAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,IAEnC,EAAA,CAAA,CAAA,EAAA,KAAA,oBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,iCACM,YADN,CAAA,EAAA;AAAA,IAEE,SAAA,EAAW,KAAK,MAAO,CAAA,kCAAA,CAAA,CAAA;AAAA,GAAA,CAAA,EAEtB,KAGL,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,UADN,CAAA,EAAA;AAAA,IAEE,SAAA,EAAW,KAAK,MAAO,CAAA,2BAAA,CAAA,CAAA;AAAA,GAEtB,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Section.js","sources":["../../../../src/Sidebar/src/Section.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/sidebar/sidebar.module.css';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '@danske/sapphire-react';\nimport { useListBoxSection } from 'react-aria/useListBox';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport { DOMProps } from '@react-types/shared';\n\nexport type SidebarSectionProps = DOMProps &\n SapphireStyleProps & {\n /**\n * Section title\n * If not provided, please pass the `aria-label`\n */\n title?: string;\n\n /**\n * Section aria title\n */\n 'aria-label'?: string;\n\n children?: ReactNode;\n };\n\nexport const SidebarSection = ({\n title,\n 'aria-label': label,\n children,\n ...props\n}: SidebarSectionProps) => {\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n const { itemProps, headingProps, groupProps } = useListBoxSection({\n heading: title,\n 'aria-label': label,\n });\n\n return (\n <>\n <li\n role=\"separator\"\n className={clsx(styles['sapphire-sidebar__separator'])}\n ></li>\n <li\n {...itemProps}\n {...styleProps}\n {...filterDOMProps(props, { global: true })}\n >\n {title && (\n <div\n {...headingProps}\n className={clsx(styles['sapphire-sidebar__section-header'])}\n >\n {title}\n </div>\n )}\n <ul\n {...groupProps}\n className={clsx(styles['sapphire-sidebar__section'])}\n >\n {children}\n </ul>\n </li>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AA4BO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,KAAA;AAAA,EACA,YAAA,EAAc,KAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA2B;AACzB,EAAA,aAAA,EAAc;AACd,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,KAAK,CAAA;AAClD,EAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,UAAA,KAAe,iBAAA,CAAkB;AAAA,IAChE,OAAA,EAAS,KAAA;AAAA,IACT,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,WAAA;AAAA,MACL,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,6BAA6B,CAAC;AAAA;AAAA,GACtD,kBACD,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACH,GAAG,UAAA;AAAA,MACH,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,KAAA;AAAA,IAEzC,KAAA,oBACC,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,YAAA;AAAA,QACJ,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,kCAAkC,CAAC;AAAA,OAAA;AAAA,MAEzD;AAAA,KACH;AAAA,oBAEF,KAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACE,GAAG,UAAA;AAAA,QACJ,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,2BAA2B,CAAC;AAAA,OAAA;AAAA,MAElD;AAAA;AACH,GAEJ,CAAA;AAEJ;;;;"}
@@ -1,114 +1,86 @@
1
1
  import clsx from 'clsx';
2
2
  import styles from '@danske/sapphire-css/components/sidebar/sidebar.module.css';
3
- import { useThemeCheck, useSapphireStyleProps, ThemeRoot } from '@danske/sapphire-react';
3
+ import { useThemeCheck, ThemeRoot, useSapphireStyleProps } from '@danske/sapphire-react';
4
4
  import React from 'react';
5
- import { mergeProps, filterDOMProps } from '@react-aria/utils';
6
- import { useFocusWithin } from '@react-aria/interactions';
5
+ import { filterDOMProps } from 'react-aria/filterDOMProps';
6
+ import { mergeProps } from 'react-aria/mergeProps';
7
+ import { useFocusWithin } from 'react-aria/useFocusWithin';
7
8
  import { SidebarPanel } from './Panel.js';
8
9
  import { useSidebar } from './useSidebar.js';
9
10
  import { SecondarySidebarProvider } from './SecondarySidebarContext.js';
10
11
  import { useResponsiveSidebarContext, useIsSidebarCollapsed } from './ResponsiveSidebarContext.js';
11
12
 
12
- var __defProp = Object.defineProperty;
13
- var __defProps = Object.defineProperties;
14
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
15
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
16
- var __hasOwnProp = Object.prototype.hasOwnProperty;
17
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
18
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
19
- var __spreadValues = (a, b) => {
20
- for (var prop in b || (b = {}))
21
- if (__hasOwnProp.call(b, prop))
22
- __defNormalProp(a, prop, b[prop]);
23
- if (__getOwnPropSymbols)
24
- for (var prop of __getOwnPropSymbols(b)) {
25
- if (__propIsEnum.call(b, prop))
26
- __defNormalProp(a, prop, b[prop]);
27
- }
28
- return a;
29
- };
30
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
31
- var __objRest = (source, exclude) => {
32
- var target = {};
33
- for (var prop in source)
34
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
35
- target[prop] = source[prop];
36
- if (source != null && __getOwnPropSymbols)
37
- for (var prop of __getOwnPropSymbols(source)) {
38
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
39
- target[prop] = source[prop];
40
- }
41
- return target;
42
- };
43
- const Sidebar = (_a) => {
44
- var _b = _a, {
45
- themeVariant,
46
- openedSecondarySidebar,
47
- defaultOpenedSecondarySidebar,
48
- onSecondarySidebarChange,
49
- secondarySidebarThemeVariant,
50
- children
51
- } = _b, props = __objRest(_b, [
52
- "themeVariant",
53
- "openedSecondarySidebar",
54
- "defaultOpenedSecondarySidebar",
55
- "onSecondarySidebarChange",
56
- "secondarySidebarThemeVariant",
57
- "children"
58
- ]);
13
+ const Sidebar = ({
14
+ themeVariant,
15
+ openedSecondarySidebar,
16
+ defaultOpenedSecondarySidebar,
17
+ onSecondarySidebarChange,
18
+ secondarySidebarThemeVariant,
19
+ children,
20
+ ...props
21
+ }) => {
59
22
  useThemeCheck();
60
- return /* @__PURE__ */ React.createElement(SecondarySidebarProvider, {
61
- openedId: openedSecondarySidebar,
62
- defaultOpenedId: defaultOpenedSecondarySidebar,
63
- onOpenedIdChange: onSecondarySidebarChange,
64
- themeVariant: secondarySidebarThemeVariant
65
- }, /* @__PURE__ */ React.createElement(WithThemeRoot, {
66
- themeVariant
67
- }, /* @__PURE__ */ React.createElement(SidebarContent, __spreadValues({}, props), children)));
23
+ return /* @__PURE__ */ React.createElement(
24
+ SecondarySidebarProvider,
25
+ {
26
+ openedId: openedSecondarySidebar,
27
+ defaultOpenedId: defaultOpenedSecondarySidebar,
28
+ onOpenedIdChange: onSecondarySidebarChange,
29
+ themeVariant: secondarySidebarThemeVariant
30
+ },
31
+ /* @__PURE__ */ React.createElement(WithThemeRoot, { themeVariant }, /* @__PURE__ */ React.createElement(SidebarContent, { ...props }, children))
32
+ );
68
33
  };
69
- const SidebarContent = (_c) => {
70
- var _d = _c, {
71
- onBlurWithin,
72
- onFocusWithin,
73
- onFocusWithinChange,
74
- closeOnBlurWithin = true,
75
- header,
76
- panelHeader,
77
- children
78
- } = _d, props = __objRest(_d, [
79
- "onBlurWithin",
80
- "onFocusWithin",
81
- "onFocusWithinChange",
82
- "closeOnBlurWithin",
83
- "header",
84
- "panelHeader",
85
- "children"
86
- ]);
34
+ const SidebarContent = ({
35
+ onBlurWithin,
36
+ onFocusWithin,
37
+ onFocusWithinChange,
38
+ closeOnBlurWithin = true,
39
+ header,
40
+ panelHeader,
41
+ children,
42
+ ...props
43
+ }) => {
87
44
  const { styleProps } = useSapphireStyleProps(props);
88
45
  const { sidebarProps } = useSidebar();
89
- const { focusWithinProps } = useFocusWithin(mergeProps({
90
- onBlurWithin,
91
- onFocusWithin,
92
- onFocusWithinChange
93
- }, closeOnBlurWithin ? sidebarProps : {}));
46
+ const { focusWithinProps } = useFocusWithin(
47
+ mergeProps(
48
+ {
49
+ onBlurWithin,
50
+ onFocusWithin,
51
+ onFocusWithinChange
52
+ },
53
+ closeOnBlurWithin ? sidebarProps : {}
54
+ )
55
+ );
94
56
  const responsiveSidebarContext = useResponsiveSidebarContext();
95
57
  const isCollapsed = useIsSidebarCollapsed();
96
- return /* @__PURE__ */ React.createElement(React.Fragment, null, !isCollapsed && /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues(__spreadValues(__spreadValues({}, styleProps), filterDOMProps(props, { global: true })), focusWithinProps), {
97
- className: clsx(styles["sapphire-sidebar"]),
98
- tabIndex: -1
99
- }), header, children), responsiveSidebarContext && /* @__PURE__ */ React.createElement(SidebarPanel, {
100
- header: panelHeader
101
- }, children));
58
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, !isCollapsed && /* @__PURE__ */ React.createElement(
59
+ "div",
60
+ {
61
+ ...styleProps,
62
+ ...filterDOMProps(props, { global: true }),
63
+ ...focusWithinProps,
64
+ className: clsx(styles["sapphire-sidebar"]),
65
+ tabIndex: -1
66
+ },
67
+ header,
68
+ children
69
+ ), responsiveSidebarContext && /* @__PURE__ */ React.createElement(SidebarPanel, { header: panelHeader }, children));
102
70
  };
103
71
  const WithThemeRoot = ({
104
72
  children,
105
73
  themeVariant
106
- }) => themeVariant ? /* @__PURE__ */ React.createElement(ThemeRoot, {
107
- variant: themeVariant,
108
- noSurface: true,
109
- height: "100%",
110
- width: "min-content"
111
- }, children) : /* @__PURE__ */ React.createElement(React.Fragment, null, children);
74
+ }) => themeVariant ? /* @__PURE__ */ React.createElement(
75
+ ThemeRoot,
76
+ {
77
+ variant: themeVariant,
78
+ noSurface: true,
79
+ height: "100%",
80
+ width: "min-content"
81
+ },
82
+ children
83
+ ) : /* @__PURE__ */ React.createElement(React.Fragment, null, children);
112
84
 
113
85
  export { Sidebar };
114
86
  //# sourceMappingURL=Sidebar.js.map