@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
|
@@ -14,29 +14,25 @@ import { runCalendarSuite } from '../test-suites/LionCalendar.suite.js';
|
|
|
14
14
|
* @typedef {import('lit').TemplateResult} TemplateResult
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
const fixture = /** @type {(arg: TemplateResult) => Promise<LionCalendar>} */
|
|
17
|
+
const fixture = /** @type {(arg: TemplateResult) => Promise<LionCalendar>} */ _fixture;
|
|
18
18
|
/**
|
|
19
19
|
* @param {HTMLElement} el
|
|
20
20
|
* @returns {HTMLElement | null | undefined}
|
|
21
21
|
*/
|
|
22
|
-
const getSelectedDateEl = el => el?.shadowRoot?.querySelector('.calendar__day-button[selected]');
|
|
22
|
+
const getSelectedDateEl = (el) => el?.shadowRoot?.querySelector('.calendar__day-button[selected]');
|
|
23
23
|
/**
|
|
24
24
|
* @param {HTMLElement} el
|
|
25
25
|
* @returns {void}
|
|
26
26
|
*/
|
|
27
|
-
const focusSelectedDate = el => getSelectedDateEl(el)?.focus();
|
|
28
|
-
|
|
27
|
+
const focusSelectedDate = (el) => getSelectedDateEl(el)?.focus();
|
|
29
28
|
describe('<lion-calendar>', () => {
|
|
30
29
|
const localizeManager = getLocalizeManager();
|
|
31
|
-
|
|
32
30
|
beforeEach(() => {
|
|
33
31
|
localizeTearDown();
|
|
34
32
|
});
|
|
35
|
-
|
|
36
33
|
describe('Structure', () => {
|
|
37
34
|
it('implements BEM structure', async () => {
|
|
38
35
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
39
|
-
|
|
40
36
|
expect(el.shadowRoot?.querySelector('.calendar')).to.exist;
|
|
41
37
|
expect(el.shadowRoot?.querySelector('.calendar__navigation')).to.exist;
|
|
42
38
|
expect(el.shadowRoot?.querySelector('.calendar__previous-button')).to.exist;
|
|
@@ -44,12 +40,11 @@ describe('<lion-calendar>', () => {
|
|
|
44
40
|
expect(el.shadowRoot?.querySelector('.calendar__navigation-heading')).to.exist;
|
|
45
41
|
expect(el.shadowRoot?.querySelector('.calendar__grid')).to.exist;
|
|
46
42
|
});
|
|
47
|
-
|
|
48
43
|
it('has heading with month and year', async () => {
|
|
49
|
-
const clock = sinon.useFakeTimers({
|
|
50
|
-
|
|
44
|
+
const clock = sinon.useFakeTimers({
|
|
45
|
+
now: new Date('2000/12/01').getTime(),
|
|
46
|
+
});
|
|
51
47
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
52
|
-
|
|
53
48
|
expect(el.shadowRoot?.querySelector('#year')).dom.to.equal(`
|
|
54
49
|
<h2
|
|
55
50
|
id="year"
|
|
@@ -68,10 +63,8 @@ describe('<lion-calendar>', () => {
|
|
|
68
63
|
December
|
|
69
64
|
</h2>
|
|
70
65
|
`);
|
|
71
|
-
|
|
72
66
|
clock.restore();
|
|
73
67
|
});
|
|
74
|
-
|
|
75
68
|
it('has previous year button', async () => {
|
|
76
69
|
const el = await fixture(
|
|
77
70
|
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
@@ -80,7 +73,6 @@ describe('<lion-calendar>', () => {
|
|
|
80
73
|
<button class="calendar__previous-button" aria-label="Previous year, November 2018" title="Previous year, November 2018"><</button>
|
|
81
74
|
`);
|
|
82
75
|
});
|
|
83
|
-
|
|
84
76
|
it('has next year button', async () => {
|
|
85
77
|
const el = await fixture(
|
|
86
78
|
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
@@ -89,7 +81,6 @@ describe('<lion-calendar>', () => {
|
|
|
89
81
|
<button class="calendar__next-button" aria-label="Next year, November 2020" title="Next year, November 2020">></button>
|
|
90
82
|
`);
|
|
91
83
|
});
|
|
92
|
-
|
|
93
84
|
it('has previous month button', async () => {
|
|
94
85
|
const el = await fixture(
|
|
95
86
|
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
@@ -98,7 +89,6 @@ describe('<lion-calendar>', () => {
|
|
|
98
89
|
<button class="calendar__previous-button" aria-label="Previous month, October 2019" title="Previous month, October 2019"><</button>
|
|
99
90
|
`);
|
|
100
91
|
});
|
|
101
|
-
|
|
102
92
|
it('has next month button', async () => {
|
|
103
93
|
const el = await fixture(
|
|
104
94
|
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
@@ -108,7 +98,6 @@ describe('<lion-calendar>', () => {
|
|
|
108
98
|
`);
|
|
109
99
|
});
|
|
110
100
|
});
|
|
111
|
-
|
|
112
101
|
describe('Public API', () => {
|
|
113
102
|
it('has property "centralDate" that determines currently visible month', async () => {
|
|
114
103
|
const elObj = new CalendarObject(
|
|
@@ -119,19 +108,17 @@ describe('<lion-calendar>', () => {
|
|
|
119
108
|
expect(elObj.activeMonth).to.equal('May');
|
|
120
109
|
expect(elObj.activeYear).to.equal('2014');
|
|
121
110
|
});
|
|
122
|
-
|
|
123
111
|
it('sets "centralDate" to today by default', async () => {
|
|
124
|
-
const clock = sinon.useFakeTimers({
|
|
125
|
-
|
|
112
|
+
const clock = sinon.useFakeTimers({
|
|
113
|
+
now: new Date('2013/03/15').getTime(),
|
|
114
|
+
});
|
|
126
115
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
127
116
|
const elObj = new CalendarObject(el);
|
|
128
117
|
expect(isSameDate(el.centralDate, new Date())).to.be.true;
|
|
129
118
|
expect(elObj.activeMonth).to.equal('March');
|
|
130
119
|
expect(elObj.activeYear).to.equal('2013');
|
|
131
|
-
|
|
132
120
|
clock.restore();
|
|
133
121
|
});
|
|
134
|
-
|
|
135
122
|
it('determines the date focusable with keyboard from "centralDate"', async () => {
|
|
136
123
|
const elObj = new CalendarObject(
|
|
137
124
|
await fixture(html`
|
|
@@ -140,18 +127,17 @@ describe('<lion-calendar>', () => {
|
|
|
140
127
|
);
|
|
141
128
|
expect(
|
|
142
129
|
elObj.checkForAllDayObjs(
|
|
143
|
-
/** @param {DayObject} o */ o => o.buttonEl.getAttribute('tabindex') === '0',
|
|
144
|
-
/** @param {number} n */ n => n === 5,
|
|
130
|
+
/** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '0',
|
|
131
|
+
/** @param {number} n */ (n) => n === 5,
|
|
145
132
|
),
|
|
146
133
|
).to.be.true;
|
|
147
134
|
expect(
|
|
148
135
|
elObj.checkForAllDayObjs(
|
|
149
|
-
/** @param {DayObject} o */ o => o.buttonEl.getAttribute('tabindex') === '-1',
|
|
150
|
-
/** @param {number} n */ n => n !== 5,
|
|
136
|
+
/** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '-1',
|
|
137
|
+
/** @param {number} n */ (n) => n !== 5,
|
|
151
138
|
),
|
|
152
139
|
).to.be.true;
|
|
153
140
|
});
|
|
154
|
-
|
|
155
141
|
it('has property "selectedDate" for the selected date', async () => {
|
|
156
142
|
const el = await fixture(html`
|
|
157
143
|
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
@@ -164,7 +150,6 @@ describe('<lion-calendar>', () => {
|
|
|
164
150
|
await el.updateComplete;
|
|
165
151
|
expect(elObj.getDayObj(15).isSelected).to.equal(false);
|
|
166
152
|
});
|
|
167
|
-
|
|
168
153
|
it('gives priority to "centralDate" to display the month when "selectedDate" is also defined', async () => {
|
|
169
154
|
const elObj = new CalendarObject(
|
|
170
155
|
await fixture(html`
|
|
@@ -177,10 +162,10 @@ describe('<lion-calendar>', () => {
|
|
|
177
162
|
expect(elObj.activeMonth).to.equal('June');
|
|
178
163
|
expect(elObj.activeYear).to.equal('2018');
|
|
179
164
|
});
|
|
180
|
-
|
|
181
165
|
it('changes "centralDate" from default to "selectedDate" on first render if no other custom "centralDate" is provided', async () => {
|
|
182
|
-
const clock = sinon.useFakeTimers({
|
|
183
|
-
|
|
166
|
+
const clock = sinon.useFakeTimers({
|
|
167
|
+
now: new Date('2010/01/01').getTime(),
|
|
168
|
+
});
|
|
184
169
|
const el = await fixture(html`
|
|
185
170
|
<lion-calendar .selectedDate="${new Date('2016/10/20')}"></lion-calendar>
|
|
186
171
|
`);
|
|
@@ -190,7 +175,6 @@ describe('<lion-calendar>', () => {
|
|
|
190
175
|
expect(elObj.activeYear).to.equal('2016');
|
|
191
176
|
clock.restore();
|
|
192
177
|
});
|
|
193
|
-
|
|
194
178
|
it('does not change "centralDate" to "selectedDate" when new date is provided programmatically', async () => {
|
|
195
179
|
const el = await fixture(html`
|
|
196
180
|
<lion-calendar
|
|
@@ -203,7 +187,6 @@ describe('<lion-calendar>', () => {
|
|
|
203
187
|
await el.updateComplete;
|
|
204
188
|
expect(isSameDate(el.centralDate, new Date('2018/06/01'))).to.be.true;
|
|
205
189
|
});
|
|
206
|
-
|
|
207
190
|
it('does not set "selectedDate" by default', async () => {
|
|
208
191
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
209
192
|
const elObj = new CalendarObject(el);
|
|
@@ -211,7 +194,6 @@ describe('<lion-calendar>', () => {
|
|
|
211
194
|
expect(el.selectedDate).to.equal(undefined);
|
|
212
195
|
expect(elObj.getDayObj(today.getDate()).isSelected).to.equal(false);
|
|
213
196
|
});
|
|
214
|
-
|
|
215
197
|
it('allows to reset "selectedDate"', async () => {
|
|
216
198
|
const el = await fixture(html`
|
|
217
199
|
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
@@ -221,7 +203,6 @@ describe('<lion-calendar>', () => {
|
|
|
221
203
|
await el.updateComplete;
|
|
222
204
|
expect(elObj.selectedDayObj).to.be.undefined;
|
|
223
205
|
});
|
|
224
|
-
|
|
225
206
|
it('recalculates "centralDate" when "selectedDate" is reset', async () => {
|
|
226
207
|
const el = await fixture(html`
|
|
227
208
|
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
@@ -232,7 +213,6 @@ describe('<lion-calendar>', () => {
|
|
|
232
213
|
expect(elObj.selectedDayObj).to.be.undefined;
|
|
233
214
|
expect(isSameDate(el.centralDate, new Date('2019/06/15'))).to.be.true;
|
|
234
215
|
});
|
|
235
|
-
|
|
236
216
|
it('sends event "user-selected-date-changed" when user selects a date via mouse', async () => {
|
|
237
217
|
const dateChangedSpy = sinon.spy();
|
|
238
218
|
const el = await fixture(html`
|
|
@@ -250,10 +230,9 @@ describe('<lion-calendar>', () => {
|
|
|
250
230
|
isSameDate(dateChangedSpy.args[0][0].detail.selectedDate, new Date('2000/12/15')),
|
|
251
231
|
).to.equal(true);
|
|
252
232
|
});
|
|
253
|
-
|
|
254
233
|
it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via mouse', async () => {
|
|
255
234
|
const dateChangedSpy = sinon.spy();
|
|
256
|
-
const disable15th = /** @param {Date} d */ d => d.getDate() === 15;
|
|
235
|
+
const disable15th = /** @param {Date} d */ (d) => d.getDate() === 15;
|
|
257
236
|
const el = await fixture(html`
|
|
258
237
|
<lion-calendar
|
|
259
238
|
.selectedDate="${new Date('2000/12/12')}"
|
|
@@ -265,9 +244,8 @@ describe('<lion-calendar>', () => {
|
|
|
265
244
|
elObj.getDayEl(15).click();
|
|
266
245
|
await el.updateComplete;
|
|
267
246
|
expect(dateChangedSpy.called).to.equal(false);
|
|
268
|
-
expect(isSameDate(/** @type {Date} */
|
|
247
|
+
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/12/12'))).to.be.true;
|
|
269
248
|
});
|
|
270
|
-
|
|
271
249
|
it.skip('sends event "user-selected-date-changed" when user selects a date via [Enter]', async () => {
|
|
272
250
|
/**
|
|
273
251
|
* TODO fix me
|
|
@@ -282,19 +260,24 @@ describe('<lion-calendar>', () => {
|
|
|
282
260
|
></lion-calendar>
|
|
283
261
|
`);
|
|
284
262
|
const elObj = new CalendarObject(el);
|
|
285
|
-
|
|
286
|
-
|
|
263
|
+
el.__contentWrapperElement?.dispatchEvent(
|
|
264
|
+
new KeyboardEvent('keydown', {
|
|
265
|
+
key: 'ArrowLeft',
|
|
266
|
+
}),
|
|
267
|
+
);
|
|
287
268
|
await el.updateComplete;
|
|
288
269
|
expect(elObj.activeMonth).to.equal('October');
|
|
289
270
|
expect(elObj.activeYear).to.equal('2000');
|
|
290
271
|
expect(elObj.focusedDayObj?.monthday).to.equal(11);
|
|
291
|
-
|
|
292
|
-
|
|
272
|
+
el.__contentWrapperElement?.dispatchEvent(
|
|
273
|
+
new KeyboardEvent('keydown', {
|
|
274
|
+
key: 'Enter',
|
|
275
|
+
}),
|
|
276
|
+
);
|
|
293
277
|
await el.updateComplete;
|
|
294
|
-
expect(isSameDate(/** @type {Date} */
|
|
278
|
+
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/11'))).to.be.true;
|
|
295
279
|
expect(dateChangedSpy.called).to.equal(true);
|
|
296
280
|
});
|
|
297
|
-
|
|
298
281
|
it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via [Enter]', async () => {
|
|
299
282
|
const dateChangedSpy = sinon.spy();
|
|
300
283
|
const el = await fixture(html`
|
|
@@ -305,20 +288,21 @@ describe('<lion-calendar>', () => {
|
|
|
305
288
|
></lion-calendar>
|
|
306
289
|
`);
|
|
307
290
|
const elObj = new CalendarObject(el);
|
|
308
|
-
|
|
309
291
|
focusSelectedDate(el);
|
|
310
|
-
await sendKeys({
|
|
292
|
+
await sendKeys({
|
|
293
|
+
press: 'ArrowLeft',
|
|
294
|
+
});
|
|
311
295
|
await el.updateComplete;
|
|
312
296
|
expect(elObj.activeMonth).to.equal('October');
|
|
313
297
|
expect(elObj.activeYear).to.equal('2000');
|
|
314
298
|
expect(elObj.focusedDayObj?.monthday).to.equal(11);
|
|
315
|
-
|
|
316
|
-
|
|
299
|
+
await sendKeys({
|
|
300
|
+
press: 'Enter',
|
|
301
|
+
});
|
|
317
302
|
await el.updateComplete;
|
|
318
|
-
expect(isSameDate(/** @type {Date} */
|
|
303
|
+
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/12'))).to.be.true;
|
|
319
304
|
expect(dateChangedSpy.called).to.equal(false);
|
|
320
305
|
});
|
|
321
|
-
|
|
322
306
|
it('exposes focusedDate getter', async () => {
|
|
323
307
|
const el = await fixture(html`
|
|
324
308
|
<lion-calendar .centralDate="${new Date('2019/06/01')}"></lion-calendar>
|
|
@@ -326,19 +310,15 @@ describe('<lion-calendar>', () => {
|
|
|
326
310
|
const elObj = new CalendarObject(el);
|
|
327
311
|
expect(el.focusedDate).to.be.null;
|
|
328
312
|
elObj.getDayEl(15).click();
|
|
329
|
-
expect(isSameDate(/** @type {Date} */
|
|
330
|
-
true,
|
|
331
|
-
);
|
|
313
|
+
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2019/06/15'))).to.equal(true);
|
|
332
314
|
});
|
|
333
|
-
|
|
334
315
|
it('has a focusDate() method to focus an arbitrary date', async () => {
|
|
335
316
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
336
317
|
const elObj = new CalendarObject(el);
|
|
337
318
|
await el.focusDate(new Date('2016/06/10'));
|
|
338
|
-
expect(isSameDate(/** @type {Date} */
|
|
319
|
+
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2016/06/10'))).to.be.true;
|
|
339
320
|
expect(elObj.getDayObj(10).isFocused).to.be.true;
|
|
340
321
|
});
|
|
341
|
-
|
|
342
322
|
it('has a focusCentralDate() method to focus the central date', async () => {
|
|
343
323
|
const el = await fixture(html`
|
|
344
324
|
<lion-calendar
|
|
@@ -348,10 +328,9 @@ describe('<lion-calendar>', () => {
|
|
|
348
328
|
`);
|
|
349
329
|
const elObj = new CalendarObject(el);
|
|
350
330
|
el.focusCentralDate();
|
|
351
|
-
expect(isSameDate(/** @type {Date} */
|
|
331
|
+
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2015/12/02'))).to.be.true;
|
|
352
332
|
expect(elObj.getDayObj(2).isFocused).to.be.true;
|
|
353
333
|
});
|
|
354
|
-
|
|
355
334
|
it('has a focusSelectedDate() method to focus the selected date', async () => {
|
|
356
335
|
const el = await fixture(html`
|
|
357
336
|
<lion-calendar
|
|
@@ -361,10 +340,9 @@ describe('<lion-calendar>', () => {
|
|
|
361
340
|
`);
|
|
362
341
|
const elObj = new CalendarObject(el);
|
|
363
342
|
await el.focusSelectedDate();
|
|
364
|
-
expect(isSameDate(/** @type {Date} */
|
|
343
|
+
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2014/07/07'))).to.be.true;
|
|
365
344
|
expect(elObj.getDayObj(7).isFocused).to.be.true;
|
|
366
345
|
});
|
|
367
|
-
|
|
368
346
|
it('has a initCentralDate() method for external contexts like datepickers', async () => {
|
|
369
347
|
const initialCentralDate = new Date('2014/07/05');
|
|
370
348
|
const initialSelectedDate = new Date('2014/07/07');
|
|
@@ -374,10 +352,8 @@ describe('<lion-calendar>', () => {
|
|
|
374
352
|
.selectedDate="${initialSelectedDate}"
|
|
375
353
|
></lion-calendar>`,
|
|
376
354
|
);
|
|
377
|
-
|
|
378
355
|
expect(el.selectedDate).to.equal(initialSelectedDate);
|
|
379
356
|
expect(el.centralDate).to.equal(initialCentralDate);
|
|
380
|
-
|
|
381
357
|
const newSelectedDate = new Date('2015/07/05');
|
|
382
358
|
el.selectedDate = newSelectedDate;
|
|
383
359
|
el.initCentralDate();
|
|
@@ -386,7 +362,6 @@ describe('<lion-calendar>', () => {
|
|
|
386
362
|
el.initCentralDate();
|
|
387
363
|
expect(el.centralDate).to.equal(initialCentralDate);
|
|
388
364
|
});
|
|
389
|
-
|
|
390
365
|
describe('Enabled Dates', () => {
|
|
391
366
|
it('disables all days before "minDate" property', async () => {
|
|
392
367
|
const el = await fixture(html`
|
|
@@ -403,7 +378,6 @@ describe('<lion-calendar>', () => {
|
|
|
403
378
|
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
404
379
|
});
|
|
405
380
|
});
|
|
406
|
-
|
|
407
381
|
it('disables all days after "maxDate" property', async () => {
|
|
408
382
|
const el = await fixture(html`
|
|
409
383
|
<lion-calendar
|
|
@@ -419,10 +393,9 @@ describe('<lion-calendar>', () => {
|
|
|
419
393
|
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
420
394
|
});
|
|
421
395
|
});
|
|
422
|
-
|
|
423
396
|
it('disables a date with disableDates function', async () => {
|
|
424
397
|
/** @param {Date} d */
|
|
425
|
-
const disable15th = d => d.getDate() === 15;
|
|
398
|
+
const disable15th = (d) => d.getDate() === 15;
|
|
426
399
|
const el = await fixture(html`
|
|
427
400
|
<lion-calendar
|
|
428
401
|
.selectedDate="${new Date('2000/12/01')}"
|
|
@@ -434,7 +407,6 @@ describe('<lion-calendar>', () => {
|
|
|
434
407
|
const shouldBeDisabled = i === 15 - 1;
|
|
435
408
|
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
436
409
|
});
|
|
437
|
-
|
|
438
410
|
el.selectedDate = new Date('2000/11/01'); // When month view updates, it should still work
|
|
439
411
|
await el.updateComplete;
|
|
440
412
|
elObj.dayEls.forEach((d, i) => {
|
|
@@ -442,27 +414,26 @@ describe('<lion-calendar>', () => {
|
|
|
442
414
|
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
443
415
|
});
|
|
444
416
|
});
|
|
445
|
-
|
|
446
417
|
it('does not prevent initializing "centralDate" from "selectedDate" when today is disabled', async () => {
|
|
447
|
-
const clock = sinon.useFakeTimers({
|
|
448
|
-
|
|
418
|
+
const clock = sinon.useFakeTimers({
|
|
419
|
+
now: new Date('2019/06/03').getTime(),
|
|
420
|
+
});
|
|
449
421
|
const el = await fixture(html`
|
|
450
422
|
<lion-calendar
|
|
451
423
|
.selectedDate="${new Date('2001/01/08')}"
|
|
452
|
-
.disableDates=${/** @param {Date} date */ date => date.getDate() === 3}
|
|
424
|
+
.disableDates=${/** @param {Date} date */ (date) => date.getDate() === 3}
|
|
453
425
|
></lion-calendar>
|
|
454
426
|
`);
|
|
455
427
|
const elObj = new CalendarObject(el);
|
|
456
428
|
expect(isSameDate(el.centralDate, new Date('2001/01/08'))).to.be.true;
|
|
457
429
|
expect(elObj.activeMonth).to.equal('January');
|
|
458
430
|
expect(elObj.activeYear).to.equal('2001');
|
|
459
|
-
|
|
460
431
|
clock.restore();
|
|
461
432
|
});
|
|
462
|
-
|
|
463
433
|
it('requires the user to set an appropriate centralDate even when minDate and maxDate are equal', async () => {
|
|
464
|
-
const clock = sinon.useFakeTimers({
|
|
465
|
-
|
|
434
|
+
const clock = sinon.useFakeTimers({
|
|
435
|
+
now: new Date('2019/06/03').getTime(),
|
|
436
|
+
});
|
|
466
437
|
const el = await fixture(html`
|
|
467
438
|
<lion-calendar
|
|
468
439
|
.minDate="${new Date('2019/07/03')}"
|
|
@@ -476,32 +447,27 @@ describe('<lion-calendar>', () => {
|
|
|
476
447
|
.maxDate="${new Date('2019/07/03')}"
|
|
477
448
|
></lion-calendar>
|
|
478
449
|
`);
|
|
479
|
-
|
|
480
450
|
clock.restore();
|
|
481
451
|
expect(isSameDate(el.centralDate, new Date('2019/07/03'))).to.be.true;
|
|
482
452
|
expect(isSameDate(elSetting.centralDate, new Date('2019/07/03'))).to.be.true;
|
|
483
453
|
});
|
|
484
|
-
|
|
485
454
|
describe('Normalization', () => {
|
|
486
455
|
it('normalizes all generated dates', async () => {
|
|
487
456
|
/** @param {Date} d */
|
|
488
457
|
function isNormalizedDate(d) {
|
|
489
458
|
return d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0;
|
|
490
459
|
}
|
|
491
|
-
|
|
492
460
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
493
461
|
// The central date will be today's date: it's the date all other
|
|
494
462
|
// dates in the month view will be derived from.
|
|
495
463
|
expect(isNormalizedDate(el.centralDate)).to.be.true;
|
|
496
464
|
});
|
|
497
|
-
|
|
498
465
|
it('normalizes dates in date comparisons', async () => {
|
|
499
466
|
const selectedDate = new Date('2000-11-04T03:00:00');
|
|
500
467
|
// without normalization, selectedDate > maxDate would wrongfully be disabled
|
|
501
468
|
const maxDate = new Date('2000-11-29T02:00:00');
|
|
502
469
|
// without normalization, selectedDate < minDate would wrongfully be disabled
|
|
503
470
|
const minDate = new Date('2000-11-02T04:00:00');
|
|
504
|
-
|
|
505
471
|
const el = await fixture(html`
|
|
506
472
|
<lion-calendar
|
|
507
473
|
.selectedDate="${selectedDate}"
|
|
@@ -510,17 +476,14 @@ describe('<lion-calendar>', () => {
|
|
|
510
476
|
></lion-calendar>
|
|
511
477
|
`);
|
|
512
478
|
const elObj = new CalendarObject(el);
|
|
513
|
-
|
|
514
479
|
expect(elObj.getDayObj(29).isDisabled).to.equal(false);
|
|
515
480
|
expect(elObj.getDayObj(30).isDisabled).to.equal(true);
|
|
516
|
-
|
|
517
481
|
expect(elObj.getDayObj(2).isDisabled).to.equal(false);
|
|
518
482
|
expect(elObj.getDayObj(1).isDisabled).to.equal(true);
|
|
519
483
|
});
|
|
520
484
|
});
|
|
521
485
|
});
|
|
522
486
|
});
|
|
523
|
-
|
|
524
487
|
describe('Calendar navigation', () => {
|
|
525
488
|
describe('Title', () => {
|
|
526
489
|
it('contains secondary title displaying the current month and year in focus', async () => {
|
|
@@ -531,7 +494,6 @@ describe('<lion-calendar>', () => {
|
|
|
531
494
|
expect(elObj.activeMonth).to.equal('December');
|
|
532
495
|
expect(elObj.activeYear).to.equal('2000');
|
|
533
496
|
});
|
|
534
|
-
|
|
535
497
|
it('updates the secondary title when the displayed month/year changes', async () => {
|
|
536
498
|
const el = await fixture(
|
|
537
499
|
html`<lion-calendar .centralDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
@@ -542,7 +504,6 @@ describe('<lion-calendar>', () => {
|
|
|
542
504
|
expect(elObj.activeMonth).to.equal('October');
|
|
543
505
|
expect(elObj.activeYear).to.equal('1999');
|
|
544
506
|
});
|
|
545
|
-
|
|
546
507
|
describe('Accessibility', () => {
|
|
547
508
|
it('has aria-atomic="true" set on the secondary title', async () => {
|
|
548
509
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
@@ -550,7 +511,6 @@ describe('<lion-calendar>', () => {
|
|
|
550
511
|
});
|
|
551
512
|
});
|
|
552
513
|
});
|
|
553
|
-
|
|
554
514
|
describe('Navigation', () => {
|
|
555
515
|
describe('finding enabled dates', () => {
|
|
556
516
|
it('has helper for `findNextEnabledDate()`, `findPreviousEnabledDate()`, `findNearestEnabledDate()`', async () => {
|
|
@@ -558,92 +518,79 @@ describe('<lion-calendar>', () => {
|
|
|
558
518
|
<lion-calendar
|
|
559
519
|
.selectedDate="${new Date('2001/01/02')}"
|
|
560
520
|
.disableDates=${
|
|
561
|
-
/** @param {Date} date */ date => date.getDate() === 3 || date.getDate() === 4
|
|
521
|
+
/** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
|
|
562
522
|
}
|
|
563
523
|
></lion-calendar>
|
|
564
524
|
`);
|
|
565
525
|
const elObj = new CalendarObject(el);
|
|
566
|
-
|
|
567
526
|
el.focusDate(el.findNextEnabledDate());
|
|
568
527
|
await el.updateComplete;
|
|
569
528
|
expect(elObj.focusedDayObj?.monthday).to.equal(5);
|
|
570
|
-
|
|
571
529
|
el.focusDate(el.findPreviousEnabledDate());
|
|
572
530
|
await el.updateComplete;
|
|
573
531
|
expect(elObj.focusedDayObj?.monthday).to.equal(2);
|
|
574
|
-
|
|
575
532
|
el.focusDate(el.findNearestEnabledDate());
|
|
576
533
|
await el.updateComplete;
|
|
577
534
|
expect(elObj.focusedDayObj?.monthday).to.equal(1);
|
|
578
535
|
});
|
|
579
|
-
|
|
580
536
|
it('future dates take precedence over past dates when "distance" between dates is equal', async () => {
|
|
581
|
-
const clock = sinon.useFakeTimers({
|
|
582
|
-
|
|
537
|
+
const clock = sinon.useFakeTimers({
|
|
538
|
+
now: new Date('2000/12/15').getTime(),
|
|
539
|
+
});
|
|
583
540
|
const el = await fixture(html`
|
|
584
541
|
<lion-calendar
|
|
585
|
-
.disableDates="${/** @param {Date} d */ d => d.getDate() === 15}"
|
|
542
|
+
.disableDates="${/** @param {Date} d */ (d) => d.getDate() === 15}"
|
|
586
543
|
></lion-calendar>
|
|
587
544
|
`);
|
|
588
545
|
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
589
546
|
await el.updateComplete;
|
|
590
|
-
|
|
591
547
|
const elObj = new CalendarObject(el);
|
|
592
548
|
expect(elObj.centralDayObj?.monthday).to.equal(16);
|
|
593
|
-
|
|
594
549
|
clock.restore();
|
|
595
550
|
});
|
|
596
|
-
|
|
597
551
|
it('will search 750 days in the past', async () => {
|
|
598
|
-
const clock = sinon.useFakeTimers({
|
|
599
|
-
|
|
552
|
+
const clock = sinon.useFakeTimers({
|
|
553
|
+
now: new Date('2000/12/15').getTime(),
|
|
554
|
+
});
|
|
600
555
|
const el = await fixture(html`
|
|
601
556
|
<lion-calendar
|
|
602
|
-
.disableDates="${/** @param {Date} d */ d => d.getFullYear() > 1998}"
|
|
557
|
+
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() > 1998}"
|
|
603
558
|
></lion-calendar>
|
|
604
559
|
`);
|
|
605
560
|
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
606
561
|
await el.updateComplete;
|
|
607
|
-
|
|
608
562
|
expect(el.centralDate.getFullYear()).to.equal(1998);
|
|
609
563
|
expect(el.centralDate.getMonth()).to.equal(11);
|
|
610
564
|
expect(el.centralDate.getDate()).to.equal(31);
|
|
611
|
-
|
|
612
565
|
clock.restore();
|
|
613
566
|
});
|
|
614
|
-
|
|
615
567
|
it('will search 750 days in the future', async () => {
|
|
616
|
-
const clock = sinon.useFakeTimers({
|
|
617
|
-
|
|
568
|
+
const clock = sinon.useFakeTimers({
|
|
569
|
+
now: new Date('2000/12/15').getTime(),
|
|
570
|
+
});
|
|
618
571
|
const el = await fixture(html`
|
|
619
572
|
<lion-calendar
|
|
620
|
-
.disableDates="${/** @param {Date} d */ d => d.getFullYear() < 2002}"
|
|
573
|
+
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
|
|
621
574
|
></lion-calendar>
|
|
622
575
|
`);
|
|
623
|
-
|
|
624
576
|
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
625
577
|
await el.updateComplete;
|
|
626
|
-
|
|
627
578
|
expect(el.centralDate.getFullYear()).to.equal(2002);
|
|
628
579
|
expect(el.centralDate.getMonth()).to.equal(0);
|
|
629
580
|
expect(el.centralDate.getDate()).to.equal(1);
|
|
630
|
-
|
|
631
581
|
clock.restore();
|
|
632
582
|
});
|
|
633
|
-
|
|
634
583
|
it('throws if no available date can be found within +/- 750 days', async () => {
|
|
635
584
|
const el = await fixture(html`
|
|
636
585
|
<lion-calendar
|
|
637
|
-
.disableDates="${/** @param {Date} d */ d => d.getFullYear() < 2002}"
|
|
586
|
+
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
|
|
638
587
|
></lion-calendar>
|
|
639
588
|
`);
|
|
640
|
-
|
|
641
589
|
expect(() => {
|
|
642
590
|
el.findNextEnabledDate(new Date('1900/01/01'));
|
|
643
591
|
}).to.throw(Error, 'Could not find a selectable date within +/- 750 day for 1900/1/1');
|
|
644
592
|
});
|
|
645
593
|
});
|
|
646
|
-
|
|
647
594
|
describe('Year', () => {
|
|
648
595
|
it('has a button for navigation to previous year', async () => {
|
|
649
596
|
const el = await fixture(
|
|
@@ -654,17 +601,18 @@ describe('<lion-calendar>', () => {
|
|
|
654
601
|
expect(elObj.activeMonth).to.equal('January');
|
|
655
602
|
expect(elObj.activeYear).to.equal('2001');
|
|
656
603
|
|
|
657
|
-
/** @type {HTMLElement} */
|
|
604
|
+
/** @type {HTMLElement} */
|
|
605
|
+
elObj.previousYearButtonEl.click();
|
|
658
606
|
await el.updateComplete;
|
|
659
607
|
expect(elObj.activeMonth).to.equal('January');
|
|
660
608
|
expect(elObj.activeYear).to.equal('2000');
|
|
661
609
|
|
|
662
|
-
/** @type {HTMLElement} */
|
|
610
|
+
/** @type {HTMLElement} */
|
|
611
|
+
elObj.previousYearButtonEl.click();
|
|
663
612
|
await el.updateComplete;
|
|
664
613
|
expect(elObj.activeMonth).to.equal('January');
|
|
665
614
|
expect(elObj.activeYear).to.equal('1999');
|
|
666
615
|
});
|
|
667
|
-
|
|
668
616
|
it('has a button for navigation to next year', async () => {
|
|
669
617
|
const el = await fixture(
|
|
670
618
|
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
@@ -674,17 +622,18 @@ describe('<lion-calendar>', () => {
|
|
|
674
622
|
expect(elObj.activeMonth).to.equal('December');
|
|
675
623
|
expect(elObj.activeYear).to.equal('2000');
|
|
676
624
|
|
|
677
|
-
/** @type {HTMLElement} */
|
|
625
|
+
/** @type {HTMLElement} */
|
|
626
|
+
elObj.nextYearButtonEl.click();
|
|
678
627
|
await el.updateComplete;
|
|
679
628
|
expect(elObj.activeMonth).to.equal('December');
|
|
680
629
|
expect(elObj.activeYear).to.equal('2001');
|
|
681
630
|
|
|
682
|
-
/** @type {HTMLElement} */
|
|
631
|
+
/** @type {HTMLElement} */
|
|
632
|
+
elObj.nextYearButtonEl.click();
|
|
683
633
|
await el.updateComplete;
|
|
684
634
|
expect(elObj.activeMonth).to.equal('December');
|
|
685
635
|
expect(elObj.activeYear).to.equal('2002');
|
|
686
636
|
});
|
|
687
|
-
|
|
688
637
|
it('disables previousYearButton and nextYearButton based on disabled days accordingly', async () => {
|
|
689
638
|
const el = await fixture(html`
|
|
690
639
|
<lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
|
|
@@ -694,27 +643,23 @@ describe('<lion-calendar>', () => {
|
|
|
694
643
|
expect(elObj.activeYear).to.equal('2000');
|
|
695
644
|
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
696
645
|
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
697
|
-
|
|
698
646
|
el.minDate = new Date('2000/01/01');
|
|
699
647
|
el.maxDate = new Date('2000/12/31');
|
|
700
648
|
await el.updateComplete;
|
|
701
|
-
|
|
702
649
|
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
703
650
|
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
704
651
|
|
|
705
|
-
/** @type {HTMLElement} */
|
|
652
|
+
/** @type {HTMLElement} */
|
|
653
|
+
elObj.previousYearButtonEl.click();
|
|
706
654
|
await el.updateComplete;
|
|
707
655
|
expect(elObj.activeMonth).to.equal('June');
|
|
708
656
|
expect(elObj.activeYear).to.equal('2000');
|
|
709
|
-
|
|
710
657
|
el.minDate = new Date('1999/12/31');
|
|
711
658
|
el.maxDate = new Date('2001/01/01');
|
|
712
659
|
await el.updateComplete;
|
|
713
|
-
|
|
714
660
|
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
715
661
|
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
716
662
|
});
|
|
717
|
-
|
|
718
663
|
it('sets label to correct month previousYearButton and nextYearButton based on disabled days accordingly', async () => {
|
|
719
664
|
const el = await fixture(html`
|
|
720
665
|
<lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
|
|
@@ -723,7 +668,6 @@ describe('<lion-calendar>', () => {
|
|
|
723
668
|
el.minDate = new Date('1999/07/12');
|
|
724
669
|
el.maxDate = new Date('2001/05/12');
|
|
725
670
|
await el.updateComplete;
|
|
726
|
-
|
|
727
671
|
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
728
672
|
expect(elObj.previousYearButtonEl.getAttribute('aria-label')).to.equal(
|
|
729
673
|
'Previous year, July 1999',
|
|
@@ -732,7 +676,6 @@ describe('<lion-calendar>', () => {
|
|
|
732
676
|
expect(elObj.nextYearButtonEl.getAttribute('aria-label')).to.equal('Next year, May 2001');
|
|
733
677
|
});
|
|
734
678
|
});
|
|
735
|
-
|
|
736
679
|
describe('Month', () => {
|
|
737
680
|
it('has a button for navigation to previous month', async () => {
|
|
738
681
|
const el = await fixture(
|
|
@@ -743,17 +686,18 @@ describe('<lion-calendar>', () => {
|
|
|
743
686
|
expect(elObj.activeMonth).to.equal('January');
|
|
744
687
|
expect(elObj.activeYear).to.equal('2001');
|
|
745
688
|
|
|
746
|
-
/** @type {HTMLElement} */
|
|
689
|
+
/** @type {HTMLElement} */
|
|
690
|
+
elObj.previousMonthButtonEl.click();
|
|
747
691
|
await el.updateComplete;
|
|
748
692
|
expect(elObj.activeMonth).to.equal('December');
|
|
749
693
|
expect(elObj.activeYear).to.equal('2000');
|
|
750
694
|
|
|
751
|
-
/** @type {HTMLElement} */
|
|
695
|
+
/** @type {HTMLElement} */
|
|
696
|
+
elObj.previousMonthButtonEl.click();
|
|
752
697
|
await el.updateComplete;
|
|
753
698
|
expect(elObj.activeMonth).to.equal('November');
|
|
754
699
|
expect(elObj.activeYear).to.equal('2000');
|
|
755
700
|
});
|
|
756
|
-
|
|
757
701
|
it('has a button for navigation to next month', async () => {
|
|
758
702
|
const el = await fixture(
|
|
759
703
|
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
@@ -762,17 +706,18 @@ describe('<lion-calendar>', () => {
|
|
|
762
706
|
expect(elObj.nextMonthButtonEl).not.to.equal(null);
|
|
763
707
|
expect(elObj.activeMonth).to.equal('December');
|
|
764
708
|
expect(elObj.activeYear).to.equal('2000');
|
|
765
|
-
/** @type {HTMLElement} */
|
|
709
|
+
/** @type {HTMLElement} */
|
|
710
|
+
elObj.nextMonthButtonEl.click();
|
|
766
711
|
await el.updateComplete;
|
|
767
712
|
expect(elObj.activeMonth).to.equal('January');
|
|
768
713
|
expect(elObj.activeYear).to.equal('2001');
|
|
769
714
|
|
|
770
|
-
/** @type {HTMLElement} */
|
|
715
|
+
/** @type {HTMLElement} */
|
|
716
|
+
elObj.nextMonthButtonEl.click();
|
|
771
717
|
await el.updateComplete;
|
|
772
718
|
expect(elObj.activeMonth).to.equal('February');
|
|
773
719
|
expect(elObj.activeYear).to.equal('2001');
|
|
774
720
|
});
|
|
775
|
-
|
|
776
721
|
it('disables previousMonthButton and nextMonthButton based on disabled days accordingly', async () => {
|
|
777
722
|
const el = await fixture(html`
|
|
778
723
|
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
@@ -782,68 +727,63 @@ describe('<lion-calendar>', () => {
|
|
|
782
727
|
expect(elObj.activeYear).to.equal('2000');
|
|
783
728
|
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
784
729
|
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
785
|
-
|
|
786
730
|
el.minDate = new Date('2000/12/01');
|
|
787
731
|
el.maxDate = new Date('2000/12/31');
|
|
788
732
|
await el.updateComplete;
|
|
789
|
-
|
|
790
733
|
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
791
734
|
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
792
|
-
/** @type {HTMLElement} */
|
|
735
|
+
/** @type {HTMLElement} */
|
|
736
|
+
elObj.previousMonthButtonEl.click();
|
|
793
737
|
await el.updateComplete;
|
|
794
738
|
expect(elObj.activeMonth).to.equal('December');
|
|
795
739
|
expect(elObj.activeYear).to.equal('2000');
|
|
796
|
-
/** @type {HTMLElement} */
|
|
740
|
+
/** @type {HTMLElement} */
|
|
741
|
+
elObj.previousMonthButtonEl.click();
|
|
797
742
|
await el.updateComplete;
|
|
798
743
|
expect(elObj.activeMonth).to.equal('December');
|
|
799
744
|
expect(elObj.activeYear).to.equal('2000');
|
|
800
745
|
});
|
|
801
|
-
|
|
802
746
|
it('handles switch to previous month when dates are disabled', async () => {
|
|
803
|
-
const clock = sinon.useFakeTimers({
|
|
804
|
-
|
|
747
|
+
const clock = sinon.useFakeTimers({
|
|
748
|
+
now: new Date('2000/12/15').getTime(),
|
|
749
|
+
});
|
|
805
750
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
806
751
|
const elObj = new CalendarObject(el);
|
|
807
752
|
expect(elObj.activeMonth).to.equal('December');
|
|
808
753
|
expect(elObj.activeYear).to.equal('2000');
|
|
809
|
-
|
|
810
754
|
el.minDate = new Date('2000/11/20');
|
|
811
755
|
await el.updateComplete;
|
|
812
|
-
|
|
813
756
|
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
814
757
|
expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
|
|
815
758
|
|
|
816
|
-
/** @type {HTMLElement} */
|
|
759
|
+
/** @type {HTMLElement} */
|
|
760
|
+
elObj.previousMonthButtonEl.click();
|
|
817
761
|
await el.updateComplete;
|
|
818
762
|
expect(elObj.activeMonth).to.equal('November');
|
|
819
763
|
expect(elObj.activeYear).to.equal('2000');
|
|
820
764
|
expect(isSameDate(el.centralDate, new Date('2000/11/15'))).to.be.true;
|
|
821
|
-
|
|
822
765
|
clock.restore();
|
|
823
766
|
});
|
|
824
|
-
|
|
825
767
|
it('handles switch to next month when dates are disabled', async () => {
|
|
826
|
-
const clock = sinon.useFakeTimers({
|
|
827
|
-
|
|
768
|
+
const clock = sinon.useFakeTimers({
|
|
769
|
+
now: new Date('2000/12/15').getTime(),
|
|
770
|
+
});
|
|
828
771
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
829
772
|
const elObj = new CalendarObject(el);
|
|
830
773
|
expect(elObj.activeMonth).to.equal('December');
|
|
831
774
|
expect(elObj.activeYear).to.equal('2000');
|
|
832
|
-
|
|
833
775
|
el.maxDate = new Date('2001/01/10');
|
|
834
776
|
await el.updateComplete;
|
|
835
|
-
|
|
836
777
|
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
837
778
|
expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
|
|
838
|
-
/** @type {HTMLElement} */
|
|
779
|
+
/** @type {HTMLElement} */
|
|
780
|
+
elObj.nextMonthButtonEl.click();
|
|
839
781
|
await el.updateComplete;
|
|
840
782
|
expect(elObj.activeMonth).to.equal('January');
|
|
841
783
|
expect(elObj.activeYear).to.equal('2001');
|
|
842
784
|
expect(isSameDate(el.centralDate, new Date('2001/01/15'))).to.be.true;
|
|
843
|
-
|
|
844
785
|
clock.restore();
|
|
845
786
|
});
|
|
846
|
-
|
|
847
787
|
it('supports navigating from larger months to smaller ones (day counts)', async () => {
|
|
848
788
|
// given
|
|
849
789
|
const inputDate = new Date('2019/08/31');
|
|
@@ -852,7 +792,8 @@ describe('<lion-calendar>', () => {
|
|
|
852
792
|
`);
|
|
853
793
|
// when
|
|
854
794
|
const remote = new CalendarObject(element);
|
|
855
|
-
/** @type {HTMLElement} */
|
|
795
|
+
/** @type {HTMLElement} */
|
|
796
|
+
remote.nextMonthButtonEl.click();
|
|
856
797
|
await element.updateComplete;
|
|
857
798
|
// then
|
|
858
799
|
expect(remote.activeMonth).to.equal('September');
|
|
@@ -876,7 +817,6 @@ describe('<lion-calendar>', () => {
|
|
|
876
817
|
`);
|
|
877
818
|
});
|
|
878
819
|
});
|
|
879
|
-
|
|
880
820
|
describe('Accessibility', () => {
|
|
881
821
|
it('navigate buttons have a aria-label and title attribute with accessible label', async () => {
|
|
882
822
|
const el = await fixture(html`
|
|
@@ -909,10 +849,9 @@ describe('<lion-calendar>', () => {
|
|
|
909
849
|
'Next year, December 2001',
|
|
910
850
|
);
|
|
911
851
|
});
|
|
912
|
-
|
|
913
852
|
it('disables a date with disableDates function provide a correct message', async () => {
|
|
914
853
|
/** @param {Date} d */
|
|
915
|
-
const disable15th = d => d.getDate() === 15;
|
|
854
|
+
const disable15th = (d) => d.getDate() === 15;
|
|
916
855
|
const el = await fixture(html`
|
|
917
856
|
<lion-calendar
|
|
918
857
|
.selectedDate="${new Date('2000/12/01')}"
|
|
@@ -939,7 +878,6 @@ describe('<lion-calendar>', () => {
|
|
|
939
878
|
</div>
|
|
940
879
|
`);
|
|
941
880
|
});
|
|
942
|
-
|
|
943
881
|
it('disables days before "minDate" property provide a correct message', async () => {
|
|
944
882
|
const el = await fixture(html`
|
|
945
883
|
<lion-calendar
|
|
@@ -968,7 +906,6 @@ describe('<lion-calendar>', () => {
|
|
|
968
906
|
</div>
|
|
969
907
|
`);
|
|
970
908
|
});
|
|
971
|
-
|
|
972
909
|
it('disables days after "maxDate" property provide a correct message', async () => {
|
|
973
910
|
const el = await fixture(html`
|
|
974
911
|
<lion-calendar
|
|
@@ -1000,14 +937,13 @@ describe('<lion-calendar>', () => {
|
|
|
1000
937
|
});
|
|
1001
938
|
});
|
|
1002
939
|
});
|
|
1003
|
-
|
|
1004
940
|
describe('Calendar body (months view)', () => {
|
|
1005
941
|
it('renders the days of the week as table headers', async () => {
|
|
1006
942
|
const el = await fixture(
|
|
1007
943
|
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
1008
944
|
);
|
|
1009
945
|
const elObj = new CalendarObject(el);
|
|
1010
|
-
expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
|
|
946
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
1011
947
|
'Sun',
|
|
1012
948
|
'Mon',
|
|
1013
949
|
'Tue',
|
|
@@ -1017,22 +953,19 @@ describe('<lion-calendar>', () => {
|
|
|
1017
953
|
'Sat',
|
|
1018
954
|
]);
|
|
1019
955
|
});
|
|
1020
|
-
|
|
1021
956
|
describe('Day view', () => {
|
|
1022
957
|
it('adds "today" attribute if date is today', async () => {
|
|
1023
|
-
const clock = sinon.useFakeTimers({
|
|
1024
|
-
|
|
958
|
+
const clock = sinon.useFakeTimers({
|
|
959
|
+
now: new Date('2000/12/15').getTime(),
|
|
960
|
+
});
|
|
1025
961
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
1026
962
|
const elObj = new CalendarObject(el);
|
|
1027
963
|
expect(elObj.getDayEl(15).hasAttribute('today')).to.be.true;
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
);
|
|
1032
|
-
|
|
964
|
+
expect(
|
|
965
|
+
elObj.checkForAllDayObjs(/** @param {DayObject} d */ (d) => d.isToday, [15]),
|
|
966
|
+
).to.equal(true);
|
|
1033
967
|
clock.restore();
|
|
1034
968
|
});
|
|
1035
|
-
|
|
1036
969
|
it('adds "selected" attribute to the selected date', async () => {
|
|
1037
970
|
const el = await fixture(
|
|
1038
971
|
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
@@ -1040,24 +973,23 @@ describe('<lion-calendar>', () => {
|
|
|
1040
973
|
const elObj = new CalendarObject(el);
|
|
1041
974
|
expect(
|
|
1042
975
|
elObj.checkForAllDayObjs(
|
|
1043
|
-
/** @param {DayObject} obj */ obj => obj.el.hasAttribute('selected'),
|
|
976
|
+
/** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
|
|
1044
977
|
[12],
|
|
1045
978
|
),
|
|
1046
979
|
).to.equal(true);
|
|
1047
|
-
|
|
1048
980
|
el.selectedDate = new Date('2000/12/15');
|
|
1049
981
|
await el.updateComplete;
|
|
1050
982
|
expect(
|
|
1051
983
|
elObj.checkForAllDayObjs(
|
|
1052
|
-
/** @param {DayObject} obj */ obj => obj.el.hasAttribute('selected'),
|
|
984
|
+
/** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
|
|
1053
985
|
[15],
|
|
1054
986
|
),
|
|
1055
987
|
).to.equal(true);
|
|
1056
988
|
});
|
|
1057
|
-
|
|
1058
989
|
it('adds aria-disabled="true" attribute to disabled dates', async () => {
|
|
1059
|
-
const clock = sinon.useFakeTimers({
|
|
1060
|
-
|
|
990
|
+
const clock = sinon.useFakeTimers({
|
|
991
|
+
now: new Date('2000/12/15').getTime(),
|
|
992
|
+
});
|
|
1061
993
|
const el = await fixture(html`
|
|
1062
994
|
<lion-calendar
|
|
1063
995
|
.selectedDate="${new Date('2000/12/10')}"
|
|
@@ -1069,15 +1001,13 @@ describe('<lion-calendar>', () => {
|
|
|
1069
1001
|
const elObj = new CalendarObject(el);
|
|
1070
1002
|
expect(
|
|
1071
1003
|
elObj.checkForAllDayObjs(
|
|
1072
|
-
/** @param {DayObject} d */ d => d.el.getAttribute('aria-disabled') === 'true',
|
|
1004
|
+
/** @param {DayObject} d */ (d) => d.el.getAttribute('aria-disabled') === 'true',
|
|
1073
1005
|
[1, 2, 30, 31],
|
|
1074
1006
|
),
|
|
1075
1007
|
).to.equal(true);
|
|
1076
|
-
|
|
1077
1008
|
clock.restore();
|
|
1078
1009
|
});
|
|
1079
1010
|
});
|
|
1080
|
-
|
|
1081
1011
|
describe('User Interaction', () => {
|
|
1082
1012
|
// For implementation, base on: https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/grid/js/dataGrid.js
|
|
1083
1013
|
|
|
@@ -1089,12 +1019,11 @@ describe('<lion-calendar>', () => {
|
|
|
1089
1019
|
const elObj = new CalendarObject(el);
|
|
1090
1020
|
expect(
|
|
1091
1021
|
elObj.checkForAllDayObjs(
|
|
1092
|
-
/** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '0',
|
|
1022
|
+
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '0',
|
|
1093
1023
|
[12],
|
|
1094
1024
|
),
|
|
1095
1025
|
).to.equal(true);
|
|
1096
1026
|
});
|
|
1097
|
-
|
|
1098
1027
|
it('non focused days are not reachable via tab (have tabindex="-1")', async () => {
|
|
1099
1028
|
const el = await fixture(html`
|
|
1100
1029
|
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
@@ -1102,12 +1031,11 @@ describe('<lion-calendar>', () => {
|
|
|
1102
1031
|
const elObj = new CalendarObject(el);
|
|
1103
1032
|
expect(
|
|
1104
1033
|
elObj.checkForAllDayObjs(
|
|
1105
|
-
/** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1106
|
-
/** @param {number} dayNumber */ dayNumber => dayNumber !== 12,
|
|
1034
|
+
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1035
|
+
/** @param {number} dayNumber */ (dayNumber) => dayNumber !== 12,
|
|
1107
1036
|
),
|
|
1108
1037
|
).to.equal(true);
|
|
1109
1038
|
});
|
|
1110
|
-
|
|
1111
1039
|
it('blocks navigation to disabled days', async () => {
|
|
1112
1040
|
const el = await fixture(html`
|
|
1113
1041
|
<lion-calendar
|
|
@@ -1119,12 +1047,11 @@ describe('<lion-calendar>', () => {
|
|
|
1119
1047
|
const elObj = new CalendarObject(el);
|
|
1120
1048
|
expect(
|
|
1121
1049
|
elObj.checkForAllDayObjs(
|
|
1122
|
-
/** @param {DayObject} d */ d => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1123
|
-
/** @param {number} dayNumber */ dayNumber => dayNumber < 9,
|
|
1050
|
+
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1051
|
+
/** @param {number} dayNumber */ (dayNumber) => dayNumber < 9,
|
|
1124
1052
|
),
|
|
1125
1053
|
).to.equal(true);
|
|
1126
1054
|
});
|
|
1127
|
-
|
|
1128
1055
|
it('navigates through months with [pageup] [pagedown] keys', async () => {
|
|
1129
1056
|
const el = await fixture(html`
|
|
1130
1057
|
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
@@ -1132,30 +1059,28 @@ describe('<lion-calendar>', () => {
|
|
|
1132
1059
|
const elObj = new CalendarObject(el);
|
|
1133
1060
|
expect(elObj.activeMonth).to.equal('January');
|
|
1134
1061
|
expect(elObj.activeYear).to.equal('2001');
|
|
1135
|
-
|
|
1136
1062
|
focusSelectedDate(el);
|
|
1137
|
-
await sendKeys({
|
|
1138
|
-
|
|
1063
|
+
await sendKeys({
|
|
1064
|
+
press: 'PageUp',
|
|
1065
|
+
});
|
|
1139
1066
|
await el.updateComplete;
|
|
1140
1067
|
expect(elObj.activeMonth).to.equal('December');
|
|
1141
1068
|
expect(elObj.activeYear).to.equal('2000');
|
|
1142
|
-
|
|
1143
|
-
|
|
1069
|
+
await sendKeys({
|
|
1070
|
+
press: 'PageDown',
|
|
1071
|
+
});
|
|
1144
1072
|
await el.updateComplete;
|
|
1145
1073
|
expect(elObj.activeMonth).to.equal('January');
|
|
1146
1074
|
expect(elObj.activeYear).to.equal('2001');
|
|
1147
1075
|
});
|
|
1148
|
-
|
|
1149
1076
|
it('navigates through years with [alt + pageup] [alt + pagedown] keys', async () => {
|
|
1150
1077
|
const el = await fixture(html`
|
|
1151
1078
|
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1152
1079
|
`);
|
|
1153
1080
|
focusSelectedDate(el);
|
|
1154
|
-
|
|
1155
1081
|
const elObj = new CalendarObject(el);
|
|
1156
1082
|
expect(elObj.activeMonth).to.equal('January');
|
|
1157
1083
|
expect(elObj.activeYear).to.equal('2001');
|
|
1158
|
-
|
|
1159
1084
|
await sendKeys({
|
|
1160
1085
|
down: 'Alt',
|
|
1161
1086
|
});
|
|
@@ -1165,12 +1090,10 @@ describe('<lion-calendar>', () => {
|
|
|
1165
1090
|
await sendKeys({
|
|
1166
1091
|
up: 'Alt',
|
|
1167
1092
|
});
|
|
1168
|
-
|
|
1169
1093
|
await el.updateComplete;
|
|
1170
1094
|
focusSelectedDate(el);
|
|
1171
1095
|
expect(elObj.activeMonth).to.equal('January');
|
|
1172
1096
|
expect(elObj.activeYear).to.equal('2002');
|
|
1173
|
-
|
|
1174
1097
|
await sendKeys({
|
|
1175
1098
|
down: 'Alt',
|
|
1176
1099
|
});
|
|
@@ -1184,103 +1107,102 @@ describe('<lion-calendar>', () => {
|
|
|
1184
1107
|
expect(elObj.activeMonth).to.equal('January');
|
|
1185
1108
|
expect(elObj.activeYear).to.equal('2001');
|
|
1186
1109
|
});
|
|
1187
|
-
|
|
1188
1110
|
describe('Arrow keys', () => {
|
|
1189
1111
|
it('navigates (sets focus) to next row item via [arrow down] key', async () => {
|
|
1190
1112
|
const el = await fixture(html`
|
|
1191
1113
|
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1192
1114
|
`);
|
|
1193
1115
|
const elObj = new CalendarObject(el);
|
|
1194
|
-
|
|
1195
1116
|
focusSelectedDate(el);
|
|
1196
|
-
await sendKeys({
|
|
1117
|
+
await sendKeys({
|
|
1118
|
+
press: 'ArrowDown',
|
|
1119
|
+
});
|
|
1197
1120
|
await el.updateComplete;
|
|
1198
1121
|
expect(elObj.focusedDayObj?.monthday).to.equal(2 + 7);
|
|
1199
1122
|
});
|
|
1200
|
-
|
|
1201
1123
|
it('navigates (sets focus) to previous row item via [arrow up] key', async () => {
|
|
1202
1124
|
const el = await fixture(html`
|
|
1203
1125
|
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1204
1126
|
`);
|
|
1205
1127
|
const elObj = new CalendarObject(el);
|
|
1206
|
-
|
|
1207
1128
|
focusSelectedDate(el);
|
|
1208
|
-
await sendKeys({
|
|
1129
|
+
await sendKeys({
|
|
1130
|
+
press: 'ArrowUp',
|
|
1131
|
+
});
|
|
1209
1132
|
await el.updateComplete;
|
|
1210
1133
|
expect(elObj.focusedDayObj?.monthday).to.equal(26); // of month before
|
|
1211
1134
|
});
|
|
1212
|
-
|
|
1213
1135
|
it('navigates (sets focus) to previous column item via [arrow left] key', async () => {
|
|
1214
1136
|
// 2000-12-12 is Tuesday; at 2nd of row
|
|
1215
1137
|
const el = await fixture(html`
|
|
1216
1138
|
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1217
1139
|
`);
|
|
1218
1140
|
const elObj = new CalendarObject(el);
|
|
1219
|
-
|
|
1220
1141
|
focusSelectedDate(el);
|
|
1221
|
-
await sendKeys({
|
|
1142
|
+
await sendKeys({
|
|
1143
|
+
press: 'ArrowLeft',
|
|
1144
|
+
});
|
|
1222
1145
|
await el.updateComplete;
|
|
1223
1146
|
expect(elObj.focusedDayObj?.monthday).to.equal(12 - 1);
|
|
1224
1147
|
});
|
|
1225
|
-
|
|
1226
1148
|
it('navigates (sets focus) to next column item via [arrow right] key', async () => {
|
|
1227
1149
|
// 2000-12-12 is Tuesday; at 2nd of row
|
|
1228
1150
|
const el = await fixture(html`
|
|
1229
1151
|
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1230
1152
|
`);
|
|
1231
1153
|
const elObj = new CalendarObject(el);
|
|
1232
|
-
|
|
1233
1154
|
focusSelectedDate(el);
|
|
1234
|
-
await sendKeys({
|
|
1155
|
+
await sendKeys({
|
|
1156
|
+
press: 'ArrowRight',
|
|
1157
|
+
});
|
|
1235
1158
|
await el.updateComplete;
|
|
1236
1159
|
expect(elObj.focusedDayObj?.monthday).to.equal(12 + 1);
|
|
1237
1160
|
});
|
|
1238
|
-
|
|
1239
1161
|
it('navigates (sets focus) to next column item via [arrow right] key', async () => {
|
|
1240
1162
|
const el = await fixture(html`
|
|
1241
1163
|
<lion-calendar
|
|
1242
1164
|
.selectedDate="${new Date('2001/01/02')}"
|
|
1243
1165
|
.disableDates=${
|
|
1244
|
-
/** @param {Date} date */ date => date.getDate() === 3 || date.getDate() === 4
|
|
1166
|
+
/** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
|
|
1245
1167
|
}
|
|
1246
1168
|
></lion-calendar>
|
|
1247
1169
|
`);
|
|
1248
1170
|
const elObj = new CalendarObject(el);
|
|
1249
|
-
|
|
1250
1171
|
focusSelectedDate(el);
|
|
1251
|
-
await sendKeys({
|
|
1172
|
+
await sendKeys({
|
|
1173
|
+
press: 'ArrowRight',
|
|
1174
|
+
});
|
|
1252
1175
|
await el.updateComplete;
|
|
1253
1176
|
expect(elObj.focusedDayObj?.monthday).to.equal(3);
|
|
1254
1177
|
});
|
|
1255
|
-
|
|
1256
1178
|
it('navigates (sets focus) to next row via [arrow right] key if last item in row', async () => {
|
|
1257
1179
|
const el = await fixture(html`
|
|
1258
1180
|
<lion-calendar .selectedDate="${new Date('2019/01/05')}"></lion-calendar>
|
|
1259
1181
|
`);
|
|
1260
1182
|
const elObj = new CalendarObject(el);
|
|
1261
1183
|
expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sat');
|
|
1262
|
-
|
|
1263
1184
|
focusSelectedDate(el);
|
|
1264
|
-
await sendKeys({
|
|
1185
|
+
await sendKeys({
|
|
1186
|
+
press: 'ArrowRight',
|
|
1187
|
+
});
|
|
1265
1188
|
await el.updateComplete;
|
|
1266
1189
|
expect(elObj.focusedDayObj?.monthday).to.equal(6);
|
|
1267
1190
|
expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sun');
|
|
1268
1191
|
});
|
|
1269
|
-
|
|
1270
1192
|
it('navigates (sets focus) to previous row via [arrow left] key if first item in row', async () => {
|
|
1271
1193
|
const el = await fixture(html`
|
|
1272
1194
|
<lion-calendar .selectedDate="${new Date('2019/01/06')}"></lion-calendar>
|
|
1273
1195
|
`);
|
|
1274
1196
|
const elObj = new CalendarObject(el);
|
|
1275
1197
|
expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sun');
|
|
1276
|
-
|
|
1277
1198
|
focusSelectedDate(el);
|
|
1278
|
-
await sendKeys({
|
|
1199
|
+
await sendKeys({
|
|
1200
|
+
press: 'ArrowLeft',
|
|
1201
|
+
});
|
|
1279
1202
|
await el.updateComplete;
|
|
1280
1203
|
expect(elObj.focusedDayObj?.monthday).to.equal(5);
|
|
1281
1204
|
expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sat');
|
|
1282
1205
|
});
|
|
1283
|
-
|
|
1284
1206
|
it('navigates to next month via [arrow right] key if last day of month', async () => {
|
|
1285
1207
|
const el = await fixture(html`
|
|
1286
1208
|
<lion-calendar .selectedDate="${new Date('2000/12/31')}"></lion-calendar>
|
|
@@ -1288,15 +1210,15 @@ describe('<lion-calendar>', () => {
|
|
|
1288
1210
|
const elObj = new CalendarObject(el);
|
|
1289
1211
|
expect(elObj.activeMonth).to.equal('December');
|
|
1290
1212
|
expect(elObj.activeYear).to.equal('2000');
|
|
1291
|
-
|
|
1292
1213
|
focusSelectedDate(el);
|
|
1293
|
-
await sendKeys({
|
|
1214
|
+
await sendKeys({
|
|
1215
|
+
press: 'ArrowRight',
|
|
1216
|
+
});
|
|
1294
1217
|
await el.updateComplete;
|
|
1295
1218
|
expect(elObj.activeMonth).to.equal('January');
|
|
1296
1219
|
expect(elObj.activeYear).to.equal('2001');
|
|
1297
1220
|
expect(elObj.focusedDayObj?.monthday).to.equal(1);
|
|
1298
1221
|
});
|
|
1299
|
-
|
|
1300
1222
|
it('navigates to previous month via [arrow left] key if first day of month', async () => {
|
|
1301
1223
|
const el = await fixture(html`
|
|
1302
1224
|
<lion-calendar .selectedDate="${new Date('2001/01/01')}"></lion-calendar>
|
|
@@ -1304,15 +1226,15 @@ describe('<lion-calendar>', () => {
|
|
|
1304
1226
|
const elObj = new CalendarObject(el);
|
|
1305
1227
|
expect(elObj.activeMonth).to.equal('January');
|
|
1306
1228
|
expect(elObj.activeYear).to.equal('2001');
|
|
1307
|
-
|
|
1308
1229
|
focusSelectedDate(el);
|
|
1309
|
-
await sendKeys({
|
|
1230
|
+
await sendKeys({
|
|
1231
|
+
press: 'ArrowLeft',
|
|
1232
|
+
});
|
|
1310
1233
|
await el.updateComplete;
|
|
1311
1234
|
expect(elObj.activeMonth).to.equal('December');
|
|
1312
1235
|
expect(elObj.activeYear).to.equal('2000');
|
|
1313
1236
|
expect(elObj.focusedDayObj?.monthday).to.equal(31);
|
|
1314
1237
|
});
|
|
1315
|
-
|
|
1316
1238
|
it('navigates to next month via [arrow down] key if last row of month', async () => {
|
|
1317
1239
|
const el = await fixture(html`
|
|
1318
1240
|
<lion-calendar .selectedDate="${new Date('2000/12/30')}"></lion-calendar>
|
|
@@ -1320,15 +1242,15 @@ describe('<lion-calendar>', () => {
|
|
|
1320
1242
|
const elObj = new CalendarObject(el);
|
|
1321
1243
|
expect(elObj.activeMonth).to.equal('December');
|
|
1322
1244
|
expect(elObj.activeYear).to.equal('2000');
|
|
1323
|
-
|
|
1324
1245
|
focusSelectedDate(el);
|
|
1325
|
-
await sendKeys({
|
|
1246
|
+
await sendKeys({
|
|
1247
|
+
press: 'ArrowDown',
|
|
1248
|
+
});
|
|
1326
1249
|
await el.updateComplete;
|
|
1327
1250
|
expect(elObj.activeMonth).to.equal('January');
|
|
1328
1251
|
expect(elObj.activeYear).to.equal('2001');
|
|
1329
1252
|
expect(elObj.focusedDayObj?.monthday).to.equal(6);
|
|
1330
1253
|
});
|
|
1331
|
-
|
|
1332
1254
|
it('navigates to previous month via [arrow up] key if first row of month', async () => {
|
|
1333
1255
|
const el = await fixture(html`
|
|
1334
1256
|
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
@@ -1336,9 +1258,10 @@ describe('<lion-calendar>', () => {
|
|
|
1336
1258
|
const elObj = new CalendarObject(el);
|
|
1337
1259
|
expect(elObj.activeMonth).to.equal('January');
|
|
1338
1260
|
expect(elObj.activeYear).to.equal('2001');
|
|
1339
|
-
|
|
1340
1261
|
focusSelectedDate(el);
|
|
1341
|
-
await sendKeys({
|
|
1262
|
+
await sendKeys({
|
|
1263
|
+
press: 'ArrowUp',
|
|
1264
|
+
});
|
|
1342
1265
|
await el.updateComplete;
|
|
1343
1266
|
expect(elObj.activeMonth).to.equal('December');
|
|
1344
1267
|
expect(elObj.activeYear).to.equal('2000');
|
|
@@ -1346,7 +1269,6 @@ describe('<lion-calendar>', () => {
|
|
|
1346
1269
|
});
|
|
1347
1270
|
});
|
|
1348
1271
|
});
|
|
1349
|
-
|
|
1350
1272
|
describe('Initial central', () => {
|
|
1351
1273
|
it('is based on "selectedDate"', async () => {
|
|
1352
1274
|
const el = await fixture(html`
|
|
@@ -1355,42 +1277,37 @@ describe('<lion-calendar>', () => {
|
|
|
1355
1277
|
const elObj = new CalendarObject(el);
|
|
1356
1278
|
expect(elObj.centralDayObj?.monthday).to.equal(15);
|
|
1357
1279
|
});
|
|
1358
|
-
|
|
1359
1280
|
it('is today if no selected date is available', async () => {
|
|
1360
|
-
const clock = sinon.useFakeTimers({
|
|
1361
|
-
|
|
1281
|
+
const clock = sinon.useFakeTimers({
|
|
1282
|
+
now: new Date('2000/12/15').getTime(),
|
|
1283
|
+
});
|
|
1362
1284
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
1363
1285
|
const elObj = new CalendarObject(el);
|
|
1364
1286
|
expect(elObj.centralDayObj?.monthday).to.equal(15);
|
|
1365
|
-
|
|
1366
1287
|
clock.restore();
|
|
1367
1288
|
});
|
|
1368
|
-
|
|
1369
1289
|
it('is nearest to today if no selected date is available and today is disabled', async () => {
|
|
1370
|
-
const clock = sinon.useFakeTimers({
|
|
1371
|
-
|
|
1290
|
+
const clock = sinon.useFakeTimers({
|
|
1291
|
+
now: new Date('2000/12/15').getTime(),
|
|
1292
|
+
});
|
|
1372
1293
|
const calWithMin = await fixture(
|
|
1373
1294
|
html`<lion-calendar .minDate=${new Date('2000/12/25')}></lion-calendar>`,
|
|
1374
1295
|
);
|
|
1375
1296
|
const calObjWithMin = new CalendarObject(calWithMin);
|
|
1376
1297
|
expect(calObjWithMin.centralDayObj?.monthday).to.equal(25);
|
|
1377
|
-
|
|
1378
1298
|
const calWithMax = await fixture(
|
|
1379
1299
|
html`<lion-calendar .maxDate=${new Date('2000/12/05')}></lion-calendar>`,
|
|
1380
1300
|
);
|
|
1381
1301
|
const calObjWithMax = new CalendarObject(calWithMax);
|
|
1382
1302
|
expect(calObjWithMax.centralDayObj?.monthday).to.equal(5);
|
|
1383
|
-
|
|
1384
1303
|
const calWithDisabled = await fixture(
|
|
1385
1304
|
html`<lion-calendar
|
|
1386
|
-
.disableDates=${/** @param {Date} date */ date => date.getDate() === 15}
|
|
1305
|
+
.disableDates=${/** @param {Date} date */ (date) => date.getDate() === 15}
|
|
1387
1306
|
></lion-calendar>`,
|
|
1388
1307
|
);
|
|
1389
1308
|
await calWithDisabled.updateComplete;
|
|
1390
|
-
|
|
1391
1309
|
const calObjWithDisabled = new CalendarObject(calWithDisabled);
|
|
1392
1310
|
expect(calObjWithDisabled.centralDayObj?.monthday).to.equal(16);
|
|
1393
|
-
|
|
1394
1311
|
clock.restore();
|
|
1395
1312
|
});
|
|
1396
1313
|
});
|
|
@@ -1400,7 +1317,6 @@ describe('<lion-calendar>', () => {
|
|
|
1400
1317
|
* - (virtual) scrolling: still under discussion. Wait for UX
|
|
1401
1318
|
*/
|
|
1402
1319
|
});
|
|
1403
|
-
|
|
1404
1320
|
describe('Accessibility', () => {
|
|
1405
1321
|
// Based on:
|
|
1406
1322
|
// - https://codepen.io/erikkroes/pen/jJEWpR
|
|
@@ -1417,17 +1333,15 @@ describe('<lion-calendar>', () => {
|
|
|
1417
1333
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1418
1334
|
expect(elObj.rootEl?.getAttribute('role')).to.equal('application');
|
|
1419
1335
|
});
|
|
1420
|
-
|
|
1421
1336
|
it(`renders the calendar as a table element with role="grid", aria-readonly="true" and
|
|
1422
1337
|
a caption (month + year)`, async () => {
|
|
1423
1338
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1424
1339
|
expect(elObj.gridEl?.getAttribute('role')).to.equal('grid');
|
|
1425
1340
|
expect(elObj.gridEl?.getAttribute('aria-readonly')).to.equal('true');
|
|
1426
1341
|
});
|
|
1427
|
-
|
|
1428
1342
|
it('adds aria-labels to the weekday table headers', async () => {
|
|
1429
1343
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1430
|
-
expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
|
|
1344
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1431
1345
|
'Sunday',
|
|
1432
1346
|
'Monday',
|
|
1433
1347
|
'Tuesday',
|
|
@@ -1437,14 +1351,12 @@ describe('<lion-calendar>', () => {
|
|
|
1437
1351
|
'Saturday',
|
|
1438
1352
|
]);
|
|
1439
1353
|
});
|
|
1440
|
-
|
|
1441
1354
|
it('renders each day as a button inside a table cell', async () => {
|
|
1442
1355
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1443
|
-
const hasBtn = /** @param {DayObject} d */ d =>
|
|
1356
|
+
const hasBtn = /** @param {DayObject} d */ (d) =>
|
|
1444
1357
|
d.el.tagName === 'DIV' && d.el.getAttribute('role') === 'button';
|
|
1445
1358
|
expect(elObj.checkForAllDayObjs(hasBtn)).to.equal(true);
|
|
1446
1359
|
});
|
|
1447
|
-
|
|
1448
1360
|
it('renders days for previous and next months', async () => {
|
|
1449
1361
|
const elObj = new CalendarObject(
|
|
1450
1362
|
await fixture(html`
|
|
@@ -1459,7 +1371,6 @@ describe('<lion-calendar>', () => {
|
|
|
1459
1371
|
expect(previousMonthDayObjs[1].monthday).to.equal(30);
|
|
1460
1372
|
expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
|
|
1461
1373
|
expect(previousMonthDayObjs[2].monthday).to.equal(31);
|
|
1462
|
-
|
|
1463
1374
|
expect(nextMonthDayObjs.length).to.equal(9);
|
|
1464
1375
|
expect(nextMonthDayObjs[0].cellIndex).to.equal(5);
|
|
1465
1376
|
expect(nextMonthDayObjs[0].monthday).to.equal(1);
|
|
@@ -1480,7 +1391,6 @@ describe('<lion-calendar>', () => {
|
|
|
1480
1391
|
expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
|
|
1481
1392
|
expect(nextMonthDayObjs[8].monthday).to.equal(9);
|
|
1482
1393
|
});
|
|
1483
|
-
|
|
1484
1394
|
it('renders days for next months in the last month of the year', async () => {
|
|
1485
1395
|
const elObj = new CalendarObject(
|
|
1486
1396
|
await fixture(html`
|
|
@@ -1508,7 +1418,6 @@ describe('<lion-calendar>', () => {
|
|
|
1508
1418
|
expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
|
|
1509
1419
|
expect(nextMonthDayObjs[8].monthday).to.equal(9);
|
|
1510
1420
|
});
|
|
1511
|
-
|
|
1512
1421
|
it('renders days for previous months in the first month of the year', async () => {
|
|
1513
1422
|
const elObj = new CalendarObject(
|
|
1514
1423
|
await fixture(html`
|
|
@@ -1524,22 +1433,20 @@ describe('<lion-calendar>', () => {
|
|
|
1524
1433
|
expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
|
|
1525
1434
|
expect(previousMonthDayObjs[2].monthday).to.equal(31);
|
|
1526
1435
|
});
|
|
1527
|
-
|
|
1528
1436
|
it('sets aria-current="date" to todays button', async () => {
|
|
1529
1437
|
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1530
|
-
const hasAriaCurrent = /** @param {DayObject} d */ d =>
|
|
1438
|
+
const hasAriaCurrent = /** @param {DayObject} d */ (d) =>
|
|
1531
1439
|
d.buttonEl.getAttribute('aria-current') === 'date';
|
|
1532
1440
|
const monthday = new Date().getDate();
|
|
1533
1441
|
expect(elObj.checkForAllDayObjs(hasAriaCurrent, [monthday])).to.equal(true);
|
|
1534
1442
|
});
|
|
1535
|
-
|
|
1536
1443
|
it('sets aria-pressed="true" on selected date button', async () => {
|
|
1537
1444
|
const elObj = new CalendarObject(
|
|
1538
1445
|
await fixture(html`
|
|
1539
1446
|
<lion-calendar .selectedDate="${new Date('2000/11/12')}"></lion-calendar>
|
|
1540
1447
|
`),
|
|
1541
1448
|
);
|
|
1542
|
-
const hasAriaPressed = /** @param {DayObject} d */ d =>
|
|
1449
|
+
const hasAriaPressed = /** @param {DayObject} d */ (d) =>
|
|
1543
1450
|
d.buttonEl.getAttribute('aria-pressed') === 'true';
|
|
1544
1451
|
expect(elObj.checkForAllDayObjs(hasAriaPressed, [12])).to.equal(true);
|
|
1545
1452
|
});
|
|
@@ -1555,7 +1462,6 @@ describe('<lion-calendar>', () => {
|
|
|
1555
1462
|
* - show week numbers
|
|
1556
1463
|
*/
|
|
1557
1464
|
});
|
|
1558
|
-
|
|
1559
1465
|
describe('Localization', () => {
|
|
1560
1466
|
it('supports custom locale with a fallback to a global locale', async () => {
|
|
1561
1467
|
const el = await fixture(html`
|
|
@@ -1563,35 +1469,28 @@ describe('<lion-calendar>', () => {
|
|
|
1563
1469
|
`);
|
|
1564
1470
|
const elObj = new CalendarObject(el);
|
|
1565
1471
|
expect(elObj.activeMonth).to.equal('December');
|
|
1566
|
-
|
|
1567
1472
|
el.locale = 'fr-FR';
|
|
1568
1473
|
await el.updateComplete;
|
|
1569
1474
|
expect(elObj.activeMonth).to.equal('décembre');
|
|
1570
|
-
|
|
1571
1475
|
localizeManager.locale = 'cs-CZ';
|
|
1572
1476
|
await el.updateComplete;
|
|
1573
1477
|
expect(elObj.activeMonth).to.equal('décembre');
|
|
1574
|
-
|
|
1575
1478
|
el.locale = '';
|
|
1576
1479
|
await el.updateComplete;
|
|
1577
1480
|
expect(elObj.activeMonth).to.equal('prosinec');
|
|
1578
1481
|
});
|
|
1579
|
-
|
|
1580
1482
|
it('displays the right translations according to locale', async () => {
|
|
1581
1483
|
const el = await fixture(html`
|
|
1582
1484
|
<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>
|
|
1583
1485
|
`);
|
|
1584
|
-
|
|
1585
1486
|
const elObj = new CalendarObject(el);
|
|
1586
1487
|
expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1587
1488
|
'Next month, December 2019',
|
|
1588
1489
|
);
|
|
1589
|
-
|
|
1590
1490
|
expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1591
1491
|
'Previous month, October 2019',
|
|
1592
1492
|
);
|
|
1593
|
-
|
|
1594
|
-
expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
|
|
1493
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1595
1494
|
'Sunday',
|
|
1596
1495
|
'Monday',
|
|
1597
1496
|
'Tuesday',
|
|
@@ -1600,8 +1499,7 @@ describe('<lion-calendar>', () => {
|
|
|
1600
1499
|
'Friday',
|
|
1601
1500
|
'Saturday',
|
|
1602
1501
|
]);
|
|
1603
|
-
|
|
1604
|
-
expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
|
|
1502
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
1605
1503
|
'Sun',
|
|
1606
1504
|
'Mon',
|
|
1607
1505
|
'Tue',
|
|
@@ -1610,19 +1508,16 @@ describe('<lion-calendar>', () => {
|
|
|
1610
1508
|
'Fri',
|
|
1611
1509
|
'Sat',
|
|
1612
1510
|
]);
|
|
1613
|
-
|
|
1614
1511
|
localizeManager.locale = 'nl-NL';
|
|
1615
1512
|
await el.localizeNamespacesLoaded;
|
|
1616
1513
|
await el.updateComplete;
|
|
1617
1514
|
expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1618
1515
|
'Volgende maand, december 2019',
|
|
1619
1516
|
);
|
|
1620
|
-
|
|
1621
1517
|
expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1622
1518
|
'Vorige maand, oktober 2019',
|
|
1623
1519
|
);
|
|
1624
|
-
|
|
1625
|
-
expect(elObj.weekdayHeaderEls.map(h => h.getAttribute('aria-label'))).to.eql([
|
|
1520
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1626
1521
|
'zondag',
|
|
1627
1522
|
'maandag',
|
|
1628
1523
|
'dinsdag',
|
|
@@ -1631,8 +1526,7 @@ describe('<lion-calendar>', () => {
|
|
|
1631
1526
|
'vrijdag',
|
|
1632
1527
|
'zaterdag',
|
|
1633
1528
|
]);
|
|
1634
|
-
|
|
1635
|
-
expect(elObj.weekdayHeaderEls.map(h => h.textContent?.trim())).to.deep.equal([
|
|
1529
|
+
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
1636
1530
|
'zo',
|
|
1637
1531
|
'ma',
|
|
1638
1532
|
'di',
|
|
@@ -1643,13 +1537,11 @@ describe('<lion-calendar>', () => {
|
|
|
1643
1537
|
]);
|
|
1644
1538
|
});
|
|
1645
1539
|
});
|
|
1646
|
-
|
|
1647
1540
|
describe('Accessibility', () => {
|
|
1648
1541
|
it('is accessible', async () => {
|
|
1649
1542
|
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
1650
1543
|
await expect(el).to.be.accessible();
|
|
1651
1544
|
});
|
|
1652
|
-
|
|
1653
1545
|
it('is accessible with a date selected', async () => {
|
|
1654
1546
|
const today = new Date();
|
|
1655
1547
|
const selectedDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
|
|
@@ -1658,24 +1550,21 @@ describe('<lion-calendar>', () => {
|
|
|
1658
1550
|
);
|
|
1659
1551
|
await expect(el).to.be.accessible();
|
|
1660
1552
|
});
|
|
1661
|
-
|
|
1662
1553
|
it('is accessible with disabled dates', async () => {
|
|
1663
1554
|
const el = await fixture(html`
|
|
1664
1555
|
<lion-calendar
|
|
1665
1556
|
.disableDates=${
|
|
1666
|
-
/** @param {Date} date */ date => date.getDay() === 6 || date.getDay() === 0
|
|
1557
|
+
/** @param {Date} date */ (date) => date.getDay() === 6 || date.getDay() === 0
|
|
1667
1558
|
}
|
|
1668
1559
|
></lion-calendar>
|
|
1669
1560
|
`);
|
|
1670
1561
|
await expect(el).to.be.accessible();
|
|
1671
1562
|
});
|
|
1672
|
-
|
|
1673
1563
|
it('is hidden when attribute hidden is true', async () => {
|
|
1674
1564
|
const el = await fixture(html`<lion-calendar hidden></lion-calendar>`);
|
|
1675
1565
|
expect(el).not.to.be.displayed;
|
|
1676
1566
|
});
|
|
1677
1567
|
});
|
|
1678
|
-
|
|
1679
1568
|
describe('Run suite', () => {
|
|
1680
1569
|
runCalendarSuite();
|
|
1681
1570
|
});
|