@fremtind/jokul 0.28.0 → 0.29.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/build/build-stats.html +1 -1
- package/build/cjs/components/breadcrumb/index.d.cts +2 -4
- package/build/cjs/components/button/index.d.cts +1 -1
- package/build/cjs/components/button/types.cjs.map +1 -1
- package/build/cjs/components/button/types.d.cts +1 -2
- package/build/cjs/components/card/NavCard.cjs.map +1 -1
- package/build/cjs/components/card/NavCard.d.cts +1 -10
- package/build/cjs/components/card/index.d.cts +2 -2
- package/build/cjs/components/card/types.cjs.map +1 -1
- package/build/cjs/components/card/types.d.cts +8 -0
- package/build/cjs/components/combobox/Combobox.cjs.map +1 -1
- package/build/cjs/components/combobox/Combobox.d.cts +6 -7
- package/build/cjs/components/combobox/index.d.cts +1 -1
- package/build/cjs/components/cookie-consent/index.d.cts +2 -4
- package/build/cjs/components/datepicker/index.cjs +1 -1
- package/build/cjs/components/datepicker/index.d.cts +3 -3
- package/build/cjs/components/datepicker/types.d.cts +7 -0
- package/build/cjs/components/datepicker/utils.cjs +1 -1
- package/build/cjs/components/datepicker/utils.cjs.map +1 -1
- package/build/cjs/components/datepicker/utils.d.cts +0 -1
- package/build/cjs/components/datepicker/validation.cjs.map +1 -1
- package/build/cjs/components/datepicker/validation.d.cts +1 -8
- package/build/cjs/components/description-list/index.d.cts +1 -1
- package/build/cjs/components/expander/Expander.cjs.map +1 -1
- package/build/cjs/components/expander/Expander.d.cts +1 -2
- package/build/cjs/components/expander/index.d.cts +2 -4
- package/build/cjs/components/feedback/Feedback.cjs.map +1 -1
- package/build/cjs/components/feedback/Feedback.d.cts +4 -9
- package/build/cjs/components/feedback/followup/Followup.cjs.map +1 -1
- package/build/cjs/components/feedback/followup/Followup.d.cts +3 -14
- package/build/cjs/components/feedback/index.d.cts +3 -3
- package/build/cjs/components/feedback/presets.cjs.map +1 -1
- package/build/cjs/components/feedback/presets.d.cts +2 -5
- package/build/cjs/components/feedback/questions/ContactQuestion.cjs.map +1 -1
- package/build/cjs/components/feedback/questions/ContactQuestion.d.cts +3 -28
- package/build/cjs/components/feedback/types.d.cts +42 -7
- package/build/cjs/components/icon-button/index.d.cts +1 -2
- package/build/cjs/components/image/index.d.cts +1 -3
- package/build/cjs/components/index.cjs +1 -1
- package/build/cjs/components/index.d.cts +1 -1
- package/build/cjs/components/input-panel/BasePanel.cjs +2 -0
- package/build/cjs/components/input-panel/BasePanel.cjs.map +1 -0
- package/build/cjs/components/input-panel/BasePanel.d.cts +10 -0
- package/build/cjs/components/input-panel/CheckboxPanel.cjs +2 -0
- package/build/cjs/components/input-panel/CheckboxPanel.cjs.map +1 -0
- package/build/cjs/components/input-panel/CheckboxPanel.d.cts +7 -0
- package/build/cjs/components/input-panel/RadioPanel.cjs +2 -0
- package/build/cjs/components/input-panel/RadioPanel.cjs.map +1 -0
- package/build/cjs/components/{radio-panel → input-panel}/RadioPanel.d.cts +2 -4
- package/build/cjs/components/input-panel/RadioPanelGroup.cjs +2 -0
- package/build/cjs/components/input-panel/RadioPanelGroup.cjs.map +1 -0
- package/build/cjs/components/input-panel/RadioPanelGroup.d.cts +4 -0
- package/build/cjs/components/input-panel/documentation/checkbox-panel/ControlledExample.d.cts +4 -0
- package/build/cjs/components/input-panel/documentation/checkbox-panel/UncontrolledExample.d.cts +4 -0
- package/build/cjs/components/input-panel/documentation/radio-panel/ControlledExample.d.cts +4 -0
- package/build/cjs/components/input-panel/documentation/radio-panel/UncontrolledExample.d.cts +4 -0
- package/build/cjs/components/input-panel/index.cjs +2 -0
- package/build/cjs/components/input-panel/index.d.cts +3 -0
- package/build/cjs/components/input-panel/radioPanelContext.cjs +2 -0
- package/build/cjs/components/input-panel/radioPanelContext.cjs.map +1 -0
- package/build/cjs/components/input-panel/radioPanelContext.d.cts +7 -0
- package/build/cjs/components/link-list/LinkList.cjs.map +1 -1
- package/build/cjs/components/link-list/LinkList.d.cts +2 -11
- package/build/cjs/components/link-list/index.d.cts +1 -0
- package/build/cjs/components/link-list/types.cjs +2 -0
- package/build/cjs/components/link-list/types.cjs.map +1 -0
- package/build/cjs/components/link-list/types.d.cts +11 -0
- package/build/cjs/components/list/index.d.cts +2 -3
- package/build/cjs/components/loader/index.d.cts +9 -18
- package/build/cjs/components/logo/index.d.cts +2 -4
- package/build/cjs/components/modal/Modal.cjs.map +1 -1
- package/build/cjs/components/modal/Modal.d.cts +8 -2
- package/build/cjs/components/modal/index.d.cts +2 -4
- package/build/cjs/components/pagination/Pagination.cjs.map +1 -1
- package/build/cjs/components/pagination/Pagination.d.cts +2 -1
- package/build/cjs/components/pagination/index.d.cts +1 -1
- package/build/cjs/components/popover/Popover.cjs.map +1 -1
- package/build/cjs/components/popover/Popover.d.cts +6 -6
- package/build/cjs/components/popover/index.d.cts +1 -1
- package/build/cjs/components/progress-bar/index.d.cts +2 -4
- package/build/cjs/components/radio-button/index.d.cts +3 -6
- package/build/cjs/components/select/Select.cjs +1 -1
- package/build/cjs/components/select/Select.cjs.map +1 -1
- package/build/cjs/components/select/Select.d.cts +5 -6
- package/build/cjs/components/select/index.d.cts +2 -4
- package/build/cjs/components/summary-table/SummaryTable.cjs.map +1 -1
- package/build/cjs/components/summary-table/SummaryTable.d.cts +2 -2
- package/build/cjs/components/summary-table/index.d.cts +2 -2
- package/build/cjs/components/system-message/SystemMessage.cjs.map +1 -1
- package/build/cjs/components/system-message/SystemMessage.d.cts +5 -6
- package/build/cjs/components/system-message/index.d.cts +1 -1
- package/build/cjs/components/tabs/index.d.cts +6 -6
- package/build/cjs/components/tag/index.d.cts +1 -3
- package/build/cjs/components/text-input/BaseTextArea.cjs.map +1 -1
- package/build/cjs/components/text-input/BaseTextArea.d.cts +1 -2
- package/build/cjs/components/text-input/index.d.cts +2 -2
- package/build/cjs/components/toast/index.d.cts +1 -1
- package/build/cjs/components/toast/toastContext.cjs.map +1 -1
- package/build/cjs/components/toast/toastContext.d.cts +1 -13
- package/build/cjs/components/toast/types.d.cts +11 -0
- package/build/cjs/components/toggle-switch/ToggleSlider.cjs.map +1 -1
- package/build/cjs/components/toggle-switch/ToggleSlider.d.cts +2 -3
- package/build/cjs/components/toggle-switch/ToggleSwitch.cjs.map +1 -1
- package/build/cjs/components/toggle-switch/ToggleSwitch.d.cts +1 -1
- package/build/cjs/components/toggle-switch/index.d.cts +2 -2
- package/build/cjs/components/tooltip/Tooltip.cjs +1 -1
- package/build/cjs/components/tooltip/Tooltip.cjs.map +1 -1
- package/build/cjs/components/tooltip/Tooltip.d.cts +1 -1
- package/build/cjs/core/tokens.cjs +1 -1
- package/build/cjs/core/tokens.cjs.map +1 -1
- package/build/cjs/core/tokens.d.cts +5 -1
- package/build/cjs/index.cjs +1 -1
- package/build/es/components/breadcrumb/index.d.ts +2 -4
- package/build/es/components/button/index.d.ts +1 -1
- package/build/es/components/button/types.d.ts +1 -2
- package/build/es/components/button/types.js.map +1 -1
- package/build/es/components/card/NavCard.d.ts +1 -10
- package/build/es/components/card/NavCard.js.map +1 -1
- package/build/es/components/card/index.d.ts +2 -2
- package/build/es/components/card/types.d.ts +8 -0
- package/build/es/components/card/types.js.map +1 -1
- package/build/es/components/combobox/Combobox.d.ts +6 -7
- package/build/es/components/combobox/Combobox.js.map +1 -1
- package/build/es/components/combobox/index.d.ts +1 -1
- package/build/es/components/cookie-consent/index.d.ts +2 -4
- package/build/es/components/datepicker/index.d.ts +3 -3
- package/build/es/components/datepicker/index.js +1 -1
- package/build/es/components/datepicker/types.d.ts +7 -0
- package/build/es/components/datepicker/utils.d.ts +0 -1
- package/build/es/components/datepicker/utils.js +1 -1
- package/build/es/components/datepicker/utils.js.map +1 -1
- package/build/es/components/datepicker/validation.d.ts +1 -8
- package/build/es/components/datepicker/validation.js.map +1 -1
- package/build/es/components/description-list/index.d.ts +1 -1
- package/build/es/components/expander/Expander.d.ts +1 -2
- package/build/es/components/expander/Expander.js.map +1 -1
- package/build/es/components/expander/index.d.ts +2 -4
- package/build/es/components/feedback/Feedback.d.ts +4 -9
- package/build/es/components/feedback/Feedback.js.map +1 -1
- package/build/es/components/feedback/followup/Followup.d.ts +3 -14
- package/build/es/components/feedback/followup/Followup.js.map +1 -1
- package/build/es/components/feedback/index.d.ts +3 -3
- package/build/es/components/feedback/presets.d.ts +2 -5
- package/build/es/components/feedback/presets.js.map +1 -1
- package/build/es/components/feedback/questions/ContactQuestion.d.ts +3 -28
- package/build/es/components/feedback/questions/ContactQuestion.js.map +1 -1
- package/build/es/components/feedback/types.d.ts +42 -7
- package/build/es/components/icon-button/index.d.ts +1 -2
- package/build/es/components/image/index.d.ts +1 -3
- package/build/es/components/index.d.ts +1 -1
- package/build/es/components/index.js +1 -1
- package/build/es/components/input-panel/BasePanel.d.ts +10 -0
- package/build/es/components/input-panel/BasePanel.js +2 -0
- package/build/es/components/input-panel/BasePanel.js.map +1 -0
- package/build/es/components/input-panel/CheckboxPanel.d.ts +7 -0
- package/build/es/components/input-panel/CheckboxPanel.js +2 -0
- package/build/es/components/input-panel/CheckboxPanel.js.map +1 -0
- package/build/es/components/{radio-panel → input-panel}/RadioPanel.d.ts +2 -4
- package/build/es/components/input-panel/RadioPanel.js +2 -0
- package/build/es/components/input-panel/RadioPanel.js.map +1 -0
- package/build/es/components/input-panel/RadioPanelGroup.d.ts +4 -0
- package/build/es/components/input-panel/RadioPanelGroup.js +2 -0
- package/build/es/components/input-panel/RadioPanelGroup.js.map +1 -0
- package/build/es/components/input-panel/documentation/checkbox-panel/ControlledExample.d.ts +4 -0
- package/build/es/components/input-panel/documentation/checkbox-panel/UncontrolledExample.d.ts +4 -0
- package/build/es/components/input-panel/documentation/radio-panel/ControlledExample.d.ts +4 -0
- package/build/es/components/input-panel/documentation/radio-panel/UncontrolledExample.d.ts +4 -0
- package/build/es/components/input-panel/index.d.ts +3 -0
- package/build/es/components/input-panel/index.js +2 -0
- package/build/es/components/input-panel/radioPanelContext.d.ts +7 -0
- package/build/es/components/input-panel/radioPanelContext.js +2 -0
- package/build/es/components/input-panel/radioPanelContext.js.map +1 -0
- package/build/es/components/link-list/LinkList.d.ts +2 -11
- package/build/es/components/link-list/LinkList.js.map +1 -1
- package/build/es/components/link-list/index.d.ts +1 -0
- package/build/es/components/link-list/types.d.ts +11 -0
- package/build/es/components/link-list/types.js +2 -0
- package/build/es/components/link-list/types.js.map +1 -0
- package/build/es/components/list/index.d.ts +2 -3
- package/build/es/components/loader/index.d.ts +9 -18
- package/build/es/components/logo/index.d.ts +2 -4
- package/build/es/components/modal/Modal.d.ts +8 -2
- package/build/es/components/modal/Modal.js.map +1 -1
- package/build/es/components/modal/index.d.ts +2 -4
- package/build/es/components/pagination/Pagination.d.ts +2 -1
- package/build/es/components/pagination/Pagination.js.map +1 -1
- package/build/es/components/pagination/index.d.ts +1 -1
- package/build/es/components/popover/Popover.d.ts +6 -6
- package/build/es/components/popover/Popover.js.map +1 -1
- package/build/es/components/popover/index.d.ts +1 -1
- package/build/es/components/progress-bar/index.d.ts +2 -4
- package/build/es/components/radio-button/index.d.ts +3 -6
- package/build/es/components/select/Select.d.ts +5 -6
- package/build/es/components/select/Select.js +1 -1
- package/build/es/components/select/Select.js.map +1 -1
- package/build/es/components/select/index.d.ts +2 -4
- package/build/es/components/summary-table/SummaryTable.d.ts +2 -2
- package/build/es/components/summary-table/SummaryTable.js.map +1 -1
- package/build/es/components/summary-table/index.d.ts +2 -2
- package/build/es/components/system-message/SystemMessage.d.ts +5 -6
- package/build/es/components/system-message/SystemMessage.js.map +1 -1
- package/build/es/components/system-message/index.d.ts +1 -1
- package/build/es/components/tabs/index.d.ts +6 -6
- package/build/es/components/tag/index.d.ts +1 -3
- package/build/es/components/text-input/BaseTextArea.d.ts +1 -2
- package/build/es/components/text-input/BaseTextArea.js.map +1 -1
- package/build/es/components/text-input/index.d.ts +2 -2
- package/build/es/components/toast/index.d.ts +1 -1
- package/build/es/components/toast/toastContext.d.ts +1 -13
- package/build/es/components/toast/toastContext.js.map +1 -1
- package/build/es/components/toast/types.d.ts +11 -0
- package/build/es/components/toggle-switch/ToggleSlider.d.ts +2 -3
- package/build/es/components/toggle-switch/ToggleSlider.js.map +1 -1
- package/build/es/components/toggle-switch/ToggleSwitch.d.ts +1 -1
- package/build/es/components/toggle-switch/ToggleSwitch.js.map +1 -1
- package/build/es/components/toggle-switch/index.d.ts +2 -2
- package/build/es/components/tooltip/Tooltip.d.ts +1 -1
- package/build/es/components/tooltip/Tooltip.js +1 -1
- package/build/es/components/tooltip/Tooltip.js.map +1 -1
- package/build/es/core/tokens.d.ts +5 -1
- package/build/es/core/tokens.js +1 -1
- package/build/es/core/tokens.js.map +1 -1
- package/build/es/index.js +1 -1
- package/package.json +12 -2
- package/styles/components/accordion/accordion.css +1 -1
- package/styles/components/breadcrumb/breadcrumb.css +1 -1
- package/styles/components/button/button.css +3 -3
- package/styles/components/button/button.min.css +1 -1
- package/styles/components/card/card.css +1 -1
- package/styles/components/checkbox/checkbox.css +5 -5
- package/styles/components/checkbox/checkbox.min.css +1 -1
- package/styles/components/combobox/combobox.css +1 -1
- package/styles/components/cookie-consent/cookie-consent.css +1 -1
- package/styles/components/datepicker/datepicker.css +1 -1
- package/styles/components/description-list/description-list.css +1 -1
- package/styles/components/expander/expander.css +1 -1
- package/styles/components/feedback/feedback.css +3 -3
- package/styles/components/feedback/feedback.min.css +1 -1
- package/styles/components/file-input/file-input.css +1 -1
- package/styles/components/icon/icon.css +1 -1
- package/styles/components/icon-button/icon-button.css +1 -1
- package/styles/components/image/image.css +1 -1
- package/styles/components/input-group/input-group.css +3 -3
- package/styles/components/input-group/input-group.min.css +1 -1
- package/styles/components/input-panel/_index.scss +2 -0
- package/styles/components/input-panel/checkbox-panel.css +132 -0
- package/styles/components/input-panel/checkbox-panel.min.css +1 -0
- package/styles/components/input-panel/checkbox-panel.scss +88 -0
- package/styles/components/{radio-panel → input-panel}/radio-panel.css +68 -57
- package/styles/components/input-panel/radio-panel.min.css +1 -0
- package/styles/components/input-panel/radio-panel.scss +79 -0
- package/styles/components/input-panel/shared.css +61 -0
- package/styles/components/input-panel/shared.min.css +1 -0
- package/styles/components/input-panel/shared.scss +75 -0
- package/styles/components/link/link.css +1 -1
- package/styles/components/link-list/link-list.css +1 -1
- package/styles/components/list/list.css +1 -1
- package/styles/components/loader/loader.css +7 -7
- package/styles/components/loader/loader.min.css +1 -1
- package/styles/components/loader/skeleton-loader.css +6 -6
- package/styles/components/loader/skeleton-loader.min.css +1 -1
- package/styles/components/logo/logo.css +1 -1
- package/styles/components/menu/menu.css +1 -1
- package/styles/components/message/message.css +3 -3
- package/styles/components/message/message.min.css +1 -1
- package/styles/components/modal/modal.css +1 -1
- package/styles/components/pagination/pagination.css +1 -1
- package/styles/components/popover/popover.css +1 -1
- package/styles/components/progress-bar/progress-bar.css +3 -3
- package/styles/components/progress-bar/progress-bar.min.css +1 -1
- package/styles/components/radio-button/radio-button.css +3 -3
- package/styles/components/radio-button/radio-button.min.css +1 -1
- package/styles/components/select/select.css +55 -145
- package/styles/components/select/select.min.css +1 -1
- package/styles/components/select/select.scss +62 -119
- package/styles/components/summary-table/summary-table.css +1 -1
- package/styles/components/system-message/system-message.css +3 -3
- package/styles/components/system-message/system-message.min.css +1 -1
- package/styles/components/table/table.css +1 -1
- package/styles/components/tabs/tabs.css +1 -1
- package/styles/components/tag/tag.css +1 -1
- package/styles/components/text-input/text-input.css +3 -3
- package/styles/components/text-input/text-input.min.css +1 -1
- package/styles/components/text-input/text-input.scss +1 -1
- package/styles/components/toast/toast.css +5 -5
- package/styles/components/toast/toast.min.css +1 -1
- package/styles/components/toggle-switch/toggle-switch.css +1 -1
- package/styles/components/tooltip/tooltip.css +1 -1
- package/styles/core/_color-tokens.scss +3 -1
- package/styles/core/_legacy-tokens.scss +1 -1
- package/styles/core/_tokens.scss +1 -1
- package/styles/core/core.css +8 -4
- package/styles/core/core.min.css +1 -1
- package/styles/core/jkl/_legacy-tokens.scss +1 -1
- package/styles/core/jkl/_tokens.scss +2 -1
- package/styles/styles.css +278 -286
- package/styles/styles.min.css +1 -1
- package/styles/styles.scss +1 -1
- package/styles/vind/vind.css +1 -1
- package/build/cjs/components/radio-panel/RadioPanel.cjs +0 -2
- package/build/cjs/components/radio-panel/RadioPanel.cjs.map +0 -1
- package/build/cjs/components/radio-panel/index.cjs +0 -2
- package/build/cjs/components/radio-panel/index.d.cts +0 -1
- package/build/es/components/radio-panel/RadioPanel.js +0 -2
- package/build/es/components/radio-panel/RadioPanel.js.map +0 -1
- package/build/es/components/radio-panel/index.d.ts +0 -1
- package/build/es/components/radio-panel/index.js +0 -2
- package/styles/components/radio-panel/_index.scss +0 -1
- package/styles/components/radio-panel/radio-panel.min.css +0 -1
- package/styles/components/radio-panel/radio-panel.scss +0 -140
- /package/build/cjs/components/{radio-panel → input-panel}/index.cjs.map +0 -0
- /package/build/es/components/{radio-panel → input-panel}/index.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radioPanelContext.js","sources":["../../../../src/components/input-panel/radioPanelContext.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\ntype Context = {\n checkedValue?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport const context = createContext<Context>({});\n"],"names":["context","createContext"],"mappings":"sCAOa,MAAAA,EAAUC,EAAuB,CAAE"}
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
type LinkComponent = <ElementType extends React.ElementType = "a">(props: PolymorphicPropsWithRef<ElementType>) => React.ReactElement | null;
|
|
4
|
-
type UnorderedLinkListProps = React.HTMLAttributes<HTMLUListElement> & {
|
|
5
|
-
variant: "unordered";
|
|
6
|
-
};
|
|
7
|
-
type OrderedLinkListProps = React.HTMLAttributes<HTMLOListElement> & {
|
|
8
|
-
variant: "ordered";
|
|
9
|
-
};
|
|
10
|
-
type LinkListProps = UnorderedLinkListProps | OrderedLinkListProps;
|
|
2
|
+
import { ItemProps, LinkComponent, LinkListProps } from './types.js';
|
|
11
3
|
export declare const LinkList: {
|
|
12
4
|
({ variant, className, ...rest }: LinkListProps): React.JSX.Element;
|
|
13
5
|
Link: LinkComponent;
|
|
14
|
-
Item:
|
|
6
|
+
Item: ItemProps;
|
|
15
7
|
};
|
|
16
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkList.js","sources":["../../../../src/components/link-list/LinkList.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React
|
|
1
|
+
{"version":3,"file":"LinkList.js","sources":["../../../../src/components/link-list/LinkList.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React from \"react\";\nimport {\n PolymorphicPropsWithRef,\n PolymorphicRef,\n} from \"../../utilities/polymorphism/polymorphism.js\";\nimport { ArrowRightIcon } from \"../icon/icons/ArrowRightIcon.js\";\nimport { ItemProps, LinkComponent, LinkListProps } from \"./types.js\";\n\nconst Item: ItemProps = ({ className, ...rest }) => {\n return (\n <li className={clsx(\"jkl-link-list-item\", className)} {...rest}></li>\n );\n};\n\nconst Link = React.forwardRef(function LinkListLink<\n ElementType extends React.ElementType = \"a\",\n>(\n props: PolymorphicPropsWithRef<ElementType>,\n ref: PolymorphicRef<ElementType>,\n) {\n const { as: Component = \"a\", children, className, ...rest } = props;\n\n return (\n <Component\n className={clsx(\"jkl-link-list-link\", className)}\n ref={ref}\n {...rest}\n >\n {children}\n <ArrowRightIcon className=\"jkl-link-list-link__arrow\" />\n </Component>\n );\n}) as LinkComponent;\n\nexport const LinkList = ({\n variant,\n className,\n ...rest\n}: LinkListProps): React.JSX.Element => {\n const Component = variant === \"ordered\" ? \"ol\" : \"ul\";\n\n return (\n <Component\n className={clsx(\"jkl-link-list\", className, {\n \"jkl-link-list--ordered\": variant === \"ordered\",\n \"jkl-link-list--unordered\": variant === \"unordered\",\n })}\n {...rest}\n />\n );\n};\n\nLinkList.Link = Link;\nLinkList.Item = Item;\n"],"names":["Link","React","forwardRef","props","ref","as","Component","children","className","rest","jsxs","clsx","jsx","ArrowRightIcon","LinkList","variant","Item"],"mappings":"sLASA,MAMMA,EAAOC,EAAMC,YAAW,SAG1BC,EACAC,GAEM,MAAEC,GAAIC,EAAY,IAAKC,SAAAA,EAAUC,UAAAA,KAAcC,GAASN,EAG1D,OAAAO,EAACJ,EAAA,CACGE,UAAWG,EAAK,qBAAsBH,GACtCJ,IAAAA,KACIK,EAEHF,SAAA,CAAAA,EACDK,EAACC,EAAe,CAAAL,UAAU,gCAGtC,IAEaM,EAAW,EACpBC,QAAAA,EACAP,UAAAA,KACGC,KAKCG,EAH0B,YAAZG,EAAwB,KAAO,KAG5C,CACGP,UAAWG,EAAK,gBAAiBH,EAAW,CACxC,yBAAsC,YAAZO,EAC1B,2BAAwC,cAAZA,OAE5BN,IAKhBK,EAASd,KAAOA,EAChBc,EAASE,KA7Ce,EAAGR,UAAAA,KAAcC,KAEjCG,EAAC,MAAGJ,UAAWG,EAAK,qBAAsBH,MAAgBC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ComponentProps, FC } from 'react';
|
|
2
|
+
import { PolymorphicPropsWithRef } from '../../utilities/polymorphism/polymorphism.js';
|
|
3
|
+
export type UnorderedLinkListProps = React.HTMLAttributes<HTMLUListElement> & {
|
|
4
|
+
variant: "unordered";
|
|
5
|
+
};
|
|
6
|
+
export type OrderedLinkListProps = React.HTMLAttributes<HTMLOListElement> & {
|
|
7
|
+
variant: "ordered";
|
|
8
|
+
};
|
|
9
|
+
export type LinkListProps = UnorderedLinkListProps | OrderedLinkListProps;
|
|
10
|
+
export type LinkComponent = <ElementType extends React.ElementType = "a">(props: PolymorphicPropsWithRef<ElementType>) => React.ReactElement | null;
|
|
11
|
+
export type ItemProps = FC<ComponentProps<"li">>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export {
|
|
3
|
-
export { ListItem, CheckListItem, CrossListItem } from './ListItem.js';
|
|
1
|
+
export { UnorderedList, OrderedList, List, type ListProps } from './List.js';
|
|
2
|
+
export { ListItem, CheckListItem, CrossListItem, type ListItemProps, } from './ListItem.js';
|
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
export { Loader } from './Loader.js';
|
|
2
|
-
export
|
|
3
|
-
export type
|
|
4
|
-
export {
|
|
5
|
-
export type
|
|
6
|
-
export {
|
|
7
|
-
export type
|
|
8
|
-
export {
|
|
9
|
-
export type
|
|
10
|
-
export { SkeletonElement } from './skeletons/SkeletonElement.js';
|
|
11
|
-
export type { SkeletonInputProps } from './skeletons/SkeletonInput.js';
|
|
12
|
-
export { SkeletonInput } from './skeletons/SkeletonInput.js';
|
|
13
|
-
export type { SkeletonRadioButtonGroupProps } from './skeletons/SkeletonRadioButtonGroup.js';
|
|
14
|
-
export { SkeletonRadioButtonGroup } from './skeletons/SkeletonRadioButtonGroup.js';
|
|
15
|
-
export type { SkeletonTableProps, SkeletonTableHeaderProps, SkeletonTableRowProps, } from './skeletons/SkeletonTable.js';
|
|
16
|
-
export { SkeletonTable, SkeletonTableHeader, SkeletonTableRow, } from './skeletons/SkeletonTable.js';
|
|
17
|
-
export type { SkeletonTextAreaProps } from './skeletons/SkeletonTextArea.js';
|
|
18
|
-
export { SkeletonTextArea } from './skeletons/SkeletonTextArea.js';
|
|
1
|
+
export { Loader, type LoaderVariant, type LoaderProps } from './Loader.js';
|
|
2
|
+
export { SkeletonAnimation, type SkeletonAnimationProps, } from './skeletons/SkeletonAnimation.js';
|
|
3
|
+
export { SkeletonButton, type SkeletonButtonProps, } from './skeletons/SkeletonButton.js';
|
|
4
|
+
export { SkeletonCheckboxGroup, type SkeletonCheckboxGroupProps, } from './skeletons/SkeletonCheckboxGroup.js';
|
|
5
|
+
export { SkeletonElement, type SkeletonElementProps, } from './skeletons/SkeletonElement.js';
|
|
6
|
+
export { SkeletonInput, type SkeletonInputProps, } from './skeletons/SkeletonInput.js';
|
|
7
|
+
export { SkeletonRadioButtonGroup, type SkeletonRadioButtonGroupProps, } from './skeletons/SkeletonRadioButtonGroup.js';
|
|
8
|
+
export { SkeletonTable, SkeletonTableHeader, SkeletonTableRow, type SkeletonTableProps, type SkeletonTableHeaderProps, type SkeletonTableRowProps, } from './skeletons/SkeletonTable.js';
|
|
9
|
+
export { SkeletonTextArea, type SkeletonTextAreaProps, } from './skeletons/SkeletonTextArea.js';
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export {
|
|
3
|
-
export type { LogoStampProps } from './LogoStamp.js';
|
|
4
|
-
export { LogoStamp } from './LogoStamp.js';
|
|
1
|
+
export { Logo, type LogoProps } from './Logo.js';
|
|
2
|
+
export { LogoStamp, type LogoStampProps } from './LogoStamp.js';
|
|
5
3
|
export { ForsikringLevertAvFremtind, FraSB1ogDNB, InnovasjonFraFremtind, TeknologiFraFremtind, VartEgetForsikringsselskap, VartForsikringsselskap, } from './text-paths/index.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { WithOptionalChildren } from '../../core/types.js';
|
|
3
3
|
import { IconButtonProps } from '../icon-button/IconButton.js';
|
|
4
|
+
import { ModalConfig } from './useModal.js';
|
|
4
5
|
export interface ModalProps extends WithOptionalChildren {
|
|
5
6
|
id?: string;
|
|
6
7
|
className?: string;
|
|
@@ -11,7 +12,7 @@ export interface ModalProps extends WithOptionalChildren {
|
|
|
11
12
|
*/
|
|
12
13
|
padding?: 16 | 24 | 40;
|
|
13
14
|
}
|
|
14
|
-
type BaseModalProps = Omit<ModalProps, "padding" | "component">;
|
|
15
|
+
export type BaseModalProps = Omit<ModalProps, "padding" | "component">;
|
|
15
16
|
/**
|
|
16
17
|
* Ment å brukes med `useModal`.
|
|
17
18
|
*/
|
|
@@ -23,6 +24,12 @@ export declare const ModalContainer: React.ForwardRefExoticComponent<Omit<{
|
|
|
23
24
|
'aria-hidden': boolean;
|
|
24
25
|
'aria-labelledby': string;
|
|
25
26
|
} & BaseModalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
27
|
+
export type ModalOverlayProps = ModalConfig["overlay"] & BaseModalProps & {
|
|
28
|
+
/**
|
|
29
|
+
* Rendre uten bakgrunnsfarge, men med click target for å lukke modalen ved klikk utenfor.
|
|
30
|
+
*/
|
|
31
|
+
transparent?: boolean;
|
|
32
|
+
};
|
|
26
33
|
/**
|
|
27
34
|
* Ment å brukes med `useModal`.
|
|
28
35
|
*/
|
|
@@ -69,4 +76,3 @@ export declare const ModalBody: React.ForwardRefExoticComponent<BaseModalProps &
|
|
|
69
76
|
* Ment å brukes med `useModal`.
|
|
70
77
|
*/
|
|
71
78
|
export declare const ModalActions: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
72
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../../src/components/modal/Modal.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { WithOptionalChildren } from \"../../core/types.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { IconButton, IconButtonProps } from \"../icon-button/IconButton.js\";\nimport { ModalConfig } from \"./useModal.js\";\n\nexport interface ModalProps extends WithOptionalChildren {\n id?: string;\n className?: string;\n component?: React.ElementType;\n style?: React.CSSProperties;\n /**\n * Overstyrer padding på modalen via en CSS-variabel.\n */\n padding?: 16 | 24 | 40;\n}\n\
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../src/components/modal/Modal.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { WithOptionalChildren } from \"../../core/types.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { IconButton, IconButtonProps } from \"../icon-button/IconButton.js\";\nimport { ModalConfig } from \"./useModal.js\";\n\nexport interface ModalProps extends WithOptionalChildren {\n id?: string;\n className?: string;\n component?: React.ElementType;\n style?: React.CSSProperties;\n /**\n * Overstyrer padding på modalen via en CSS-variabel.\n */\n padding?: 16 | 24 | 40;\n}\n\nexport type BaseModalProps = Omit<ModalProps, \"padding\" | \"component\">;\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalContainer = forwardRef<\n HTMLDivElement,\n ModalConfig[\"container\"] & BaseModalProps\n>(({ className, ...rest }, ref) => {\n // TODO: 'data-portal' fjernes når modalen tar i bruk Popover komponenten\n return (\n <div\n className={clsx(\"jkl-modal-container\", className)}\n {...rest}\n ref={ref}\n data-portal\n />\n );\n});\nModalContainer.displayName = \"ModalContainer\";\n\nexport type ModalOverlayProps = ModalConfig[\"overlay\"] &\n BaseModalProps & {\n /**\n * Rendre uten bakgrunnsfarge, men med click target for å lukke modalen ved klikk utenfor.\n */\n transparent?: boolean;\n };\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalOverlay = forwardRef<HTMLDivElement, ModalOverlayProps>(\n ({ className, transparent, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-overlay\", className, {\n \"jkl-modal-overlay--transparent\": transparent,\n })}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalOverlay.displayName = \"ModalOverlay\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const Modal = forwardRef<HTMLElement, ModalConfig[\"modal\"] & ModalProps>(\n ({ className, component, padding, style, ...rest }, ref) => {\n const C = component || \"div\";\n return (\n <C\n className={clsx(\"jkl jkl-modal\", className)}\n style={\n {\n \"--jkl-modal-padding\": padding\n ? `var(--jkl-spacing-${padding})`\n : undefined,\n ...style,\n } as React.CSSProperties\n }\n {...rest}\n ref={ref}\n />\n );\n },\n);\nModal.displayName = \"Modal\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalHeader = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-header\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalHeader.displayName = \"ModalHeader\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalTitle = forwardRef<\n HTMLParagraphElement,\n ModalConfig[\"title\"] & BaseModalProps\n>(({ className, ...rest }, ref) => (\n <p className={clsx(\"jkl-modal-title\", className)} {...rest} ref={ref} />\n));\nModalTitle.displayName = \"ModalTitle\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalCloseButton = forwardRef<\n HTMLButtonElement,\n Omit<ModalConfig[\"closeButton\"], \"onClick\"> &\n BaseModalProps &\n IconButtonProps\n>(({ className, ...rest }, ref) => (\n <IconButton\n className={clsx(\"jkl-modal-close\", className)}\n data-testautoid=\"jkl-modal-close\"\n {...rest}\n ref={ref}\n >\n <CloseIcon variant=\"medium\" />\n </IconButton>\n));\nModalCloseButton.displayName = \"ModalCloseButton\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalBody = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-body\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalBody.displayName = \"ModalBody\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalActions = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-actions\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalActions.displayName = \"ModalActions\";\n"],"names":["ModalContainer","forwardRef","className","rest","ref","jsx","clsx","displayName","ModalOverlay","transparent","Modal","component","padding","style","ModalHeader","ModalTitle","ModalCloseButton","IconButton","children","CloseIcon","variant","ModalBody","ModalActions"],"mappings":"0OAuBa,MAAAA,EAAiBC,GAG5B,EAAGC,UAAAA,KAAcC,GAAQC,IAGnBC,EAAC,MAAA,CACGH,UAAWI,EAAK,sBAAuBJ,MACnCC,EACJC,IAAAA,EACA,eAAW,MAIvBJ,EAAeO,YAAc,iBAatB,MAAMC,EAAeP,GACxB,EAAGC,UAAAA,EAAWO,YAAAA,KAAgBN,GAAQC,IAClCC,EAAC,MAAA,CACGH,UAAWI,EAAK,oBAAqBJ,EAAW,CAC5C,iCAAkCO,OAElCN,EACJC,IAAAA,MAIZI,EAAaD,YAAc,eAKpB,MAAMG,EAAQT,GACjB,EAAGC,UAAAA,EAAWS,UAAAA,EAAWC,QAAAA,EAASC,MAAAA,KAAUV,GAAQC,IAG5CC,EAFMM,GAAa,MAElB,CACGT,UAAWI,EAAK,gBAAiBJ,GACjCW,MACI,CACI,sBAAuBD,EACjB,qBAAqBA,UACrB,KACHC,MAGPV,EACJC,IAAAA,MAKhBM,EAAMH,YAAc,QAKb,MAAMO,EAAcb,GACvB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,mBAAoBJ,MAChCC,EACJC,IAAAA,MAIZU,EAAYP,YAAc,cAKnB,MAAMQ,EAAad,GAGxB,EAAGC,UAAAA,KAAcC,GAAQC,MACtB,IAAE,CAAAF,UAAWI,EAAK,kBAAmBJ,MAAgBC,EAAMC,IAAAA,MAEhEW,EAAWR,YAAc,aAKZ,MAAAS,EAAmBf,GAK9B,EAAGC,UAAAA,KAAcC,GAAQC,IACvBC,EAACY,EAAA,CACGf,UAAWI,EAAK,kBAAmBJ,GACnC,kBAAgB,qBACZC,EACJC,IAAAA,EAEAc,SAAAb,EAACc,EAAU,CAAAC,QAAQ,eAG3BJ,EAAiBT,YAAc,mBAKxB,MAAMc,EAAYpB,GACrB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,iBAAkBJ,MAC9BC,EACJC,IAAAA,MAIZiB,EAAUd,YAAc,YAKjB,MAAMe,EAAerB,GACxB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,oBAAqBJ,MACjCC,EACJC,IAAAA,MAIZkB,EAAaf,YAAc"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export {
|
|
3
|
-
export type { UseModalOptions, ModalInstance, ModalConfig, } from './useModal.js';
|
|
4
|
-
export { useModal } from './useModal.js';
|
|
1
|
+
export { ModalContainer, ModalOverlay, Modal, ModalHeader, ModalTitle, ModalCloseButton, ModalBody, ModalActions, type ModalProps, type BaseModalProps, type ModalOverlayProps, } from './Modal.js';
|
|
2
|
+
export { useModal, type UseModalOptions, type ModalInstance, type ModalConfig, } from './useModal.js';
|
|
@@ -14,5 +14,6 @@ export type PaginationProps<ElementType extends React.ElementType> = Polymorphic
|
|
|
14
14
|
next: string;
|
|
15
15
|
};
|
|
16
16
|
}>;
|
|
17
|
-
|
|
17
|
+
type PaginationComponent = <ElementType extends React.ElementType = "nav">(props: PaginationProps<ElementType>) => React.ReactElement | null;
|
|
18
18
|
export declare const Pagination: PaginationComponent;
|
|
19
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sources":["../../../../src/components/pagination/Pagination.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport {\n PolymorphicPropsWithRef,\n PolymorphicRef,\n} from \"../../utilities/polymorphism/polymorphism.js\";\nimport { ChevronLeftIcon } from \"../icon/icons/ChevronLeftIcon.js\";\nimport { ChevronRightIcon } from \"../icon/icons/ChevronRightIcon.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { PageButton } from \"./PageButton.js\";\n\nexport type PaginationProps<ElementType extends React.ElementType> =\n PolymorphicPropsWithRef<\n ElementType,\n {\n currentPage: number;\n numberOfPages: number;\n onPageChange: (toPage: number, fromPage: number) => void;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"next\" og \"previous\"\n * brukes som hint til skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { previous: \"Forrige side\", next: \"Neste side\" }\n */\n labels?: {\n previous: string;\n next: string;\n };\n }\n >;\n\nexport type PaginationComponent = <\n ElementType extends React.ElementType = \"nav\",\n>(\n props: PaginationProps<ElementType>,\n) => React.ReactElement | null;\n\nexport const Pagination = React.forwardRef(function Pagination<\n ElementType extends React.ElementType = \"nav\",\n>(\n {\n onPageChange,\n currentPage,\n numberOfPages,\n labels = {\n previous: \"Forrige side\",\n next: \"Neste side\",\n },\n as,\n ...rest\n }: PaginationProps<ElementType>,\n ref?: PolymorphicRef<ElementType>,\n) {\n useEffect(() => {\n if (currentPage < 1) {\n console.error(\n \"[Pagination]: currentPage prop should be set to a value larger than 0\",\n );\n }\n if (currentPage > numberOfPages) {\n console.error(\n \"[Pagination]: currentPage prop should not be set to a value larger than numberOfPages\",\n );\n }\n }, [currentPage, numberOfPages]);\n\n const Component = as || \"nav\";\n\n if (numberOfPages <= 7) {\n return (\n <Component ref={ref} {...rest} className=\"jkl-pagination\">\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.previous}\n onClick={() => onPageChange(currentPage - 1, currentPage)}\n aria-disabled={currentPage === 1}\n tabIndex={currentPage === 1 ? -1 : 0}\n >\n <ChevronLeftIcon />\n </IconButton>\n <ol className=\"jkl-pagination__pages\">\n {Array.from({ length: numberOfPages }).map((_, index) => {\n const page = index + 1;\n return (\n <PageButton\n key={index}\n isActive={currentPage === page}\n number={page}\n total={numberOfPages}\n onClick={() => onPageChange(page, currentPage)}\n />\n );\n })}\n </ol>\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.next}\n onClick={() => onPageChange(currentPage + 1, currentPage)}\n aria-disabled={currentPage === numberOfPages}\n tabIndex={currentPage === numberOfPages ? -1 : 0}\n >\n <ChevronRightIcon />\n </IconButton>\n </Component>\n );\n }\n\n const showStartEllipsis = currentPage > 4;\n const showEndEllipsis = currentPage < numberOfPages - 3;\n\n const startEllipsis = Math.min(\n Math.max(currentPage - 2, 2),\n numberOfPages - 5,\n );\n const centerPageNumberStart = Math.min(\n startEllipsis + 1,\n numberOfPages - 4,\n );\n const centerPageNumber = Math.min(\n centerPageNumberStart + 1,\n numberOfPages - 3,\n );\n const centerPageNumberEnd = Math.min(\n centerPageNumberStart + 2,\n numberOfPages - 2,\n );\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 1);\n\n return (\n <Component ref={ref} {...rest} className=\"jkl-pagination\">\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.previous}\n onClick={() => onPageChange(currentPage - 1, currentPage)}\n aria-disabled={currentPage === 1}\n tabIndex={currentPage === 1 ? -1 : 0}\n >\n <ChevronLeftIcon />\n </IconButton>\n <ol className=\"jkl-pagination__pages\">\n <PageButton\n isActive={currentPage === 1}\n number={1}\n total={numberOfPages}\n onClick={() => onPageChange(1, currentPage)}\n />\n {showStartEllipsis ? (\n <span\n aria-hidden\n className=\"jkl-pagination-button--elipsis\"\n >\n {\"...\"}\n </span>\n ) : (\n <PageButton\n isActive={currentPage === startEllipsis}\n number={startEllipsis}\n total={numberOfPages}\n onClick={() => onPageChange(startEllipsis, currentPage)}\n />\n )}\n <PageButton\n isActive={currentPage === centerPageNumberStart}\n number={centerPageNumberStart}\n total={numberOfPages}\n onClick={() =>\n onPageChange(centerPageNumberStart, currentPage)\n }\n />\n <PageButton\n isActive={currentPage === centerPageNumber}\n number={centerPageNumber}\n total={numberOfPages}\n onClick={() => onPageChange(centerPageNumber, currentPage)}\n />\n <PageButton\n isActive={currentPage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n total={numberOfPages}\n onClick={() =>\n onPageChange(centerPageNumberEnd, currentPage)\n }\n />\n {showEndEllipsis ? (\n <span\n aria-hidden\n className=\"jkl-pagination-button--elipsis\"\n >\n {\"...\"}\n </span>\n ) : (\n <PageButton\n isActive={currentPage === endEllipsis}\n number={endEllipsis}\n total={numberOfPages}\n onClick={() => onPageChange(endEllipsis, currentPage)}\n />\n )}\n <PageButton\n isActive={currentPage === numberOfPages}\n number={numberOfPages}\n total={numberOfPages}\n onClick={() => onPageChange(numberOfPages, currentPage)}\n />\n </ol>\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.next}\n onClick={() => onPageChange(currentPage + 1, currentPage)}\n aria-disabled={currentPage === numberOfPages}\n tabIndex={currentPage === numberOfPages ? -1 : 0}\n >\n <ChevronRightIcon />\n </IconButton>\n </Component>\n );\n}) as PaginationComponent;\n"],"names":["Pagination","React","forwardRef","onPageChange","currentPage","numberOfPages","labels","previous","next","as","rest","ref","useEffect","console","error","Component","className","children","jsx","IconButton","title","onClick","tabIndex","ChevronLeftIcon","from","length","map","_","index","page","PageButton","isActive","number","total","ChevronRightIcon","showStartEllipsis","showEndEllipsis","startEllipsis","Math","min","max","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Pagination.js","sources":["../../../../src/components/pagination/Pagination.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport {\n PolymorphicPropsWithRef,\n PolymorphicRef,\n} from \"../../utilities/polymorphism/polymorphism.js\";\nimport { ChevronLeftIcon } from \"../icon/icons/ChevronLeftIcon.js\";\nimport { ChevronRightIcon } from \"../icon/icons/ChevronRightIcon.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { PageButton } from \"./PageButton.js\";\n\nexport type PaginationProps<ElementType extends React.ElementType> =\n PolymorphicPropsWithRef<\n ElementType,\n {\n currentPage: number;\n numberOfPages: number;\n onPageChange: (toPage: number, fromPage: number) => void;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"next\" og \"previous\"\n * brukes som hint til skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { previous: \"Forrige side\", next: \"Neste side\" }\n */\n labels?: {\n previous: string;\n next: string;\n };\n }\n >;\n\ntype PaginationComponent = <ElementType extends React.ElementType = \"nav\">(\n props: PaginationProps<ElementType>,\n) => React.ReactElement | null;\n\nexport const Pagination = React.forwardRef(function Pagination<\n ElementType extends React.ElementType = \"nav\",\n>(\n {\n onPageChange,\n currentPage,\n numberOfPages,\n labels = {\n previous: \"Forrige side\",\n next: \"Neste side\",\n },\n as,\n ...rest\n }: PaginationProps<ElementType>,\n ref?: PolymorphicRef<ElementType>,\n) {\n useEffect(() => {\n if (currentPage < 1) {\n console.error(\n \"[Pagination]: currentPage prop should be set to a value larger than 0\",\n );\n }\n if (currentPage > numberOfPages) {\n console.error(\n \"[Pagination]: currentPage prop should not be set to a value larger than numberOfPages\",\n );\n }\n }, [currentPage, numberOfPages]);\n\n const Component = as || \"nav\";\n\n if (numberOfPages <= 7) {\n return (\n <Component ref={ref} {...rest} className=\"jkl-pagination\">\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.previous}\n onClick={() => onPageChange(currentPage - 1, currentPage)}\n aria-disabled={currentPage === 1}\n tabIndex={currentPage === 1 ? -1 : 0}\n >\n <ChevronLeftIcon />\n </IconButton>\n <ol className=\"jkl-pagination__pages\">\n {Array.from({ length: numberOfPages }).map((_, index) => {\n const page = index + 1;\n return (\n <PageButton\n key={index}\n isActive={currentPage === page}\n number={page}\n total={numberOfPages}\n onClick={() => onPageChange(page, currentPage)}\n />\n );\n })}\n </ol>\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.next}\n onClick={() => onPageChange(currentPage + 1, currentPage)}\n aria-disabled={currentPage === numberOfPages}\n tabIndex={currentPage === numberOfPages ? -1 : 0}\n >\n <ChevronRightIcon />\n </IconButton>\n </Component>\n );\n }\n\n const showStartEllipsis = currentPage > 4;\n const showEndEllipsis = currentPage < numberOfPages - 3;\n\n const startEllipsis = Math.min(\n Math.max(currentPage - 2, 2),\n numberOfPages - 5,\n );\n const centerPageNumberStart = Math.min(\n startEllipsis + 1,\n numberOfPages - 4,\n );\n const centerPageNumber = Math.min(\n centerPageNumberStart + 1,\n numberOfPages - 3,\n );\n const centerPageNumberEnd = Math.min(\n centerPageNumberStart + 2,\n numberOfPages - 2,\n );\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 1);\n\n return (\n <Component ref={ref} {...rest} className=\"jkl-pagination\">\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.previous}\n onClick={() => onPageChange(currentPage - 1, currentPage)}\n aria-disabled={currentPage === 1}\n tabIndex={currentPage === 1 ? -1 : 0}\n >\n <ChevronLeftIcon />\n </IconButton>\n <ol className=\"jkl-pagination__pages\">\n <PageButton\n isActive={currentPage === 1}\n number={1}\n total={numberOfPages}\n onClick={() => onPageChange(1, currentPage)}\n />\n {showStartEllipsis ? (\n <span\n aria-hidden\n className=\"jkl-pagination-button--elipsis\"\n >\n {\"...\"}\n </span>\n ) : (\n <PageButton\n isActive={currentPage === startEllipsis}\n number={startEllipsis}\n total={numberOfPages}\n onClick={() => onPageChange(startEllipsis, currentPage)}\n />\n )}\n <PageButton\n isActive={currentPage === centerPageNumberStart}\n number={centerPageNumberStart}\n total={numberOfPages}\n onClick={() =>\n onPageChange(centerPageNumberStart, currentPage)\n }\n />\n <PageButton\n isActive={currentPage === centerPageNumber}\n number={centerPageNumber}\n total={numberOfPages}\n onClick={() => onPageChange(centerPageNumber, currentPage)}\n />\n <PageButton\n isActive={currentPage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n total={numberOfPages}\n onClick={() =>\n onPageChange(centerPageNumberEnd, currentPage)\n }\n />\n {showEndEllipsis ? (\n <span\n aria-hidden\n className=\"jkl-pagination-button--elipsis\"\n >\n {\"...\"}\n </span>\n ) : (\n <PageButton\n isActive={currentPage === endEllipsis}\n number={endEllipsis}\n total={numberOfPages}\n onClick={() => onPageChange(endEllipsis, currentPage)}\n />\n )}\n <PageButton\n isActive={currentPage === numberOfPages}\n number={numberOfPages}\n total={numberOfPages}\n onClick={() => onPageChange(numberOfPages, currentPage)}\n />\n </ol>\n <IconButton\n className=\"jkl-pagination-button\"\n title={labels.next}\n onClick={() => onPageChange(currentPage + 1, currentPage)}\n aria-disabled={currentPage === numberOfPages}\n tabIndex={currentPage === numberOfPages ? -1 : 0}\n >\n <ChevronRightIcon />\n </IconButton>\n </Component>\n );\n}) as PaginationComponent;\n"],"names":["Pagination","React","forwardRef","onPageChange","currentPage","numberOfPages","labels","previous","next","as","rest","ref","useEffect","console","error","Component","className","children","jsx","IconButton","title","onClick","tabIndex","ChevronLeftIcon","from","length","map","_","index","page","PageButton","isActive","number","total","ChevronRightIcon","showStartEllipsis","showEndEllipsis","startEllipsis","Math","min","max","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","jsxs"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { Pagination, type PaginationProps } from './Pagination.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useFocus, useHover, useClick, useDismiss, useRole, UseFloatingOptions, ReferenceType } from '@floating-ui/react';
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
type ClickOptions = Parameters<typeof useClick>[1];
|
|
4
|
-
type DismissOptions = Parameters<typeof useDismiss>[1];
|
|
5
|
-
type FocusOptions = Parameters<typeof useFocus>[1];
|
|
6
|
-
type HoverOptions = Parameters<typeof useHover>[1];
|
|
7
|
-
type RoleOptions = Parameters<typeof useRole>[1];
|
|
8
|
-
interface PopoverOptions {
|
|
3
|
+
export type ClickOptions = Parameters<typeof useClick>[1];
|
|
4
|
+
export type DismissOptions = Parameters<typeof useDismiss>[1];
|
|
5
|
+
export type FocusOptions = Parameters<typeof useFocus>[1];
|
|
6
|
+
export type HoverOptions = Parameters<typeof useHover>[1];
|
|
7
|
+
export type RoleOptions = Parameters<typeof useRole>[1];
|
|
8
|
+
export interface PopoverOptions {
|
|
9
9
|
/**
|
|
10
10
|
* Angir om popoveren er åpen eller lukket.
|
|
11
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","sources":["../../../../src/components/popover/Popover.tsx"],"sourcesContent":["import {\n useFloating,\n useFocus,\n useHover,\n useClick,\n useDismiss,\n autoUpdate,\n useRole,\n useMergeRefs,\n offset,\n flip,\n shift,\n useInteractions,\n FloatingPortal,\n FloatingFocusManager,\n UseFloatingOptions,\n VirtualElement,\n ReferenceElement,\n ReferenceType,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport { getThemeAndDensity } from \"../../utilities/getThemeAndDensity.js\";\n\ntype ClickOptions = Parameters<typeof useClick>[1];\ntype DismissOptions = Parameters<typeof useDismiss>[1];\ntype FocusOptions = Parameters<typeof useFocus>[1];\ntype HoverOptions = Parameters<typeof useHover>[1];\ntype RoleOptions = Parameters<typeof useRole>[1];\n\ninterface PopoverOptions {\n /**\n * Angir om popoveren er åpen eller lukket.\n *\n * @see https://floating-ui.com/docs/usefloating#open\n */\n open?: boolean;\n /**\n * Callback som trigges når popoveren åpnes eller lukkes.\n *\n * @see https://floating-ui.com/docs/usefloating#onopenchange\n */\n onOpenChange?: UseFloatingOptions[\"onOpenChange\"];\n /**\n * Bestemmer plasseringen av popoveren.\n *\n * @see https://floating-ui.com/docs/usefloating#placement\n *\n * @default \"bottom-start\"\n */\n placement?: UseFloatingOptions[\"placement\"];\n /**\n * Definerer strategien for posisjonering av popoveren.\n *\n * @see https://floating-ui.com/docs/usefloating#strategy\n *\n * @default \"absolute\"\n */\n strategy?: UseFloatingOptions[\"strategy\"];\n /**\n * Angir om popoveren skal fungere som en modal, der fokus er låst til det flytende elementet\n * og innhold utenfor ikke kan interageres med.\n *\n * @see https://floating-ui.com/docs/usefloating#modal\n *\n * @default true\n */\n modal?: boolean;\n /**\n * Justerer avstanden mellom referanse-elementet og popoveren.\n *\n * @see https://floating-ui.com/docs/offset\n *\n * @default 4\n */\n offset?: number;\n /**\n * Referanse til elementet som popoveren skal posisjoneres i forhold til.\n *\n * @see https://floating-ui.com/docs/usefloating#setpositionreference\n *\n * @default Popover.Trigger\n */\n positionReference?: React.RefObject<ReferenceType>;\n /**\n * Options for hover-interaksjoner.\n *\n * @see https://floating-ui.com/docs/usehover\n *\n * @default { enabled: false }\n */\n hoverOptions?: HoverOptions;\n /**\n * Options for fokus-interaksjoner.\n *\n * @see https://floating-ui.com/docs/usefocus\n *\n * @default { enabled: false }\n */\n focusOptions?: FocusOptions;\n /**\n * Options for klikk-interaksjoner.\n *\n * @see https://floating-ui.com/docs/useclick\n *\n * @default { enabled: false }\n */\n clickOptions?: ClickOptions;\n /**\n * Konfigurerer rollen for popoveren.\n *\n * @see https://floating-ui.com/docs/userole\n *\n * @default { enabled: true, role: \"dialog\" }\n */\n roleOptions?: RoleOptions;\n /**\n * Options for å lukke popoveren når en dismissal skjer,\n * som ved å klikke utenfor eller trykke på \"Escape\"-tasten.\n *\n * @see https://floating-ui.com/docs/usedismiss\n *\n * @default { enabled: true }\n */\n dismissOptions?: DismissOptions;\n}\n\nconst usePopover = ({\n open: _open,\n onOpenChange: _onOpenChange,\n placement = \"bottom-start\",\n strategy = \"absolute\",\n modal = true,\n offset: _offset = 4,\n positionReference,\n hoverOptions,\n focusOptions,\n clickOptions,\n roleOptions,\n dismissOptions,\n}: PopoverOptions) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(_open);\n\n const open = _open ?? uncontrolledOpen;\n const onOpenChange = _onOpenChange ?? setUncontrolledOpen;\n\n const data = useFloating({\n open,\n onOpenChange,\n placement,\n strategy,\n middleware: [\n offset(_offset),\n flip({ padding: 5, fallbackPlacements: [\"bottom\", \"top\"] }),\n shift({ padding: 12 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const context = data.context;\n\n const click = useClick(context, {\n enabled: false,\n ...clickOptions,\n });\n const hover = useHover(context, { enabled: false, ...hoverOptions });\n const focus = useFocus(context, { enabled: false, ...focusOptions });\n const dismiss = useDismiss(context, dismissOptions);\n const role = useRole(context, roleOptions);\n\n const interactions = useInteractions([click, dismiss, focus, hover, role]);\n\n React.useLayoutEffect(() => {\n if (positionReference) {\n data.refs.setPositionReference(positionReference?.current);\n }\n }, [positionReference, data.refs]);\n\n return React.useMemo(\n () => ({\n open,\n onOpenChange,\n modal,\n ...interactions,\n ...data,\n }),\n [open, onOpenChange, modal, interactions, data],\n );\n};\n\ntype PopoverContextType = ReturnType<typeof usePopover> | null;\n\nconst PopoverContext = React.createContext<PopoverContextType>(null);\n\nconst usePopoverContext = () => {\n const context = React.useContext(PopoverContext);\n\n if (context == null) {\n throw new Error(\n \"Popover komponenter må brukes innenfor en <Popover /> komponent\",\n );\n }\n\n return context;\n};\n\nexport const Popover = ({\n children,\n ...restOptions\n}: {\n children: React.ReactNode;\n} & PopoverOptions) => {\n const popover = usePopover({ ...restOptions });\n return (\n <PopoverContext.Provider value={popover}>\n {children}\n </PopoverContext.Provider>\n );\n};\n\ninterface PopoverTriggerProps {\n children: React.ReactNode;\n /**\n * Rendrer komponenten som child-elementet sitt, og slår sammen egenskaper og props.\n *\n * Default er `false`.\n *\n * @example\n * ```tsx\n * <Component asChild foo=\"bar\">\n * <Child baz=\"qux\" />\n * </Component>\n *\n * // Rendrer følgende:\n * <Child foo=\"bar\" baz=\"qux\" />\n * ```\n */\n asChild?: boolean;\n}\n\nconst PopoverTrigger = React.forwardRef<\n HTMLElement,\n React.HTMLProps<HTMLElement> & PopoverTriggerProps\n>(function PopoverTrigger({ children, asChild = false, ...props }, propRef) {\n const { refs, getReferenceProps, open, onOpenChange } = usePopoverContext();\n const childrenRef = (children as any).ref;\n const ref = useMergeRefs([refs.setReference, propRef, childrenRef]);\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children,\n getReferenceProps({\n ref,\n ...props,\n ...children.props,\n }),\n );\n }\n\n return (\n <button\n ref={ref}\n onClick={() => onOpenChange?.(!open)}\n aria-expanded={open}\n {...getReferenceProps(props)}\n >\n {children}\n </button>\n );\n});\n\ninterface PopoverContentProps {\n /**\n * Padding rundt innholdet i popoveren.\n *\n * Default er `0`.\n */\n padding?: 0 | 8 | 16 | 24;\n /**\n *\n * Angir hvilket element som skal motta fokus ved åpning.\n * Kan være en tabbar index eller en referanse til et element.\"\n *\n * Default er `0`, som betyr at det første fokuserbare elementet i popoveren får fokus.\n * @see https://floating-ui.com/docs/FloatingFocusManager#initialfocus\n */\n initialFocus?: number | React.RefObject<HTMLElement>;\n /**\n * Angir om fokus skal returneres til triggeren når popoveren lukkes.\n *\n * Default er `true`.\n * @see https://floating-ui.com/docs/FloatingFocusManager#returnfocus\n */\n returnFocus?: boolean;\n}\n\n// Er popover-elementet posisjonert i forhold til et annet element enn triggeren?\nconst isCustomPositioned = (\n referenceElement: ReferenceElement,\n): referenceElement is VirtualElement => {\n if (!referenceElement) return false;\n\n return \"contextElement\" in referenceElement;\n};\n\nconst PopoverContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLProps<HTMLDivElement> & PopoverContentProps\n>(function PopoverContent(\n {\n style,\n className,\n padding = 0,\n initialFocus = 0,\n returnFocus = true,\n ...props\n },\n propRef,\n) {\n const { context, modal, refs, open, floatingStyles, getFloatingProps } =\n usePopoverContext();\n const ref = useMergeRefs([refs.setFloating, propRef]);\n\n const referenceElement = refs.reference.current as ReferenceElement;\n\n const { theme, density } = isCustomPositioned(referenceElement)\n ? getThemeAndDensity(referenceElement.contextElement)\n : getThemeAndDensity(referenceElement);\n\n const floatingPortalRef = React.useRef<HTMLElement | null>(null);\n\n // TODO: Løser et problem hvor nestede portaler ikke \"fester\" seg til det nærmeste portal-elementet. Fjernes når alle komponenter som rendres i en portal tar i bruk popover komponenten da den håndterer dette internt.\n React.useEffect(() => {\n floatingPortalRef.current =\n context.elements.domReference?.closest<HTMLElement>(\n \"[data-portal]\",\n ) || null;\n }, [context.elements.domReference]);\n\n if (!open) return null;\n\n return (\n <FloatingPortal root={floatingPortalRef.current}>\n <FloatingFocusManager\n context={context}\n modal={modal}\n initialFocus={initialFocus}\n returnFocus={returnFocus}\n >\n <div\n data-theme={theme}\n data-layout-density={density}\n className={clsx(\"jkl jkl-popover\", className)}\n ref={ref}\n style={\n {\n ...style,\n ...floatingStyles,\n \"--popover-padding\": `var(--jkl-spacing-${padding})`,\n } as React.CSSProperties\n }\n {...getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n );\n});\n\nPopover.Trigger = PopoverTrigger;\nPopover.Content = PopoverContent;\n\nexport default Popover;\n"],"names":["PopoverContext","React","createContext","usePopoverContext","context","useContext","Error","Popover","children","restOptions","popover","open","_open","onOpenChange","_onOpenChange","placement","strategy","modal","offset","_offset","positionReference","hoverOptions","focusOptions","clickOptions","roleOptions","dismissOptions","uncontrolledOpen","setUncontrolledOpen","useState","data","useFloating","middleware","flip","padding","fallbackPlacements","shift","whileElementsMounted","autoUpdate","click","useClick","enabled","hover","useHover","focus","useFocus","dismiss","useDismiss","role","useRole","interactions","useInteractions","useLayoutEffect","refs","setPositionReference","current","useMemo","usePopover","Provider","value","PopoverTrigger","forwardRef","asChild","props","propRef","getReferenceProps","childrenRef","ref","useMergeRefs","setReference","isValidElement","cloneElement","jsx","onClick","PopoverContent","style","className","initialFocus","returnFocus","floatingStyles","getFloatingProps","setFloating","referenceElement","reference","theme","density","getThemeAndDensity","contextElement","floatingPortalRef","useRef","useEffect","_a","elements","domReference","closest","FloatingPortal","root","FloatingFocusManager","clsx","Trigger","Content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Popover.js","sources":["../../../../src/components/popover/Popover.tsx"],"sourcesContent":["import {\n useFloating,\n useFocus,\n useHover,\n useClick,\n useDismiss,\n autoUpdate,\n useRole,\n useMergeRefs,\n offset,\n flip,\n shift,\n useInteractions,\n FloatingPortal,\n FloatingFocusManager,\n UseFloatingOptions,\n VirtualElement,\n ReferenceElement,\n ReferenceType,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport { getThemeAndDensity } from \"../../utilities/getThemeAndDensity.js\";\n\nexport type ClickOptions = Parameters<typeof useClick>[1];\nexport type DismissOptions = Parameters<typeof useDismiss>[1];\nexport type FocusOptions = Parameters<typeof useFocus>[1];\nexport type HoverOptions = Parameters<typeof useHover>[1];\nexport type RoleOptions = Parameters<typeof useRole>[1];\n\nexport interface PopoverOptions {\n /**\n * Angir om popoveren er åpen eller lukket.\n *\n * @see https://floating-ui.com/docs/usefloating#open\n */\n open?: boolean;\n /**\n * Callback som trigges når popoveren åpnes eller lukkes.\n *\n * @see https://floating-ui.com/docs/usefloating#onopenchange\n */\n onOpenChange?: UseFloatingOptions[\"onOpenChange\"];\n /**\n * Bestemmer plasseringen av popoveren.\n *\n * @see https://floating-ui.com/docs/usefloating#placement\n *\n * @default \"bottom-start\"\n */\n placement?: UseFloatingOptions[\"placement\"];\n /**\n * Definerer strategien for posisjonering av popoveren.\n *\n * @see https://floating-ui.com/docs/usefloating#strategy\n *\n * @default \"absolute\"\n */\n strategy?: UseFloatingOptions[\"strategy\"];\n /**\n * Angir om popoveren skal fungere som en modal, der fokus er låst til det flytende elementet\n * og innhold utenfor ikke kan interageres med.\n *\n * @see https://floating-ui.com/docs/usefloating#modal\n *\n * @default true\n */\n modal?: boolean;\n /**\n * Justerer avstanden mellom referanse-elementet og popoveren.\n *\n * @see https://floating-ui.com/docs/offset\n *\n * @default 4\n */\n offset?: number;\n /**\n * Referanse til elementet som popoveren skal posisjoneres i forhold til.\n *\n * @see https://floating-ui.com/docs/usefloating#setpositionreference\n *\n * @default Popover.Trigger\n */\n positionReference?: React.RefObject<ReferenceType>;\n /**\n * Options for hover-interaksjoner.\n *\n * @see https://floating-ui.com/docs/usehover\n *\n * @default { enabled: false }\n */\n hoverOptions?: HoverOptions;\n /**\n * Options for fokus-interaksjoner.\n *\n * @see https://floating-ui.com/docs/usefocus\n *\n * @default { enabled: false }\n */\n focusOptions?: FocusOptions;\n /**\n * Options for klikk-interaksjoner.\n *\n * @see https://floating-ui.com/docs/useclick\n *\n * @default { enabled: false }\n */\n clickOptions?: ClickOptions;\n /**\n * Konfigurerer rollen for popoveren.\n *\n * @see https://floating-ui.com/docs/userole\n *\n * @default { enabled: true, role: \"dialog\" }\n */\n roleOptions?: RoleOptions;\n /**\n * Options for å lukke popoveren når en dismissal skjer,\n * som ved å klikke utenfor eller trykke på \"Escape\"-tasten.\n *\n * @see https://floating-ui.com/docs/usedismiss\n *\n * @default { enabled: true }\n */\n dismissOptions?: DismissOptions;\n}\n\nconst usePopover = ({\n open: _open,\n onOpenChange: _onOpenChange,\n placement = \"bottom-start\",\n strategy = \"absolute\",\n modal = true,\n offset: _offset = 4,\n positionReference,\n hoverOptions,\n focusOptions,\n clickOptions,\n roleOptions,\n dismissOptions,\n}: PopoverOptions) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(_open);\n\n const open = _open ?? uncontrolledOpen;\n const onOpenChange = _onOpenChange ?? setUncontrolledOpen;\n\n const data = useFloating({\n open,\n onOpenChange,\n placement,\n strategy,\n middleware: [\n offset(_offset),\n flip({ padding: 5, fallbackPlacements: [\"bottom\", \"top\"] }),\n shift({ padding: 12 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const context = data.context;\n\n const click = useClick(context, {\n enabled: false,\n ...clickOptions,\n });\n const hover = useHover(context, { enabled: false, ...hoverOptions });\n const focus = useFocus(context, { enabled: false, ...focusOptions });\n const dismiss = useDismiss(context, dismissOptions);\n const role = useRole(context, roleOptions);\n\n const interactions = useInteractions([click, dismiss, focus, hover, role]);\n\n React.useLayoutEffect(() => {\n if (positionReference) {\n data.refs.setPositionReference(positionReference?.current);\n }\n }, [positionReference, data.refs]);\n\n return React.useMemo(\n () => ({\n open,\n onOpenChange,\n modal,\n ...interactions,\n ...data,\n }),\n [open, onOpenChange, modal, interactions, data],\n );\n};\n\ntype PopoverContextType = ReturnType<typeof usePopover> | null;\n\nconst PopoverContext = React.createContext<PopoverContextType>(null);\n\nconst usePopoverContext = () => {\n const context = React.useContext(PopoverContext);\n\n if (context == null) {\n throw new Error(\n \"Popover komponenter må brukes innenfor en <Popover /> komponent\",\n );\n }\n\n return context;\n};\n\nexport const Popover = ({\n children,\n ...restOptions\n}: {\n children: React.ReactNode;\n} & PopoverOptions) => {\n const popover = usePopover({ ...restOptions });\n return (\n <PopoverContext.Provider value={popover}>\n {children}\n </PopoverContext.Provider>\n );\n};\n\ninterface PopoverTriggerProps {\n children: React.ReactNode;\n /**\n * Rendrer komponenten som child-elementet sitt, og slår sammen egenskaper og props.\n *\n * Default er `false`.\n *\n * @example\n * ```tsx\n * <Component asChild foo=\"bar\">\n * <Child baz=\"qux\" />\n * </Component>\n *\n * // Rendrer følgende:\n * <Child foo=\"bar\" baz=\"qux\" />\n * ```\n */\n asChild?: boolean;\n}\n\nconst PopoverTrigger = React.forwardRef<\n HTMLElement,\n React.HTMLProps<HTMLElement> & PopoverTriggerProps\n>(function PopoverTrigger({ children, asChild = false, ...props }, propRef) {\n const { refs, getReferenceProps, open, onOpenChange } = usePopoverContext();\n const childrenRef = (children as any).ref;\n const ref = useMergeRefs([refs.setReference, propRef, childrenRef]);\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children,\n getReferenceProps({\n ref,\n ...props,\n ...children.props,\n }),\n );\n }\n\n return (\n <button\n ref={ref}\n onClick={() => onOpenChange?.(!open)}\n aria-expanded={open}\n {...getReferenceProps(props)}\n >\n {children}\n </button>\n );\n});\n\ninterface PopoverContentProps {\n /**\n * Padding rundt innholdet i popoveren.\n *\n * Default er `0`.\n */\n padding?: 0 | 8 | 16 | 24;\n /**\n *\n * Angir hvilket element som skal motta fokus ved åpning.\n * Kan være en tabbar index eller en referanse til et element.\"\n *\n * Default er `0`, som betyr at det første fokuserbare elementet i popoveren får fokus.\n * @see https://floating-ui.com/docs/FloatingFocusManager#initialfocus\n */\n initialFocus?: number | React.RefObject<HTMLElement>;\n /**\n * Angir om fokus skal returneres til triggeren når popoveren lukkes.\n *\n * Default er `true`.\n * @see https://floating-ui.com/docs/FloatingFocusManager#returnfocus\n */\n returnFocus?: boolean;\n}\n\n// Er popover-elementet posisjonert i forhold til et annet element enn triggeren?\nconst isCustomPositioned = (\n referenceElement: ReferenceElement,\n): referenceElement is VirtualElement => {\n if (!referenceElement) return false;\n\n return \"contextElement\" in referenceElement;\n};\n\nconst PopoverContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLProps<HTMLDivElement> & PopoverContentProps\n>(function PopoverContent(\n {\n style,\n className,\n padding = 0,\n initialFocus = 0,\n returnFocus = true,\n ...props\n },\n propRef,\n) {\n const { context, modal, refs, open, floatingStyles, getFloatingProps } =\n usePopoverContext();\n const ref = useMergeRefs([refs.setFloating, propRef]);\n\n const referenceElement = refs.reference.current as ReferenceElement;\n\n const { theme, density } = isCustomPositioned(referenceElement)\n ? getThemeAndDensity(referenceElement.contextElement)\n : getThemeAndDensity(referenceElement);\n\n const floatingPortalRef = React.useRef<HTMLElement | null>(null);\n\n // TODO: Løser et problem hvor nestede portaler ikke \"fester\" seg til det nærmeste portal-elementet. Fjernes når alle komponenter som rendres i en portal tar i bruk popover komponenten da den håndterer dette internt.\n React.useEffect(() => {\n floatingPortalRef.current =\n context.elements.domReference?.closest<HTMLElement>(\n \"[data-portal]\",\n ) || null;\n }, [context.elements.domReference]);\n\n if (!open) return null;\n\n return (\n <FloatingPortal root={floatingPortalRef.current}>\n <FloatingFocusManager\n context={context}\n modal={modal}\n initialFocus={initialFocus}\n returnFocus={returnFocus}\n >\n <div\n data-theme={theme}\n data-layout-density={density}\n className={clsx(\"jkl jkl-popover\", className)}\n ref={ref}\n style={\n {\n ...style,\n ...floatingStyles,\n \"--popover-padding\": `var(--jkl-spacing-${padding})`,\n } as React.CSSProperties\n }\n {...getFloatingProps(props)}\n >\n {props.children}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n );\n});\n\nPopover.Trigger = PopoverTrigger;\nPopover.Content = PopoverContent;\n\nexport default Popover;\n"],"names":["PopoverContext","React","createContext","usePopoverContext","context","useContext","Error","Popover","children","restOptions","popover","open","_open","onOpenChange","_onOpenChange","placement","strategy","modal","offset","_offset","positionReference","hoverOptions","focusOptions","clickOptions","roleOptions","dismissOptions","uncontrolledOpen","setUncontrolledOpen","useState","data","useFloating","middleware","flip","padding","fallbackPlacements","shift","whileElementsMounted","autoUpdate","click","useClick","enabled","hover","useHover","focus","useFocus","dismiss","useDismiss","role","useRole","interactions","useInteractions","useLayoutEffect","refs","setPositionReference","current","useMemo","usePopover","Provider","value","PopoverTrigger","forwardRef","asChild","props","propRef","getReferenceProps","childrenRef","ref","useMergeRefs","setReference","isValidElement","cloneElement","jsx","onClick","PopoverContent","style","className","initialFocus","returnFocus","floatingStyles","getFloatingProps","setFloating","referenceElement","reference","theme","density","getThemeAndDensity","contextElement","floatingPortalRef","useRef","useEffect","_a","elements","domReference","closest","FloatingPortal","root","FloatingFocusManager","clsx","Trigger","Content"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as Popover } from './Popover.js';
|
|
1
|
+
export { default as Popover, type PopoverOptions, type ClickOptions, type DismissOptions, type FocusOptions, type HoverOptions, type RoleOptions, } from './Popover.js';
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export {
|
|
3
|
-
export type { ProgressBarProps } from './ProgressBar.js';
|
|
4
|
-
export { ProgressBar } from './ProgressBar.js';
|
|
1
|
+
export { Countdown, type CountdownProps } from './Countdown.js';
|
|
2
|
+
export { ProgressBar, type ProgressBarProps } from './ProgressBar.js';
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export {
|
|
3
|
-
export type
|
|
4
|
-
export { RadioButtonGroup } from './RadioButtonGroup.js';
|
|
5
|
-
export type { BaseRadioButtonProps } from './BaseRadioButton.js';
|
|
6
|
-
export { BaseRadioButton } from './BaseRadioButton.js';
|
|
1
|
+
export { RadioButton, type RadioButtonProps } from './RadioButton.js';
|
|
2
|
+
export { RadioButtonGroup, type RadioButtonGroupProps, } from './RadioButtonGroup.js';
|
|
3
|
+
export { BaseRadioButton, type BaseRadioButtonProps, } from './BaseRadioButton.js';
|
|
@@ -3,7 +3,7 @@ import { DataTestAutoId, Density } from '../../core/types.js';
|
|
|
3
3
|
import { ValuePair } from '../../utilities/valuePair.js';
|
|
4
4
|
import { InputGroupProps } from '../input-group/InputGroup.js';
|
|
5
5
|
import { LabelProps } from '../input-group/Label.js';
|
|
6
|
-
interface
|
|
6
|
+
export interface SelectPartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, "target">> {
|
|
7
7
|
/** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */
|
|
8
8
|
type: "change" | "blur";
|
|
9
9
|
target: {
|
|
@@ -12,7 +12,7 @@ interface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>
|
|
|
12
12
|
value: string;
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
type
|
|
15
|
+
export type SelectChangeEventHandler = (event: SelectPartialChangeEvent) => void;
|
|
16
16
|
export interface SelectProps extends Omit<InputGroupProps, "children">, DataTestAutoId {
|
|
17
17
|
id?: string;
|
|
18
18
|
name: string;
|
|
@@ -37,9 +37,9 @@ export interface SelectProps extends Omit<InputGroupProps, "children">, DataTest
|
|
|
37
37
|
searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);
|
|
38
38
|
density?: Density;
|
|
39
39
|
width?: string;
|
|
40
|
-
onChange?:
|
|
41
|
-
onBlur?:
|
|
42
|
-
onFocus?:
|
|
40
|
+
onChange?: SelectChangeEventHandler;
|
|
41
|
+
onBlur?: SelectChangeEventHandler;
|
|
42
|
+
onFocus?: SelectChangeEventHandler;
|
|
43
43
|
/**
|
|
44
44
|
* Merk som ugyldig uten å sende inn en errorLabel.
|
|
45
45
|
* NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.
|
|
@@ -52,4 +52,3 @@ export interface SelectProps extends Omit<InputGroupProps, "children">, DataTest
|
|
|
52
52
|
maxShownOptions?: number;
|
|
53
53
|
}
|
|
54
54
|
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
|
|
55
|
-
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,Fragment as t,jsx as n}from"react/jsx-runtime";import{c as r}from"../../../clsx-BeLtu-UY.js";import{forwardRef as o,useState as a,useCallback as l,useMemo as s,useRef as i,useEffect as u}from"react";import{useAnimatedHeight as c}from"../../hooks/useAnimatedHeight/useAnimatedHeight.js";import{useId as
|
|
1
|
+
import{jsxs as e,Fragment as t,jsx as n}from"react/jsx-runtime";import{c as r}from"../../../clsx-BeLtu-UY.js";import{forwardRef as o,useState as a,useCallback as l,useMemo as s,useRef as i,useEffect as u}from"react";import{useAnimatedHeight as c}from"../../hooks/useAnimatedHeight/useAnimatedHeight.js";import{useId as d}from"../../hooks/useId/useId.js";import{useListNavigation as p}from"../../hooks/useListNavigation/useListNavigation.js";import{usePreviousValue as v}from"../../hooks/usePreviousValue/usePreviousValue.js";import{getValuePair as f}from"../../utilities/valuePair.js";import{ArrowVerticalAnimated as m}from"../icon/icons/animated/ArrowVerticalAnimated.js";import{InputGroup as b}from"../input-group/InputGroup.js";import{focusSelected as g,toLower as h}from"./select-utils.js";const k=()=>{},y=o(((o,y)=>{const{id:j,name:w,items:_,value:P,label:D,labelProps:E,onChange:L,onBlur:$,onFocus:x,className:N,helpLabel:A,errorLabel:C,invalid:F,searchable:S=!1,inline:V=!1,defaultPrompt:T="Velg",density:I,width:K,maxShownOptions:B=5,style:H,tooltipProps:M,...O}=o,G=d(j||"jkl-select",{generateSuffix:!j}),R=`${G}_label`,q=`${G}_button`,U=`${G}_search-input`,[z,J]=a(!1),Q=l((()=>{J((e=>!e))}),[]),W=!!S,X=W&&z,[Y,Z]=a(""),ee=l((e=>!!e.label.toLowerCase().includes(Y.toLowerCase())||"function"==typeof S&&S(Y,e)),[S,Y]),te=s((()=>_.map(f).map((e=>{const t=!W||""===Y||ee(e);return{...e,visible:t}}))),[_,W,Y,ee]),ne=s((()=>!(typeof P>"u")&&_.some((e=>"string"==typeof e?e===P:e.value===P))),[P,_]),[re,oe]=a(ne&&void 0!==P?P:""),ae=""!==re,le=s((()=>{var e;return(null==(e=te.find((e=>e.value===re)))?void 0:e.label)||T}),[te,re,T]),se=i(null),ie=l((e=>{se.current=e,y&&("function"==typeof y?y(e):y.current=e),e&&oe(e.value)}),[se,y]),ue=v(P);u((()=>{P!==ue&&oe(typeof P>"u"||!ne?"":P)}),[oe,P,ue,ne]);const ce=l((e=>{const t=e.value;Z(""),oe(t),Q()}),[Z,oe,Q]),de=v(re);u((()=>{typeof de>"u"||de===re||re===P||(L&&L({type:"change",target:{name:w,value:re}}),se.current&&se.current.dispatchEvent(new Event("change",{bubbles:!0})))}),[L,w,P,re,de]);const pe=i(null),ve=i(!1),fe=i(null),me=i(null),be=l(((e,t)=>{if(e&&!W){const e=t.current;e&&g(e,re)}else e?fe.current&&fe.current.focus():ve.current&&me.current&&me.current.focus()}),[W,re]),[ge]=c(z,{onFirstVisible:be,onTransitionEnd:be});p({ref:ge});const he=l((()=>{var e;W&&Z(""),$&&($({type:"blur",target:{name:w,value:re}}),null==(e=se.current)||e.dispatchEvent(new Event("focusout",{bubbles:!0}))),ve.current=!1,J(!1)}),[$,Z,J,W,w,re]),ke=l((e=>{const t=pe.current;t&&t.contains(e.relatedTarget)||he()}),[he]),ye=l((()=>{ve.current||(x&&x({type:"change",target:{name:w,value:re}}),ve.current=!0)}),[x,re,w]),je=l((e=>{e.target.focus({preventScroll:!0})}),[]);u((()=>{const e=se.current,t=fe.current,n=me.current,r=pe.current;return null==e||e.addEventListener("focus",(()=>{X?null==t||t.focus():null==n||n.focus()})),null==e||e.addEventListener("blur",(function(e){r&&r.contains(e.relatedTarget)&&e.preventDefault()})),()=>{null==e||e.removeEventListener("focus",(()=>{X?null==t||t.focus():null==n||n.focus()})),null==e||e.removeEventListener("blur",(function(e){r&&r.contains(e.relatedTarget)&&e.preventDefault()}))}}),[X]);const we=l((e=>{"ArrowDown"!==e.key&&" "!==e.key||z?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),J(!1)):(e.preventDefault(),e.stopPropagation(),J(!0))}),[J,z]),_e=l((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const t=ge.current;t&&g(t,W?void 0:re)}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),J(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&z&&(e.preventDefault(),e.stopPropagation());else{const t=ge.current;t&&(e.preventDefault(),e.stopPropagation(),g(t,re))}}),[J,ge,re,W,z]),Pe=l((e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&fe.current?fe.current.focus():me.current&&(oe(e.currentTarget.value),J(!1),me.current.focus());else if("ArrowUp"===e.key&&ge.current&&fe.current){const t=ge.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==t?void 0:t.id)&&fe.current&&fe.current.focus()}}),[J,ge]);return u((()=>{const e=e=>{"Escape"===e.key&&z&&J(!1)};return typeof window<"u"&&z&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}}),[J,z]),e(t,{children:[e("select",{name:w,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:ie,value:re,onChange:k,children:[n("option",{value:""})," ",te.map((e=>n("option",{hidden:!e.visible,value:e.value,children:e.label},`${G}-opt-${e.value}`)))]}),n(b,{ref:pe,"data-testid":"jkl-select",className:r("jkl-select",N,{"jkl-select--inline":V,"jkl-select--open":z&&te.some((e=>e.visible)),"jkl-select--no-value":!ae,"jkl-select--invalid":!!C||F}),tooltipProps:M&&{...M,triggerProps:{...M.triggerProps,onFocus:e=>{var t,n;null==(n=null==(t=M.triggerProps)?void 0:t.onFocus)||n.call(t,e),he()}}},...O,id:W?U:q,style:{"--jkl-select-max-shown-options":B,...H},density:I,label:D,labelProps:{id:R,srOnly:V,...E,htmlFor:W?U:q},helpLabel:A,errorLabel:C,render:({"aria-invalid":t,...o})=>e("div",{className:"jkl-select__outer-wrapper",style:{width:K},children:[W&&n("input",{...o,"aria-invalid":t,id:U,hidden:!X,ref:fe,placeholder:"Søk",value:Y,onChange:e=>Z(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":ae?`${G}__${h(re)}`:void 0,"aria-controls":G,"aria-expanded":z,role:"combobox",onKeyDown:_e,onBlur:ke,onFocus:ye,onClick:e=>{e.stopPropagation()}}),n("button",{"aria-invalid":t,...o,id:q,ref:me,hidden:X,type:"button",name:`${w}-btn`,className:r("jkl-select__button",{"jkl-select__button--active-value":!!re}),"data-testid":"jkl-select__button","aria-label":`${le||"Velg"},${D}`,"aria-expanded":z,"aria-controls":G,onBlur:ke,onFocus:ye,onKeyDown:we,onClick:Q,onMouseDown:e=>{var t;e.preventDefault(),null==(t=me.current)||t.focus()},children:le}),n("div",{id:G,ref:ge,role:"listbox",className:"jkl-select__options-menu",hidden:!z||te.every((e=>!e.visible)),"aria-labelledby":R,tabIndex:-1,"data-focus":"controlled",children:te.map(((t,r)=>t.visible?e("button",{hidden:!t.visible,type:"button",id:`${G}__${h(t.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":t.value===re,role:"option",value:t.value,"data-testautoid":`jkl-select__option-${r}`,onBlur:ke,onFocus:ye,onKeyDown:Pe,onClick:e=>{e.preventDefault(),ce(t)},onMouseOver:je,children:[t.label,t.description?n("span",{className:"jkl-select__option-description",children:t.description}):null]},`${G}-${t.value}`):null))}),n(m,{variant:"medium",pointingDown:!z,className:"jkl-select__arrow"})]})})]})}));y.displayName="Select";export{y as Select};
|
|
2
2
|
//# sourceMappingURL=Select.js.map
|