@dnb/eufemia 10.11.0 → 10.13.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/CHANGELOG.md +52 -0
- package/cjs/components/accordion/Accordion.js +1 -0
- package/cjs/components/accordion/Accordion.js.map +1 -1
- package/cjs/components/accordion/AccordionGroup.js +1 -0
- package/cjs/components/accordion/AccordionGroup.js.map +1 -1
- package/cjs/components/accordion/AccordionHeader.js +5 -15
- package/cjs/components/accordion/AccordionHeader.js.map +1 -1
- package/cjs/components/accordion/style/dnb-accordion.css +2 -2
- package/cjs/components/accordion/style/dnb-accordion.min.css +1 -1
- package/cjs/components/accordion/style/dnb-accordion.scss +3 -8
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +1 -1
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +1 -1
- package/cjs/components/anchor/Anchor.js.map +1 -1
- package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -2
- package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
- package/cjs/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -2
- package/cjs/components/autocomplete/Autocomplete.d.ts +2 -2
- package/cjs/components/autocomplete/Autocomplete.js +41 -16
- package/cjs/components/autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/breadcrumb/Breadcrumb.js +1 -0
- package/cjs/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/cjs/components/button/Button.d.ts +3 -3
- package/cjs/components/button/style/themes/dnb-button-theme-eiendom.scss +1 -1
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.css +2 -2
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.min.css +1 -1
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.scss +2 -2
- package/cjs/components/card/Card.js +2 -2
- package/cjs/components/card/Card.js.map +1 -1
- package/cjs/components/dialog/Dialog.js +1 -0
- package/cjs/components/dialog/Dialog.js.map +1 -1
- package/cjs/components/dialog/DialogContent.js +1 -0
- package/cjs/components/dialog/DialogContent.js.map +1 -1
- package/cjs/components/dialog/parts/DialogAction.js +1 -0
- package/cjs/components/dialog/parts/DialogAction.js.map +1 -1
- package/cjs/components/drawer/Drawer.js +1 -0
- package/cjs/components/drawer/Drawer.js.map +1 -1
- package/cjs/components/drawer/DrawerContent.js +1 -0
- package/cjs/components/drawer/DrawerContent.js.map +1 -1
- package/cjs/components/drawer/parts/DrawerContentContext.js +1 -0
- package/cjs/components/drawer/parts/DrawerContentContext.js.map +1 -1
- package/cjs/components/flex/Container.js +6 -4
- package/cjs/components/flex/Container.js.map +1 -1
- package/cjs/components/flex/utils.js +2 -2
- package/cjs/components/flex/utils.js.map +1 -1
- package/cjs/components/form-label/FormLabel.js +2 -1
- package/cjs/components/form-label/FormLabel.js.map +1 -1
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/cjs/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/cjs/components/form-row/style/dnb-form-row.scss +1 -1
- package/cjs/components/icon/style/dnb-icon.scss +1 -1
- package/cjs/components/input-masked/InputMasked.d.ts +1 -2
- package/cjs/components/input-masked/InputMasked.js +3 -3
- package/cjs/components/input-masked/InputMasked.js.map +1 -1
- package/cjs/components/input-masked/MultiInputMask.d.ts +60 -0
- package/cjs/components/input-masked/MultiInputMask.js +160 -0
- package/cjs/components/input-masked/MultiInputMask.js.map +1 -0
- package/cjs/components/input-masked/TextMask.d.ts +1 -1
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.js +114 -0
- package/cjs/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.js +38 -0
- package/cjs/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/cjs/components/input-masked/index.d.ts +2 -0
- package/cjs/components/input-masked/index.js +21 -1
- package/cjs/components/input-masked/index.js.map +1 -1
- package/cjs/components/input-masked/style/dnb-input-masked.css +57 -0
- package/cjs/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/cjs/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/cjs/components/lib.d.ts +1 -1
- package/cjs/components/number-format/NumberUtils.js.map +1 -1
- package/cjs/components/number-format/useNumberFormat.js +1 -0
- package/cjs/components/number-format/useNumberFormat.js.map +1 -1
- package/cjs/components/pagination/PaginationBar.js +1 -0
- package/cjs/components/pagination/PaginationBar.js.map +1 -1
- package/cjs/components/section/Section.d.ts +2 -2
- package/cjs/components/section/Section.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorContext.js +1 -0
- package/cjs/components/step-indicator/StepIndicatorContext.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorItem.js +3 -2
- package/cjs/components/step-indicator/StepIndicatorItem.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorList.js +1 -0
- package/cjs/components/step-indicator/StepIndicatorList.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorModal.js +1 -0
- package/cjs/components/step-indicator/StepIndicatorModal.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorSidebar.js +1 -0
- package/cjs/components/step-indicator/StepIndicatorSidebar.js.map +1 -1
- package/cjs/components/step-indicator/StepIndicatorTriggerButton.js +1 -0
- package/cjs/components/step-indicator/StepIndicatorTriggerButton.js.map +1 -1
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.css +1 -0
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.scss +1 -0
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -1
- package/cjs/components/tooltip/TooltipWithEvents.js.map +1 -1
- package/cjs/components/upload/UploadContext.js +1 -0
- package/cjs/components/upload/UploadContext.js.map +1 -1
- package/cjs/components/upload/UploadFileInput.js +1 -0
- package/cjs/components/upload/UploadFileInput.js.map +1 -1
- package/cjs/components/upload/UploadFileListCell.js +1 -0
- package/cjs/components/upload/UploadFileListCell.js.map +1 -1
- package/cjs/elements/lists/Dl.d.ts +1 -1
- package/cjs/elements/lists/Dl.js.map +1 -1
- package/cjs/elements/typography/style/dnb-typography.scss +1 -1
- package/cjs/elements/typography/style/typography-mixins.scss +2 -2
- package/cjs/extensions/forms/DataContext/At/At.js +1 -0
- package/cjs/extensions/forms/DataContext/At/At.js.map +1 -1
- package/cjs/extensions/forms/DataContext/Provider/Provider.js +5 -3
- package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js +12 -9
- package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/cjs/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js +5 -3
- package/cjs/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/Boolean/Boolean.js +3 -2
- package/cjs/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
- package/cjs/extensions/forms/Field/Currency/Currency.js +3 -2
- package/cjs/extensions/forms/Field/Currency/Currency.js.map +1 -1
- package/cjs/extensions/forms/Field/Date/Date.js +2 -1
- package/cjs/extensions/forms/Field/Date/Date.js.map +1 -1
- package/cjs/extensions/forms/Field/Email/Email.js +5 -3
- package/cjs/extensions/forms/Field/Email/Email.js.map +1 -1
- package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +5 -3
- package/cjs/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/Number/Number.js +3 -2
- package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
- package/cjs/extensions/forms/Field/Option/Option.js +1 -1
- package/cjs/extensions/forms/Field/Option/Option.js.map +1 -1
- package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +5 -3
- package/cjs/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +5 -0
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +58 -18
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js +6 -4
- package/cjs/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js.map +1 -1
- package/cjs/extensions/forms/Field/SelectCountry/SelectCountry.js +12 -8
- package/cjs/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
- package/cjs/extensions/forms/Field/Selection/Selection.js +29 -20
- package/cjs/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/cjs/extensions/forms/Field/String/String.js +10 -9
- package/cjs/extensions/forms/Field/String/String.js.map +1 -1
- package/cjs/extensions/forms/Field/Toggle/Toggle.js +5 -4
- package/cjs/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js +1 -0
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/cjs/extensions/forms/Form/SubmitButton/SubmitButton.js +1 -0
- package/cjs/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
- package/cjs/extensions/forms/Iterate/Array/Array.js +2 -2
- package/cjs/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/cjs/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js +3 -2
- package/cjs/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js.map +1 -1
- package/cjs/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js +2 -1
- package/cjs/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js.map +1 -1
- package/cjs/extensions/forms/StepsLayout/NextButton/NextButton.js +1 -0
- package/cjs/extensions/forms/StepsLayout/NextButton/NextButton.js.map +1 -1
- package/cjs/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js +1 -0
- package/cjs/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js.map +1 -1
- package/cjs/extensions/forms/StepsLayout/Step/Step.js +1 -0
- package/cjs/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
- package/cjs/extensions/forms/StepsLayout/StepsLayout.js +3 -1
- package/cjs/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
- package/cjs/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js +3 -1
- package/cjs/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/cjs/extensions/forms/Value/Boolean/Boolean.js +1 -0
- package/cjs/extensions/forms/Value/Boolean/Boolean.js.map +1 -1
- package/cjs/extensions/forms/Value/Currency/Currency.js +3 -2
- package/cjs/extensions/forms/Value/Currency/Currency.js.map +1 -1
- package/cjs/extensions/forms/Value/Date/Date.js +3 -1
- package/cjs/extensions/forms/Value/Date/Date.js.map +1 -1
- package/cjs/extensions/forms/Value/Email/Email.js +3 -1
- package/cjs/extensions/forms/Value/Email/Email.js.map +1 -1
- package/cjs/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js +3 -1
- package/cjs/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/cjs/extensions/forms/Value/PhoneNumber/PhoneNumber.js +3 -1
- package/cjs/extensions/forms/Value/PhoneNumber/PhoneNumber.js.map +1 -1
- package/cjs/extensions/forms/ValueBlock/ValueBlock.js +1 -1
- package/cjs/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
- package/cjs/extensions/forms/Visibility/Visibility.js +1 -0
- package/cjs/extensions/forms/Visibility/Visibility.js.map +1 -1
- package/cjs/extensions/forms/hooks/useDataValue.js +21 -17
- package/cjs/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/cjs/extensions/forms/types.js +6 -6
- package/cjs/extensions/forms/types.js.map +1 -1
- package/cjs/extensions/forms/utils/ajv.js +3 -2
- package/cjs/extensions/forms/utils/ajv.js.map +1 -1
- package/cjs/extensions/forms/utils/numbers.js +2 -2
- package/cjs/extensions/forms/utils/numbers.js.map +1 -1
- package/cjs/extensions/forms/utils/useWasChanged.js +8 -6
- package/cjs/extensions/forms/utils/useWasChanged.js.map +1 -1
- package/cjs/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/cjs/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/cjs/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/cjs/fragments/drawer-list/DrawerListHelpers.js +1 -1
- package/cjs/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
- package/cjs/fragments/drawer-list/DrawerListProvider.js.map +1 -1
- package/cjs/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +5 -2
- package/cjs/fragments/drawer-list/style/themes/dnb-drawer-list-theme-ui.scss +2 -2
- package/cjs/shared/Eufemia.d.ts +1 -1
- package/cjs/shared/Eufemia.js +2 -2
- package/cjs/shared/Eufemia.js.map +1 -1
- package/cjs/shared/useTheme.d.ts +12 -1
- package/cjs/shared/useTheme.js +16 -1
- package/cjs/shared/useTheme.js.map +1 -1
- package/cjs/style/dnb-ui-components.css +59 -2
- package/cjs/style/dnb-ui-components.min.css +1 -1
- package/cjs/style/dnb-ui-extensions.css +3 -0
- package/cjs/style/dnb-ui-extensions.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +61 -4
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/fonts.scss +5 -4
- package/cjs/style/themes/theme-sbanken/properties.js +2 -2
- package/cjs/style/themes/theme-sbanken/properties.js.map +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.css +3 -2
- package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +75 -13
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/theme-mapping.scss +2 -1
- package/cjs/style/themes/theme-ui/ui-theme-components.css +61 -4
- package/cjs/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/components/accordion/Accordion.js +2 -0
- package/components/accordion/Accordion.js.map +1 -1
- package/components/accordion/AccordionGroup.js +2 -0
- package/components/accordion/AccordionGroup.js.map +1 -1
- package/components/accordion/AccordionHeader.js +6 -15
- package/components/accordion/AccordionHeader.js.map +1 -1
- package/components/accordion/style/dnb-accordion.css +2 -2
- package/components/accordion/style/dnb-accordion.min.css +1 -1
- package/components/accordion/style/dnb-accordion.scss +3 -8
- package/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +1 -1
- package/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
- package/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +1 -1
- package/components/anchor/Anchor.js.map +1 -1
- package/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -2
- package/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
- package/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -2
- package/components/autocomplete/Autocomplete.d.ts +2 -2
- package/components/autocomplete/Autocomplete.js +42 -17
- package/components/autocomplete/Autocomplete.js.map +1 -1
- package/components/breadcrumb/Breadcrumb.js +2 -0
- package/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/components/button/Button.d.ts +3 -3
- package/components/button/style/themes/dnb-button-theme-eiendom.scss +1 -1
- package/components/button/style/themes/dnb-button-theme-sbanken.css +2 -2
- package/components/button/style/themes/dnb-button-theme-sbanken.min.css +1 -1
- package/components/button/style/themes/dnb-button-theme-sbanken.scss +2 -2
- package/components/card/Card.js +2 -2
- package/components/card/Card.js.map +1 -1
- package/components/dialog/Dialog.js +2 -0
- package/components/dialog/Dialog.js.map +1 -1
- package/components/dialog/DialogContent.js +2 -0
- package/components/dialog/DialogContent.js.map +1 -1
- package/components/dialog/parts/DialogAction.js +2 -0
- package/components/dialog/parts/DialogAction.js.map +1 -1
- package/components/drawer/Drawer.js +2 -0
- package/components/drawer/Drawer.js.map +1 -1
- package/components/drawer/DrawerContent.js +2 -0
- package/components/drawer/DrawerContent.js.map +1 -1
- package/components/drawer/parts/DrawerContentContext.js +2 -0
- package/components/drawer/parts/DrawerContentContext.js.map +1 -1
- package/components/flex/Container.js +6 -4
- package/components/flex/Container.js.map +1 -1
- package/components/flex/utils.js +2 -2
- package/components/flex/utils.js.map +1 -1
- package/components/form-label/FormLabel.js +2 -1
- package/components/form-label/FormLabel.js.map +1 -1
- package/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/components/form-row/style/dnb-form-row.scss +1 -1
- package/components/icon/style/dnb-icon.scss +1 -1
- package/components/input-masked/InputMasked.d.ts +1 -2
- package/components/input-masked/InputMasked.js +2 -2
- package/components/input-masked/InputMasked.js.map +1 -1
- package/components/input-masked/MultiInputMask.d.ts +60 -0
- package/components/input-masked/MultiInputMask.js +150 -0
- package/components/input-masked/MultiInputMask.js.map +1 -0
- package/components/input-masked/TextMask.d.ts +1 -1
- package/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/components/input-masked/hooks/useHandleCursorPosition.js +108 -0
- package/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/components/input-masked/hooks/useMultiInputValues.js +31 -0
- package/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/components/input-masked/index.d.ts +2 -0
- package/components/input-masked/index.js +2 -0
- package/components/input-masked/index.js.map +1 -1
- package/components/input-masked/style/dnb-input-masked.css +57 -0
- package/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/components/lib.d.ts +1 -1
- package/components/number-format/NumberUtils.js.map +1 -1
- package/components/number-format/useNumberFormat.js +2 -0
- package/components/number-format/useNumberFormat.js.map +1 -1
- package/components/pagination/PaginationBar.js +2 -0
- package/components/pagination/PaginationBar.js.map +1 -1
- package/components/section/Section.d.ts +2 -2
- package/components/section/Section.js.map +1 -1
- package/components/step-indicator/StepIndicatorContext.js +2 -0
- package/components/step-indicator/StepIndicatorContext.js.map +1 -1
- package/components/step-indicator/StepIndicatorItem.js +4 -2
- package/components/step-indicator/StepIndicatorItem.js.map +1 -1
- package/components/step-indicator/StepIndicatorList.js +2 -0
- package/components/step-indicator/StepIndicatorList.js.map +1 -1
- package/components/step-indicator/StepIndicatorModal.js +2 -0
- package/components/step-indicator/StepIndicatorModal.js.map +1 -1
- package/components/step-indicator/StepIndicatorSidebar.js +2 -0
- package/components/step-indicator/StepIndicatorSidebar.js.map +1 -1
- package/components/step-indicator/StepIndicatorTriggerButton.js +2 -0
- package/components/step-indicator/StepIndicatorTriggerButton.js.map +1 -1
- package/components/table/style/themes/dnb-table-theme-sbanken.css +1 -0
- package/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
- package/components/table/style/themes/dnb-table-theme-sbanken.scss +1 -0
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -1
- package/components/tooltip/TooltipWithEvents.js.map +1 -1
- package/components/upload/UploadContext.js +2 -0
- package/components/upload/UploadContext.js.map +1 -1
- package/components/upload/UploadFileInput.js +2 -0
- package/components/upload/UploadFileInput.js.map +1 -1
- package/components/upload/UploadFileListCell.js +2 -0
- package/components/upload/UploadFileListCell.js.map +1 -1
- package/elements/lists/Dl.d.ts +1 -1
- package/elements/lists/Dl.js.map +1 -1
- package/elements/typography/style/dnb-typography.scss +1 -1
- package/elements/typography/style/typography-mixins.scss +2 -2
- package/es/components/accordion/Accordion.js +2 -0
- package/es/components/accordion/Accordion.js.map +1 -1
- package/es/components/accordion/AccordionGroup.js +2 -0
- package/es/components/accordion/AccordionGroup.js.map +1 -1
- package/es/components/accordion/AccordionHeader.js +6 -15
- package/es/components/accordion/AccordionHeader.js.map +1 -1
- package/es/components/accordion/style/dnb-accordion.css +2 -2
- package/es/components/accordion/style/dnb-accordion.min.css +1 -1
- package/es/components/accordion/style/dnb-accordion.scss +3 -8
- package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.css +1 -1
- package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.min.css +1 -1
- package/es/components/accordion/style/themes/dnb-accordion-theme-sbanken.scss +1 -1
- package/es/components/anchor/Anchor.js.map +1 -1
- package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.css +2 -2
- package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.min.css +1 -1
- package/es/components/anchor/style/themes/dnb-anchor-theme-sbanken.scss +1 -2
- package/es/components/autocomplete/Autocomplete.d.ts +2 -2
- package/es/components/autocomplete/Autocomplete.js +42 -17
- package/es/components/autocomplete/Autocomplete.js.map +1 -1
- package/es/components/breadcrumb/Breadcrumb.js +2 -0
- package/es/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/es/components/button/Button.d.ts +3 -3
- package/es/components/button/style/themes/dnb-button-theme-eiendom.scss +1 -1
- package/es/components/button/style/themes/dnb-button-theme-sbanken.css +2 -2
- package/es/components/button/style/themes/dnb-button-theme-sbanken.min.css +1 -1
- package/es/components/button/style/themes/dnb-button-theme-sbanken.scss +2 -2
- package/es/components/card/Card.js +2 -2
- package/es/components/card/Card.js.map +1 -1
- package/es/components/dialog/Dialog.js +2 -0
- package/es/components/dialog/Dialog.js.map +1 -1
- package/es/components/dialog/DialogContent.js +2 -0
- package/es/components/dialog/DialogContent.js.map +1 -1
- package/es/components/dialog/parts/DialogAction.js +2 -0
- package/es/components/dialog/parts/DialogAction.js.map +1 -1
- package/es/components/drawer/Drawer.js +2 -0
- package/es/components/drawer/Drawer.js.map +1 -1
- package/es/components/drawer/DrawerContent.js +2 -0
- package/es/components/drawer/DrawerContent.js.map +1 -1
- package/es/components/drawer/parts/DrawerContentContext.js +2 -0
- package/es/components/drawer/parts/DrawerContentContext.js.map +1 -1
- package/es/components/flex/Container.js +6 -4
- package/es/components/flex/Container.js.map +1 -1
- package/es/components/flex/utils.js +2 -2
- package/es/components/flex/utils.js.map +1 -1
- package/es/components/form-label/FormLabel.js +2 -1
- package/es/components/form-label/FormLabel.js.map +1 -1
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.css +2 -2
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.min.css +1 -1
- package/es/components/form-label/style/themes/dnb-form-label-theme-ui.scss +1 -1
- package/es/components/form-row/style/dnb-form-row.scss +1 -1
- package/es/components/icon/style/dnb-icon.scss +1 -1
- package/es/components/input-masked/InputMasked.d.ts +1 -2
- package/es/components/input-masked/InputMasked.js +2 -2
- package/es/components/input-masked/InputMasked.js.map +1 -1
- package/es/components/input-masked/MultiInputMask.d.ts +60 -0
- package/es/components/input-masked/MultiInputMask.js +147 -0
- package/es/components/input-masked/MultiInputMask.js.map +1 -0
- package/es/components/input-masked/TextMask.d.ts +1 -1
- package/es/components/input-masked/hooks/useHandleCursorPosition.d.ts +7 -0
- package/es/components/input-masked/hooks/useHandleCursorPosition.js +107 -0
- package/es/components/input-masked/hooks/useHandleCursorPosition.js.map +1 -0
- package/es/components/input-masked/hooks/useMultiInputValues.d.ts +8 -0
- package/es/components/input-masked/hooks/useMultiInputValues.js +30 -0
- package/es/components/input-masked/hooks/useMultiInputValues.js.map +1 -0
- package/es/components/input-masked/index.d.ts +2 -0
- package/es/components/input-masked/index.js +2 -0
- package/es/components/input-masked/index.js.map +1 -1
- package/es/components/input-masked/style/dnb-input-masked.css +57 -0
- package/es/components/input-masked/style/dnb-input-masked.min.css +1 -1
- package/es/components/input-masked/style/dnb-input-masked.scss +73 -0
- package/es/components/lib.d.ts +1 -1
- package/es/components/number-format/NumberUtils.js.map +1 -1
- package/es/components/number-format/useNumberFormat.js +2 -0
- package/es/components/number-format/useNumberFormat.js.map +1 -1
- package/es/components/pagination/PaginationBar.js +2 -0
- package/es/components/pagination/PaginationBar.js.map +1 -1
- package/es/components/section/Section.d.ts +2 -2
- package/es/components/section/Section.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorContext.js +2 -0
- package/es/components/step-indicator/StepIndicatorContext.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorItem.js +4 -2
- package/es/components/step-indicator/StepIndicatorItem.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorList.js +2 -0
- package/es/components/step-indicator/StepIndicatorList.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorModal.js +2 -0
- package/es/components/step-indicator/StepIndicatorModal.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorSidebar.js +2 -0
- package/es/components/step-indicator/StepIndicatorSidebar.js.map +1 -1
- package/es/components/step-indicator/StepIndicatorTriggerButton.js +2 -0
- package/es/components/step-indicator/StepIndicatorTriggerButton.js.map +1 -1
- package/es/components/table/style/themes/dnb-table-theme-sbanken.css +1 -0
- package/es/components/table/style/themes/dnb-table-theme-sbanken.min.css +1 -1
- package/es/components/table/style/themes/dnb-table-theme-sbanken.scss +1 -0
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +1 -1
- package/es/components/tooltip/TooltipWithEvents.js.map +1 -1
- package/es/components/upload/UploadContext.js +2 -0
- package/es/components/upload/UploadContext.js.map +1 -1
- package/es/components/upload/UploadFileInput.js +2 -0
- package/es/components/upload/UploadFileInput.js.map +1 -1
- package/es/components/upload/UploadFileListCell.js +2 -0
- package/es/components/upload/UploadFileListCell.js.map +1 -1
- package/es/elements/lists/Dl.d.ts +1 -1
- package/es/elements/lists/Dl.js.map +1 -1
- package/es/elements/typography/style/dnb-typography.scss +1 -1
- package/es/elements/typography/style/typography-mixins.scss +2 -2
- package/es/extensions/forms/DataContext/At/At.js +2 -0
- package/es/extensions/forms/DataContext/At/At.js.map +1 -1
- package/es/extensions/forms/DataContext/Provider/Provider.js +6 -3
- package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/es/extensions/forms/Field/ArraySelection/ArraySelection.js +12 -9
- package/es/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/es/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js +6 -3
- package/es/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/es/extensions/forms/Field/Boolean/Boolean.js +4 -2
- package/es/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
- package/es/extensions/forms/Field/Currency/Currency.js +3 -2
- package/es/extensions/forms/Field/Currency/Currency.js.map +1 -1
- package/es/extensions/forms/Field/Date/Date.js +3 -1
- package/es/extensions/forms/Field/Date/Date.js.map +1 -1
- package/es/extensions/forms/Field/Email/Email.js +6 -3
- package/es/extensions/forms/Field/Email/Email.js.map +1 -1
- package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +6 -3
- package/es/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/es/extensions/forms/Field/Number/Number.js +3 -2
- package/es/extensions/forms/Field/Number/Number.js.map +1 -1
- package/es/extensions/forms/Field/Option/Option.js +1 -1
- package/es/extensions/forms/Field/Option/Option.js.map +1 -1
- package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +6 -3
- package/es/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +5 -0
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +48 -16
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/es/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js +7 -4
- package/es/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js.map +1 -1
- package/es/extensions/forms/Field/SelectCountry/SelectCountry.js +13 -8
- package/es/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
- package/es/extensions/forms/Field/Selection/Selection.js +30 -20
- package/es/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/es/extensions/forms/Field/String/String.js +11 -9
- package/es/extensions/forms/Field/String/String.js.map +1 -1
- package/es/extensions/forms/Field/Toggle/Toggle.js +6 -4
- package/es/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlock.js +2 -0
- package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/es/extensions/forms/Form/SubmitButton/SubmitButton.js +2 -0
- package/es/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
- package/es/extensions/forms/Iterate/Array/Array.js +2 -2
- package/es/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/es/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js +4 -2
- package/es/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js.map +1 -1
- package/es/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js +3 -1
- package/es/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js.map +1 -1
- package/es/extensions/forms/StepsLayout/NextButton/NextButton.js +2 -0
- package/es/extensions/forms/StepsLayout/NextButton/NextButton.js.map +1 -1
- package/es/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js +2 -0
- package/es/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js.map +1 -1
- package/es/extensions/forms/StepsLayout/Step/Step.js +2 -0
- package/es/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
- package/es/extensions/forms/StepsLayout/StepsLayout.js +4 -1
- package/es/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
- package/es/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js +4 -1
- package/es/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/es/extensions/forms/Value/Boolean/Boolean.js +2 -0
- package/es/extensions/forms/Value/Boolean/Boolean.js.map +1 -1
- package/es/extensions/forms/Value/Currency/Currency.js +3 -2
- package/es/extensions/forms/Value/Currency/Currency.js.map +1 -1
- package/es/extensions/forms/Value/Date/Date.js +4 -1
- package/es/extensions/forms/Value/Date/Date.js.map +1 -1
- package/es/extensions/forms/Value/Email/Email.js +4 -1
- package/es/extensions/forms/Value/Email/Email.js.map +1 -1
- package/es/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js +4 -1
- package/es/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/es/extensions/forms/Value/PhoneNumber/PhoneNumber.js +4 -1
- package/es/extensions/forms/Value/PhoneNumber/PhoneNumber.js.map +1 -1
- package/es/extensions/forms/ValueBlock/ValueBlock.js +1 -1
- package/es/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
- package/es/extensions/forms/Visibility/Visibility.js +2 -0
- package/es/extensions/forms/Visibility/Visibility.js.map +1 -1
- package/es/extensions/forms/hooks/useDataValue.js +22 -17
- package/es/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/es/extensions/forms/types.js +6 -6
- package/es/extensions/forms/types.js.map +1 -1
- package/es/extensions/forms/utils/ajv.js +3 -2
- package/es/extensions/forms/utils/ajv.js.map +1 -1
- package/es/extensions/forms/utils/numbers.js +2 -2
- package/es/extensions/forms/utils/numbers.js.map +1 -1
- package/es/extensions/forms/utils/useWasChanged.js +9 -6
- package/es/extensions/forms/utils/useWasChanged.js.map +1 -1
- package/es/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/es/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/es/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/es/fragments/drawer-list/DrawerListHelpers.js +1 -1
- package/es/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
- package/es/fragments/drawer-list/DrawerListProvider.js.map +1 -1
- package/es/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +5 -2
- package/es/fragments/drawer-list/style/themes/dnb-drawer-list-theme-ui.scss +2 -2
- package/es/shared/Eufemia.d.ts +1 -1
- package/es/shared/Eufemia.js +2 -2
- package/es/shared/Eufemia.js.map +1 -1
- package/es/shared/useTheme.d.ts +12 -1
- package/es/shared/useTheme.js +14 -1
- package/es/shared/useTheme.js.map +1 -1
- package/es/style/dnb-ui-components.css +59 -2
- package/es/style/dnb-ui-components.min.css +1 -1
- package/es/style/dnb-ui-extensions.css +3 -0
- package/es/style/dnb-ui-extensions.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-components.css +61 -4
- package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-sbanken/fonts.scss +5 -4
- package/es/style/themes/theme-sbanken/properties.js +2 -2
- package/es/style/themes/theme-sbanken/properties.js.map +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-basis.css +3 -2
- package/es/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-components.css +75 -13
- package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-sbanken/theme-mapping.scss +2 -1
- package/es/style/themes/theme-ui/ui-theme-components.css +61 -4
- package/es/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/es/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/esm/dnb-ui-basis.min.mjs +1 -1
- package/esm/dnb-ui-components.min.mjs +1 -1
- package/esm/dnb-ui-elements.min.mjs +1 -1
- package/esm/dnb-ui-extensions.min.mjs +3 -3
- package/esm/dnb-ui-lib.min.mjs +1 -1
- package/extensions/forms/DataContext/At/At.js +2 -0
- package/extensions/forms/DataContext/At/At.js.map +1 -1
- package/extensions/forms/DataContext/Provider/Provider.js +6 -3
- package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/extensions/forms/Field/ArraySelection/ArraySelection.js +12 -9
- package/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js +6 -3
- package/extensions/forms/Field/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/extensions/forms/Field/Boolean/Boolean.js +4 -2
- package/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
- package/extensions/forms/Field/Currency/Currency.js +3 -2
- package/extensions/forms/Field/Currency/Currency.js.map +1 -1
- package/extensions/forms/Field/Date/Date.js +3 -1
- package/extensions/forms/Field/Date/Date.js.map +1 -1
- package/extensions/forms/Field/Email/Email.js +6 -3
- package/extensions/forms/Field/Email/Email.js.map +1 -1
- package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js +6 -3
- package/extensions/forms/Field/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/extensions/forms/Field/Number/Number.js +3 -2
- package/extensions/forms/Field/Number/Number.js.map +1 -1
- package/extensions/forms/Field/Option/Option.js +1 -1
- package/extensions/forms/Field/Option/Option.js.map +1 -1
- package/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js +6 -3
- package/extensions/forms/Field/OrganizationNumber/OrganizationNumber.js.map +1 -1
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +5 -0
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +59 -18
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js +7 -4
- package/extensions/forms/Field/PostalCodeAndCity/PostalCodeAndCity.js.map +1 -1
- package/extensions/forms/Field/SelectCountry/SelectCountry.js +13 -8
- package/extensions/forms/Field/SelectCountry/SelectCountry.js.map +1 -1
- package/extensions/forms/Field/Selection/Selection.js +30 -20
- package/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/extensions/forms/Field/String/String.js +11 -9
- package/extensions/forms/Field/String/String.js.map +1 -1
- package/extensions/forms/Field/Toggle/Toggle.js +6 -4
- package/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlock.js +2 -0
- package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/extensions/forms/Form/SubmitButton/SubmitButton.js +2 -0
- package/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
- package/extensions/forms/Iterate/Array/Array.js +2 -2
- package/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js +4 -2
- package/extensions/forms/Iterate/ArrayPushButton/ArrayPushButton.js.map +1 -1
- package/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js +3 -1
- package/extensions/forms/Iterate/ArrayRemoveElementButton/ArrayRemoveElementButton.js.map +1 -1
- package/extensions/forms/StepsLayout/NextButton/NextButton.js +2 -0
- package/extensions/forms/StepsLayout/NextButton/NextButton.js.map +1 -1
- package/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js +2 -0
- package/extensions/forms/StepsLayout/PreviousButton/PreviousButton.js.map +1 -1
- package/extensions/forms/StepsLayout/Step/Step.js +2 -0
- package/extensions/forms/StepsLayout/Step/Step.js.map +1 -1
- package/extensions/forms/StepsLayout/StepsLayout.js +4 -1
- package/extensions/forms/StepsLayout/StepsLayout.js.map +1 -1
- package/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js +4 -1
- package/extensions/forms/Value/BankAccountNumber/BankAccountNumber.js.map +1 -1
- package/extensions/forms/Value/Boolean/Boolean.js +2 -0
- package/extensions/forms/Value/Boolean/Boolean.js.map +1 -1
- package/extensions/forms/Value/Currency/Currency.js +3 -2
- package/extensions/forms/Value/Currency/Currency.js.map +1 -1
- package/extensions/forms/Value/Date/Date.js +4 -1
- package/extensions/forms/Value/Date/Date.js.map +1 -1
- package/extensions/forms/Value/Email/Email.js +4 -1
- package/extensions/forms/Value/Email/Email.js.map +1 -1
- package/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js +4 -1
- package/extensions/forms/Value/NationalIdentityNumber/NationalIdentityNumber.js.map +1 -1
- package/extensions/forms/Value/PhoneNumber/PhoneNumber.js +4 -1
- package/extensions/forms/Value/PhoneNumber/PhoneNumber.js.map +1 -1
- package/extensions/forms/ValueBlock/ValueBlock.js +1 -1
- package/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
- package/extensions/forms/Visibility/Visibility.js +2 -0
- package/extensions/forms/Visibility/Visibility.js.map +1 -1
- package/extensions/forms/hooks/useDataValue.js +22 -17
- package/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/extensions/forms/types.js +6 -6
- package/extensions/forms/types.js.map +1 -1
- package/extensions/forms/utils/ajv.js +3 -2
- package/extensions/forms/utils/ajv.js.map +1 -1
- package/extensions/forms/utils/numbers.js +2 -2
- package/extensions/forms/utils/numbers.js.map +1 -1
- package/extensions/forms/utils/useWasChanged.js +9 -6
- package/extensions/forms/utils/useWasChanged.js.map +1 -1
- package/extensions/payment-card/style/dnb-payment-card.css +3 -0
- package/extensions/payment-card/style/dnb-payment-card.min.css +1 -1
- package/extensions/payment-card/style/dnb-payment-card.scss +4 -0
- package/fragments/drawer-list/DrawerListHelpers.js +1 -1
- package/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
- package/fragments/drawer-list/DrawerListProvider.js.map +1 -1
- package/fragments/drawer-list/style/themes/dnb-drawer-list-theme-sbanken.scss +5 -2
- package/fragments/drawer-list/style/themes/dnb-drawer-list-theme-ui.scss +2 -2
- package/package.json +11 -1
- package/shared/Eufemia.d.ts +1 -1
- package/shared/Eufemia.js +2 -2
- package/shared/Eufemia.js.map +1 -1
- package/shared/useTheme.d.ts +12 -1
- package/shared/useTheme.js +14 -1
- package/shared/useTheme.js.map +1 -1
- package/style/dnb-ui-components.css +59 -2
- package/style/dnb-ui-components.min.css +1 -1
- package/style/dnb-ui-extensions.css +3 -0
- package/style/dnb-ui-extensions.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-components.css +61 -4
- package/style/themes/theme-eiendom/eiendom-theme-components.min.css +2 -2
- package/style/themes/theme-eiendom/eiendom-theme-extensions.css +3 -0
- package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/style/themes/theme-sbanken/fonts.scss +5 -4
- package/style/themes/theme-sbanken/properties.js +2 -2
- package/style/themes/theme-sbanken/properties.js.map +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-basis.css +3 -2
- package/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-components.css +75 -13
- package/style/themes/theme-sbanken/sbanken-theme-components.min.css +4 -4
- package/style/themes/theme-sbanken/sbanken-theme-extensions.css +3 -0
- package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/style/themes/theme-sbanken/theme-mapping.scss +2 -1
- package/style/themes/theme-ui/ui-theme-components.css +61 -4
- package/style/themes/theme-ui/ui-theme-components.min.css +2 -2
- package/style/themes/theme-ui/ui-theme-extensions.css +3 -0
- package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/umd/dnb-ui-basis.min.js +1 -1
- package/umd/dnb-ui-components.min.js +1 -1
- package/umd/dnb-ui-elements.min.js +1 -1
- package/umd/dnb-ui-extensions.min.js +3 -3
- package/umd/dnb-ui-lib.min.js +1 -1
|
@@ -31,8 +31,9 @@ export default function FormLabel(localProps) {
|
|
|
31
31
|
label_direction
|
|
32
32
|
} = props,
|
|
33
33
|
attributes = _objectWithoutProperties(props, _excluded);
|
|
34
|
+
const isInteractive = !props.disabled && !srOnly && (typeof props.onClick === 'function' || forId || for_id);
|
|
34
35
|
const params = _objectSpread({
|
|
35
|
-
className: classnames('dnb-form-label', (isTrue(vertical) || label_direction === 'vertical') && `dnb-form-label--vertical`, (srOnly || isTrue(sr_only)) && 'dnb-sr-only', createSkeletonClass('font', skeleton, context), createSpacingClasses(props), className, size && `dnb-h--${size}
|
|
36
|
+
className: classnames('dnb-form-label', (isTrue(vertical) || label_direction === 'vertical') && `dnb-form-label--vertical`, (srOnly || isTrue(sr_only)) && 'dnb-sr-only', createSkeletonClass('font', skeleton, context), createSpacingClasses(props), className, size && `dnb-h--${size}`, isInteractive && 'dnb-form-label--interactive'),
|
|
36
37
|
htmlFor: forId || for_id
|
|
37
38
|
}, attributes);
|
|
38
39
|
params['ref'] = innerRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormLabel.js","names":["React","classnames","extendPropsWithContext","isTrue","validateDOMAttributes","createSpacingClasses","createSkeletonClass","skeletonDOMAttributes","pickFormElementProps","Context","FormLabel","localProps","context","useContext","props","skeleton","FormRow","formElement","forId","text","srOnly","vertical","size","element","Element","innerRef","className","children","for_id","sr_only","label_direction","attributes","_objectWithoutProperties","_excluded","params","_objectSpread","htmlFor","createElement","_supportsSpacingProps"],"sources":["../../../../src/components/form-label/FormLabel.tsx"],"sourcesContent":["/**\n * Web FormLabel Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport {\n extendPropsWithContext,\n isTrue,\n validateDOMAttributes,\n} from '../../shared/component-helper'\nimport { createSpacingClasses } from '../space/SpacingHelper'\nimport {\n createSkeletonClass,\n skeletonDOMAttributes,\n} from '../skeleton/SkeletonHelper'\nimport { pickFormElementProps } from '../../shared/helpers/filterValidProps'\nimport Context from '../../shared/Context'\nimport {\n DynamicElement,\n DynamicElementParams,\n SpacingProps,\n} from '../../shared/types'\n\nexport type FormLabelProps = {\n forId?: string\n element?: DynamicElement<HTMLLabelElement>\n text?: React.ReactNode\n size?: 'basis' | 'medium' | 'large'\n id?: string\n skeleton?: boolean\n label?: React.ReactNode\n vertical?: boolean\n srOnly?: boolean\n innerRef?: React.RefObject<HTMLElement>\n\n /** Is not a part of HTMLLabelElement and not documented as of now */\n disabled?: boolean\n\n /** @deprecated use forId instead */\n for_id?: string\n /** @deprecated use srOnly instead */\n sr_only?: boolean\n /** @deprecated use labelDirection instead (was not documented before) */\n label_direction?: 'vertical' | 'horizontal'\n}\n\nexport type FormLabelAllProps = FormLabelProps &\n React.HTMLAttributes<HTMLLabelElement> &\n SpacingProps\n\nexport default function FormLabel(localProps: FormLabelAllProps) {\n const context = React.useContext(Context)\n\n // use only the props from context, who are available here anyway\n const props = extendPropsWithContext(\n localProps,\n null,\n { skeleton: context?.skeleton },\n pickFormElementProps(context?.FormRow), // Deprecated – can be removed in v11\n pickFormElementProps(context?.formElement),\n context?.FormLabel\n )\n\n const {\n forId,\n text,\n srOnly,\n vertical,\n size,\n skeleton,\n element: Element = 'label',\n innerRef,\n className,\n children,\n\n /** @deprecated can be removed in v11 */\n for_id,\n sr_only,\n label_direction,\n\n ...attributes\n } = props\n\n const params = {\n className: classnames(\n 'dnb-form-label',\n (isTrue(vertical) || label_direction === 'vertical') &&\n `dnb-form-label--vertical`,\n (srOnly || isTrue(sr_only)) && 'dnb-sr-only',\n size && `dnb-h--${size}`,\n createSkeletonClass('font', skeleton, context),\n createSpacingClasses(props),\n className\n ),\n htmlFor: forId || for_id,\n ...(attributes as DynamicElementParams),\n }\n\n params['ref'] = innerRef\n\n skeletonDOMAttributes(params, skeleton, context)\n validateDOMAttributes(localProps, params)\n\n return <Element {...params}>{text || children}</Element>\n}\n\nFormLabel._supportsSpacingProps = true\n"],"mappings":";;;;;AAKA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,sBAAsB,EACtBC,MAAM,EACNC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SACEC,mBAAmB,EACnBC,qBAAqB,QAChB,4BAA4B;AACnC,SAASC,oBAAoB,QAAQ,uCAAuC;AAC5E,OAAOC,OAAO,MAAM,sBAAsB;AAkC1C,eAAe,SAASC,SAASA,CAACC,UAA6B,EAAE;EAC/D,MAAMC,OAAO,GAAGZ,KAAK,CAACa,UAAU,CAACJ,OAAO,CAAC;EAGzC,MAAMK,KAAK,GAAGZ,sBAAsB,CAClCS,UAAU,EACV,IAAI,EACJ;IAAEI,QAAQ,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG;EAAS,CAAC,EAC/BP,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,OAAO,CAAC,EACtCR,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,WAAW,CAAC,EAC1CL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEF,SACX,CAAC;EAED,MAAM;MACJQ,KAAK;MACLC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,IAAI;MACJP,QAAQ;MACRQ,OAAO,EAAEC,OAAO,GAAG,OAAO;MAC1BC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MAGRC,MAAM;MACNC,OAAO;MACPC;IAGF,CAAC,GAAGhB,KAAK;IADJiB,UAAU,GAAAC,wBAAA,CACXlB,KAAK,EAAAmB,SAAA;EAET,MAAMC,MAAM,GAAAC,aAAA;
|
|
1
|
+
{"version":3,"file":"FormLabel.js","names":["React","classnames","extendPropsWithContext","isTrue","validateDOMAttributes","createSpacingClasses","createSkeletonClass","skeletonDOMAttributes","pickFormElementProps","Context","FormLabel","localProps","context","useContext","props","skeleton","FormRow","formElement","forId","text","srOnly","vertical","size","element","Element","innerRef","className","children","for_id","sr_only","label_direction","attributes","_objectWithoutProperties","_excluded","isInteractive","disabled","onClick","params","_objectSpread","htmlFor","createElement","_supportsSpacingProps"],"sources":["../../../../src/components/form-label/FormLabel.tsx"],"sourcesContent":["/**\n * Web FormLabel Component\n *\n */\n\nimport React from 'react'\nimport classnames from 'classnames'\nimport {\n extendPropsWithContext,\n isTrue,\n validateDOMAttributes,\n} from '../../shared/component-helper'\nimport { createSpacingClasses } from '../space/SpacingHelper'\nimport {\n createSkeletonClass,\n skeletonDOMAttributes,\n} from '../skeleton/SkeletonHelper'\nimport { pickFormElementProps } from '../../shared/helpers/filterValidProps'\nimport Context from '../../shared/Context'\nimport {\n DynamicElement,\n DynamicElementParams,\n SpacingProps,\n} from '../../shared/types'\n\nexport type FormLabelProps = {\n forId?: string\n element?: DynamicElement<HTMLLabelElement>\n text?: React.ReactNode\n size?: 'basis' | 'medium' | 'large'\n id?: string\n skeleton?: boolean\n label?: React.ReactNode\n vertical?: boolean\n srOnly?: boolean\n innerRef?: React.RefObject<HTMLElement>\n\n /** Is not a part of HTMLLabelElement and not documented as of now */\n disabled?: boolean\n\n /** @deprecated use forId instead */\n for_id?: string\n /** @deprecated use srOnly instead */\n sr_only?: boolean\n /** @deprecated use labelDirection instead (was not documented before) */\n label_direction?: 'vertical' | 'horizontal'\n}\n\nexport type FormLabelAllProps = FormLabelProps &\n React.HTMLAttributes<HTMLLabelElement> &\n SpacingProps\n\nexport default function FormLabel(localProps: FormLabelAllProps) {\n const context = React.useContext(Context)\n\n // use only the props from context, who are available here anyway\n const props = extendPropsWithContext(\n localProps,\n null,\n { skeleton: context?.skeleton },\n pickFormElementProps(context?.FormRow), // Deprecated – can be removed in v11\n pickFormElementProps(context?.formElement),\n context?.FormLabel\n )\n\n const {\n forId,\n text,\n srOnly,\n vertical,\n size,\n skeleton,\n element: Element = 'label',\n innerRef,\n className,\n children,\n\n /** @deprecated can be removed in v11 */\n for_id,\n sr_only,\n label_direction,\n\n ...attributes\n } = props\n\n const isInteractive =\n !props.disabled &&\n !srOnly &&\n (typeof props.onClick === 'function' || forId || for_id)\n\n const params = {\n className: classnames(\n 'dnb-form-label',\n (isTrue(vertical) || label_direction === 'vertical') &&\n `dnb-form-label--vertical`,\n (srOnly || isTrue(sr_only)) && 'dnb-sr-only',\n size && `dnb-h--${size}`,\n isInteractive && 'dnb-form-label--interactive',\n createSkeletonClass('font', skeleton, context),\n createSpacingClasses(props),\n className\n ),\n htmlFor: forId || for_id,\n ...(attributes as DynamicElementParams),\n }\n\n params['ref'] = innerRef\n\n skeletonDOMAttributes(params, skeleton, context)\n validateDOMAttributes(localProps, params)\n\n return <Element {...params}>{text || children}</Element>\n}\n\nFormLabel._supportsSpacingProps = true\n"],"mappings":";;;;;AAKA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,sBAAsB,EACtBC,MAAM,EACNC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SACEC,mBAAmB,EACnBC,qBAAqB,QAChB,4BAA4B;AACnC,SAASC,oBAAoB,QAAQ,uCAAuC;AAC5E,OAAOC,OAAO,MAAM,sBAAsB;AAkC1C,eAAe,SAASC,SAASA,CAACC,UAA6B,EAAE;EAC/D,MAAMC,OAAO,GAAGZ,KAAK,CAACa,UAAU,CAACJ,OAAO,CAAC;EAGzC,MAAMK,KAAK,GAAGZ,sBAAsB,CAClCS,UAAU,EACV,IAAI,EACJ;IAAEI,QAAQ,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG;EAAS,CAAC,EAC/BP,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,OAAO,CAAC,EACtCR,oBAAoB,CAACI,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,WAAW,CAAC,EAC1CL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEF,SACX,CAAC;EAED,MAAM;MACJQ,KAAK;MACLC,IAAI;MACJC,MAAM;MACNC,QAAQ;MACRC,IAAI;MACJP,QAAQ;MACRQ,OAAO,EAAEC,OAAO,GAAG,OAAO;MAC1BC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MAGRC,MAAM;MACNC,OAAO;MACPC;IAGF,CAAC,GAAGhB,KAAK;IADJiB,UAAU,GAAAC,wBAAA,CACXlB,KAAK,EAAAmB,SAAA;EAET,MAAMC,aAAa,GACjB,CAACpB,KAAK,CAACqB,QAAQ,IACf,CAACf,MAAM,KACN,OAAON,KAAK,CAACsB,OAAO,KAAK,UAAU,IAAIlB,KAAK,IAAIU,MAAM,CAAC;EAE1D,MAAMS,MAAM,GAAAC,aAAA;IACVZ,SAAS,EAAEzB,UAAU,CACnB,gBAAgB,EAChB,CAACE,MAAM,CAACkB,QAAQ,CAAC,IAAIS,eAAe,KAAK,UAAU,KAChD,0BAAyB,EAC5B,CAACV,MAAM,IAAIjB,MAAM,CAAC0B,OAAO,CAAC,KAAK,aAAa,EAG5CvB,mBAAmB,CAAC,MAAM,EAAES,QAAQ,EAAEH,OAAO,CAAC,EAC9CP,oBAAoB,CAACS,KAAK,CAAC,EAC3BY,SAAS,EAJTJ,IAAI,IAAK,UAASA,IAAK,EAAC,EACxBY,aAAa,IAAI,6BAInB,CAAC;IACDK,OAAO,EAAErB,KAAK,IAAIU;EAAM,GACpBG,UAAU,CACf;EAEDM,MAAM,CAAC,KAAK,CAAC,GAAGZ,QAAQ;EAExBlB,qBAAqB,CAAC8B,MAAM,EAAEtB,QAAQ,EAAEH,OAAO,CAAC;EAChDR,qBAAqB,CAACO,UAAU,EAAE0B,MAAM,CAAC;EAEzC,OAAOrC,KAAA,CAAAwC,aAAA,CAAChB,OAAO,EAAKa,MAAM,EAAGlB,IAAI,IAAIQ,QAAkB,CAAC;AAC1D;AAEAjB,SAAS,CAAC+B,qBAAqB,GAAG,IAAI"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
.dnb-form-label {
|
|
6
6
|
color: var(--color-black-80);
|
|
7
7
|
}
|
|
8
|
-
.dnb-form-label
|
|
8
|
+
.dnb-form-label--interactive {
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
}
|
|
11
|
-
.dnb-form-label
|
|
11
|
+
.dnb-form-label--interactive:hover {
|
|
12
12
|
color: var(--color-sea-green);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.dnb-form-label{color:var(--color-black-80)}.dnb-form-label
|
|
1
|
+
.dnb-form-label{color:var(--color-black-80)}.dnb-form-label--interactive{cursor:pointer}.dnb-form-label--interactive:hover{color:var(--color-sea-green)}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
// sine we use vertical-align: top on the SVG
|
|
12
12
|
// we have to move center the alignment here again
|
|
13
|
-
// else basic text
|
|
13
|
+
// else basic text afterwards will get aligned on top
|
|
14
14
|
vertical-align: middle;
|
|
15
15
|
|
|
16
16
|
font-size: 1rem; // to make sure we have always the same starting point
|
|
@@ -63,7 +63,7 @@ export interface InputMaskedProps
|
|
|
63
63
|
*/
|
|
64
64
|
currency_mask?: InputMaskedCurrencyMask;
|
|
65
65
|
/**
|
|
66
|
-
* Use it to manipulate internal masks. You can use it instead of e.g. `number_mask` or `
|
|
66
|
+
* Use it to manipulate internal masks. You can use it instead of e.g. `number_mask` or `currency_mask`. All options are listed below.
|
|
67
67
|
*/
|
|
68
68
|
mask_options?: InputMaskedMaskOptions;
|
|
69
69
|
/**
|
|
@@ -254,5 +254,4 @@ export interface InputMaskedProps
|
|
|
254
254
|
children?: InputMaskedChildren;
|
|
255
255
|
on_state_update?: (...args: any[]) => any;
|
|
256
256
|
}
|
|
257
|
-
declare const InputMasked: React.FC<InputMaskedProps>;
|
|
258
257
|
export default InputMasked;
|
|
@@ -27,8 +27,6 @@ const InputMasked = props => {
|
|
|
27
27
|
}
|
|
28
28
|
}, _InputMaskedElement || (_InputMaskedElement = React.createElement(InputMaskedElement, null)));
|
|
29
29
|
};
|
|
30
|
-
InputMasked._supportsSpacingProps = true;
|
|
31
|
-
export default InputMasked;
|
|
32
30
|
process.env.NODE_ENV !== "production" ? InputMasked.propTypes = _objectSpread({
|
|
33
31
|
mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.func]),
|
|
34
32
|
number_mask: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.object]),
|
|
@@ -75,4 +73,6 @@ InputMasked.defaultProps = _objectSpread(_objectSpread({}, Input.defaultProps),
|
|
|
75
73
|
on_submit_focus: null,
|
|
76
74
|
on_submit_blur: null
|
|
77
75
|
});
|
|
76
|
+
InputMasked._supportsSpacingProps = true;
|
|
77
|
+
export default InputMasked;
|
|
78
78
|
//# sourceMappingURL=InputMasked.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputMasked.js","names":["React","PropTypes","extendPropsWithContext","InputMaskedContext","InputMaskedElement","Input","inputPropTypes","Context","InputMasked","props","context","useContext","mask","alias","key","test","contextAndProps","useCallback","defaultProps","createElement","Provider","value","_InputMaskedElement","
|
|
1
|
+
{"version":3,"file":"InputMasked.js","names":["React","PropTypes","extendPropsWithContext","InputMaskedContext","InputMaskedElement","Input","inputPropTypes","Context","InputMasked","props","context","useContext","mask","alias","key","test","contextAndProps","useCallback","defaultProps","createElement","Provider","value","_InputMaskedElement","process","env","NODE_ENV","propTypes","_objectSpread","oneOfType","object","array","func","number_mask","string","bool","currency_mask","mask_options","number_format","locale","as_currency","as_number","as_percent","show_mask","show_guide","pipe","keep_char_positions","placeholder_char","inner_ref","on_change","on_submit","on_focus","on_blur","on_submit_focus","on_submit_blur","_supportsSpacingProps"],"sources":["../../../../src/components/input-masked/InputMasked.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/**\n * Web InputMasked Component\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { extendPropsWithContext } from '../../shared/component-helper'\nimport InputMaskedContext from './InputMaskedContext'\nimport InputMaskedElement from './InputMaskedElement'\nimport Input, { inputPropTypes } from '../input/Input'\nimport Context from '../../shared/Context'\n\nconst InputMasked = (props) => {\n const context = React.useContext(Context)\n\n // Remove masks defined in Provider/Context, because it overwrites a custom mask\n if (props?.mask) {\n const alias = context?.InputMasked\n for (const key in alias) {\n if (/^as[_A-Z]|number_mask|currency_mask/.test(key)) {\n delete alias[key]\n }\n }\n }\n\n const contextAndProps = React.useCallback(\n extendPropsWithContext(\n props,\n InputMasked.defaultProps,\n context?.InputMasked\n ),\n [props, InputMasked.defaultProps, context?.InputMasked]\n )\n\n return (\n <InputMaskedContext.Provider\n value={{\n props: contextAndProps,\n context,\n }}\n >\n <InputMaskedElement />\n </InputMaskedContext.Provider>\n )\n}\n\nInputMasked.propTypes = {\n mask: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n PropTypes.func,\n ]),\n number_mask: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.object,\n ]),\n currency_mask: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.object,\n ]),\n mask_options: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n number_format: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n locale: PropTypes.string,\n as_currency: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n as_number: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n as_percent: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n show_mask: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n show_guide: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n pipe: PropTypes.func,\n keep_char_positions: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n ]),\n placeholder_char: PropTypes.string,\n inner_ref: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n on_change: PropTypes.func,\n on_submit: PropTypes.func,\n on_focus: PropTypes.func,\n on_blur: PropTypes.func,\n on_submit_focus: PropTypes.func,\n on_submit_blur: PropTypes.func,\n\n ...inputPropTypes,\n}\n\nInputMasked.defaultProps = {\n ...Input.defaultProps,\n\n mask: null,\n number_mask: null,\n currency_mask: null,\n mask_options: null,\n number_format: null,\n as_currency: null,\n as_number: null,\n as_percent: null,\n locale: null,\n show_mask: false,\n show_guide: true,\n pipe: null,\n keep_char_positions: false,\n placeholder_char: null,\n inner_ref: null,\n\n on_change: null,\n on_submit: null,\n on_focus: null,\n on_blur: null,\n on_submit_focus: null,\n on_submit_blur: null,\n}\n\nInputMasked._supportsSpacingProps = true\n\nexport default InputMasked\n"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SpacingProps } from '../space/types';
|
|
3
|
+
import { FormStatusState, FormStatusText } from '../FormStatus';
|
|
4
|
+
export type MultiInputMaskInput<T extends string> = {
|
|
5
|
+
/**
|
|
6
|
+
* Defines the id for the input. This id is also used to map the input value to the correct property on the objects used for `values` and `onChange` parameters.
|
|
7
|
+
*/
|
|
8
|
+
id: T;
|
|
9
|
+
/**
|
|
10
|
+
* Label used by the input. The label itself is hidden, but required to uphold accessibility standards for screen readers.
|
|
11
|
+
*/
|
|
12
|
+
label: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Each RegExp item in the array defines what the mask should be for each subsequent character in the input. The length sets the size of the input, so an array of two items would produce an input of two characters
|
|
15
|
+
*/
|
|
16
|
+
mask: RegExp[];
|
|
17
|
+
/**
|
|
18
|
+
* Sets the placeholder character used for the input.
|
|
19
|
+
*/
|
|
20
|
+
placeholderCharacter: string;
|
|
21
|
+
};
|
|
22
|
+
export type MultiInputMaskValue<T extends string> = {
|
|
23
|
+
[K in T]: string;
|
|
24
|
+
};
|
|
25
|
+
export type MultiInputMaskProps<T extends string> = {
|
|
26
|
+
/**
|
|
27
|
+
* The label describing the group of inputs inside the components.
|
|
28
|
+
*/
|
|
29
|
+
label?: React.ReactNode;
|
|
30
|
+
/**
|
|
31
|
+
* Use to change the label layout direction. Defaults to `horizontal`.
|
|
32
|
+
*/
|
|
33
|
+
labelDirection?: 'vertical' | 'horizontal';
|
|
34
|
+
/**
|
|
35
|
+
* Used to define the different inputs representing the inputs in the component. The id's defined here is used to map input value to correct property in `values` parameters used in `onChange`
|
|
36
|
+
*/
|
|
37
|
+
inputs: MultiInputMaskInput<T>[];
|
|
38
|
+
/**
|
|
39
|
+
* Values used for the inputs inside the component. Expects an object with keys matching the id's defined in `inputs`
|
|
40
|
+
*/
|
|
41
|
+
values?: MultiInputMaskValue<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Defines the delimiter used to separate the inputs inside the component.
|
|
44
|
+
*/
|
|
45
|
+
delimiter?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Runs when the input value changes. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}`
|
|
48
|
+
*/
|
|
49
|
+
onChange?: (values: MultiInputMaskValue<T>) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message.
|
|
52
|
+
*/
|
|
53
|
+
status?: FormStatusText;
|
|
54
|
+
/**
|
|
55
|
+
* Defines the state of the status. Currently, there are two statuses `[error, info]`. Defaults to `error`.
|
|
56
|
+
*/
|
|
57
|
+
statusState?: FormStatusState;
|
|
58
|
+
} & Omit<React.HTMLProps<HTMLInputElement>, 'onChange' | 'ref' | 'value' | 'label'> & SpacingProps;
|
|
59
|
+
declare function MultiInputMask<T extends string>({ label, labelDirection, inputs, delimiter, onChange: onChangeExternal, disabled, status, statusState, values: defaultValues, className, ...props }: MultiInputMaskProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
export default MultiInputMask;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
+
const _excluded = ["label", "labelDirection", "inputs", "delimiter", "onChange", "disabled", "status", "statusState", "values", "className"];
|
|
6
|
+
import React, { Fragment, useRef } from 'react';
|
|
7
|
+
import Input from '../Input';
|
|
8
|
+
import TextMask from './TextMask';
|
|
9
|
+
import useHandleCursorPosition from './hooks/useHandleCursorPosition';
|
|
10
|
+
import classnames from 'classnames';
|
|
11
|
+
import FormLabel from '../FormLabel';
|
|
12
|
+
import { createSpacingClasses } from '../space/SpacingHelper';
|
|
13
|
+
import { useMultiInputValue } from './hooks/useMultiInputValues';
|
|
14
|
+
function MultiInputMask(_ref) {
|
|
15
|
+
let {
|
|
16
|
+
label,
|
|
17
|
+
labelDirection = 'horizontal',
|
|
18
|
+
inputs,
|
|
19
|
+
delimiter,
|
|
20
|
+
onChange: onChangeExternal,
|
|
21
|
+
disabled,
|
|
22
|
+
status,
|
|
23
|
+
statusState,
|
|
24
|
+
values: defaultValues,
|
|
25
|
+
className
|
|
26
|
+
} = _ref,
|
|
27
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
28
|
+
const [values, onChange] = useMultiInputValue({
|
|
29
|
+
inputs,
|
|
30
|
+
defaultValues,
|
|
31
|
+
callback: onChangeExternal
|
|
32
|
+
});
|
|
33
|
+
const inputRefs = useRef([]);
|
|
34
|
+
const {
|
|
35
|
+
onKeyDown
|
|
36
|
+
} = useHandleCursorPosition(inputRefs.current, getKeysToHandle());
|
|
37
|
+
const WrapperElement = label ? 'fieldset' : 'div';
|
|
38
|
+
return React.createElement(WrapperElement, {
|
|
39
|
+
className: classnames('dnb-multi-input-mask__fieldset', createSpacingClasses(props), labelDirection === 'horizontal' && 'dnb-multi-input-mask__fieldset--horizontal')
|
|
40
|
+
}, label && React.createElement(FormLabel, {
|
|
41
|
+
className: 'dnb-multi-input-mask__legend' + (labelDirection === 'horizontal' ? " dnb-multi-input-mask__legend--horizontal" : ""),
|
|
42
|
+
element: "legend",
|
|
43
|
+
onClick: onLegendClick,
|
|
44
|
+
disabled: disabled,
|
|
45
|
+
vertical: labelDirection === 'vertical'
|
|
46
|
+
}, React.createElement("span", null, label)), React.createElement(Input, _extends({}, props, {
|
|
47
|
+
className: classnames('dnb-multi-input-mask', className),
|
|
48
|
+
disabled: disabled,
|
|
49
|
+
status: status,
|
|
50
|
+
status_state: statusState,
|
|
51
|
+
input_element: inputs.map((input, index) => React.createElement(Fragment, {
|
|
52
|
+
key: input.id
|
|
53
|
+
}, React.createElement(MultiInputMaskInput, _extends({}, input, {
|
|
54
|
+
value: values[input.id],
|
|
55
|
+
delimiter: index !== inputs.length - 1 ? delimiter : undefined,
|
|
56
|
+
onKeyDown: onKeyDown,
|
|
57
|
+
onChange: onChange,
|
|
58
|
+
disabled: disabled,
|
|
59
|
+
inputRef: getInputRef
|
|
60
|
+
}))))
|
|
61
|
+
})));
|
|
62
|
+
function onLegendClick() {
|
|
63
|
+
if (disabled) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const firstInput = inputRefs.current[0].current;
|
|
67
|
+
firstInput.focus();
|
|
68
|
+
firstInput.setSelectionRange(0, 0);
|
|
69
|
+
}
|
|
70
|
+
function getInputRef(ref) {
|
|
71
|
+
const inputRef = ref === null || ref === void 0 ? void 0 : ref.inputRef;
|
|
72
|
+
if (inputRef && !inputRefs.current.includes(inputRef)) {
|
|
73
|
+
inputRefs.current.push(inputRef);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function getKeysToHandle() {
|
|
77
|
+
const uniqueMasks = getUniqueMasks();
|
|
78
|
+
if (uniqueMasks.size === 1) {
|
|
79
|
+
const pattern = uniqueMasks.values().next().value.replace(/\//g, '');
|
|
80
|
+
return new RegExp(pattern);
|
|
81
|
+
}
|
|
82
|
+
return inputs.reduce((keys, _ref2) => {
|
|
83
|
+
let {
|
|
84
|
+
id,
|
|
85
|
+
mask
|
|
86
|
+
} = _ref2;
|
|
87
|
+
keys[`${id}__input`] = mask;
|
|
88
|
+
return keys;
|
|
89
|
+
}, {});
|
|
90
|
+
}
|
|
91
|
+
function getUniqueMasks() {
|
|
92
|
+
const masks = new Set();
|
|
93
|
+
inputs.forEach(input => {
|
|
94
|
+
input.mask.forEach(pattern => masks.add(String(pattern)));
|
|
95
|
+
});
|
|
96
|
+
return masks;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function MultiInputMaskInput(_ref3) {
|
|
100
|
+
let {
|
|
101
|
+
id,
|
|
102
|
+
label,
|
|
103
|
+
value,
|
|
104
|
+
mask,
|
|
105
|
+
placeholderCharacter,
|
|
106
|
+
delimiter,
|
|
107
|
+
disabled,
|
|
108
|
+
inputRef,
|
|
109
|
+
onKeyDown,
|
|
110
|
+
onChange
|
|
111
|
+
} = _ref3;
|
|
112
|
+
return React.createElement(React.Fragment, null, React.createElement(TextMask, {
|
|
113
|
+
id: `${id}__input`,
|
|
114
|
+
className: "dnb-input__input dnb-multi-input-mask__input" + (value ? " dnb-multi-input-mask__input--highlight" : ""),
|
|
115
|
+
disabled: disabled,
|
|
116
|
+
size: mask.length,
|
|
117
|
+
mask: mask,
|
|
118
|
+
value: value !== null && value !== void 0 ? value : '',
|
|
119
|
+
placeholderChar: placeholderCharacter,
|
|
120
|
+
guide: true,
|
|
121
|
+
showMask: true,
|
|
122
|
+
keepCharPositions: false,
|
|
123
|
+
"aria-labelledby": `${id}__label`,
|
|
124
|
+
ref: inputRef,
|
|
125
|
+
onKeyDown: onKeyDown,
|
|
126
|
+
onFocus: onFocus,
|
|
127
|
+
onChange: event => {
|
|
128
|
+
onChange(id, removePlaceholder(event.target.value, placeholderCharacter));
|
|
129
|
+
}
|
|
130
|
+
}), React.createElement("label", {
|
|
131
|
+
id: `${id}__label`,
|
|
132
|
+
htmlFor: `${id}__input`,
|
|
133
|
+
hidden: true
|
|
134
|
+
}, label), delimiter && React.createElement("span", {
|
|
135
|
+
"aria-hidden": true,
|
|
136
|
+
className: 'dnb-multi-input-mask__delimiter' + (value ? " dnb-multi-input-mask__delimiter--highlight" : "")
|
|
137
|
+
}, delimiter));
|
|
138
|
+
function removePlaceholder(value, placeholder) {
|
|
139
|
+
return value.replace(RegExp(placeholder, 'gm'), '');
|
|
140
|
+
}
|
|
141
|
+
function onFocus(_ref4) {
|
|
142
|
+
let {
|
|
143
|
+
target
|
|
144
|
+
} = _ref4;
|
|
145
|
+
target.focus();
|
|
146
|
+
target.select();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export default MultiInputMask;
|
|
150
|
+
//# sourceMappingURL=MultiInputMask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiInputMask.js","names":["React","Fragment","useRef","Input","TextMask","useHandleCursorPosition","classnames","FormLabel","createSpacingClasses","useMultiInputValue","MultiInputMask","_ref","label","labelDirection","inputs","delimiter","onChange","onChangeExternal","disabled","status","statusState","values","defaultValues","className","props","_objectWithoutProperties","_excluded","callback","inputRefs","onKeyDown","current","getKeysToHandle","WrapperElement","createElement","element","onClick","onLegendClick","vertical","_extends","status_state","input_element","map","input","index","key","id","MultiInputMaskInput","value","length","undefined","inputRef","getInputRef","firstInput","focus","setSelectionRange","ref","includes","push","uniqueMasks","getUniqueMasks","size","pattern","next","replace","RegExp","reduce","keys","_ref2","mask","masks","Set","forEach","add","String","_ref3","placeholderCharacter","placeholderChar","guide","showMask","keepCharPositions","onFocus","event","removePlaceholder","target","htmlFor","hidden","placeholder","_ref4","select"],"sources":["../../../../src/components/input-masked/MultiInputMask.tsx"],"sourcesContent":["import React, { Fragment, MutableRefObject, useRef } from 'react'\nimport Input from '../Input'\nimport TextMask from './TextMask'\nimport useHandleCursorPosition from './hooks/useHandleCursorPosition'\nimport classnames from 'classnames'\nimport FormLabel from '../FormLabel'\nimport { SpacingProps } from '../space/types'\nimport { createSpacingClasses } from '../space/SpacingHelper'\nimport { FormStatusState, FormStatusText } from '../FormStatus'\nimport { useMultiInputValue } from './hooks/useMultiInputValues'\n\nexport type MultiInputMaskInput<T extends string> = {\n /**\n * Defines the id for the input. This id is also used to map the input value to the correct property on the objects used for `values` and `onChange` parameters.\n */\n id: T\n /**\n * Label used by the input. The label itself is hidden, but required to uphold accessibility standards for screen readers.\n */\n label: React.ReactNode\n /**\n * Each RegExp item in the array defines what the mask should be for each subsequent character in the input. The length sets the size of the input, so an array of two items would produce an input of two characters\n */\n mask: RegExp[]\n /**\n * Sets the placeholder character used for the input.\n */\n placeholderCharacter: string\n}\n\nexport type MultiInputMaskValue<T extends string> = {\n // eslint-disable-next-line no-unused-vars\n [K in T]: string\n}\n\nexport type MultiInputMaskProps<T extends string> = {\n /**\n * The label describing the group of inputs inside the components.\n */\n label?: React.ReactNode\n /**\n * Use to change the label layout direction. Defaults to `horizontal`.\n */\n labelDirection?: 'vertical' | 'horizontal'\n /**\n * Used to define the different inputs representing the inputs in the component. The id's defined here is used to map input value to correct property in `values` parameters used in `onChange`\n */\n inputs: MultiInputMaskInput<T>[]\n /**\n * Values used for the inputs inside the component. Expects an object with keys matching the id's defined in `inputs`\n */\n values?: MultiInputMaskValue<T>\n /**\n * Defines the delimiter used to separate the inputs inside the component.\n */\n delimiter?: string\n /**\n * Runs when the input value changes. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}`\n */\n onChange?: (values: MultiInputMaskValue<T>) => void\n /**\n * Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message.\n */\n status?: FormStatusText\n /**\n * Defines the state of the status. Currently, there are two statuses `[error, info]`. Defaults to `error`.\n */\n statusState?: FormStatusState\n} & Omit<\n React.HTMLProps<HTMLInputElement>,\n 'onChange' | 'ref' | 'value' | 'label'\n> &\n SpacingProps\n\nfunction MultiInputMask<T extends string>({\n label,\n labelDirection = 'horizontal',\n inputs,\n delimiter,\n onChange: onChangeExternal,\n disabled,\n status,\n statusState,\n values: defaultValues,\n className,\n ...props\n}: MultiInputMaskProps<T>) {\n const [values, onChange] = useMultiInputValue({\n inputs,\n defaultValues,\n callback: onChangeExternal,\n })\n\n const inputRefs = useRef<Array<MutableRefObject<HTMLInputElement>>>([])\n\n const { onKeyDown } = useHandleCursorPosition(\n inputRefs.current,\n getKeysToHandle()\n )\n\n const WrapperElement = label ? 'fieldset' : 'div'\n\n return (\n <WrapperElement\n className={classnames(\n 'dnb-multi-input-mask__fieldset',\n labelDirection === 'horizontal' &&\n 'dnb-multi-input-mask__fieldset--horizontal',\n createSpacingClasses(props)\n )}\n >\n {label && (\n <FormLabel\n className={classnames(\n 'dnb-multi-input-mask__legend',\n labelDirection === 'horizontal' &&\n 'dnb-multi-input-mask__legend--horizontal'\n )}\n element=\"legend\"\n onClick={onLegendClick}\n disabled={disabled}\n vertical={labelDirection === 'vertical'}\n >\n {/* This <span/> wrapper is needed to make hover work in Safari Desktop */}\n <span>{label}</span>\n </FormLabel>\n )}\n <Input\n {...props}\n className={classnames('dnb-multi-input-mask', className)}\n disabled={disabled}\n status={status}\n status_state={statusState}\n input_element={inputs.map((input, index) => (\n <Fragment key={input.id}>\n <MultiInputMaskInput\n {...input}\n value={values[input.id]}\n delimiter={\n index !== inputs.length - 1 ? delimiter : undefined\n }\n onKeyDown={onKeyDown}\n onChange={onChange}\n disabled={disabled}\n inputRef={getInputRef}\n />\n </Fragment>\n ))}\n />\n </WrapperElement>\n )\n\n // Event handlers\n function onLegendClick() {\n if (disabled) {\n return\n }\n\n const firstInput = inputRefs.current[0].current\n\n firstInput.focus()\n firstInput.setSelectionRange(0, 0)\n }\n\n // Utilities\n function getInputRef(ref: any) {\n const inputRef = ref?.inputRef\n\n if (inputRef && !inputRefs.current.includes(inputRef)) {\n inputRefs.current.push(inputRef)\n }\n }\n\n function getKeysToHandle() {\n const uniqueMasks = getUniqueMasks()\n\n // Return the only one RegExp since all the inputs are using the same mask\n if (uniqueMasks.size === 1) {\n const pattern = uniqueMasks.values().next().value.replace(/\\//g, '')\n return new RegExp(pattern)\n }\n\n // If there are multiple types of masks used, then map the maps to an object based on input ids\n // So that useHandleCursorPosition can do a per character test to see if the pressed key should be handled or not\n return inputs.reduce(\n (keys, { id, mask }) => {\n keys[`${id}__input`] = mask\n\n return keys\n },\n {} as Record<`${T}__input`, RegExp[]>\n )\n }\n\n function getUniqueMasks() {\n const masks = new Set()\n\n inputs.forEach((input) => {\n input.mask.forEach((pattern) => masks.add(String(pattern)))\n })\n\n return masks\n }\n}\n\ntype MultiInputMaskInputProps<T extends string> =\n MultiInputMaskInput<T> & {\n id: MultiInputMaskInput<T>['id']\n label: MultiInputMaskInput<T>['label']\n value: string\n mask: MultiInputMaskInput<T>['mask']\n placeholderCharacter: MultiInputMaskInput<T>['placeholderCharacter']\n delimiter?: MultiInputMaskProps<T>['delimiter']\n disabled: boolean\n onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void\n onChange: (\n id: string,\n placeholderCharacter: MultiInputMaskInput<T>['placeholderCharacter']\n ) => void\n inputRef: any\n }\n\nfunction MultiInputMaskInput<T extends string>({\n id,\n label,\n value,\n mask,\n placeholderCharacter,\n delimiter,\n disabled,\n inputRef,\n onKeyDown,\n onChange,\n}: MultiInputMaskInputProps<T>) {\n return (\n <>\n <TextMask\n id={`${id}__input`}\n className={classnames(\n 'dnb-input__input',\n 'dnb-multi-input-mask__input',\n value && 'dnb-multi-input-mask__input--highlight'\n )}\n disabled={disabled}\n size={mask.length}\n mask={mask}\n value={value ?? ''}\n placeholderChar={placeholderCharacter}\n guide={true}\n showMask={true}\n keepCharPositions={false} // so we can overwrite next value, if it already exists\n aria-labelledby={`${id}__label`}\n ref={inputRef}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onChange={(event) => {\n onChange(\n id,\n removePlaceholder(event.target.value, placeholderCharacter)\n )\n }}\n />\n <label id={`${id}__label`} htmlFor={`${id}__input`} hidden>\n {label}\n </label>\n {delimiter && (\n <span\n aria-hidden\n className={classnames(\n 'dnb-multi-input-mask__delimiter',\n value && 'dnb-multi-input-mask__delimiter--highlight'\n )}\n >\n {delimiter}\n </span>\n )}\n </>\n )\n\n function removePlaceholder(value: string, placeholder: string) {\n return value.replace(RegExp(placeholder, 'gm'), '')\n }\n\n function onFocus({ target }: React.FocusEvent<HTMLInputElement>) {\n target.focus()\n target.select()\n }\n}\n\nexport default MultiInputMask\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export type TextMaskInputElement =
|
|
|
13
13
|
export type TextMaskValue = string | number;
|
|
14
14
|
export interface TextMaskProps extends React.HTMLProps<HTMLElement> {
|
|
15
15
|
mask: TextMaskMask;
|
|
16
|
-
inputRef?:
|
|
16
|
+
inputRef?: React.MutableRefObject<HTMLInputElement>;
|
|
17
17
|
inputElement?: TextMaskInputElement;
|
|
18
18
|
onChange?: (...args: any[]) => any;
|
|
19
19
|
guide?: boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
declare function useHandleCursorPosition(inputRefs: MutableRefObject<HTMLInputElement>[], keysToHandle?: RegExp | {
|
|
3
|
+
[inputId: string]: RegExp[];
|
|
4
|
+
}): {
|
|
5
|
+
onKeyDown: (event: React.KeyboardEvent) => void;
|
|
6
|
+
};
|
|
7
|
+
export default useHandleCursorPosition;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
function useHandleCursorPosition(inputRefs, keysToHandle) {
|
|
5
|
+
const inputList = useRef(refsToInputList(inputRefs));
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
inputList.current = refsToInputList(inputRefs);
|
|
8
|
+
}, [inputRefs]);
|
|
9
|
+
function onKeyDown(event) {
|
|
10
|
+
var _getKeysToHandle;
|
|
11
|
+
const inputs = inputList.current;
|
|
12
|
+
const input = event.target;
|
|
13
|
+
const pressedKey = event.key;
|
|
14
|
+
const hasPressedKeysToHandle = ((_getKeysToHandle = getKeysToHandle({
|
|
15
|
+
keysToHandle,
|
|
16
|
+
input
|
|
17
|
+
})) === null || _getKeysToHandle === void 0 ? void 0 : _getKeysToHandle.test(pressedKey)) || /(ArrowRight|ArrowLeft|Backspace)/.test(pressedKey);
|
|
18
|
+
const initialSelectionStart = input.selectionStart;
|
|
19
|
+
const inputPosition = getInputPosition(input, inputs);
|
|
20
|
+
window.requestAnimationFrame(() => {
|
|
21
|
+
const caretPosition = getCaretPosition(input);
|
|
22
|
+
if (!hasPressedKeysToHandle) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (caretPosition === 'last' && inputPosition !== 'last' && !(initialSelectionStart === 1 && pressedKey === 'ArrowRight')) {
|
|
26
|
+
return goToInput('next', input, inputs);
|
|
27
|
+
}
|
|
28
|
+
if (caretPosition === 'first' && inputPosition !== 'first' && !(initialSelectionStart === 1 && (pressedKey === 'ArrowLeft' || pressedKey === 'Backspace'))) {
|
|
29
|
+
return goToInput('previous', input, inputs);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
onKeyDown
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function refsToInputList(inputRefs) {
|
|
38
|
+
return inputRefs.map(ref => ref.current).filter(Boolean);
|
|
39
|
+
}
|
|
40
|
+
function getKeysToHandle(_ref) {
|
|
41
|
+
let {
|
|
42
|
+
keysToHandle,
|
|
43
|
+
input
|
|
44
|
+
} = _ref;
|
|
45
|
+
if (!keysToHandle) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
if (keysToHandle instanceof RegExp) {
|
|
49
|
+
return keysToHandle;
|
|
50
|
+
}
|
|
51
|
+
const masks = keysToHandle[input.id];
|
|
52
|
+
const selection = input.selectionStart === input.selectionEnd ? input.selectionStart : undefined;
|
|
53
|
+
if (!selection) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const maskIndex = selection === input.size ? masks.length - 1 : selection;
|
|
57
|
+
return masks[maskIndex];
|
|
58
|
+
}
|
|
59
|
+
function getInputPosition(input, inputs) {
|
|
60
|
+
const firstInput = inputs[0];
|
|
61
|
+
const lastInput = inputs[inputs.length - 1];
|
|
62
|
+
if (input === firstInput) {
|
|
63
|
+
return 'first';
|
|
64
|
+
}
|
|
65
|
+
if (input === lastInput) {
|
|
66
|
+
return 'last';
|
|
67
|
+
}
|
|
68
|
+
return 'non-initial';
|
|
69
|
+
}
|
|
70
|
+
function getSelectionPositions(input) {
|
|
71
|
+
return {
|
|
72
|
+
start: 0,
|
|
73
|
+
end: Number(input.size)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function getCaretPosition(input) {
|
|
77
|
+
const {
|
|
78
|
+
start,
|
|
79
|
+
end
|
|
80
|
+
} = getSelectionPositions(input);
|
|
81
|
+
const selectionStart = input.selectionStart;
|
|
82
|
+
const selectionEnd = input.selectionEnd;
|
|
83
|
+
if (selectionStart === start && selectionEnd === start) {
|
|
84
|
+
return 'first';
|
|
85
|
+
}
|
|
86
|
+
if (selectionStart === end && selectionEnd === end) {
|
|
87
|
+
return 'last';
|
|
88
|
+
}
|
|
89
|
+
return 'non-initial';
|
|
90
|
+
}
|
|
91
|
+
function goToInput(to, input, inputs) {
|
|
92
|
+
const currentInputIndex = inputs.indexOf(input);
|
|
93
|
+
const siblingIndex = to === 'next' ? currentInputIndex + 1 : to === 'previous' ? currentInputIndex - 1 : 0;
|
|
94
|
+
const siblingInput = inputs[siblingIndex];
|
|
95
|
+
const {
|
|
96
|
+
start,
|
|
97
|
+
end
|
|
98
|
+
} = getSelectionPositions(siblingInput);
|
|
99
|
+
siblingInput.focus();
|
|
100
|
+
if (to === 'next') {
|
|
101
|
+
return siblingInput.setSelectionRange(start, start);
|
|
102
|
+
}
|
|
103
|
+
if (to === 'previous') {
|
|
104
|
+
return siblingInput.setSelectionRange(end, end);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export default useHandleCursorPosition;
|
|
108
|
+
//# sourceMappingURL=useHandleCursorPosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHandleCursorPosition.js","names":["useEffect","useRef","useHandleCursorPosition","inputRefs","keysToHandle","inputList","refsToInputList","current","onKeyDown","event","_getKeysToHandle","inputs","input","target","pressedKey","key","hasPressedKeysToHandle","getKeysToHandle","test","initialSelectionStart","selectionStart","inputPosition","getInputPosition","window","requestAnimationFrame","caretPosition","getCaretPosition","goToInput","map","ref","filter","Boolean","_ref","undefined","RegExp","masks","id","selection","selectionEnd","maskIndex","size","length","firstInput","lastInput","getSelectionPositions","start","end","Number","to","currentInputIndex","indexOf","siblingIndex","siblingInput","focus","setSelectionRange"],"sources":["../../../../../src/components/input-masked/hooks/useHandleCursorPosition.ts"],"sourcesContent":["import { MutableRefObject, useEffect, useRef } from 'react'\n\nfunction useHandleCursorPosition(\n inputRefs: MutableRefObject<HTMLInputElement>[],\n keysToHandle?: RegExp | { [inputId: string]: RegExp[] }\n) {\n const inputList = useRef(refsToInputList(inputRefs))\n\n // To keep the refs.current in synch with component of use, or else it wont be possible to navigate to the next input, without triggering a re-render first.\n useEffect(() => {\n inputList.current = refsToInputList(inputRefs)\n }, [inputRefs])\n\n function onKeyDown(event: React.KeyboardEvent) {\n const inputs = inputList.current\n const input = event.target as HTMLInputElement\n\n const pressedKey = event.key\n\n const hasPressedKeysToHandle =\n getKeysToHandle({ keysToHandle, input })?.test(pressedKey) ||\n /(ArrowRight|ArrowLeft|Backspace)/.test(pressedKey)\n\n const initialSelectionStart = input.selectionStart\n\n const inputPosition = getInputPosition(input, inputs)\n\n window.requestAnimationFrame(() => {\n const caretPosition = getCaretPosition(input)\n\n if (!hasPressedKeysToHandle) {\n return // stop here\n }\n\n if (\n caretPosition === 'last' &&\n inputPosition !== 'last' &&\n !(initialSelectionStart === 1 && pressedKey === 'ArrowRight')\n ) {\n return goToInput('next', input, inputs)\n }\n\n if (\n caretPosition === 'first' &&\n inputPosition !== 'first' &&\n !(\n initialSelectionStart === 1 &&\n (pressedKey === 'ArrowLeft' || pressedKey === 'Backspace')\n )\n ) {\n return goToInput('previous', input, inputs)\n }\n })\n }\n\n return { onKeyDown }\n}\n\n// Helpers\nfunction refsToInputList(inputRefs: MutableRefObject<HTMLInputElement>[]) {\n return inputRefs.map((ref) => ref.current).filter(Boolean)\n}\n\ntype GetKeysToHandleParams = {\n keysToHandle: RegExp | { [inputId: string]: RegExp[] }\n input: HTMLInputElement\n}\n\nfunction getKeysToHandle({ keysToHandle, input }: GetKeysToHandleParams) {\n if (!keysToHandle) {\n return undefined\n }\n\n if (keysToHandle instanceof RegExp) {\n return keysToHandle\n }\n\n const masks = keysToHandle[input.id]\n\n const selection =\n input.selectionStart === input.selectionEnd\n ? input.selectionStart\n : undefined\n\n if (!selection) {\n return undefined\n }\n\n const maskIndex = selection === input.size ? masks.length - 1 : selection\n\n return masks[maskIndex]\n}\n\nfunction getInputPosition(\n input: HTMLInputElement,\n inputs: HTMLInputElement[]\n) {\n const firstInput = inputs[0]\n const lastInput = inputs[inputs.length - 1]\n\n if (input === firstInput) {\n return 'first'\n }\n\n if (input === lastInput) {\n return 'last'\n }\n\n return 'non-initial'\n}\n\nfunction getSelectionPositions(input: HTMLInputElement) {\n return { start: 0, end: Number(input.size) }\n}\n\nfunction getCaretPosition(input: HTMLInputElement) {\n const { start, end } = getSelectionPositions(input)\n\n const selectionStart = input.selectionStart\n const selectionEnd = input.selectionEnd\n\n if (selectionStart === start && selectionEnd === start) {\n return 'first'\n }\n\n if (selectionStart === end && selectionEnd === end) {\n return 'last'\n }\n\n return 'non-initial'\n}\n\nfunction goToInput(\n to: 'next' | 'previous',\n input: HTMLInputElement,\n inputs: HTMLInputElement[]\n) {\n const currentInputIndex = inputs.indexOf(input)\n\n const siblingIndex =\n to === 'next'\n ? currentInputIndex + 1\n : to === 'previous'\n ? currentInputIndex - 1\n : 0\n\n const siblingInput = inputs[siblingIndex]\n\n const { start, end } = getSelectionPositions(siblingInput)\n\n siblingInput.focus()\n\n if (to === 'next') {\n return siblingInput.setSelectionRange(start, start)\n }\n\n if (to === 'previous') {\n return siblingInput.setSelectionRange(end, end)\n }\n}\n\nexport default useHandleCursorPosition\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MultiInputMaskProps, MultiInputMaskValue } from '../MultiInputMask';
|
|
2
|
+
type SteppedValuesHook<T extends string> = {
|
|
3
|
+
inputs: MultiInputMaskProps<T>['inputs'];
|
|
4
|
+
defaultValues?: MultiInputMaskProps<T>['values'];
|
|
5
|
+
callback?: (values: MultiInputMaskProps<T>['values']) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function useMultiInputValue<T extends string>({ inputs, defaultValues, callback, }: SteppedValuesHook<T>): readonly [MultiInputMaskValue<T>, (id: string, value: string) => void];
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
export function useMultiInputValue(_ref) {
|
|
8
|
+
let {
|
|
9
|
+
inputs,
|
|
10
|
+
defaultValues,
|
|
11
|
+
callback
|
|
12
|
+
} = _ref;
|
|
13
|
+
const [values, setValues] = useState(defaultValues ? defaultValues : createDefaultValues());
|
|
14
|
+
function createDefaultValues() {
|
|
15
|
+
return inputs.reduce((values, input) => {
|
|
16
|
+
values[input.id] = '';
|
|
17
|
+
return values;
|
|
18
|
+
}, {});
|
|
19
|
+
}
|
|
20
|
+
function onChange(id, value) {
|
|
21
|
+
const updatedValues = _objectSpread(_objectSpread({}, values), {}, {
|
|
22
|
+
[id]: value
|
|
23
|
+
});
|
|
24
|
+
setValues(updatedValues);
|
|
25
|
+
if (callback) {
|
|
26
|
+
callback(updatedValues);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return [values, onChange];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=useMultiInputValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMultiInputValues.js","names":["useState","useMultiInputValue","_ref","inputs","defaultValues","callback","values","setValues","createDefaultValues","reduce","input","id","onChange","value","updatedValues","_objectSpread"],"sources":["../../../../../src/components/input-masked/hooks/useMultiInputValues.ts"],"sourcesContent":["import { useState } from 'react'\nimport {\n MultiInputMaskProps,\n MultiInputMaskValue,\n} from '../MultiInputMask'\n\ntype SteppedValuesHook<T extends string> = {\n inputs: MultiInputMaskProps<T>['inputs']\n defaultValues?: MultiInputMaskProps<T>['values']\n callback?: (values: MultiInputMaskProps<T>['values']) => void\n}\n\nexport function useMultiInputValue<T extends string>({\n inputs,\n defaultValues,\n callback,\n}: SteppedValuesHook<T>) {\n const [values, setValues] = useState<MultiInputMaskValue<T>>(\n defaultValues ? defaultValues : createDefaultValues()\n )\n\n function createDefaultValues() {\n return inputs.reduce((values, input) => {\n values[input.id] = ''\n\n return values\n }, {} as MultiInputMaskValue<T>)\n }\n\n function onChange(id: string, value: string) {\n const updatedValues = { ...values, [id]: value }\n\n setValues(updatedValues)\n if (callback) {\n callback(updatedValues)\n }\n }\n\n return [values, onChange] as const\n}\n"],"mappings":";;;;;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAYhC,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAIT;EAAA,IAJ4B;IACnDC,MAAM;IACNC,aAAa;IACbC;EACoB,CAAC,GAAAH,IAAA;EACrB,MAAM,CAACI,MAAM,EAAEC,SAAS,CAAC,GAAGP,QAAQ,CAClCI,aAAa,GAAGA,aAAa,GAAGI,mBAAmB,CAAC,CACtD,CAAC;EAED,SAASA,mBAAmBA,CAAA,EAAG;IAC7B,OAAOL,MAAM,CAACM,MAAM,CAAC,CAACH,MAAM,EAAEI,KAAK,KAAK;MACtCJ,MAAM,CAACI,KAAK,CAACC,EAAE,CAAC,GAAG,EAAE;MAErB,OAAOL,MAAM;IACf,CAAC,EAAE,CAAC,CAA2B,CAAC;EAClC;EAEA,SAASM,QAAQA,CAACD,EAAU,EAAEE,KAAa,EAAE;IAC3C,MAAMC,aAAa,GAAAC,aAAA,CAAAA,aAAA,KAAQT,MAAM;MAAE,CAACK,EAAE,GAAGE;IAAK,EAAE;IAEhDN,SAAS,CAACO,aAAa,CAAC;IACxB,IAAIT,QAAQ,EAAE;MACZA,QAAQ,CAACS,aAAa,CAAC;IACzB;EACF;EAEA,OAAO,CAACR,MAAM,EAAEM,QAAQ,CAAC;AAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["InputMasked"],"sources":["../../../../src/components/input-masked/index.ts"],"sourcesContent":["/**\n * Component Entry\n *\n */\n\nimport InputMasked from './InputMasked'\nexport default InputMasked\nexport * from './InputMasked'\n"],"mappings":"AAKA,OAAOA,WAAW,MAAM,eAAe;AACvC,eAAeA,WAAW;AAC1B,cAAc,eAAe"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["InputMasked","default","MultiInputMask"],"sources":["../../../../src/components/input-masked/index.ts"],"sourcesContent":["/**\n * Component Entry\n *\n */\n\nimport InputMasked from './InputMasked'\nexport default InputMasked\nexport * from './InputMasked'\n\nexport { default as MultiInputMask } from './MultiInputMask'\nexport * from './MultiInputMask'\n"],"mappings":"AAKA,OAAOA,WAAW,MAAM,eAAe;AACvC,eAAeA,WAAW;AAC1B,cAAc,eAAe;AAE7B,SAASC,OAAO,IAAIC,cAAc,QAAQ,kBAAkB;AAC5D,cAAc,kBAAkB"}
|