@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.
- package/build/cjs/index.js +1607 -2284
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/index.js.map +1 -1
- package/build/esm/Accordion/src/Accordion.js +44 -75
- package/build/esm/Accordion/src/Accordion.js.map +1 -1
- package/build/esm/Accordion/src/AccordionContext.js +3 -1
- package/build/esm/Accordion/src/AccordionContext.js.map +1 -1
- package/build/esm/Accordion/src/AccordionHeading.js +23 -55
- package/build/esm/Accordion/src/AccordionHeading.js.map +1 -1
- package/build/esm/Accordion/src/AccordionItem.js +18 -44
- package/build/esm/Accordion/src/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/src/AccordionPanel.js +28 -45
- package/build/esm/Accordion/src/AccordionPanel.js.map +1 -1
- package/build/esm/Accordion/src/utils.js.map +1 -1
- package/build/esm/Alert/src/Alert.js +27 -65
- package/build/esm/Alert/src/Alert.js.map +1 -1
- package/build/esm/Amount/src/Amount.js +41 -63
- package/build/esm/Amount/src/Amount.js.map +1 -1
- package/build/esm/Amount/src/useGroupAmount.js +4 -1
- package/build/esm/Amount/src/useGroupAmount.js.map +1 -1
- package/build/esm/Autocomplete/i18n/da-DK.json.js +6 -0
- package/build/esm/Autocomplete/i18n/da-DK.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/de-DE.json.js +6 -0
- package/build/esm/Autocomplete/i18n/de-DE.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/en-US.json.js +6 -0
- package/build/esm/Autocomplete/i18n/en-US.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/fi-FI.json.js +6 -0
- package/build/esm/Autocomplete/i18n/fi-FI.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/index.js +9 -9
- package/build/esm/Autocomplete/i18n/index.js.map +1 -1
- package/build/esm/Autocomplete/i18n/nb-NO.json.js +6 -0
- package/build/esm/Autocomplete/i18n/nb-NO.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/pl-PL.json.js +6 -0
- package/build/esm/Autocomplete/i18n/pl-PL.json.js.map +1 -0
- package/build/esm/Autocomplete/i18n/sv-SE.json.js +6 -0
- package/build/esm/Autocomplete/i18n/sv-SE.json.js.map +1 -0
- package/build/esm/Autocomplete/src/Autocomplete.js +57 -76
- package/build/esm/Autocomplete/src/Autocomplete.js.map +1 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItem.js +46 -52
- package/build/esm/Breadcrumbs/src/BreadcrumbItem.js.map +1 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js +17 -45
- package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js.map +1 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js +25 -46
- package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js.map +1 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js +18 -11
- package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +1 -1
- package/build/esm/Breadcrumbs/src/Breadcrumbs.js +47 -64
- package/build/esm/Breadcrumbs/src/Breadcrumbs.js.map +1 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js +8 -6
- package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js.map +1 -1
- package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js +6 -6
- package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js.map +1 -1
- package/build/esm/FileDropzone/i18n/{da-DK.js → da-DK.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/da-DK.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/{de-DE.js → de-DE.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/de-DE.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/{en-US.js → en-US.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/en-US.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/{fi-FI.js → fi-FI.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/fi-FI.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/index.js +9 -9
- package/build/esm/FileDropzone/i18n/index.js.map +1 -1
- package/build/esm/FileDropzone/i18n/{nb-NO.js → nb-NO.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/nb-NO.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/{pl-PL.js → pl-PL.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/pl-PL.json.js.map +1 -0
- package/build/esm/FileDropzone/i18n/{sv-SE.js → sv-SE.json.js} +3 -3
- package/build/esm/FileDropzone/i18n/sv-SE.json.js.map +1 -0
- package/build/esm/FileDropzone/src/FileDropzone.js +68 -88
- package/build/esm/FileDropzone/src/FileDropzone.js.map +1 -1
- package/build/esm/FileDropzone/src/FileTrigger.js +29 -61
- package/build/esm/FileDropzone/src/FileTrigger.js.map +1 -1
- package/build/esm/FileDropzone/src/utils.js.map +1 -1
- package/build/esm/Filtering/src/FilterDropdown.js +91 -113
- package/build/esm/Filtering/src/FilterDropdown.js.map +1 -1
- package/build/esm/Filtering/src/SearchableSelectFilter.js +53 -70
- package/build/esm/Filtering/src/SearchableSelectFilter.js.map +1 -1
- package/build/esm/Flag/src/Flag.js +5 -37
- package/build/esm/Flag/src/Flag.js.map +1 -1
- package/build/esm/LabeledValue/src/LabeledValue.js +21 -55
- package/build/esm/LabeledValue/src/LabeledValue.js.map +1 -1
- package/build/esm/NumberField/i18n/da-DK.json.js +9 -0
- package/build/esm/NumberField/i18n/da-DK.json.js.map +1 -0
- package/build/esm/NumberField/i18n/de-DE.json.js +9 -0
- package/build/esm/NumberField/i18n/de-DE.json.js.map +1 -0
- package/build/esm/NumberField/i18n/en-US.json.js +9 -0
- package/build/esm/NumberField/i18n/en-US.json.js.map +1 -0
- package/build/esm/NumberField/i18n/fi-FI.json.js +9 -0
- package/build/esm/NumberField/i18n/fi-FI.json.js.map +1 -0
- package/build/esm/NumberField/i18n/index.js +9 -9
- package/build/esm/NumberField/i18n/index.js.map +1 -1
- package/build/esm/NumberField/i18n/nb-NO.json.js +9 -0
- package/build/esm/NumberField/i18n/nb-NO.json.js.map +1 -0
- package/build/esm/NumberField/i18n/pl-PL.json.js +9 -0
- package/build/esm/NumberField/i18n/pl-PL.json.js.map +1 -0
- package/build/esm/NumberField/i18n/sv-SE.json.js +9 -0
- package/build/esm/NumberField/i18n/sv-SE.json.js.map +1 -0
- package/build/esm/NumberField/src/NumberField.js +130 -111
- package/build/esm/NumberField/src/NumberField.js.map +1 -1
- package/build/esm/NumberField/src/StepperButton.js +32 -53
- package/build/esm/NumberField/src/StepperButton.js.map +1 -1
- package/build/esm/NumberField/src/cursorHelpers.js +13 -8
- package/build/esm/NumberField/src/cursorHelpers.js.map +1 -1
- package/build/esm/NumberField/src/formatHelpers.js +15 -18
- package/build/esm/NumberField/src/formatHelpers.js.map +1 -1
- package/build/esm/NumberField/src/keyboardHelpers.js +13 -8
- package/build/esm/NumberField/src/keyboardHelpers.js.map +1 -1
- package/build/esm/NumberField/src/useAutofillStyle.js.map +1 -1
- package/build/esm/NumberField/src/useNumberFieldFormatting.js +79 -45
- package/build/esm/NumberField/src/useNumberFieldFormatting.js.map +1 -1
- package/build/esm/NumberField/src/useSapphireNumberField.js +16 -42
- package/build/esm/NumberField/src/useSapphireNumberField.js.map +1 -1
- package/build/esm/ProgressIndicator/src/ProgressIndicator.js +23 -35
- package/build/esm/ProgressIndicator/src/ProgressIndicator.js.map +1 -1
- package/build/esm/Sidebar/index.js.map +1 -1
- package/build/esm/Sidebar/src/Body.js +19 -44
- package/build/esm/Sidebar/src/Body.js.map +1 -1
- package/build/esm/Sidebar/src/ExpandableItem.js +89 -97
- package/build/esm/Sidebar/src/ExpandableItem.js.map +1 -1
- package/build/esm/Sidebar/src/Header.js +14 -44
- package/build/esm/Sidebar/src/Header.js.map +1 -1
- package/build/esm/Sidebar/src/Item.js +17 -44
- package/build/esm/Sidebar/src/Item.js.map +1 -1
- package/build/esm/Sidebar/src/List.js +14 -43
- package/build/esm/Sidebar/src/List.js.map +1 -1
- package/build/esm/Sidebar/src/Panel.js +56 -69
- package/build/esm/Sidebar/src/Panel.js.map +1 -1
- package/build/esm/Sidebar/src/ResponsiveSidebarContext.js +17 -9
- package/build/esm/Sidebar/src/ResponsiveSidebarContext.js.map +1 -1
- package/build/esm/Sidebar/src/SecondarySidebarContext.js +15 -12
- package/build/esm/Sidebar/src/SecondarySidebarContext.js.map +1 -1
- package/build/esm/Sidebar/src/Section.js +38 -51
- package/build/esm/Sidebar/src/Section.js.map +1 -1
- package/build/esm/Sidebar/src/Sidebar.js +65 -93
- package/build/esm/Sidebar/src/Sidebar.js.map +1 -1
- package/build/esm/Sidebar/src/useSidebar.js.map +1 -1
- package/build/esm/Slider/index.js.map +1 -1
- package/build/esm/Slider/src/Slider.js +46 -71
- package/build/esm/Slider/src/Slider.js.map +1 -1
- package/build/esm/TagGroup/src/Tag.js +71 -86
- package/build/esm/TagGroup/src/Tag.js.map +1 -1
- package/build/esm/TagGroup/src/TagGroup.js +46 -67
- package/build/esm/TagGroup/src/TagGroup.js.map +1 -1
- package/build/esm/TagGroup/src/TagItem.js +1 -1
- package/build/esm/TagGroup/src/TagItem.js.map +1 -1
- package/build/esm/TimeField/i18n/da-DK.json.js +7 -0
- package/build/esm/TimeField/i18n/da-DK.json.js.map +1 -0
- package/build/esm/TimeField/i18n/de-DE.json.js +7 -0
- package/build/esm/TimeField/i18n/de-DE.json.js.map +1 -0
- package/build/esm/TimeField/i18n/en-US.json.js +7 -0
- package/build/esm/TimeField/i18n/en-US.json.js.map +1 -0
- package/build/esm/TimeField/i18n/fi-FI.json.js +7 -0
- package/build/esm/TimeField/i18n/fi-FI.json.js.map +1 -0
- package/build/esm/TimeField/i18n/index.js +7 -7
- package/build/esm/TimeField/i18n/index.js.map +1 -1
- package/build/esm/TimeField/i18n/nb-NO.json.js +7 -0
- package/build/esm/TimeField/i18n/nb-NO.json.js.map +1 -0
- package/build/esm/TimeField/i18n/pl-PL.json.js +7 -0
- package/build/esm/TimeField/i18n/pl-PL.json.js.map +1 -0
- package/build/esm/TimeField/i18n/{sv-SE.js → sv-SE.json.js} +1 -1
- package/build/esm/TimeField/i18n/sv-SE.json.js.map +1 -0
- package/build/esm/TimeField/src/TimeField.js +67 -84
- package/build/esm/TimeField/src/TimeField.js.map +1 -1
- package/build/esm/TimeField/src/TimeFieldSegment.js +25 -37
- package/build/esm/TimeField/src/TimeFieldSegment.js.map +1 -1
- package/build/esm/index.js +1 -1
- package/build/index.d.ts +19 -17
- package/package.json +16 -39
- package/build/esm/Autocomplete/i18n/da-DK.js +0 -6
- package/build/esm/Autocomplete/i18n/da-DK.js.map +0 -1
- package/build/esm/Autocomplete/i18n/de-DE.js +0 -6
- package/build/esm/Autocomplete/i18n/de-DE.js.map +0 -1
- package/build/esm/Autocomplete/i18n/en-US.js +0 -6
- package/build/esm/Autocomplete/i18n/en-US.js.map +0 -1
- package/build/esm/Autocomplete/i18n/fi-FI.js +0 -6
- package/build/esm/Autocomplete/i18n/fi-FI.js.map +0 -1
- package/build/esm/Autocomplete/i18n/nb-NO.js +0 -6
- package/build/esm/Autocomplete/i18n/nb-NO.js.map +0 -1
- package/build/esm/Autocomplete/i18n/pl-PL.js +0 -6
- package/build/esm/Autocomplete/i18n/pl-PL.js.map +0 -1
- package/build/esm/Autocomplete/i18n/sv-SE.js +0 -6
- package/build/esm/Autocomplete/i18n/sv-SE.js.map +0 -1
- package/build/esm/FileDropzone/i18n/da-DK.js.map +0 -1
- package/build/esm/FileDropzone/i18n/de-DE.js.map +0 -1
- package/build/esm/FileDropzone/i18n/en-US.js.map +0 -1
- package/build/esm/FileDropzone/i18n/fi-FI.js.map +0 -1
- package/build/esm/FileDropzone/i18n/nb-NO.js.map +0 -1
- package/build/esm/FileDropzone/i18n/pl-PL.js.map +0 -1
- package/build/esm/FileDropzone/i18n/sv-SE.js.map +0 -1
- package/build/esm/NumberField/i18n/da-DK.js +0 -9
- package/build/esm/NumberField/i18n/da-DK.js.map +0 -1
- package/build/esm/NumberField/i18n/de-DE.js +0 -9
- package/build/esm/NumberField/i18n/de-DE.js.map +0 -1
- package/build/esm/NumberField/i18n/en-US.js +0 -9
- package/build/esm/NumberField/i18n/en-US.js.map +0 -1
- package/build/esm/NumberField/i18n/fi-FI.js +0 -9
- package/build/esm/NumberField/i18n/fi-FI.js.map +0 -1
- package/build/esm/NumberField/i18n/nb-NO.js +0 -9
- package/build/esm/NumberField/i18n/nb-NO.js.map +0 -1
- package/build/esm/NumberField/i18n/pl-PL.js +0 -9
- package/build/esm/NumberField/i18n/pl-PL.js.map +0 -1
- package/build/esm/NumberField/i18n/sv-SE.js +0 -9
- package/build/esm/NumberField/i18n/sv-SE.js.map +0 -1
- package/build/esm/TimeField/i18n/da-DK.js +0 -7
- package/build/esm/TimeField/i18n/da-DK.js.map +0 -1
- package/build/esm/TimeField/i18n/de-DE.js +0 -7
- package/build/esm/TimeField/i18n/de-DE.js.map +0 -1
- package/build/esm/TimeField/i18n/en-US.js +0 -7
- package/build/esm/TimeField/i18n/en-US.js.map +0 -1
- package/build/esm/TimeField/i18n/fi-FI.js +0 -7
- package/build/esm/TimeField/i18n/fi-FI.js.map +0 -1
- package/build/esm/TimeField/i18n/nb-NO.js +0 -7
- package/build/esm/TimeField/i18n/nb-NO.js.map +0 -1
- package/build/esm/TimeField/i18n/pl-PL.js +0 -7
- package/build/esm/TimeField/i18n/pl-PL.js.map +0 -1
- 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,
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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(
|
|
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(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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(
|
|
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":"
|
|
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 '
|
|
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(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 '
|
|
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 '
|
|
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
|
|
20
|
+
const [secondarySidebarId, setSecondarySidebarId] = useControlledState(openedId, defaultOpenedId ?? null, onOpenedIdChange);
|
|
22
21
|
const [content, setContent] = useState(null);
|
|
23
|
-
return /* @__PURE__ */ React.createElement(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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 '
|
|
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 '
|
|
6
|
-
import { filterDOMProps } from '
|
|
5
|
+
import { useListBoxSection } from 'react-aria/useListBox';
|
|
6
|
+
import { filterDOMProps } from 'react-aria/filterDOMProps';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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 '
|
|
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,
|
|
3
|
+
import { useThemeCheck, ThemeRoot, useSapphireStyleProps } from '@danske/sapphire-react';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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 = (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|