@lion/ui 0.22.0 → 0.24.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/README.md +65 -0
- package/components/accordion/src/LionAccordion.js +31 -42
- package/components/accordion/test/lion-accordion.test.js +108 -134
- package/components/button/src/LionButton.js +9 -12
- package/components/button/src/LionButtonReset.js +0 -5
- package/components/button/src/LionButtonSubmit.js +7 -12
- package/components/button/test/demos.screenshots-test.js +50 -11
- package/components/button/test/lion-button.test.js +0 -1
- package/components/button/test-suites/LionButton.suite.js +135 -145
- package/components/button/test-suites/LionButtonReset.suite.js +54 -72
- package/components/button/test-suites/LionButtonSubmit.suite.js +49 -68
- package/components/calendar/src/LionCalendar.js +151 -104
- package/components/calendar/src/calendarStyle.js +0 -1
- package/components/calendar/src/utils/createMonth.js +3 -4
- package/components/calendar/src/utils/createMultipleMonth.js +15 -7
- package/components/calendar/src/utils/createWeek.js +0 -2
- package/components/calendar/src/utils/dataTemplate.js +8 -4
- package/components/calendar/src/utils/dayTemplate.js +0 -6
- package/components/calendar/src/utils/getDayMonthYear.js +6 -2
- package/components/calendar/test/demos.screenshots-test.js +40 -9
- package/components/calendar/test/lion-calendar.test.js +171 -282
- package/components/calendar/test/utils/createMonth.test.js +61 -22
- package/components/calendar/test/utils/createMultipleMonth.test.js +14 -7
- package/components/calendar/test/utils/createWeek.test.js +51 -17
- package/components/calendar/test/utils/dataTemplate.test.js +3 -4
- package/components/calendar/test/utils/dayTemplate.test.js +106 -34
- package/components/calendar/test/utils/getFirstDayNextMonth.test.js +0 -1
- package/components/calendar/test/utils/getLastDayPreviousMonth.test.js +0 -1
- package/components/calendar/test/utils/isSameDate.test.js +0 -1
- package/components/calendar/test/utils/snapshots/monthTemplate_en-GB_Sunday_2018-12.js +1 -2
- package/components/calendar/test-helpers/CalendarObject.js +31 -62
- package/components/calendar/test-helpers/DayObject.js +7 -15
- package/components/calendar/test-suites/LionCalendar.suite.js +7 -9
- package/components/checkbox-group/src/LionCheckboxIndeterminate.js +17 -30
- package/components/checkbox-group/test/lion-checkbox-group-integrations.test.js +0 -1
- package/components/checkbox-group/test/lion-checkbox-group.test.js +21 -16
- package/components/checkbox-group/test/lion-checkbox-indeterminate-integrations.test.js +3 -3
- package/components/checkbox-group/test/lion-checkbox-integrations.test.js +3 -2
- package/components/checkbox-group/test/lion-checkbox.test.js +30 -16
- package/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.js +147 -191
- package/components/collapsible/src/LionCollapsible.js +10 -15
- package/components/collapsible/test/lion-collapsible.test.js +4 -18
- package/components/combobox/src/LionCombobox.js +45 -55
- package/components/combobox/src/utils/makeMatchingTextBold.js +2 -5
- package/components/combobox/src/validators.js +0 -1
- package/components/combobox/test/lion-combobox-integrations.test.js +6 -6
- package/components/combobox/test/lion-combobox.test.js +598 -860
- package/components/combobox/test/validators.test.js +6 -13
- package/components/combobox/test-helpers/combobox-helpers.js +24 -11
- package/components/core/src/DisabledMixin.js +61 -66
- package/components/core/src/DisabledWithTabIndexMixin.js +76 -83
- package/components/core/src/EventTargetShim.js +1 -4
- package/components/core/src/ScopedElementsMixin.js +4 -15
- package/components/core/src/ScopedStylesController.js +1 -5
- package/components/core/src/SlotMixin.js +236 -239
- package/components/core/src/browserDetection.js +5 -12
- package/components/core/test/DisabledMixin.test.js +24 -39
- package/components/core/test/DisabledWithTabIndexMixin.test.js +21 -34
- package/components/core/test/EventTargetShim.test.js +0 -8
- package/components/core/test/ScopedElementsMixin.test.js +22 -38
- package/components/core/test/ScopedStylesController.test.js +11 -20
- package/components/core/test/SlotMixin.test.js +102 -154
- package/components/core/test-helpers/getCachedFixture.js +5 -11
- package/components/core/types/SlotMixinTypes.ts +8 -3
- package/components/dialog/src/LionDialog.js +4 -3
- package/components/dialog/test/lion-dialog.integration.test.js +10 -20
- package/components/dialog/test/lion-dialog.test.js +48 -62
- package/components/dialog/test-helpers/test-router.js +4 -6
- package/components/drawer/src/LionDrawer.js +18 -34
- package/components/drawer/src/drawerStyle.js +0 -1
- package/components/drawer/test/lion-drawer.test.js +1 -17
- package/components/fieldset/test/lion-fieldset.test.js +6 -4
- package/components/form/src/LionForm.js +18 -13
- package/components/form/test/lion-form.test.js +22 -52
- package/components/form-core/src/FocusMixin.js +172 -174
- package/components/form-core/src/FormControlMixin.js +811 -813
- package/components/form-core/src/FormatMixin.js +537 -537
- package/components/form-core/src/InteractionStateMixin.js +196 -183
- package/components/form-core/src/LionField.js +9 -5
- package/components/form-core/src/NativeTextFieldMixin.js +114 -116
- package/components/form-core/src/choice-group/ChoiceGroupMixin.js +322 -357
- package/components/form-core/src/choice-group/ChoiceInputMixin.js +306 -296
- package/components/form-core/src/choice-group/CustomChoiceGroupMixin.js +114 -139
- package/components/form-core/src/form-group/FormElementsHaveNoError.js +0 -2
- package/components/form-core/src/form-group/FormGroupMixin.js +551 -557
- package/components/form-core/src/registration/FormRegisteringMixin.js +72 -71
- package/components/form-core/src/registration/FormRegistrarMixin.js +201 -217
- package/components/form-core/src/registration/FormRegistrarPortalMixin.js +31 -37
- package/components/form-core/src/utils/SyncUpdatableMixin.js +106 -117
- package/components/form-core/src/utils/getAriaElementsInRightDomOrder.js +1 -2
- package/components/form-core/src/validate/LionValidationFeedback.js +12 -8
- package/components/form-core/src/validate/Unparseable.js +4 -2
- package/components/form-core/src/validate/ValidateMixin.js +829 -883
- package/components/form-core/src/validate/Validator.js +3 -6
- package/components/form-core/src/validate/resultValidators/DefaultSuccess.js +1 -2
- package/components/form-core/src/validate/validators/DateValidators.js +0 -5
- package/components/form-core/src/validate/validators/NumberValidators.js +1 -5
- package/components/form-core/src/validate/validators/Required.js +1 -1
- package/components/form-core/src/validate/validators/StringValidators.js +1 -8
- package/components/form-core/test/FocusMixin.test.js +96 -82
- package/components/form-core/test/FormControlMixin.test.js +120 -176
- package/components/form-core/test/FormRegistrationMixins.test.js +0 -2
- package/components/form-core/test/FormatMixin.test.js +0 -1
- package/components/form-core/test/InteractionStateMixin.test.js +0 -1
- package/components/form-core/test/NativeTextFieldMixin.test.js +0 -1
- package/components/form-core/test/choice-group/ChoiceGroupMixin.test.js +0 -1
- package/components/form-core/test/choice-group/ChoiceInputMixin.test.js +0 -1
- package/components/form-core/test/choice-group/CustomChoiceGroupMixin.integrations.test.js +6 -8
- package/components/form-core/test/choice-group/CustomChoiceGroupMixin.test.js +0 -3
- package/components/form-core/test/form-group/FormGroupMixin.test.js +0 -1
- package/components/form-core/test/lion-field.test.js +88 -98
- package/components/form-core/test/utils/SyncUpdatableMixin.test.js +51 -65
- package/components/form-core/test/utils/getAriaElementsInRightDomOrder.test.js +3 -3
- package/components/form-core/test/validate/DateValidators.test.js +5 -27
- package/components/form-core/test/validate/NumberValidators.test.js +4 -16
- package/components/form-core/test/validate/Required.test.js +8 -21
- package/components/form-core/test/validate/ResultValidator.test.js +1 -2
- package/components/form-core/test/validate/StringValidators.test.js +4 -35
- package/components/form-core/test/validate/ValidateMixin.test.js +0 -1
- package/components/form-core/test/validate/ValidateMixinFeedbackPart.test.js +0 -1
- package/components/form-core/test/validate/Validator.test.js +39 -34
- package/components/form-core/test/validate/lion-validation-feedback.test.js +81 -43
- package/components/form-core/test-helpers/ExampleValidators.js +0 -5
- package/components/form-core/test-helpers/getFormControlMembers.js +2 -2
- package/components/form-core/test-helpers/mimicUserInput.js +5 -1
- package/components/form-core/test-suites/FormRegistrationMixins.suite.js +65 -122
- package/components/form-core/test-suites/FormatMixin.suite.js +202 -227
- package/components/form-core/test-suites/InteractionStateMixin.suite.js +47 -60
- package/components/form-core/test-suites/NativeTextFieldMixin.suite.js +8 -11
- package/components/form-core/test-suites/ValidateMixin.suite.js +280 -359
- package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +112 -163
- package/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.js +185 -218
- package/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.js +116 -109
- package/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.js +36 -70
- package/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.js +57 -65
- package/components/form-core/test-suites/form-group/FormGroupMixin.suite.js +664 -523
- package/components/form-core/translations/bg-BG.js +0 -1
- package/components/form-core/translations/cs-CZ.js +0 -1
- package/components/form-core/translations/de-DE.js +0 -1
- package/components/form-core/translations/en-AU.js +0 -1
- package/components/form-core/translations/en-GB.js +0 -1
- package/components/form-core/translations/en-US.js +0 -1
- package/components/form-core/translations/es-ES.js +0 -1
- package/components/form-core/translations/fr-BE.js +0 -1
- package/components/form-core/translations/fr-FR.js +0 -1
- package/components/form-core/translations/hu-HU.js +0 -1
- package/components/form-core/translations/it-IT.js +0 -1
- package/components/form-core/translations/nl-BE.js +0 -1
- package/components/form-core/translations/nl-NL.js +0 -1
- package/components/form-core/translations/pl-PL.js +0 -1
- package/components/form-core/translations/ro-RO.js +0 -1
- package/components/form-core/translations/ru-RU.js +0 -1
- package/components/form-core/translations/sk-SK.js +0 -1
- package/components/form-core/translations/tr-TR.js +0 -1
- package/components/form-core/translations/uk-UA.js +0 -1
- package/components/form-core/types/choice-group/ChoiceGroupMixinTypes.ts +5 -0
- package/components/form-integrations/test/dialog-integrations.test.js +1 -4
- package/components/form-integrations/test/form-group-methods.test.js +28 -31
- package/components/form-integrations/test/form-integrations.test.js +27 -28
- package/components/form-integrations/test/form-validation-integrations.test.js +21 -29
- package/components/form-integrations/test/helpers/umbrella-form.js +3 -5
- package/components/form-integrations/test/model-value-consistency.test.js +75 -77
- package/components/form-integrations/test/model-value-event.test.js +10 -20
- package/components/helpers/src/SbActionLogger.js +13 -17
- package/components/helpers/src/SbLocaleSwitcher.js +5 -5
- package/components/helpers/src/sortEachDepth.js +0 -2
- package/components/helpers/test/renderLitAsNode.test.js +0 -4
- package/components/helpers/test/sb-action-logger.test.js +24 -55
- package/components/icon/src/IconManager.js +0 -2
- package/components/icon/src/LionIcon.js +2 -7
- package/components/icon/src/icons.js +0 -2
- package/components/icon/test/IconManager.test.js +0 -15
- package/components/icon/test/hammer.svg.js +3 -4
- package/components/icon/test/heart.svg.js +3 -4
- package/components/icon/test/lion-icon.test.js +14 -43
- package/components/input/src/LionInput.js +2 -8
- package/components/input/test/input-integrations.test.js +0 -5
- package/components/input/test/lion-input-integrations.test.js +0 -4
- package/components/input/test/lion-input.test.js +28 -58
- package/components/input/test-helpers/getInputMembers.js +2 -2
- package/components/input-amount/src/LionInputAmount.js +37 -26
- package/components/input-amount/src/formatters.js +4 -5
- package/components/input-amount/src/parsers.js +0 -3
- package/components/input-amount/test/formatters.test.js +102 -80
- package/components/input-amount/test/lion-input-amount-integrations.test.js +0 -4
- package/components/input-amount/test/lion-input-amount.test.js +155 -164
- package/components/input-amount/test/parsers.test.js +33 -17
- package/components/input-amount/test/preprocessors.test.js +0 -3
- package/components/input-amount-dropdown/src/LionInputAmountDropdown.js +49 -59
- package/components/input-amount-dropdown/src/currencyUtil.js +8 -7
- package/components/input-amount-dropdown/src/parsers.js +0 -1
- package/components/input-amount-dropdown/src/validators.js +0 -1
- package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +34 -36
- package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +18 -13
- package/components/input-amount-dropdown/test-helpers/mimicUserChangingDropdown.js +5 -1
- package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +132 -107
- package/components/input-date/src/LionInputDate.js +4 -3
- package/components/input-date/test/lion-input-date-integrations.test.js +0 -3
- package/components/input-date/test/lion-input-date.test.js +19 -32
- package/components/input-datepicker/src/LionInputDatepicker.js +17 -29
- package/components/input-datepicker/src/localizeNamespaceLoader.js +1 -2
- package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +0 -3
- package/components/input-datepicker/test/lion-input-datepicker.test.js +88 -153
- package/components/input-datepicker/test-helpers/DatepickerInputObject.js +9 -12
- package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +6 -4
- package/components/input-datepicker/translations/bg-BG.js +0 -1
- package/components/input-datepicker/translations/cs-CZ.js +0 -1
- package/components/input-datepicker/translations/de-DE.js +0 -1
- package/components/input-datepicker/translations/en-AU.js +0 -1
- package/components/input-datepicker/translations/en-GB.js +0 -1
- package/components/input-datepicker/translations/en-US.js +0 -1
- package/components/input-datepicker/translations/es-ES.js +0 -1
- package/components/input-datepicker/translations/fr-BE.js +0 -1
- package/components/input-datepicker/translations/fr-FR.js +0 -1
- package/components/input-datepicker/translations/hu-HU.js +0 -1
- package/components/input-datepicker/translations/it-IT.js +0 -1
- package/components/input-datepicker/translations/nl-BE.js +0 -1
- package/components/input-datepicker/translations/nl-NL.js +0 -1
- package/components/input-datepicker/translations/pl-PL.js +0 -1
- package/components/input-datepicker/translations/ro-RO.js +0 -1
- package/components/input-datepicker/translations/ru-RU.js +0 -1
- package/components/input-datepicker/translations/sk-SK.js +0 -1
- package/components/input-datepicker/translations/tr-TR.js +0 -1
- package/components/input-datepicker/translations/uk-UA.js +0 -1
- package/components/input-email/test/lion-input-email-integrations.test.js +0 -2
- package/components/input-email/test/lion-input-email.test.js +1 -7
- package/components/input-file/src/FileHandle.js +0 -3
- package/components/input-file/src/LionInputFile.js +85 -83
- package/components/input-file/src/LionSelectedFileList.js +12 -12
- package/components/input-file/src/validators.js +10 -9
- package/components/input-file/test/FileValidators.test.js +170 -80
- package/components/input-file/test/lion-input-file.test.js +160 -244
- package/components/input-file/test/lion-selected-file-list.test.js +13 -22
- package/components/input-file/translations/bg-BG.js +0 -1
- package/components/input-file/translations/cs-CZ.js +0 -1
- package/components/input-file/translations/de-DE.js +0 -1
- package/components/input-file/translations/en-AU.js +0 -1
- package/components/input-file/translations/en-GB.js +0 -1
- package/components/input-file/translations/en-PH.js +0 -1
- package/components/input-file/translations/en-US.js +0 -1
- package/components/input-file/translations/en.js +2 -1
- package/components/input-file/translations/es-ES.js +0 -1
- package/components/input-file/translations/fr-BE.js +0 -1
- package/components/input-file/translations/fr-FR.js +0 -1
- package/components/input-file/translations/hu-HU.js +0 -1
- package/components/input-file/translations/id-ID.js +0 -1
- package/components/input-file/translations/id.js +2 -1
- package/components/input-file/translations/it-IT.js +0 -1
- package/components/input-file/translations/nl-BE.js +0 -1
- package/components/input-file/translations/nl-NL.js +0 -1
- package/components/input-file/translations/pl-PL.js +0 -1
- package/components/input-file/translations/ro-RO.js +0 -1
- package/components/input-file/translations/ru-RU.js +0 -1
- package/components/input-file/translations/sk-SK.js +0 -1
- package/components/input-file/translations/uk-UA.js +0 -1
- package/components/input-file/translations/zh-CN.js +0 -1
- package/components/input-iban/src/validators.js +6 -11
- package/components/input-iban/test/formatters.test.js +0 -3
- package/components/input-iban/test/lion-input-iban-integrations.test.js +0 -2
- package/components/input-iban/test/lion-input-iban.test.js +1 -9
- package/components/input-iban/test/parsers.test.js +0 -2
- package/components/input-iban/test/validators.test.js +0 -12
- package/components/input-iban/translations/bg-BG.js +0 -1
- package/components/input-iban/translations/cs-CZ.js +0 -1
- package/components/input-iban/translations/de-DE.js +0 -1
- package/components/input-iban/translations/en-AU.js +0 -1
- package/components/input-iban/translations/en-GB.js +0 -1
- package/components/input-iban/translations/en-US.js +0 -1
- package/components/input-iban/translations/es-ES.js +0 -1
- package/components/input-iban/translations/fr-BE.js +0 -1
- package/components/input-iban/translations/fr-FR.js +0 -1
- package/components/input-iban/translations/hu-HU.js +0 -1
- package/components/input-iban/translations/it-IT.js +0 -1
- package/components/input-iban/translations/nl-BE.js +0 -1
- package/components/input-iban/translations/nl-NL.js +0 -1
- package/components/input-iban/translations/pl-PL.js +0 -1
- package/components/input-iban/translations/ro-RO.js +0 -1
- package/components/input-iban/translations/ru-RU.js +0 -1
- package/components/input-iban/translations/sk-SK.js +0 -1
- package/components/input-iban/translations/uk-UA.js +0 -1
- package/components/input-range/src/LionInputRange.js +18 -19
- package/components/input-range/test/lion-input-range.test.js +23 -48
- package/components/input-range/translations/bg-BG.js +0 -1
- package/components/input-range/translations/cs-CZ.js +0 -1
- package/components/input-range/translations/de-DE.js +0 -1
- package/components/input-range/translations/en-AU.js +0 -1
- package/components/input-range/translations/en-GB.js +0 -1
- package/components/input-range/translations/en-PH.js +0 -1
- package/components/input-range/translations/en-US.js +0 -1
- package/components/input-range/translations/es-ES.js +0 -1
- package/components/input-range/translations/fr-BE.js +0 -1
- package/components/input-range/translations/fr-FR.js +0 -1
- package/components/input-range/translations/hu-HU.js +0 -1
- package/components/input-range/translations/it-IT.js +0 -1
- package/components/input-range/translations/nl-BE.js +0 -1
- package/components/input-range/translations/nl-NL.js +0 -1
- package/components/input-range/translations/pl-PL.js +0 -1
- package/components/input-range/translations/ro-RO.js +0 -1
- package/components/input-range/translations/ru-RU.js +0 -1
- package/components/input-range/translations/sk-SK.js +0 -1
- package/components/input-range/translations/uk-UA.js +0 -1
- package/components/input-range/translations/zh-CN.js +0 -1
- package/components/input-stepper/src/LionInputStepper.js +19 -38
- package/components/input-stepper/test/lion-input-stepper-integrations.test.js +0 -1
- package/components/input-stepper/test/lion-input-stepper.test.js +0 -1
- package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +0 -2
- package/components/input-stepper/test-suites/lion-input-stepper.suite.js +56 -105
- package/components/input-stepper/translations/bg-BG.js +0 -1
- package/components/input-stepper/translations/cs-CZ.js +0 -1
- package/components/input-stepper/translations/de-DE.js +0 -1
- package/components/input-stepper/translations/en-AU.js +0 -1
- package/components/input-stepper/translations/en-GB.js +0 -1
- package/components/input-stepper/translations/en-US.js +0 -1
- package/components/input-stepper/translations/es-ES.js +0 -1
- package/components/input-stepper/translations/fr-BE.js +0 -1
- package/components/input-stepper/translations/fr-FR.js +0 -1
- package/components/input-stepper/translations/hu-HU.js +0 -1
- package/components/input-stepper/translations/it-IT.js +0 -1
- package/components/input-stepper/translations/nl-BE.js +0 -1
- package/components/input-stepper/translations/nl-NL.js +0 -1
- package/components/input-stepper/translations/pl-PL.js +0 -1
- package/components/input-stepper/translations/ro-RO.js +0 -1
- package/components/input-stepper/translations/ru-RU.js +0 -1
- package/components/input-stepper/translations/sk-SK.js +0 -1
- package/components/input-stepper/translations/uk-UA.js +0 -1
- package/components/input-tel/src/LionInputTel.js +53 -37
- package/components/input-tel/src/PhoneUtilManager.js +6 -4
- package/components/input-tel/src/formatters.js +12 -10
- package/components/input-tel/src/parsers.js +3 -3
- package/components/input-tel/src/preprocessors.js +15 -7
- package/components/input-tel/src/validators.js +4 -6
- package/components/input-tel/test/LionInputTel.test.js +4 -2
- package/components/input-tel/test/formatters.test.js +22 -10
- package/components/input-tel/test/parsers.test.js +40 -11
- package/components/input-tel/test/preprocessors.test.js +24 -13
- package/components/input-tel/test/validators.test.js +15 -13
- package/components/input-tel/test-helpers/mockPhoneUtilManager.js +7 -6
- package/components/input-tel/test-suites/LionInputTel.suite.js +33 -73
- package/components/input-tel/translations/bg-BG.js +0 -1
- package/components/input-tel/translations/cs-CZ.js +0 -1
- package/components/input-tel/translations/de-DE.js +0 -1
- package/components/input-tel/translations/en-AU.js +0 -1
- package/components/input-tel/translations/en-GB.js +0 -1
- package/components/input-tel/translations/en-US.js +0 -1
- package/components/input-tel/translations/es-ES.js +0 -1
- package/components/input-tel/translations/fr-BE.js +0 -1
- package/components/input-tel/translations/fr-FR.js +0 -1
- package/components/input-tel/translations/hu-HU.js +0 -1
- package/components/input-tel/translations/it-IT.js +0 -1
- package/components/input-tel/translations/nl-BE.js +0 -1
- package/components/input-tel/translations/nl-NL.js +0 -1
- package/components/input-tel/translations/pl-PL.js +0 -1
- package/components/input-tel/translations/ro-RO.js +0 -1
- package/components/input-tel/translations/ru-RU.js +0 -1
- package/components/input-tel/translations/sk-SK.js +0 -1
- package/components/input-tel/translations/uk-UA.js +0 -1
- package/components/input-tel-dropdown/src/LionInputTelDropdown.js +10 -28
- package/components/input-tel-dropdown/src/regionCodeToLocale.js +3 -1
- package/components/input-tel-dropdown/test/LionInputTelDropdown.test.js +31 -38
- package/components/input-tel-dropdown/test/regionCodeToLocale.test.js +0 -1
- package/components/input-tel-dropdown/test-helpers/mimicUserChangingDropdown.js +5 -1
- package/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.js +16 -11
- package/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +54 -79
- package/components/listbox/src/LionListbox.js +4 -1
- package/components/listbox/src/LionOption.js +8 -7
- package/components/listbox/src/LionOptions.js +0 -3
- package/components/listbox/src/ListboxMixin.js +801 -819
- package/components/listbox/test/lion-listbox.test.js +0 -1
- package/components/listbox/test/lion-option.test.js +53 -64
- package/components/listbox/test/lion-options.test.js +3 -4
- package/components/listbox/test-helpers/getListboxMembers.js +6 -3
- package/components/listbox/test-suites/ListboxMixin.suite.js +101 -261
- package/components/listbox/types/ListboxMixinTypes.ts +7 -1
- package/components/localize/src/LocalizeManager.js +40 -40
- package/components/localize/src/LocalizeMixin.js +130 -157
- package/components/localize/src/date/formatDate.js +1 -5
- package/components/localize/src/date/getDateFormatBasedOnLocale.js +5 -3
- package/components/localize/src/date/getMonthNames.js +3 -5
- package/components/localize/src/date/getWeekdayNames.js +1 -5
- package/components/localize/src/date/parseDate.js +5 -20
- package/components/localize/src/date/utils/normalizeIntlDate.js +0 -7
- package/components/localize/src/getLocalizeManager.js +0 -3
- package/components/localize/src/number/formatNumber.js +3 -7
- package/components/localize/src/number/formatNumberToParts.js +52 -18
- package/components/localize/src/number/getCurrencyName.js +5 -5
- package/components/localize/src/number/getFractionDigits.js +4 -4
- package/components/localize/src/number/getSeparatorsFromNumber.js +1 -3
- package/components/localize/src/number/parseNumber.js +0 -3
- package/components/localize/src/number/utils/normalize-format-number-to-parts/forceAddGroupSeparators.js +0 -1
- package/components/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceBetweenCurrencyCodeAndNumber.js +4 -1
- package/components/localize/test/LocalizeManager.test.js +385 -278
- package/components/localize/test/LocalizeMixin.test.js +28 -112
- package/components/localize/test/date/formatDate.test.js +18 -48
- package/components/localize/test/date/getDateFormatBasedOnLocale.test.js +0 -3
- package/components/localize/test/date/getMonthNames.test.js +27 -12
- package/components/localize/test/date/getWeekdayNames.test.js +93 -49
- package/components/localize/test/date/normalizeDateTime.test.js +0 -2
- package/components/localize/test/date/parseDate.test.js +12 -16
- package/components/localize/test/getLocalizeManager.test.js +0 -3
- package/components/localize/test/isLocalizeESModule.test.js +32 -13
- package/components/localize/test/localize.test.js +0 -4
- package/components/localize/test/number/formatNumber.test.js +215 -106
- package/components/localize/test/number/formatNumberToParts.test.js +31 -38
- package/components/localize/test/number/getCurrencyName.test.js +20 -6
- package/components/localize/test/number/getDecimalSeparator.test.js +5 -4
- package/components/localize/test/number/getFractionDigits.test.js +0 -2
- package/components/localize/test/number/getGroupSeparator.test.js +0 -2
- package/components/localize/test/number/getSeparatorsFromNumber.test.js +5 -3
- package/components/localize/test/number/parseNumber.test.js +123 -56
- package/components/localize/test/side-effect-free-entrypoint.test.js +0 -6
- package/components/localize/test-helpers/fake-imports.js +11 -6
- package/components/localize/test-helpers/localizeTearDown.js +0 -1
- package/components/menu/README.md +360 -0
- package/components/menu/src/InteractiveListMixin.js +866 -0
- package/components/menu/src/LionMenu.js +423 -0
- package/components/menu/src/MoreButtonMenuMixin.js +272 -0
- package/components/menu/src/MultiLevelListMixin.js +306 -0
- package/components/menu/src/utils/isInView.js +25 -0
- package/components/menu/src/utils/listItemInteractions.js +124 -0
- package/components/menu/test/InteractiveListMixin.test.js +2 -0
- package/components/menu/test/MoreButtonMenuMixin.test.js +5 -0
- package/components/menu/test/MultiLevelListMixin.test.js +2 -0
- package/components/menu/test/lion-menu-interactions.test.js +2 -0
- package/components/menu/test/lion-menu.test.js +18 -0
- package/components/menu/test-helpers/mimicKeyPress.js +19 -0
- package/components/menu/test-suites/InteractiveListMixin.suite.js +498 -0
- package/components/menu/test-suites/LionMenu.suite.js +107 -0
- package/components/menu/test-suites/LionMenuInteractions.suite.js +561 -0
- package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +365 -0
- package/components/menu/test-suites/MultiLevelListMixin.suite.js +291 -0
- package/components/menu/types/InteractiveListMixinTypes.ts +126 -0
- package/components/menu/types/MoreButtonMenuMixinTypes.ts +51 -0
- package/components/menu/types/MultiLevelListMixinTypes.ts +28 -0
- package/components/menu/types/OverlayWithListInvokerMixinTypes.ts +61 -0
- package/components/overlays/NEXT.md +49 -0
- package/components/overlays/src/ArrowMixin.js +111 -127
- package/components/overlays/src/OverlayController.js +440 -246
- package/components/overlays/src/OverlayMixin.js +130 -68
- package/components/overlays/src/OverlaysManager.js +30 -32
- package/components/overlays/src/configurations/visibility-trigger-partials/withClickInteraction.js +0 -1
- package/components/overlays/src/configurations/visibility-trigger-partials/withHoverInteraction.js +11 -11
- package/components/overlays/src/configurations/withBottomSheetConfig.js +12 -13
- package/components/overlays/src/configurations/withDropdownConfig.js +4 -2
- package/components/overlays/src/configurations/withModalDialogConfig.js +12 -13
- package/components/overlays/src/configurations/withPopoverConfig.js +27 -25
- package/components/overlays/src/configurations/withTooltipConfig.js +15 -13
- package/components/overlays/src/overlayDocumentStyle.js +1 -1
- package/components/overlays/src/overlayShadowDomStyle.js +0 -1
- package/components/overlays/src/singleton.js +0 -2
- package/components/overlays/src/utils/adopt-styles.js +19 -19
- package/components/overlays/src/utils/deep-contains.js +7 -6
- package/components/overlays/src/utils/get-focusable-elements.js +7 -10
- package/components/overlays/src/utils/inert-siblings.js +2 -4
- package/components/overlays/src/utils/is-equal-config.js +14 -6
- package/components/overlays/src/utils/is-visible.js +0 -1
- package/components/overlays/src/utils/simulate-tab.js +1 -4
- package/components/overlays/src/utils/sort-by-tabindex.js +2 -4
- package/components/overlays/test/ArrowMixin.test.js +18 -30
- package/components/overlays/test/OverlayController.test.js +551 -533
- package/components/overlays/test/OverlayMixin.test.js +0 -2
- package/components/overlays/test/OverlaysManager.test.js +30 -35
- package/components/overlays/test/global-positioning.test.js +6 -10
- package/components/overlays/test/local-positioning.test.js +101 -103
- package/components/overlays/test/utils-tests/active-element.test.js +12 -27
- package/components/overlays/test/utils-tests/adopt-styles.test.js +25 -56
- package/components/overlays/test/utils-tests/deep-contains.test.js +73 -74
- package/components/overlays/test/utils-tests/get-focusable-elements.test.js +6 -23
- package/components/overlays/test/utils-tests/is-equal-config.test.js +32 -13
- package/components/overlays/test/utils-tests/visibility.test.js +44 -79
- package/components/overlays/test-helpers/createShadowHost.js +5 -3
- package/components/overlays/test-helpers/normalizeTransformStyle.js +2 -4
- package/components/overlays/test-suites/OverlayMixin.suite.js +159 -188
- package/components/overlays/test-suites/WithHoverInteraction.suite.js +96 -79
- package/components/overlays/translations/bg-BG.js +0 -1
- package/components/overlays/translations/cs-CZ.js +0 -1
- package/components/overlays/translations/de-DE.js +0 -1
- package/components/overlays/translations/en-AU.js +0 -1
- package/components/overlays/translations/en-GB.js +0 -1
- package/components/overlays/translations/en-US.js +0 -1
- package/components/overlays/translations/es-ES.js +0 -1
- package/components/overlays/translations/fr-BE.js +0 -1
- package/components/overlays/translations/fr-FR.js +0 -1
- package/components/overlays/translations/hu-HU.js +0 -1
- package/components/overlays/translations/it-IT.js +0 -1
- package/components/overlays/translations/nl-BE.js +0 -1
- package/components/overlays/translations/nl-NL.js +0 -1
- package/components/overlays/translations/pl-PL.js +0 -1
- package/components/overlays/translations/ro-RO.js +0 -1
- package/components/overlays/translations/ru-RU.js +0 -1
- package/components/overlays/translations/sk-SK.js +0 -1
- package/components/overlays/translations/tr-TR.js +0 -1
- package/components/overlays/translations/uk-UA.js +0 -1
- package/components/overlays/types/ArrowMixinTypes.ts +1 -3
- package/components/overlays/types/OverlayConfig.ts +20 -5
- package/components/overlays/types/OverlayMixinTypes.ts +2 -0
- package/components/pagination/src/LionPagination.js +9 -12
- package/components/pagination/test/lion-pagination.test.js +18 -50
- package/components/progress-indicator/src/LionProgressIndicator.js +10 -12
- package/components/progress-indicator/test/lion-progress-indicator.test.js +1 -22
- package/components/radio-group/src/LionRadioGroup.js +1 -2
- package/components/radio-group/test/lion-radio-group-integrations.test.js +0 -1
- package/components/radio-group/test/lion-radio-group.test.js +27 -27
- package/components/radio-group/test/lion-radio-integrations.test.js +3 -2
- package/components/radio-group/test/lion-radio.test.js +30 -16
- package/components/select/src/LionSelect.js +12 -13
- package/components/select/test/lion-select.test.js +7 -12
- package/components/select-rich/src/LionSelectInvoker.js +18 -11
- package/components/select-rich/src/LionSelectRich.js +32 -43
- package/components/select-rich/test/demos.screenshots-test.js +40 -9
- package/components/select-rich/test/lion-select-invoker.test.js +26 -43
- package/components/select-rich/test/lion-select-listbox-suite-integration.test.js +3 -3
- package/components/select-rich/test/lion-select-rich-dialog-integration.test.js +4 -9
- package/components/select-rich/test/lion-select-rich-interaction.test.js +154 -101
- package/components/select-rich/test/lion-select-rich-upgrade.test.js +26 -0
- package/components/select-rich/test/lion-select-rich.test.js +153 -195
- package/components/select-rich/test-helpers/getSelectRichMembers.js +4 -1
- package/components/steps/src/LionStep.js +21 -12
- package/components/steps/src/LionSteps.js +25 -25
- package/components/steps/test/lion-step.test.js +18 -25
- package/components/steps/test/lion-steps.test.js +45 -78
- package/components/switch/src/LionSwitch.js +2 -7
- package/components/switch/src/LionSwitchButton.js +5 -6
- package/components/switch/test/lion-switch-button.test.js +16 -28
- package/components/switch/test/lion-switch.test.js +17 -31
- package/components/tabs/src/LionTabs.js +25 -28
- package/components/tabs/test/lion-tabs.test.js +156 -154
- package/components/textarea/src/LionTextarea.js +4 -23
- package/components/textarea/test/lion-textarea-integrations.test.js +0 -5
- package/components/textarea/test/lion-textarea.test.js +2 -28
- package/components/tooltip/src/LionTooltip.js +6 -6
- package/components/tooltip/test/lion-tooltip.test.js +75 -102
- package/components/validate-messages/src/getLocalizedMessage.js +8 -7
- package/components/validate-messages/src/loadDefaultFeedbackMessages.js +3 -1
- package/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.js +9 -5
- package/components/validate-messages/src/per-entrypoint/loadComboboxMessagesNoSideEffects.js +5 -2
- package/components/validate-messages/src/per-entrypoint/loadFormCoreMessagesNoSideEffects.js +99 -35
- package/components/validate-messages/src/per-entrypoint/loadInputTelMessagesNoSideEffects.js +4 -3
- package/components/validate-messages/test/loadDefaultFeedbackMessages.test.js +5 -3
- package/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.test.js +80 -45
- package/components/validate-messages/translations/bg-BG.js +0 -1
- package/components/validate-messages/translations/cs-CZ.js +0 -1
- package/components/validate-messages/translations/de-DE.js +0 -1
- package/components/validate-messages/translations/en-AU.js +0 -1
- package/components/validate-messages/translations/en-GB.js +0 -1
- package/components/validate-messages/translations/en-PH.js +0 -1
- package/components/validate-messages/translations/en-US.js +0 -1
- package/components/validate-messages/translations/es-ES.js +0 -1
- package/components/validate-messages/translations/fr-BE.js +0 -1
- package/components/validate-messages/translations/fr-FR.js +0 -1
- package/components/validate-messages/translations/hu-HU.js +0 -1
- package/components/validate-messages/translations/it-IT.js +0 -1
- package/components/validate-messages/translations/nl-BE.js +0 -1
- package/components/validate-messages/translations/nl-NL.js +0 -1
- package/components/validate-messages/translations/pl-PL.js +0 -1
- package/components/validate-messages/translations/ro-RO.js +0 -1
- package/components/validate-messages/translations/ru-RU.js +0 -1
- package/components/validate-messages/translations/sk-SK.js +0 -1
- package/components/validate-messages/translations/tr-TR.js +0 -1
- package/components/validate-messages/translations/uk-UA.js +0 -1
- package/custom-elements.json +3312 -206
- package/dist-types/components/combobox/src/LionCombobox.d.ts +1 -1
- package/dist-types/components/combobox/src/LionCombobox.d.ts.map +1 -1
- package/dist-types/components/core/src/SlotMixin.d.ts +6 -1
- package/dist-types/components/core/src/SlotMixin.d.ts.map +1 -1
- package/dist-types/components/core/types/SlotMixinTypes.d.ts +5 -1
- package/dist-types/components/core/types/SlotMixinTypes.d.ts.map +1 -1
- package/dist-types/components/dialog/src/LionDialog.d.ts +6 -2
- package/dist-types/components/dialog/src/LionDialog.d.ts.map +1 -1
- package/dist-types/components/form-core/src/LionField.d.ts +3 -1
- package/dist-types/components/form-core/src/LionField.d.ts.map +1 -1
- package/dist-types/components/form-core/src/choice-group/ChoiceGroupMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +5 -0
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts.map +1 -1
- package/dist-types/components/input-amount/src/LionInputAmount.d.ts +3 -1
- package/dist-types/components/input-amount/src/LionInputAmount.d.ts.map +1 -1
- package/dist-types/components/input-amount/src/formatters.d.ts +6 -4
- package/dist-types/components/input-amount/src/formatters.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +1 -1
- package/dist-types/components/input-tel/src/LionInputTel.d.ts +6 -6
- package/dist-types/components/input-tel/src/LionInputTel.d.ts.map +1 -1
- package/dist-types/components/input-tel/src/PhoneUtilManager.d.ts +2 -2
- package/dist-types/components/input-tel/src/PhoneUtilManager.d.ts.map +1 -1
- package/dist-types/components/input-tel/src/formatters.d.ts +2 -2
- package/dist-types/components/input-tel/src/formatters.d.ts.map +1 -1
- package/dist-types/components/input-tel/src/preprocessors.d.ts +2 -2
- package/dist-types/components/input-tel/src/preprocessors.d.ts.map +1 -1
- package/dist-types/components/input-tel/test/validators.test.d.ts +1 -1
- package/dist-types/components/input-tel/test/validators.test.d.ts.map +1 -1
- package/dist-types/components/listbox/src/LionOption.d.ts +5 -2
- package/dist-types/components/listbox/src/LionOption.d.ts.map +1 -1
- package/dist-types/components/listbox/src/ListboxMixin.d.ts.map +1 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts +7 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts.map +1 -1
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts +35 -0
- package/dist-types/components/menu/src/InteractiveListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/LionMenu.d.ts +129 -0
- package/dist-types/components/menu/src/LionMenu.d.ts.map +1 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts +8 -0
- package/dist-types/components/menu/src/MoreButtonMenuMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts +7 -0
- package/dist-types/components/menu/src/MultiLevelListMixin.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts +9 -0
- package/dist-types/components/menu/src/utils/isInView.d.ts.map +1 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts +48 -0
- package/dist-types/components/menu/src/utils/listItemInteractions.d.ts.map +1 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/InteractiveListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MoreButtonMenuMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts +2 -0
- package/dist-types/components/menu/test/MultiLevelListMixin.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu-interactions.test.d.ts.map +1 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts +2 -0
- package/dist-types/components/menu/test/lion-menu.test.d.ts.map +1 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts +7 -0
- package/dist-types/components/menu/test-helpers/mimicKeyPress.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +9 -0
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts +5 -0
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +11 -0
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -0
- package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts +72 -0
- package/dist-types/components/menu/types/InteractiveListMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts +30 -0
- package/dist-types/components/menu/types/MoreButtonMenuMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts +16 -0
- package/dist-types/components/menu/types/MultiLevelListMixinTypes.d.ts.map +1 -0
- package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts +35 -0
- package/dist-types/components/menu/types/OverlayWithListInvokerMixinTypes.d.ts.map +1 -0
- package/dist-types/components/overlays/src/OverlayController.d.ts +22 -5
- package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlaysManager.d.ts.map +1 -1
- package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/is-equal-config.d.ts.map +1 -1
- package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts +12 -2
- package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -0
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts +3 -1
- package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts +13 -2
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts +2 -0
- package/dist-types/components/select-rich/test/lion-select-rich-upgrade.test.d.ts.map +1 -0
- package/dist-types/components/tooltip/src/LionTooltip.d.ts +1 -1
- package/dist-types/exports/define/lion-item.d.ts +2 -0
- package/dist-types/exports/define/lion-item.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menu.d.ts +2 -0
- package/dist-types/exports/define/lion-menu.d.ts.map +1 -0
- package/dist-types/exports/define/lion-menuitem.d.ts +2 -0
- package/dist-types/exports/define/lion-menuitem.d.ts.map +1 -0
- package/dist-types/exports/menu-test-suites.d.ts +4 -0
- package/dist-types/exports/menu-test-suites.d.ts.map +1 -0
- package/dist-types/exports/menu.d.ts +3 -0
- package/dist-types/exports/menu.d.ts.map +1 -0
- package/dist-types/exports/overlays.d.ts +6 -0
- package/dist-types/exports/overlays.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/accordion/overview.md +2 -2
- package/docs/components/accordion/reference.md +2 -2
- package/docs/components/accordion/use-cases.md +2 -2
- package/docs/components/button/examples.md +2 -2
- package/docs/components/button/extensions.md +2 -2
- package/docs/components/button/overview.md +2 -2
- package/docs/components/button/use-cases.md +2 -2
- package/docs/components/calendar/overview.md +2 -2
- package/docs/components/calendar/use-cases.md +2 -2
- package/docs/components/checkbox-group/overview.md +4 -4
- package/docs/components/checkbox-group/use-cases.md +2 -2
- package/docs/components/collapsible/examples.md +2 -2
- package/docs/components/collapsible/overview.md +3 -3
- package/docs/components/collapsible/use-cases.md +2 -2
- package/docs/components/combobox/api-table.md +53 -39
- package/docs/components/combobox/extensions.md +2 -2
- package/docs/components/combobox/overview.md +3 -3
- package/docs/components/combobox/use-cases.md +3 -3
- package/docs/components/dialog/api-table.md +32 -6
- package/docs/components/dialog/overview.md +3 -3
- package/docs/components/dialog/use-cases.md +2 -2
- package/docs/components/drawer/overview.md +2 -2
- package/docs/components/drawer/use-cases.md +2 -2
- package/docs/components/fieldset/overview.md +7 -7
- package/docs/components/fieldset/use-cases.md +2 -2
- package/docs/components/form/overview.md +5 -5
- package/docs/components/form/use-cases.md +4 -4
- package/docs/components/icon/overview.md +2 -2
- package/docs/components/icon/use-cases.md +3 -3
- package/docs/components/input/overview.md +3 -3
- package/docs/components/input/use-cases.md +2 -2
- package/docs/components/input-amount/api-table.md +9 -7
- package/docs/components/input-amount/overview.md +5 -5
- package/docs/components/input-amount/use-cases.md +17 -6
- package/docs/components/input-amount-dropdown/api-table.md +2 -0
- package/docs/components/input-amount-dropdown/use-cases.md +2 -2
- package/docs/components/input-date/overview.md +5 -5
- package/docs/components/input-date/use-cases.md +2 -2
- package/docs/components/input-datepicker/api-table.md +63 -45
- package/docs/components/input-datepicker/overview.md +7 -7
- package/docs/components/input-datepicker/use-cases.md +2 -2
- package/docs/components/input-email/overview.md +4 -4
- package/docs/components/input-email/use-cases.md +2 -2
- package/docs/components/input-file/overview.md +3 -3
- package/docs/components/input-file/use-cases.md +2 -2
- package/docs/components/input-iban/overview.md +4 -4
- package/docs/components/input-iban/use-cases.md +2 -2
- package/docs/components/input-range/overview.md +4 -4
- package/docs/components/input-range/use-cases.md +2 -2
- package/docs/components/input-stepper/overview.md +3 -3
- package/docs/components/input-stepper/use-cases.md +2 -2
- package/docs/components/input-tel/overview.md +3 -3
- package/docs/components/input-tel/use-cases.md +8 -8
- package/docs/components/input-tel-dropdown/extensions.md +2 -2
- package/docs/components/input-tel-dropdown/overview.md +3 -3
- package/docs/components/input-tel-dropdown/use-cases.md +2 -2
- package/docs/components/listbox/overview.md +2 -2
- package/docs/components/listbox/use-cases.md +3 -3
- package/docs/components/menu/api-table.md +44 -0
- package/docs/components/menu/applyMenuDemoStyles.js +173 -0
- package/docs/components/menu/extensions.md +262 -0
- package/docs/components/menu/index.md +13 -0
- package/docs/components/menu/migration.md +129 -0
- package/docs/components/menu/overview.md +448 -0
- package/docs/components/menu/src/DemoNavigationBar.js +441 -0
- package/docs/components/menu/src/DemoSpinButton.js +215 -0
- package/docs/components/menu/src/DemoToolbar.js +101 -0
- package/docs/components/menu/src/DemoTree.js +55 -0
- package/docs/components/menu/src/navigation-bar-types.js +41 -0
- package/docs/components/menu/use-cases.md +74 -0
- package/docs/components/pagination/overview.md +2 -2
- package/docs/components/pagination/use-cases.md +2 -2
- package/docs/components/progress-indicator/examples.md +2 -2
- package/docs/components/progress-indicator/overview.md +2 -2
- package/docs/components/radio-group/overview.md +5 -5
- package/docs/components/radio-group/use-cases.md +2 -2
- package/docs/components/select/overview.md +2 -2
- package/docs/components/select/use-cases.md +3 -3
- package/docs/components/select-rich/api-table.md +51 -33
- package/docs/components/select-rich/examples.md +2 -2
- package/docs/components/select-rich/overview.md +2 -2
- package/docs/components/select-rich/use-cases.md +4 -4
- package/docs/components/steps/overview.md +2 -2
- package/docs/components/steps/use-cases.md +2 -2
- package/docs/components/switch/overview.md +2 -2
- package/docs/components/switch/reference.md +2 -2
- package/docs/components/switch/use-cases.md +2 -2
- package/docs/components/tabs/examples.md +3 -3
- package/docs/components/tabs/overview.md +2 -2
- package/docs/components/tabs/use-cases.md +2 -2
- package/docs/components/textarea/overview.md +2 -2
- package/docs/components/textarea/use-cases.md +2 -2
- package/docs/components/tooltip/api-table.md +33 -7
- package/docs/components/tooltip/examples.md +2 -2
- package/docs/components/tooltip/overview.md +2 -2
- package/docs/components/tooltip/use-cases.md +2 -2
- package/docs/fundamentals/index.md +4 -4
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +2 -2
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +2 -2
- package/docs/fundamentals/node-tools/providence-analytics/index.md +2 -2
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
- package/docs/fundamentals/node-tools/publish-docs/index.md +2 -2
- package/docs/fundamentals/node-tools/publish-docs/overview.md +5 -5
- package/docs/fundamentals/node-tools/remark-extend/index.md +2 -2
- package/docs/fundamentals/node-tools/remark-extend/overview.md +2 -2
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +2 -2
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +4 -4
- package/docs/fundamentals/rationales/TypeScript.md +62 -2
- package/docs/fundamentals/rationales/accessibility.md +5 -5
- package/docs/fundamentals/rationales/side-effects.md +2 -2
- package/docs/fundamentals/rationales/versioning.md +2 -2
- package/docs/fundamentals/systems/core/SlotMixin.md +3 -3
- package/docs/fundamentals/systems/core/index.md +2 -2
- package/docs/fundamentals/systems/core/overview.md +3 -3
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +6 -6
- package/docs/fundamentals/systems/form/index.md +2 -2
- package/docs/fundamentals/systems/form/interaction-states.md +2 -2
- package/docs/fundamentals/systems/form/model-value.md +3 -3
- package/docs/fundamentals/systems/form/overview.md +30 -30
- package/docs/fundamentals/systems/form/styling.md +2 -2
- package/docs/fundamentals/systems/form/use-cases.md +2 -2
- package/docs/fundamentals/systems/form/validate.md +4 -4
- package/docs/fundamentals/systems/icon/index.md +2 -2
- package/docs/fundamentals/systems/icon/overview.md +2 -2
- package/docs/fundamentals/systems/localize/dates.md +2 -2
- package/docs/fundamentals/systems/localize/index.md +2 -2
- package/docs/fundamentals/systems/localize/numbers.md +2 -2
- package/docs/fundamentals/systems/localize/overview.md +6 -6
- package/docs/fundamentals/systems/localize/rationale.md +2 -2
- package/docs/fundamentals/systems/localize/text.md +2 -2
- package/docs/fundamentals/systems/localize/use-cases.md +2 -2
- package/docs/fundamentals/systems/overlays/_edge-cases.md +2 -2
- package/docs/fundamentals/systems/overlays/api-table.md +46 -43
- package/docs/fundamentals/systems/overlays/configuration.md +4 -4
- package/docs/fundamentals/systems/overlays/index.md +2 -2
- package/docs/fundamentals/systems/overlays/overview.md +7 -7
- package/docs/fundamentals/systems/overlays/rationale.md +2 -2
- package/docs/fundamentals/systems/overlays/use-cases.md +4 -4
- package/docs/fundamentals/tools/ajax/index.md +2 -2
- package/docs/fundamentals/tools/ajax/overview.md +2 -2
- package/docs/fundamentals/tools/ajax/use-cases.md +2 -2
- package/docs/fundamentals/tools/helpers/action-logger.md +2 -2
- package/docs/fundamentals/tools/helpers/index.md +2 -2
- package/docs/fundamentals/tools/helpers/overview.md +3 -3
- package/docs/fundamentals/tools/singleton-manager/example-complex/index.md +2 -2
- package/docs/fundamentals/tools/singleton-manager/example-fail/index.md +2 -2
- package/docs/fundamentals/tools/singleton-manager/example-success/index.md +2 -2
- package/docs/fundamentals/tools/singleton-manager/index.md +2 -2
- package/docs/fundamentals/tools/singleton-manager/overview.md +6 -6
- package/docs/guides/how-to/create-a-custom-field.md +7 -7
- package/docs/guides/how-to/create-a-form.md +6 -6
- package/docs/guides/how-to/extend-a-native-input.md +4 -4
- package/docs/guides/how-to/get-started.md +2 -2
- package/docs/guides/how-to/index.md +1 -1
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/definitions-and-terms.md +2 -2
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/scoped-elements.md +2 -2
- package/docs/guides/principles/styling.md +3 -3
- package/docs/guides/principles/subclasser-apis.md +2 -2
- package/exports/define/lion-accordion.js +0 -1
- package/exports/define/lion-button-reset.js +0 -1
- package/exports/define/lion-button-submit.js +0 -1
- package/exports/define/lion-button.js +0 -1
- package/exports/define/lion-calendar.js +0 -1
- package/exports/define/lion-checkbox-group.js +0 -1
- package/exports/define/lion-checkbox-indeterminate.js +0 -1
- package/exports/define/lion-checkbox.js +0 -1
- package/exports/define/lion-collapsible.js +0 -1
- package/exports/define/lion-combobox.js +0 -1
- package/exports/define/lion-dialog.js +0 -1
- package/exports/define/lion-drawer.js +0 -1
- package/exports/define/lion-field.js +0 -1
- package/exports/define/lion-fieldset.js +0 -1
- package/exports/define/lion-form.js +0 -1
- package/exports/define/lion-icon.js +0 -1
- package/exports/define/lion-input-amount-dropdown.js +0 -1
- package/exports/define/lion-input-amount.js +0 -1
- package/exports/define/lion-input-date.js +0 -1
- package/exports/define/lion-input-datepicker.js +0 -1
- package/exports/define/lion-input-email.js +0 -1
- package/exports/define/lion-input-file.js +0 -1
- package/exports/define/lion-input-iban.js +0 -1
- package/exports/define/lion-input-range.js +0 -1
- package/exports/define/lion-input-stepper.js +0 -1
- package/exports/define/lion-input-tel-dropdown.js +0 -1
- package/exports/define/lion-input-tel.js +0 -1
- package/exports/define/lion-input.js +0 -1
- package/exports/define/lion-item.js +2 -0
- package/exports/define/lion-listbox.js +0 -1
- package/exports/define/lion-menu.js +2 -0
- package/exports/define/lion-menuitem.js +2 -0
- package/exports/define/lion-option.js +0 -1
- package/exports/define/lion-options.js +0 -1
- package/exports/define/lion-pagination.js +0 -1
- package/exports/define/lion-progress-indicator.js +0 -1
- package/exports/define/lion-radio-group.js +0 -1
- package/exports/define/lion-radio.js +0 -1
- package/exports/define/lion-select-invoker.js +0 -1
- package/exports/define/lion-select-rich.js +0 -1
- package/exports/define/lion-select.js +0 -1
- package/exports/define/lion-selected-file-list.js +0 -1
- package/exports/define/lion-step.js +0 -1
- package/exports/define/lion-steps.js +0 -1
- package/exports/define/lion-switch-button.js +0 -1
- package/exports/define/lion-switch.js +0 -1
- package/exports/define/lion-tabs.js +0 -1
- package/exports/define/lion-textarea.js +0 -1
- package/exports/define/lion-tooltip.js +0 -1
- package/exports/define/lion-validation-feedback.js +0 -1
- package/exports/define-helpers/sb-action-logger.js +0 -1
- package/exports/define-helpers/sb-locale-switcher.js +0 -1
- package/exports/form-core.js +0 -8
- package/exports/localize-no-side-effects.js +0 -1
- package/exports/localize.js +0 -2
- package/exports/menu-test-suites.js +4 -0
- package/exports/menu.js +3 -0
- package/exports/overlays.js +6 -4
- package/generated/awesome-phonenumber/LICENSE +22 -0
- package/generated/awesome-phonenumber/LICENSE.closure-library +176 -0
- package/generated/awesome-phonenumber/LICENSE.libphonenumber +176 -0
- package/generated/awesome-phonenumber/checksums.json +6 -0
- package/generated/awesome-phonenumber/index-esm.mjs +817 -0
- package/generated/awesome-phonenumber/index.d.ts +227 -0
- package/generated/awesome-phonenumber/index.js +45 -0
- package/generated/awesome-phonenumber/lib/index.js +710 -0
- package/generated/awesome-phonenumber/package.json +9 -0
- package/generated/awesome-phonenumber/provenance.json +13 -0
- package/menu-test-suites.js +4 -0
- package/menu.js +3 -0
- package/overlays.js +6 -0
- package/package.json +35 -6
- package/vscode.html-custom-data.json +76 -8
- package/web-types.json +202 -17
|
@@ -3,7 +3,6 @@ import sinon from 'sinon';
|
|
|
3
3
|
// @ts-ignore
|
|
4
4
|
import { fetchMock } from '@bundled-es-modules/fetch-mock';
|
|
5
5
|
import { setupFakeImport, resetFakeImport, fakeImport } from '@lion/ui/localize-test-helpers.js';
|
|
6
|
-
|
|
7
6
|
import { LocalizeManager } from '@lion/ui/localize-no-side-effects.js';
|
|
8
7
|
|
|
9
8
|
/**
|
|
@@ -26,51 +25,44 @@ function getProtectedMembers(localizeManagerEl) {
|
|
|
26
25
|
function removeLtrRtl(str) {
|
|
27
26
|
return str.replace(/(\u200E|\u200E)/g, '');
|
|
28
27
|
}
|
|
29
|
-
|
|
30
28
|
describe('LocalizeManager', () => {
|
|
31
29
|
/** @type {LocalizeManager} */
|
|
32
30
|
let manager;
|
|
33
|
-
|
|
34
31
|
beforeEach(() => {
|
|
35
32
|
// makes sure that between tests the localization is reset to default state
|
|
36
33
|
document.documentElement.lang = 'en-GB';
|
|
37
34
|
});
|
|
38
|
-
|
|
39
35
|
afterEach(() => {
|
|
40
36
|
manager.teardown();
|
|
41
37
|
});
|
|
42
|
-
|
|
43
38
|
afterEach(() => {
|
|
44
39
|
fetchMock.restore();
|
|
45
40
|
resetFakeImport();
|
|
46
41
|
});
|
|
47
|
-
|
|
48
42
|
it('syncs locale back to <html> if changed', () => {
|
|
49
43
|
manager = new LocalizeManager();
|
|
50
44
|
manager.locale = 'nl-NL';
|
|
51
45
|
expect(document.documentElement.lang).to.equal('nl-NL');
|
|
52
46
|
});
|
|
53
|
-
|
|
54
47
|
it('sets locale to "en-GB" by default if nothing is set on <html>', () => {
|
|
55
48
|
document.documentElement.lang = '';
|
|
56
49
|
manager = new LocalizeManager();
|
|
57
50
|
expect(manager.locale).to.equal('en-GB');
|
|
58
51
|
expect(document.documentElement.lang).to.equal('en-GB');
|
|
59
52
|
});
|
|
60
|
-
|
|
61
53
|
it('empties storage after reset() is invoked', async () => {
|
|
62
54
|
manager = new LocalizeManager();
|
|
63
|
-
|
|
64
55
|
let deferredResolve;
|
|
65
56
|
manager.loadNamespace({
|
|
66
57
|
generic: () =>
|
|
67
|
-
new Promise(resolve => {
|
|
68
|
-
deferredResolve = () =>
|
|
58
|
+
new Promise((resolve) => {
|
|
59
|
+
deferredResolve = () =>
|
|
60
|
+
resolve({
|
|
61
|
+
greeting: 'Hello!',
|
|
62
|
+
});
|
|
69
63
|
}),
|
|
70
64
|
});
|
|
71
|
-
|
|
72
65
|
const { loadingComplete } = manager;
|
|
73
|
-
|
|
74
66
|
manager.reset();
|
|
75
67
|
expect(getProtectedMembers(manager).storage).to.be.empty;
|
|
76
68
|
|
|
@@ -81,308 +73,362 @@ describe('LocalizeManager', () => {
|
|
|
81
73
|
// storage still needs to be empty after promise is fulfilled.
|
|
82
74
|
expect(getProtectedMembers(manager).storage).to.be.empty;
|
|
83
75
|
});
|
|
84
|
-
|
|
85
76
|
it('has teardown() method removing all side effects', () => {
|
|
86
77
|
manager = new LocalizeManager();
|
|
87
78
|
const disconnectObserverSpy = sinon.spy(
|
|
88
79
|
manager._htmlLangAttributeObserver,
|
|
89
|
-
/** @type {never} */
|
|
80
|
+
/** @type {never} */ 'disconnect',
|
|
90
81
|
);
|
|
91
82
|
manager.teardown();
|
|
92
83
|
expect(disconnectObserverSpy.callCount).to.equal(1);
|
|
93
84
|
});
|
|
94
|
-
|
|
95
85
|
describe('"localeChanged" event with detail.newLocale and detail.oldLocale', () => {
|
|
96
86
|
it('fires "localeChanged" event if locale was changed via manager', async () => {
|
|
97
87
|
manager = new LocalizeManager();
|
|
98
88
|
setTimeout(() => {
|
|
99
89
|
manager.locale = 'en-US';
|
|
100
90
|
});
|
|
101
|
-
|
|
102
91
|
const event = await oneEvent(
|
|
103
|
-
/** @type {EventTarget} */
|
|
92
|
+
/** @type {EventTarget} */ /** @type {unknown} */ manager,
|
|
104
93
|
'localeChanged',
|
|
105
94
|
);
|
|
106
95
|
expect(event.detail.newLocale).to.equal('en-US');
|
|
107
96
|
expect(event.detail.oldLocale).to.equal('en-GB');
|
|
108
97
|
});
|
|
109
|
-
|
|
110
98
|
it('does not fire "localeChanged" event if it was set to the same locale', () => {
|
|
111
99
|
manager = new LocalizeManager();
|
|
112
100
|
const eventSpy = sinon.spy();
|
|
113
|
-
|
|
114
101
|
manager.addEventListener('localeChanged', eventSpy);
|
|
115
102
|
manager.locale = 'en-US';
|
|
116
103
|
manager.locale = 'en-US';
|
|
117
104
|
expect(eventSpy.callCount).to.equal(1);
|
|
118
105
|
});
|
|
119
106
|
});
|
|
120
|
-
|
|
121
107
|
describe('addData()', () => {
|
|
122
108
|
it('allows to provide inline data', () => {
|
|
123
109
|
manager = new LocalizeManager();
|
|
124
110
|
const { storage } = getProtectedMembers(manager);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
manager.addData('en-GB', 'lion-hello', {
|
|
112
|
+
greeting: 'Hi!',
|
|
113
|
+
});
|
|
128
114
|
expect(storage).to.deep.equal({
|
|
129
115
|
'en-GB': {
|
|
130
|
-
'lion-hello': {
|
|
116
|
+
'lion-hello': {
|
|
117
|
+
greeting: 'Hi!',
|
|
118
|
+
},
|
|
131
119
|
},
|
|
132
120
|
});
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
121
|
+
manager.addData('en-GB', 'lion-goodbye', {
|
|
122
|
+
farewell: 'Cheers!',
|
|
123
|
+
});
|
|
136
124
|
expect(storage).to.deep.equal({
|
|
137
125
|
'en-GB': {
|
|
138
|
-
'lion-hello': {
|
|
139
|
-
|
|
126
|
+
'lion-hello': {
|
|
127
|
+
greeting: 'Hi!',
|
|
128
|
+
},
|
|
129
|
+
'lion-goodbye': {
|
|
130
|
+
farewell: 'Cheers!',
|
|
131
|
+
},
|
|
140
132
|
},
|
|
141
133
|
});
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
134
|
+
manager.addData('nl-NL', 'lion-hello', {
|
|
135
|
+
greeting: 'Hoi!',
|
|
136
|
+
});
|
|
137
|
+
manager.addData('nl-NL', 'lion-goodbye', {
|
|
138
|
+
farewell: 'Doei!',
|
|
139
|
+
});
|
|
146
140
|
expect(storage).to.deep.equal({
|
|
147
141
|
'en-GB': {
|
|
148
|
-
'lion-hello': {
|
|
149
|
-
|
|
142
|
+
'lion-hello': {
|
|
143
|
+
greeting: 'Hi!',
|
|
144
|
+
},
|
|
145
|
+
'lion-goodbye': {
|
|
146
|
+
farewell: 'Cheers!',
|
|
147
|
+
},
|
|
150
148
|
},
|
|
151
149
|
'nl-NL': {
|
|
152
|
-
'lion-hello': {
|
|
153
|
-
|
|
150
|
+
'lion-hello': {
|
|
151
|
+
greeting: 'Hoi!',
|
|
152
|
+
},
|
|
153
|
+
'lion-goodbye': {
|
|
154
|
+
farewell: 'Doei!',
|
|
155
|
+
},
|
|
154
156
|
},
|
|
155
157
|
});
|
|
156
158
|
});
|
|
157
|
-
|
|
158
159
|
it('prevents mutating existing data for the same locale & namespace when "allowOverridesForExistingNamespaces" option is not given in constructor', () => {
|
|
159
160
|
manager = new LocalizeManager();
|
|
160
161
|
const { storage } = getProtectedMembers(manager);
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
manager.addData('en-GB', 'lion-hello', {
|
|
163
|
+
greeting: 'Hi!',
|
|
164
|
+
});
|
|
164
165
|
expect(() => {
|
|
165
|
-
manager.addData('en-GB', 'lion-hello', {
|
|
166
|
+
manager.addData('en-GB', 'lion-hello', {
|
|
167
|
+
greeting: 'Hello!',
|
|
168
|
+
});
|
|
166
169
|
}).to.throw();
|
|
167
|
-
|
|
168
170
|
expect(storage).to.deep.equal({
|
|
169
|
-
'en-GB': {
|
|
171
|
+
'en-GB': {
|
|
172
|
+
'lion-hello': {
|
|
173
|
+
greeting: 'Hi!',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
170
176
|
});
|
|
171
177
|
});
|
|
172
|
-
|
|
173
178
|
it('allows mutating existing data for the same locale & namespace when "allowOverridesForExistingNamespaces" option is set to "true" in constructor', () => {
|
|
174
|
-
manager = new LocalizeManager({
|
|
179
|
+
manager = new LocalizeManager({
|
|
180
|
+
allowOverridesForExistingNamespaces: true,
|
|
181
|
+
});
|
|
175
182
|
const { storage } = getProtectedMembers(manager);
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
183
|
+
manager.addData('en-GB', 'lion-hello', {
|
|
184
|
+
greeting: 'Hi!',
|
|
185
|
+
});
|
|
179
186
|
expect(storage).to.deep.equal({
|
|
180
|
-
'en-GB': {
|
|
187
|
+
'en-GB': {
|
|
188
|
+
'lion-hello': {
|
|
189
|
+
greeting: 'Hi!',
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
manager.addData('en-GB', 'lion-hello', {
|
|
194
|
+
greeting: 'Hi!',
|
|
195
|
+
alternative: 'Hello!',
|
|
181
196
|
});
|
|
182
|
-
|
|
183
|
-
manager.addData('en-GB', 'lion-hello', { greeting: 'Hi!', alternative: 'Hello!' });
|
|
184
|
-
|
|
185
197
|
expect(storage).to.deep.equal({
|
|
186
|
-
'en-GB': {
|
|
198
|
+
'en-GB': {
|
|
199
|
+
'lion-hello': {
|
|
200
|
+
greeting: 'Hi!',
|
|
201
|
+
alternative: 'Hello!',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
187
204
|
});
|
|
188
205
|
});
|
|
189
206
|
});
|
|
190
|
-
|
|
191
207
|
describe('loading via dynamic imports', () => {
|
|
192
208
|
it('loads a namespace via loadNamespace()', async () => {
|
|
193
|
-
setupFakeImport('./my-component/en-GB.js', {
|
|
194
|
-
|
|
209
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
210
|
+
default: {
|
|
211
|
+
greeting: 'Hello!',
|
|
212
|
+
},
|
|
213
|
+
});
|
|
195
214
|
manager = new LocalizeManager();
|
|
196
215
|
const { storage } = getProtectedMembers(manager);
|
|
197
|
-
|
|
198
216
|
await manager.loadNamespace({
|
|
199
217
|
/** @param {string} locale */
|
|
200
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
218
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
201
219
|
});
|
|
202
|
-
|
|
203
220
|
expect(storage).to.deep.equal({
|
|
204
221
|
'en-GB': {
|
|
205
|
-
'my-component': {
|
|
222
|
+
'my-component': {
|
|
223
|
+
greeting: 'Hello!',
|
|
224
|
+
},
|
|
206
225
|
},
|
|
207
226
|
});
|
|
208
227
|
});
|
|
209
|
-
|
|
210
228
|
it('can load a namespace for a different locale', async () => {
|
|
211
|
-
setupFakeImport('./my-component/nl-NL.js', {
|
|
212
|
-
|
|
229
|
+
setupFakeImport('./my-component/nl-NL.js', {
|
|
230
|
+
default: {
|
|
231
|
+
greeting: 'Hello!',
|
|
232
|
+
},
|
|
233
|
+
});
|
|
213
234
|
manager = new LocalizeManager();
|
|
214
235
|
const { storage } = getProtectedMembers(manager);
|
|
215
236
|
manager.locale = 'en-US';
|
|
216
|
-
|
|
217
237
|
await manager.loadNamespace(
|
|
218
238
|
{
|
|
219
239
|
/** @param {string} locale */
|
|
220
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
240
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
locale: 'nl-NL',
|
|
221
244
|
},
|
|
222
|
-
{ locale: 'nl-NL' },
|
|
223
245
|
);
|
|
224
|
-
|
|
225
246
|
expect(storage).to.deep.equal({
|
|
226
247
|
'nl-NL': {
|
|
227
|
-
'my-component': {
|
|
248
|
+
'my-component': {
|
|
249
|
+
greeting: 'Hello!',
|
|
250
|
+
},
|
|
228
251
|
},
|
|
229
252
|
});
|
|
230
253
|
});
|
|
231
|
-
|
|
232
254
|
it('loads multiple namespaces via loadNamespaces()', async () => {
|
|
233
|
-
setupFakeImport('./my-defaults/en-GB.js', {
|
|
234
|
-
|
|
235
|
-
|
|
255
|
+
setupFakeImport('./my-defaults/en-GB.js', {
|
|
256
|
+
default: {
|
|
257
|
+
submit: 'Submit',
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
setupFakeImport('./my-send-button/en-GB.js', {
|
|
261
|
+
default: {
|
|
262
|
+
submit: 'Send',
|
|
263
|
+
},
|
|
264
|
+
});
|
|
236
265
|
manager = new LocalizeManager();
|
|
237
266
|
const { storage } = getProtectedMembers(manager);
|
|
238
|
-
|
|
239
267
|
await manager.loadNamespaces([
|
|
240
268
|
{
|
|
241
269
|
/** @param {string} locale */
|
|
242
|
-
'my-defaults': locale => fakeImport(`./my-defaults/${locale}.js`),
|
|
270
|
+
'my-defaults': (locale) => fakeImport(`./my-defaults/${locale}.js`),
|
|
243
271
|
},
|
|
244
272
|
{
|
|
245
273
|
/** @param {string} locale */
|
|
246
|
-
'my-send-button': locale => fakeImport(`./my-send-button/${locale}.js`),
|
|
274
|
+
'my-send-button': (locale) => fakeImport(`./my-send-button/${locale}.js`),
|
|
247
275
|
},
|
|
248
276
|
]);
|
|
249
|
-
|
|
250
277
|
expect(storage).to.deep.equal({
|
|
251
278
|
'en-GB': {
|
|
252
|
-
'my-defaults': {
|
|
253
|
-
|
|
279
|
+
'my-defaults': {
|
|
280
|
+
submit: 'Submit',
|
|
281
|
+
},
|
|
282
|
+
'my-send-button': {
|
|
283
|
+
submit: 'Send',
|
|
284
|
+
},
|
|
254
285
|
},
|
|
255
286
|
});
|
|
256
287
|
});
|
|
257
|
-
|
|
258
288
|
it('can load multiple namespaces for a different locale', async () => {
|
|
259
|
-
setupFakeImport('./my-defaults/nl-NL.js', {
|
|
260
|
-
|
|
261
|
-
|
|
289
|
+
setupFakeImport('./my-defaults/nl-NL.js', {
|
|
290
|
+
default: {
|
|
291
|
+
submit: 'Submit',
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
setupFakeImport('./my-send-button/nl-NL.js', {
|
|
295
|
+
default: {
|
|
296
|
+
submit: 'Send',
|
|
297
|
+
},
|
|
298
|
+
});
|
|
262
299
|
manager = new LocalizeManager();
|
|
263
300
|
const { storage } = getProtectedMembers(manager);
|
|
264
301
|
manager.locale = 'en-US';
|
|
265
|
-
|
|
266
302
|
await manager.loadNamespaces(
|
|
267
303
|
[
|
|
268
304
|
{
|
|
269
305
|
/** @param {string} locale */
|
|
270
|
-
'my-defaults': locale => fakeImport(`./my-defaults/${locale}.js`),
|
|
306
|
+
'my-defaults': (locale) => fakeImport(`./my-defaults/${locale}.js`),
|
|
271
307
|
},
|
|
272
308
|
{
|
|
273
309
|
/** @param {string} locale */
|
|
274
|
-
'my-send-button': locale => fakeImport(`./my-send-button/${locale}.js`),
|
|
310
|
+
'my-send-button': (locale) => fakeImport(`./my-send-button/${locale}.js`),
|
|
275
311
|
},
|
|
276
312
|
],
|
|
277
|
-
{
|
|
313
|
+
{
|
|
314
|
+
locale: 'nl-NL',
|
|
315
|
+
},
|
|
278
316
|
);
|
|
279
|
-
|
|
280
317
|
expect(storage).to.deep.equal({
|
|
281
318
|
'nl-NL': {
|
|
282
|
-
'my-defaults': {
|
|
283
|
-
|
|
319
|
+
'my-defaults': {
|
|
320
|
+
submit: 'Submit',
|
|
321
|
+
},
|
|
322
|
+
'my-send-button': {
|
|
323
|
+
submit: 'Send',
|
|
324
|
+
},
|
|
284
325
|
},
|
|
285
326
|
});
|
|
286
327
|
});
|
|
287
|
-
|
|
288
328
|
it('loads generic language file if locale file is not found', async () => {
|
|
289
|
-
setupFakeImport('./my-component/en.js', {
|
|
290
|
-
|
|
329
|
+
setupFakeImport('./my-component/en.js', {
|
|
330
|
+
default: {
|
|
331
|
+
greeting: 'Hello!',
|
|
332
|
+
},
|
|
333
|
+
});
|
|
291
334
|
manager = new LocalizeManager();
|
|
292
335
|
const { storage } = getProtectedMembers(manager);
|
|
293
|
-
|
|
294
336
|
await manager.loadNamespace({
|
|
295
337
|
/** @param {string} locale */
|
|
296
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
338
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
297
339
|
});
|
|
298
|
-
|
|
299
340
|
expect(storage).to.deep.equal({
|
|
300
341
|
'en-GB': {
|
|
301
|
-
'my-component': {
|
|
342
|
+
'my-component': {
|
|
343
|
+
greeting: 'Hello!',
|
|
344
|
+
},
|
|
302
345
|
},
|
|
303
346
|
});
|
|
304
347
|
});
|
|
305
|
-
|
|
306
348
|
it('throws if both locale and language files could not be loaded', async () => {
|
|
307
349
|
manager = new LocalizeManager();
|
|
308
|
-
|
|
309
350
|
try {
|
|
310
351
|
await manager.loadNamespace({
|
|
311
352
|
/** @param {string} locale */
|
|
312
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
353
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
313
354
|
});
|
|
314
355
|
} catch (e) {
|
|
315
356
|
expect(e).to.be.instanceof(Error);
|
|
316
|
-
expect(/** @type {Error} */
|
|
357
|
+
expect(/** @type {Error} */ e.message).to.equal(
|
|
317
358
|
'Data for namespace "my-component" and locale "en-GB" could not be loaded. ' +
|
|
318
359
|
'Make sure you have data for locale "en-GB" (and/or generic language "en").',
|
|
319
360
|
);
|
|
320
361
|
return;
|
|
321
362
|
}
|
|
322
|
-
|
|
323
363
|
throw new Error('did not throw');
|
|
324
364
|
});
|
|
325
|
-
|
|
326
365
|
describe('fallback locale', () => {
|
|
327
366
|
it('can load a fallback locale if current one can not be loaded', async () => {
|
|
328
|
-
manager = new LocalizeManager({
|
|
367
|
+
manager = new LocalizeManager({
|
|
368
|
+
fallbackLocale: 'en-GB',
|
|
369
|
+
});
|
|
329
370
|
const { storage } = getProtectedMembers(manager);
|
|
330
371
|
manager.locale = 'nl-NL';
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
372
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
373
|
+
default: {
|
|
374
|
+
greeting: 'Hello!',
|
|
375
|
+
},
|
|
376
|
+
});
|
|
334
377
|
await manager.loadNamespace({
|
|
335
378
|
/** @param {string} locale */
|
|
336
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
379
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
337
380
|
});
|
|
338
|
-
|
|
339
381
|
expect(storage).to.deep.equal({
|
|
340
382
|
'nl-NL': {
|
|
341
|
-
'my-component': {
|
|
383
|
+
'my-component': {
|
|
384
|
+
greeting: 'Hello!',
|
|
385
|
+
},
|
|
342
386
|
},
|
|
343
387
|
});
|
|
344
388
|
});
|
|
345
|
-
|
|
346
389
|
it('can load fallback generic language file if fallback locale file is not found', async () => {
|
|
347
|
-
manager = new LocalizeManager({
|
|
390
|
+
manager = new LocalizeManager({
|
|
391
|
+
fallbackLocale: 'en-GB',
|
|
392
|
+
});
|
|
348
393
|
const { storage } = getProtectedMembers(manager);
|
|
349
394
|
manager.locale = 'nl-NL';
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
395
|
+
setupFakeImport('./my-component/en.js', {
|
|
396
|
+
default: {
|
|
397
|
+
greeting: 'Hello!',
|
|
398
|
+
},
|
|
399
|
+
});
|
|
353
400
|
await manager.loadNamespace({
|
|
354
401
|
/** @param {string} locale */
|
|
355
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
402
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
356
403
|
});
|
|
357
|
-
|
|
358
404
|
expect(storage).to.deep.equal({
|
|
359
405
|
'nl-NL': {
|
|
360
|
-
'my-component': {
|
|
406
|
+
'my-component': {
|
|
407
|
+
greeting: 'Hello!',
|
|
408
|
+
},
|
|
361
409
|
},
|
|
362
410
|
});
|
|
363
411
|
});
|
|
364
|
-
|
|
365
412
|
it('throws if neither current locale nor fallback locale are found', async () => {
|
|
366
|
-
manager = new LocalizeManager({
|
|
413
|
+
manager = new LocalizeManager({
|
|
414
|
+
fallbackLocale: 'en-GB',
|
|
415
|
+
});
|
|
367
416
|
manager.locale = 'nl-NL';
|
|
368
|
-
|
|
369
417
|
try {
|
|
370
418
|
await manager.loadNamespace({
|
|
371
419
|
/** @param {string} locale */
|
|
372
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`),
|
|
420
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`),
|
|
373
421
|
});
|
|
374
422
|
} catch (e) {
|
|
375
423
|
expect(e).to.be.instanceof(Error);
|
|
376
|
-
expect(/** @type {Error} */
|
|
424
|
+
expect(/** @type {Error} */ e.message).to.equal(
|
|
377
425
|
'Data for namespace "my-component" and current locale "nl-NL" or fallback locale "en-GB" could not be loaded. ' +
|
|
378
426
|
'Make sure you have data either for locale "nl-NL" (and/or generic language "nl") or for fallback "en-GB" (and/or "en").',
|
|
379
427
|
);
|
|
380
428
|
return;
|
|
381
429
|
}
|
|
382
|
-
|
|
383
430
|
throw new Error('did not throw');
|
|
384
431
|
});
|
|
385
|
-
|
|
386
432
|
it('throws an error if the locale set by the user is not a full language locale', async () => {
|
|
387
433
|
manager = new LocalizeManager();
|
|
388
434
|
expect(() => {
|
|
@@ -393,7 +439,6 @@ describe('LocalizeManager', () => {
|
|
|
393
439
|
See https://github.com/ing-bank/lion/issues/187 for more information.
|
|
394
440
|
`);
|
|
395
441
|
});
|
|
396
|
-
|
|
397
442
|
it('does not throw an error if locale was set through the html lang attribute', async () => {
|
|
398
443
|
manager = new LocalizeManager();
|
|
399
444
|
expect(() => {
|
|
@@ -402,32 +447,26 @@ describe('LocalizeManager', () => {
|
|
|
402
447
|
});
|
|
403
448
|
});
|
|
404
449
|
});
|
|
405
|
-
|
|
406
450
|
describe('loading using routes predefined via setupNamespaceLoader()', () => {
|
|
407
451
|
it('loads a namespace via loadNamespace() using string route', async () => {
|
|
408
|
-
fetchMock.get('./my-component/en-GB.json', {
|
|
409
|
-
|
|
452
|
+
fetchMock.get('./my-component/en-GB.json', {
|
|
453
|
+
greeting: 'Hello!',
|
|
454
|
+
});
|
|
410
455
|
manager = new LocalizeManager();
|
|
411
456
|
const { storage } = getProtectedMembers(manager);
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
async locale => {
|
|
417
|
-
const response = await fetch(`./my-component/${locale}.json`);
|
|
418
|
-
return response.json();
|
|
419
|
-
},
|
|
420
|
-
);
|
|
421
|
-
|
|
457
|
+
manager.setupNamespaceLoader('my-component' /** @param {string} locale */, async (locale) => {
|
|
458
|
+
const response = await fetch(`./my-component/${locale}.json`);
|
|
459
|
+
return response.json();
|
|
460
|
+
});
|
|
422
461
|
await manager.loadNamespace('my-component');
|
|
423
|
-
|
|
424
462
|
expect(storage).to.deep.equal({
|
|
425
463
|
'en-GB': {
|
|
426
|
-
'my-component': {
|
|
464
|
+
'my-component': {
|
|
465
|
+
greeting: 'Hello!',
|
|
466
|
+
},
|
|
427
467
|
},
|
|
428
468
|
});
|
|
429
469
|
});
|
|
430
|
-
|
|
431
470
|
it('loads multiple namespaces via loadNamespaces() using string routes', async () => {
|
|
432
471
|
fetchMock.get('./my-defaults/en-GB.json', {
|
|
433
472
|
submit: 'Submit',
|
|
@@ -435,30 +474,20 @@ describe('LocalizeManager', () => {
|
|
|
435
474
|
fetchMock.get('./my-send-button/en-GB.json', {
|
|
436
475
|
submit: 'Send',
|
|
437
476
|
});
|
|
438
|
-
|
|
439
477
|
manager = new LocalizeManager();
|
|
440
478
|
const { storage } = getProtectedMembers(manager);
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
async locale => {
|
|
446
|
-
const response = await fetch(`./my-defaults/${locale}.json`);
|
|
447
|
-
return response.json();
|
|
448
|
-
},
|
|
449
|
-
);
|
|
450
|
-
|
|
479
|
+
manager.setupNamespaceLoader('my-defaults' /** @param {string} locale */, async (locale) => {
|
|
480
|
+
const response = await fetch(`./my-defaults/${locale}.json`);
|
|
481
|
+
return response.json();
|
|
482
|
+
});
|
|
451
483
|
manager.setupNamespaceLoader(
|
|
452
|
-
'my-send-button'
|
|
453
|
-
|
|
454
|
-
async locale => {
|
|
484
|
+
'my-send-button' /** @param {string} locale */,
|
|
485
|
+
async (locale) => {
|
|
455
486
|
const response = await fetch(`./my-send-button/${locale}.json`);
|
|
456
487
|
return response.json();
|
|
457
488
|
},
|
|
458
489
|
);
|
|
459
|
-
|
|
460
490
|
await manager.loadNamespaces(['my-defaults', 'my-send-button']);
|
|
461
|
-
|
|
462
491
|
expect(storage).to.deep.equal({
|
|
463
492
|
'en-GB': {
|
|
464
493
|
'my-send-button': {
|
|
@@ -470,13 +499,12 @@ describe('LocalizeManager', () => {
|
|
|
470
499
|
},
|
|
471
500
|
});
|
|
472
501
|
});
|
|
473
|
-
|
|
474
502
|
it('loads a namespace via loadNamespace() using RegExp route', async () => {
|
|
475
|
-
fetchMock.get('./my-component/en-GB.json', {
|
|
476
|
-
|
|
503
|
+
fetchMock.get('./my-component/en-GB.json', {
|
|
504
|
+
greeting: 'Hello!',
|
|
505
|
+
});
|
|
477
506
|
manager = new LocalizeManager();
|
|
478
507
|
const { storage } = getProtectedMembers(manager);
|
|
479
|
-
|
|
480
508
|
manager.setupNamespaceLoader(
|
|
481
509
|
/my-.+/,
|
|
482
510
|
/**
|
|
@@ -488,23 +516,24 @@ describe('LocalizeManager', () => {
|
|
|
488
516
|
return response.json();
|
|
489
517
|
},
|
|
490
518
|
);
|
|
491
|
-
|
|
492
519
|
await manager.loadNamespace('my-component');
|
|
493
|
-
|
|
494
520
|
expect(storage).to.deep.equal({
|
|
495
521
|
'en-GB': {
|
|
496
|
-
'my-component': {
|
|
522
|
+
'my-component': {
|
|
523
|
+
greeting: 'Hello!',
|
|
524
|
+
},
|
|
497
525
|
},
|
|
498
526
|
});
|
|
499
527
|
});
|
|
500
|
-
|
|
501
528
|
it('loads multiple namespaces via loadNamespaces() using RegExp routes', async () => {
|
|
502
|
-
fetchMock.get('./my-defaults/en-GB.json', {
|
|
503
|
-
|
|
504
|
-
|
|
529
|
+
fetchMock.get('./my-defaults/en-GB.json', {
|
|
530
|
+
submit: 'Submit',
|
|
531
|
+
});
|
|
532
|
+
fetchMock.get('./my-send-button/en-GB.json', {
|
|
533
|
+
submit: 'Send',
|
|
534
|
+
});
|
|
505
535
|
manager = new LocalizeManager();
|
|
506
536
|
const { storage } = getProtectedMembers(manager);
|
|
507
|
-
|
|
508
537
|
manager.setupNamespaceLoader(
|
|
509
538
|
/my-.+/,
|
|
510
539
|
/**
|
|
@@ -516,129 +545,168 @@ describe('LocalizeManager', () => {
|
|
|
516
545
|
return response.json();
|
|
517
546
|
},
|
|
518
547
|
);
|
|
519
|
-
|
|
520
548
|
await manager.loadNamespaces(['my-defaults', 'my-send-button']);
|
|
521
|
-
|
|
522
549
|
expect(storage).to.deep.equal({
|
|
523
550
|
'en-GB': {
|
|
524
|
-
'my-defaults': {
|
|
525
|
-
|
|
551
|
+
'my-defaults': {
|
|
552
|
+
submit: 'Submit',
|
|
553
|
+
},
|
|
554
|
+
'my-send-button': {
|
|
555
|
+
submit: 'Send',
|
|
556
|
+
},
|
|
526
557
|
},
|
|
527
558
|
});
|
|
528
559
|
});
|
|
529
560
|
});
|
|
530
|
-
|
|
531
561
|
describe('{ autoLoadOnLocaleChange: true }', () => {
|
|
532
562
|
it('loads namespaces automatically when locale is changed via manager', async () => {
|
|
533
|
-
setupFakeImport('./my-component/en-GB.js', {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
563
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
564
|
+
default: {
|
|
565
|
+
greeting: 'Hello!',
|
|
566
|
+
},
|
|
567
|
+
});
|
|
568
|
+
setupFakeImport('./my-component/nl-NL.js', {
|
|
569
|
+
default: {
|
|
570
|
+
greeting: 'Hallo!',
|
|
571
|
+
},
|
|
572
|
+
});
|
|
573
|
+
manager = new LocalizeManager({
|
|
574
|
+
autoLoadOnLocaleChange: true,
|
|
575
|
+
});
|
|
537
576
|
const { storage } = getProtectedMembers(manager);
|
|
538
|
-
|
|
539
577
|
await manager.loadNamespace({
|
|
540
578
|
/** @param {string} locale */
|
|
541
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
|
|
579
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
|
|
542
580
|
});
|
|
543
|
-
|
|
544
581
|
expect(storage).to.deep.equal({
|
|
545
|
-
'en-GB': {
|
|
582
|
+
'en-GB': {
|
|
583
|
+
'my-component': {
|
|
584
|
+
greeting: 'Hello!',
|
|
585
|
+
},
|
|
586
|
+
},
|
|
546
587
|
});
|
|
547
|
-
|
|
548
588
|
manager.locale = 'nl-NL';
|
|
549
589
|
await manager.loadingComplete;
|
|
550
|
-
|
|
551
590
|
expect(storage).to.deep.equal({
|
|
552
|
-
'en-GB': {
|
|
553
|
-
|
|
591
|
+
'en-GB': {
|
|
592
|
+
'my-component': {
|
|
593
|
+
greeting: 'Hello!',
|
|
594
|
+
},
|
|
595
|
+
},
|
|
596
|
+
'nl-NL': {
|
|
597
|
+
'my-component': {
|
|
598
|
+
greeting: 'Hallo!',
|
|
599
|
+
},
|
|
600
|
+
},
|
|
554
601
|
});
|
|
555
602
|
});
|
|
556
603
|
});
|
|
557
|
-
|
|
558
604
|
describe('loading extra features', () => {
|
|
559
605
|
it('has a Promise "loadingComplete" that resolved once all pending loading is done', async () => {
|
|
560
|
-
setupFakeImport('./my-component/en-GB.js', {
|
|
606
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
607
|
+
default: {
|
|
608
|
+
greeting: 'Hello!',
|
|
609
|
+
},
|
|
610
|
+
});
|
|
561
611
|
manager = new LocalizeManager();
|
|
562
612
|
const { storage } = getProtectedMembers(manager);
|
|
563
|
-
|
|
564
613
|
manager.loadNamespace({
|
|
565
614
|
/** @param {string} locale */
|
|
566
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
|
|
615
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
|
|
567
616
|
});
|
|
568
617
|
expect(storage).to.deep.equal({});
|
|
569
618
|
await manager.loadingComplete;
|
|
570
619
|
expect(storage).to.deep.equal({
|
|
571
|
-
'en-GB': {
|
|
620
|
+
'en-GB': {
|
|
621
|
+
'my-component': {
|
|
622
|
+
greeting: 'Hello!',
|
|
623
|
+
},
|
|
624
|
+
},
|
|
572
625
|
});
|
|
573
626
|
});
|
|
574
|
-
|
|
575
627
|
it('loads namespace only once for the same locale', async () => {
|
|
576
628
|
let called = 0;
|
|
577
629
|
const myNamespace = {
|
|
578
630
|
'my-namespace': () => {
|
|
579
631
|
called += 1;
|
|
580
|
-
return Promise.resolve({
|
|
632
|
+
return Promise.resolve({
|
|
633
|
+
default: {},
|
|
634
|
+
});
|
|
581
635
|
},
|
|
582
636
|
};
|
|
583
637
|
manager = new LocalizeManager();
|
|
584
|
-
|
|
585
638
|
await Promise.all([
|
|
586
639
|
manager.loadNamespace(myNamespace),
|
|
587
640
|
manager.loadNamespace(myNamespace),
|
|
588
641
|
manager.loadNamespace(myNamespace),
|
|
589
642
|
]);
|
|
590
|
-
|
|
591
643
|
expect(called).to.equal(1);
|
|
592
644
|
});
|
|
593
|
-
|
|
594
645
|
it('does not load inlined data', async () => {
|
|
595
|
-
setupFakeImport('./my-component/en-GB.js', {
|
|
596
|
-
|
|
646
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
647
|
+
default: {
|
|
648
|
+
greeting: 'Loaded hello!',
|
|
649
|
+
},
|
|
650
|
+
});
|
|
597
651
|
manager = new LocalizeManager();
|
|
598
652
|
const { storage } = getProtectedMembers(manager);
|
|
599
|
-
manager.addData('en-GB', 'my-component', {
|
|
600
|
-
|
|
653
|
+
manager.addData('en-GB', 'my-component', {
|
|
654
|
+
greeting: 'Hello!',
|
|
655
|
+
});
|
|
601
656
|
await manager.loadNamespace('my-component');
|
|
602
|
-
|
|
603
657
|
expect(storage).to.deep.equal({
|
|
604
|
-
'en-GB': {
|
|
658
|
+
'en-GB': {
|
|
659
|
+
'my-component': {
|
|
660
|
+
greeting: 'Hello!',
|
|
661
|
+
},
|
|
662
|
+
},
|
|
605
663
|
});
|
|
606
|
-
|
|
607
664
|
let called = 0;
|
|
608
665
|
await manager.loadNamespace({
|
|
609
666
|
/** @param {string} locale */
|
|
610
|
-
'my-component': locale => {
|
|
667
|
+
'my-component': (locale) => {
|
|
611
668
|
called += 1;
|
|
612
669
|
return fakeImport(`./my-component/${locale}.js`);
|
|
613
670
|
},
|
|
614
671
|
});
|
|
615
|
-
|
|
616
672
|
expect(called).to.equal(0);
|
|
617
673
|
expect(storage).to.deep.equal({
|
|
618
|
-
'en-GB': {
|
|
674
|
+
'en-GB': {
|
|
675
|
+
'my-component': {
|
|
676
|
+
greeting: 'Hello!',
|
|
677
|
+
},
|
|
678
|
+
},
|
|
619
679
|
});
|
|
620
680
|
});
|
|
621
681
|
});
|
|
622
|
-
|
|
623
682
|
describe('message()', () => {
|
|
624
683
|
it('gets the message for the key in the format of "namespace:name"', () => {
|
|
625
684
|
manager = new LocalizeManager();
|
|
626
|
-
manager.addData('en-GB', 'my-ns', {
|
|
685
|
+
manager.addData('en-GB', 'my-ns', {
|
|
686
|
+
greeting: 'Hello!',
|
|
687
|
+
});
|
|
627
688
|
expect(manager.msg('my-ns:greeting')).to.equal('Hello!');
|
|
628
689
|
});
|
|
629
|
-
|
|
630
690
|
it('supports nested names in the format of "namespace:path.to.deep.name"', () => {
|
|
631
691
|
manager = new LocalizeManager();
|
|
632
|
-
manager.addData('en-GB', 'my-ns', {
|
|
692
|
+
manager.addData('en-GB', 'my-ns', {
|
|
693
|
+
'login-section': {
|
|
694
|
+
greeting: 'Hello!',
|
|
695
|
+
},
|
|
696
|
+
});
|
|
633
697
|
expect(manager.msg('my-ns:login-section.greeting')).to.equal('Hello!');
|
|
634
698
|
});
|
|
635
|
-
|
|
636
699
|
it('supports variables', () => {
|
|
637
700
|
manager = new LocalizeManager();
|
|
638
|
-
manager.addData('en-GB', 'my-ns', {
|
|
639
|
-
|
|
701
|
+
manager.addData('en-GB', 'my-ns', {
|
|
702
|
+
greeting: 'Hello {name}!',
|
|
703
|
+
});
|
|
704
|
+
expect(
|
|
705
|
+
manager.msg('my-ns:greeting', {
|
|
706
|
+
name: 'John',
|
|
707
|
+
}),
|
|
708
|
+
).to.equal('Hello John!');
|
|
640
709
|
});
|
|
641
|
-
|
|
642
710
|
it('supports Intl MessageFormat proposal for messages', () => {
|
|
643
711
|
manager = new LocalizeManager();
|
|
644
712
|
manager.addData('en-GB', 'my-ns', {
|
|
@@ -646,70 +714,115 @@ describe('LocalizeManager', () => {
|
|
|
646
714
|
number: 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
|
|
647
715
|
});
|
|
648
716
|
const today = new Date('2018/04/30');
|
|
649
|
-
expect(
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
717
|
+
expect(
|
|
718
|
+
removeLtrRtl(
|
|
719
|
+
manager.msg('my-ns:date', {
|
|
720
|
+
today,
|
|
721
|
+
}),
|
|
722
|
+
),
|
|
723
|
+
).to.equal('I was written on 30 Apr 2018.');
|
|
724
|
+
expect(
|
|
725
|
+
manager.msg('my-ns:number', {
|
|
726
|
+
n: 0,
|
|
727
|
+
}),
|
|
728
|
+
).to.equal('You have no photos.');
|
|
729
|
+
expect(
|
|
730
|
+
manager.msg('my-ns:number', {
|
|
731
|
+
n: 1,
|
|
732
|
+
}),
|
|
733
|
+
).to.equal('You have one photo.');
|
|
734
|
+
expect(
|
|
735
|
+
manager.msg('my-ns:number', {
|
|
736
|
+
n: 2,
|
|
737
|
+
}),
|
|
738
|
+
).to.equal('You have 2 photos.');
|
|
655
739
|
});
|
|
656
|
-
|
|
657
740
|
it('takes into account globally changed locale', () => {
|
|
658
741
|
manager = new LocalizeManager();
|
|
659
742
|
manager.locale = 'nl-NL';
|
|
660
|
-
manager.addData('en-GB', 'my-ns', {
|
|
661
|
-
|
|
743
|
+
manager.addData('en-GB', 'my-ns', {
|
|
744
|
+
greeting: 'Hi!',
|
|
745
|
+
});
|
|
746
|
+
manager.addData('nl-NL', 'my-ns', {
|
|
747
|
+
greeting: 'Hey!',
|
|
748
|
+
});
|
|
662
749
|
expect(manager.msg('my-ns:greeting')).to.equal('Hey!');
|
|
663
750
|
});
|
|
664
|
-
|
|
665
751
|
it('allows to provide a different locale for specific call', () => {
|
|
666
752
|
manager = new LocalizeManager();
|
|
667
|
-
manager.addData('en-GB', 'my-ns', {
|
|
668
|
-
|
|
669
|
-
|
|
753
|
+
manager.addData('en-GB', 'my-ns', {
|
|
754
|
+
greeting: 'Hi!',
|
|
755
|
+
});
|
|
756
|
+
manager.addData('nl-NL', 'my-ns', {
|
|
757
|
+
greeting: 'Hey!',
|
|
758
|
+
});
|
|
759
|
+
expect(
|
|
760
|
+
manager.msg('my-ns:greeting', undefined, {
|
|
761
|
+
locale: 'nl-NL',
|
|
762
|
+
}),
|
|
763
|
+
).to.equal('Hey!');
|
|
670
764
|
manager.reset();
|
|
671
|
-
manager.addData('en-GB', 'my-ns', {
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
765
|
+
manager.addData('en-GB', 'my-ns', {
|
|
766
|
+
greeting: 'Hi {name}!',
|
|
767
|
+
});
|
|
768
|
+
manager.addData('nl-NL', 'my-ns', {
|
|
769
|
+
greeting: 'Hey {name}!',
|
|
770
|
+
});
|
|
771
|
+
expect(
|
|
772
|
+
manager.msg(
|
|
773
|
+
'my-ns:greeting',
|
|
774
|
+
{
|
|
775
|
+
name: 'John',
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
locale: 'nl-NL',
|
|
779
|
+
},
|
|
780
|
+
),
|
|
781
|
+
).to.equal('Hey John!');
|
|
676
782
|
});
|
|
677
|
-
|
|
678
783
|
it('allows to provide an ordered list of keys where the first resolved is used', () => {
|
|
679
784
|
manager = new LocalizeManager();
|
|
680
785
|
const keys = ['overridden-ns:greeting', 'default-ns:greeting'];
|
|
681
786
|
expect(manager.msg(keys)).to.equal('');
|
|
682
|
-
manager.addData('en-GB', 'default-ns', {
|
|
787
|
+
manager.addData('en-GB', 'default-ns', {
|
|
788
|
+
greeting: 'Hi!',
|
|
789
|
+
});
|
|
683
790
|
expect(manager.msg(keys)).to.equal('Hi!');
|
|
684
|
-
manager.addData('en-GB', 'overridden-ns', {
|
|
791
|
+
manager.addData('en-GB', 'overridden-ns', {
|
|
792
|
+
greeting: 'Hello!',
|
|
793
|
+
});
|
|
685
794
|
expect(manager.msg(keys)).to.equal('Hello!');
|
|
686
795
|
});
|
|
687
|
-
|
|
688
796
|
it('throws a custom error when namespace prefix is missing', () => {
|
|
689
797
|
manager = new LocalizeManager();
|
|
690
798
|
const msgKey = 'greeting';
|
|
691
|
-
manager.addData('en-GB', 'my-ns', {
|
|
799
|
+
manager.addData('en-GB', 'my-ns', {
|
|
800
|
+
[msgKey]: 'Hello!',
|
|
801
|
+
});
|
|
692
802
|
expect(() => manager.msg(msgKey)).to.throw(
|
|
693
803
|
`Namespace is missing in the key "${msgKey}". The format for keys is "namespace:name".`,
|
|
694
804
|
);
|
|
695
805
|
});
|
|
696
806
|
});
|
|
697
|
-
|
|
698
807
|
describe('show key as fallback', () => {
|
|
699
808
|
it('shows the key as a fallback when a translation cannot be found', () => {
|
|
700
|
-
manager = new LocalizeManager({
|
|
701
|
-
|
|
809
|
+
manager = new LocalizeManager({
|
|
810
|
+
showKeyAsFallback: true,
|
|
811
|
+
});
|
|
812
|
+
manager.addData('en-GB', 'my-ns', {
|
|
813
|
+
greeting: 'Hello!',
|
|
814
|
+
});
|
|
702
815
|
expect(manager.msg('my-ns:unknownKey')).to.equal('my-ns:unknownKey');
|
|
703
816
|
});
|
|
704
|
-
|
|
705
817
|
it('shows nothing when a translation cannot be found by default', () => {
|
|
706
818
|
manager = new LocalizeManager();
|
|
707
|
-
manager.addData('en-GB', 'my-ns', {
|
|
819
|
+
manager.addData('en-GB', 'my-ns', {
|
|
820
|
+
greeting: 'Hello!',
|
|
821
|
+
});
|
|
708
822
|
expect(manager.msg('my-ns:unknownKey')).to.equal('');
|
|
709
823
|
});
|
|
710
824
|
});
|
|
711
825
|
});
|
|
712
|
-
|
|
713
826
|
describe('When supporting external translation tools like Google Translate', () => {
|
|
714
827
|
let manager;
|
|
715
828
|
const originalLang = document.documentElement.lang;
|
|
@@ -718,7 +831,6 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
718
831
|
async function simulateGoogleTranslateOn(lang) {
|
|
719
832
|
document.documentElement.lang = lang;
|
|
720
833
|
}
|
|
721
|
-
|
|
722
834
|
async function simulateGoogleTranslateOff() {
|
|
723
835
|
document.documentElement.lang = 'auto';
|
|
724
836
|
}
|
|
@@ -730,16 +842,13 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
730
842
|
function getInstance(cfg) {
|
|
731
843
|
return new LocalizeManager(cfg || {});
|
|
732
844
|
}
|
|
733
|
-
|
|
734
845
|
afterEach(() => {
|
|
735
846
|
document.documentElement.removeAttribute('lang');
|
|
736
847
|
document.documentElement.removeAttribute('data-localize-lang');
|
|
737
848
|
});
|
|
738
|
-
|
|
739
849
|
after(() => {
|
|
740
850
|
document.documentElement.lang = originalLang;
|
|
741
851
|
});
|
|
742
|
-
|
|
743
852
|
describe('On initialization', () => {
|
|
744
853
|
/** A default scenario */
|
|
745
854
|
it('synchronizes from html[data-localize-lang] attribute to LocalizeManager', async () => {
|
|
@@ -757,29 +866,23 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
757
866
|
manager = getInstance();
|
|
758
867
|
expect(manager.locale).to.equal('en-US');
|
|
759
868
|
});
|
|
760
|
-
|
|
761
869
|
it("doesn't synchronize from html[lang] attribute to LocalizeManager", async () => {
|
|
762
870
|
document.documentElement.setAttribute('data-localize-lang', 'en-US');
|
|
763
871
|
manager = getInstance();
|
|
764
872
|
document.documentElement.lang = 'nl-NL';
|
|
765
873
|
expect(manager.locale).to.not.equal('nl-NL');
|
|
766
874
|
});
|
|
767
|
-
|
|
768
875
|
it('triggers support for external translation tools via data-localize-lang', async () => {
|
|
769
876
|
document.documentElement.removeAttribute('data-localize-lang');
|
|
770
877
|
manager = getInstance();
|
|
771
878
|
const { supportExternalTranslationTools: first } = getProtectedMembers(manager);
|
|
772
|
-
|
|
773
879
|
expect(first).to.be.false;
|
|
774
|
-
|
|
775
880
|
document.documentElement.setAttribute('data-localize-lang', 'nl-NL');
|
|
776
881
|
manager = getInstance();
|
|
777
882
|
const { supportExternalTranslationTools: second } = getProtectedMembers(manager);
|
|
778
|
-
|
|
779
883
|
expect(second).to.be.true;
|
|
780
884
|
});
|
|
781
885
|
});
|
|
782
|
-
|
|
783
886
|
describe('After initialization', () => {
|
|
784
887
|
it(`synchronizes from LocalizeManager to html[lang] when
|
|
785
888
|
3rd party translation tool is NOT in control`, async () => {
|
|
@@ -789,7 +892,6 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
789
892
|
manager.locale = 'nl-NL';
|
|
790
893
|
expect(document.documentElement.lang).to.equal('nl-NL');
|
|
791
894
|
});
|
|
792
|
-
|
|
793
895
|
it(`doesn't synchronize from LocalizeManager to html[lang] when
|
|
794
896
|
3rd party translation tool is in control`, async () => {
|
|
795
897
|
document.documentElement.setAttribute('data-localize-lang', 'en-US');
|
|
@@ -798,7 +900,6 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
798
900
|
manager.locale = 'nl-NL';
|
|
799
901
|
expect(document.documentElement.lang).to.equal('fr');
|
|
800
902
|
});
|
|
801
|
-
|
|
802
903
|
it(`doesn't synchronize from html[lang] attribute to LocalizeManager`, async () => {
|
|
803
904
|
document.documentElement.setAttribute('data-localize-lang', 'en-US');
|
|
804
905
|
manager = getInstance();
|
|
@@ -808,7 +909,6 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
808
909
|
await simulateGoogleTranslateOn('fr');
|
|
809
910
|
expect(manager.locale).to.equal('nl-NL');
|
|
810
911
|
});
|
|
811
|
-
|
|
812
912
|
it(`restores html[lang] when 3rd party translation tool is turned off again`, async () => {
|
|
813
913
|
manager = getInstance();
|
|
814
914
|
manager.locale = 'nl-NL';
|
|
@@ -819,69 +919,76 @@ describe('When supporting external translation tools like Google Translate', ()
|
|
|
819
919
|
});
|
|
820
920
|
});
|
|
821
921
|
});
|
|
822
|
-
|
|
823
922
|
describe('[deprecated] When not supporting external translation tools like Google Translate', () => {
|
|
824
923
|
/** @type {LocalizeManager} */
|
|
825
924
|
let manager;
|
|
826
|
-
|
|
827
925
|
beforeEach(() => {
|
|
828
926
|
// makes sure that between tests the localization is reset to default state
|
|
829
927
|
document.documentElement.lang = 'en-GB';
|
|
830
928
|
});
|
|
831
|
-
|
|
832
929
|
afterEach(() => {
|
|
833
930
|
manager.teardown();
|
|
834
931
|
});
|
|
835
|
-
|
|
836
932
|
afterEach(() => {
|
|
837
933
|
fetchMock.restore();
|
|
838
934
|
resetFakeImport();
|
|
839
935
|
});
|
|
840
|
-
|
|
841
936
|
it('initializes locale from <html> by default', () => {
|
|
842
937
|
manager = new LocalizeManager({});
|
|
843
938
|
expect(manager.locale).to.equal('en-GB');
|
|
844
939
|
});
|
|
845
|
-
|
|
846
940
|
it('fires "localeChanged" event if locale was changed via <html lang> attribute', async () => {
|
|
847
941
|
manager = new LocalizeManager({});
|
|
848
942
|
setTimeout(() => {
|
|
849
943
|
document.documentElement.lang = 'en-US';
|
|
850
944
|
});
|
|
851
|
-
|
|
852
945
|
const event = await oneEvent(
|
|
853
|
-
/** @type {EventTarget} */
|
|
946
|
+
/** @type {EventTarget} */ /** @type {unknown} */ manager,
|
|
854
947
|
'localeChanged',
|
|
855
948
|
);
|
|
856
949
|
expect(event.detail.newLocale).to.equal('en-US');
|
|
857
950
|
expect(event.detail.oldLocale).to.equal('en-GB');
|
|
858
951
|
});
|
|
859
|
-
|
|
860
952
|
it('loads namespaces automatically when locale is changed via <html lang> attribute', async () => {
|
|
861
|
-
setupFakeImport('./my-component/en-GB.js', {
|
|
862
|
-
|
|
863
|
-
|
|
953
|
+
setupFakeImport('./my-component/en-GB.js', {
|
|
954
|
+
default: {
|
|
955
|
+
greeting: 'Hello!',
|
|
956
|
+
},
|
|
957
|
+
});
|
|
958
|
+
setupFakeImport('./my-component/nl-NL.js', {
|
|
959
|
+
default: {
|
|
960
|
+
greeting: 'Hallo!',
|
|
961
|
+
},
|
|
962
|
+
});
|
|
864
963
|
manager = new LocalizeManager({
|
|
865
964
|
autoLoadOnLocaleChange: true,
|
|
866
965
|
});
|
|
867
966
|
const { storage } = getProtectedMembers(manager);
|
|
868
|
-
|
|
869
967
|
await manager.loadNamespace({
|
|
870
968
|
/** @param {string} locale */
|
|
871
|
-
'my-component': locale => fakeImport(`./my-component/${locale}.js`, 25),
|
|
969
|
+
'my-component': (locale) => fakeImport(`./my-component/${locale}.js`, 25),
|
|
872
970
|
});
|
|
873
|
-
|
|
874
971
|
expect(storage).to.deep.equal({
|
|
875
|
-
'en-GB': {
|
|
972
|
+
'en-GB': {
|
|
973
|
+
'my-component': {
|
|
974
|
+
greeting: 'Hello!',
|
|
975
|
+
},
|
|
976
|
+
},
|
|
876
977
|
});
|
|
877
|
-
|
|
878
978
|
document.documentElement.lang = 'nl-NL';
|
|
879
979
|
await aTimeout(0); // wait for mutation observer to be called
|
|
880
980
|
await manager.loadingComplete;
|
|
881
|
-
|
|
882
981
|
expect(storage).to.deep.equal({
|
|
883
|
-
'en-GB': {
|
|
884
|
-
|
|
982
|
+
'en-GB': {
|
|
983
|
+
'my-component': {
|
|
984
|
+
greeting: 'Hello!',
|
|
985
|
+
},
|
|
986
|
+
},
|
|
987
|
+
'nl-NL': {
|
|
988
|
+
'my-component': {
|
|
989
|
+
greeting: 'Hallo!',
|
|
990
|
+
},
|
|
991
|
+
},
|
|
885
992
|
});
|
|
886
993
|
});
|
|
887
994
|
});
|