@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
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
waitUntil,
|
|
21
21
|
} from '@open-wc/testing';
|
|
22
22
|
import { cache } from 'lit/directives/cache.js';
|
|
23
|
-
|
|
24
23
|
import { isActiveElement } from '../../core/test-helpers/isActiveElement.js';
|
|
25
24
|
|
|
26
25
|
/**
|
|
@@ -30,30 +29,24 @@ import { isActiveElement } from '../../core/test-helpers/isActiveElement.js';
|
|
|
30
29
|
* @typedef {import('lit').TemplateResult} TemplateResult
|
|
31
30
|
*/
|
|
32
31
|
|
|
33
|
-
const fixture = /** @type {(arg: TemplateResult) => Promise<LionSelectRich>} */
|
|
34
|
-
|
|
32
|
+
const fixture = /** @type {(arg: TemplateResult) => Promise<LionSelectRich>} */ _fixture;
|
|
35
33
|
describe('lion-select-rich', () => {
|
|
36
34
|
it('clicking the label should focus the invoker', async () => {
|
|
37
35
|
const el = await fixture(html` <lion-select-rich label="foo"> </lion-select-rich> `);
|
|
38
36
|
expect(isActiveElement(document.body)).to.be.true;
|
|
39
|
-
|
|
40
37
|
const { _labelNode, _invokerNode } = getSelectRichMembers(el);
|
|
41
38
|
_labelNode.click();
|
|
42
39
|
expect(isActiveElement(_invokerNode)).to.be.true;
|
|
43
40
|
});
|
|
44
|
-
|
|
45
41
|
it('has an attribute focused when focused', async () => {
|
|
46
42
|
const el = await fixture(html` <lion-select-rich label="foo"> </lion-select-rich> `);
|
|
47
|
-
|
|
48
43
|
el.focus();
|
|
49
44
|
await el.updateComplete;
|
|
50
45
|
expect(el.hasAttribute('focused')).to.be.true;
|
|
51
|
-
|
|
52
46
|
el.blur();
|
|
53
47
|
await el.updateComplete;
|
|
54
48
|
expect(el.hasAttribute('focused')).to.be.false;
|
|
55
49
|
});
|
|
56
|
-
|
|
57
50
|
it('checks the first enabled option', async () => {
|
|
58
51
|
const el = await fixture(html`
|
|
59
52
|
<lion-select-rich>
|
|
@@ -65,7 +58,6 @@ describe('lion-select-rich', () => {
|
|
|
65
58
|
expect(el.activeIndex).to.equal(0);
|
|
66
59
|
expect(el.checkedIndex).to.equal(0);
|
|
67
60
|
});
|
|
68
|
-
|
|
69
61
|
it('still has a checked value while disabled', async () => {
|
|
70
62
|
const el = await fixture(html`
|
|
71
63
|
<lion-select-rich disabled>
|
|
@@ -74,10 +66,8 @@ describe('lion-select-rich', () => {
|
|
|
74
66
|
<lion-option .choiceValue=${'Blue'}>Blue</lion-option>
|
|
75
67
|
</lion-select-rich>
|
|
76
68
|
`);
|
|
77
|
-
|
|
78
69
|
expect(el.modelValue).to.equal('Red');
|
|
79
70
|
});
|
|
80
|
-
|
|
81
71
|
it('supports having no default selection initially', async () => {
|
|
82
72
|
const el = await fixture(html`
|
|
83
73
|
<lion-select-rich id="color" name="color" label="Favorite color" has-no-default-selected>
|
|
@@ -90,16 +80,13 @@ describe('lion-select-rich', () => {
|
|
|
90
80
|
expect(_invokerNode.selectedElement).to.be.undefined;
|
|
91
81
|
expect(el.modelValue).to.equal('');
|
|
92
82
|
});
|
|
93
|
-
|
|
94
83
|
describe('Invoker', () => {
|
|
95
84
|
it('generates an lion-select-invoker if no invoker is provided', async () => {
|
|
96
85
|
const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
|
|
97
86
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
98
|
-
|
|
99
87
|
expect(_invokerNode).to.exist;
|
|
100
88
|
expect(_invokerNode).to.be.instanceOf(LionSelectInvoker);
|
|
101
89
|
});
|
|
102
|
-
|
|
103
90
|
it('sets the first option as the selectedElement if no option is checked', async () => {
|
|
104
91
|
const el = await fixture(html`
|
|
105
92
|
<lion-select-rich name="foo">
|
|
@@ -111,7 +98,6 @@ describe('lion-select-rich', () => {
|
|
|
111
98
|
const options = el.formElements;
|
|
112
99
|
expect(_invokerNode.selectedElement).dom.to.equal(options[0]);
|
|
113
100
|
});
|
|
114
|
-
|
|
115
101
|
it('syncs the selected element to the invoker', async () => {
|
|
116
102
|
const el = await fixture(html`
|
|
117
103
|
<lion-select-rich name="foo">
|
|
@@ -122,12 +108,10 @@ describe('lion-select-rich', () => {
|
|
|
122
108
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
123
109
|
const options = el.querySelectorAll('lion-option');
|
|
124
110
|
expect(_invokerNode.selectedElement).dom.to.equal(options[1]);
|
|
125
|
-
|
|
126
111
|
el.checkedIndex = 0;
|
|
127
112
|
await el.updateComplete;
|
|
128
113
|
expect(_invokerNode.selectedElement).dom.to.equal(options[0]);
|
|
129
114
|
});
|
|
130
|
-
|
|
131
115
|
it('delegates readonly to the invoker', async () => {
|
|
132
116
|
const el = await fixture(html`
|
|
133
117
|
<lion-select-rich readonly>
|
|
@@ -139,7 +123,6 @@ describe('lion-select-rich', () => {
|
|
|
139
123
|
expect(el.hasAttribute('readonly')).to.be.true;
|
|
140
124
|
expect(_invokerNode.hasAttribute('readonly')).to.be.true;
|
|
141
125
|
});
|
|
142
|
-
|
|
143
126
|
it('delegates singleOption to the invoker', async () => {
|
|
144
127
|
const el = await fixture(html`
|
|
145
128
|
<lion-select-rich>
|
|
@@ -150,7 +133,6 @@ describe('lion-select-rich', () => {
|
|
|
150
133
|
expect(el.singleOption).to.be.true;
|
|
151
134
|
expect(_invokerNode.hasAttribute('single-option')).to.be.true;
|
|
152
135
|
});
|
|
153
|
-
|
|
154
136
|
it('sets and removes the button role and aria attributes on change of singleOption', async () => {
|
|
155
137
|
const el = await fixture(html`
|
|
156
138
|
<lion-select-rich>
|
|
@@ -159,56 +141,50 @@ describe('lion-select-rich', () => {
|
|
|
159
141
|
</lion-select-rich>
|
|
160
142
|
`);
|
|
161
143
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
162
|
-
|
|
163
144
|
expect(_invokerNode.hasAttribute('role')).to.be.true;
|
|
164
145
|
expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.true;
|
|
165
146
|
expect(_invokerNode.hasAttribute('aria-expanded')).to.be.true;
|
|
166
|
-
|
|
167
147
|
el.singleOption = true;
|
|
168
148
|
await el.updateComplete;
|
|
169
149
|
expect(_invokerNode.hasAttribute('role')).to.be.false;
|
|
170
150
|
expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.false;
|
|
171
151
|
expect(_invokerNode.hasAttribute('aria-expanded')).to.be.false;
|
|
172
|
-
|
|
173
152
|
el.singleOption = false;
|
|
174
153
|
await el.updateComplete;
|
|
175
154
|
expect(_invokerNode.hasAttribute('role')).to.be.true;
|
|
176
155
|
expect(_invokerNode.hasAttribute('aria-haspopup')).to.be.true;
|
|
177
156
|
expect(_invokerNode.hasAttribute('aria-expanded')).to.be.true;
|
|
178
157
|
});
|
|
179
|
-
|
|
180
158
|
it('updates the invoker when the selected element is the same but the modelValue was updated asynchronously', async () => {
|
|
181
159
|
const tagString = defineCE(
|
|
182
160
|
class LionCustomOption extends LionOption {
|
|
183
161
|
render() {
|
|
184
162
|
return html`${this.modelValue.value}`;
|
|
185
163
|
}
|
|
186
|
-
|
|
187
164
|
createRenderRoot() {
|
|
188
165
|
return this;
|
|
189
166
|
}
|
|
190
167
|
},
|
|
191
168
|
);
|
|
192
169
|
const tag = unsafeStatic(tagString);
|
|
193
|
-
const firstOption =
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
170
|
+
const firstOption =
|
|
171
|
+
/** @type {LionOption} */
|
|
172
|
+
await _fixture(html`<${tag} checked .choiceValue=${10}></${tag}>`);
|
|
197
173
|
const el = await fixture(html`
|
|
198
174
|
<lion-select-rich>
|
|
199
175
|
${firstOption}
|
|
200
176
|
<${tag} .choiceValue=${20}></${tag}>
|
|
201
177
|
</lion-select-rich>
|
|
202
178
|
`);
|
|
203
|
-
|
|
204
179
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
/** @type {ShadowRoot} */
|
|
208
|
-
);
|
|
180
|
+
const firstChild =
|
|
181
|
+
/** @type {HTMLElement} */
|
|
182
|
+
/** @type {ShadowRoot} */ _invokerNode.shadowRoot.firstElementChild;
|
|
209
183
|
expect(firstChild.textContent).to.equal('10');
|
|
210
|
-
|
|
211
|
-
|
|
184
|
+
firstOption.modelValue = {
|
|
185
|
+
value: 30,
|
|
186
|
+
checked: true,
|
|
187
|
+
};
|
|
212
188
|
await el.updateComplete;
|
|
213
189
|
expect(firstChild.textContent).to.equal('30');
|
|
214
190
|
});
|
|
@@ -225,72 +201,55 @@ describe('lion-select-rich', () => {
|
|
|
225
201
|
const options = el.formElements;
|
|
226
202
|
await el.updateComplete;
|
|
227
203
|
const { _invokerNode, _inputNode } = getSelectRichMembers(el);
|
|
228
|
-
|
|
229
204
|
expect(_invokerNode.clientWidth).to.equal(options[1].clientWidth);
|
|
230
|
-
|
|
231
|
-
const newOption = /** @type {LionOption} */ (document.createElement('lion-option'));
|
|
205
|
+
const newOption = /** @type {LionOption} */ document.createElement('lion-option');
|
|
232
206
|
newOption.choiceValue = 30;
|
|
233
207
|
newOption.textContent = '30 with longer label';
|
|
234
|
-
|
|
235
208
|
_inputNode.appendChild(newOption);
|
|
236
209
|
await el.updateComplete;
|
|
237
210
|
expect(_invokerNode.clientWidth).to.equal(options[2].clientWidth);
|
|
238
|
-
|
|
239
211
|
_inputNode.removeChild(newOption);
|
|
240
212
|
await el.updateComplete;
|
|
241
213
|
expect(_invokerNode.clientWidth).to.equal(options[1].clientWidth);
|
|
242
214
|
});
|
|
243
215
|
});
|
|
244
|
-
|
|
245
216
|
describe('overlay', () => {
|
|
246
217
|
it('should be closed by default', async () => {
|
|
247
218
|
const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
|
|
248
219
|
expect(el.opened).to.be.false;
|
|
249
220
|
});
|
|
250
|
-
|
|
251
221
|
it('shows/hides the listbox via opened attribute', async () => {
|
|
252
222
|
const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
|
|
253
223
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
254
|
-
|
|
255
224
|
el.opened = true;
|
|
256
225
|
await el.updateComplete;
|
|
257
226
|
expect(_overlayCtrl.isShown).to.be.true;
|
|
258
|
-
|
|
259
227
|
el.opened = false;
|
|
260
228
|
await el.updateComplete;
|
|
261
229
|
await el.updateComplete; // safari takes a little longer
|
|
262
230
|
expect(_overlayCtrl.isShown).to.be.false;
|
|
263
231
|
});
|
|
264
|
-
|
|
265
232
|
it('syncs opened state with overlay shown', async () => {
|
|
266
233
|
const el = await fixture(html` <lion-select-rich .opened=${true}></lion-select-rich> `);
|
|
267
|
-
const outerEl = /** @type {HTMLButtonElement} */ (
|
|
268
|
-
await _fixture('<button>somewhere</button>')
|
|
269
|
-
);
|
|
270
|
-
|
|
234
|
+
const outerEl = /** @type {HTMLButtonElement} */ await _fixture('<button>somewhere</button>');
|
|
271
235
|
expect(el.opened).to.be.true;
|
|
272
|
-
|
|
273
236
|
mimicClick(outerEl);
|
|
274
237
|
await aTimeout(0);
|
|
275
238
|
expect(el.opened).to.be.false;
|
|
276
239
|
});
|
|
277
|
-
|
|
278
240
|
it('will focus the listbox on open and invoker on close', async () => {
|
|
279
241
|
const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
|
|
280
242
|
const { _overlayCtrl, _listboxNode, _invokerNode } = getSelectRichMembers(el);
|
|
281
|
-
|
|
282
243
|
await _overlayCtrl.show();
|
|
283
244
|
await el.updateComplete;
|
|
284
245
|
expect(isActiveElement(_listboxNode)).to.be.true;
|
|
285
246
|
expect(isActiveElement(_invokerNode)).to.be.false;
|
|
286
|
-
|
|
287
247
|
el.opened = false;
|
|
288
248
|
await el.updateComplete;
|
|
289
249
|
await el.updateComplete; // safari takes a little longer
|
|
290
250
|
expect(isActiveElement(_listboxNode)).to.be.false;
|
|
291
251
|
expect(isActiveElement(_invokerNode)).to.be.true;
|
|
292
252
|
});
|
|
293
|
-
|
|
294
253
|
it('opens the listbox with checked option as active', async () => {
|
|
295
254
|
const el = await fixture(html`
|
|
296
255
|
<lion-select-rich>
|
|
@@ -299,15 +258,12 @@ describe('lion-select-rich', () => {
|
|
|
299
258
|
</lion-select-rich>
|
|
300
259
|
`);
|
|
301
260
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
302
|
-
|
|
303
261
|
await _overlayCtrl.show();
|
|
304
262
|
await el.updateComplete;
|
|
305
263
|
const options = el.formElements;
|
|
306
|
-
|
|
307
264
|
expect(options[1].active).to.be.true;
|
|
308
265
|
expect(options[1].checked).to.be.true;
|
|
309
266
|
});
|
|
310
|
-
|
|
311
267
|
it('stays closed on click if it is disabled or readonly or has a single option', async () => {
|
|
312
268
|
const elReadOnly = await fixture(html`
|
|
313
269
|
<lion-select-rich readonly>
|
|
@@ -316,7 +272,6 @@ describe('lion-select-rich', () => {
|
|
|
316
272
|
</lion-select-rich>
|
|
317
273
|
`);
|
|
318
274
|
const { _invokerNode: _invokerNodeReadOnly } = getSelectRichMembers(elReadOnly);
|
|
319
|
-
|
|
320
275
|
const elDisabled = await fixture(html`
|
|
321
276
|
<lion-select-rich disabled>
|
|
322
277
|
<lion-option .choiceValue=${10}>Item 1</lion-option>
|
|
@@ -324,27 +279,22 @@ describe('lion-select-rich', () => {
|
|
|
324
279
|
</lion-select-rich>
|
|
325
280
|
`);
|
|
326
281
|
const { _invokerNode: _invokerNodeDisabled } = getSelectRichMembers(elDisabled);
|
|
327
|
-
|
|
328
282
|
const elSingleoption = await fixture(html`
|
|
329
283
|
<lion-select-rich>
|
|
330
284
|
<lion-option .choiceValue=${10}>Item 1</lion-option>
|
|
331
285
|
</lion-select-rich>
|
|
332
286
|
`);
|
|
333
287
|
const { _invokerNode: _invokerNodeSingleOption } = getSelectRichMembers(elSingleoption);
|
|
334
|
-
|
|
335
288
|
_invokerNodeReadOnly.click();
|
|
336
289
|
await elReadOnly.updateComplete;
|
|
337
290
|
expect(elReadOnly.opened).to.be.false;
|
|
338
|
-
|
|
339
291
|
_invokerNodeDisabled.click();
|
|
340
292
|
await elDisabled.updateComplete;
|
|
341
293
|
expect(elDisabled.opened).to.be.false;
|
|
342
|
-
|
|
343
294
|
_invokerNodeSingleOption.click();
|
|
344
295
|
await elSingleoption.updateComplete;
|
|
345
296
|
expect(elSingleoption.opened).to.be.false;
|
|
346
297
|
});
|
|
347
|
-
|
|
348
298
|
it('stays closed with [ArrowUp] or [ArrowDown] key in readonly mode or has a single option', async () => {
|
|
349
299
|
const elReadOnly = await fixture(html`
|
|
350
300
|
<lion-select-rich readonly>
|
|
@@ -352,26 +302,36 @@ describe('lion-select-rich', () => {
|
|
|
352
302
|
<lion-option .choiceValue=${20} checked>Item 2</lion-option>
|
|
353
303
|
</lion-select-rich>
|
|
354
304
|
`);
|
|
355
|
-
|
|
356
305
|
const elSingleOption = await fixture(html`
|
|
357
306
|
<lion-select-rich>
|
|
358
307
|
<lion-option .choiceValue=${10}>Item 1</lion-option>
|
|
359
308
|
</lion-select-rich>
|
|
360
309
|
`);
|
|
361
|
-
|
|
362
|
-
|
|
310
|
+
elReadOnly.dispatchEvent(
|
|
311
|
+
new KeyboardEvent('keyup', {
|
|
312
|
+
key: 'ArrowDown',
|
|
313
|
+
}),
|
|
314
|
+
);
|
|
363
315
|
expect(elReadOnly.opened).to.be.false;
|
|
364
|
-
|
|
365
|
-
|
|
316
|
+
elReadOnly.dispatchEvent(
|
|
317
|
+
new KeyboardEvent('keyup', {
|
|
318
|
+
key: 'ArrowUp',
|
|
319
|
+
}),
|
|
320
|
+
);
|
|
366
321
|
expect(elReadOnly.opened).to.be.false;
|
|
367
|
-
|
|
368
|
-
|
|
322
|
+
elSingleOption.dispatchEvent(
|
|
323
|
+
new KeyboardEvent('keyup', {
|
|
324
|
+
key: 'ArrowDown',
|
|
325
|
+
}),
|
|
326
|
+
);
|
|
369
327
|
expect(elSingleOption.opened).to.be.false;
|
|
370
|
-
|
|
371
|
-
|
|
328
|
+
elSingleOption.dispatchEvent(
|
|
329
|
+
new KeyboardEvent('keyup', {
|
|
330
|
+
key: 'ArrowUp',
|
|
331
|
+
}),
|
|
332
|
+
);
|
|
372
333
|
expect(elSingleOption.opened).to.be.false;
|
|
373
334
|
});
|
|
374
|
-
|
|
375
335
|
it('sets inheritsReferenceWidth to min by default', async () => {
|
|
376
336
|
const el = await fixture(html`
|
|
377
337
|
<lion-select-rich name="favoriteColor" label="Favorite color">
|
|
@@ -381,14 +341,11 @@ describe('lion-select-rich', () => {
|
|
|
381
341
|
</lion-select-rich>
|
|
382
342
|
`);
|
|
383
343
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
384
|
-
|
|
385
344
|
expect(_overlayCtrl.inheritsReferenceWidth).to.equal('min');
|
|
386
345
|
el.opened = true;
|
|
387
346
|
await el.updateComplete;
|
|
388
|
-
|
|
389
347
|
expect(_overlayCtrl.inheritsReferenceWidth).to.equal('min');
|
|
390
348
|
});
|
|
391
|
-
|
|
392
349
|
it('should override the inheritsWidth prop when no default selected feature is used', async () => {
|
|
393
350
|
const el = await fixture(html`
|
|
394
351
|
<lion-select-rich name="favoriteColor" label="Favorite color" has-no-default-selected>
|
|
@@ -397,13 +354,13 @@ describe('lion-select-rich', () => {
|
|
|
397
354
|
<lion-option .choiceValue=${'teal'}>Teal</lion-option>
|
|
398
355
|
</lion-select-rich>
|
|
399
356
|
`);
|
|
400
|
-
|
|
401
357
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
402
358
|
|
|
403
359
|
// The default is min, so we override that behavior here
|
|
404
|
-
_overlayCtrl.updateConfig({
|
|
360
|
+
_overlayCtrl.updateConfig({
|
|
361
|
+
inheritsReferenceWidth: 'full',
|
|
362
|
+
});
|
|
405
363
|
el._initialInheritsReferenceWidth = 'full';
|
|
406
|
-
|
|
407
364
|
expect(_overlayCtrl.inheritsReferenceWidth).to.equal('full');
|
|
408
365
|
el.opened = true;
|
|
409
366
|
await el.updateComplete;
|
|
@@ -423,7 +380,6 @@ describe('lion-select-rich', () => {
|
|
|
423
380
|
// noDefaultSelected will now flip the override back to what was the initial reference width
|
|
424
381
|
expect(_overlayCtrl.inheritsReferenceWidth).to.equal('full');
|
|
425
382
|
});
|
|
426
|
-
|
|
427
383
|
it('should have singleOption only if there is exactly one option', async () => {
|
|
428
384
|
const el = await fixture(html`
|
|
429
385
|
<lion-select-rich>
|
|
@@ -431,12 +387,9 @@ describe('lion-select-rich', () => {
|
|
|
431
387
|
<lion-option .choiceValue=${20}>Item 2</lion-option>
|
|
432
388
|
</lion-select-rich>
|
|
433
389
|
`);
|
|
434
|
-
|
|
435
390
|
const { _inputNode, _invokerNode } = getSelectRichMembers(el);
|
|
436
|
-
|
|
437
391
|
expect(el.singleOption).to.be.false;
|
|
438
392
|
expect(_invokerNode.singleOption).to.be.false;
|
|
439
|
-
|
|
440
393
|
const optionElm = el.formElements[0];
|
|
441
394
|
optionElm.parentNode.removeChild(optionElm);
|
|
442
395
|
// @ts-ignore [test] we don't need args in this case
|
|
@@ -444,8 +397,7 @@ describe('lion-select-rich', () => {
|
|
|
444
397
|
await el.updateComplete;
|
|
445
398
|
expect(el.singleOption).to.be.true;
|
|
446
399
|
expect(_invokerNode.singleOption).to.be.true;
|
|
447
|
-
|
|
448
|
-
const newOption = /** @type {LionOption} */ (document.createElement('lion-option'));
|
|
400
|
+
const newOption = /** @type {LionOption} */ document.createElement('lion-option');
|
|
449
401
|
newOption.choiceValue = 30;
|
|
450
402
|
_inputNode.appendChild(newOption);
|
|
451
403
|
// @ts-ignore [test] allow to not provide args for testing purposes
|
|
@@ -454,54 +406,47 @@ describe('lion-select-rich', () => {
|
|
|
454
406
|
expect(el.singleOption).to.be.false;
|
|
455
407
|
expect(_invokerNode.singleOption).to.be.false;
|
|
456
408
|
});
|
|
457
|
-
|
|
458
409
|
it('should have singleOption only if one option and no hasNoDefaultSelected', async () => {
|
|
459
410
|
const el = await fixture(html`
|
|
460
411
|
<lion-select-rich has-no-default-selected>
|
|
461
412
|
<lion-option .choiceValue=${10}>Item 1</lion-option>
|
|
462
413
|
</lion-select-rich>
|
|
463
414
|
`);
|
|
464
|
-
|
|
465
415
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
466
|
-
|
|
467
416
|
expect(el.singleOption).to.be.false;
|
|
468
417
|
expect(_invokerNode.singleOption).to.be.false;
|
|
469
418
|
});
|
|
470
|
-
|
|
471
419
|
it('adds/removes the autofocus attribute to/from _listboxNode', async () => {
|
|
472
420
|
const el = await fixture(html` <lion-select-rich></lion-select-rich> `);
|
|
473
421
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
474
|
-
|
|
475
422
|
expect(_listboxNode.hasAttribute('autofocus')).to.be.false;
|
|
476
|
-
|
|
477
423
|
el.opened = true;
|
|
478
424
|
await el.updateComplete;
|
|
479
425
|
expect(_listboxNode.hasAttribute('autofocus')).to.be.true;
|
|
480
|
-
|
|
481
426
|
el.opened = false;
|
|
482
427
|
await el.updateComplete;
|
|
483
428
|
await el.updateComplete; // safari takes a little longer
|
|
484
429
|
expect(_listboxNode.hasAttribute('autofocus')).to.be.false;
|
|
485
430
|
});
|
|
486
|
-
|
|
487
431
|
it('adds focus to element with [role=listbox] when trapsKeyboardFocus is true', async () => {
|
|
488
432
|
const el = await fixture(html`
|
|
489
|
-
<lion-select-rich
|
|
433
|
+
<lion-select-rich
|
|
434
|
+
.config=${{
|
|
435
|
+
trapsKeyboardFocus: true,
|
|
436
|
+
}}
|
|
437
|
+
></lion-select-rich>
|
|
490
438
|
`);
|
|
491
439
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
492
440
|
expect(isActiveElement(_listboxNode)).to.be.false;
|
|
493
|
-
|
|
494
441
|
el.opened = true;
|
|
495
442
|
await el.updateComplete;
|
|
496
443
|
expect(isActiveElement(_listboxNode)).to.be.true;
|
|
497
|
-
|
|
498
444
|
el.opened = false;
|
|
499
445
|
await el.updateComplete;
|
|
500
446
|
await el.updateComplete; // safari takes a little longer
|
|
501
447
|
expect(isActiveElement(_listboxNode)).to.be.false;
|
|
502
448
|
});
|
|
503
449
|
});
|
|
504
|
-
|
|
505
450
|
describe('interaction-mode', () => {
|
|
506
451
|
it('allows to specify an interaction-mode which determines other behaviors', async () => {
|
|
507
452
|
const el = await fixture(html`
|
|
@@ -510,7 +455,6 @@ describe('lion-select-rich', () => {
|
|
|
510
455
|
expect(el.interactionMode).to.equal('mac');
|
|
511
456
|
});
|
|
512
457
|
});
|
|
513
|
-
|
|
514
458
|
describe('Keyboard navigation', () => {
|
|
515
459
|
it('opens the listbox with [Enter] key via click handler', async () => {
|
|
516
460
|
const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
|
|
@@ -519,7 +463,6 @@ describe('lion-select-rich', () => {
|
|
|
519
463
|
await aTimeout(0);
|
|
520
464
|
expect(el.opened).to.be.true;
|
|
521
465
|
});
|
|
522
|
-
|
|
523
466
|
it('opens the listbox with [ ](Space) key via click handler', async () => {
|
|
524
467
|
const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
|
|
525
468
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
@@ -527,33 +470,47 @@ describe('lion-select-rich', () => {
|
|
|
527
470
|
await aTimeout(0);
|
|
528
471
|
expect(el.opened).to.be.true;
|
|
529
472
|
});
|
|
530
|
-
|
|
531
473
|
it('closes the listbox with [Escape] key once opened', async () => {
|
|
532
474
|
const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
|
|
533
475
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
534
|
-
_listboxNode.dispatchEvent(
|
|
476
|
+
_listboxNode.dispatchEvent(
|
|
477
|
+
new KeyboardEvent('keydown', {
|
|
478
|
+
key: 'Escape',
|
|
479
|
+
}),
|
|
480
|
+
);
|
|
535
481
|
expect(el.opened).to.be.false;
|
|
536
482
|
});
|
|
537
|
-
|
|
538
483
|
it('closes the listbox with [Tab] key once opened', async () => {
|
|
539
484
|
const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
|
|
540
485
|
// tab can only be caught via keydown
|
|
541
486
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
542
|
-
_listboxNode.dispatchEvent(
|
|
487
|
+
_listboxNode.dispatchEvent(
|
|
488
|
+
new KeyboardEvent('keydown', {
|
|
489
|
+
key: 'Tab',
|
|
490
|
+
}),
|
|
491
|
+
);
|
|
543
492
|
expect(el.opened).to.be.false;
|
|
544
493
|
});
|
|
545
|
-
|
|
546
494
|
it('does not close the listbox with [Tab] key once opened when trapsKeyboardFocus is true', async () => {
|
|
547
495
|
const el = await fixture(html`
|
|
548
|
-
<lion-select-rich
|
|
496
|
+
<lion-select-rich
|
|
497
|
+
opened
|
|
498
|
+
.config=${{
|
|
499
|
+
trapsKeyboardFocus: true,
|
|
500
|
+
}}
|
|
501
|
+
>
|
|
502
|
+
</lion-select-rich>
|
|
549
503
|
`);
|
|
550
504
|
// tab can only be caught via keydown
|
|
551
505
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
552
|
-
_listboxNode.dispatchEvent(
|
|
506
|
+
_listboxNode.dispatchEvent(
|
|
507
|
+
new KeyboardEvent('keydown', {
|
|
508
|
+
key: 'Tab',
|
|
509
|
+
}),
|
|
510
|
+
);
|
|
553
511
|
expect(el.opened).to.be.true;
|
|
554
512
|
});
|
|
555
513
|
});
|
|
556
|
-
|
|
557
514
|
describe('Mouse navigation', () => {
|
|
558
515
|
it('opens the listbox via click on invoker', async () => {
|
|
559
516
|
const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
|
|
@@ -563,7 +520,6 @@ describe('lion-select-rich', () => {
|
|
|
563
520
|
await nextFrame(); // reflection of click takes some time
|
|
564
521
|
expect(el.opened).to.be.true;
|
|
565
522
|
});
|
|
566
|
-
|
|
567
523
|
it('closes the listbox when an option gets clicked', async () => {
|
|
568
524
|
const el = await fixture(html`
|
|
569
525
|
<lion-select-rich opened>
|
|
@@ -575,16 +531,18 @@ describe('lion-select-rich', () => {
|
|
|
575
531
|
expect(el.opened).to.be.false;
|
|
576
532
|
});
|
|
577
533
|
});
|
|
578
|
-
|
|
579
534
|
describe('Keyboard navigation Windows', () => {
|
|
580
535
|
it('closes the listbox with [Enter] key once opened', async () => {
|
|
581
536
|
const el = await fixture(html` <lion-select-rich opened> </lion-select-rich> `);
|
|
582
537
|
const { _listboxNode } = getSelectRichMembers(el);
|
|
583
|
-
_listboxNode.dispatchEvent(
|
|
538
|
+
_listboxNode.dispatchEvent(
|
|
539
|
+
new KeyboardEvent('keydown', {
|
|
540
|
+
key: 'Enter',
|
|
541
|
+
}),
|
|
542
|
+
);
|
|
584
543
|
expect(el.opened).to.be.false;
|
|
585
544
|
});
|
|
586
545
|
});
|
|
587
|
-
|
|
588
546
|
describe('Keyboard navigation Mac', () => {
|
|
589
547
|
it('checks active item and closes the listbox with [Enter] key via click handler once opened', async () => {
|
|
590
548
|
const el = await fixture(html`
|
|
@@ -598,30 +556,39 @@ describe('lion-select-rich', () => {
|
|
|
598
556
|
// changes active but not checked
|
|
599
557
|
el.activeIndex = 1;
|
|
600
558
|
expect(el.checkedIndex).to.equal(0);
|
|
601
|
-
_listboxNode.dispatchEvent(
|
|
559
|
+
_listboxNode.dispatchEvent(
|
|
560
|
+
new KeyboardEvent('keydown', {
|
|
561
|
+
key: 'Enter',
|
|
562
|
+
}),
|
|
563
|
+
);
|
|
602
564
|
expect(el.opened).to.be.false;
|
|
603
565
|
expect(el.checkedIndex).to.equal(1);
|
|
604
566
|
});
|
|
605
|
-
|
|
606
567
|
it('opens the listbox with [ArrowUp] key', async () => {
|
|
607
568
|
const el = await fixture(html`
|
|
608
569
|
<lion-select-rich interaction-mode="mac"> </lion-select-rich>
|
|
609
570
|
`);
|
|
610
|
-
el.dispatchEvent(
|
|
571
|
+
el.dispatchEvent(
|
|
572
|
+
new KeyboardEvent('keyup', {
|
|
573
|
+
key: 'ArrowUp',
|
|
574
|
+
}),
|
|
575
|
+
);
|
|
611
576
|
await el.updateComplete;
|
|
612
577
|
expect(el.opened).to.be.true;
|
|
613
578
|
});
|
|
614
|
-
|
|
615
579
|
it('opens the listbox with [ArrowDown] key', async () => {
|
|
616
580
|
const el = await fixture(html`
|
|
617
581
|
<lion-select-rich interaction-mode="mac"> </lion-select-rich>
|
|
618
582
|
`);
|
|
619
|
-
el.dispatchEvent(
|
|
583
|
+
el.dispatchEvent(
|
|
584
|
+
new KeyboardEvent('keyup', {
|
|
585
|
+
key: 'ArrowDown',
|
|
586
|
+
}),
|
|
587
|
+
);
|
|
620
588
|
await el.updateComplete;
|
|
621
589
|
expect(el.opened).to.be.true;
|
|
622
590
|
});
|
|
623
591
|
});
|
|
624
|
-
|
|
625
592
|
describe('Accessibility', () => {
|
|
626
593
|
it('has the right references to its inner elements', async () => {
|
|
627
594
|
const el = await fixture(html`
|
|
@@ -631,19 +598,16 @@ describe('lion-select-rich', () => {
|
|
|
631
598
|
</lion-select-rich>
|
|
632
599
|
`);
|
|
633
600
|
const { _invokerNode, _feedbackNode, _labelNode, _helpTextNode } = getSelectRichMembers(el);
|
|
634
|
-
|
|
635
601
|
expect(_invokerNode.getAttribute('aria-labelledby')).to.contain(_labelNode.id);
|
|
636
602
|
expect(_invokerNode.getAttribute('aria-labelledby')).to.contain(_invokerNode.id);
|
|
637
603
|
expect(_invokerNode.getAttribute('aria-describedby')).to.contain(_helpTextNode.id);
|
|
638
604
|
expect(_invokerNode.getAttribute('aria-describedby')).to.contain(_feedbackNode.id);
|
|
639
605
|
expect(_invokerNode.getAttribute('aria-haspopup')).to.equal('listbox');
|
|
640
606
|
});
|
|
641
|
-
|
|
642
607
|
it('notifies when the listbox is expanded or not', async () => {
|
|
643
608
|
// smoke test for overlay functionality
|
|
644
609
|
const el = await fixture(html` <lion-select-rich> </lion-select-rich> `);
|
|
645
610
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
646
|
-
|
|
647
611
|
expect(_invokerNode.getAttribute('aria-expanded')).to.equal('false');
|
|
648
612
|
el.opened = true;
|
|
649
613
|
await el.updateComplete;
|
|
@@ -652,7 +616,6 @@ describe('lion-select-rich', () => {
|
|
|
652
616
|
expect(_invokerNode.getAttribute('aria-expanded')).to.equal('true');
|
|
653
617
|
});
|
|
654
618
|
});
|
|
655
|
-
|
|
656
619
|
describe('Use cases', () => {
|
|
657
620
|
it('keeps showing the selected item after a new item has been added in the selectedIndex position', async () => {
|
|
658
621
|
const mySelectContainerTagString = defineCE(
|
|
@@ -663,7 +626,6 @@ describe('lion-select-rich', () => {
|
|
|
663
626
|
colorList: Array,
|
|
664
627
|
};
|
|
665
628
|
}
|
|
666
|
-
|
|
667
629
|
constructor() {
|
|
668
630
|
super();
|
|
669
631
|
this.colorList = [
|
|
@@ -684,13 +646,16 @@ describe('lion-select-rich', () => {
|
|
|
684
646
|
},
|
|
685
647
|
];
|
|
686
648
|
}
|
|
687
|
-
|
|
688
649
|
render() {
|
|
689
650
|
return html`
|
|
690
651
|
<lion-select-rich label="Favorite color" name="color">
|
|
691
652
|
${this.colorList.map(
|
|
692
|
-
colorObj => html`
|
|
693
|
-
<lion-option
|
|
653
|
+
(colorObj) => html`
|
|
654
|
+
<lion-option
|
|
655
|
+
.modelValue=${{
|
|
656
|
+
value: colorObj.value,
|
|
657
|
+
checked: colorObj.checked,
|
|
658
|
+
}}
|
|
694
659
|
>${colorObj.label}</lion-option
|
|
695
660
|
>
|
|
696
661
|
`,
|
|
@@ -704,29 +669,26 @@ describe('lion-select-rich', () => {
|
|
|
704
669
|
const el = await fixture(html`
|
|
705
670
|
<${mySelectContainerTag}></${mySelectContainerTag}>
|
|
706
671
|
`);
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
/** @type {ShadowRoot} */
|
|
710
|
-
);
|
|
711
|
-
|
|
672
|
+
const selectRich =
|
|
673
|
+
/** @type {LionSelectRich} */
|
|
674
|
+
/** @type {ShadowRoot} */ el.shadowRoot.querySelector('lion-select-rich');
|
|
712
675
|
const { _invokerNode, _listboxNode } = getSelectRichMembers(selectRich);
|
|
713
|
-
|
|
714
676
|
expect(selectRich.checkedIndex).to.equal(1);
|
|
715
677
|
expect(selectRich.modelValue).to.equal('hotpink');
|
|
716
|
-
expect(/** @type {LionOption} */
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
678
|
+
expect(/** @type {LionOption} */ _invokerNode.selectedElement.value).to.equal('hotpink');
|
|
679
|
+
const newOption = /** @type {LionOption} */ document.createElement('lion-option');
|
|
680
|
+
newOption.modelValue = {
|
|
681
|
+
checked: false,
|
|
682
|
+
value: 'blue',
|
|
683
|
+
};
|
|
720
684
|
newOption.textContent = 'Blue';
|
|
721
685
|
const hotpinkEl = _listboxNode.children[1];
|
|
722
686
|
hotpinkEl.insertAdjacentElement('beforebegin', newOption);
|
|
723
|
-
|
|
724
687
|
expect(selectRich.checkedIndex).to.equal(2);
|
|
725
688
|
expect(selectRich.modelValue).to.equal('hotpink');
|
|
726
|
-
expect(/** @type {LionOption} */
|
|
689
|
+
expect(/** @type {LionOption} */ _invokerNode.selectedElement.value).to.equal('hotpink');
|
|
727
690
|
});
|
|
728
691
|
});
|
|
729
|
-
|
|
730
692
|
describe('Render from `lit` `cache`', () => {
|
|
731
693
|
describe('when `lion-option` is set by `.choiceValue` property with and no `checked` attribute', () => {
|
|
732
694
|
it('should display the second option', async () => {
|
|
@@ -747,9 +709,10 @@ describe('lion-select-rich', () => {
|
|
|
747
709
|
class Wrapper extends LitElement {
|
|
748
710
|
static properties = {
|
|
749
711
|
...super.properties,
|
|
750
|
-
activeTabIndex: {
|
|
712
|
+
activeTabIndex: {
|
|
713
|
+
type: Number,
|
|
714
|
+
},
|
|
751
715
|
};
|
|
752
|
-
|
|
753
716
|
constructor() {
|
|
754
717
|
super();
|
|
755
718
|
this.activeTabIndex = 0;
|
|
@@ -761,7 +724,6 @@ describe('lion-select-rich', () => {
|
|
|
761
724
|
changeActiveTabIndex(index) {
|
|
762
725
|
this.activeTabIndex = index;
|
|
763
726
|
}
|
|
764
|
-
|
|
765
727
|
render() {
|
|
766
728
|
const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
|
|
767
729
|
return html`
|
|
@@ -774,7 +736,7 @@ describe('lion-select-rich', () => {
|
|
|
774
736
|
this.activeTabIndex === 0
|
|
775
737
|
? html`<lion-select-rich name="favoriteColor" label="Favorite color">
|
|
776
738
|
${colours.map(
|
|
777
|
-
colour =>
|
|
739
|
+
(colour) =>
|
|
778
740
|
html`<lion-option .choiceValue="${colour.value}"
|
|
779
741
|
>${colour.label}</lion-option
|
|
780
742
|
>`,
|
|
@@ -791,13 +753,12 @@ describe('lion-select-rich', () => {
|
|
|
791
753
|
`;
|
|
792
754
|
}
|
|
793
755
|
}
|
|
794
|
-
|
|
795
|
-
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ (_fixture);
|
|
756
|
+
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
|
|
796
757
|
const tagString = defineCE(Wrapper);
|
|
797
758
|
const wrapperTag = unsafeStatic(tagString);
|
|
798
|
-
const wrapperElement =
|
|
799
|
-
|
|
800
|
-
|
|
759
|
+
const wrapperElement =
|
|
760
|
+
/** @type {Wrapper} */
|
|
761
|
+
await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
|
|
801
762
|
await wrapperElement.updateComplete;
|
|
802
763
|
const wrapperElementShadowRoot = wrapperElement.shadowRoot;
|
|
803
764
|
/**
|
|
@@ -833,9 +794,10 @@ describe('lion-select-rich', () => {
|
|
|
833
794
|
getInvoker()?.click();
|
|
834
795
|
await waitUntil(isDialogVisible);
|
|
835
796
|
// @ts-ignore [dynamic-key-access-in-test]
|
|
836
|
-
const optionBlue =
|
|
837
|
-
wrapperElementShadowRoot?.querySelectorAll(
|
|
838
|
-
|
|
797
|
+
const optionBlue =
|
|
798
|
+
/** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
|
|
799
|
+
'lion-option',
|
|
800
|
+
)?.[1];
|
|
839
801
|
optionBlue?.click();
|
|
840
802
|
await waitUntil(() => !isDialogVisible());
|
|
841
803
|
const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
|
|
@@ -869,9 +831,10 @@ describe('lion-select-rich', () => {
|
|
|
869
831
|
class Wrapper extends LitElement {
|
|
870
832
|
static properties = {
|
|
871
833
|
...super.properties,
|
|
872
|
-
activeTabIndex: {
|
|
834
|
+
activeTabIndex: {
|
|
835
|
+
type: Number,
|
|
836
|
+
},
|
|
873
837
|
};
|
|
874
|
-
|
|
875
838
|
constructor() {
|
|
876
839
|
super();
|
|
877
840
|
this.activeTabIndex = 0;
|
|
@@ -883,7 +846,6 @@ describe('lion-select-rich', () => {
|
|
|
883
846
|
changeActiveTabIndex(index) {
|
|
884
847
|
this.activeTabIndex = index;
|
|
885
848
|
}
|
|
886
|
-
|
|
887
849
|
render() {
|
|
888
850
|
const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
|
|
889
851
|
return html`
|
|
@@ -896,7 +858,7 @@ describe('lion-select-rich', () => {
|
|
|
896
858
|
this.activeTabIndex === 0
|
|
897
859
|
? html`<lion-select-rich name="favoriteColor" label="Favorite color">
|
|
898
860
|
${colours.map(
|
|
899
|
-
colour =>
|
|
861
|
+
(colour) =>
|
|
900
862
|
html`<lion-option
|
|
901
863
|
.choiceValue="${colour.value}"
|
|
902
864
|
checked="${colour.checked || nothing}"
|
|
@@ -915,13 +877,12 @@ describe('lion-select-rich', () => {
|
|
|
915
877
|
`;
|
|
916
878
|
}
|
|
917
879
|
}
|
|
918
|
-
|
|
919
|
-
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ (_fixture);
|
|
880
|
+
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
|
|
920
881
|
const tagString = defineCE(Wrapper);
|
|
921
882
|
const wrapperTag = unsafeStatic(tagString);
|
|
922
|
-
const wrapperElement =
|
|
923
|
-
|
|
924
|
-
|
|
883
|
+
const wrapperElement =
|
|
884
|
+
/** @type {Wrapper} */
|
|
885
|
+
await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
|
|
925
886
|
await wrapperElement.updateComplete;
|
|
926
887
|
const wrapperElementShadowRoot = wrapperElement.shadowRoot;
|
|
927
888
|
/**
|
|
@@ -957,9 +918,10 @@ describe('lion-select-rich', () => {
|
|
|
957
918
|
getInvoker()?.click();
|
|
958
919
|
await waitUntil(isDialogVisible);
|
|
959
920
|
// @ts-ignore [dynamic-key-access-in-test]
|
|
960
|
-
const optionBlue =
|
|
961
|
-
wrapperElementShadowRoot?.querySelectorAll(
|
|
962
|
-
|
|
921
|
+
const optionBlue =
|
|
922
|
+
/** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
|
|
923
|
+
'lion-option',
|
|
924
|
+
)?.[1];
|
|
963
925
|
optionBlue?.click();
|
|
964
926
|
await waitUntil(() => !isDialogVisible());
|
|
965
927
|
const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
|
|
@@ -993,9 +955,10 @@ describe('lion-select-rich', () => {
|
|
|
993
955
|
class Wrapper extends LitElement {
|
|
994
956
|
static properties = {
|
|
995
957
|
...super.properties,
|
|
996
|
-
activeTabIndex: {
|
|
958
|
+
activeTabIndex: {
|
|
959
|
+
type: Number,
|
|
960
|
+
},
|
|
997
961
|
};
|
|
998
|
-
|
|
999
962
|
constructor() {
|
|
1000
963
|
super();
|
|
1001
964
|
this.activeTabIndex = 0;
|
|
@@ -1007,7 +970,6 @@ describe('lion-select-rich', () => {
|
|
|
1007
970
|
changeActiveTabIndex(index) {
|
|
1008
971
|
this.activeTabIndex = index;
|
|
1009
972
|
}
|
|
1010
|
-
|
|
1011
973
|
render() {
|
|
1012
974
|
const changeActiveTabIndexRef = this.changeActiveTabIndex.bind(this);
|
|
1013
975
|
return html`
|
|
@@ -1020,14 +982,17 @@ describe('lion-select-rich', () => {
|
|
|
1020
982
|
this.activeTabIndex === 0
|
|
1021
983
|
? html`<lion-select-rich name="favoriteColor" label="Favorite color">
|
|
1022
984
|
${colours.map(
|
|
1023
|
-
colour =>
|
|
985
|
+
(colour) =>
|
|
1024
986
|
html`<lion-option
|
|
1025
987
|
@model-value-changed=${(/** @type {Event} */ ev) => {
|
|
1026
|
-
const lionOption = /** @type {LionOption} */
|
|
988
|
+
const lionOption = /** @type {LionOption} */ ev.target;
|
|
1027
989
|
// eslint-disable-next-line no-param-reassign
|
|
1028
990
|
colour.checked = lionOption.modelValue.checked;
|
|
1029
991
|
}}
|
|
1030
|
-
.modelValue=${{
|
|
992
|
+
.modelValue=${{
|
|
993
|
+
value: colour.value,
|
|
994
|
+
checked: colour.checked,
|
|
995
|
+
}}
|
|
1031
996
|
>${colour.label}</lion-option
|
|
1032
997
|
>`,
|
|
1033
998
|
)}
|
|
@@ -1043,13 +1008,12 @@ describe('lion-select-rich', () => {
|
|
|
1043
1008
|
`;
|
|
1044
1009
|
}
|
|
1045
1010
|
}
|
|
1046
|
-
|
|
1047
|
-
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ (_fixture);
|
|
1011
|
+
const wrapperFixture = /** @type {(arg: TemplateResult) => Promise<Wrapper>} */ _fixture;
|
|
1048
1012
|
const tagString = defineCE(Wrapper);
|
|
1049
1013
|
const wrapperTag = unsafeStatic(tagString);
|
|
1050
|
-
const wrapperElement =
|
|
1051
|
-
|
|
1052
|
-
|
|
1014
|
+
const wrapperElement =
|
|
1015
|
+
/** @type {Wrapper} */
|
|
1016
|
+
await wrapperFixture(html`<${wrapperTag}></${wrapperTag}>`);
|
|
1053
1017
|
await wrapperElement.updateComplete;
|
|
1054
1018
|
const wrapperElementShadowRoot = wrapperElement.shadowRoot;
|
|
1055
1019
|
/**
|
|
@@ -1085,9 +1049,10 @@ describe('lion-select-rich', () => {
|
|
|
1085
1049
|
getInvoker()?.click();
|
|
1086
1050
|
await waitUntil(isDialogVisible);
|
|
1087
1051
|
// @ts-ignore [dynamic-key-access-in-test]
|
|
1088
|
-
const optionBlue =
|
|
1089
|
-
wrapperElementShadowRoot?.querySelectorAll(
|
|
1090
|
-
|
|
1052
|
+
const optionBlue =
|
|
1053
|
+
/** @type { HTMLElement | undefined } */ wrapperElementShadowRoot?.querySelectorAll(
|
|
1054
|
+
'lion-option',
|
|
1055
|
+
)?.[1];
|
|
1091
1056
|
optionBlue?.click();
|
|
1092
1057
|
await waitUntil(() => !isDialogVisible());
|
|
1093
1058
|
const selectedColourLabelBeforeTabSwitch = getSelectedColourLabel();
|
|
@@ -1101,15 +1066,13 @@ describe('lion-select-rich', () => {
|
|
|
1101
1066
|
});
|
|
1102
1067
|
});
|
|
1103
1068
|
});
|
|
1104
|
-
|
|
1105
1069
|
describe('Teardown', () => {
|
|
1106
1070
|
it('does not throw when tearing down before the overlay controller is set up', () => {
|
|
1107
|
-
const el = /** @type {LionSelectRich} */
|
|
1071
|
+
const el = /** @type {LionSelectRich} */ document.createElement('lion-select-rich');
|
|
1108
1072
|
|
|
1109
1073
|
// @ts-expect-error [allow-private] in tests
|
|
1110
1074
|
expect(() => el._teardownOverlayCtrl()).not.to.throw();
|
|
1111
1075
|
});
|
|
1112
|
-
|
|
1113
1076
|
it('correctly removes event listeners when disconnected from dom', async () => {
|
|
1114
1077
|
const el = await fixture(html`
|
|
1115
1078
|
<lion-select-rich label="age">
|
|
@@ -1117,19 +1080,13 @@ describe('lion-select-rich', () => {
|
|
|
1117
1080
|
<lion-option .choiceValue=${20}>Item 2</lion-option>
|
|
1118
1081
|
</lion-select-rich>
|
|
1119
1082
|
`);
|
|
1120
|
-
|
|
1121
1083
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
1122
1084
|
const eventRemoveSpy = sinon.spy(_overlayCtrl, 'removeEventListener');
|
|
1123
|
-
|
|
1124
1085
|
el.parentNode?.removeChild(el);
|
|
1125
|
-
|
|
1126
1086
|
expect(eventRemoveSpy.callCount).to.equal(0);
|
|
1127
|
-
|
|
1128
1087
|
await el.updateComplete;
|
|
1129
1088
|
expect(eventRemoveSpy.callCount).to.equal(0);
|
|
1130
|
-
|
|
1131
1089
|
await el.updateComplete;
|
|
1132
|
-
|
|
1133
1090
|
const hasOneInstanceFor = (
|
|
1134
1091
|
/** @type {string} */ eventName,
|
|
1135
1092
|
/** @type {any[][]} */ eventsToSearch,
|
|
@@ -1151,7 +1108,6 @@ describe('lion-select-rich', () => {
|
|
|
1151
1108
|
expect(hasOneInstanceFor('hide', eventRemoveSpy.args, el.__overlayOnHide)).to.be.true;
|
|
1152
1109
|
});
|
|
1153
1110
|
});
|
|
1154
|
-
|
|
1155
1111
|
describe('Subclassers', () => {
|
|
1156
1112
|
it('allows to override the type of overlay', async () => {
|
|
1157
1113
|
const mySelectTagString = defineCE(
|
|
@@ -1165,21 +1121,27 @@ describe('lion-select-rich', () => {
|
|
|
1165
1121
|
invokerNode,
|
|
1166
1122
|
});
|
|
1167
1123
|
this.addEventListener('switch', () => {
|
|
1168
|
-
ctrl.updateConfig({
|
|
1124
|
+
ctrl.updateConfig({
|
|
1125
|
+
placementMode: 'local',
|
|
1126
|
+
});
|
|
1169
1127
|
});
|
|
1170
1128
|
return ctrl;
|
|
1171
1129
|
}
|
|
1172
1130
|
},
|
|
1173
1131
|
);
|
|
1174
|
-
|
|
1175
1132
|
const mySelectTag = unsafeStatic(mySelectTagString);
|
|
1176
|
-
|
|
1177
1133
|
const el = await fixture(html`
|
|
1178
1134
|
<${mySelectTag} label="Favorite color" name="color">
|
|
1179
1135
|
|
|
1180
1136
|
${Array(2).map(
|
|
1181
1137
|
(_, i) => html`
|
|
1182
|
-
<lion-option
|
|
1138
|
+
<lion-option
|
|
1139
|
+
.modelValue="${{
|
|
1140
|
+
value: i,
|
|
1141
|
+
checked: false,
|
|
1142
|
+
}}"
|
|
1143
|
+
>value ${i}</lion-option
|
|
1144
|
+
>
|
|
1183
1145
|
`,
|
|
1184
1146
|
)}
|
|
1185
1147
|
|
|
@@ -1187,12 +1149,10 @@ describe('lion-select-rich', () => {
|
|
|
1187
1149
|
`);
|
|
1188
1150
|
await el.updateComplete;
|
|
1189
1151
|
const { _overlayCtrl } = getSelectRichMembers(el);
|
|
1190
|
-
|
|
1191
1152
|
expect(_overlayCtrl.placementMode).to.equal('global');
|
|
1192
1153
|
el.dispatchEvent(new Event('switch'));
|
|
1193
1154
|
expect(_overlayCtrl.placementMode).to.equal('local');
|
|
1194
1155
|
});
|
|
1195
|
-
|
|
1196
1156
|
it('supports putting a placeholder template when there is no default selection initially', async () => {
|
|
1197
1157
|
const invokerTagName = defineCE(
|
|
1198
1158
|
class extends LionSelectInvoker {
|
|
@@ -1214,7 +1174,6 @@ describe('lion-select-rich', () => {
|
|
|
1214
1174
|
},
|
|
1215
1175
|
);
|
|
1216
1176
|
const selectTag = unsafeStatic(selectTagName);
|
|
1217
|
-
|
|
1218
1177
|
const el = await fixture(html`
|
|
1219
1178
|
<${selectTag} id="color" name="color" label="Favorite color" has-no-default-selected>
|
|
1220
1179
|
|
|
@@ -1225,9 +1184,8 @@ describe('lion-select-rich', () => {
|
|
|
1225
1184
|
</${selectTag}>
|
|
1226
1185
|
`);
|
|
1227
1186
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
1228
|
-
|
|
1229
1187
|
expect(
|
|
1230
|
-
/** @type {ShadowRoot} */
|
|
1188
|
+
/** @type {ShadowRoot} */ _invokerNode.shadowRoot.getElementById('content-wrapper'),
|
|
1231
1189
|
).dom.to.equal(`<div id="content-wrapper">Please select an option..</div>`);
|
|
1232
1190
|
expect(el.modelValue).to.equal('');
|
|
1233
1191
|
});
|