@fremtind/jokul 0.8.1 → 0.10.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/NativeSelect-DSmX3GZo.cjs +2 -0
- package/build/NativeSelect-DSmX3GZo.cjs.map +1 -0
- package/build/NativeSelect-EidDABsT.js +2 -0
- package/build/NativeSelect-EidDABsT.js.map +1 -0
- package/build/build-stats.html +1 -1
- package/build/cjs/components/accordion/Accordion.js +2 -0
- package/build/cjs/components/accordion/Accordion.js.map +1 -0
- package/build/cjs/components/accordion/AccordionItem.js +2 -0
- package/build/cjs/components/accordion/AccordionItem.js.map +1 -0
- package/build/cjs/components/accordion/index.js +2 -0
- package/build/cjs/components/accordion/index.js.map +1 -0
- package/build/cjs/components/breadcrumb/Breadcrumb.js +2 -0
- package/build/cjs/components/breadcrumb/Breadcrumb.js.map +1 -0
- package/build/cjs/components/breadcrumb/BreadcrumbItem.js +2 -0
- package/build/cjs/components/breadcrumb/BreadcrumbItem.js.map +1 -0
- package/build/cjs/components/breadcrumb/index.js +2 -0
- package/build/cjs/components/breadcrumb/index.js.map +1 -0
- package/build/cjs/components/button/Button.js +2 -0
- package/build/cjs/components/button/Button.js.map +1 -0
- package/build/cjs/components/button/index.js +2 -0
- package/build/cjs/components/button/index.js.map +1 -0
- package/build/cjs/components/button/types.js +2 -0
- package/build/cjs/components/button/types.js.map +1 -0
- package/build/cjs/components/checkbox/Checkbox.js +2 -0
- package/build/cjs/components/checkbox/Checkbox.js.map +1 -0
- package/build/cjs/components/checkbox/index.js +2 -0
- package/build/cjs/components/checkbox/index.js.map +1 -0
- package/build/cjs/components/combobox/Combobox.js +2 -0
- package/build/cjs/components/combobox/Combobox.js.map +1 -0
- package/build/cjs/components/combobox/index.js +2 -0
- package/build/cjs/components/combobox/index.js.map +1 -0
- package/build/cjs/components/cookie-consent/CookieConsent.js +2 -0
- package/build/cjs/components/cookie-consent/CookieConsent.js.map +1 -0
- package/build/cjs/components/cookie-consent/CookieConsentContext.js +2 -0
- package/build/cjs/components/cookie-consent/CookieConsentContext.js.map +1 -0
- package/build/cjs/components/cookie-consent/CookieConsentModal.js +2 -0
- package/build/cjs/components/cookie-consent/CookieConsentModal.js.map +1 -0
- package/build/cjs/components/cookie-consent/consents/CustomConsents.js +2 -0
- package/build/cjs/components/cookie-consent/consents/CustomConsents.js.map +1 -0
- package/build/cjs/components/cookie-consent/consents/DefaultConsents.js +2 -0
- package/build/cjs/components/cookie-consent/consents/DefaultConsents.js.map +1 -0
- package/build/cjs/components/cookie-consent/consents/RequirementCheckbox.js +2 -0
- package/build/cjs/components/cookie-consent/consents/RequirementCheckbox.js.map +1 -0
- package/build/cjs/components/cookie-consent/cookieConsentUtils.js +2 -0
- package/build/cjs/components/cookie-consent/cookieConsentUtils.js.map +1 -0
- package/build/cjs/components/cookie-consent/index.js +2 -0
- package/build/cjs/components/cookie-consent/index.js.map +1 -0
- package/build/cjs/components/cookie-consent/types.js +2 -0
- package/build/cjs/components/cookie-consent/types.js.map +1 -0
- package/build/cjs/components/datepicker/DatePicker.js +2 -0
- package/build/cjs/components/datepicker/DatePicker.js.map +1 -0
- package/build/cjs/components/datepicker/index.js +2 -0
- package/build/cjs/components/datepicker/index.js.map +1 -0
- package/build/cjs/components/datepicker/internal/Calendar.js +2 -0
- package/build/cjs/components/datepicker/internal/Calendar.js.map +1 -0
- package/build/cjs/components/datepicker/internal/calendarReducer.js +2 -0
- package/build/cjs/components/datepicker/internal/calendarReducer.js.map +1 -0
- package/build/cjs/components/datepicker/internal/useCalendar.js +2 -0
- package/build/cjs/components/datepicker/internal/useCalendar.js.map +1 -0
- package/build/cjs/components/datepicker/internal/utils.js +2 -0
- package/build/cjs/components/datepicker/internal/utils.js.map +1 -0
- package/build/cjs/components/datepicker/types.js +2 -0
- package/build/cjs/components/datepicker/types.js.map +1 -0
- package/build/cjs/components/datepicker/utils.js +2 -0
- package/build/cjs/components/datepicker/utils.js.map +1 -0
- package/build/cjs/components/datepicker/validation.js +2 -0
- package/build/cjs/components/datepicker/validation.js.map +1 -0
- package/build/cjs/components/index.js +1 -1
- package/build/cjs/components/input-group/FieldGroup.js +1 -1
- package/build/cjs/components/input-group/FieldGroup.js.map +1 -1
- package/build/cjs/components/input-group/InputGroup.js +1 -1
- package/build/cjs/components/input-group/InputGroup.js.map +1 -1
- package/build/cjs/components/input-group/Label.js +1 -1
- package/build/cjs/components/input-group/Label.js.map +1 -1
- package/build/cjs/components/input-group/SupportLabel.js +1 -1
- package/build/cjs/components/input-group/SupportLabel.js.map +1 -1
- package/build/cjs/components/list/List.js +2 -0
- package/build/cjs/components/list/List.js.map +1 -0
- package/build/cjs/components/list/ListItem.js +2 -0
- package/build/cjs/components/list/ListItem.js.map +1 -0
- package/build/cjs/components/list/index.js +2 -0
- package/build/cjs/components/list/index.js.map +1 -0
- package/build/cjs/components/modal/Modal.js +2 -0
- package/build/cjs/components/modal/Modal.js.map +1 -0
- package/build/cjs/components/modal/index.js +2 -0
- package/build/cjs/components/modal/index.js.map +1 -0
- package/build/cjs/components/modal/useModal.js +2 -0
- package/build/cjs/components/modal/useModal.js.map +1 -0
- package/build/cjs/components/radio-button/BaseRadioButton.js +2 -0
- package/build/cjs/components/radio-button/BaseRadioButton.js.map +1 -0
- package/build/cjs/components/radio-button/RadioButton.js +2 -0
- package/build/cjs/components/radio-button/RadioButton.js.map +1 -0
- package/build/cjs/components/radio-button/RadioButtonGroup.js +2 -0
- package/build/cjs/components/radio-button/RadioButtonGroup.js.map +1 -0
- package/build/cjs/components/radio-button/index.js +2 -0
- package/build/cjs/components/radio-button/index.js.map +1 -0
- package/build/cjs/components/radio-button/radioGroupContext.js +2 -0
- package/build/cjs/components/radio-button/radioGroupContext.js.map +1 -0
- package/build/cjs/components/select/NativeSelect.js +2 -0
- package/build/cjs/components/select/NativeSelect.js.map +1 -0
- package/build/cjs/components/select/Select.js +2 -0
- package/build/cjs/components/select/Select.js.map +1 -0
- package/build/cjs/components/select/index.js +2 -0
- package/build/cjs/components/select/index.js.map +1 -0
- package/build/cjs/components/select/select-utils.js +2 -0
- package/build/cjs/components/select/select-utils.js.map +1 -0
- package/build/cjs/components/tag/Tag.js +1 -1
- package/build/cjs/components/tag/Tag.js.map +1 -1
- package/build/cjs/components/text-input/BaseTextArea.js +2 -0
- package/build/cjs/components/text-input/BaseTextArea.js.map +1 -0
- package/build/cjs/components/text-input/BaseTextInput.js +2 -0
- package/build/cjs/components/text-input/BaseTextInput.js.map +1 -0
- package/build/cjs/components/text-input/TextArea.js +2 -0
- package/build/cjs/components/text-input/TextArea.js.map +1 -0
- package/build/cjs/components/text-input/TextInput.js +2 -0
- package/build/cjs/components/text-input/TextInput.js.map +1 -0
- package/build/cjs/components/text-input/index.js +2 -0
- package/build/cjs/components/text-input/index.js.map +1 -0
- package/build/cjs/components/tooltip/PopupTip.js +1 -1
- package/build/cjs/components/tooltip/PopupTip.js.map +1 -1
- package/build/cjs/components/tooltip/TooltipContent.js +1 -1
- package/build/cjs/components/tooltip/TooltipContent.js.map +1 -1
- package/build/cjs/components/tooltip/TooltipTrigger.js +1 -1
- package/build/cjs/components/tooltip/TooltipTrigger.js.map +1 -1
- package/build/cjs/index.js +1 -1
- package/build/components/accordion/Accordion.d.ts +8 -0
- package/build/components/accordion/AccordionItem.d.ts +10 -0
- package/build/components/accordion/index.d.ts +4 -0
- package/build/components/breadcrumb/Breadcrumb.d.ts +6 -0
- package/build/components/breadcrumb/BreadcrumbItem.d.ts +10 -0
- package/build/components/breadcrumb/index.d.ts +4 -0
- package/build/components/button/Button.d.ts +7 -0
- package/build/components/button/index.d.ts +2 -0
- package/build/components/button/types.d.ts +19 -0
- package/build/components/checkbox/Checkbox.d.ts +17 -0
- package/build/components/checkbox/index.d.ts +2 -0
- package/build/components/combobox/Combobox.d.ts +39 -0
- package/build/components/combobox/index.d.ts +2 -0
- package/build/components/cookie-consent/CookieConsent.d.ts +6 -0
- package/build/components/cookie-consent/CookieConsentContext.d.ts +48 -0
- package/build/components/cookie-consent/CookieConsentModal.d.ts +3 -0
- package/build/components/cookie-consent/consents/CustomConsents.d.ts +9 -0
- package/build/components/cookie-consent/consents/DefaultConsents.d.ts +9 -0
- package/build/components/cookie-consent/consents/RequirementCheckbox.d.ts +9 -0
- package/build/components/cookie-consent/cookieConsentUtils.d.ts +23 -0
- package/build/components/cookie-consent/index.d.ts +5 -0
- package/build/components/cookie-consent/types.d.ts +12 -0
- package/build/components/datepicker/DatePicker.d.ts +3 -0
- package/build/components/datepicker/index.d.ts +4 -0
- package/build/components/datepicker/internal/Calendar.d.ts +18 -0
- package/build/components/datepicker/internal/calendarReducer.d.ts +18 -0
- package/build/components/datepicker/internal/useCalendar.d.ts +59 -0
- package/build/components/datepicker/internal/utils.d.ts +167 -0
- package/build/components/datepicker/types.d.ts +269 -0
- package/build/components/datepicker/utils.d.ts +23 -0
- package/build/components/datepicker/validation.d.ts +11 -0
- package/build/components/index.d.ts +12 -0
- package/build/components/list/List.d.ts +8 -0
- package/build/components/list/ListItem.d.ts +8 -0
- package/build/components/list/index.d.ts +3 -0
- package/build/components/modal/Modal.d.ts +72 -0
- package/build/components/modal/index.d.ts +4 -0
- package/build/components/modal/useModal.d.ts +69 -0
- package/build/components/radio-button/BaseRadioButton.d.ts +10 -0
- package/build/components/radio-button/RadioButton.d.ts +15 -0
- package/build/components/radio-button/RadioButtonGroup.d.ts +24 -0
- package/build/components/radio-button/index.d.ts +6 -0
- package/build/components/radio-button/radioGroupContext.d.ts +16 -0
- package/build/components/select/NativeSelect.d.ts +19 -0
- package/build/components/select/Select.d.ts +53 -0
- package/build/components/select/index.d.ts +4 -0
- package/build/components/select/select-utils.d.ts +2 -0
- package/build/components/text-input/BaseTextArea.d.ts +27 -0
- package/build/components/text-input/BaseTextInput.d.ts +34 -0
- package/build/components/text-input/TextArea.d.ts +6 -0
- package/build/components/text-input/TextInput.d.ts +9 -0
- package/build/components/text-input/index.d.ts +4 -0
- package/build/es/components/accordion/Accordion.js +2 -0
- package/build/es/components/accordion/Accordion.js.map +1 -0
- package/build/es/components/accordion/AccordionItem.js +2 -0
- package/build/es/components/accordion/AccordionItem.js.map +1 -0
- package/build/es/components/accordion/index.js +2 -0
- package/build/es/components/accordion/index.js.map +1 -0
- package/build/es/components/breadcrumb/Breadcrumb.js +2 -0
- package/build/es/components/breadcrumb/Breadcrumb.js.map +1 -0
- package/build/es/components/breadcrumb/BreadcrumbItem.js +2 -0
- package/build/es/components/breadcrumb/BreadcrumbItem.js.map +1 -0
- package/build/es/components/breadcrumb/index.js +2 -0
- package/build/es/components/breadcrumb/index.js.map +1 -0
- package/build/es/components/button/Button.js +2 -0
- package/build/es/components/button/Button.js.map +1 -0
- package/build/es/components/button/index.js +2 -0
- package/build/es/components/button/index.js.map +1 -0
- package/build/es/components/button/types.js +2 -0
- package/build/es/components/button/types.js.map +1 -0
- package/build/es/components/checkbox/Checkbox.js +2 -0
- package/build/es/components/checkbox/Checkbox.js.map +1 -0
- package/build/es/components/checkbox/index.js +2 -0
- package/build/es/components/checkbox/index.js.map +1 -0
- package/build/es/components/combobox/Combobox.js +2 -0
- package/build/es/components/combobox/Combobox.js.map +1 -0
- package/build/es/components/combobox/index.js +2 -0
- package/build/es/components/combobox/index.js.map +1 -0
- package/build/es/components/cookie-consent/CookieConsent.js +2 -0
- package/build/es/components/cookie-consent/CookieConsent.js.map +1 -0
- package/build/es/components/cookie-consent/CookieConsentContext.js +2 -0
- package/build/es/components/cookie-consent/CookieConsentContext.js.map +1 -0
- package/build/es/components/cookie-consent/CookieConsentModal.js +2 -0
- package/build/es/components/cookie-consent/CookieConsentModal.js.map +1 -0
- package/build/es/components/cookie-consent/consents/CustomConsents.js +2 -0
- package/build/es/components/cookie-consent/consents/CustomConsents.js.map +1 -0
- package/build/es/components/cookie-consent/consents/DefaultConsents.js +2 -0
- package/build/es/components/cookie-consent/consents/DefaultConsents.js.map +1 -0
- package/build/es/components/cookie-consent/consents/RequirementCheckbox.js +2 -0
- package/build/es/components/cookie-consent/consents/RequirementCheckbox.js.map +1 -0
- package/build/es/components/cookie-consent/cookieConsentUtils.js +2 -0
- package/build/es/components/cookie-consent/cookieConsentUtils.js.map +1 -0
- package/build/es/components/cookie-consent/index.js +2 -0
- package/build/es/components/cookie-consent/index.js.map +1 -0
- package/build/es/components/cookie-consent/types.js +2 -0
- package/build/es/components/cookie-consent/types.js.map +1 -0
- package/build/es/components/datepicker/DatePicker.js +2 -0
- package/build/es/components/datepicker/DatePicker.js.map +1 -0
- package/build/es/components/datepicker/index.js +2 -0
- package/build/es/components/datepicker/index.js.map +1 -0
- package/build/es/components/datepicker/internal/Calendar.js +2 -0
- package/build/es/components/datepicker/internal/Calendar.js.map +1 -0
- package/build/es/components/datepicker/internal/calendarReducer.js +2 -0
- package/build/es/components/datepicker/internal/calendarReducer.js.map +1 -0
- package/build/es/components/datepicker/internal/useCalendar.js +2 -0
- package/build/es/components/datepicker/internal/useCalendar.js.map +1 -0
- package/build/es/components/datepicker/internal/utils.js +2 -0
- package/build/es/components/datepicker/internal/utils.js.map +1 -0
- package/build/es/components/datepicker/types.js +2 -0
- package/build/es/components/datepicker/types.js.map +1 -0
- package/build/es/components/datepicker/utils.js +2 -0
- package/build/es/components/datepicker/utils.js.map +1 -0
- package/build/es/components/datepicker/validation.js +2 -0
- package/build/es/components/datepicker/validation.js.map +1 -0
- package/build/es/components/index.js +1 -1
- package/build/es/components/input-group/FieldGroup.js +1 -1
- package/build/es/components/input-group/FieldGroup.js.map +1 -1
- package/build/es/components/input-group/InputGroup.js +1 -1
- package/build/es/components/input-group/InputGroup.js.map +1 -1
- package/build/es/components/input-group/Label.js +1 -1
- package/build/es/components/input-group/Label.js.map +1 -1
- package/build/es/components/input-group/SupportLabel.js +1 -1
- package/build/es/components/input-group/SupportLabel.js.map +1 -1
- package/build/es/components/list/List.js +2 -0
- package/build/es/components/list/List.js.map +1 -0
- package/build/es/components/list/ListItem.js +2 -0
- package/build/es/components/list/ListItem.js.map +1 -0
- package/build/es/components/list/index.js +2 -0
- package/build/es/components/list/index.js.map +1 -0
- package/build/es/components/modal/Modal.js +2 -0
- package/build/es/components/modal/Modal.js.map +1 -0
- package/build/es/components/modal/index.js +2 -0
- package/build/es/components/modal/index.js.map +1 -0
- package/build/es/components/modal/useModal.js +2 -0
- package/build/es/components/modal/useModal.js.map +1 -0
- package/build/es/components/radio-button/BaseRadioButton.js +2 -0
- package/build/es/components/radio-button/BaseRadioButton.js.map +1 -0
- package/build/es/components/radio-button/RadioButton.js +2 -0
- package/build/es/components/radio-button/RadioButton.js.map +1 -0
- package/build/es/components/radio-button/RadioButtonGroup.js +2 -0
- package/build/es/components/radio-button/RadioButtonGroup.js.map +1 -0
- package/build/es/components/radio-button/index.js +2 -0
- package/build/es/components/radio-button/index.js.map +1 -0
- package/build/es/components/radio-button/radioGroupContext.js +2 -0
- package/build/es/components/radio-button/radioGroupContext.js.map +1 -0
- package/build/es/components/select/NativeSelect.js +2 -0
- package/build/es/components/select/NativeSelect.js.map +1 -0
- package/build/es/components/select/Select.js +2 -0
- package/build/es/components/select/Select.js.map +1 -0
- package/build/es/components/select/index.js +2 -0
- package/build/es/components/select/index.js.map +1 -0
- package/build/es/components/select/select-utils.js +2 -0
- package/build/es/components/select/select-utils.js.map +1 -0
- package/build/es/components/tag/Tag.js +1 -1
- package/build/es/components/tag/Tag.js.map +1 -1
- package/build/es/components/text-input/BaseTextArea.js +2 -0
- package/build/es/components/text-input/BaseTextArea.js.map +1 -0
- package/build/es/components/text-input/BaseTextInput.js +2 -0
- package/build/es/components/text-input/BaseTextInput.js.map +1 -0
- package/build/es/components/text-input/TextArea.js +2 -0
- package/build/es/components/text-input/TextArea.js.map +1 -0
- package/build/es/components/text-input/TextInput.js +2 -0
- package/build/es/components/text-input/TextInput.js.map +1 -0
- package/build/es/components/text-input/index.js +2 -0
- package/build/es/components/text-input/index.js.map +1 -0
- package/build/es/components/tooltip/PopupTip.js +1 -1
- package/build/es/components/tooltip/PopupTip.js.map +1 -1
- package/build/es/components/tooltip/TooltipContent.js +1 -1
- package/build/es/components/tooltip/TooltipContent.js.map +1 -1
- package/build/es/components/tooltip/TooltipTrigger.js +1 -1
- package/build/es/components/tooltip/TooltipTrigger.js.map +1 -1
- package/build/es/index.js +1 -1
- package/build/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +1 -1
- package/package.json +31 -4
- package/src/components/accordion/styles/_index.scss +1 -0
- package/src/components/accordion/styles/accordion.css +166 -0
- package/src/components/accordion/styles/accordion.min.css +1 -0
- package/src/components/accordion/styles/accordion.scss +147 -0
- package/src/components/breadcrumb/styles/_index.scss +1 -0
- package/src/components/breadcrumb/styles/breadcrumb.css +29 -0
- package/src/components/breadcrumb/styles/breadcrumb.min.css +1 -0
- package/src/components/breadcrumb/styles/breadcrumb.scss +34 -0
- package/src/components/button/styles/_index.scss +1 -0
- package/src/components/button/styles/button.css +251 -0
- package/src/components/button/styles/button.min.css +1 -0
- package/src/components/button/styles/button.scss +294 -0
- package/src/components/checkbox/styles/_index.scss +1 -0
- package/src/components/checkbox/styles/checkbox.css +191 -0
- package/src/components/checkbox/styles/checkbox.min.css +1 -0
- package/src/components/checkbox/styles/checkbox.scss +229 -0
- package/src/components/combobox/styles/_index.scss +1 -0
- package/src/components/combobox/styles/combobox.css +337 -0
- package/src/components/combobox/styles/combobox.min.css +1 -0
- package/src/components/combobox/styles/combobox.scss +307 -0
- package/src/components/cookie-consent/styles/_index.scss +1 -0
- package/src/components/cookie-consent/styles/cookie-consent.css +94 -0
- package/src/components/cookie-consent/styles/cookie-consent.min.css +1 -0
- package/src/components/cookie-consent/styles/cookie-consent.scss +79 -0
- package/src/components/datepicker/styles/_calendar-date-button.scss +100 -0
- package/src/components/datepicker/styles/_calendar-navigation-dropdown.scss +53 -0
- package/src/components/datepicker/styles/_calendar-navigation.scss +54 -0
- package/src/components/datepicker/styles/_calendar-table.scss +27 -0
- package/src/components/datepicker/styles/_calendar.scss +68 -0
- package/src/components/datepicker/styles/_index.scss +1 -0
- package/src/components/datepicker/styles/datepicker.css +453 -0
- package/src/components/datepicker/styles/datepicker.min.css +1 -0
- package/src/components/datepicker/styles/datepicker.scss +63 -0
- package/src/components/list/styles/_index.scss +1 -0
- package/src/components/list/styles/list.css +128 -0
- package/src/components/list/styles/list.min.css +1 -0
- package/src/components/list/styles/list.scss +166 -0
- package/src/components/loader/styles/loader.css +6 -6
- package/src/components/loader/styles/loader.min.css +1 -1
- package/src/components/loader/styles/skeleton-loader.css +5 -5
- package/src/components/loader/styles/skeleton-loader.min.css +1 -1
- package/src/components/modal/styles/_index.scss +1 -0
- package/src/components/modal/styles/modal.css +115 -0
- package/src/components/modal/styles/modal.min.css +1 -0
- package/src/components/modal/styles/modal.scss +100 -0
- package/src/components/radio-button/styles/_index.scss +1 -0
- package/src/components/radio-button/styles/radio-button.css +180 -0
- package/src/components/radio-button/styles/radio-button.min.css +1 -0
- package/src/components/radio-button/styles/radio-button.scss +201 -0
- package/src/components/select/styles/_index.scss +1 -0
- package/src/components/select/styles/select.css +350 -0
- package/src/components/select/styles/select.min.css +1 -0
- package/src/components/select/styles/select.scss +330 -0
- package/src/components/text-input/styles/_index.scss +1 -0
- package/src/components/text-input/styles/text-input.css +513 -0
- package/src/components/text-input/styles/text-input.min.css +1 -0
- package/src/components/text-input/styles/text-input.scss +389 -0
- package/src/components/tooltip/styles/_index.scss +1 -0
- package/src/components/tooltip/styles/tooltip.css +136 -0
- package/src/components/tooltip/styles/tooltip.min.css +1 -0
- package/src/components/tooltip/styles/tooltip.scss +105 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("../../../clsx-E3yX_9sL.cjs");exports.Accordion=({className:t,density:r,id:c,...o})=>e.jsx("section",{role:"group","data-testid":"jkl-accordion",className:s.clsx("jkl-accordion",t),"data-density":r,id:c,...o});
|
|
2
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sources":["../../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { FC } from \"react\";\nimport { Density, WithChildren } from \"../..\";\n\nexport interface AccordionProps extends WithChildren {\n className?: string;\n density?: Density;\n id?: string;\n}\n\nexport const Accordion: FC<AccordionProps> = ({ className, density, id, ...rest }) => {\n return (\n <section\n role=\"group\"\n data-testid=\"jkl-accordion\"\n className={clsx(\"jkl-accordion\", className)}\n data-density={density}\n id={id}\n {...rest}\n />\n );\n};\n"],"names":["className","density","id","rest","jsx","role","clsx"],"mappings":"+KAU6C,EAAGA,UAAAA,EAAWC,QAAAA,EAASC,GAAAA,KAAOC,KAEnEC,EAAAA,IAAC,UAAA,CACGC,KAAK,QACL,cAAY,gBACZL,UAAWM,EAAAA,KAAK,gBAAiBN,GACjC,eAAcC,EACdC,GAAAA,KACIC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("../../../clsx-E3yX_9sL.cjs"),n=require("react"),o=require("../../hooks/useAnimatedDetails/useAnimatedDetails.js");require("../../hooks/useScreen/useScreen.js"),require("../../hooks/useId/useId.js"),require("../icon/Icon.js");const r=require("../icon/icons/animated/ArrowVerticalAnimated.js");require("../icon/icons/animated/ArrowHorizontalAnimated.js"),require("../icon/icons/animated/PlusRemoveAnimated.js"),require("../icon/icons/ArrowDownIcon.js"),require("../icon/icons/ArrowLeftIcon.js"),require("../icon/icons/ArrowNorthEastIcon.js"),require("../icon/icons/ArrowRightIcon.js"),require("../icon/icons/ArrowUpIcon.js"),require("../icon/icons/CalendarIcon.js"),require("../icon/icons/CheckIcon.js"),require("../icon/icons/ChevronDownIcon.js"),require("../icon/icons/ChevronLeftIcon.js"),require("../icon/icons/ChevronRightIcon.js"),require("../icon/icons/ChevronUpIcon.js"),require("../icon/icons/CloseIcon.js"),require("../icon/icons/CopyIcon.js"),require("../icon/icons/DotsIcon.js"),require("../icon/icons/DragIcon.js"),require("../icon/icons/ErrorIcon.js"),require("../icon/icons/GreenCheckIcon.js"),require("../icon/icons/HamburgerIcon.js"),require("../icon/icons/InfoIcon.js"),require("../icon/icons/LinkIcon.js"),require("../icon/icons/PlusIcon.js"),require("../icon/icons/QuestionIcon.js"),require("../icon/icons/RedCrossIcon.js"),require("../icon/icons/SearchIcon.js"),require("../icon/icons/SuccessIcon.js"),require("../icon/icons/WarningIcon.js"),require("../icon/icons/MinusIcon.js"),require("../icon/icons/ThumbDownIcon.js"),require("../icon/icons/ThumbUpIcon.js"),require("../icon/icons/TrashCanIcon.js"),require("../icon/icons/PenIcon.js");exports.AccordionItem=({children:c,title:s,className:t,startExpanded:a=!1,onClick:u,id:j,...d})=>{const[l,q]=n.useState(a),[m]=n.useState((()=>a)),{detailsRef:I,summaryRef:h,contentRef:k,onSummaryClick:A}=o.useAnimatedDetails({onOpenChange:(e,i)=>{q(e),u&&u(i,e)},isExpanded:m});return e.jsxs("details",{"data-testid":"jkl-accordion-item",...d,className:i.clsx("jkl-accordion-item",t),ref:I,id:j,children:[e.jsxs("summary",{"data-testid":"jkl-accordion-item__title",className:"jkl-accordion-item__title",onClick:A,ref:h,children:[s,e.jsx(r.ArrowVerticalAnimated,{variant:"inherit",className:"jkl-accordion-item__arrow",pointingDown:!l,bold:l})]}),e.jsx("div",{"data-testid":"jkl-accordion-item__content-wrapper",className:"jkl-accordion-item__content-wrapper",ref:k,children:e.jsx("div",{className:"jkl-accordion-item__content",children:c})})]})};
|
|
2
|
+
//# sourceMappingURL=AccordionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.js","sources":["../../../../src/components/accordion/AccordionItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { FC, useState } from \"react\";\nimport { WithChildren } from \"../..\";\nimport { useAnimatedDetails } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport interface AccordionItemProps extends WithChildren {\n title: string;\n startExpanded?: boolean;\n className?: string;\n onClick?: (e: React.MouseEvent, isOpen: boolean) => void;\n id?: string;\n}\n\nexport const AccordionItem: FC<AccordionItemProps> = ({\n children,\n title,\n className,\n startExpanded = false,\n onClick,\n id,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(startExpanded);\n const [expandOnMount] = useState(() => startExpanded);\n\n const { detailsRef, summaryRef, contentRef, onSummaryClick } = useAnimatedDetails({\n onOpenChange: (open, e) => {\n setIsOpen(open);\n if (onClick) {\n onClick(e, open);\n }\n },\n isExpanded: expandOnMount,\n });\n\n return (\n <details\n data-testid=\"jkl-accordion-item\"\n {...rest}\n className={clsx(\"jkl-accordion-item\", className)}\n ref={detailsRef}\n id={id}\n >\n <summary\n data-testid=\"jkl-accordion-item__title\"\n className=\"jkl-accordion-item__title\"\n onClick={onSummaryClick}\n ref={summaryRef}\n >\n {title}\n <ArrowVerticalAnimated\n variant=\"inherit\"\n className=\"jkl-accordion-item__arrow\"\n pointingDown={!isOpen}\n bold={isOpen}\n />\n </summary>\n <div\n data-testid=\"jkl-accordion-item__content-wrapper\"\n className=\"jkl-accordion-item__content-wrapper\"\n ref={contentRef}\n >\n <div className=\"jkl-accordion-item__content\">{children}</div>\n </div>\n </details>\n );\n};\n"],"names":["children","title","className","startExpanded","onClick","id","rest","isOpen","setIsOpen","useState","expandOnMount","detailsRef","summaryRef","contentRef","onSummaryClick","useAnimatedDetails","onOpenChange","open","e","isExpanded","jsxs","clsx","ref","jsx","ArrowVerticalAnimated","variant","pointingDown","bold"],"mappings":"gxDAcqD,EACjDA,SAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAC,cAAAA,GAAgB,EAChBC,QAAAA,EACAC,GAAAA,KACGC,MAEH,MAAOC,EAAQC,GAAaC,WAASN,IAC9BO,GAAiBD,YAAS,IAAMN,KAE/BQ,WAAAA,EAAYC,WAAAA,EAAYC,WAAAA,EAAYC,eAAAA,GAAmBC,EAAAA,mBAAmB,CAC9EC,aAAc,CAACC,EAAMC,KACjBV,EAAUS,GACNb,GACAA,EAAQc,EAAGD,EAAI,EAGvBE,WAAYT,IAIZ,OAAAU,EAAAA,KAAC,UAAA,CACG,cAAY,wBACRd,EACJJ,UAAWmB,EAAAA,KAAK,qBAAsBnB,GACtCoB,IAAKX,EACLN,GAAAA,EAEAL,SAAA,CAAAoB,EAAAA,KAAC,UAAA,CACG,cAAY,4BACZlB,UAAU,4BACVE,QAASU,EACTQ,IAAKV,EAEJZ,SAAA,CAAAC,EACDsB,EAAAA,IAACC,EAAAA,sBAAA,CACGC,QAAQ,UACRvB,UAAU,4BACVwB,cAAenB,EACfoB,KAAMpB,OAGdgB,EAAAA,IAAC,MAAA,CACG,cAAY,sCACZrB,UAAU,sCACVoB,IAAKT,EAELb,SAACuB,EAAAA,IAAA,MAAA,CAAIrB,UAAU,8BAA+BF,SAAAA,QAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../clsx-E3yX_9sL.cjs"),a=require("react");exports.Breadcrumb=({className:s,children:t,density:l,...n})=>{const c=a.Children.count(t);return e.jsx("nav",{"aria-label":"Sti",className:r.clsx("jkl-breadcrumb",s),"data-layout-density":l,...n,children:e.jsx("ol",{className:"jkl-breadcrumb__list",children:a.Children.map(t,((r,s)=>{const t=s+1===c;return e.jsxs(e.Fragment,{children:[a.isValidElement(r)?a.cloneElement(r,{isLastElement:t}):r,!t&&e.jsx("span",{className:"jkl-breadcrumb__item-separator","aria-hidden":"true",children:"›"})]})}))})})};
|
|
2
|
+
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React from \"react\";\nimport { Density, WithChildren } from \"../..\";\nimport { BreadcrumbItemProps } from \"./BreadcrumbItem\";\n\nexport interface BreadcrumbProps extends WithChildren {\n className?: string;\n density?: Density;\n}\n\nexport const Breadcrumb = ({ className, children, density, ...rest }: BreadcrumbProps): JSX.Element => {\n const numberOfChildren = React.Children.count(children);\n return (\n <nav aria-label=\"Sti\" className={clsx(\"jkl-breadcrumb\", className)} data-layout-density={density} {...rest}>\n <ol className=\"jkl-breadcrumb__list\">\n {React.Children.map(children, (child, index) => {\n const isLastElement = index + 1 === numberOfChildren;\n return (\n <>\n {React.isValidElement<BreadcrumbItemProps>(child)\n ? React.cloneElement<BreadcrumbItemProps>(child, {\n isLastElement,\n })\n : child}\n {!isLastElement && (\n <span className=\"jkl-breadcrumb__item-separator\" aria-hidden=\"true\">\n ›\n </span>\n )}\n </>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"names":["className","children","density","rest","numberOfChildren","React","Children","count","jsx","clsx","map","child","index","isLastElement","jsxs","Fragment","isValidElement","cloneElement"],"mappings":"mMAU0B,EAAGA,UAAAA,EAAWC,SAAAA,EAAUC,QAAAA,KAAYC,MAC1D,MAAMC,EAAmBC,EAAMC,SAASC,MAAMN,GAE1C,OAAAO,MAAC,OAAI,aAAW,MAAMR,UAAWS,EAAKA,KAAA,iBAAkBT,GAAY,sBAAqBE,KAAaC,EAClGF,SAAAO,EAAAA,IAAC,KAAG,CAAAR,UAAU,uBACTC,SAAAI,EAAMC,SAASI,IAAIT,GAAU,CAACU,EAAOC,KAC5B,MAAAC,EAAgBD,EAAQ,IAAMR,EACpC,OAESU,EAAAA,KAAAC,WAAA,CAAAd,SAAA,CAAAI,EAAMW,eAAoCL,GACrCN,EAAMY,aAAkCN,EAAO,CAC3CE,cAAAA,IAEJF,GACJE,GACGL,EAAAA,IAAA,OAAA,CAAKR,UAAU,iCAAiC,cAAY,OAAOC,SAEpE,QAER,OAIhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../clsx-E3yX_9sL.cjs"),l=require("react");exports.BreadcrumbItem=({className:s,children:t,isLastElement:a,...i})=>e.jsx("li",{className:r.clsx("jkl-breadcrumb__item",s),...i,children:l.Children.map(t,(e=>l.isValidElement(e)?l.cloneElement(e,{"aria-current":a?"page":void 0,className:"jkl-link"}):e))});
|
|
2
|
+
//# sourceMappingURL=BreadcrumbItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BreadcrumbItem.js","sources":["../../../../src/components/breadcrumb/BreadcrumbItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { AnchorHTMLAttributes } from \"react\";\nimport { WithChildren } from \"../..\";\n\nexport interface BreadcrumbItemProps extends WithChildren {\n className?: string;\n /**\n * Settes automatisk av Breadcrumb\n * @default false\n */\n isLastElement?: boolean;\n}\n\nexport const BreadcrumbItem = ({ className, children, isLastElement, ...rest }: BreadcrumbItemProps): JSX.Element => {\n return (\n <li className={clsx(\"jkl-breadcrumb__item\", className)} {...rest}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement<AnchorHTMLAttributes<HTMLAnchorElement>>(child)) {\n return React.cloneElement<AnchorHTMLAttributes<HTMLAnchorElement>>(child, {\n \"aria-current\": isLastElement ? \"page\" : undefined,\n className: \"jkl-link\",\n });\n } else {\n return child;\n }\n })}\n </li>\n );\n};\n"],"names":["className","children","isLastElement","rest","jsx","clsx","React","Children","map","child","isValidElement","cloneElement"],"mappings":"uMAa8B,EAAGA,UAAAA,EAAWC,SAAAA,EAAUC,cAAAA,KAAkBC,KAE/DC,EAAAA,IAAA,KAAA,CAAGJ,UAAWK,EAAAA,KAAK,uBAAwBL,MAAgBG,EACvDF,SAAMK,EAAAC,SAASC,IAAIP,GAAWQ,GACvBH,EAAMI,eAAwDD,GACvDH,EAAMK,aAAsDF,EAAO,CACtE,eAAgBP,EAAgB,YAAS,EACzCF,UAAW,aAGRS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),e=require("../../../clsx-E3yX_9sL.cjs"),o=require("react");require("../../hooks/useScreen/useScreen.js");const r=require("../../hooks/useAriaLiveRegion/useAriaLiveRegion.js");require("../../hooks/useId/useId.js");const s=require("../loader/Loader.js"),n=o.forwardRef((function(n,i){const{as:c="button",children:a,className:l,density:u,onTouchStart:d,loader:j,iconLeft:h,iconRight:x,variant:y="secondary",...k}=n,p=c,b=o.useCallback((t=>{d&&d(t);const e=t.target;if(e&&t.targetTouches.length){const o=t.targetTouches[0].clientX-e.getBoundingClientRect().x,r=t.targetTouches[0].clientY-e.getBoundingClientRect().y;e.style.setProperty("--jkl-touch-xcoord",o.toPrecision(4)+"px"),e.style.setProperty("--jkl-touch-ycoord",r.toPrecision(4)+"px"),e.classList.add("jkl-button--pressed"),setTimeout((()=>{e.classList.remove("jkl-button--pressed"),e.style.removeProperty("--jkl-touch-xcoord"),e.style.removeProperty("--jkl-touch-ycoord")}),400)}}),[d]),v=r.useAriaLiveRegion(null==j?void 0:j.showLoader);return t.jsx(p,{...v,"data-density":u,className:e.clsx("jkl-button","jkl-button--"+y,l,{"jkl-button--icon-left":h,"jkl-button--icon-right":x}),disabled:"button"===c?null==j?void 0:j.showLoader:void 0,onTouchStart:b,...k,ref:i,children:t.jsx("div",{className:"jkl-button__content",children:t.jsxs("div",{className:e.clsx("jkl-button__slider",{"jkl-button__slider--show-loader":!(null==j||!j.showLoader)}),children:[h&&t.jsx("span",{className:"jkl-button__icon",children:h}),t.jsx("span",{className:"jkl-button__children",children:a}),x&&t.jsx("span",{className:"jkl-button__icon",children:x}),j&&t.jsx("div",{className:"jkl-button__loader",children:t.jsx(s.Loader,{textDescription:j.textDescription,"aria-hidden":!j.showLoader})})]})})})}));exports.Button=n,exports.GhostButton=function(e){const o={...e,variant:"ghost"};return t.jsx(n,{...o})},exports.PrimaryButton=function(e){const o={...e,variant:"primary"};return t.jsx(n,{...o})},exports.SecondaryButton=function(e){const o={...e,variant:"secondary"};return t.jsx(n,{...o})},exports.TertiaryButton=function(e){const o={...e,variant:"tertiary"};return t.jsx(n,{...o})};
|
|
2
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../src/components/button/Button.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ButtonHTMLAttributes, type TouchEvent, useCallback } from \"react\";\nimport type { PolymorphicRef } from \"../..\";\nimport { useAriaLiveRegion } from \"../../hooks\";\nimport { Loader } from \"../loader\";\nimport type { ButtonComponent, ButtonProps } from \"./types\";\n\nexport const Button = React.forwardRef(function Button<ElementType extends React.ElementType = \"button\">(\n props: ButtonProps<ElementType>,\n ref?: PolymorphicRef<ElementType>,\n) {\n const {\n as = \"button\",\n children,\n className,\n density,\n onTouchStart,\n loader,\n iconLeft,\n iconRight,\n variant = \"secondary\",\n ...rest\n } = props;\n\n const Component = as;\n\n const handleTouch = useCallback(\n (event: TouchEvent<HTMLButtonElement>) => {\n onTouchStart && onTouchStart(event);\n\n const target = event.target as HTMLButtonElement;\n if (target && event.targetTouches.length) {\n const Xcoord = event.targetTouches[0].clientX - target.getBoundingClientRect().x;\n const Ycoord = event.targetTouches[0].clientY - target.getBoundingClientRect().y;\n target.style.setProperty(\"--jkl-touch-xcoord\", Xcoord.toPrecision(4) + \"px\");\n target.style.setProperty(\"--jkl-touch-ycoord\", Ycoord.toPrecision(4) + \"px\");\n target.classList.add(\"jkl-button--pressed\");\n\n setTimeout(() => {\n target.classList.remove(\"jkl-button--pressed\");\n target.style.removeProperty(\"--jkl-touch-xcoord\");\n target.style.removeProperty(\"--jkl-touch-ycoord\");\n }, 400);\n }\n },\n [onTouchStart],\n );\n\n const ariaLive = useAriaLiveRegion(loader?.showLoader);\n\n return (\n <Component\n {...ariaLive}\n data-density={density}\n className={clsx(\"jkl-button\", \"jkl-button--\" + variant, className, {\n \"jkl-button--icon-left\": iconLeft,\n \"jkl-button--icon-right\": iconRight,\n })}\n disabled={as === \"button\" ? loader?.showLoader : undefined}\n onTouchStart={handleTouch}\n {...rest}\n ref={ref}\n >\n <div className=\"jkl-button__content\">\n <div\n className={clsx(\"jkl-button__slider\", {\n \"jkl-button__slider--show-loader\": !!loader?.showLoader,\n })}\n >\n {iconLeft && <span className=\"jkl-button__icon\">{iconLeft}</span>}\n <span className=\"jkl-button__children\">{children}</span>\n {iconRight && <span className=\"jkl-button__icon\">{iconRight}</span>}\n\n {loader && (\n <div className=\"jkl-button__loader\">\n <Loader textDescription={loader.textDescription} aria-hidden={!loader.showLoader} />\n </div>\n )}\n </div>\n </div>\n </Component>\n );\n}) as ButtonComponent;\n\nexport function PrimaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"primary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function SecondaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"secondary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function TertiaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"tertiary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function GhostButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"loader\">,\n) {\n const buttonProps = { ...props, variant: \"ghost\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n"],"names":["Button","React","forwardRef","props","ref","as","children","className","density","onTouchStart","loader","iconLeft","iconRight","variant","rest","Component","handleTouch","useCallback","event","target","targetTouches","length","Xcoord","clientX","getBoundingClientRect","x","Ycoord","clientY","y","style","setProperty","toPrecision","classList","add","setTimeout","remove","removeProperty","ariaLive","useAriaLiveRegion","showLoader","jsx","clsx","disabled","jsxs","Loader","textDescription","buttonProps"],"mappings":"iXAOaA,EAASC,EAAMC,YAAW,SACnCC,EACAC,GAEM,MACFC,GAAAA,EAAK,SACLC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,eACPC,GACHX,EAEEY,EAAYV,EAEZW,EAAcC,EAAAA,aACfC,IACGT,GAAgBA,EAAaS,GAE7B,MAAMC,EAASD,EAAMC,OACjB,GAAAA,GAAUD,EAAME,cAAcC,OAAQ,CAChC,MAAAC,EAASJ,EAAME,cAAc,GAAGG,QAAUJ,EAAOK,wBAAwBC,EACzEC,EAASR,EAAME,cAAc,GAAGO,QAAUR,EAAOK,wBAAwBI,EAC/ET,EAAOU,MAAMC,YAAY,qBAAsBR,EAAOS,YAAY,GAAK,MACvEZ,EAAOU,MAAMC,YAAY,qBAAsBJ,EAAOK,YAAY,GAAK,MAChEZ,EAAAa,UAAUC,IAAI,uBAErBC,YAAW,KACAf,EAAAa,UAAUG,OAAO,uBACjBhB,EAAAU,MAAMO,eAAe,sBACrBjB,EAAAU,MAAMO,eAAe,qBAAoB,GACjD,IACP,IAEJ,CAAC3B,IAGC4B,EAAWC,EAAAA,kBAAkB,MAAA5B,SAAAA,EAAQ6B,YAGvC,OAAAC,EAAAA,IAACzB,EAAA,IACOsB,EACJ,eAAc7B,EACdD,UAAWkC,EAAAA,KAAK,aAAc,eAAiB5B,EAASN,EAAW,CAC/D,wBAAyBI,EACzB,yBAA0BC,IAE9B8B,SAAiB,WAAPrC,EAAkB,MAAAK,OAAAA,EAAAA,EAAQ6B,gBAAa,EACjD9B,aAAcO,KACVF,EACJV,IAAAA,EAEAE,SAAAkC,EAAAA,IAAC,MAAI,CAAAjC,UAAU,sBACXD,SAAAqC,EAAAA,KAAC,MAAA,CACGpC,UAAWkC,OAAK,qBAAsB,CAClC,oCAAqC,MAAA/B,IAAAA,EAAQ6B,cAGhDjC,SAAA,CAAAK,GAAa6B,EAAAA,IAAA,OAAA,CAAKjC,UAAU,mBAAoBD,SAASK,IACzD6B,EAAAA,IAAA,OAAA,CAAKjC,UAAU,uBAAwBD,SAAAA,IACvCM,GAAa4B,EAAAA,IAAC,OAAK,CAAAjC,UAAU,mBAAoBD,SAAUM,IAE3DF,GACG8B,EAAAA,IAAC,MAAI,CAAAjC,UAAU,qBACXD,SAACkC,MAAAI,EAAAA,OAAA,CAAOC,gBAAiBnC,EAAOmC,gBAAiB,eAAcnC,EAAO6B,qBAOlG,yCA0BO,SACHpC,GAEA,MAAM2C,EAAc,IAAK3C,EAAOU,QAAS,SAClC,OAAA2B,EAAAA,IAACxC,EAAQ,IAAG8C,GACvB,wBA7BO,SACH3C,GAGA,MAAM2C,EAAc,IAAK3C,EAAOU,QAAS,WAClC,OAAA2B,EAAAA,IAACxC,EAAQ,IAAG8C,GACvB,0BAEO,SACH3C,GAGA,MAAM2C,EAAc,IAAK3C,EAAOU,QAAS,aAClC,OAAA2B,EAAAA,IAACxC,EAAQ,IAAG8C,GACvB,yBAEO,SACH3C,GAGA,MAAM2C,EAAc,IAAK3C,EAAOU,QAAS,YAClC,OAAA2B,EAAAA,IAACxC,EAAQ,IAAG8C,GACvB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./Button.js");exports.Button=t.Button,exports.PrimaryButton=t.PrimaryButton,exports.SecondaryButton=t.SecondaryButton,exports.TertiaryButton=t.TertiaryButton;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../src/components/button/types.ts"],"sourcesContent":["import { Density, PolymorphicPropsWithRef } from \"../..\";\n\nexport const buttonVariants = [\"primary\", \"secondary\", \"tertiary\", \"ghost\"] as const;\nexport type ButtonVariant = (typeof buttonVariants)[number];\n\nexport type ButtonProps<ElementType extends React.ElementType> = PolymorphicPropsWithRef<\n ElementType,\n {\n density?: Density;\n /**\n * Hvilken variant av knappen skal vises\n * @default \"secondary\"\n */\n variant?: ButtonVariant;\n className?: string;\n loader?: {\n showLoader: boolean;\n textDescription: string;\n };\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n }\n>;\n\nexport type ButtonComponent = <ElementType extends React.ElementType = \"button\">(\n props: ButtonProps<ElementType>,\n) => React.ReactElement | null;\n"],"names":[],"mappings":"uGAE8B,CAAC,UAAW,YAAa,WAAY"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("../../../clsx-E3yX_9sL.cjs"),s=require("react");require("../../hooks/useScreen/useScreen.js");const a=require("../../hooks/useId/useId.js"),t=s.forwardRef(((t,r)=>{const{id:n,children:i,invalid:l,className:o,inline:d=!1,density:k,"data-testautoid":h,checked:u,indeterminate:x,...j}=t,b=s.useRef(null);s.useImperativeHandle(r,(()=>b.current),[]);const m=a.useId(n||"jkl-checkbox",{generateSuffix:!n});return s.useEffect((()=>{!0===u&&!0===x&&"production"!==process.env.NODE_ENV&&console.warn("A Checkbox can not be both checked and indeterminate, and will be treated as checked"),b.current&&(b.current.indeterminate=!u&&!!x)}),[u,x]),e.jsxs("div",{className:c.clsx("jkl-checkbox",o,{"jkl-checkbox--inline":d,"jkl-checkbox--error":l}),"data-density":k,children:[e.jsx("input",{id:m,ref:b,className:"jkl-checkbox__input","data-testid":"jkl-checkbox-input","aria-invalid":l,type:"checkbox","data-testautoid":h,checked:u,...j}),e.jsxs("label",{htmlFor:m,className:"jkl-checkbox__label",children:[e.jsxs("span",{className:"jkl-checkbox__mark",children:[e.jsx("span",{className:"jkl-checkbox__indeterminate-mark"}),e.jsx("span",{className:"jkl-checkbox__check-mark"})]}),e.jsx("span",{className:"jkl-checkbox__text",children:i})]})]})}));t.displayName="Checkbox",exports.Checkbox=t;
|
|
2
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n ReactNode,\n forwardRef,\n ChangeEventHandler,\n FocusEventHandler,\n InputHTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { DataTestAutoId, Density } from \"../..\";\nimport { useId } from \"../../hooks\";\n\nexport interface CheckboxProps extends DataTestAutoId, InputHTMLAttributes<HTMLInputElement> {\n children: ReactNode;\n name: string;\n value: string;\n checked?: boolean;\n inline?: boolean;\n className?: string;\n density?: Density;\n invalid?: boolean;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n onFocus?: FocusEventHandler<HTMLInputElement>;\n onBlur?: FocusEventHandler<HTMLInputElement>;\n indeterminate?: boolean;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {\n const {\n id,\n children,\n invalid,\n className,\n inline = false,\n density,\n \"data-testautoid\": testAutoId,\n checked,\n indeterminate,\n ...rest\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!, []);\n\n const inputId = useId(id || \"jkl-checkbox\", { generateSuffix: !id });\n\n useEffect(() => {\n if (checked === true && indeterminate === true && process.env.NODE_ENV !== \"production\") {\n console.warn(\"A Checkbox can not be both checked and indeterminate, and will be treated as checked\");\n }\n if (inputRef.current) {\n inputRef.current.indeterminate = !checked && !!indeterminate;\n }\n }, [checked, indeterminate]);\n\n return (\n <div\n className={clsx(\"jkl-checkbox\", className, {\n \"jkl-checkbox--inline\": inline,\n \"jkl-checkbox--error\": invalid,\n })}\n data-density={density}\n >\n <input\n id={inputId}\n ref={inputRef}\n className=\"jkl-checkbox__input\"\n data-testid=\"jkl-checkbox-input\"\n aria-invalid={invalid}\n type=\"checkbox\"\n data-testautoid={testAutoId}\n checked={checked}\n {...rest}\n />\n <label htmlFor={inputId} className=\"jkl-checkbox__label\">\n <span className=\"jkl-checkbox__mark\">\n <span className=\"jkl-checkbox__indeterminate-mark\" />\n <span className=\"jkl-checkbox__check-mark\" />\n </span>\n <span className=\"jkl-checkbox__text\">{children}</span>\n </label>\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n"],"names":["Checkbox","forwardRef","props","ref","id","children","invalid","className","inline","density","testAutoId","checked","indeterminate","rest","inputRef","useRef","useImperativeHandle","current","inputId","useId","generateSuffix","useEffect","process","env","NODE_ENV","console","warn","jsxs","clsx","jsx","type","htmlFor","displayName"],"mappings":"4QA6BaA,EAAWC,EAAAA,YAA4C,CAACC,EAAOC,KAClE,MACFC,GAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAC,UAAAA,EACAC,OAAAA,GAAS,EACTC,QAAAA,EACA,kBAAmBC,EACnBC,QAAAA,EACAC,cAAAA,KACGC,GACHX,EAEEY,EAAWC,SAAyB,MAC1CC,EAAAA,oBAAoBb,GAAK,IAAMW,EAASG,SAAU,IAE5C,MAAAC,EAAUC,QAAMf,GAAM,eAAgB,CAAEgB,gBAAiBhB,IAE/DiB,OAAAA,EAAAA,WAAU,MACU,IAAZV,IAAsC,IAAlBC,GAAmD,eAAzBU,QAAQC,IAAIC,UAC1DC,QAAQC,KAAK,wFAEbZ,EAASG,UACTH,EAASG,QAAQL,eAAiBD,KAAaC,EAAAA,GAEpD,CAACD,EAASC,IAGTe,EAAAA,KAAC,MAAA,CACGpB,UAAWqB,EAAAA,KAAK,eAAgBrB,EAAW,CACvC,uBAAwBC,EACxB,sBAAuBF,IAE3B,eAAcG,EAEdJ,SAAA,CAAAwB,EAAAA,IAAC,QAAA,CACGzB,GAAIc,EACJf,IAAKW,EACLP,UAAU,sBACV,cAAY,qBACZ,eAAcD,EACdwB,KAAK,WACL,kBAAiBpB,EACjBC,QAAAA,KACIE,IAEPc,EAAAA,KAAA,QAAA,CAAMI,QAASb,EAASX,UAAU,sBAC/BF,SAAA,CAACsB,EAAAA,KAAA,OAAA,CAAKpB,UAAU,qBACZF,SAAA,CAACwB,EAAAA,IAAA,OAAA,CAAKtB,UAAU,qCAChBsB,EAAAA,IAAC,OAAK,CAAAtB,UAAU,gCAEnBsB,EAAAA,IAAA,OAAA,CAAKtB,UAAU,qBAAsBF,SAAAA,SAC1C,IAKZL,EAASgC,YAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("../../../clsx-E3yX_9sL.cjs"),n=require("react"),r=require("../../hooks/useAnimatedHeight/useAnimatedHeight.js");require("../../hooks/useScreen/useScreen.js");const t=require("../../hooks/useId/useId.js"),s=require("../../hooks/useListNavigation/useListNavigation.js");require("../icon/Icon.js");const i=require("../icon/icons/animated/ArrowVerticalAnimated.js");require("../icon/icons/animated/ArrowHorizontalAnimated.js"),require("../icon/icons/animated/PlusRemoveAnimated.js"),require("../icon/icons/ArrowDownIcon.js"),require("../icon/icons/ArrowLeftIcon.js"),require("../icon/icons/ArrowNorthEastIcon.js"),require("../icon/icons/ArrowRightIcon.js"),require("../icon/icons/ArrowUpIcon.js"),require("../icon/icons/CalendarIcon.js");const a=require("../icon/icons/CheckIcon.js");require("../icon/icons/ChevronDownIcon.js"),require("../icon/icons/ChevronLeftIcon.js"),require("../icon/icons/ChevronRightIcon.js"),require("../icon/icons/ChevronUpIcon.js"),require("../icon/icons/CloseIcon.js"),require("../icon/icons/CopyIcon.js"),require("../icon/icons/DotsIcon.js"),require("../icon/icons/DragIcon.js"),require("../icon/icons/ErrorIcon.js"),require("../icon/icons/GreenCheckIcon.js"),require("../icon/icons/HamburgerIcon.js"),require("../icon/icons/InfoIcon.js"),require("../icon/icons/LinkIcon.js"),require("../icon/icons/PlusIcon.js"),require("../icon/icons/QuestionIcon.js"),require("../icon/icons/RedCrossIcon.js"),require("../icon/icons/SearchIcon.js"),require("../icon/icons/SuccessIcon.js"),require("../icon/icons/WarningIcon.js"),require("../icon/icons/MinusIcon.js"),require("../icon/icons/ThumbDownIcon.js"),require("../icon/icons/ThumbUpIcon.js"),require("../icon/icons/TrashCanIcon.js"),require("../icon/icons/PenIcon.js");const c=require("../icon-button/IconButton.js"),l=require("../tooltip/Tooltip.js"),u=require("../tooltip/TooltipContent.js"),d=require("../tooltip/TooltipTrigger.js"),b=require("../input-group/InputGroup.js"),p=require("../tag/Tag.js");function j(e){return"string"==typeof e?{value:e,label:e}:e}const m=({id:m,placeholder:v,items:g,onChange:h,onFocus:k,onBlur:x,value:f,label:q,noMatchingOption:_,labelProps:I,helpLabel:w,errorLabel:C,width:y,density:T,name:A,className:L,invalid:N,hasTagHover:S})=>{var $,D;const P=t.useId(m||"jkl-combobox",{generateSuffix:!m}),E=`${P}_label`,B=`${P}_button`,M=`${P}_search-input`,[F,O]=n.useState(f||[]),[R,H]=n.useState(!0),[K,V]=n.useState(!1),[U,G]=n.useState(""),[z,Q]=n.useState(!1),[W,J]=n.useState(!1),X=n.useRef(null),Y=n.useRef(null),Z=n.useRef(!1);n.useEffect((()=>{G(""),K&&X.current&&X.current.focus()}),[K]),n.useEffect((()=>{O((e=>f||e))}),[f]);const ee=e=>!!F&&F.some((o=>o.value===e.value)),oe=n.useCallback((e=>F.filter((o=>o.value!==e))),[F]),ne=n.useCallback(((e,o)=>{let n=oe(o);O(n),h({type:"change",target:{name:A,value:o,selectedOptions:n}}),e.stopPropagation(),0===n.length&&J(!1)}),[oe,O,h,A,J]),re=n.useCallback((e=>{var o;let n;if(F.some((o=>o.value===e)))n=oe(e);else{const o=g.find((o=>o.value===e));n=[...F,o]}null==(o=X.current)||o.focus(),O(n),h({type:"change",target:{name:A,value:e,selectedOptions:n}})}),[F,O,h,A,oe,g]),te=e=>{var o;null==(o=X.current)||o.focus(),V(!0),G(e.target.value)},se=n.useMemo((()=>{if(!U)return g;const e=g.filter((e=>e.label.toLowerCase().indexOf(U.toLowerCase())>=0));return Q(0===e.length),e}),[U,g]),[ie,ae]=n.useState(null!=($=se[0])&&$.value?`${P}-${null==(D=se[0])?void 0:D.value}`:void 0);n.useEffect((()=>{H(!K)}),[K]),n.useEffect((()=>{const e=e=>{"Escape"===e.key&&K&&V(!1)};return typeof window<"u"&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&K&&window.removeEventListener("keydown",e)}}),[V,K]);const ce=n.useCallback((e=>{e?X.current&&X.current.focus():Z.current&&Y.current&&Y.current.focus()}),[]),le=n.useCallback((()=>{Z.current||(k&&k({type:"change",target:{name:A,value:(null==F?void 0:F[0].value)||"",selectedOptions:F}}),Z.current=!0,V(!0))}),[k,F,A]),[ue]=r.useAnimatedHeight(K,{onFirstVisible:ce,onTransitionEnd:ce});s.useListNavigation({ref:ue});const de=n.useRef(null),be=n.useCallback((e=>{var o,n;const r=de.current;r&&r.contains(e.relatedTarget)||(G(""),x&&(x({type:"blur",target:{name:A,value:(null==(o=null==F?void 0:F[0])?void 0:o.value)||"",selectedOptions:F}}),null==(n=Y.current)||n.dispatchEvent(new Event("focusout",{bubbles:!0}))),Z.current=!1,V(!1))}),[x,A,F]),pe=n.useCallback((e=>{e.target.focus({preventScroll:!0})}),[]),je=n.useCallback((e=>{var o;if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const n=ue.current;n&&(null==(o=n.querySelector('[role="option"]'))||o.focus())}else"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),V(!1));if(e.metaKey&&"a"===e.key||e.ctrlKey&&"a"===e.key){e.preventDefault(),e.stopPropagation();const o=F.map((e=>({...e,isMarked:!0})));J(!0),O(o)}else if("Backspace"===e.key)if(e.stopPropagation(),J(!1),F.some((e=>e.isMarked))){const e=F.filter((e=>!e.isMarked));O(e),G("")}else F.length>0&&""===U&&ne(e,F[F.length-1].value)}),[F,U,ue,ne]),me=n.useCallback((e=>{if("Tab"===e.key)X.current&&(e.preventDefault(),e.stopPropagation(),e.shiftKey||V(!1),X.current.focus());else if("ArrowUp"===e.key&&ue.current&&X.current){const o=ue.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==o?void 0:o.id)&&X.current&&X.current.focus()}}),[V,ue]),ve=F.length>=1;return e.jsx(b.InputGroup,{label:q,id:M,ref:de,"data-testid":"jkl-combobox",className:o.clsx("jkl-combobox",L,{"jkl-combobox--invalid":!!C||N,"jkl-combobox--menu-open":K,"jkl-combobox--menu-closed":!K&&ve}),labelProps:{id:E,...I},helpLabel:w,errorLabel:C,density:T,render:n=>e.jsxs("div",{className:o.clsx("jkl-combobox__wrapper",{"jkl-combobox__wrapper--active-value":ve}),style:{width:y},tabIndex:-1,onFocus:le,onBlur:be,children:[e.jsxs("div",{className:"jkl-combobox__tags","data-testid":"jkl-combobox__tags",children:[F.map(j).map((o=>e.jsx(p.Tag,{className:`jkl-tag ${W&&"jkl-tag__marked"}`,"data-testid":"jkl-tag",dismissAction:{onClick:e=>{X.current&&X.current.focus(),ne(e,o.value)},onBlur:be,label:`Fjern ${o.value}`},children:S?e.jsxs(l.Tooltip,{children:[e.jsxs(d.TooltipTrigger,{children:[" ",e.jsx("span",{"aria-hidden":"true","data-testid":"jkl-tag__content",children:o.tagLabel?o.tagLabel:o.label})]}),e.jsx(u.TooltipContent,{children:o.label})]},o.value):e.jsx("span",{"aria-hidden":"true","data-testid":"jkl-tag__content",children:o.tagLabel?o.tagLabel:o.label})},o.value))),e.jsx("input",{...n,className:"jkl-combobox__search-input",onChange:te,"data-testid":"jkl-combobox__search-input",onFocus:le,onBlur:be,onKeyDown:je,value:U,ref:X,"aria-controls":P,role:"combobox","aria-autocomplete":"list","aria-expanded":K,placeholder:F.length>0?"":v,autoComplete:"off"})]}),e.jsxs("div",{className:"jkl-combobox__menu",role:"listbox",ref:ue,id:P,"aria-labelledby":E,"aria-multiselectable":"true","aria-activedescendant":ie,onFocus:le,onBlur:be,tabIndex:-1,children:[se.map(((o,n)=>e.jsxs("button",{type:"button",id:`${P}__${o.value}`,"aria-selected":ee(o),role:"option",value:o.value,onBlur:be,className:`jkl-combobox__option ${ee(o)&&"jkl-combobox__option--selected"}`,"data-testid":"jkl-combobox__option","data-testautoid":`jkl-combobox__option-${n}`,onFocus:le,onKeyDown:me,onClick:e=>{ae(`${P}__${o.value}`),e.stopPropagation(),re(o.value),G("")},onMouseOver:pe,children:[o.description?e.jsxs("span",{children:[o.label,e.jsx("span",{className:"jkl-combobox__option-description",children:o.description})]}):o.label,ee(o)?e.jsxs("span",{children:[e.jsx(a.CheckIcon,{})," "]}):null]},`${P}-${o.value}`))),z&&e.jsx("div",{className:"jkl-combobox__no-option",children:_})]}),e.jsx("div",{className:"jkl-combobox__actions",children:e.jsx(c.IconButton,{id:B,onFocus:le,onBlur:be,className:"jkl-combobox__button","data-testid":"jkl-combobox__button","aria-label":`${F.map((e=>e.label))||"Velg"},${q}`,"aria-expanded":K,"aria-controls":P,role:"button",onClick:()=>V(!0),onMouseDown:e=>{var o;e.preventDefault(),null==(o=Y.current)||o.focus()},children:e.jsx(i.ArrowVerticalAnimated,{pointingDown:R})})})]})})};m.displayName="Combobox",exports.Combobox=m,exports.getComboboxValuePair=j;
|
|
2
|
+
//# sourceMappingURL=Combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.js","sources":["../../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n FC,\n useEffect,\n useRef,\n useState,\n useCallback,\n KeyboardEvent,\n ChangeEvent,\n FocusEvent,\n MouseEvent,\n useMemo,\n} from \"react\";\nimport { ValuePair, Density } from \"../..\";\nimport { useId, useAnimatedHeight, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated, CheckIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { InputGroup, InputGroupProps, type LabelProps } from \"../input-group\";\nimport { Tag } from \"../tag\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip\";\n\nexport type ComboboxValuePair = ValuePair & {\n tagLabel?: string;\n isMarked?: boolean;\n};\n\nexport function getComboboxValuePair(item: string | ComboboxValuePair): ComboboxValuePair {\n return typeof item === \"string\" ? { value: item, label: item } : item;\n}\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLElement>, \"target\">> {\n type: \"change\" | \"blur\";\n target: {\n name: string;\n value: string;\n selectedOptions: Array<ValuePair>;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface ComboboxProps extends InputGroupProps {\n id?: string;\n placeholder?: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<ValuePair>;\n noMatchingOption?: string;\n label: string;\n name: string;\n value?: Array<ValuePair>;\n density?: Density;\n width?: string;\n helpLabel?: string;\n errorLabel?: string;\n className?: string;\n invalid?: boolean;\n hasTagHover?: boolean;\n onChange: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n}\n\nexport const Combobox: FC<ComboboxProps> = ({\n id,\n placeholder,\n items,\n onChange,\n onFocus,\n onBlur,\n value,\n label,\n noMatchingOption,\n labelProps,\n helpLabel,\n errorLabel,\n width,\n density,\n name,\n className,\n invalid,\n hasTagHover,\n}) => {\n const listId = useId(id || \"jkl-combobox\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const inputId = `${listId}_search-input`;\n\n const [selectedValue, setSelectedValue] = useState<Array<ComboboxValuePair>>(value || []);\n const [isPointingDown, setIsPointingDown] = useState<boolean>(true);\n const [showMenu, setShowMenu] = useState<boolean>(false);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [noResults, setNoResults] = useState(false);\n const [marked, setMarked] = useState<boolean>(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n\n useEffect(() => {\n setSearchValue(\"\");\n if (showMenu && searchRef.current) {\n searchRef.current.focus();\n }\n }, [showMenu]);\n\n useEffect(() => {\n setSelectedValue((prev) => value || prev);\n }, [value]);\n\n // Funksjon for å stile valgt element\n const isSelected = (option: ValuePair) => {\n if (!selectedValue) {\n return false;\n } else {\n return selectedValue.some((value) => value.value === option.value);\n }\n };\n\n // Fjerne ett eller flere valg\n const removeOption = useCallback(\n (option: string) => {\n return selectedValue.filter((value) => value.value !== option);\n },\n [selectedValue],\n );\n\n const onTagRemove = useCallback(\n (\n e: React.MouseEvent<HTMLButtonElement, globalThis.MouseEvent> | React.KeyboardEvent<HTMLInputElement>,\n option: string,\n ) => {\n let newValue = removeOption(option);\n setSelectedValue(newValue);\n onChange({\n type: \"change\",\n target: { name, value: option, selectedOptions: newValue },\n });\n e.stopPropagation();\n\n if (newValue.length === 0) {\n setMarked(false);\n }\n },\n [removeOption, setSelectedValue, onChange, name, setMarked],\n );\n\n // Håndtere valgt verdi i listen\n const onItemClick = useCallback(\n (option: string) => {\n let newValue: Array<ValuePair>;\n\n if (selectedValue.some((value) => value.value === option)) {\n newValue = removeOption(option);\n } else {\n const item = items.find((i) => i.value === option);\n newValue = [...selectedValue, item as ValuePair];\n }\n searchRef.current?.focus();\n setSelectedValue(newValue);\n onChange({\n type: \"change\",\n target: { name, value: option, selectedOptions: newValue },\n });\n },\n [selectedValue, setSelectedValue, onChange, name, removeOption, items],\n );\n\n // Funksjon for søk\n const onSearch = (e: { target: { value: React.SetStateAction<string> } }) => {\n searchRef.current?.focus();\n setShowMenu(true);\n setSearchValue(e.target.value);\n };\n\n const options = useMemo(() => {\n if (!searchValue) {\n return items;\n }\n\n const filteredOptions = items.filter(\n (option) => option.label.toLowerCase().indexOf(searchValue.toLowerCase()) >= 0,\n );\n\n setNoResults(filteredOptions.length === 0);\n\n return filteredOptions;\n }, [searchValue, items]);\n\n // Det første elementet i listen skal være aktivt fram til brukeren klikker på noe annet\n const [activeDescendant, setActiveDescendant] = useState<string | undefined>(\n options[0]?.value ? `${listId}-${options[0]?.value}` : undefined,\n );\n\n // Håndtere arrow-state\n useEffect(() => {\n if (showMenu) {\n setIsPointingDown(false);\n } else {\n setIsPointingDown(true);\n }\n }, [showMenu]);\n\n // Lukk meny med ESC\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && showMenu) {\n setShowMenu(false);\n }\n };\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\" && showMenu) {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShowMenu, showMenu]);\n\n // Fokushåndtering\n const handleFocusPlacement = useCallback((isOpen: boolean) => {\n if (isOpen) {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, []);\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({\n type: \"change\",\n target: {\n name,\n value: selectedValue?.[0].value || \"\",\n selectedOptions: selectedValue,\n },\n });\n }\n focusInsideRef.current = true;\n setShowMenu(true);\n }\n }, [onFocus, selectedValue, name]);\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(showMenu, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLDivElement | HTMLInputElement | HTMLButtonElement>) => {\n const componentRootElement = componentRootElementRef.current;\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n setSearchValue(\"\");\n\n if (onBlur) {\n onBlur({\n type: \"blur\",\n target: {\n name,\n value: selectedValue?.[0]?.value || \"\",\n selectedOptions: selectedValue,\n },\n });\n inputRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShowMenu(false);\n }\n },\n [onBlur, name, selectedValue],\n );\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Tastaturnavigasjon\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n const listElement = dropdownRef.current;\n if (listElement) {\n listElement.querySelector<HTMLButtonElement>('[role=\"option\"]')?.focus();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShowMenu(false);\n }\n\n if ((e.metaKey && e.key === \"a\") || (e.ctrlKey && e.key === \"a\")) {\n e.preventDefault();\n e.stopPropagation();\n const updatedSelectedValue = selectedValue.map((item) => ({\n ...item,\n isMarked: true,\n }));\n setMarked(true);\n setSelectedValue(updatedSelectedValue);\n } else if (e.key === \"Backspace\") {\n e.stopPropagation();\n setMarked(false);\n\n // Sjekk om selectedValue er markert\n const selectedValueIsMarked = selectedValue.some((item) => item.isMarked);\n\n if (selectedValueIsMarked) {\n const updatedSelectedValue = selectedValue.filter((item) => !item.isMarked);\n setSelectedValue(updatedSelectedValue);\n setSearchValue(\"\");\n } else if (selectedValue.length > 0 && searchValue === \"\") {\n // Hvis ingen items er markert, fjern siste valgte item\n onTagRemove(e, selectedValue[selectedValue.length - 1].value);\n }\n }\n },\n [selectedValue, searchValue, dropdownRef, onTagRemove],\n );\n\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n if (searchRef.current) {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey) {\n searchRef.current.focus();\n } else {\n setShowMenu(false);\n searchRef.current.focus();\n }\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchRef.current) {\n searchRef.current.focus();\n }\n }\n }\n },\n [setShowMenu, dropdownRef],\n );\n\n const hasSelection = selectedValue.length >= 1;\n\n return (\n <InputGroup\n label={label}\n id={inputId}\n ref={componentRootElementRef}\n data-testid=\"jkl-combobox\"\n className={clsx(\"jkl-combobox\", className, {\n \"jkl-combobox--invalid\": !!errorLabel || invalid,\n \"jkl-combobox--menu-open\": showMenu,\n \"jkl-combobox--menu-closed\": !showMenu && hasSelection,\n })}\n labelProps={{\n id: labelId,\n ...labelProps,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n density={density}\n render={(inputProps) => (\n <div\n className={clsx(\"jkl-combobox__wrapper\", { \"jkl-combobox__wrapper--active-value\": hasSelection })}\n style={{ width }}\n tabIndex={-1}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div className=\"jkl-combobox__tags\" data-testid=\"jkl-combobox__tags\">\n {selectedValue.map(getComboboxValuePair).map((option) => (\n <Tag\n key={option.value}\n className={`jkl-tag ${marked && \"jkl-tag__marked\"}`}\n data-testid=\"jkl-tag\"\n dismissAction={{\n onClick: (e) => {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n onTagRemove(e, option.value);\n },\n onBlur: handleBlur,\n label: `Fjern ${option.value}`,\n }}\n >\n {hasTagHover ? (\n <Tooltip key={option.value}>\n <TooltipTrigger>\n {\" \"}\n <span aria-hidden=\"true\" data-testid=\"jkl-tag__content\">\n {option.tagLabel ? option.tagLabel : option.label}\n </span>\n </TooltipTrigger>\n <TooltipContent>{option.label}</TooltipContent>\n </Tooltip>\n ) : (\n <span aria-hidden=\"true\" data-testid=\"jkl-tag__content\">\n {option.tagLabel ? option.tagLabel : option.label}\n </span>\n )}\n </Tag>\n ))}\n <input\n {...inputProps}\n className=\"jkl-combobox__search-input\"\n onChange={onSearch}\n data-testid=\"jkl-combobox__search-input\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleSearchOnKeyDown}\n value={searchValue}\n ref={searchRef}\n aria-controls={listId}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={showMenu}\n placeholder={selectedValue.length > 0 ? \"\" : placeholder}\n autoComplete=\"off\"\n />\n </div>\n\n <div\n className=\"jkl-combobox__menu\"\n role=\"listbox\"\n ref={dropdownRef}\n id={listId}\n aria-labelledby={labelId}\n aria-multiselectable=\"true\"\n aria-activedescendant={activeDescendant}\n onFocus={handleFocus}\n onBlur={handleBlur}\n tabIndex={-1}\n >\n {options.map((option, i) => (\n <button\n key={`${listId}-${option.value}`}\n type=\"button\"\n id={`${listId}__${option.value}`}\n aria-selected={isSelected(option)}\n role=\"option\"\n value={option.value}\n onBlur={handleBlur}\n className={`jkl-combobox__option ${\n isSelected(option) && \"jkl-combobox__option--selected\"\n }`}\n data-testid=\"jkl-combobox__option\"\n data-testautoid={`jkl-combobox__option-${i}`}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n setActiveDescendant(`${listId}__${option.value}`); // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#required_javascript_features\n e.stopPropagation();\n onItemClick(option.value);\n setSearchValue(\"\");\n }}\n onMouseOver={handleMouseOver}\n >\n {option.description ? (\n <span>\n {option.label}\n <span className=\"jkl-combobox__option-description\">{option.description}</span>\n </span>\n ) : (\n option.label\n )}\n {isSelected(option) ? (\n <span>\n <CheckIcon />{\" \"}\n </span>\n ) : null}\n </button>\n ))}\n {noResults && <div className=\"jkl-combobox__no-option\">{noMatchingOption}</div>}\n </div>\n <div className=\"jkl-combobox__actions\">\n <IconButton\n id={buttonId}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className=\"jkl-combobox__button\"\n data-testid=\"jkl-combobox__button\"\n aria-label={`${selectedValue.map((value) => value.label) || \"Velg\"},${label}`}\n aria-expanded={showMenu}\n aria-controls={listId}\n role=\"button\"\n onClick={() => setShowMenu(true)}\n onMouseDown={(e) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n <ArrowVerticalAnimated pointingDown={isPointingDown} />\n </IconButton>\n </div>\n </div>\n )}\n />\n );\n};\nCombobox.displayName = \"Combobox\";\n"],"names":["getComboboxValuePair","item","value","label","Combobox","id","placeholder","items","onChange","onFocus","onBlur","noMatchingOption","labelProps","helpLabel","errorLabel","width","density","name","className","invalid","hasTagHover","listId","useId","generateSuffix","labelId","buttonId","inputId","selectedValue","setSelectedValue","useState","isPointingDown","setIsPointingDown","showMenu","setShowMenu","searchValue","setSearchValue","noResults","setNoResults","marked","setMarked","searchRef","useRef","inputRef","focusInsideRef","useEffect","current","focus","prev","isSelected","option","some","removeOption","useCallback","filter","onTagRemove","e","newValue","type","target","selectedOptions","stopPropagation","length","onItemClick","find","i","_a","onSearch","options","useMemo","filteredOptions","toLowerCase","indexOf","activeDescendant","setActiveDescendant","_b","handleEscape","key","window","addEventListener","removeEventListener","handleFocusPlacement","isOpen","handleFocus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","useListNavigation","ref","componentRootElementRef","handleBlur","componentRootElement","contains","relatedTarget","dispatchEvent","Event","bubbles","handleMouseOver","preventScroll","handleSearchOnKeyDown","preventDefault","listElement","querySelector","metaKey","ctrlKey","updatedSelectedValue","map","isMarked","handleOptionOnKeyDown","shiftKey","firstVisible","currentTarget","hasSelection","jsx","InputGroup","clsx","render","inputProps","jsxs","style","tabIndex","children","Tag","dismissAction","onClick","Tooltip","TooltipTrigger","tagLabel","TooltipContent","onKeyDown","role","autoComplete","onMouseOver","description","CheckIcon","IconButton","onMouseDown","ArrowVerticalAnimated","pointingDown","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),t=require("../../hooks/usePreviousValue/usePreviousValue.js");require("../../hooks/useScreen/useScreen.js"),require("../../hooks/useId/useId.js");const n=require("./CookieConsentContext.js"),s=require("./CookieConsentModal.js"),i=require("./cookieConsentUtils.js");exports.CookieConsent=({blocking:r,onAccept:u,...a})=>{const{dispatch:c,consent:l,cookieName:d,cookieDomain:C}=n.useCookieConsentState(),k=t.usePreviousValue(l);if(o.useEffect((()=>{u&&l!==k&&u(l)}),[u,l,k]),typeof navigator<"u"&&!navigator.cookieEnabled)return u&&u({functional:"denied",marketing:"denied",statistics:"denied"}),null;return r?e.jsx(s.CookieConsentModal,{...a,onAccept:e=>{const o=Object.fromEntries(Object.entries(e).filter((([,e])=>null!=e))),t={...l,...o};c({type:"UPDATE_CONSENT",payload:t}),c({type:"SET_SHOW_CONSENT",payload:!1}),i.setConsentCookie({consent:t,name:d,domain:C})}}):null};
|
|
2
|
+
//# sourceMappingURL=CookieConsent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { usePreviousValue } from \"../../hooks\";\nimport { useCookieConsentState } from \"./CookieConsentContext\";\nimport { CookieConsentModal } from \"./CookieConsentModal\";\nimport { setConsentCookie } from \"./cookieConsentUtils\";\nimport { AcceptConsentCallback, Consent } from \"./types\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({ blocking, onAccept, ...rest }: CookieConsentProps): JSX.Element | null => {\n const { dispatch, consent, cookieName, cookieDomain } = useCookieConsentState();\n const prevConsent = usePreviousValue(consent);\n\n useEffect(() => {\n if (onAccept) {\n // Prevent onAccept from being triggered every time state changes\\\n if (consent !== prevConsent) {\n onAccept(consent);\n }\n }\n }, [onAccept, consent, prevConsent]);\n\n // Cookies are disabled in the browser\n if (typeof navigator !== \"undefined\" && !navigator.cookieEnabled) {\n if (onAccept) {\n onAccept({\n functional: \"denied\",\n marketing: \"denied\",\n statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const handleAccept = (newConsent: Partial<Consent>) => {\n // Filter out null values from the new consent\n const newConsentWithoutNullValues = Object.fromEntries(\n Object.entries(newConsent).filter(([, value]) => value != null),\n );\n\n // Merge the existing consent with the new consent\n const updatedConsent: Consent = {\n ...consent,\n ...newConsentWithoutNullValues,\n };\n\n dispatch({ type: \"UPDATE_CONSENT\", payload: updatedConsent });\n dispatch({ type: \"SET_SHOW_CONSENT\", payload: false });\n setConsentCookie({ consent: updatedConsent, name: cookieName, domain: cookieDomain });\n };\n\n // This returns different variants of consents based on the behavior required to get the consent\n // Blocking implies a blocking modal demanding an active action before the user can interact with the application\n if (blocking) {\n return <CookieConsentModal {...rest} onAccept={handleAccept} />;\n }\n\n return null;\n};\n"],"names":["blocking","onAccept","rest","dispatch","consent","cookieName","cookieDomain","useCookieConsentState","prevConsent","usePreviousValue","useEffect","navigator","cookieEnabled","functional","marketing","statistics","jsx","CookieConsentModal","newConsent","newConsentWithoutNullValues","Object","fromEntries","entries","filter","value","updatedConsent","type","payload","setConsentCookie","name","domain"],"mappings":"uaAY6B,EAAGA,SAAAA,EAAUC,SAAAA,KAAaC,MACnD,MAAQC,SAAAA,EAAUC,QAAAA,EAASC,WAAAA,EAAYC,aAAAA,GAAiBC,EAAAA,wBAClDC,EAAcC,mBAAiBL,GAYrC,GAVAM,EAAAA,WAAU,KACFT,GAEIG,IAAYI,GACZP,EAASG,EAAO,GAGzB,CAACH,EAAUG,EAASI,WAGZG,UAAc,MAAgBA,UAAUC,cAC/C,OAAIX,GACSA,EAAA,CACLY,WAAY,SACZC,UAAW,SACXC,WAAY,WAIb,KAsBX,OAAIf,EACQgB,EAAAA,IAAAC,EAAAA,mBAAA,IAAuBf,EAAMD,SApBnBiB,IAElB,MAAMC,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQJ,GAAYK,QAAO,GAAIC,KAAoB,MAATA,KAI/CC,EAA0B,IACzBrB,KACAe,GAGPhB,EAAS,CAAEuB,KAAM,iBAAkBC,QAASF,IAC5CtB,EAAS,CAAEuB,KAAM,mBAAoBC,SAAS,IAC9CC,mBAAiB,CAAExB,QAASqB,EAAgBI,KAAMxB,EAAYyB,OAAQxB,GAAc,IASjF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),o=require("./cookieConsentUtils.js"),n="fremtind-cookie-consent",s=t.createContext(void 0),i=(e,t)=>{switch(t.type){case"SET_SHOW_CONSENT":return{...e,isOpen:t.payload};case"SET_SHOW_SETTINGS":return{...e,showSettings:t.payload};case"UPDATE_CONSENT":return{...e,consent:{...e.consent,...t.payload}};case"UPDATE_REQUIREMENTS":return{...e,requirement:{...e.requirement,...t.payload}};default:throw new Error(`Unhandled action type: ${t.type}`)}};exports.CookieConsentProvider=({children:a,cookieAdapter:r,marketing:c,functional:u,statistics:d,cookieName:p=n,cookieDomain:S})=>{const l=t.useMemo((()=>o.getConsentCookie({adapter:r,name:p})??{marketing:null,functional:null,statistics:null}),[r,p]),C=t.useMemo((()=>o.buildRequirementsObject({marketing:c,functional:u,statistics:d})),[c,u,d]),[E,T]=t.useReducer(i,{isOpen:!1,showSettings:!1,requirement:C,consent:l});t.useEffect((()=>{o.shouldShowConsentDialog(C,l)?T({type:"SET_SHOW_CONSENT",payload:!0}):l&&T({type:"UPDATE_CONSENT",payload:l})}),[C,l]);const m={state:E,dispatch:T,cookieName:p,cookieDomain:S};return e.jsx(s.Provider,{value:m,children:a})},exports.DEFAULT_COOKIE_NAME=n,exports.useCookieConsent=()=>{const e=t.useContext(s);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModalWithSettings:()=>{e.dispatch({type:"SET_SHOW_CONSENT",payload:!0}),e.dispatch({type:"SET_SHOW_SETTINGS",payload:!0})},openConsentModalWithDefaults:()=>{e.dispatch({type:"SET_SHOW_CONSENT",payload:!0}),e.dispatch({type:"SET_SHOW_SETTINGS",payload:!1})},consents:e.state.consent}},exports.useCookieConsentState=()=>{const e=t.useContext(s);if(void 0===e)throw new Error("useCookieConsentState must be used within a CookieConsentProvider");return{dispatch:e.dispatch,cookieName:e.cookieName,cookieDomain:e.cookieDomain,...e.state}};
|
|
2
|
+
//# sourceMappingURL=CookieConsentContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { WithChildren } from \"../..\";\nimport { shouldShowConsentDialog, getConsentCookie, buildRequirementsObject } from \"./cookieConsentUtils\";\nimport type { Consent, ConsentRequirement } from \"./types\";\n\n// https://kentcdodds.com/blog/how-to-use-react-context-effectively\n\ninterface SetShowConsentAction {\n type: \"SET_SHOW_CONSENT\";\n payload: boolean;\n}\n\ninterface SetShowSettingsAction {\n type: \"SET_SHOW_SETTINGS\";\n payload: boolean;\n}\n\ninterface UpdateConsentAction {\n type: \"UPDATE_CONSENT\";\n payload: Consent;\n}\n\ninterface UpdateRequirementsAction {\n type: \"UPDATE_REQUIREMENTS\";\n payload: ConsentRequirement;\n}\n\ntype Action = SetShowConsentAction | UpdateConsentAction | SetShowSettingsAction | UpdateRequirementsAction;\ntype Dispatch = (action: Action) => void;\n\ninterface State {\n isOpen: boolean;\n showSettings: boolean;\n requirement: ConsentRequirement;\n consent: Consent;\n}\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst CookieConsentContext = React.createContext<\n { state: State; dispatch: Dispatch; cookieName: string; cookieDomain?: string } | undefined\n>(undefined);\n\nconst cookieConsentReducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"SET_SHOW_CONSENT\":\n return { ...state, isOpen: action.payload };\n\n case \"SET_SHOW_SETTINGS\":\n return {\n ...state,\n showSettings: action.payload,\n };\n\n case \"UPDATE_CONSENT\":\n return {\n ...state,\n consent: {\n ...state.consent,\n ...action.payload,\n },\n };\n\n case \"UPDATE_REQUIREMENTS\":\n return {\n ...state,\n requirement: {\n ...state.requirement,\n ...action.payload,\n },\n };\n\n default: {\n // @ts-ignore Denne skal ikke oppstå, men den _kan_ oppstå\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n }\n};\n\nexport interface CookieConsentProviderProps extends Partial<ConsentRequirement>, WithChildren {\n cookieAdapter?: () => Consent | undefined;\n cookieName?: string;\n cookieDomain?: string;\n}\n\nconst CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n marketing,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n}) => {\n // Load existing consent at initial render\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n marketing: null,\n functional: null,\n statistics: null,\n }\n );\n }, [cookieAdapter, cookieName]);\n\n const requirement = useMemo(\n () => buildRequirementsObject({ marketing, functional, statistics }),\n [marketing, functional, statistics],\n );\n\n const [state, dispatch] = React.useReducer(cookieConsentReducer, {\n isOpen: false,\n showSettings: false,\n requirement,\n consent: consentCookie,\n });\n\n useEffect(() => {\n if (shouldShowConsentDialog(requirement, consentCookie)) {\n dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n } else if (consentCookie) {\n dispatch({ type: \"UPDATE_CONSENT\", payload: consentCookie });\n }\n }, [requirement, consentCookie]);\n\n const value = { state, dispatch, cookieName, cookieDomain };\n return <CookieConsentContext.Provider value={value}>{children}</CookieConsentContext.Provider>;\n};\n\ninterface UseCookieConsentState extends State {\n dispatch: Dispatch;\n cookieName: string;\n cookieDomain?: string;\n}\n\n// control and state for internal use\nconst useCookieConsentState = (): UseCookieConsentState => {\n const context = React.useContext(CookieConsentContext);\n if (context === undefined) {\n throw new Error(\"useCookieConsentState must be used within a CookieConsentProvider\");\n }\n\n return {\n dispatch: context.dispatch,\n cookieName: context.cookieName,\n cookieDomain: context.cookieDomain,\n ...context.state,\n };\n};\n\ntype UseCookieConsent = {\n openConsentModalWithSettings: () => void;\n openConsentModalWithDefaults: () => void;\n /** Se hvilke samtykker som er gitt, om du for eksempel trenger styre UI basert på samtykker. */\n consents: Consent;\n};\n\n// expose functionality to be used by consumers\nconst useCookieConsent = (): UseCookieConsent => {\n const context = React.useContext(CookieConsentContext);\n if (context === undefined) {\n throw new Error(\"useCookieConsent must be used within a CookieConsentProvider\");\n }\n\n const openConsentModalWithSettings = () => {\n context.dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n context.dispatch({ type: \"SET_SHOW_SETTINGS\", payload: true });\n };\n\n const openConsentModalWithDefaults = () => {\n context.dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n context.dispatch({ type: \"SET_SHOW_SETTINGS\", payload: false });\n };\n\n const consents = context.state.consent;\n\n return { openConsentModalWithSettings, openConsentModalWithDefaults, consents };\n};\n\nexport { CookieConsentProvider, useCookieConsentState, useCookieConsent };\n"],"names":["DEFAULT_COOKIE_NAME","CookieConsentContext","React","createContext","cookieConsentReducer","state","action","type","isOpen","payload","showSettings","consent","requirement","Error","children","cookieAdapter","marketing","functional","statistics","cookieName","cookieDomain","consentCookie","useMemo","getConsentCookie","adapter","name","buildRequirementsObject","dispatch","useReducer","useEffect","shouldShowConsentDialog","value","jsx","Provider","context","useContext","openConsentModalWithSettings","openConsentModalWithDefaults","consents"],"mappings":"6KAqCaA,EAAsB,0BAE7BC,EAAuBC,EAAMC,mBAEjC,GAEIC,EAAuB,CAACC,EAAcC,KACxC,OAAQA,EAAOC,MACX,IAAK,mBACD,MAAO,IAAKF,EAAOG,OAAQF,EAAOG,SAEtC,IAAK,oBACM,MAAA,IACAJ,EACHK,aAAcJ,EAAOG,SAG7B,IAAK,iBACM,MAAA,IACAJ,EACHM,QAAS,IACFN,EAAMM,WACNL,EAAOG,UAItB,IAAK,sBACM,MAAA,IACAJ,EACHO,YAAa,IACNP,EAAMO,eACNN,EAAOG,UAItB,QAEI,MAAM,IAAII,MAAM,0BAA0BP,EAAOC,QAEzD,gCASgE,EAChEO,SAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAanB,EACboB,aAAAA,MAGM,MAAAC,EAAgBC,EAAAA,SAAQ,IAEtBC,EAAAA,iBAAiB,CAAEC,QAAST,EAAeU,KAAMN,KAAiB,CAC9DH,UAAW,KACXC,WAAY,KACZC,WAAY,OAGrB,CAACH,EAAeI,IAEbP,EAAcU,EAAAA,SAChB,IAAMI,EAAwBA,wBAAA,CAAEV,UAAAA,EAAWC,WAAAA,EAAYC,WAAAA,KACvD,CAACF,EAAWC,EAAYC,KAGrBb,EAAOsB,GAAYzB,EAAM0B,WAAWxB,EAAsB,CAC7DI,QAAQ,EACRE,cAAc,EACdE,YAAAA,EACAD,QAASU,IAGbQ,EAAAA,WAAU,KACFC,EAAAA,wBAAwBlB,EAAaS,GACrCM,EAAS,CAAEpB,KAAM,mBAAoBE,SAAS,IACvCY,GACPM,EAAS,CAAEpB,KAAM,iBAAkBE,QAASY,GAAe,GAEhE,CAACT,EAAaS,IAEjB,MAAMU,EAAQ,CAAE1B,MAAAA,EAAOsB,SAAAA,EAAUR,WAAAA,EAAYC,aAAAA,GAC7C,OAAQY,EAAAA,IAAA/B,EAAqBgC,SAArB,CAA8BF,MAAAA,EAAejB,SAAAA,GAAS,yDAgCzC,KACf,MAAAoB,EAAUhC,EAAMiC,WAAWlC,GACjC,QAAgB,IAAZiC,EACM,MAAA,IAAIrB,MAAM,gEAeb,MAAA,CAAEuB,6BAZ4B,KACjCF,EAAQP,SAAS,CAAEpB,KAAM,mBAAoBE,SAAS,IACtDyB,EAAQP,SAAS,CAAEpB,KAAM,oBAAqBE,SAAS,GAAM,EAU1B4B,6BAPF,KACjCH,EAAQP,SAAS,CAAEpB,KAAM,mBAAoBE,SAAS,IACtDyB,EAAQP,SAAS,CAAEpB,KAAM,oBAAqBE,SAAS,GAAO,EAKG6B,SAFpDJ,EAAQ7B,MAAMM,wCAtCL,KACpB,MAAAuB,EAAUhC,EAAMiC,WAAWlC,GACjC,QAAgB,IAAZiC,EACM,MAAA,IAAIrB,MAAM,qEAGb,MAAA,CACHc,SAAUO,EAAQP,SAClBR,WAAYe,EAAQf,WACpBC,aAAcc,EAAQd,gBACnBc,EAAQ7B,MAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),s=require("react-dom");require("../../hooks/useScreen/useScreen.js");const t=require("../../hooks/useId/useId.js"),n=require("../modal/Modal.js"),r=require("../modal/useModal.js"),a=require("./consents/CustomConsents.js"),i=require("./consents/DefaultConsents.js"),l=require("./CookieConsentContext.js"),u=require("./cookieConsentUtils.js");exports.CookieConsentModal=({onAccept:c,...d})=>{const{isOpen:C,requirement:j,showSettings:m}=l.useCookieConsentState(),k=o.useCallback((e=>{c("implicit"===e?u.convertBooleanConsentObjectToConsentObject(j):e)}),[c,j]),[q,p]=r.useModal({id:t.useId("jkl-cookie-modal"),role:"alertdialog",title:"Informasjonskapsler"});return o.useEffect((()=>{q&&(C?q.show():q.hide())}),[q,C]),typeof document>"u"?null:s.createPortal(e.jsxs(n.ModalContainer,{...d,...p.container,"data-testautoid":"jkl-cookie-consent-modal",children:[e.jsx(n.ModalOverlay,{...p.overlay}),m?e.jsx(a.CustomConsents,{modalConfig:p,handleAccept:k}):e.jsx(i.DefaultConsents,{modalConfig:p,handleAccept:k})]}),document.body)};
|
|
2
|
+
//# sourceMappingURL=CookieConsentModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CookieConsentModal.js","sources":["../../../../src/components/cookie-consent/CookieConsentModal.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { useId } from \"../../hooks\";\nimport { ModalContainer, ModalOverlay, useModal } from \"../modal\";\nimport { CustomConsents } from \"./consents/CustomConsents\";\nimport { DefaultConsents } from \"./consents/DefaultConsents\";\nimport { useCookieConsentState } from \"./CookieConsentContext\";\nimport { convertBooleanConsentObjectToConsentObject } from \"./cookieConsentUtils\";\nimport { Consent, ConsentComponentBaseProps } from \"./types\";\n\nexport const CookieConsentModal: FC<ConsentComponentBaseProps> = ({ onAccept, ...rest }) => {\n const { isOpen, requirement, showSettings } = useCookieConsentState();\n\n const handleAccept = useCallback(\n (v: Consent | \"implicit\") => {\n if (v === \"implicit\") {\n onAccept(convertBooleanConsentObjectToConsentObject(requirement));\n } else {\n onAccept(v);\n }\n },\n [onAccept, requirement],\n );\n\n const [instance, modalConfig] = useModal({\n id: useId(\"jkl-cookie-modal\"),\n // The optional `role` attribute of the dialog element, either `dialog`\n // (default) or `alertdialog` to make it a modal (preventing closing on\n // click outside of ESC key).\n role: \"alertdialog\",\n // The required dialog title, mandatory in the document\n // to provide context to assistive technology.\n title: \"Informasjonskapsler\",\n });\n\n useEffect(() => {\n if (!instance) {\n return;\n }\n if (isOpen) {\n instance.show();\n } else {\n instance.hide();\n }\n }, [instance, isOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\n\n return ReactDOM.createPortal(\n <ModalContainer {...rest} {...modalConfig.container} data-testautoid=\"jkl-cookie-consent-modal\">\n <ModalOverlay {...modalConfig.overlay} />\n {showSettings ? (\n <CustomConsents modalConfig={modalConfig} handleAccept={handleAccept} />\n ) : (\n <DefaultConsents modalConfig={modalConfig} handleAccept={handleAccept} />\n )}\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["onAccept","rest","isOpen","requirement","showSettings","useCookieConsentState","handleAccept","useCallback","v","convertBooleanConsentObjectToConsentObject","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","document","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","CustomConsents","DefaultConsents","body"],"mappings":"wfAUiE,EAAGA,SAAAA,KAAaC,MAC7E,MAAQC,OAAAA,EAAQC,YAAAA,EAAaC,aAAAA,GAAiBC,EAAsBA,wBAE9DC,EAAeC,EAAAA,aAChBC,IAEgBR,EADH,aAANQ,EACSC,EAAAA,2CAA2CN,GAE3CK,EAFuD,GAKxE,CAACR,EAAUG,KAGRO,EAAUC,GAAeC,WAAS,CACrCC,GAAIC,QAAM,oBAIVC,KAAM,cAGNC,MAAO,wBAcP,OAXJC,EAAAA,WAAU,KACDP,IAGDR,EACAQ,EAASQ,OAETR,EAASS,OAAK,GAEnB,CAACT,EAAUR,WAEHkB,SAAa,IACb,KAGJC,EAASC,aACZC,OAACC,EAAAA,mBAAmBvB,KAAUU,EAAYc,UAAW,kBAAgB,2BACjEC,SAAA,CAACC,EAAAA,IAAAC,EAAAA,aAAA,IAAiBjB,EAAYkB,UAC7BzB,QACI0B,iBAAe,CAAAnB,YAAAA,EAA0BL,aAAAA,IAE1CqB,EAAAA,IAACI,EAAgBA,gBAAA,CAAApB,YAAAA,EAA0BL,aAAAA,OAGnDc,SAASY,KAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),n=require("../../button/Button.js"),s=require("../../list/List.js"),r=require("../../list/ListItem.js"),i=require("../../modal/Modal.js");require("react-a11y-dialog"),require("../../../hooks/useScreen/useScreen.js"),require("../../../hooks/useId/useId.js");const o=require("../CookieConsentContext.js"),a=require("../cookieConsentUtils.js"),l=require("./RequirementCheckbox.js");exports.CustomConsents=({modalConfig:d,handleAccept:c})=>{const{consent:k,requirement:u}=o.useCookieConsentState(),m=t.useCallback((e=>{e.preventDefault();const t={},n=Object.entries(u).map((([e,t])=>t?e:void 0)).filter(Boolean),s=new FormData(e.target);n.forEach((e=>{t[e]="True"===s.get(e)})),c(a.convertBooleanConsentObjectToConsentObject(t))}),[c,u]);return e.jsxs(i.Modal,{component:"form",...d.modal,onSubmit:m,children:[e.jsx(i.ModalHeader,{children:e.jsx(i.ModalTitle,{...d.title,children:"Informasjonskapsler"})}),e.jsxs(i.ModalBody,{children:[e.jsx(s.UnorderedList,{className:"jkl-cookie-consent-modal__checklist",children:e.jsx(r.CheckListItem,{children:"Nettsidene skal fungere teknisk"})}),e.jsx("p",{className:"jkl-cookie-consent-modal__info-text",children:"For at nettsidene skal fungere, må vi bruke tekniske informasjonskapsler. Denne kan derfor ikke slås av."}),u.functional&&e.jsx(l.RequirementCheckbox,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===k.functional,children:"Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg."}),u.statistics&&e.jsx(l.RequirementCheckbox,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===k.statistics,children:"Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir brukt, slik at vi kan gjøre dem bedre og enklere å bruke."}),u.marketing&&e.jsx(l.RequirementCheckbox,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===k.marketing,children:"Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier."})]}),e.jsx(i.ModalActions,{children:e.jsx(n.PrimaryButton,{"data-testid":"jkl-cookie-consent-godta",children:"Godta"})})]})};
|
|
2
|
+
//# sourceMappingURL=CustomConsents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomConsents.js","sources":["../../../../../src/components/cookie-consent/consents/CustomConsents.tsx"],"sourcesContent":["import React, { FC, FormEvent, useCallback } from \"react\";\nimport { PrimaryButton } from \"../../button\";\nimport { CheckListItem, UnorderedList } from \"../../list\";\nimport { Modal, ModalActions, ModalBody, ModalConfig, ModalHeader, ModalTitle } from \"../../modal\";\nimport { useCookieConsentState } from \"../CookieConsentContext\";\nimport { convertBooleanConsentObjectToConsentObject } from \"../cookieConsentUtils\";\nimport { Consent } from \"../types\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox\";\n\ntype Props = {\n modalConfig: ModalConfig;\n handleAccept: (v: Consent | \"implicit\") => void;\n};\n\nexport const CustomConsents: FC<Props> = ({ modalConfig, handleAccept }) => {\n const { consent, requirement } = useCookieConsentState();\n\n const onSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formValues: Partial<Record<keyof Consent, boolean>> = {};\n const requiredFormNames = Object.entries(requirement)\n .map(([name, required]) => (required ? name : undefined))\n .filter(Boolean) as Array<keyof Consent>;\n\n const formData = new FormData(event.target as HTMLFormElement);\n requiredFormNames.forEach((name) => {\n formValues[name] = formData.get(name) === \"True\";\n });\n\n handleAccept(convertBooleanConsentObjectToConsentObject(formValues));\n },\n [handleAccept, requirement],\n );\n\n return (\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>Informasjonskapsler</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <UnorderedList className=\"jkl-cookie-consent-modal__checklist\">\n <CheckListItem>Nettsidene skal fungere teknisk</CheckListItem>\n </UnorderedList>\n <p className=\"jkl-cookie-consent-modal__info-text\">\n For at nettsidene skal fungere, må vi bruke tekniske informasjonskapsler. Denne kan derfor ikke slås\n av.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={consent.functional === \"accepted\"}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke\n innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg.\n </RequirementCheckbox>\n )}\n\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={consent.statistics === \"accepted\"}\n >\n Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir\n brukt, slik at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={consent.marketing === \"accepted\"}\n >\n Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <PrimaryButton data-testid=\"jkl-cookie-consent-godta\">Godta</PrimaryButton>\n </ModalActions>\n </Modal>\n );\n};\n"],"names":["modalConfig","handleAccept","consent","requirement","useCookieConsentState","onSubmit","useCallback","event","preventDefault","formValues","requiredFormNames","Object","entries","map","name","required","filter","Boolean","formData","FormData","target","forEach","get","convertBooleanConsentObjectToConsentObject","jsxs","Modal","component","modal","children","jsx","ModalHeader","ModalTitle","title","ModalBody","UnorderedList","className","CheckListItem","functional","RequirementCheckbox","label","defaultChecked","statistics","marketing","ModalActions","PrimaryButton"],"mappings":"0hBAcyC,EAAGA,YAAAA,EAAaC,aAAAA,MACrD,MAAQC,QAAAA,EAASC,YAAAA,GAAgBC,EAAsBA,wBAEjDC,EAAWC,EAAAA,aACZC,IACGA,EAAMC,iBAEN,MAAMC,EAAsD,CAAA,EACtDC,EAAoBC,OAAOC,QAAQT,GACpCU,KAAI,EAAEC,EAAMC,KAAeA,EAAWD,OAAO,IAC7CE,OAAOC,SAENC,EAAW,IAAIC,SAASZ,EAAMa,QAClBV,EAAAW,SAASP,IACvBL,EAAWK,GAA+B,SAAvBI,EAASI,IAAIR,EAAU,IAGjCb,EAAAsB,EAAAA,2CAA2Cd,GAAW,GAEvE,CAACR,EAAcE,IAIf,OAAAqB,OAACC,EAAAA,MAAM,CAAAC,UAAU,UAAW1B,EAAY2B,MAAatB,SAAAA,EACjDuB,SAAA,CAAAC,EAAAA,IAACC,eACGF,SAACC,EAAAA,IAAAE,EAAAA,WAAA,IAAe/B,EAAYgC,MAAOJ,0CAEtCK,EAAAA,UACG,CAAAL,SAAA,CAAAC,EAAAA,IAACK,iBAAcC,UAAU,sCACrBP,SAACC,MAAAO,EAAAA,cAAA,CAAcR,+CAElBC,EAAAA,IAAA,IAAA,CAAEM,UAAU,sCAAsCP,SAGnD,6GACCzB,EAAYkC,YACTR,EAAAA,IAACS,EAAAA,oBAAA,CACGxB,KAAK,aACLyB,MAAM,sBACNC,eAAuC,aAAvBtC,EAAQmC,WAC3BT,SAAA,yKAMJzB,EAAYsC,YACTZ,EAAAA,IAACS,EAAAA,oBAAA,CACGxB,KAAK,aACLyB,MAAM,oBACNC,eAAuC,aAAvBtC,EAAQuC,WAC3Bb,SAAA,0JAMJzB,EAAYuC,WACTb,EAAAA,IAACS,EAAAA,oBAAA,CACGxB,KAAK,YACLyB,MAAM,iCACNC,eAAsC,aAAtBtC,EAAQwC,UAC3Bd,SAAA,iLAMRe,EACGA,aAAA,CAAAf,SAAAC,EAAAA,IAACe,iBAAc,cAAY,2BAA2BhB,uBAE9D"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),s=require("../../button/Button.js"),i=require("../../list/List.js"),n=require("../../list/ListItem.js"),r=require("../../modal/Modal.js");require("react-a11y-dialog"),require("../../../hooks/useScreen/useScreen.js"),require("../../../hooks/useId/useId.js");const o=require("../CookieConsentContext.js");exports.DefaultConsents=({modalConfig:l,handleAccept:a})=>{const{dispatch:d,requirement:c}=o.useCookieConsentState(),u=t.useCallback((e=>{e.preventDefault(),a("implicit")}),[a]);return e.jsxs(r.Modal,{component:"form",...l.modal,onSubmit:u,children:[e.jsx(r.ModalHeader,{children:e.jsx(r.ModalTitle,{...l.title,children:"Vi bruker informasjonskapsler slik at:"})}),e.jsx(r.ModalBody,{children:e.jsxs(i.UnorderedList,{className:"jkl-cookie-consent-modal__checklist",children:[e.jsx(n.CheckListItem,{children:"Nettsidene skal fungere teknisk"}),c.functional&&e.jsx(n.CheckListItem,{children:"Nettsidene skal tilpasses din bruk, dine valg og dine innstillinger."}),c.statistics&&e.jsx(n.CheckListItem,{children:"Vi kan samle statistikk på hvordan nettsidene brukes og dermed kunne forbedre tjenestene våre."}),c.marketing&&e.jsx(n.CheckListItem,{children:"Vi kan gi deg personlig tilpasset innhold og relevante annonser, også gjennom våre samarbeidspartnere, på for eksempel nettsider og i sosiale medier."})]})}),e.jsxs(r.ModalActions,{children:[e.jsx(s.PrimaryButton,{"data-testid":"jkl-cookie-consent-godta",...l.closeButton,type:"submit",children:"Godta"}),e.jsx(s.TertiaryButton,{type:"button",onClick:()=>{d({type:"SET_SHOW_SETTINGS",payload:!0})},children:"Innstillinger"})]})]})};
|
|
2
|
+
//# sourceMappingURL=DefaultConsents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultConsents.js","sources":["../../../../../src/components/cookie-consent/consents/DefaultConsents.tsx"],"sourcesContent":["import React, { FC, FormEvent, useCallback } from \"react\";\nimport { PrimaryButton, TertiaryButton } from \"../../button\";\nimport { CheckListItem, UnorderedList } from \"../../list\";\nimport { Modal, ModalActions, ModalBody, type ModalConfig, ModalHeader, ModalTitle } from \"../../modal\";\nimport { useCookieConsentState } from \"../CookieConsentContext\";\nimport { Consent } from \"../types\";\n\ntype Props = {\n modalConfig: ModalConfig;\n handleAccept: (v: Consent | \"implicit\") => void;\n};\n\nexport const DefaultConsents: FC<Props> = ({ modalConfig, handleAccept }) => {\n const { dispatch, requirement } = useCookieConsentState();\n\n const onSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleAccept(\"implicit\");\n },\n [handleAccept],\n );\n\n return (\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>Vi bruker informasjonskapsler slik at:</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <UnorderedList className=\"jkl-cookie-consent-modal__checklist\">\n <CheckListItem>Nettsidene skal fungere teknisk</CheckListItem>\n {requirement.functional && (\n <CheckListItem>\n Nettsidene skal tilpasses din bruk, dine valg og dine innstillinger.\n </CheckListItem>\n )}\n {requirement.statistics && (\n <CheckListItem>\n Vi kan samle statistikk på hvordan nettsidene brukes og dermed kunne forbedre tjenestene\n våre.\n </CheckListItem>\n )}\n {requirement.marketing && (\n <CheckListItem>\n Vi kan gi deg personlig tilpasset innhold og relevante annonser, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider og i sosiale medier.\n </CheckListItem>\n )}\n </UnorderedList>\n </ModalBody>\n <ModalActions>\n <PrimaryButton data-testid=\"jkl-cookie-consent-godta\" {...modalConfig.closeButton} type={\"submit\"}>\n Godta\n </PrimaryButton>\n\n <TertiaryButton\n type=\"button\"\n onClick={() => {\n dispatch({ type: \"SET_SHOW_SETTINGS\", payload: true });\n }}\n >\n Innstillinger\n </TertiaryButton>\n </ModalActions>\n </Modal>\n );\n};\n"],"names":["modalConfig","handleAccept","dispatch","requirement","useCookieConsentState","onSubmit","useCallback","event","preventDefault","jsxs","Modal","component","modal","children","jsx","ModalHeader","ModalTitle","title","ModalBody","UnorderedList","className","CheckListItem","functional","statistics","marketing","ModalActions","PrimaryButton","closeButton","type","TertiaryButton","onClick","payload"],"mappings":"+cAY0C,EAAGA,YAAAA,EAAaC,aAAAA,MACtD,MAAQC,SAAAA,EAAUC,YAAAA,GAAgBC,EAAsBA,wBAElDC,EAAWC,EAAAA,aACZC,IACGA,EAAMC,iBACNP,EAAa,WAAU,GAE3B,CAACA,IAID,OAAAQ,OAACC,EAAAA,MAAM,CAAAC,UAAU,UAAWX,EAAYY,MAAaP,SAAAA,EACjDQ,SAAA,CAAAC,EAAAA,IAACC,eACGF,SAACC,EAAAA,IAAAE,EAAAA,WAAA,IAAehB,EAAYiB,MAAOJ,sDAEtCC,MAAAI,EAAAA,UAAA,CACGL,SAACJ,EAAAA,KAAAU,EAAAA,cAAA,CAAcC,UAAU,sCACrBP,SAAA,CAAAC,EAAAA,IAACO,iBAAcR,SAA+B,oCAC7CV,EAAYmB,YACRR,EAAAA,IAAAO,EAAAA,cAAA,CAAcR,SAEf,yEAEHV,EAAYoB,YACRT,EAAAA,IAAAO,EAAAA,cAAA,CAAcR,SAGf,mGAEHV,EAAYqB,WACRV,EAAAA,IAAAO,EAAAA,cAAA,CAAcR,SAGf,sKAIXY,EAAAA,aACG,CAAAZ,SAAA,CAACC,EAAAA,IAAAY,EAAAA,cAAA,CAAc,cAAY,8BAA+B1B,EAAY2B,YAAaC,KAAM,SAAUf,SAEnG,UAEAC,EAAAA,IAACe,EAAAA,eAAA,CACGD,KAAK,SACLE,QAAS,KACL5B,EAAS,CAAE0B,KAAM,oBAAqBG,SAAS,GAAM,EAE5DlB,SAAA,uBAIT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("../../checkbox/Checkbox.js");exports.RequirementCheckbox=({defaultChecked:o,name:r,label:t,children:l})=>e.jsxs(e.Fragment,{children:[e.jsx(c.Checkbox,{className:"jkl-cookie-consent-modal__checkbox",value:"True",name:r,defaultChecked:o,children:t}),e.jsx("p",{className:"jkl-cookie-consent-modal__info-text",children:l})]});
|
|
2
|
+
//# sourceMappingURL=RequirementCheckbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequirementCheckbox.js","sources":["../../../../../src/components/cookie-consent/consents/RequirementCheckbox.tsx"],"sourcesContent":["import React from \"react\";\nimport { WithChildren } from \"../../..\";\nimport { Checkbox } from \"../../checkbox\";\n\ninterface RequirementCheckboxProps extends WithChildren {\n defaultChecked: boolean;\n name: \"functional\" | \"marketing\" | \"statistics\";\n label: string;\n}\n\nexport const RequirementCheckbox = ({ defaultChecked, name, label, children }: RequirementCheckboxProps) => {\n return (\n <>\n <Checkbox\n className=\"jkl-cookie-consent-modal__checkbox\"\n value=\"True\"\n name={name}\n defaultChecked={defaultChecked}\n >\n {label}\n </Checkbox>\n <p className=\"jkl-cookie-consent-modal__info-text\">{children}</p>\n </>\n );\n};\n"],"names":["defaultChecked","name","label","children","jsxs","Fragment","jsx","Checkbox","className","value"],"mappings":"yLAUmC,EAAGA,eAAAA,EAAgBC,KAAAA,EAAMC,MAAAA,EAAOC,SAAAA,KAGvDC,EAAAA,KAAAC,WAAA,CAAAF,SAAA,CAAAG,EAAAA,IAACC,EAAAA,SAAA,CACGC,UAAU,qCACVC,MAAM,OACNR,KAAAA,EACAD,eAAAA,EAECG,SAAAD,IAEJI,EAAAA,IAAA,IAAA,CAAEE,UAAU,sCAAuCL,SAAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=e=>{if(e)return"denied"!==e},t=e=>typeof e>"u"?null:!1===e||"false"===String(e).toLowerCase()?"denied":"accepted";exports.buildRequirementsObject=({marketing:e,functional:t,statistics:n})=>({...e&&{marketing:e},...t&&{functional:t},...n&&{statistics:n}}),exports.convertBooleanConsentObjectToConsentObject=e=>{const n=Object.entries({functional:void 0,marketing:void 0,statistics:void 0,...e}).map((([e,n])=>[e,t(n)]));return Object.fromEntries(n)},exports.convertBooleanToConsentValue=t,exports.convertConsentObjectToBooleans=t=>{const n=Object.entries({functional:null,marketing:null,statistics:null,...t}).map((([t,n])=>[t,e(n)]));return Object.fromEntries(n)},exports.convertConsentValueToFormValue=e,exports.getConsentCookie=({adapter:e,name:t})=>{const n=(e=>{if(typeof document>"u")return;const t=document.cookie.split(";").map((e=>e.trim().split("="))).find((t=>t[0]===e));return t||void 0})(t);return n?JSON.parse(n[1]):e?e():void 0},exports.setConsentCookie=({consent:e,maxAge:t=10368e3,name:n,domain:o})=>{document.cookie=[`${n}=${JSON.stringify(e)}`,`max-age=${t}`,"SameSite=Lax",!!o&&`domain=${o}`].filter((e=>e)).join(";")},exports.shouldShowConsentDialog=(e,t)=>{if(t){const n=new Map(Object.entries(t)),o=Object.entries(e);for(const[e,t]of o)if(t&&null===n.get(e))return!0;return!1}return Object.values(e).some((e=>e))};
|
|
2
|
+
//# sourceMappingURL=cookieConsentUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n `SameSite=Lax`,\n !!domain && `domain=${domain}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (requirement: ConsentRequirement, consent: Consent | undefined): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some((requirementValue) => requirementValue);\n } else {\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n }\n};\n\nexport const convertConsentValueToFormValue = (consent: ConsentState): boolean | undefined => {\n if (!consent) {\n return undefined;\n }\n\n if (consent === \"denied\") {\n return false;\n }\n\n return true;\n};\n\nexport const convertConsentObjectToBooleans = (\n consent: Partial<Record<keyof Consent, ConsentState>>,\n): { [k: string]: boolean | undefined } => {\n const defaultConsent = {\n functional: null,\n marketing: null,\n statistics: null,\n };\n\n const consentEntries: Array<[string, boolean | undefined]> = Object.entries({ ...defaultConsent, ...consent }).map(\n ([consentName, value]) => [consentName, convertConsentValueToFormValue(value)],\n );\n return Object.fromEntries(consentEntries);\n};\n\nexport const convertBooleanToConsentValue = (formValue: boolean | undefined): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n): Consent => {\n const defaultObject = {\n functional: undefined,\n marketing: undefined,\n statistics: undefined,\n };\n\n const consentEntries = Object.entries({ ...defaultObject, ...consent }).map(([consentName, value]) => [\n consentName,\n convertBooleanToConsentValue(value),\n ]);\n\n return Object.fromEntries(consentEntries);\n};\n\nexport const buildRequirementsObject = ({ marketing, functional, statistics }: ConsentRequirement) => {\n return {\n ...(marketing && { marketing }),\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["convertConsentValueToFormValue","consent","convertBooleanToConsentValue","formValue","String","toLowerCase","marketing","functional","statistics","consentEntries","Object","entries","map","consentName","value","fromEntries","adapter","name","cookie","document","split","s","trim","find","c","getCookie","JSON","parse","maxAge","domain","stringify","filter","f","join","requirement","consentMap","Map","requirementEntries","required","get","values","some","requirementValue"],"mappings":"gFAEA,MA6FaA,EAAkCC,IAC3C,GAAKA,EAIL,MAAgB,WAAZA,CAAY,EAsBPC,EAAgCC,UAC9BA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,2CAoB4B,EAAGC,UAAAA,EAAWC,WAAAA,EAAYC,WAAAA,UAErDF,GAAa,CAAEA,UAAAA,MACfC,GAAc,CAAEA,WAAAA,MAChBC,GAAc,CAAEA,WAAAA,wDApBxBP,IAQA,MAAMQ,EAAiBC,OAAOC,QAAQ,CALlCJ,gBAAY,EACZD,eAAW,EACXE,gBAAY,KAG6CP,IAAWW,KAAI,EAAEC,EAAaC,KAAW,CAClGD,EACAX,EAA6BY,MAG1B,OAAAJ,OAAOK,YAAYN,EAAc,gFAxCxCR,IAQM,MAAAQ,EAAuDC,OAAOC,QAAQ,CALxEJ,WAAY,KACZD,UAAW,KACXE,WAAY,QAGoFP,IAAWW,KAC3G,EAAEC,EAAaC,KAAW,CAACD,EAAab,EAA+Bc,MAEpE,OAAAJ,OAAOK,YAAYN,EAAc,oEAjGZ,EAC5BO,QAAAA,EACAC,KAAAA,MAKM,MAAAC,EA3BSD,KACX,UAAOE,SAAa,IACb,OAGL,MAAAD,EAASC,SAASD,OAEnBE,MAAM,KAENR,KAAKS,GAAMA,EAAEC,OAAOF,MAAM,OAE1BG,MAAMC,GAAMA,EAAE,KAAOP,IAE1B,OAAKC,QAAL,CAIOA,EAUQO,CAAUR,GAEzB,OAAIC,EACgBQ,KAAKC,MAAMT,EAAO,IAKlCF,EACOA,SADX,CACmB,2BASS,EAC5Bf,QAAAA,EACA2B,OAAAA,EAJoB,QAKpBX,KAAAA,EACAY,OAAAA,MAOAV,SAASD,OAAS,CACd,GAAGD,KAAQS,KAAKI,UAAU7B,KAC1B,WAAW2B,IACX,iBACEC,GAAU,UAAUA,KAErBE,QAAQC,GAAMA,IACdC,KAAK,IAAG,kCAGsB,CAACC,EAAiCjC,KACrE,GAAKA,EAGE,CAEH,MAAMkC,EAAa,IAAIC,IAAI1B,OAAOC,QAAQV,IAGpCoC,EAAqB3B,OAAOC,QAAQuB,GAE1C,IAAW,MAACjB,EAAMqB,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBH,EAAWI,IAAItB,GACR,OAAA,EAIR,OAAA,CACX,QArBWP,OAAO8B,OAAON,GAAaO,MAAMC,GAAqBA,GAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./CookieConsent.js"),o=require("./CookieConsentContext.js");exports.CookieConsent=e.CookieConsent,exports.CookieConsentProvider=o.CookieConsentProvider,exports.useCookieConsent=o.useCookieConsent;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("classnames"),n=require("date-fns/startOfDay"),o=require("react"),i=require("react-dom"),s=require("../../hooks/useAnimatedHeight/useAnimatedHeight.js");require("../../hooks/useScreen/useScreen.js");const t=require("../../hooks/useClickOutside/useClickOutside.js"),a=require("../../hooks/useFocusOutside/useFocusOutside.js");require("../../hooks/useId/useId.js");const u=require("../../hooks/useKeyListener/useKeyListener.js");require("../icon/Icon.js"),require("../icon/icons/animated/ArrowVerticalAnimated.js"),require("../icon/icons/animated/ArrowHorizontalAnimated.js"),require("../icon/icons/animated/PlusRemoveAnimated.js"),require("../icon/icons/ArrowDownIcon.js"),require("../icon/icons/ArrowLeftIcon.js"),require("../icon/icons/ArrowNorthEastIcon.js"),require("../icon/icons/ArrowRightIcon.js"),require("../icon/icons/ArrowUpIcon.js");const c=require("../icon/icons/CalendarIcon.js");require("../icon/icons/CheckIcon.js"),require("../icon/icons/ChevronDownIcon.js"),require("../icon/icons/ChevronLeftIcon.js"),require("../icon/icons/ChevronRightIcon.js"),require("../icon/icons/ChevronUpIcon.js"),require("../icon/icons/CloseIcon.js"),require("../icon/icons/CopyIcon.js"),require("../icon/icons/DotsIcon.js"),require("../icon/icons/DragIcon.js"),require("../icon/icons/ErrorIcon.js"),require("../icon/icons/GreenCheckIcon.js"),require("../icon/icons/HamburgerIcon.js"),require("../icon/icons/InfoIcon.js"),require("../icon/icons/LinkIcon.js"),require("../icon/icons/PlusIcon.js"),require("../icon/icons/QuestionIcon.js"),require("../icon/icons/RedCrossIcon.js"),require("../icon/icons/SearchIcon.js"),require("../icon/icons/SuccessIcon.js"),require("../icon/icons/WarningIcon.js"),require("../icon/icons/MinusIcon.js"),require("../icon/icons/ThumbDownIcon.js"),require("../icon/icons/ThumbUpIcon.js"),require("../icon/icons/TrashCanIcon.js"),require("../icon/icons/PenIcon.js"),require("../tooltip/Tooltip.js"),require("../tooltip/TooltipContent.js"),require("../tooltip/TooltipTrigger.js");const l=require("../input-group/InputGroup.js");require("../text-input/BaseTextArea.js");const d=require("../text-input/BaseTextInput.js");require("../text-input/TextArea.js"),require("../text-input/TextInput.js");const p=require("./internal/Calendar.js"),j=require("./internal/utils.js"),q=require("./utils.js"),k=require("./validation.js"),h=o.forwardRef(((h,I)=>{const{"data-testautoid":b,id:m,className:v="",label:C="Velg dato",labelProps:f,defaultValue:y,defaultShow:g=!1,value:D,disableBeforeDate:w,disableAfterDate:L,yearsToShow:T,name:x,helpLabel:S,errorLabel:A,invalid:O,density:P,days:_,months:E,monthLabel:R,yearLabel:N,placeholder:B="dd.mm.åååå",width:U="11.25rem",onChange:K,onBlur:H,onFocus:V,onKeyDown:F,action:W,showCalendarLabel:G="Åpne kalender",hideCalendarLabel:M="Lukk kalender",supportLabelProps:z,tooltipProps:Q,...J}=h;"production"!==process.env.NODE_ENV&&D&&y&&console.warn("DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.");const X=q.parseDateString(w),Y=X?n(X):void 0,Z=q.parseDateString(L),$=Z?n(Z):void 0,[ee,re]=o.useState(j.getInitialDate(D,y,Y,$)),[ne,oe]=o.useState(null),[ie,se]=o.useState(g),[te]=s.useAnimatedHeight(ie),ae=o.useRef(null),ue=o.useRef(null),ce=o.useCallback((e=>{ue.current=e,I&&("function"==typeof I?I(e):I.current=e)}),[ue,I]),le=o.useRef(null),de=o.useCallback((e=>{V&&le.current&&(le.current.contains(e.relatedTarget)||V(e,ee,{error:ne,value:e.target.value}))}),[V,ee,ne]),pe=o.useCallback((e=>{H&&H(e,ee,{error:ne,value:e.target.value})}),[H,ee,ne]),je=o.useCallback((e=>{"Escape"===e.key&&(se(!1),e.preventDefault(),e.stopPropagation()),null!=W&&W.onKeyDown&&W.onKeyDown(e)}),[se,W]),qe=o.useCallback((e=>{if("Escape"===e.key&&(se(!1),e.preventDefault(),e.stopPropagation()),F){let r=e.currentTarget.value;/[\d.]/.test(e.key)&&(r+=e.key),F(e,ee,{error:ne,value:r})}}),[F,se,ee,ne]),ke=o.useCallback((e=>{let r=null,n=null;if(e.target.value){const o=q.parseDateString(e.target.value);o?Y&&!k.isWithinLowerBound(o,Y)?n="OUTSIDE_LOWER_BOUND":$&&!k.isWithinUpperBound(o,$)?n="OUTSIDE_UPPER_BOUND":se(!1):n="WRONG_FORMAT",r=o||null}oe(n),re(r),K&&K(e,r,{error:n,value:e.target.value})}),[K,oe,re,se,Y,$]),he=o.useCallback((e=>{i.flushSync((()=>{se(!ie)}));const r=te.current,n=r&&r.querySelector('[aria-pressed="true"]');n&&n.focus(),null!=W&&W.onClick&&W.onClick(e)}),[se,ie,W,te]),Ie=o.useCallback((()=>{se(!ie)}),[se,ie]),be=o.useCallback((()=>{se(!1)}),[se]),me=o.useCallback((({date:e})=>{if(se(!1),re(e),ue.current){const r=ue.current;r.value=q.formatInput(e);const n=document.createEvent("HTMLEvents");n.initEvent("input",!0,!1),r.dispatchEvent(n),r.focus(),K&&K(n,e,{error:null,value:r.value})}}),[se,re,K]),ve=o.useCallback((e=>{e.preventDefault(),se(!1),ae.current&&ae.current.focus()}),[se]);return t.useClickOutside(le,be),a.useFocusOutside(le,be),u.useKeyListener(te,["Escape"],(()=>{se(!1),ue.current&&ue.current.focus()})),e.jsx(l.InputGroup,{id:m,className:r("jkl-datepicker",v,{"jkl-datepicker--open":ie}),...J,ref:le,label:C,labelProps:f,density:P,helpLabel:S,errorLabel:A,supportLabelProps:z,tooltipProps:Q,render:r=>e.jsxs("div",{"data-testid":"jkl-datepicker__input-wrapper",className:"jkl-datepicker__input-wrapper","data-density":P,tabIndex:-1,onKeyDown:qe,children:[e.jsx(d.BaseTextInput,{ref:ce,"data-testid":"jkl-datepicker__input","data-testautoid":b,className:"jkl-datepicker__input",name:x,defaultValue:y,density:P,value:D,type:"text",placeholder:B,width:U,onFocus:de,onBlur:pe,onClick:Ie,onChange:ke,...r,action:{buttonRef:ae,icon:e.jsx(c.CalendarIcon,{}),label:ie?M:G,...W,onClick:he,onKeyDown:je}}),e.jsx("div",{className:"jkl-datepicker__calendar-wrapper",children:e.jsx(p.Calendar,{ref:te,density:P,date:ee,minDate:Y,maxDate:$,days:_,months:E,monthLabel:R,yearLabel:N,yearsToShow:T,hidden:!ie,onDateSelected:me,onTabOutside:ve})})]})})}));h.displayName="DatePicker",exports.DatePicker=h;
|
|
2
|
+
//# sourceMappingURL=DatePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../../../../src/components/datepicker/DatePicker.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport startOfDay from \"date-fns/startOfDay\";\nimport React, {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useAnimatedHeight, useClickOutside, useFocusOutside, useKeyListener } from \"../../hooks\";\nimport { CalendarIcon } from \"../icon\";\nimport { InputGroup } from \"../input-group\";\nimport { BaseTextInput } from \"../text-input\";\nimport { Calendar } from \"./internal/Calendar\";\nimport { getInitialDate, DateInfo } from \"./internal/utils\";\nimport { DatePickerProps, DateValidationError } from \"./types\";\nimport { formatInput, parseDateString } from \"./utils\";\nimport { isWithinLowerBound, isWithinUpperBound } from \"./validation\";\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>((props, forwardedInputRef) => {\n const {\n \"data-testautoid\": testAutoId,\n id,\n className = \"\",\n label = \"Velg dato\",\n labelProps,\n defaultValue,\n defaultShow = false,\n value,\n disableBeforeDate: disableBefore,\n disableAfterDate: disableAfter,\n yearsToShow,\n name,\n helpLabel,\n errorLabel,\n invalid,\n density,\n days,\n months,\n monthLabel,\n yearLabel,\n placeholder = \"dd.mm.åååå\",\n width = \"11.25rem\",\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n action,\n showCalendarLabel = \"Åpne kalender\",\n hideCalendarLabel = \"Lukk kalender\",\n supportLabelProps,\n tooltipProps,\n ...rest\n } = props;\n\n if (process.env.NODE_ENV !== \"production\" && value && defaultValue) {\n console.warn(\n \"DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.\",\n );\n }\n /// Input state\n\n const disableBeforeDate = parseDateString(disableBefore);\n const minDate = disableBeforeDate ? startOfDay(disableBeforeDate) : undefined;\n const disableAfterDate = parseDateString(disableAfter);\n const maxDate = disableAfterDate ? startOfDay(disableAfterDate) : undefined;\n\n const [date, setDate] = useState(getInitialDate(value, defaultValue, minDate, maxDate));\n const [error, setError] = useState<DateValidationError | null>(null);\n\n /// Calendar state\n\n const [showCalendar, setShowCalendar] = useState(defaultShow);\n const [calendarRef] = useAnimatedHeight<HTMLDivElement>(showCalendar);\n\n /// Input events\n\n const iconButtonRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Hjelper for å gjøre det enklere å både forwarde refen men også bruke den selv internt\n const unifiedInputRef = useCallback(\n (instance: HTMLInputElement | null) => {\n inputRef.current = instance;\n if (forwardedInputRef) {\n if (typeof forwardedInputRef === \"function\") {\n forwardedInputRef(instance);\n } else {\n forwardedInputRef.current = instance;\n }\n }\n },\n [inputRef, forwardedInputRef],\n );\n\n const datepickerRef = useRef<HTMLDivElement>(null);\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (!onFocus || !datepickerRef.current) {\n return;\n }\n\n const nextFocusIsInside = datepickerRef.current.contains(e.relatedTarget as Node);\n if (!nextFocusIsInside) {\n onFocus(e, date, { error, value: e.target.value });\n }\n },\n [onFocus, date, error],\n );\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(e, date, { error, value: e.target.value });\n }\n },\n [onBlur, date, error],\n );\n\n const handleKeyDownAction = useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Escape\") {\n setShowCalendar(false);\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (action?.onKeyDown) {\n action.onKeyDown(e);\n }\n },\n [setShowCalendar, action],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setShowCalendar(false);\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (onKeyDown) {\n let nextValue = e.currentTarget.value;\n if (/[\\d.]/.test(e.key)) {\n nextValue += e.key;\n }\n onKeyDown(e, date, { error, value: nextValue });\n }\n },\n [onKeyDown, setShowCalendar, date, error],\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n let nextDate: Date | null = null;\n let nextError: DateValidationError | null = null;\n\n if (e.target.value) {\n const val = parseDateString(e.target.value);\n if (!val) {\n nextError = \"WRONG_FORMAT\";\n } else if (minDate && !isWithinLowerBound(val, minDate)) {\n nextError = \"OUTSIDE_LOWER_BOUND\";\n } else if (maxDate && !isWithinUpperBound(val, maxDate)) {\n nextError = \"OUTSIDE_UPPER_BOUND\";\n } else {\n setShowCalendar(false);\n }\n nextDate = val || null;\n }\n\n setError(nextError);\n setDate(nextDate);\n\n if (onChange) {\n onChange(e, nextDate, { error: nextError, value: e.target.value });\n }\n },\n [onChange, setError, setDate, setShowCalendar, minDate, maxDate],\n );\n\n /// Calendar events\n\n const clickCalendar = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n flushSync(() => {\n setShowCalendar(!showCalendar);\n });\n\n const calendarEl = calendarRef.current;\n const button = calendarEl && (calendarEl.querySelector('[aria-pressed=\"true\"]') as HTMLButtonElement);\n button && button.focus();\n\n if (action?.onClick) {\n action.onClick(e);\n }\n },\n [setShowCalendar, showCalendar, action, calendarRef],\n );\n\n const clickInput = useCallback(() => {\n setShowCalendar(!showCalendar);\n }, [setShowCalendar, showCalendar]);\n\n const hideCalendar = useCallback(() => {\n setShowCalendar(false);\n }, [setShowCalendar]);\n\n const handleClickCalendarDay = useCallback(\n ({ date }: DateInfo) => {\n setShowCalendar(false);\n setDate(date);\n\n if (inputRef.current) {\n const node = inputRef.current;\n\n node.value = formatInput(date);\n\n // Simulér et change-event så APIet blir så likt som mulig en endring av inputfeltet\n const event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"input\", true, false);\n node.dispatchEvent(event);\n\n node.focus();\n\n if (onChange) {\n // Det er ikke helt sant at dette er et React.SyntheticEvent, men it's fine – probably?\n // Den har tingene man kan forvente, men hvis du gjør serdeles fancy ting med events\n // så kan det hende du må utvide denne for å dekke behovet ditt.\n onChange(event as unknown as ChangeEvent<HTMLInputElement>, date, {\n error: null,\n value: node.value,\n });\n }\n }\n },\n [setShowCalendar, setDate, onChange],\n );\n\n const handleTabOutsideCalendar = useCallback(\n (e: KeyboardEvent) => {\n e.preventDefault();\n setShowCalendar(false);\n iconButtonRef.current && iconButtonRef.current.focus();\n },\n [setShowCalendar],\n );\n\n useClickOutside(datepickerRef, hideCalendar);\n useFocusOutside(datepickerRef, hideCalendar);\n useKeyListener(calendarRef, [\"Escape\"], () => {\n setShowCalendar(false);\n inputRef.current && inputRef.current.focus();\n });\n\n return (\n <InputGroup\n id={id}\n className={cn(\"jkl-datepicker\", className, {\n \"jkl-datepicker--open\": showCalendar,\n })}\n {...rest}\n ref={datepickerRef}\n label={label}\n labelProps={labelProps}\n density={density}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n supportLabelProps={supportLabelProps}\n tooltipProps={tooltipProps}\n render={(inputProps) => (\n // The <div> element handles keyboard events that bubble up from <button> elements inside\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n data-testid=\"jkl-datepicker__input-wrapper\"\n className=\"jkl-datepicker__input-wrapper\"\n data-density={density}\n tabIndex={-1} // Må være her for Safari onBlur quirk! https://bugs.webkit.org/show_bug.cgi?id=22261\n onKeyDown={handleKeyDown}\n >\n <BaseTextInput\n ref={unifiedInputRef}\n data-testid=\"jkl-datepicker__input\"\n data-testautoid={testAutoId}\n className=\"jkl-datepicker__input\"\n name={name}\n defaultValue={defaultValue}\n density={density}\n value={value}\n type=\"text\"\n placeholder={placeholder}\n width={width}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClick={clickInput}\n onChange={handleChange}\n {...inputProps}\n action={{\n buttonRef: iconButtonRef,\n icon: <CalendarIcon />,\n label: showCalendar ? hideCalendarLabel : showCalendarLabel,\n ...action,\n onClick: clickCalendar,\n onKeyDown: handleKeyDownAction,\n }}\n />\n <div className=\"jkl-datepicker__calendar-wrapper\">\n <Calendar\n ref={calendarRef}\n density={density}\n date={date}\n minDate={minDate}\n maxDate={maxDate}\n days={days}\n months={months}\n monthLabel={monthLabel}\n yearLabel={yearLabel}\n yearsToShow={yearsToShow}\n hidden={!showCalendar}\n onDateSelected={handleClickCalendarDay}\n onTabOutside={handleTabOutsideCalendar}\n />\n </div>\n </div>\n )}\n />\n );\n});\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":["DatePicker","forwardRef","props","forwardedInputRef","testAutoId","id","className","label","labelProps","defaultValue","defaultShow","value","disableBeforeDate","disableBefore","disableAfterDate","disableAfter","yearsToShow","name","helpLabel","errorLabel","invalid","density","days","months","monthLabel","yearLabel","placeholder","width","onChange","onBlur","onFocus","onKeyDown","action","showCalendarLabel","hideCalendarLabel","supportLabelProps","tooltipProps","rest","process","env","NODE_ENV","console","warn","parseDateString","minDate","startOfDay","maxDate","date","setDate","useState","getInitialDate","error","setError","showCalendar","setShowCalendar","calendarRef","useAnimatedHeight","iconButtonRef","useRef","inputRef","unifiedInputRef","useCallback","instance","current","datepickerRef","handleFocus","e","contains","relatedTarget","target","handleBlur","handleKeyDownAction","key","preventDefault","stopPropagation","handleKeyDown","nextValue","currentTarget","test","handleChange","nextDate","nextError","val","isWithinLowerBound","isWithinUpperBound","clickCalendar","flushSync","calendarEl","button","querySelector","focus","onClick","clickInput","hideCalendar","handleClickCalendarDay","node","formatInput","event","document","createEvent","initEvent","dispatchEvent","handleTabOutsideCalendar","useClickOutside","useFocusOutside","useKeyListener","jsx","InputGroup","cn","ref","render","inputProps","jsxs","tabIndex","children","BaseTextInput","type","buttonRef","icon","CalendarIcon","Calendar","hidden","onDateSelected","onTabOutside","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./validation.js"),r=require("./utils.js"),t=require("./DatePicker.js");exports.isCorrectFormat=e.isCorrectFormat,exports.isWithinLowerBound=e.isWithinLowerBound,exports.isWithinUpperBound=e.isWithinUpperBound,exports.dayMonthYearRegex=r.dayMonthYearRegex,exports.formatInput=r.formatInput,exports.isBlurTargetOutside=r.isBlurTargetOutside,exports.parseDateString=r.parseDateString,exports.DatePicker=t.DatePicker;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("classnames"),t=require("react"),r=require("react-dom");require("../../../hooks/useScreen/useScreen.js");const a=require("../../../hooks/useId/useId.js");require("../../icon/Icon.js"),require("../../icon/icons/animated/ArrowVerticalAnimated.js"),require("../../icon/icons/animated/ArrowHorizontalAnimated.js"),require("../../icon/icons/animated/PlusRemoveAnimated.js"),require("../../icon/icons/ArrowDownIcon.js");const o=require("../../icon/icons/ArrowLeftIcon.js");require("../../icon/icons/ArrowNorthEastIcon.js");const c=require("../../icon/icons/ArrowRightIcon.js");require("../../icon/icons/ArrowUpIcon.js"),require("../../icon/icons/CalendarIcon.js"),require("../../icon/icons/CheckIcon.js");const s=require("../../icon/icons/ChevronDownIcon.js");require("../../icon/icons/ChevronLeftIcon.js"),require("../../icon/icons/ChevronRightIcon.js"),require("../../icon/icons/ChevronUpIcon.js"),require("../../icon/icons/CloseIcon.js"),require("../../icon/icons/CopyIcon.js"),require("../../icon/icons/DotsIcon.js"),require("../../icon/icons/DragIcon.js"),require("../../icon/icons/ErrorIcon.js"),require("../../icon/icons/GreenCheckIcon.js"),require("../../icon/icons/HamburgerIcon.js"),require("../../icon/icons/InfoIcon.js"),require("../../icon/icons/LinkIcon.js"),require("../../icon/icons/PlusIcon.js"),require("../../icon/icons/QuestionIcon.js"),require("../../icon/icons/RedCrossIcon.js"),require("../../icon/icons/SearchIcon.js"),require("../../icon/icons/SuccessIcon.js"),require("../../icon/icons/WarningIcon.js"),require("../../icon/icons/MinusIcon.js"),require("../../icon/icons/ThumbDownIcon.js"),require("../../icon/icons/ThumbUpIcon.js"),require("../../icon/icons/TrashCanIcon.js"),require("../../icon/icons/PenIcon.js");const i=require("./calendarReducer.js"),l=require("./useCalendar.js"),d=require("./utils.js"),u=["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],h=["man","tir","ons","tor","fre","lør","søn"],j=t.forwardRef(((j,g)=>{const{hidden:m,date:b,defaultSelected:f,density:p,minDate:v,maxDate:k,days:q=h,months:w=u,monthLabel:D="Velg måned",yearLabel:I="Velg år",yearsToShow:x=d.DEFAULT_YEARS_TO_SHOW,onTabOutside:y,...S}=j,C=a.useId("jkl-calendar"),[{offset:A,selectedDate:_,shownDate:M},F]=t.useReducer(i.calendarReducer,d.getInitialDateShown(b,f,v,k),i.calendarInitializer),N=M.getMonth(),E=M.getFullYear();t.useEffect((()=>{F({type:"SET_SELECTED_DATE",newDate:d.getInitialDateShown(b,f,v,k)})}),[b,f,v,k]);const O=t.useCallback((e=>{F({type:"SET_OFFSET",newOffset:e})}),[]),{calendars:T,getBackProps:Y,getDateProps:$,getForwardProps:R,handleOffsetChanged:L}=l.useCalendar({date:_,selected:_,minDate:v,maxDate:k,offset:A,onOffsetChanged:O,firstDayOfWeek:1,...S}),P=t.useRef(null),U=t.useCallback((e=>{if(!P.current)return;const n=document.activeElement,t=P.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]'),a=async e=>{null==n||n.setAttribute("tabindex","-1"),e.setAttribute("tabindex","0"),e.focus()};t.forEach(((o,c)=>{const s=c+e;if(o==n)if(s<=t.length-1&&s>=0)a(t[s]);else if(e<0){if(d.isBackDisabled({calendars:T,minDate:v})||(r.flushSync((()=>{L(A-d.subtractMonth({calendars:T,offset:1,minDate:v}))})),!P.current))return;const e=P.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[e.length+s]&&(e[0].setAttribute("tabindex","-1"),a(e[e.length+s]))}else{if(d.isForwardDisabled({calendars:T,maxDate:k})||(r.flushSync((()=>{L(A+d.addMonth({calendars:T,offset:1,maxDate:k}))})),!P.current))return;const e=P.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[s-t.length]&&(e[0].setAttribute("tabindex","-1"),a(e[s-t.length]))}}))}),[L,P,A,T,k,v]),K=t.useCallback((e=>{switch(e.key){case"ArrowUp":U(-7),e.preventDefault();break;case"ArrowRight":U(1),e.preventDefault();break;case"ArrowDown":U(7),e.preventDefault();break;case"ArrowLeft":U(-1),e.preventDefault()}}),[U]),H=t.useCallback((e=>{var n;if("Tab"!==e.key)return;const t=null==(n=P.current)?void 0:n.querySelectorAll('button:not([disabled]):not([tabindex="-1"]), select');if(!t)return;const r=t[0],a=t[t.length-1];e.shiftKey||document.activeElement!==a?e.shiftKey&&document.activeElement===r&&(a.focus(),e.preventDefault()):(r.focus(),e.preventDefault())}),[]),J=t.useCallback((e=>{const{date:n,selected:t,selectable:r,prevMonth:a,nextMonth:o}=e;return!!r&&!(!t&&n.toString()!==(null==v?void 0:v.toString())&&(a||o||M.getFullYear()!==n.getFullYear()||_.getMonth()===n.getMonth()||1!==n.getDate()))}),[M,v,_]),V=t.useCallback((()=>{v&&M.getFullYear()-v.getFullYear()==0&&M.getMonth()-v.getMonth()==1?document.querySelectorAll(".jkl-calendar-navigation__arrow")[1].focus():k&&k.getFullYear()-M.getFullYear()==0&&k.getMonth()-M.getMonth()==1&&document.querySelectorAll(".jkl-calendar-navigation__arrow")[0].focus()}),[v,k,M]),W=t.useCallback((e=>{if(4!==e.target.value.length)return;const n=Number.parseInt(e.target.value);if(Number.isNaN(n))return;let t=12*(n-M.getFullYear());const r=new Date(M.getFullYear(),M.getMonth()+t,M.getDate());k&&k.getFullYear()===r.getFullYear()&&k.getMonth()<r.getMonth()?t-=r.getMonth()-k.getMonth():v&&v.getFullYear()===r.getFullYear()&&v.getMonth()>r.getMonth()&&(t+=v.getMonth()-r.getMonth()),F({type:"ADD_OFFSET",addedOffset:t})}),[M,v,k]),z=t.useCallback((e=>{if(!_&&!b)return;const n=M.getFullYear()-(_||new Date).getFullYear(),t=Number.parseInt(e.target.value)-(_||new Date).getMonth();F({type:"SET_OFFSET",newOffset:12*n+t})}),[_,b,M]),B=d.getYearSelectOptions(E,v,k,x),G=d.getMonthSelectOptions(E,w,v,k);return e.jsx("div",{ref:g,id:C,className:n("jkl-calendar",{"jkl-calendar--hidden":m}),"data-testid":"jkl-calendar",children:e.jsxs("div",{className:"jkl-calendar__padding",ref:P,onKeyDown:H,children:[e.jsxs("fieldset",{className:"jkl-calendar-navigation",children:[e.jsxs("div",{children:[e.jsx("button",{...Y({calendars:T,onClick:V}),className:"jkl-calendar-navigation__arrow",type:"button",children:e.jsx(o.ArrowLeftIcon,{variant:"medium",bold:!0})}),e.jsx("button",{...R({calendars:T,onClick:V}),className:"jkl-calendar-navigation__arrow",type:"button",children:e.jsx(c.ArrowRightIcon,{variant:"medium",bold:!0})})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"jkl-calendar-navigation-dropdown",children:[e.jsx("select",{onChange:z,className:"jkl-calendar-navigation-dropdown__select","aria-label":D,value:N.toString(),children:G.map((({label:n,value:t})=>e.jsx("option",{value:t,children:n},t)))}),e.jsx(s.ChevronDownIcon,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]}),e.jsxs("div",{className:"jkl-calendar-navigation-dropdown",children:[e.jsx("select",{onChange:W,className:"jkl-calendar-navigation-dropdown__select","aria-label":I,value:E.toString(),children:B.map((n=>e.jsx("option",{value:n,children:n},n)))}),e.jsx(s.ChevronDownIcon,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]})]})]}),T.map((n=>e.jsxs("table",{className:"jkl-calendar-table","data-testid":"jkl-datepicker-calendar",children:[e.jsxs("caption",{className:"jkl-sr-only",children:[w[n.month],", ",n.year]}),e.jsx("thead",{children:e.jsx("tr",{children:q.map((t=>e.jsx("th",{children:t},`${n.month}${n.year}${t}`)))})}),e.jsx("tbody",{"data-testid":"jkl-datepicker-dates",children:n.weeks.map(((t,r)=>e.jsx("tr",{children:t.map(((t,a)=>{const o=`${n.month}${n.year}${r}${a}`;if("string"==typeof t)return e.jsx("td",{className:"jkl-calendar__date jkl-calendar__date--empty",children:t},o);const{date:c,selectable:s,today:i,prevMonth:l,nextMonth:d}=t;return e.jsx("td",{children:e.jsx("button",{...$({dateObj:t}),type:"button",className:"jkl-calendar-date-button",tabIndex:J(t)?0:-1,"aria-label":`${c.getDate()}. ${w[c.getMonth()].toLowerCase()}`,"aria-current":i?"date":void 0,"data-adjacent":l||d?"true":void 0,disabled:!s,onKeyDown:K,children:e.jsx("span",{"aria-hidden":"true",children:c.getDate()})})},o)}))},`${n.month}${n.year}${r}`)))})]},`${n.month}${n.year}`)))]})})}));j.displayName="Calendar",exports.Calendar=j;
|
|
2
|
+
//# sourceMappingURL=Calendar.js.map
|