@danske/sapphire-react-lab 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +15 -0
- package/build/cjs/index.js +2876 -0
- package/build/cjs/index.js.map +1 -0
- package/build/esm/Accordion/index.js +11 -0
- package/build/esm/Accordion/index.js.map +1 -0
- package/build/esm/Accordion/src/Accordion.js +72 -0
- package/build/esm/Accordion/src/Accordion.js.map +1 -0
- package/build/esm/Accordion/src/AccordionHeading.js +49 -0
- package/build/esm/Accordion/src/AccordionHeading.js.map +1 -0
- package/build/esm/Accordion/src/AccordionItem.js +68 -0
- package/build/esm/Accordion/src/AccordionItem.js.map +1 -0
- package/build/esm/Accordion/src/useTreeState.js +42 -0
- package/build/esm/Accordion/src/useTreeState.js.map +1 -0
- package/build/esm/Avatar/src/Avatar.js +63 -0
- package/build/esm/Avatar/src/Avatar.js.map +1 -0
- package/build/esm/Calendar/i18n/da-DK.js +9 -0
- package/build/esm/Calendar/i18n/da-DK.js.map +1 -0
- package/build/esm/Calendar/i18n/de-DE.js +9 -0
- package/build/esm/Calendar/i18n/de-DE.js.map +1 -0
- package/build/esm/Calendar/i18n/en-US.js +9 -0
- package/build/esm/Calendar/i18n/en-US.js.map +1 -0
- package/build/esm/Calendar/i18n/fi-FI.js +9 -0
- package/build/esm/Calendar/i18n/fi-FI.js.map +1 -0
- package/build/esm/Calendar/i18n/index.js +20 -0
- package/build/esm/Calendar/i18n/index.js.map +1 -0
- package/build/esm/Calendar/i18n/nb-NO.js +9 -0
- package/build/esm/Calendar/i18n/nb-NO.js.map +1 -0
- package/build/esm/Calendar/i18n/pl-PL.js +9 -0
- package/build/esm/Calendar/i18n/pl-PL.js.map +1 -0
- package/build/esm/Calendar/i18n/sv-SE.js +9 -0
- package/build/esm/Calendar/i18n/sv-SE.js.map +1 -0
- package/build/esm/Calendar/src/Calendar.js +122 -0
- package/build/esm/Calendar/src/Calendar.js.map +1 -0
- package/build/esm/Calendar/src/CalendarButtons.js +96 -0
- package/build/esm/Calendar/src/CalendarButtons.js.map +1 -0
- package/build/esm/Calendar/src/CalendarDaysGrid.js +169 -0
- package/build/esm/Calendar/src/CalendarDaysGrid.js.map +1 -0
- package/build/esm/Calendar/src/CalendarHeader.js +58 -0
- package/build/esm/Calendar/src/CalendarHeader.js.map +1 -0
- package/build/esm/Calendar/src/CalendarMonthOrYearCell.js +79 -0
- package/build/esm/Calendar/src/CalendarMonthOrYearCell.js.map +1 -0
- package/build/esm/Calendar/src/CalendarMonthsGrid.js +58 -0
- package/build/esm/Calendar/src/CalendarMonthsGrid.js.map +1 -0
- package/build/esm/Calendar/src/CalendarPageAnimation.js +67 -0
- package/build/esm/Calendar/src/CalendarPageAnimation.js.map +1 -0
- package/build/esm/Calendar/src/CalendarYearsGrid.js +52 -0
- package/build/esm/Calendar/src/CalendarYearsGrid.js.map +1 -0
- package/build/esm/Calendar/src/RangeCalendar.js +119 -0
- package/build/esm/Calendar/src/RangeCalendar.js.map +1 -0
- package/build/esm/Calendar/src/useCustomDurationCalendarGrid.js +57 -0
- package/build/esm/Calendar/src/useCustomDurationCalendarGrid.js.map +1 -0
- package/build/esm/Calendar/src/useRangeCalendarState.js +57 -0
- package/build/esm/Calendar/src/useRangeCalendarState.js.map +1 -0
- package/build/esm/Calendar/src/useSapphireCalendarState.js +86 -0
- package/build/esm/Calendar/src/useSapphireCalendarState.js.map +1 -0
- package/build/esm/Calendar/src/utils.js +12 -0
- package/build/esm/Calendar/src/utils.js.map +1 -0
- package/build/esm/DateField/i18n/da-DK.js +7 -0
- package/build/esm/DateField/i18n/da-DK.js.map +1 -0
- package/build/esm/DateField/i18n/de-DE.js +7 -0
- package/build/esm/DateField/i18n/de-DE.js.map +1 -0
- package/build/esm/DateField/i18n/en-US.js +7 -0
- package/build/esm/DateField/i18n/en-US.js.map +1 -0
- package/build/esm/DateField/i18n/fi-FI.js +7 -0
- package/build/esm/DateField/i18n/fi-FI.js.map +1 -0
- package/build/esm/DateField/i18n/index.js +20 -0
- package/build/esm/DateField/i18n/index.js.map +1 -0
- package/build/esm/DateField/i18n/nb-NO.js +7 -0
- package/build/esm/DateField/i18n/nb-NO.js.map +1 -0
- package/build/esm/DateField/i18n/pl-PL.js +7 -0
- package/build/esm/DateField/i18n/pl-PL.js.map +1 -0
- package/build/esm/DateField/i18n/sv-SE.js +7 -0
- package/build/esm/DateField/i18n/sv-SE.js.map +1 -0
- package/build/esm/DateField/src/DateField.js +126 -0
- package/build/esm/DateField/src/DateField.js.map +1 -0
- package/build/esm/DateField/src/DateFieldButton.js +44 -0
- package/build/esm/DateField/src/DateFieldButton.js.map +1 -0
- package/build/esm/DateField/src/DateInput.js +81 -0
- package/build/esm/DateField/src/DateInput.js.map +1 -0
- package/build/esm/DateField/src/DateRangeField.js +151 -0
- package/build/esm/DateField/src/DateRangeField.js.map +1 -0
- package/build/esm/DateField/src/DateRangeInput.js +90 -0
- package/build/esm/DateField/src/DateRangeInput.js.map +1 -0
- package/build/esm/DateField/src/DateSegment.js +52 -0
- package/build/esm/DateField/src/DateSegment.js.map +1 -0
- package/build/esm/DateField/src/helpers.js +14 -0
- package/build/esm/DateField/src/helpers.js.map +1 -0
- package/build/esm/DateField/src/useDateRangePickerState.js +57 -0
- package/build/esm/DateField/src/useDateRangePickerState.js.map +1 -0
- package/build/esm/DateField/src/utils/placeholders.js +91 -0
- package/build/esm/DateField/src/utils/placeholders.js.map +1 -0
- package/build/esm/DateField/src/utils/segments.js +46 -0
- package/build/esm/DateField/src/utils/segments.js.map +1 -0
- package/build/esm/FeedbackMessage/src/FeedbackMessage.js +55 -0
- package/build/esm/FeedbackMessage/src/FeedbackMessage.js.map +1 -0
- package/build/esm/Fieldset/src/Fieldset.js +77 -0
- package/build/esm/Fieldset/src/Fieldset.js.map +1 -0
- package/build/esm/Filtering/src/FilterDropdown.js +61 -0
- package/build/esm/Filtering/src/FilterDropdown.js.map +1 -0
- package/build/esm/NotificationBadge/src/NotificationBadge.js +72 -0
- package/build/esm/NotificationBadge/src/NotificationBadge.js.map +1 -0
- package/build/esm/SearchField/src/SearchField.js +115 -0
- package/build/esm/SearchField/src/SearchField.js.map +1 -0
- package/build/esm/SearchField/src/useComboBoxState.js +42 -0
- package/build/esm/SearchField/src/useComboBoxState.js.map +1 -0
- package/build/esm/Spinner/src/Spinner.js +46 -0
- package/build/esm/Spinner/src/Spinner.js.map +1 -0
- package/build/esm/Toast/src/Toast.js +66 -0
- package/build/esm/Toast/src/Toast.js.map +1 -0
- package/build/esm/Toast/src/ToastProvider.js +53 -0
- package/build/esm/Toast/src/ToastProvider.js.map +1 -0
- package/build/esm/Toast/src/ToastRegion.js +56 -0
- package/build/esm/Toast/src/ToastRegion.js.map +1 -0
- package/build/esm/Toast/src/context.js +10 -0
- package/build/esm/Toast/src/context.js.map +1 -0
- package/build/esm/Toast/src/useShowToast.js +15 -0
- package/build/esm/Toast/src/useShowToast.js.map +1 -0
- package/build/esm/ToggleButton/src/ToggleButton.js +85 -0
- package/build/esm/ToggleButton/src/ToggleButton.js.map +1 -0
- package/build/esm/Typography/index.js +14 -0
- package/build/esm/Typography/index.js.map +1 -0
- package/build/esm/Typography/src/Body.js +66 -0
- package/build/esm/Typography/src/Body.js.map +1 -0
- package/build/esm/Typography/src/Caption.js +59 -0
- package/build/esm/Typography/src/Caption.js.map +1 -0
- package/build/esm/Typography/src/Heading.js +55 -0
- package/build/esm/Typography/src/Heading.js.map +1 -0
- package/build/esm/Typography/src/Subheading.js +63 -0
- package/build/esm/Typography/src/Subheading.js.map +1 -0
- package/build/esm/index.js +21 -0
- package/build/esm/index.js.map +1 -0
- package/build/index.d.ts +746 -0
- package/package.json +65 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import styles from '@danske/sapphire-css/components/accordion/accordion.module.css';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { useThemeCheck, useSapphireStyleProps } from '@danske/sapphire-react';
|
|
5
|
+
import { useAccordion } from '@react-aria/accordion';
|
|
6
|
+
import { useTreeState } from './useTreeState.js';
|
|
7
|
+
import { _AccordionItem } from './AccordionItem.js';
|
|
8
|
+
import { useObjectRef, mergeProps, filterDOMProps } from '@react-aria/utils';
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __defProps = Object.defineProperties;
|
|
12
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
13
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
14
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
16
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
|
+
var __spreadValues = (a, b) => {
|
|
18
|
+
for (var prop in b || (b = {}))
|
|
19
|
+
if (__hasOwnProp.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
if (__getOwnPropSymbols)
|
|
22
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
23
|
+
if (__propIsEnum.call(b, prop))
|
|
24
|
+
__defNormalProp(a, prop, b[prop]);
|
|
25
|
+
}
|
|
26
|
+
return a;
|
|
27
|
+
};
|
|
28
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
29
|
+
var __objRest = (source, exclude) => {
|
|
30
|
+
var target = {};
|
|
31
|
+
for (var prop in source)
|
|
32
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
if (source != null && __getOwnPropSymbols)
|
|
35
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
36
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
37
|
+
target[prop] = source[prop];
|
|
38
|
+
}
|
|
39
|
+
return target;
|
|
40
|
+
};
|
|
41
|
+
const _Accordion = (_a, ref) => {
|
|
42
|
+
var _b = _a, {
|
|
43
|
+
expansionMode = "multiple",
|
|
44
|
+
headerLevel = 5,
|
|
45
|
+
hideLastDivider = false
|
|
46
|
+
} = _b, props = __objRest(_b, [
|
|
47
|
+
"expansionMode",
|
|
48
|
+
"headerLevel",
|
|
49
|
+
"hideLastDivider"
|
|
50
|
+
]);
|
|
51
|
+
useThemeCheck();
|
|
52
|
+
const { styleProps } = useSapphireStyleProps(props);
|
|
53
|
+
const state = useTreeState(__spreadProps(__spreadValues({}, props), { expansionMode }));
|
|
54
|
+
const forwardedRef = useObjectRef(ref);
|
|
55
|
+
const { accordionProps } = useAccordion(props, state, forwardedRef);
|
|
56
|
+
return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, mergeProps(accordionProps, filterDOMProps(props, { labelable: true }))), {
|
|
57
|
+
className: clsx(styles["sapphire-accordion"], {
|
|
58
|
+
[styles["sapphire-accordion--without-last-divider"]]: hideLastDivider
|
|
59
|
+
}, styleProps.className),
|
|
60
|
+
ref: forwardedRef,
|
|
61
|
+
style: styleProps.style
|
|
62
|
+
}), [...state.collection].map((item) => /* @__PURE__ */ React.createElement(_AccordionItem, {
|
|
63
|
+
headerLevel,
|
|
64
|
+
key: item.key,
|
|
65
|
+
item,
|
|
66
|
+
state
|
|
67
|
+
})));
|
|
68
|
+
};
|
|
69
|
+
const Accordion = forwardRef(_Accordion);
|
|
70
|
+
|
|
71
|
+
export { Accordion };
|
|
72
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../../src/Accordion/src/Accordion.tsx"],"sourcesContent":["import React, { ForwardedRef, Ref, forwardRef } from 'react';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport clsx from 'clsx';\nimport {\n HeadingProps,\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '@danske/sapphire-react';\nimport { CollectionBase, DOMProps, Expandable } from '@react-types/shared';\nimport { useAccordion } from '@react-aria/accordion';\nimport { TreeExpansionMode, useTreeState } from './useTreeState';\n\nimport { _AccordionItem } from './AccordionItem';\nimport { filterDOMProps, mergeProps, useObjectRef } from '@react-aria/utils';\n\nexport interface SapphireAccordionProps<T>\n extends SapphireStyleProps,\n CollectionBase<T>,\n DOMProps,\n Expandable {\n /** Allow one or many expanded items\n * @default 'multiple'\n */\n expansionMode?: TreeExpansionMode;\n /** Set aria-level attribute for item's header. Accessibility requirement.\n * Defines the hierarchical level of an element within a page structure.\n * @default 5\n */\n headerLevel?: HeadingProps['level'];\n /**\n * Removes the divider after the last list item.\n * Useful when rendered in a container which already has borders.\n */\n hideLastDivider?: boolean;\n}\n\nconst _Accordion = <T extends object>(\n {\n expansionMode = 'multiple',\n headerLevel = 5,\n hideLastDivider = false,\n ...props\n }: SapphireAccordionProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n const state = useTreeState<T>({ ...props, expansionMode });\n const forwardedRef = useObjectRef<HTMLDivElement>(ref);\n\n const { accordionProps } = useAccordion(props, state, forwardedRef);\n\n return (\n <div\n {...mergeProps(\n accordionProps,\n filterDOMProps(props, { labelable: true })\n )}\n className={clsx(\n styles['sapphire-accordion'],\n {\n [styles['sapphire-accordion--without-last-divider']]: hideLastDivider,\n },\n styleProps.className\n )}\n ref={forwardedRef}\n style={styleProps.style}\n >\n {[...state.collection].map((item) => (\n <_AccordionItem<T>\n headerLevel={headerLevel}\n key={item.key}\n item={item}\n state={state}\n />\n ))}\n </div>\n );\n};\n\nexport const Accordion = forwardRef(_Accordion) as <T extends object>(\n props: SapphireAccordionProps<T> & { ref?: Ref<HTMLDivElement> }\n) => React.ReactElement;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAM,UAAA,GAAa,CACjB,EAAA,EAMA,GACG,KAAA;AAPH,EACE,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAgB,aAAA,GAAA,UAAA;AAAA,IAChB,WAAc,GAAA,CAAA;AAAA,IACd,eAAkB,GAAA,KAAA;AAAA,GAHpB,GAAA,EAAA,EAIK,kBAJL,EAIK,EAAA;AAAA,IAHH,eAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,GAAA,CAAA,CAAA;AAKF,EAAA,aAAA,EAAA,CAAA;AACA,EAAM,MAAA,EAAE,eAAe,qBAAsB,CAAA,KAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,KAAQ,GAAA,YAAA,CAAgB,aAAK,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAA,EAAL,EAAY,aAAA,EAAA,CAAA,CAAA,CAAA;AAC1C,EAAA,MAAM,eAAe,YAA6B,CAAA,GAAA,CAAA,CAAA;AAElD,EAAA,MAAM,EAAE,cAAA,EAAA,GAAmB,YAAa,CAAA,KAAA,EAAO,KAAO,EAAA,YAAA,CAAA,CAAA;AAEtD,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,aACM,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CACF,gBACA,cAAe,CAAA,KAAA,EAAO,EAAE,SAAA,EAAW,IAHvC,EAAA,CAAA,CAAA,CAAA,EAAA;AAAA,IAKE,SAAA,EAAW,IACT,CAAA,MAAA,CAAO,oBACP,CAAA,EAAA;AAAA,MAAA,CACG,OAAO,0CAA8C,CAAA,GAAA,eAAA;AAAA,KAAA,EAExD,UAAW,CAAA,SAAA,CAAA;AAAA,IAEb,GAAK,EAAA,YAAA;AAAA,IACL,OAAO,UAAW,CAAA,KAAA;AAAA,GAEjB,CAAA,EAAA,CAAC,GAAG,KAAM,CAAA,UAAA,CAAA,CAAY,IAAI,CAAC,IAAA,yCACzB,cAAD,EAAA;AAAA,IACE,WAAA;AAAA,IACA,KAAK,IAAK,CAAA,GAAA;AAAA,IACV,IAAA;AAAA,IACA,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAOH,MAAM,YAAY,UAAW,CAAA,UAAA;;;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styles from '@danske/sapphire-css/components/accordion/accordion.module.css';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { filterDOMProps } from '@react-aria/utils';
|
|
5
|
+
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __defProps = Object.defineProperties;
|
|
8
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
9
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
37
|
+
const AccordionHeading = (_a) => {
|
|
38
|
+
var _b = _a, {
|
|
39
|
+
children
|
|
40
|
+
} = _b, props = __objRest(_b, [
|
|
41
|
+
"children"
|
|
42
|
+
]);
|
|
43
|
+
return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, filterDOMProps(props)), {
|
|
44
|
+
className: clsx(styles["sapphire-accordion__item-heading"])
|
|
45
|
+
}), children);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { AccordionHeading };
|
|
49
|
+
//# sourceMappingURL=AccordionHeading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionHeading.js","sources":["../../../../src/Accordion/src/AccordionHeading.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport clsx from 'clsx';\nimport { DOMProps } from '@react-types/shared';\nimport { filterDOMProps } from '@react-aria/utils';\n\nexport interface SapphireAccordionHeadingProps extends DOMProps {\n children?: ReactNode;\n}\n\nexport const AccordionHeading = ({\n children,\n ...props\n}: SapphireAccordionHeadingProps) => {\n return (\n <div\n {...filterDOMProps(props)}\n className={clsx(styles['sapphire-accordion__item-heading'])}\n >\n {children}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUa,MAAA,gBAAA,GAAmB,CAAC,EAGI,KAAA;AAHJ,EAC/B,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,QAAA;AAAA,GAD+B,GAAA,EAAA,EAE5B,kBAF4B,EAE5B,EAAA;AAAA,IADH,UAAA;AAAA,GAAA,CAAA,CAAA;AAGA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,aACM,CAAA,cAAA,CAAA,EAAA,EAAA,cAAA,CAAe,KADrB,CAAA,CAAA,EAAA;AAAA,IAEE,SAAA,EAAW,KAAK,MAAO,CAAA,kCAAA,CAAA,CAAA;AAAA,GAEtB,CAAA,EAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import { useHover, usePress } from '@react-aria/interactions';
|
|
3
|
+
import { useFocusRing } from '@react-aria/focus';
|
|
4
|
+
import { mergeProps } from '@react-aria/utils';
|
|
5
|
+
import clsx from 'clsx';
|
|
6
|
+
import styles from '@danske/sapphire-css/components/accordion/accordion.module.css';
|
|
7
|
+
import { Icon } from '@danske/sapphire-react';
|
|
8
|
+
import { ChevronDown } from '@danske/sapphire-icons/react';
|
|
9
|
+
import { useAccordionItem } from '@react-aria/accordion';
|
|
10
|
+
import { Item } from '@react-stately/collections';
|
|
11
|
+
|
|
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
|
+
function _AccordionItem(props) {
|
|
32
|
+
const { state, item } = props;
|
|
33
|
+
const isOpen = state.expandedKeys.has(item.key);
|
|
34
|
+
const isDisabled = state.disabledKeys.has(item.key);
|
|
35
|
+
const { isHovered, hoverProps } = useHover({ isDisabled });
|
|
36
|
+
const { pressProps, isPressed } = usePress({ isDisabled });
|
|
37
|
+
const { focusProps, isFocusVisible } = useFocusRing();
|
|
38
|
+
const ref = useRef(null);
|
|
39
|
+
const { buttonProps, regionProps } = useAccordionItem(props, state, ref);
|
|
40
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
41
|
+
className: clsx(styles["sapphire-accordion__item"], {
|
|
42
|
+
[styles["sapphire-accordion__item--open"]]: isOpen,
|
|
43
|
+
[styles["is-disabled"]]: isDisabled
|
|
44
|
+
})
|
|
45
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
46
|
+
role: "heading",
|
|
47
|
+
"aria-level": props.headerLevel
|
|
48
|
+
}, /* @__PURE__ */ React.createElement("button", __spreadProps(__spreadValues({}, mergeProps(buttonProps, hoverProps, pressProps, focusProps)), {
|
|
49
|
+
"aria-disabled": isDisabled,
|
|
50
|
+
ref,
|
|
51
|
+
className: clsx(styles["sapphire-accordion__item-header"], styles["js-focus"], styles["js-hover"], {
|
|
52
|
+
[styles["is-focus"]]: isFocusVisible,
|
|
53
|
+
[styles["is-hover"]]: isHovered,
|
|
54
|
+
[styles["is-active"]]: isPressed
|
|
55
|
+
})
|
|
56
|
+
}), item.props.heading, /* @__PURE__ */ React.createElement("div", {
|
|
57
|
+
className: clsx(styles["sapphire-accordion__item-arrow"])
|
|
58
|
+
}, /* @__PURE__ */ React.createElement(Icon, null, /* @__PURE__ */ React.createElement(ChevronDown, null))))), /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, regionProps), {
|
|
59
|
+
"aria-hidden": !isOpen,
|
|
60
|
+
className: clsx(styles["sapphire-accordion__item-content-wrapper"])
|
|
61
|
+
}), /* @__PURE__ */ React.createElement("div", {
|
|
62
|
+
className: clsx(styles["sapphire-accordion__item-content"])
|
|
63
|
+
}, item.props.children)));
|
|
64
|
+
}
|
|
65
|
+
const AccordionItem = Item;
|
|
66
|
+
|
|
67
|
+
export { AccordionItem, _AccordionItem };
|
|
68
|
+
//# sourceMappingURL=AccordionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.js","sources":["../../../../src/Accordion/src/AccordionItem.tsx"],"sourcesContent":["import React, { ReactNode, useRef } from 'react';\nimport { Node, ItemProps } from '@react-types/shared';\nimport { TreeState } from '@react-stately/tree';\nimport { useHover, usePress } from '@react-aria/interactions';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/accordion/accordion.module.css';\nimport { HeadingProps, Icon } from '@danske/sapphire-react';\nimport { ChevronDown } from '@danske/sapphire-icons/react';\nimport { useAccordionItem } from '@react-aria/accordion';\nimport { Item } from '@react-stately/collections';\n\ninterface AccordionItemProps<T> {\n item: Node<T>;\n state: TreeState<T>;\n headerLevel: HeadingProps['level'];\n}\n\nexport function _AccordionItem<T>(props: AccordionItemProps<T>): JSX.Element {\n const { state, item } = props;\n\n const isOpen = state.expandedKeys.has(item.key);\n const isDisabled = state.disabledKeys.has(item.key);\n\n const { isHovered, hoverProps } = useHover({ isDisabled });\n const { pressProps, isPressed } = usePress({ isDisabled });\n const { focusProps, isFocusVisible } = useFocusRing();\n\n const ref = useRef<HTMLButtonElement>(null);\n\n const { buttonProps, regionProps } = useAccordionItem<T>(props, state, ref);\n\n return (\n <div\n className={clsx(styles['sapphire-accordion__item'], {\n [styles['sapphire-accordion__item--open']]: isOpen,\n [styles['is-disabled']]: isDisabled,\n })}\n >\n <div role=\"heading\" aria-level={props.headerLevel}>\n <button\n {...mergeProps(buttonProps, hoverProps, pressProps, focusProps)}\n aria-disabled={isDisabled}\n ref={ref}\n className={clsx(\n styles['sapphire-accordion__item-header'],\n styles['js-focus'],\n styles['js-hover'],\n {\n [styles['is-focus']]: isFocusVisible,\n [styles['is-hover']]: isHovered,\n [styles['is-active']]: isPressed,\n }\n )}\n >\n {item.props.heading}\n <div className={clsx(styles['sapphire-accordion__item-arrow'])}>\n <Icon>\n <ChevronDown />\n </Icon>\n </div>\n </button>\n </div>\n <div\n {...regionProps}\n aria-hidden={!isOpen}\n className={clsx(styles['sapphire-accordion__item-content-wrapper'])}\n >\n <div className={clsx(styles['sapphire-accordion__item-content'])}>\n {item.props.children}\n </div>\n </div>\n </div>\n );\n}\n\nexport interface SapphireAccordionItemProps<T>\n extends Omit<ItemProps<T>, 'title'> {\n heading: ReactNode;\n}\n\nexport const AccordionItem = Item as <T>(\n props: SapphireAccordionItemProps<T>\n) => JSX.Element;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,SAAA,cAAA,CAA2B,KAA2C,EAAA;AAC3E,EAAM,MAAA,EAAE,OAAO,IAAS,EAAA,GAAA,KAAA,CAAA;AAExB,EAAA,MAAM,MAAS,GAAA,KAAA,CAAM,YAAa,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,CAAA,CAAA;AAC3C,EAAA,MAAM,UAAa,GAAA,KAAA,CAAM,YAAa,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,CAAA,CAAA;AAE/C,EAAA,MAAM,EAAE,SAAA,EAAW,UAAe,EAAA,GAAA,QAAA,CAAS,EAAE,UAAA,EAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,EAAE,UAAA,EAAY,SAAc,EAAA,GAAA,QAAA,CAAS,EAAE,UAAA,EAAA,CAAA,CAAA;AAC7C,EAAM,MAAA,EAAE,YAAY,cAAmB,EAAA,GAAA,YAAA,EAAA,CAAA;AAEvC,EAAA,MAAM,MAAM,MAA0B,CAAA,IAAA,CAAA,CAAA;AAEtC,EAAA,MAAM,EAAE,WAAA,EAAa,WAAgB,EAAA,GAAA,gBAAA,CAAoB,OAAO,KAAO,EAAA,GAAA,CAAA,CAAA;AAEvE,EAAA,2CACG,KAAD,EAAA;AAAA,IACE,SAAA,EAAW,IAAK,CAAA,MAAA,CAAO,0BAA6B,CAAA,EAAA;AAAA,MAAA,CACjD,OAAO,gCAAoC,CAAA,GAAA,MAAA;AAAA,MAAA,CAC3C,OAAO,aAAiB,CAAA,GAAA,UAAA;AAAA,KAAA,CAAA;AAAA,GAAA,sCAG1B,KAAD,EAAA;AAAA,IAAK,IAAK,EAAA,SAAA;AAAA,IAAU,cAAY,KAAM,CAAA,WAAA;AAAA,GAAA,sCACnC,QAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,WAAW,WAAa,EAAA,UAAA,EAAY,YAAY,UADtD,CAAA,CAAA,EAAA;AAAA,IAEE,eAAe,EAAA,UAAA;AAAA,IACf,GAAA;AAAA,IACA,WAAW,IACT,CAAA,MAAA,CAAO,oCACP,MAAO,CAAA,UAAA,CAAA,EACP,OAAO,UACP,CAAA,EAAA;AAAA,MAAA,CACG,OAAO,UAAc,CAAA,GAAA,cAAA;AAAA,MAAA,CACrB,OAAO,UAAc,CAAA,GAAA,SAAA;AAAA,MAAA,CACrB,OAAO,WAAe,CAAA,GAAA,SAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,EAI1B,IAAK,CAAA,KAAA,CAAM,OACZ,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,KAAK,MAAO,CAAA,gCAAA,CAAA,CAAA;AAAA,GAC1B,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,aAAD,IAKR,CAAA,CAAA,CAAA,CAAA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,WADN,CAAA,EAAA;AAAA,IAEE,eAAa,CAAC,MAAA;AAAA,IACd,SAAA,EAAW,KAAK,MAAO,CAAA,0CAAA,CAAA,CAAA;AAAA,GAAA,CAAA,sCAEtB,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,KAAK,MAAO,CAAA,kCAAA,CAAA,CAAA;AAAA,GAAA,EACzB,KAAK,KAAM,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA;AAYf,MAAM,aAAgB,GAAA;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useTreeState as useTreeState$1 } from '@react-stately/tree';
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
21
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
|
+
function useTreeState(props) {
|
|
23
|
+
const state = useTreeState$1(props);
|
|
24
|
+
const onToggle = (key) => {
|
|
25
|
+
state.setExpandedKeys(toggleKey(state.expandedKeys, key, props.expansionMode));
|
|
26
|
+
};
|
|
27
|
+
return __spreadProps(__spreadValues({}, state), { toggleKey: onToggle });
|
|
28
|
+
}
|
|
29
|
+
function toggleKey(set, key, expansionMode = "multiple") {
|
|
30
|
+
const res = new Set(set);
|
|
31
|
+
if (res.has(key)) {
|
|
32
|
+
res.delete(key);
|
|
33
|
+
} else {
|
|
34
|
+
if (expansionMode === "single")
|
|
35
|
+
res.clear();
|
|
36
|
+
res.add(key);
|
|
37
|
+
}
|
|
38
|
+
return res;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { useTreeState };
|
|
42
|
+
//# sourceMappingURL=useTreeState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeState.js","sources":["../../../../src/Accordion/src/useTreeState.ts"],"sourcesContent":["import { Key } from 'react';\nimport {\n TreeProps as OriginalTreeProps,\n TreeState,\n useTreeState as useOriginalTreeState,\n} from '@react-stately/tree';\n\n/**\n * A wrapper for `useTreeState` to add support of single expanded item\n *\n * More details here\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-stately/tree/src/useTreeState.ts\n */\n\nexport interface TreeProps<T> extends OriginalTreeProps<T> {\n expansionMode?: TreeExpansionMode;\n}\n\nexport type TreeExpansionMode = 'single' | 'multiple';\n\nexport function useTreeState<T extends object>(\n props: TreeProps<T>\n): TreeState<T> {\n const state = useOriginalTreeState(props);\n\n const onToggle = (key: Key) => {\n state.setExpandedKeys(\n toggleKey(state.expandedKeys, key, props.expansionMode)\n );\n };\n\n return { ...state, toggleKey: onToggle };\n}\n\nfunction toggleKey(\n set: Set<Key>,\n key: Key,\n expansionMode: TreeExpansionMode = 'multiple'\n): Set<Key> {\n const res = new Set(set);\n if (res.has(key)) {\n res.delete(key);\n } else {\n if (expansionMode === 'single') res.clear();\n res.add(key);\n }\n\n return res;\n}\n"],"names":["useOriginalTreeState"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBO,SAAA,YAAA,CACL,KACc,EAAA;AACd,EAAA,MAAM,QAAQA,cAAqB,CAAA,KAAA,CAAA,CAAA;AAEnC,EAAM,MAAA,QAAA,GAAW,CAAC,GAAa,KAAA;AAC7B,IAAA,KAAA,CAAM,eACJ,CAAA,SAAA,CAAU,KAAM,CAAA,YAAA,EAAc,KAAK,KAAM,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAI7C,EAAO,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAL,CAAA,EAAA,EAAY,SAAW,EAAA,QAAA,EAAA,CAAA,CAAA;AAAA,CAAA;AAGhC,SACE,SAAA,CAAA,GAAA,EACA,GACA,EAAA,aAAA,GAAmC,UACzB,EAAA;AACV,EAAM,MAAA,GAAA,GAAM,IAAI,GAAI,CAAA,GAAA,CAAA,CAAA;AACpB,EAAI,IAAA,GAAA,CAAI,IAAI,GAAM,CAAA,EAAA;AAChB,IAAA,GAAA,CAAI,MAAO,CAAA,GAAA,CAAA,CAAA;AAAA,GACN,MAAA;AACL,IAAA,IAAI,aAAkB,KAAA,QAAA;AAAU,MAAI,GAAA,CAAA,KAAA,EAAA,CAAA;AACpC,IAAA,GAAA,CAAI,GAAI,CAAA,GAAA,CAAA,CAAA;AAAA,GAAA;AAGV,EAAO,OAAA,GAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useThemeCheck, useSapphireStyleProps, Icon } from '@danske/sapphire-react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styles from '@danske/sapphire-css/components/avatar/avatar.module.css';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __defProps = Object.defineProperties;
|
|
8
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
9
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
37
|
+
const Avatar = (_a) => {
|
|
38
|
+
var _b = _a, {
|
|
39
|
+
monogram,
|
|
40
|
+
icon,
|
|
41
|
+
color = "informative",
|
|
42
|
+
size = "medium"
|
|
43
|
+
} = _b, props = __objRest(_b, [
|
|
44
|
+
"monogram",
|
|
45
|
+
"icon",
|
|
46
|
+
"color",
|
|
47
|
+
"size"
|
|
48
|
+
]);
|
|
49
|
+
useThemeCheck();
|
|
50
|
+
const { styleProps } = useSapphireStyleProps(props);
|
|
51
|
+
return /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, styleProps), {
|
|
52
|
+
className: clsx(styleProps.className, styles["sapphire-avatar"], {
|
|
53
|
+
[styles["sapphire-avatar--large"]]: size === "large",
|
|
54
|
+
[styles["sapphire-avatar--small"]]: size === "small",
|
|
55
|
+
[styles["sapphire-avatar--extra-small"]]: size === "extraSmall"
|
|
56
|
+
}, color !== "passive" && styles[`sapphire-avatar--${color}`])
|
|
57
|
+
}), icon ? /* @__PURE__ */ React.createElement(Icon, {
|
|
58
|
+
size: size === "large" ? "l" : size === "medium" ? "m" : "s"
|
|
59
|
+
}, icon) : monogram);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { Avatar };
|
|
63
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../../src/Avatar/src/Avatar.tsx"],"sourcesContent":["import {\n Icon,\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '@danske/sapphire-react';\nimport React, { ReactNode } from 'react';\nimport styles from '@danske/sapphire-css/components/avatar/avatar.module.css';\nimport clsx from 'clsx';\n\nexport type SapphireAvatarProps = SapphireStyleProps & {\n /**\n * @default 'medium'\n */\n size?: 'large' | 'medium' | 'small' | 'extraSmall';\n\n /**\n * The background color of the avatar.\n * Can either be semantic or one of the named decorative colors.\n *\n * @default 'informative'\n */\n\n color?:\n | 'positive'\n | 'negative'\n | 'warning'\n | 'informative'\n | 'passive'\n | 'aqua'\n | 'copper'\n | 'electro'\n | 'indigo'\n | 'lime'\n | 'pink'\n | 'violet'\n | 'gold'\n | 'beige'\n | 'orchid'\n | 'gray'\n | 'cobalt'\n | 'forestGreen'\n | 'teal'\n | 'orange';\n} & (\n | {\n monogram: ReactNode;\n icon?: never;\n }\n | {\n monogram?: never;\n icon: ReactNode;\n }\n );\n\nexport const Avatar = ({\n monogram,\n icon,\n color = 'informative',\n size = 'medium',\n ...props\n}: SapphireAvatarProps): React.ReactElement => {\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n\n return (\n <div\n {...styleProps}\n className={clsx(\n styleProps.className,\n styles['sapphire-avatar'],\n {\n [styles['sapphire-avatar--large']]: size === 'large',\n [styles['sapphire-avatar--small']]: size === 'small',\n [styles['sapphire-avatar--extra-small']]: size === 'extraSmall',\n },\n color !== 'passive' && styles[`sapphire-avatar--${color}`]\n )}\n >\n {icon ? (\n <Icon size={size === 'large' ? 'l' : size === 'medium' ? 'm' : 's'}>\n {icon}\n </Icon>\n ) : (\n monogram\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDa,MAAA,MAAA,GAAS,CAAC,EAMwB,KAAA;AANxB,EACrB,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAQ,GAAA,aAAA;AAAA,IACR,IAAO,GAAA,QAAA;AAAA,GAJc,GAAA,EAAA,EAKlB,kBALkB,EAKlB,EAAA;AAAA,IAJH,UAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,GAAA,CAAA,CAAA;AAGA,EAAA,aAAA,EAAA,CAAA;AACA,EAAM,MAAA,EAAE,eAAe,qBAAsB,CAAA,KAAA,CAAA,CAAA;AAE7C,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACM,UADN,CAAA,EAAA;AAAA,IAEE,SAAW,EAAA,IAAA,CACT,UAAW,CAAA,SAAA,EACX,OAAO,iBACP,CAAA,EAAA;AAAA,MACG,CAAA,MAAA,CAAO,4BAA4B,IAAS,KAAA,OAAA;AAAA,MAC5C,CAAA,MAAA,CAAO,4BAA4B,IAAS,KAAA,OAAA;AAAA,MAC5C,CAAA,MAAA,CAAO,kCAAkC,IAAS,KAAA,YAAA;AAAA,KAErD,EAAA,KAAA,KAAU,SAAa,IAAA,MAAA,CAAO,CAAoB,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAGnD,CAAA,EAAA,IAAA,uCACE,IAAD,EAAA;AAAA,IAAM,MAAM,IAAS,KAAA,OAAA,GAAU,GAAM,GAAA,IAAA,KAAS,WAAW,GAAM,GAAA,GAAA;AAAA,GAAA,EAC5D,IAGH,CAAA,GAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"da-DK.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de-DE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en-US.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fi-FI.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import da from './da-DK.js';
|
|
2
|
+
import en from './en-US.js';
|
|
3
|
+
import de from './de-DE.js';
|
|
4
|
+
import fi from './fi-FI.js';
|
|
5
|
+
import no from './nb-NO.js';
|
|
6
|
+
import pl from './pl-PL.js';
|
|
7
|
+
import se from './sv-SE.js';
|
|
8
|
+
|
|
9
|
+
var intlMessages = {
|
|
10
|
+
"da-DK": da,
|
|
11
|
+
"en-US": en,
|
|
12
|
+
"de-DE": de,
|
|
13
|
+
"fi-FI": fi,
|
|
14
|
+
"no-NO": no,
|
|
15
|
+
"pl-PL": pl,
|
|
16
|
+
"sv-SE": se
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { intlMessages as default };
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/Calendar/i18n/index.ts"],"sourcesContent":["import da from './da-DK.json';\nimport en from './en-US.json';\nimport de from './de-DE.json';\nimport fi from './fi-FI.json';\nimport no from './nb-NO.json';\nimport pl from './pl-PL.json';\nimport se from './sv-SE.json';\n\nexport default {\n 'da-DK': da,\n 'en-US': en,\n 'de-DE': de,\n 'fi-FI': fi,\n 'no-NO': no,\n 'pl-PL': pl,\n 'sv-SE': se,\n};\n"],"names":[],"mappings":";;;;;;;;AAQA,mBAAe;AAAA,EACb,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nb-NO.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pl-PL.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sv-SE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createCalendar } from '@internationalized/date';
|
|
3
|
+
import { useCalendar } from '@react-aria/calendar';
|
|
4
|
+
import { mergeProps, filterDOMProps } from '@react-aria/utils';
|
|
5
|
+
import { useThemeCheck, useSapphireStyleProps, Button } from '@danske/sapphire-react';
|
|
6
|
+
import styles from '@danske/sapphire-css/components/calendar/calendar.module.css';
|
|
7
|
+
import { CalendarDaysGrid } from './CalendarDaysGrid.js';
|
|
8
|
+
import { useLocale, useMessageFormatter, useDateFormatter } from '@react-aria/i18n';
|
|
9
|
+
import { CalendarMonthsGrid } from './CalendarMonthsGrid.js';
|
|
10
|
+
import { CalendarYearsGrid } from './CalendarYearsGrid.js';
|
|
11
|
+
import { useSapphireCalendarState } from './useSapphireCalendarState.js';
|
|
12
|
+
import clsx from 'clsx';
|
|
13
|
+
import { CalendarHeader } from './CalendarHeader.js';
|
|
14
|
+
import { useCalendarAnimationState, CalendarPageAnimation } from './CalendarPageAnimation.js';
|
|
15
|
+
import intlMessages from '../i18n/index.js';
|
|
16
|
+
import { sentenceCase } from './utils.js';
|
|
17
|
+
|
|
18
|
+
var __defProp = Object.defineProperty;
|
|
19
|
+
var __defProps = Object.defineProperties;
|
|
20
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
21
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
22
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
23
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
24
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
25
|
+
var __spreadValues = (a, b) => {
|
|
26
|
+
for (var prop in b || (b = {}))
|
|
27
|
+
if (__hasOwnProp.call(b, prop))
|
|
28
|
+
__defNormalProp(a, prop, b[prop]);
|
|
29
|
+
if (__getOwnPropSymbols)
|
|
30
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
31
|
+
if (__propIsEnum.call(b, prop))
|
|
32
|
+
__defNormalProp(a, prop, b[prop]);
|
|
33
|
+
}
|
|
34
|
+
return a;
|
|
35
|
+
};
|
|
36
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
37
|
+
var __objRest = (source, exclude) => {
|
|
38
|
+
var target = {};
|
|
39
|
+
for (var prop in source)
|
|
40
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
41
|
+
target[prop] = source[prop];
|
|
42
|
+
if (source != null && __getOwnPropSymbols)
|
|
43
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
44
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
45
|
+
target[prop] = source[prop];
|
|
46
|
+
}
|
|
47
|
+
return target;
|
|
48
|
+
};
|
|
49
|
+
const Calendar = (_a) => {
|
|
50
|
+
var _b = _a, {
|
|
51
|
+
showWeekNumbers
|
|
52
|
+
} = _b, props = __objRest(_b, [
|
|
53
|
+
"showWeekNumbers"
|
|
54
|
+
]);
|
|
55
|
+
useThemeCheck();
|
|
56
|
+
const { locale } = useLocale();
|
|
57
|
+
const formatMessage = useMessageFormatter(intlMessages);
|
|
58
|
+
useThemeCheck();
|
|
59
|
+
const { styleProps } = useSapphireStyleProps(props);
|
|
60
|
+
const state = useCalendarAnimationState(useSapphireCalendarState(__spreadProps(__spreadValues({
|
|
61
|
+
selectionAlignment: "start"
|
|
62
|
+
}, props), {
|
|
63
|
+
locale,
|
|
64
|
+
createCalendar
|
|
65
|
+
})));
|
|
66
|
+
const monthDateFormatter = useDateFormatter({
|
|
67
|
+
month: "long",
|
|
68
|
+
year: "numeric",
|
|
69
|
+
era: state.visibleRange.start.calendar.identifier === "gregory" && state.visibleRange.start.era === "BC" ? "short" : void 0,
|
|
70
|
+
calendar: state.visibleRange.start.calendar.identifier,
|
|
71
|
+
timeZone: state.timeZone
|
|
72
|
+
});
|
|
73
|
+
const { calendarProps, prevButtonProps, nextButtonProps } = useCalendar(props, state);
|
|
74
|
+
const renderGrid = () => {
|
|
75
|
+
switch (state.view) {
|
|
76
|
+
case "years":
|
|
77
|
+
return /* @__PURE__ */ React.createElement(CalendarYearsGrid, {
|
|
78
|
+
state
|
|
79
|
+
});
|
|
80
|
+
case "months":
|
|
81
|
+
return /* @__PURE__ */ React.createElement(CalendarMonthsGrid, {
|
|
82
|
+
state
|
|
83
|
+
});
|
|
84
|
+
case "days":
|
|
85
|
+
default:
|
|
86
|
+
return /* @__PURE__ */ React.createElement(CalendarDaysGrid, {
|
|
87
|
+
state,
|
|
88
|
+
showWeekNumbers
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const renderTitle = () => {
|
|
93
|
+
switch (state.view) {
|
|
94
|
+
case "days":
|
|
95
|
+
return sentenceCase(monthDateFormatter.format(state.visibleRange.start.toDate(state.timeZone)));
|
|
96
|
+
case "months":
|
|
97
|
+
return state.focusedDate.year;
|
|
98
|
+
case "years":
|
|
99
|
+
return sentenceCase(formatMessage("year"));
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return /* @__PURE__ */ React.createElement("div", __spreadValues({
|
|
103
|
+
className: styles["sapphire-calendar"]
|
|
104
|
+
}, mergeProps(calendarProps, filterDOMProps(props))), /* @__PURE__ */ React.createElement("div", {
|
|
105
|
+
className: clsx(styles["sapphire-calendar__table-container"], styleProps.className),
|
|
106
|
+
style: styleProps.style
|
|
107
|
+
}, /* @__PURE__ */ React.createElement(CalendarHeader, {
|
|
108
|
+
prevButtonProps,
|
|
109
|
+
nextButtonProps
|
|
110
|
+
}, state.canBroadenView ? /* @__PURE__ */ React.createElement(Button, {
|
|
111
|
+
onPress: state.broadenView,
|
|
112
|
+
isDisabled: state.isDisabled,
|
|
113
|
+
variant: "tertiary",
|
|
114
|
+
appearance: "ghost",
|
|
115
|
+
size: "large"
|
|
116
|
+
}, renderTitle()) : renderTitle()), state.view === "days" ? /* @__PURE__ */ React.createElement(CalendarPageAnimation, {
|
|
117
|
+
state: state.animationState
|
|
118
|
+
}, renderGrid()) : renderGrid()));
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export { Calendar };
|
|
122
|
+
//# sourceMappingURL=Calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../../../src/Calendar/src/Calendar.tsx"],"sourcesContent":["import React from 'react';\nimport { createCalendar, DateValue } from '@internationalized/date';\nimport { AriaCalendarProps, useCalendar } from '@react-aria/calendar';\nimport { filterDOMProps, mergeProps } from '@react-aria/utils';\n\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n Button,\n} from '@danske/sapphire-react';\nimport styles from '@danske/sapphire-css/components/calendar/calendar.module.css';\n\nimport { CalendarDaysGrid } from './CalendarDaysGrid';\nimport {\n useDateFormatter,\n useLocale,\n useMessageFormatter,\n} from '@react-aria/i18n';\nimport { CalendarMonthsGrid } from './CalendarMonthsGrid';\nimport { CalendarYearsGrid } from './CalendarYearsGrid';\nimport {\n SapphireCalendarStateOptions,\n useSapphireCalendarState,\n} from './useSapphireCalendarState';\nimport clsx from 'clsx';\nimport { CalendarHeader } from './CalendarHeader';\nimport {\n CalendarPageAnimation,\n useCalendarAnimationState,\n} from './CalendarPageAnimation';\nimport intlMessages from '../i18n';\nimport { sentenceCase } from './utils';\n\nexport interface SapphireCalendarProps\n extends SapphireStyleProps,\n Omit<AriaCalendarProps<DateValue>, 'validationState' | 'errorMessage'>,\n SapphireCalendarStateOptions {\n /**\n * Whether week numbers are visible as a first column\n */\n showWeekNumbers?: boolean;\n}\n\n/**\n * Displays a calendar and allows users to select a single date. It displays a grid of days in one\n * month, by default, and the user can navigate to previous and next months. It's also possible\n * to navigate to months and years view, to quickly jump to a date far away from the focused date.\n */\nexport const Calendar = ({\n showWeekNumbers,\n ...props\n}: Omit<SapphireCalendarProps, 'locale'>): JSX.Element => {\n useThemeCheck();\n const { locale } = useLocale();\n const formatMessage = useMessageFormatter(intlMessages);\n\n useThemeCheck();\n const { styleProps } = useSapphireStyleProps(props);\n const state = useCalendarAnimationState(\n useSapphireCalendarState({\n selectionAlignment: 'start',\n ...props,\n locale,\n createCalendar,\n })\n );\n\n const monthDateFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era:\n state.visibleRange.start.calendar.identifier === 'gregory' &&\n state.visibleRange.start.era === 'BC'\n ? 'short'\n : undefined,\n calendar: state.visibleRange.start.calendar.identifier,\n timeZone: state.timeZone,\n });\n\n const { calendarProps, prevButtonProps, nextButtonProps } = useCalendar(\n props,\n state\n );\n\n const renderGrid = () => {\n switch (state.view) {\n case 'years':\n return <CalendarYearsGrid state={state} />;\n case 'months':\n return <CalendarMonthsGrid state={state} />;\n case 'days':\n default:\n return (\n <CalendarDaysGrid state={state} showWeekNumbers={showWeekNumbers} />\n );\n }\n };\n\n const renderTitle = () => {\n switch (state.view) {\n case 'days':\n return sentenceCase(\n monthDateFormatter.format(\n state.visibleRange.start.toDate(state.timeZone)\n )\n );\n case 'months':\n return state.focusedDate.year;\n case 'years':\n return sentenceCase(formatMessage('year'));\n }\n };\n return (\n <div\n className={styles['sapphire-calendar']}\n {...mergeProps(calendarProps, filterDOMProps(props))}\n >\n <div\n className={clsx(\n styles['sapphire-calendar__table-container'],\n styleProps.className\n )}\n style={styleProps.style}\n >\n <CalendarHeader\n prevButtonProps={prevButtonProps}\n nextButtonProps={nextButtonProps}\n >\n {state.canBroadenView ? (\n <Button\n onPress={state.broadenView}\n isDisabled={state.isDisabled}\n variant=\"tertiary\"\n appearance=\"ghost\"\n size=\"large\"\n >\n {renderTitle()}\n </Button>\n ) : (\n renderTitle()\n )}\n </CalendarHeader>\n {state.view === 'days' ? (\n <CalendarPageAnimation state={state.animationState}>\n {renderGrid()}\n </CalendarPageAnimation>\n ) : (\n renderGrid()\n )}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|