@lion/ui 0.25.0 → 0.26.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 +25 -7
- package/accordion-test-suites.js +2 -0
- package/collapsible-test-suites.js +1 -0
- package/combobox-test-suites.js +2 -0
- package/components/accordion/test/lion-accordion.test.js +2 -565
- package/components/accordion/test-suites/lion-accordion.suite.js +596 -0
- package/components/button/test-suites/LionButton.suite.js +13 -11
- package/components/button/test-suites/LionButtonReset.suite.js +11 -3
- package/components/button/test-suites/LionButtonSubmit.suite.js +11 -3
- package/components/calendar/test/lion-calendar.test.js +1 -1570
- package/components/calendar/test-suites/LionCalendar.suite.js +1617 -5
- package/components/checkbox-group/test/lion-checkbox-group-integrations.test.js +5 -2
- package/components/checkbox-group/test/lion-checkbox-indeterminate-integrations.test.js +13 -4
- package/components/checkbox-group/test/lion-checkbox-integrations.test.js +4 -1
- package/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.js +54 -54
- package/components/collapsible/test/lion-collapsible.test.js +2 -126
- package/components/collapsible/test-suites/LionCollapsible.suite.js +147 -0
- package/components/combobox/test/lion-combobox-integrations.test.js +11 -4
- package/components/combobox/test/lion-combobox.test.js +2 -3622
- package/components/combobox/test-suites/lion-combobox.suite.js +3665 -0
- package/components/core/src/ScopedElementsMixin.js +16 -1
- package/components/core/test-helpers/isElementVisible.js +21 -0
- package/components/core/test-helpers/resolveSuiteTag.js +97 -0
- package/components/core/types/TestSuiteTypes.ts +43 -0
- package/components/dialog/test/lion-dialog.integration.test.js +9 -10
- package/components/dialog/test/lion-dialog.test.js +2 -399
- package/components/dialog/test-suites/lion-dialog.suite.js +412 -0
- package/components/drawer/test/lion-drawer.test.js +2 -84
- package/components/drawer/test-suites/LionDrawer.suite.js +108 -0
- package/components/fieldset/test/lion-fieldset.test.js +7 -2
- package/components/form/test/lion-form.test.js +2 -348
- package/components/form/test-suites/lion-form.suite.js +398 -0
- package/components/form-core/test/FormatMixin.test.js +4 -1
- package/components/form-core/test/choice-group/CustomChoiceGroupMixin.integrations.test.js +13 -0
- package/components/form-core/test-suites/FormRegistrationMixins.suite.js +21 -26
- package/components/form-core/test-suites/FormatMixin.suite.js +45 -43
- package/components/form-core/test-suites/InteractionStateMixin.suite.js +19 -15
- package/components/form-core/test-suites/NativeTextFieldMixin.suite.js +8 -9
- package/components/form-core/test-suites/ValidateMixin.suite.js +14 -10
- package/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +15 -2
- package/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.js +55 -33
- package/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.js +7 -6
- package/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.js +19 -22
- package/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.js +14 -5
- package/components/form-core/test-suites/form-group/FormGroupMixin.suite.js +13 -4
- package/components/icon/test/lion-icon.test.js +2 -188
- package/components/icon/test-suites/lion-icon.suite.js +206 -0
- package/components/input/test/input-integrations.test.js +18 -15
- package/components/input/test/lion-input-integrations.test.js +7 -3
- package/components/input/test/lion-input.test.js +2 -198
- package/components/input/test-suites/lion-input.suite.js +214 -0
- package/components/input-amount/src/parsers.js +5 -1
- package/components/input-amount/test/lion-input-amount-integrations.test.js +7 -3
- package/components/input-amount/test/lion-input-amount.test.js +2 -421
- package/components/input-amount/test/parsers.test.js +12 -0
- package/components/input-amount/test-suites/lion-input-amount.suite.js +418 -0
- package/components/input-amount-dropdown/test/LionInputAmountDropdown.test.js +3 -2
- package/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.js +4 -2
- package/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.js +6 -4
- package/components/input-date/test/lion-input-date-integrations.test.js +7 -3
- package/components/input-date/test/lion-input-date.test.js +2 -177
- package/components/input-date/test-suites/lion-input-date.suite.js +195 -0
- package/components/input-datepicker/test/lion-input-datepicker-integrations.test.js +7 -3
- package/components/input-datepicker/test/lion-input-datepicker.test.js +1 -844
- package/components/input-datepicker/test-helpers/DatepickerInputObject.js +26 -0
- package/components/input-datepicker/test-suites/LionInputDatepicker.suite.js +899 -14
- package/components/input-email/test/lion-input-email-integrations.test.js +4 -2
- package/components/input-email/test/lion-input-email.test.js +2 -46
- package/components/input-email/test-suites/lion-input-email.suite.js +63 -0
- package/components/input-file/test/lion-input-file.test.js +2 -1274
- package/components/input-file/test-suites/lion-input-file.suite.js +1505 -0
- package/components/input-iban/test/lion-input-iban-integrations.test.js +4 -2
- package/components/input-iban/test/lion-input-iban.test.js +2 -73
- package/components/input-iban/test-suites/lion-input-iban.suite.js +88 -0
- package/components/input-range/test/lion-input-range.test.js +2 -176
- package/components/input-range/test-suites/lion-input-range.suite.js +195 -0
- package/components/input-stepper/test-suites/lion-input-stepper.integration.suite.js +14 -3
- package/components/input-stepper/test-suites/lion-input-stepper.suite.js +14 -10
- package/components/input-tel/test/LionInputTel.test.js +3 -1
- package/components/input-tel/test-suites/LionInputTel.suite.js +9 -4
- package/components/input-tel-dropdown/test/LionInputTelDropdown.test.js +6 -4
- package/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.js +10 -13
- package/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +6 -5
- package/components/listbox/test-suites/ListboxMixin.suite.js +19 -19
- package/components/menu/test-suites/InteractiveListMixin.suite.js +6 -9
- package/components/menu/test-suites/LionMenu.suite.js +6 -10
- package/components/menu/test-suites/LionMenuInteractions.suite.js +13 -4
- package/components/menu/test-suites/MoreButtonMenuMixin.suite.js +6 -9
- package/components/menu/test-suites/MultiLevelListMixin.suite.js +15 -11
- package/components/overlays/test/OverlayController.test.js +6 -1
- package/components/overlays/test-suites/OverlayMixin.suite.js +3 -5
- package/components/pagination/test/lion-pagination.test.js +2 -176
- package/components/pagination/test-suites/LionPagination.suite.js +201 -0
- package/components/progress-indicator/test/lion-progress-indicator.test.js +2 -203
- package/components/progress-indicator/test-suites/lion-progress-indicator.suite.js +214 -0
- package/components/radio-group/test/lion-radio-group.test.js +2 -162
- package/components/radio-group/test/lion-radio.test.js +2 -54
- package/components/radio-group/test-suites/lion-radio-group.suite.js +173 -0
- package/components/radio-group/test-suites/lion-radio.suite.js +70 -0
- package/components/select/test/lion-select.test.js +2 -79
- package/components/select/test-suites/LionSelect.suite.js +94 -0
- package/components/select-rich/test/lion-select-invoker.test.js +2 -86
- package/components/select-rich/test/lion-select-rich-interaction.test.js +2 -430
- package/components/select-rich/test/lion-select-rich.test.js +2 -1193
- package/components/select-rich/test-suites/lion-select-invoker.suite.js +98 -0
- package/components/select-rich/test-suites/lion-select-rich-interaction.suite.js +452 -0
- package/components/select-rich/test-suites/lion-select-rich.suite.js +1236 -0
- package/components/steps/test/lion-step.test.js +2 -97
- package/components/steps/test/lion-steps.test.js +2 -433
- package/components/steps/test-suites/lion-step.suite.js +113 -0
- package/components/steps/test-suites/lion-steps.suite.js +445 -0
- package/components/switch/test/lion-switch.test.js +2 -232
- package/components/switch/test-suites/lion-switch.suite.js +450 -0
- package/components/tabs/test/lion-tabs.test.js +2 -596
- package/components/tabs/test-suites/lion-tabs.suite.js +617 -0
- package/components/textarea/src/LionTextarea.js +5 -2
- package/components/textarea/test/lion-textarea.test.js +2 -159
- package/components/textarea/test-suites/lion-textarea.suite.js +192 -0
- package/components/tooltip/test/lion-tooltip.test.js +2 -393
- package/components/tooltip/test-suites/lion-tooltip.suite.js +409 -0
- package/custom-elements.json +14855 -10161
- package/dialog-test-suites.js +2 -0
- package/dist-types/components/accordion/test/lion-accordion.test.d.ts +1 -2
- package/dist-types/components/accordion/test/lion-accordion.test.d.ts.map +1 -1
- package/dist-types/components/accordion/test-suites/lion-accordion.suite.d.ts +18 -0
- package/dist-types/components/accordion/test-suites/lion-accordion.suite.d.ts.map +1 -0
- package/dist-types/components/button/test-suites/LionButton.suite.d.ts +10 -4
- package/dist-types/components/button/test-suites/LionButton.suite.d.ts.map +1 -1
- package/dist-types/components/button/test-suites/LionButtonReset.suite.d.ts +10 -4
- package/dist-types/components/button/test-suites/LionButtonReset.suite.d.ts.map +1 -1
- package/dist-types/components/button/test-suites/LionButtonSubmit.suite.d.ts +10 -4
- package/dist-types/components/button/test-suites/LionButtonSubmit.suite.d.ts.map +1 -1
- package/dist-types/components/calendar/test/lion-calendar.test.d.ts +1 -3
- package/dist-types/components/calendar/test/lion-calendar.test.d.ts.map +1 -1
- package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts +13 -4
- package/dist-types/components/calendar/test-suites/LionCalendar.suite.d.ts.map +1 -1
- package/dist-types/components/checkbox-group/test/lion-checkbox-group-integrations.test.d.ts.map +1 -1
- package/dist-types/components/checkbox-group/test/lion-checkbox-integrations.test.d.ts.map +1 -1
- package/dist-types/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.d.ts +12 -9
- package/dist-types/components/checkbox-group/test-suites/CheckboxIndeterminate.suite.d.ts.map +1 -1
- package/dist-types/components/collapsible/test/lion-collapsible.test.d.ts +1 -3
- package/dist-types/components/collapsible/test/lion-collapsible.test.d.ts.map +1 -1
- package/dist-types/components/collapsible/test-suites/LionCollapsible.suite.d.ts +18 -0
- package/dist-types/components/collapsible/test-suites/LionCollapsible.suite.d.ts.map +1 -0
- package/dist-types/components/combobox/test/lion-combobox.test.d.ts +1 -5
- package/dist-types/components/combobox/test/lion-combobox.test.d.ts.map +1 -1
- package/dist-types/components/combobox/test-suites/lion-combobox.suite.d.ts +17 -0
- package/dist-types/components/combobox/test-suites/lion-combobox.suite.d.ts.map +1 -0
- package/dist-types/components/core/src/ScopedElementsMixin.d.ts.map +1 -1
- package/dist-types/components/core/test-helpers/isElementVisible.d.ts +12 -0
- package/dist-types/components/core/test-helpers/isElementVisible.d.ts.map +1 -0
- package/dist-types/components/core/test-helpers/resolveSuiteTag.d.ts +29 -0
- package/dist-types/components/core/test-helpers/resolveSuiteTag.d.ts.map +1 -0
- package/dist-types/components/core/types/TestSuiteTypes.d.ts +40 -0
- package/dist-types/components/core/types/TestSuiteTypes.d.ts.map +1 -0
- package/dist-types/components/dialog/test/lion-dialog.integration.test.d.ts.map +1 -1
- package/dist-types/components/dialog/test/lion-dialog.test.d.ts +1 -5
- package/dist-types/components/dialog/test/lion-dialog.test.d.ts.map +1 -1
- package/dist-types/components/dialog/test-suites/lion-dialog.suite.d.ts +19 -0
- package/dist-types/components/dialog/test-suites/lion-dialog.suite.d.ts.map +1 -0
- package/dist-types/components/drawer/test/lion-drawer.test.d.ts +1 -3
- package/dist-types/components/drawer/test/lion-drawer.test.d.ts.map +1 -1
- package/dist-types/components/drawer/test-suites/LionDrawer.suite.d.ts +20 -0
- package/dist-types/components/drawer/test-suites/LionDrawer.suite.d.ts.map +1 -0
- package/dist-types/components/fieldset/test/lion-fieldset.test.d.ts.map +1 -1
- package/dist-types/components/form/test/lion-form.test.d.ts +1 -12
- package/dist-types/components/form/test/lion-form.test.d.ts.map +1 -1
- package/dist-types/components/form/test-suites/lion-form.suite.d.ts +39 -0
- package/dist-types/components/form/test-suites/lion-form.suite.d.ts.map +1 -0
- package/dist-types/components/form-core/test-suites/FormRegistrationMixins.suite.d.ts +14 -17
- package/dist-types/components/form-core/test-suites/FormRegistrationMixins.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts +22 -38
- package/dist-types/components/form-core/test-suites/FormatMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/InteractionStateMixin.suite.d.ts +11 -5
- package/dist-types/components/form-core/test-suites/InteractionStateMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/NativeTextFieldMixin.suite.d.ts +9 -4
- package/dist-types/components/form-core/test-suites/NativeTextFieldMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts +9 -4
- package/dist-types/components/form-core/test-suites/ValidateMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts +10 -1
- package/dist-types/components/form-core/test-suites/ValidateMixinFeedbackPart.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.d.ts +17 -6
- package/dist-types/components/form-core/test-suites/choice-group/ChoiceGroupMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.d.ts +5 -2
- package/dist-types/components/form-core/test-suites/choice-group/ChoiceInputMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.d.ts +10 -5
- package/dist-types/components/form-core/test-suites/choice-group/CustomChoiceGroupMixin.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.d.ts +10 -5
- package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin-input.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin.suite.d.ts +10 -5
- package/dist-types/components/form-core/test-suites/form-group/FormGroupMixin.suite.d.ts.map +1 -1
- package/dist-types/components/icon/test/lion-icon.test.d.ts +1 -4
- package/dist-types/components/icon/test/lion-icon.test.d.ts.map +1 -1
- package/dist-types/components/icon/test-suites/lion-icon.suite.d.ts +16 -0
- package/dist-types/components/icon/test-suites/lion-icon.suite.d.ts.map +1 -0
- package/dist-types/components/input/test/lion-input-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input/test/lion-input.test.d.ts +1 -2
- package/dist-types/components/input/test/lion-input.test.d.ts.map +1 -1
- package/dist-types/components/input/test-suites/lion-input.suite.d.ts +17 -0
- package/dist-types/components/input/test-suites/lion-input.suite.d.ts.map +1 -0
- package/dist-types/components/input-amount/src/parsers.d.ts.map +1 -1
- package/dist-types/components/input-amount/test/lion-input-amount-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-amount/test/lion-input-amount.test.d.ts +1 -2
- package/dist-types/components/input-amount/test/lion-input-amount.test.d.ts.map +1 -1
- package/dist-types/components/input-amount/test-suites/lion-input-amount.suite.d.ts +19 -0
- package/dist-types/components/input-amount/test-suites/lion-input-amount.suite.d.ts.map +1 -0
- package/dist-types/components/input-amount-dropdown/test/lion-input-amount-dropdown-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts +7 -3
- package/dist-types/components/input-amount-dropdown/test-suites/LionInputAmountDropdown.suite.d.ts.map +1 -1
- package/dist-types/components/input-date/test/lion-input-date-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-date/test/lion-input-date.test.d.ts +1 -3
- package/dist-types/components/input-date/test/lion-input-date.test.d.ts.map +1 -1
- package/dist-types/components/input-date/test-suites/lion-input-date.suite.d.ts +15 -0
- package/dist-types/components/input-date/test-suites/lion-input-date.suite.d.ts.map +1 -0
- package/dist-types/components/input-datepicker/test/lion-input-datepicker-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts +1 -2
- package/dist-types/components/input-datepicker/test/lion-input-datepicker.test.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/test-helpers/DatepickerInputObject.d.ts +8 -0
- package/dist-types/components/input-datepicker/test-helpers/DatepickerInputObject.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts +15 -5
- package/dist-types/components/input-datepicker/test-suites/LionInputDatepicker.suite.d.ts.map +1 -1
- package/dist-types/components/input-email/test/lion-input-email-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-email/test/lion-input-email.test.d.ts +1 -3
- package/dist-types/components/input-email/test/lion-input-email.test.d.ts.map +1 -1
- package/dist-types/components/input-email/test-suites/lion-input-email.suite.d.ts +15 -0
- package/dist-types/components/input-email/test-suites/lion-input-email.suite.d.ts.map +1 -0
- package/dist-types/components/input-file/test/lion-input-file.test.d.ts +1 -5
- package/dist-types/components/input-file/test/lion-input-file.test.d.ts.map +1 -1
- package/dist-types/components/input-file/test-suites/lion-input-file.suite.d.ts +19 -0
- package/dist-types/components/input-file/test-suites/lion-input-file.suite.d.ts.map +1 -0
- package/dist-types/components/input-iban/test/lion-input-iban-integrations.test.d.ts.map +1 -1
- package/dist-types/components/input-iban/test/lion-input-iban.test.d.ts +1 -3
- package/dist-types/components/input-iban/test/lion-input-iban.test.d.ts.map +1 -1
- package/dist-types/components/input-iban/test-suites/lion-input-iban.suite.d.ts +15 -0
- package/dist-types/components/input-iban/test-suites/lion-input-iban.suite.d.ts.map +1 -0
- package/dist-types/components/input-range/test/lion-input-range.test.d.ts +1 -3
- package/dist-types/components/input-range/test/lion-input-range.test.d.ts.map +1 -1
- package/dist-types/components/input-range/test-suites/lion-input-range.suite.d.ts +15 -0
- package/dist-types/components/input-range/test-suites/lion-input-range.suite.d.ts.map +1 -0
- package/dist-types/components/input-stepper/test-suites/lion-input-stepper.integration.suite.d.ts +10 -2
- package/dist-types/components/input-stepper/test-suites/lion-input-stepper.integration.suite.d.ts.map +1 -1
- package/dist-types/components/input-stepper/test-suites/lion-input-stepper.suite.d.ts +10 -2
- package/dist-types/components/input-stepper/test-suites/lion-input-stepper.suite.d.ts.map +1 -1
- package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts +6 -4
- package/dist-types/components/input-tel/test-suites/LionInputTel.suite.d.ts.map +1 -1
- package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.d.ts +7 -3
- package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown--parentheses.suite.d.ts.map +1 -1
- package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.d.ts +7 -3
- package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.d.ts.map +1 -1
- package/dist-types/components/listbox/test-suites/ListboxMixin.suite.d.ts +3 -4
- package/dist-types/components/listbox/test-suites/ListboxMixin.suite.d.ts.map +1 -1
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts +6 -5
- package/dist-types/components/menu/test-suites/InteractiveListMixin.suite.d.ts.map +1 -1
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts +6 -5
- package/dist-types/components/menu/test-suites/LionMenu.suite.d.ts.map +1 -1
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts +10 -4
- package/dist-types/components/menu/test-suites/LionMenuInteractions.suite.d.ts.map +1 -1
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts +6 -5
- package/dist-types/components/menu/test-suites/MoreButtonMenuMixin.suite.d.ts.map +1 -1
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts +7 -6
- package/dist-types/components/menu/test-suites/MultiLevelListMixin.suite.d.ts.map +1 -1
- package/dist-types/components/overlays/test-suites/OverlayMixin.suite.d.ts.map +1 -1
- package/dist-types/components/pagination/test/lion-pagination.test.d.ts +1 -3
- package/dist-types/components/pagination/test/lion-pagination.test.d.ts.map +1 -1
- package/dist-types/components/pagination/test-suites/LionPagination.suite.d.ts +18 -0
- package/dist-types/components/pagination/test-suites/LionPagination.suite.d.ts.map +1 -0
- package/dist-types/components/progress-indicator/test/lion-progress-indicator.test.d.ts +1 -3
- package/dist-types/components/progress-indicator/test/lion-progress-indicator.test.d.ts.map +1 -1
- package/dist-types/components/progress-indicator/test-suites/lion-progress-indicator.suite.d.ts +15 -0
- package/dist-types/components/progress-indicator/test-suites/lion-progress-indicator.suite.d.ts.map +1 -0
- package/dist-types/components/radio-group/test/lion-radio-group.test.d.ts +1 -5
- package/dist-types/components/radio-group/test/lion-radio-group.test.d.ts.map +1 -1
- package/dist-types/components/radio-group/test/lion-radio.test.d.ts +1 -2
- package/dist-types/components/radio-group/test/lion-radio.test.d.ts.map +1 -1
- package/dist-types/components/radio-group/test-suites/lion-radio-group.suite.d.ts +19 -0
- package/dist-types/components/radio-group/test-suites/lion-radio-group.suite.d.ts.map +1 -0
- package/dist-types/components/radio-group/test-suites/lion-radio.suite.d.ts +17 -0
- package/dist-types/components/radio-group/test-suites/lion-radio.suite.d.ts.map +1 -0
- package/dist-types/components/select/test/lion-select.test.d.ts +1 -2
- package/dist-types/components/select/test/lion-select.test.d.ts.map +1 -1
- package/dist-types/components/select/test-suites/LionSelect.suite.d.ts +16 -0
- package/dist-types/components/select/test-suites/LionSelect.suite.d.ts.map +1 -0
- package/dist-types/components/select-rich/test/lion-select-invoker.test.d.ts +1 -2
- package/dist-types/components/select-rich/test/lion-select-invoker.test.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts +1 -5
- 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.test.d.ts +1 -8
- package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts.map +1 -1
- package/dist-types/components/select-rich/test-suites/lion-select-invoker.suite.d.ts +19 -0
- package/dist-types/components/select-rich/test-suites/lion-select-invoker.suite.d.ts.map +1 -0
- package/dist-types/components/select-rich/test-suites/lion-select-rich-interaction.suite.d.ts +19 -0
- package/dist-types/components/select-rich/test-suites/lion-select-rich-interaction.suite.d.ts.map +1 -0
- package/dist-types/components/select-rich/test-suites/lion-select-rich.suite.d.ts +21 -0
- package/dist-types/components/select-rich/test-suites/lion-select-rich.suite.d.ts.map +1 -0
- package/dist-types/components/steps/test/lion-step.test.d.ts +1 -2
- package/dist-types/components/steps/test/lion-step.test.d.ts.map +1 -1
- package/dist-types/components/steps/test/lion-steps.test.d.ts +1 -8
- package/dist-types/components/steps/test/lion-steps.test.d.ts.map +1 -1
- package/dist-types/components/steps/test-suites/lion-step.suite.d.ts +17 -0
- package/dist-types/components/steps/test-suites/lion-step.suite.d.ts.map +1 -0
- package/dist-types/components/steps/test-suites/lion-steps.suite.d.ts +22 -0
- package/dist-types/components/steps/test-suites/lion-steps.suite.d.ts.map +1 -0
- package/dist-types/components/switch/test/lion-switch.test.d.ts +1 -4
- package/dist-types/components/switch/test/lion-switch.test.d.ts.map +1 -1
- package/dist-types/components/switch/test-suites/lion-switch.suite.d.ts +17 -0
- package/dist-types/components/switch/test-suites/lion-switch.suite.d.ts.map +1 -0
- package/dist-types/components/tabs/test/lion-tabs.test.d.ts +1 -5
- package/dist-types/components/tabs/test/lion-tabs.test.d.ts.map +1 -1
- package/dist-types/components/tabs/test-suites/lion-tabs.suite.d.ts +17 -0
- package/dist-types/components/tabs/test-suites/lion-tabs.suite.d.ts.map +1 -0
- package/dist-types/components/textarea/src/LionTextarea.d.ts.map +1 -1
- package/dist-types/components/textarea/test/lion-textarea.test.d.ts +1 -3
- package/dist-types/components/textarea/test/lion-textarea.test.d.ts.map +1 -1
- package/dist-types/components/textarea/test-suites/lion-textarea.suite.d.ts +15 -0
- package/dist-types/components/textarea/test-suites/lion-textarea.suite.d.ts.map +1 -0
- package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts +1 -3
- package/dist-types/components/tooltip/test/lion-tooltip.test.d.ts.map +1 -1
- package/dist-types/components/tooltip/test-suites/lion-tooltip.suite.d.ts +19 -0
- package/dist-types/components/tooltip/test-suites/lion-tooltip.suite.d.ts.map +1 -0
- package/dist-types/exports/accordion-test-suites.d.ts +2 -0
- package/dist-types/exports/accordion-test-suites.d.ts.map +1 -0
- package/dist-types/exports/collapsible-test-suites.d.ts +2 -0
- package/dist-types/exports/collapsible-test-suites.d.ts.map +1 -0
- package/dist-types/exports/combobox-test-suites.d.ts +2 -0
- package/dist-types/exports/combobox-test-suites.d.ts.map +1 -0
- package/dist-types/exports/dialog-test-suites.d.ts +2 -0
- package/dist-types/exports/dialog-test-suites.d.ts.map +1 -0
- package/dist-types/exports/drawer-test-suites.d.ts +2 -0
- package/dist-types/exports/drawer-test-suites.d.ts.map +1 -0
- package/dist-types/exports/form-test-suites.d.ts +2 -0
- package/dist-types/exports/form-test-suites.d.ts.map +1 -0
- package/dist-types/exports/icon-test-suites.d.ts +2 -0
- package/dist-types/exports/icon-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-amount-test-suites.d.ts +2 -0
- package/dist-types/exports/input-amount-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-date-test-suites.d.ts +2 -0
- package/dist-types/exports/input-date-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-email-test-suites.d.ts +2 -0
- package/dist-types/exports/input-email-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-file-test-suites.d.ts +2 -0
- package/dist-types/exports/input-file-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-iban-test-suites.d.ts +2 -0
- package/dist-types/exports/input-iban-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-range-test-suites.d.ts +2 -0
- package/dist-types/exports/input-range-test-suites.d.ts.map +1 -0
- package/dist-types/exports/input-stepper-suites.d.ts +7 -2
- package/dist-types/exports/input-stepper-suites.d.ts.map +1 -1
- package/dist-types/exports/input-test-suites.d.ts +2 -0
- package/dist-types/exports/input-test-suites.d.ts.map +1 -0
- package/dist-types/exports/menu-test-suites.d.ts.map +1 -1
- package/dist-types/exports/pagination-test-suites.d.ts +2 -0
- package/dist-types/exports/pagination-test-suites.d.ts.map +1 -0
- package/dist-types/exports/progress-indicator-test-suites.d.ts +2 -0
- package/dist-types/exports/progress-indicator-test-suites.d.ts.map +1 -0
- package/dist-types/exports/radio-group-test-suites.d.ts +3 -0
- package/dist-types/exports/radio-group-test-suites.d.ts.map +1 -0
- package/dist-types/exports/select-rich-test-suites.d.ts +4 -0
- package/dist-types/exports/select-rich-test-suites.d.ts.map +1 -0
- package/dist-types/exports/select-test-suites.d.ts +2 -0
- package/dist-types/exports/select-test-suites.d.ts.map +1 -0
- package/dist-types/exports/steps-test-suites.d.ts +3 -0
- package/dist-types/exports/steps-test-suites.d.ts.map +1 -0
- package/dist-types/exports/switch-test-suites.d.ts +2 -0
- package/dist-types/exports/switch-test-suites.d.ts.map +1 -0
- package/dist-types/exports/tabs-test-suites.d.ts +2 -0
- package/dist-types/exports/tabs-test-suites.d.ts.map +1 -0
- package/dist-types/exports/textarea-test-suites.d.ts +2 -0
- package/dist-types/exports/textarea-test-suites.d.ts.map +1 -0
- package/dist-types/exports/tooltip-test-suites.d.ts +2 -0
- package/dist-types/exports/tooltip-test-suites.d.ts.map +1 -0
- package/dist-types/exports/types/test-suites.d.ts +4 -0
- package/dist-types/exports/types/test-suites.d.ts.map +1 -0
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/drawer-test-suites.js +1 -0
- package/exports/accordion-test-suites.js +2 -0
- package/exports/collapsible-test-suites.js +1 -0
- package/exports/combobox-test-suites.js +2 -0
- package/exports/dialog-test-suites.js +2 -0
- package/exports/drawer-test-suites.js +1 -0
- package/exports/form-test-suites.js +2 -0
- package/exports/icon-test-suites.js +2 -0
- package/exports/input-amount-test-suites.js +2 -0
- package/exports/input-date-test-suites.js +2 -0
- package/exports/input-email-test-suites.js +2 -0
- package/exports/input-file-test-suites.js +2 -0
- package/exports/input-iban-test-suites.js +2 -0
- package/exports/input-range-test-suites.js +2 -0
- package/exports/input-stepper-suites.js +18 -4
- package/exports/input-test-suites.js +2 -0
- package/exports/menu-test-suites.js +3 -0
- package/exports/pagination-test-suites.js +1 -0
- package/exports/progress-indicator-test-suites.js +2 -0
- package/exports/radio-group-test-suites.js +3 -0
- package/exports/select-rich-test-suites.js +4 -0
- package/exports/select-test-suites.js +1 -0
- package/exports/steps-test-suites.js +3 -0
- package/exports/switch-test-suites.js +2 -0
- package/exports/tabs-test-suites.js +2 -0
- package/exports/textarea-test-suites.js +2 -0
- package/exports/tooltip-test-suites.js +2 -0
- package/exports/types/test-suites.ts +3 -0
- package/form-test-suites.js +2 -0
- package/generated/awesome-phonenumber/provenance.json +1 -1
- package/icon-test-suites.js +2 -0
- package/input-amount-test-suites.js +2 -0
- package/input-date-test-suites.js +2 -0
- package/input-email-test-suites.js +2 -0
- package/input-file-test-suites.js +2 -0
- package/input-iban-test-suites.js +2 -0
- package/input-range-test-suites.js +2 -0
- package/input-stepper-suites.js +18 -4
- package/input-test-suites.js +2 -0
- package/menu-test-suites.js +3 -0
- package/package.json +4 -1
- package/pagination-test-suites.js +1 -0
- package/progress-indicator-test-suites.js +2 -0
- package/radio-group-test-suites.js +3 -0
- package/select-rich-test-suites.js +4 -0
- package/select-test-suites.js +1 -0
- package/steps-test-suites.js +3 -0
- package/switch-test-suites.js +2 -0
- package/tabs-test-suites.js +2 -0
- package/textarea-test-suites.js +2 -0
- package/tooltip-test-suites.js +2 -0
- package/vscode.html-custom-data.json +55 -0
- package/web-types.json +219 -1
- package/components/button/test/demos.screenshots-test.js +0 -100
- package/components/calendar/test/demos.screenshots-test.js +0 -118
- package/components/input-file/test/lion-selected-file-list.test.js +0 -199
- package/components/select-rich/test/demos.screenshots-test.js +0 -168
- package/components/switch/test/lion-switch-button.test.js +0 -204
- package/dist-types/components/button/test/demos.screenshots-test.d.ts +0 -2
- package/dist-types/components/button/test/demos.screenshots-test.d.ts.map +0 -1
- package/dist-types/components/calendar/test/demos.screenshots-test.d.ts +0 -2
- package/dist-types/components/calendar/test/demos.screenshots-test.d.ts.map +0 -1
- package/dist-types/components/input-file/test/lion-selected-file-list.test.d.ts +0 -5
- package/dist-types/components/input-file/test/lion-selected-file-list.test.d.ts.map +0 -1
- package/dist-types/components/select-rich/test/demos.screenshots-test.d.ts +0 -2
- package/dist-types/components/select-rich/test/demos.screenshots-test.d.ts.map +0 -1
- package/dist-types/components/switch/test/lion-switch-button.test.d.ts +0 -4
- package/dist-types/components/switch/test/lion-switch-button.test.d.ts.map +0 -1
- package/docs/components/accordion/api-table.md +0 -53
- package/docs/components/accordion/index.md +0 -13
- package/docs/components/accordion/overview.md +0 -141
- package/docs/components/accordion/reference.md +0 -59
- package/docs/components/accordion/use-cases.md +0 -303
- package/docs/components/button/api-table.md +0 -84
- package/docs/components/button/assets/bootstrap-button.js +0 -245
- package/docs/components/button/examples.md +0 -42
- package/docs/components/button/extensions.md +0 -42
- package/docs/components/button/index.md +0 -13
- package/docs/components/button/overview.md +0 -42
- package/docs/components/button/src/icon.svg.js +0 -5
- package/docs/components/button/use-cases.md +0 -121
- package/docs/components/calendar/api-table.md +0 -56
- package/docs/components/calendar/index.md +0 -13
- package/docs/components/calendar/overview.md +0 -61
- package/docs/components/calendar/use-cases.md +0 -243
- package/docs/components/checkbox-group/api-table.md +0 -117
- package/docs/components/checkbox-group/index.md +0 -13
- package/docs/components/checkbox-group/overview.md +0 -51
- package/docs/components/checkbox-group/use-cases.md +0 -192
- package/docs/components/collapsible/api-table.md +0 -55
- package/docs/components/collapsible/assets/CustomCollapsible.js +0 -117
- package/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js +0 -41
- package/docs/components/collapsible/examples.md +0 -95
- package/docs/components/collapsible/index.md +0 -13
- package/docs/components/collapsible/overview.md +0 -51
- package/docs/components/collapsible/use-cases.md +0 -91
- package/docs/components/combobox/api-table.md +0 -122
- package/docs/components/combobox/extensions.md +0 -174
- package/docs/components/combobox/index.md +0 -13
- package/docs/components/combobox/overview.md +0 -74
- package/docs/components/combobox/src/LinkMixin.js +0 -60
- package/docs/components/combobox/src/demo-selection-display.js +0 -164
- package/docs/components/combobox/src/gh-combobox/gh-button.js +0 -71
- package/docs/components/combobox/src/gh-combobox/gh-combobox.js +0 -515
- package/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js +0 -9
- package/docs/components/combobox/src/google-combobox/assets/google-search-icon.js +0 -9
- package/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js +0 -19
- package/docs/components/combobox/src/google-combobox/google-combobox.js +0 -461
- package/docs/components/combobox/src/lazyRender.js +0 -29
- package/docs/components/combobox/src/levenshtein.js +0 -95
- package/docs/components/combobox/src/md-combobox/MdFieldMixin.js +0 -345
- package/docs/components/combobox/src/md-combobox/md-combobox.js +0 -91
- package/docs/components/combobox/src/md-combobox/md-input.js +0 -5
- package/docs/components/combobox/src/md-combobox/style/load-roboto.js +0 -6
- package/docs/components/combobox/src/md-combobox/style/md-ripple.js +0 -82
- package/docs/components/combobox/src/wa-combobox/wa-combobox.js +0 -375
- package/docs/components/combobox/use-cases.md +0 -561
- package/docs/components/dialog/api-table.md +0 -61
- package/docs/components/dialog/index.md +0 -13
- package/docs/components/dialog/overview.md +0 -71
- package/docs/components/dialog/src/demoStyle.js +0 -57
- package/docs/components/dialog/src/external-dialog.js +0 -32
- package/docs/components/dialog/src/slots-dialog-content.js +0 -32
- package/docs/components/dialog/src/styled-dialog-content.js +0 -38
- package/docs/components/dialog/use-cases.md +0 -199
- package/docs/components/drawer/api-table.md +0 -64
- package/docs/components/drawer/index.md +0 -13
- package/docs/components/drawer/overview.md +0 -80
- package/docs/components/drawer/src/demoStyle.js +0 -71
- package/docs/components/drawer/use-cases.md +0 -206
- package/docs/components/fieldset/api-table.md +0 -24
- package/docs/components/fieldset/index.md +0 -13
- package/docs/components/fieldset/overview.md +0 -61
- package/docs/components/fieldset/use-cases.md +0 -203
- package/docs/components/form/api-table.md +0 -12
- package/docs/components/form/index.md +0 -13
- package/docs/components/form/overview.md +0 -66
- package/docs/components/form/use-cases.md +0 -230
- package/docs/components/icon/api-table.md +0 -41
- package/docs/components/icon/assets/bugs/bug01.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug02.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug05.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug06.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug08.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug12.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug19.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug23.svg.js +0 -2
- package/docs/components/icon/assets/bugs/bug24.svg.js +0 -2
- package/docs/components/icon/assets/iconset-bugs.js +0 -11
- package/docs/components/icon/assets/iconset-misc.js +0 -3
- package/docs/components/icon/assets/iconset-space.js +0 -31
- package/docs/components/icon/assets/misc/arrowLeft.svg.js +0 -6
- package/docs/components/icon/assets/space/aliens-spaceship.svg.js +0 -2
- package/docs/components/icon/assets/space/meteor.svg.js +0 -2
- package/docs/components/icon/assets/space/moon-flag.svg.js +0 -2
- package/docs/components/icon/assets/space/moon.svg.js +0 -2
- package/docs/components/icon/assets/space/night.svg.js +0 -2
- package/docs/components/icon/assets/space/orbit.svg.js +0 -2
- package/docs/components/icon/assets/space/planet.svg.js +0 -2
- package/docs/components/icon/assets/space/robot.svg.js +0 -2
- package/docs/components/icon/assets/space/rocket.svg.js +0 -2
- package/docs/components/icon/assets/space/satellite.svg.js +0 -2
- package/docs/components/icon/assets/space/signal.svg.js +0 -2
- package/docs/components/icon/assets/space/space-helmet.svg.js +0 -2
- package/docs/components/icon/assets/space/sun.svg.js +0 -2
- package/docs/components/icon/assets/space/telescope.svg.js +0 -2
- package/docs/components/icon/index.md +0 -13
- package/docs/components/icon/overview.md +0 -52
- package/docs/components/icon/use-cases.md +0 -92
- package/docs/components/index.md +0 -17
- package/docs/components/input/api-table.md +0 -52
- package/docs/components/input/index.md +0 -13
- package/docs/components/input/overview.md +0 -48
- package/docs/components/input/use-cases.md +0 -90
- package/docs/components/input-amount/api-table.md +0 -66
- package/docs/components/input-amount/index.md +0 -13
- package/docs/components/input-amount/overview.md +0 -61
- package/docs/components/input-amount/use-cases.md +0 -147
- package/docs/components/input-amount-dropdown/api-table.md +0 -87
- package/docs/components/input-amount-dropdown/index.md +0 -13
- package/docs/components/input-amount-dropdown/use-cases.md +0 -103
- package/docs/components/input-date/api-table.md +0 -58
- package/docs/components/input-date/index.md +0 -13
- package/docs/components/input-date/overview.md +0 -51
- package/docs/components/input-date/use-cases.md +0 -96
- package/docs/components/input-datepicker/api-table.md +0 -99
- package/docs/components/input-datepicker/index.md +0 -13
- package/docs/components/input-datepicker/overview.md +0 -54
- package/docs/components/input-datepicker/use-cases.md +0 -117
- package/docs/components/input-email/api-table.md +0 -53
- package/docs/components/input-email/index.md +0 -13
- package/docs/components/input-email/overview.md +0 -44
- package/docs/components/input-email/use-cases.md +0 -60
- package/docs/components/input-file/api-table.md +0 -157
- package/docs/components/input-file/index.md +0 -13
- package/docs/components/input-file/overview.md +0 -44
- package/docs/components/input-file/use-cases.md +0 -454
- package/docs/components/input-iban/api-table.md +0 -54
- package/docs/components/input-iban/index.md +0 -13
- package/docs/components/input-iban/overview.md +0 -49
- package/docs/components/input-iban/use-cases.md +0 -114
- package/docs/components/input-range/api-table.md +0 -71
- package/docs/components/input-range/index.md +0 -13
- package/docs/components/input-range/overview.md +0 -44
- package/docs/components/input-range/use-cases.md +0 -126
- package/docs/components/input-stepper/api-table.md +0 -74
- package/docs/components/input-stepper/index.md +0 -13
- package/docs/components/input-stepper/overview.md +0 -48
- package/docs/components/input-stepper/use-cases.md +0 -155
- package/docs/components/input-tel/api-table.md +0 -77
- package/docs/components/input-tel/index.md +0 -13
- package/docs/components/input-tel/overview.md +0 -74
- package/docs/components/input-tel/src/h-region-code-table.js +0 -109
- package/docs/components/input-tel/use-cases.md +0 -319
- package/docs/components/input-tel-dropdown/api-table.md +0 -85
- package/docs/components/input-tel-dropdown/extensions.md +0 -44
- package/docs/components/input-tel-dropdown/index.md +0 -13
- package/docs/components/input-tel-dropdown/overview.md +0 -50
- package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +0 -138
- package/docs/components/input-tel-dropdown/use-cases.md +0 -171
- package/docs/components/listbox/api-table.md +0 -65
- package/docs/components/listbox/index.md +0 -13
- package/docs/components/listbox/overview.md +0 -54
- package/docs/components/listbox/src/listboxData.js +0 -131
- package/docs/components/listbox/use-cases.md +0 -154
- package/docs/components/menu/api-table.md +0 -44
- package/docs/components/menu/applyMenuDemoStyles.js +0 -173
- package/docs/components/menu/extensions.md +0 -262
- package/docs/components/menu/index.md +0 -13
- package/docs/components/menu/migration.md +0 -129
- package/docs/components/menu/overview.md +0 -448
- package/docs/components/menu/src/DemoNavigationBar.js +0 -441
- package/docs/components/menu/src/DemoSpinButton.js +0 -215
- package/docs/components/menu/src/DemoToolbar.js +0 -101
- package/docs/components/menu/src/DemoTree.js +0 -55
- package/docs/components/menu/src/navigation-bar-types.js +0 -41
- package/docs/components/menu/use-cases.md +0 -74
- package/docs/components/pagination/api-table.md +0 -45
- package/docs/components/pagination/index.md +0 -13
- package/docs/components/pagination/overview.md +0 -41
- package/docs/components/pagination/use-cases.md +0 -113
- package/docs/components/progress-indicator/api-table.md +0 -48
- package/docs/components/progress-indicator/assets/my-determinate-progress-bar.js +0 -30
- package/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js +0 -55
- package/docs/components/progress-indicator/examples.md +0 -137
- package/docs/components/progress-indicator/index.md +0 -13
- package/docs/components/progress-indicator/overview.md +0 -48
- package/docs/components/radio-group/api-table.md +0 -63
- package/docs/components/radio-group/index.md +0 -13
- package/docs/components/radio-group/overview.md +0 -58
- package/docs/components/radio-group/use-cases.md +0 -146
- package/docs/components/select/api-table.md +0 -51
- package/docs/components/select/index.md +0 -13
- package/docs/components/select/overview.md +0 -56
- package/docs/components/select/use-cases.md +0 -128
- package/docs/components/select-rich/api-table.md +0 -123
- package/docs/components/select-rich/examples.md +0 -43
- package/docs/components/select-rich/index.md +0 -13
- package/docs/components/select-rich/overview.md +0 -55
- package/docs/components/select-rich/src/flagStyles.js +0 -1250
- package/docs/components/select-rich/src/intl-select-rich.js +0 -194
- package/docs/components/select-rich/src/regionMetaList.js +0 -1717
- package/docs/components/select-rich/use-cases.md +0 -387
- package/docs/components/steps/api-table.md +0 -92
- package/docs/components/steps/index.md +0 -13
- package/docs/components/steps/overview.md +0 -77
- package/docs/components/steps/use-cases.md +0 -181
- package/docs/components/switch/api-table.md +0 -82
- package/docs/components/switch/index.md +0 -13
- package/docs/components/switch/overview.md +0 -87
- package/docs/components/switch/reference.md +0 -51
- package/docs/components/switch/use-cases.md +0 -88
- package/docs/components/tabs/api-table.md +0 -51
- package/docs/components/tabs/examples.md +0 -35
- package/docs/components/tabs/index.md +0 -13
- package/docs/components/tabs/overview.md +0 -60
- package/docs/components/tabs/src/lea-tab-panel.js +0 -26
- package/docs/components/tabs/src/lea-tab.js +0 -50
- package/docs/components/tabs/src/lea-tabs.js +0 -28
- package/docs/components/tabs/use-cases.md +0 -231
- package/docs/components/textarea/api-table.md +0 -57
- package/docs/components/textarea/index.md +0 -13
- package/docs/components/textarea/overview.md +0 -47
- package/docs/components/textarea/use-cases.md +0 -107
- package/docs/components/tooltip/api-table.md +0 -62
- package/docs/components/tooltip/examples.md +0 -51
- package/docs/components/tooltip/index.md +0 -13
- package/docs/components/tooltip/overview.md +0 -56
- package/docs/components/tooltip/use-cases.md +0 -275
- package/docs/fundamentals/index.md +0 -19
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +0 -13
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +0 -246
- package/docs/fundamentals/node-tools/index.md +0 -11
- package/docs/fundamentals/node-tools/providence-analytics/index.md +0 -13
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +0 -108
- package/docs/fundamentals/node-tools/publish-docs/index.md +0 -13
- package/docs/fundamentals/node-tools/publish-docs/overview.md +0 -149
- package/docs/fundamentals/node-tools/remark-extend/index.md +0 -13
- package/docs/fundamentals/node-tools/remark-extend/overview.md +0 -287
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +0 -13
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +0 -298
- package/docs/fundamentals/rationales/TypeScript.md +0 -123
- package/docs/fundamentals/rationales/accessibility.md +0 -40
- package/docs/fundamentals/rationales/index.md +0 -11
- package/docs/fundamentals/rationales/side-effects.md +0 -215
- package/docs/fundamentals/rationales/versioning.md +0 -47
- package/docs/fundamentals/systems/core/SlotMixin.md +0 -168
- package/docs/fundamentals/systems/core/api-table.md +0 -43
- package/docs/fundamentals/systems/core/index.md +0 -15
- package/docs/fundamentals/systems/core/overview.md +0 -98
- package/docs/fundamentals/systems/form/api-table.md +0 -40
- package/docs/fundamentals/systems/form/assets/h-output.js +0 -156
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +0 -258
- package/docs/fundamentals/systems/form/index.md +0 -15
- package/docs/fundamentals/systems/form/interaction-states.md +0 -195
- package/docs/fundamentals/systems/form/model-value.md +0 -57
- package/docs/fundamentals/systems/form/overview.md +0 -95
- package/docs/fundamentals/systems/form/styling.md +0 -92
- package/docs/fundamentals/systems/form/use-cases.md +0 -187
- package/docs/fundamentals/systems/form/validate.md +0 -985
- package/docs/fundamentals/systems/icon/index.md +0 -15
- package/docs/fundamentals/systems/icon/overview.md +0 -137
- package/docs/fundamentals/systems/index.md +0 -11
- package/docs/fundamentals/systems/localize/api-table.md +0 -72
- package/docs/fundamentals/systems/localize/assets/all-locales.js +0 -437
- package/docs/fundamentals/systems/localize/assets/en-AU.js +0 -6
- package/docs/fundamentals/systems/localize/assets/en-GB.js +0 -6
- package/docs/fundamentals/systems/localize/assets/en-US.js +0 -6
- package/docs/fundamentals/systems/localize/assets/en.js +0 -4
- package/docs/fundamentals/systems/localize/assets/nl-BE.js +0 -6
- package/docs/fundamentals/systems/localize/assets/nl-NL.js +0 -6
- package/docs/fundamentals/systems/localize/assets/nl.js +0 -4
- package/docs/fundamentals/systems/localize/dates.md +0 -208
- package/docs/fundamentals/systems/localize/index.md +0 -15
- package/docs/fundamentals/systems/localize/numbers.md +0 -230
- package/docs/fundamentals/systems/localize/overview.md +0 -61
- package/docs/fundamentals/systems/localize/rationale.md +0 -75
- package/docs/fundamentals/systems/localize/text.md +0 -139
- package/docs/fundamentals/systems/localize/use-cases.md +0 -334
- package/docs/fundamentals/systems/overlays/_configuration-positioning.md +0 -118
- package/docs/fundamentals/systems/overlays/_edge-cases.md +0 -149
- package/docs/fundamentals/systems/overlays/api-table.md +0 -174
- package/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js +0 -23
- package/docs/fundamentals/systems/overlays/assets/demo-el-using-overlaymixin.js +0 -104
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js +0 -47
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-positioning.mjs +0 -537
- package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +0 -140
- package/docs/fundamentals/systems/overlays/configuration.md +0 -516
- package/docs/fundamentals/systems/overlays/index.md +0 -15
- package/docs/fundamentals/systems/overlays/overview.md +0 -126
- package/docs/fundamentals/systems/overlays/rationale.md +0 -242
- package/docs/fundamentals/systems/overlays/use-cases.md +0 -717
- package/docs/fundamentals/tools/ajax/index.md +0 -15
- package/docs/fundamentals/tools/ajax/overview.md +0 -269
- package/docs/fundamentals/tools/ajax/use-cases.md +0 -469
- package/docs/fundamentals/tools/helpers/action-logger.md +0 -175
- package/docs/fundamentals/tools/helpers/index.md +0 -15
- package/docs/fundamentals/tools/helpers/overview.md +0 -43
- package/docs/fundamentals/tools/index.md +0 -11
- package/docs/fundamentals/tools/singleton-manager/example-complex/demo-app.js +0 -95
- package/docs/fundamentals/tools/singleton-manager/example-complex/index.md +0 -34
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/overlays/instance.js +0 -4
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-a/page-a.js +0 -35
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/node_modules/overlays/instance.js +0 -4
- package/docs/fundamentals/tools/singleton-manager/example-complex/node_modules/page-b/page-b.js +0 -49
- package/docs/fundamentals/tools/singleton-manager/example-complex/overlayCompatibility.js +0 -69
- package/docs/fundamentals/tools/singleton-manager/example-fail/demo-app.js +0 -93
- package/docs/fundamentals/tools/singleton-manager/example-fail/index.md +0 -32
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/overlays/instance.js +0 -3
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-c/page-c.js +0 -34
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/node_modules/overlays/instance.js +0 -3
- package/docs/fundamentals/tools/singleton-manager/example-fail/node_modules/page-d/page-d.js +0 -34
- package/docs/fundamentals/tools/singleton-manager/example-success/demo-app.js +0 -95
- package/docs/fundamentals/tools/singleton-manager/example-success/index.md +0 -31
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/overlays/instance.js +0 -4
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-e/page-e.js +0 -33
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/node_modules/overlays/index.js +0 -30
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/node_modules/overlays/instance.js +0 -4
- package/docs/fundamentals/tools/singleton-manager/example-success/node_modules/page-f/page-f.js +0 -34
- package/docs/fundamentals/tools/singleton-manager/example-success/overlayCompatibility.js +0 -23
- package/docs/fundamentals/tools/singleton-manager/index.md +0 -15
- package/docs/fundamentals/tools/singleton-manager/overview.md +0 -317
- package/docs/guides/how-to/create-a-custom-field.md +0 -212
- package/docs/guides/how-to/create-a-form.md +0 -101
- package/docs/guides/how-to/extend-a-native-input.md +0 -78
- package/docs/guides/how-to/get-started.md +0 -116
- package/docs/guides/how-to/index.md +0 -25
- package/docs/guides/index.md +0 -44
- package/docs/guides/principles/definitions-and-terms.md +0 -53
- package/docs/guides/principles/index.md +0 -36
- package/docs/guides/principles/scoped-elements.md +0 -119
- package/docs/guides/principles/styling.md +0 -43
- package/docs/guides/principles/subclasser-apis.md +0 -40
|
@@ -1,1571 +1,2 @@
|
|
|
1
|
-
import { html } from 'lit';
|
|
2
|
-
import { getLocalizeManager } from '@lion/ui/localize-no-side-effects.js';
|
|
3
|
-
import { localizeTearDown } from '@lion/ui/localize-test-helpers.js';
|
|
4
|
-
import { expect, fixture as _fixture } from '@open-wc/testing';
|
|
5
|
-
import sinon from 'sinon';
|
|
6
|
-
import '@lion/ui/define/lion-calendar.js';
|
|
7
|
-
import { sendKeys } from '@web/test-runner-commands';
|
|
8
|
-
import { isSameDate } from '@lion/ui/calendar.js';
|
|
9
|
-
import { CalendarObject, DayObject } from '@lion/ui/calendar-test-helpers.js';
|
|
10
1
|
import { runCalendarSuite } from '../test-suites/LionCalendar.suite.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @typedef {import('../src/LionCalendar.js').LionCalendar} LionCalendar
|
|
14
|
-
* @typedef {import('lit').TemplateResult} TemplateResult
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
const fixture = /** @type {(arg: TemplateResult) => Promise<LionCalendar>} */ _fixture;
|
|
18
|
-
/**
|
|
19
|
-
* @param {HTMLElement} el
|
|
20
|
-
* @returns {HTMLElement | null | undefined}
|
|
21
|
-
*/
|
|
22
|
-
const getSelectedDateEl = (el) => el?.shadowRoot?.querySelector('.calendar__day-button[selected]');
|
|
23
|
-
/**
|
|
24
|
-
* @param {HTMLElement} el
|
|
25
|
-
* @returns {void}
|
|
26
|
-
*/
|
|
27
|
-
const focusSelectedDate = (el) => getSelectedDateEl(el)?.focus();
|
|
28
|
-
describe('<lion-calendar>', () => {
|
|
29
|
-
const localizeManager = getLocalizeManager();
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
localizeTearDown();
|
|
32
|
-
});
|
|
33
|
-
describe('Structure', () => {
|
|
34
|
-
it('implements BEM structure', async () => {
|
|
35
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
36
|
-
expect(el.shadowRoot?.querySelector('.calendar')).to.exist;
|
|
37
|
-
expect(el.shadowRoot?.querySelector('.calendar__navigation')).to.exist;
|
|
38
|
-
expect(el.shadowRoot?.querySelector('.calendar__previous-button')).to.exist;
|
|
39
|
-
expect(el.shadowRoot?.querySelector('.calendar__next-button')).to.exist;
|
|
40
|
-
expect(el.shadowRoot?.querySelector('.calendar__navigation-heading')).to.exist;
|
|
41
|
-
expect(el.shadowRoot?.querySelector('.calendar__grid')).to.exist;
|
|
42
|
-
});
|
|
43
|
-
it('has heading with month and year', async () => {
|
|
44
|
-
const clock = sinon.useFakeTimers({
|
|
45
|
-
now: new Date('2000/12/01').getTime(),
|
|
46
|
-
});
|
|
47
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
48
|
-
expect(el.shadowRoot?.querySelector('#year')).dom.to.equal(`
|
|
49
|
-
<h2
|
|
50
|
-
id="year"
|
|
51
|
-
class="calendar__navigation-heading"
|
|
52
|
-
aria-atomic="true"
|
|
53
|
-
>
|
|
54
|
-
2000
|
|
55
|
-
</h2>
|
|
56
|
-
`);
|
|
57
|
-
expect(el.shadowRoot?.querySelector('#month')).dom.to.equal(`
|
|
58
|
-
<h2
|
|
59
|
-
id="month"
|
|
60
|
-
class="calendar__navigation-heading"
|
|
61
|
-
aria-atomic="true"
|
|
62
|
-
>
|
|
63
|
-
December
|
|
64
|
-
</h2>
|
|
65
|
-
`);
|
|
66
|
-
clock.restore();
|
|
67
|
-
});
|
|
68
|
-
it('has previous year button', async () => {
|
|
69
|
-
const el = await fixture(
|
|
70
|
-
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
71
|
-
);
|
|
72
|
-
expect(el.shadowRoot?.querySelectorAll('.calendar__previous-button')[0]).dom.to.equal(`
|
|
73
|
-
<button class="calendar__previous-button" aria-label="Previous year, November 2018" title="Previous year, November 2018"><</button>
|
|
74
|
-
`);
|
|
75
|
-
});
|
|
76
|
-
it('has next year button', async () => {
|
|
77
|
-
const el = await fixture(
|
|
78
|
-
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
79
|
-
);
|
|
80
|
-
expect(el.shadowRoot?.querySelectorAll('.calendar__next-button')[0]).dom.to.equal(`
|
|
81
|
-
<button class="calendar__next-button" aria-label="Next year, November 2020" title="Next year, November 2020">></button>
|
|
82
|
-
`);
|
|
83
|
-
});
|
|
84
|
-
it('has previous month button', async () => {
|
|
85
|
-
const el = await fixture(
|
|
86
|
-
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
87
|
-
);
|
|
88
|
-
expect(el.shadowRoot?.querySelectorAll('.calendar__previous-button')[1]).dom.to.equal(`
|
|
89
|
-
<button class="calendar__previous-button" aria-label="Previous month, October 2019" title="Previous month, October 2019"><</button>
|
|
90
|
-
`);
|
|
91
|
-
});
|
|
92
|
-
it('has next month button', async () => {
|
|
93
|
-
const el = await fixture(
|
|
94
|
-
html`<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>`,
|
|
95
|
-
);
|
|
96
|
-
expect(el.shadowRoot?.querySelectorAll('.calendar__next-button')[1]).dom.to.equal(`
|
|
97
|
-
<button class="calendar__next-button" aria-label="Next month, December 2019" title="Next month, December 2019">></button>
|
|
98
|
-
`);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('Public API', () => {
|
|
102
|
-
it('has property "centralDate" that determines currently visible month', async () => {
|
|
103
|
-
const elObj = new CalendarObject(
|
|
104
|
-
await fixture(html`
|
|
105
|
-
<lion-calendar .centralDate="${new Date('2014/05/15')}"></lion-calendar>
|
|
106
|
-
`),
|
|
107
|
-
);
|
|
108
|
-
expect(elObj.activeMonth).to.equal('May');
|
|
109
|
-
expect(elObj.activeYear).to.equal('2014');
|
|
110
|
-
});
|
|
111
|
-
it('sets "centralDate" to today by default', async () => {
|
|
112
|
-
const clock = sinon.useFakeTimers({
|
|
113
|
-
now: new Date('2013/03/15').getTime(),
|
|
114
|
-
});
|
|
115
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
116
|
-
const elObj = new CalendarObject(el);
|
|
117
|
-
expect(isSameDate(el.centralDate, new Date())).to.be.true;
|
|
118
|
-
expect(elObj.activeMonth).to.equal('March');
|
|
119
|
-
expect(elObj.activeYear).to.equal('2013');
|
|
120
|
-
clock.restore();
|
|
121
|
-
});
|
|
122
|
-
it('determines the date focusable with keyboard from "centralDate"', async () => {
|
|
123
|
-
const elObj = new CalendarObject(
|
|
124
|
-
await fixture(html`
|
|
125
|
-
<lion-calendar .centralDate="${new Date('2017/07/05')}"></lion-calendar>
|
|
126
|
-
`),
|
|
127
|
-
);
|
|
128
|
-
expect(
|
|
129
|
-
elObj.checkForAllDayObjs(
|
|
130
|
-
/** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '0',
|
|
131
|
-
/** @param {number} n */ (n) => n === 5,
|
|
132
|
-
),
|
|
133
|
-
).to.be.true;
|
|
134
|
-
expect(
|
|
135
|
-
elObj.checkForAllDayObjs(
|
|
136
|
-
/** @param {DayObject} o */ (o) => o.buttonEl.getAttribute('tabindex') === '-1',
|
|
137
|
-
/** @param {number} n */ (n) => n !== 5,
|
|
138
|
-
),
|
|
139
|
-
).to.be.true;
|
|
140
|
-
});
|
|
141
|
-
it('has property "selectedDate" for the selected date', async () => {
|
|
142
|
-
const el = await fixture(html`
|
|
143
|
-
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
144
|
-
`);
|
|
145
|
-
const elObj = new CalendarObject(el);
|
|
146
|
-
expect(elObj.getDayObj(15).isSelected).to.equal(true);
|
|
147
|
-
expect(elObj.getDayObj(16).isSelected).to.equal(false);
|
|
148
|
-
expect(elObj.getDayObj(14).isSelected).to.equal(false);
|
|
149
|
-
el.selectedDate = new Date('2019/06/16');
|
|
150
|
-
await el.updateComplete;
|
|
151
|
-
expect(elObj.getDayObj(15).isSelected).to.equal(false);
|
|
152
|
-
});
|
|
153
|
-
it('gives priority to "centralDate" to display the month when "selectedDate" is also defined', async () => {
|
|
154
|
-
const elObj = new CalendarObject(
|
|
155
|
-
await fixture(html`
|
|
156
|
-
<lion-calendar
|
|
157
|
-
.centralDate="${new Date('2018/06/01')}"
|
|
158
|
-
.selectedDate="${new Date('2018/07/15')}"
|
|
159
|
-
></lion-calendar>
|
|
160
|
-
`),
|
|
161
|
-
);
|
|
162
|
-
expect(elObj.activeMonth).to.equal('June');
|
|
163
|
-
expect(elObj.activeYear).to.equal('2018');
|
|
164
|
-
});
|
|
165
|
-
it('changes "centralDate" from default to "selectedDate" on first render if no other custom "centralDate" is provided', async () => {
|
|
166
|
-
const clock = sinon.useFakeTimers({
|
|
167
|
-
now: new Date('2010/01/01').getTime(),
|
|
168
|
-
});
|
|
169
|
-
const el = await fixture(html`
|
|
170
|
-
<lion-calendar .selectedDate="${new Date('2016/10/20')}"></lion-calendar>
|
|
171
|
-
`);
|
|
172
|
-
const elObj = new CalendarObject(el);
|
|
173
|
-
expect(isSameDate(el.centralDate, new Date('2016/10/20'))).to.be.true;
|
|
174
|
-
expect(elObj.activeMonth).to.equal('October');
|
|
175
|
-
expect(elObj.activeYear).to.equal('2016');
|
|
176
|
-
clock.restore();
|
|
177
|
-
});
|
|
178
|
-
it('does not change "centralDate" to "selectedDate" when new date is provided programmatically', async () => {
|
|
179
|
-
const el = await fixture(html`
|
|
180
|
-
<lion-calendar
|
|
181
|
-
.centralDate="${new Date('2018/06/01')}"
|
|
182
|
-
.selectedDate="${new Date('2018/06/02')}"
|
|
183
|
-
></lion-calendar>
|
|
184
|
-
`);
|
|
185
|
-
expect(isSameDate(el.centralDate, new Date('2018/06/01'))).to.be.true;
|
|
186
|
-
el.selectedDate = new Date('2018/06/03');
|
|
187
|
-
await el.updateComplete;
|
|
188
|
-
expect(isSameDate(el.centralDate, new Date('2018/06/01'))).to.be.true;
|
|
189
|
-
});
|
|
190
|
-
it('does not set "selectedDate" by default', async () => {
|
|
191
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
192
|
-
const elObj = new CalendarObject(el);
|
|
193
|
-
const today = new Date();
|
|
194
|
-
expect(el.selectedDate).to.equal(undefined);
|
|
195
|
-
expect(elObj.getDayObj(today.getDate()).isSelected).to.equal(false);
|
|
196
|
-
});
|
|
197
|
-
it('allows to reset "selectedDate"', async () => {
|
|
198
|
-
const el = await fixture(html`
|
|
199
|
-
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
200
|
-
`);
|
|
201
|
-
const elObj = new CalendarObject(el);
|
|
202
|
-
el.selectedDate = undefined;
|
|
203
|
-
await el.updateComplete;
|
|
204
|
-
expect(elObj.selectedDayObj).to.be.undefined;
|
|
205
|
-
});
|
|
206
|
-
it('recalculates "centralDate" when "selectedDate" is reset', async () => {
|
|
207
|
-
const el = await fixture(html`
|
|
208
|
-
<lion-calendar .selectedDate="${new Date('2019/06/15')}"></lion-calendar>
|
|
209
|
-
`);
|
|
210
|
-
const elObj = new CalendarObject(el);
|
|
211
|
-
el.selectedDate = undefined;
|
|
212
|
-
await el.updateComplete;
|
|
213
|
-
expect(elObj.selectedDayObj).to.be.undefined;
|
|
214
|
-
expect(isSameDate(el.centralDate, new Date('2019/06/15'))).to.be.true;
|
|
215
|
-
});
|
|
216
|
-
it('sends event "user-selected-date-changed" when user selects a date via mouse', async () => {
|
|
217
|
-
const dateChangedSpy = sinon.spy();
|
|
218
|
-
const el = await fixture(html`
|
|
219
|
-
<lion-calendar
|
|
220
|
-
.selectedDate="${new Date('2000/12/12')}"
|
|
221
|
-
@user-selected-date-changed="${dateChangedSpy}"
|
|
222
|
-
></lion-calendar>
|
|
223
|
-
`);
|
|
224
|
-
const elObj = new CalendarObject(el);
|
|
225
|
-
expect(dateChangedSpy.called).to.equal(false);
|
|
226
|
-
elObj.getDayEl(15).click();
|
|
227
|
-
await el.updateComplete;
|
|
228
|
-
expect(dateChangedSpy.calledOnce).to.equal(true);
|
|
229
|
-
expect(
|
|
230
|
-
isSameDate(dateChangedSpy.args[0][0].detail.selectedDate, new Date('2000/12/15')),
|
|
231
|
-
).to.equal(true);
|
|
232
|
-
});
|
|
233
|
-
it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via mouse', async () => {
|
|
234
|
-
const dateChangedSpy = sinon.spy();
|
|
235
|
-
const disable15th = /** @param {Date} d */ (d) => d.getDate() === 15;
|
|
236
|
-
const el = await fixture(html`
|
|
237
|
-
<lion-calendar
|
|
238
|
-
.selectedDate="${new Date('2000/12/12')}"
|
|
239
|
-
@user-selected-date-changed="${dateChangedSpy}"
|
|
240
|
-
.disableDates=${disable15th}
|
|
241
|
-
></lion-calendar>
|
|
242
|
-
`);
|
|
243
|
-
const elObj = new CalendarObject(el);
|
|
244
|
-
elObj.getDayEl(15).click();
|
|
245
|
-
await el.updateComplete;
|
|
246
|
-
expect(dateChangedSpy.called).to.equal(false);
|
|
247
|
-
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/12/12'))).to.be.true;
|
|
248
|
-
});
|
|
249
|
-
it.skip('sends event "user-selected-date-changed" when user selects a date via [Enter]', async () => {
|
|
250
|
-
/**
|
|
251
|
-
* TODO fix me
|
|
252
|
-
* The dispatchEvent of [Enter] should has to be on contentWrapperElement to be called
|
|
253
|
-
* But to get "selected" a check is done if the action comes from a button.
|
|
254
|
-
*/
|
|
255
|
-
const dateChangedSpy = sinon.spy();
|
|
256
|
-
const el = await fixture(html`
|
|
257
|
-
<lion-calendar
|
|
258
|
-
.selectedDate="${new Date('2000/10/12')}"
|
|
259
|
-
@user-selected-date-changed="${dateChangedSpy}"
|
|
260
|
-
></lion-calendar>
|
|
261
|
-
`);
|
|
262
|
-
const elObj = new CalendarObject(el);
|
|
263
|
-
el.__contentWrapperElement?.dispatchEvent(
|
|
264
|
-
new KeyboardEvent('keydown', {
|
|
265
|
-
key: 'ArrowLeft',
|
|
266
|
-
}),
|
|
267
|
-
);
|
|
268
|
-
await el.updateComplete;
|
|
269
|
-
expect(elObj.activeMonth).to.equal('October');
|
|
270
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
271
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(11);
|
|
272
|
-
el.__contentWrapperElement?.dispatchEvent(
|
|
273
|
-
new KeyboardEvent('keydown', {
|
|
274
|
-
key: 'Enter',
|
|
275
|
-
}),
|
|
276
|
-
);
|
|
277
|
-
await el.updateComplete;
|
|
278
|
-
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/11'))).to.be.true;
|
|
279
|
-
expect(dateChangedSpy.called).to.equal(true);
|
|
280
|
-
});
|
|
281
|
-
it('doesn\'t send event "user-selected-date-changed" when user selects a disabled date via [Enter]', async () => {
|
|
282
|
-
const dateChangedSpy = sinon.spy();
|
|
283
|
-
const el = await fixture(html`
|
|
284
|
-
<lion-calendar
|
|
285
|
-
.selectedDate="${new Date('2000/10/12')}"
|
|
286
|
-
.minDate="${new Date('2000/10/12')}"
|
|
287
|
-
@user-selected-date-changed="${dateChangedSpy}"
|
|
288
|
-
></lion-calendar>
|
|
289
|
-
`);
|
|
290
|
-
const elObj = new CalendarObject(el);
|
|
291
|
-
focusSelectedDate(el);
|
|
292
|
-
await sendKeys({
|
|
293
|
-
press: 'ArrowLeft',
|
|
294
|
-
});
|
|
295
|
-
await el.updateComplete;
|
|
296
|
-
expect(elObj.activeMonth).to.equal('October');
|
|
297
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
298
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(11);
|
|
299
|
-
await sendKeys({
|
|
300
|
-
press: 'Enter',
|
|
301
|
-
});
|
|
302
|
-
await el.updateComplete;
|
|
303
|
-
expect(isSameDate(/** @type {Date} */ el.selectedDate, new Date('2000/10/12'))).to.be.true;
|
|
304
|
-
expect(dateChangedSpy.called).to.equal(false);
|
|
305
|
-
});
|
|
306
|
-
it('exposes focusedDate getter', async () => {
|
|
307
|
-
const el = await fixture(html`
|
|
308
|
-
<lion-calendar .centralDate="${new Date('2019/06/01')}"></lion-calendar>
|
|
309
|
-
`);
|
|
310
|
-
const elObj = new CalendarObject(el);
|
|
311
|
-
expect(el.focusedDate).to.be.null;
|
|
312
|
-
elObj.getDayEl(15).click();
|
|
313
|
-
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2019/06/15'))).to.equal(true);
|
|
314
|
-
});
|
|
315
|
-
it('has a focusDate() method to focus an arbitrary date', async () => {
|
|
316
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
317
|
-
const elObj = new CalendarObject(el);
|
|
318
|
-
await el.focusDate(new Date('2016/06/10'));
|
|
319
|
-
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2016/06/10'))).to.be.true;
|
|
320
|
-
expect(elObj.getDayObj(10).isFocused).to.be.true;
|
|
321
|
-
});
|
|
322
|
-
it('has a focusCentralDate() method to focus the central date', async () => {
|
|
323
|
-
const el = await fixture(html`
|
|
324
|
-
<lion-calendar
|
|
325
|
-
.centralDate="${new Date('2015/12/02')}"
|
|
326
|
-
.selectedDate="${new Date('2015/12/04')}"
|
|
327
|
-
></lion-calendar>
|
|
328
|
-
`);
|
|
329
|
-
const elObj = new CalendarObject(el);
|
|
330
|
-
el.focusCentralDate();
|
|
331
|
-
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2015/12/02'))).to.be.true;
|
|
332
|
-
expect(elObj.getDayObj(2).isFocused).to.be.true;
|
|
333
|
-
});
|
|
334
|
-
it('has a focusSelectedDate() method to focus the selected date', async () => {
|
|
335
|
-
const el = await fixture(html`
|
|
336
|
-
<lion-calendar
|
|
337
|
-
.centralDate="${new Date('2014/07/05')}"
|
|
338
|
-
.selectedDate="${new Date('2014/07/07')}"
|
|
339
|
-
></lion-calendar>
|
|
340
|
-
`);
|
|
341
|
-
const elObj = new CalendarObject(el);
|
|
342
|
-
await el.focusSelectedDate();
|
|
343
|
-
expect(isSameDate(/** @type {Date} */ el.focusedDate, new Date('2014/07/07'))).to.be.true;
|
|
344
|
-
expect(elObj.getDayObj(7).isFocused).to.be.true;
|
|
345
|
-
});
|
|
346
|
-
it('has a initCentralDate() method for external contexts like datepickers', async () => {
|
|
347
|
-
const initialCentralDate = new Date('2014/07/05');
|
|
348
|
-
const initialSelectedDate = new Date('2014/07/07');
|
|
349
|
-
const el = await fixture(
|
|
350
|
-
html`<lion-calendar
|
|
351
|
-
.centralDate="${initialCentralDate}"
|
|
352
|
-
.selectedDate="${initialSelectedDate}"
|
|
353
|
-
></lion-calendar>`,
|
|
354
|
-
);
|
|
355
|
-
expect(el.selectedDate).to.equal(initialSelectedDate);
|
|
356
|
-
expect(el.centralDate).to.equal(initialCentralDate);
|
|
357
|
-
const newSelectedDate = new Date('2015/07/05');
|
|
358
|
-
el.selectedDate = newSelectedDate;
|
|
359
|
-
el.initCentralDate();
|
|
360
|
-
expect(el.centralDate).to.equal(newSelectedDate);
|
|
361
|
-
el.selectedDate = undefined;
|
|
362
|
-
el.initCentralDate();
|
|
363
|
-
expect(el.centralDate).to.equal(initialCentralDate);
|
|
364
|
-
});
|
|
365
|
-
describe('Enabled Dates', () => {
|
|
366
|
-
it('disables all days before "minDate" property', async () => {
|
|
367
|
-
const el = await fixture(html`
|
|
368
|
-
<lion-calendar
|
|
369
|
-
.selectedDate="${new Date('2000/12/31')}"
|
|
370
|
-
.minDate="${new Date('2000/12/09')}"
|
|
371
|
-
>
|
|
372
|
-
</lion-calendar>
|
|
373
|
-
`);
|
|
374
|
-
const elObj = new CalendarObject(el);
|
|
375
|
-
expect(elObj.getDayObj(15).isDisabled).to.equal(false);
|
|
376
|
-
elObj.dayEls.forEach((d, i) => {
|
|
377
|
-
const shouldBeDisabled = i < 8;
|
|
378
|
-
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
it('disables all days after "maxDate" property', async () => {
|
|
382
|
-
const el = await fixture(html`
|
|
383
|
-
<lion-calendar
|
|
384
|
-
.selectedDate="${new Date('2000/12/01')}"
|
|
385
|
-
.maxDate="${new Date('2000/12/09')}"
|
|
386
|
-
>
|
|
387
|
-
</lion-calendar>
|
|
388
|
-
`);
|
|
389
|
-
const elObj = new CalendarObject(el);
|
|
390
|
-
expect(elObj.getDayObj(5).isDisabled).to.equal(false);
|
|
391
|
-
elObj.dayEls.forEach((d, i) => {
|
|
392
|
-
const shouldBeDisabled = i > 8;
|
|
393
|
-
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
it('disables a date with disableDates function', async () => {
|
|
397
|
-
/** @param {Date} d */
|
|
398
|
-
const disable15th = (d) => d.getDate() === 15;
|
|
399
|
-
const el = await fixture(html`
|
|
400
|
-
<lion-calendar
|
|
401
|
-
.selectedDate="${new Date('2000/12/01')}"
|
|
402
|
-
.disableDates=${disable15th}
|
|
403
|
-
></lion-calendar>
|
|
404
|
-
`);
|
|
405
|
-
const elObj = new CalendarObject(el);
|
|
406
|
-
elObj.dayEls.forEach((d, i) => {
|
|
407
|
-
const shouldBeDisabled = i === 15 - 1;
|
|
408
|
-
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
409
|
-
});
|
|
410
|
-
el.selectedDate = new Date('2000/11/01'); // When month view updates, it should still work
|
|
411
|
-
await el.updateComplete;
|
|
412
|
-
elObj.dayEls.forEach((d, i) => {
|
|
413
|
-
const shouldBeDisabled = i === 15 - 1;
|
|
414
|
-
expect(new DayObject(d).isDisabled).to.equal(shouldBeDisabled);
|
|
415
|
-
});
|
|
416
|
-
});
|
|
417
|
-
it('does not prevent initializing "centralDate" from "selectedDate" when today is disabled', async () => {
|
|
418
|
-
const clock = sinon.useFakeTimers({
|
|
419
|
-
now: new Date('2019/06/03').getTime(),
|
|
420
|
-
});
|
|
421
|
-
const el = await fixture(html`
|
|
422
|
-
<lion-calendar
|
|
423
|
-
.selectedDate="${new Date('2001/01/08')}"
|
|
424
|
-
.disableDates=${/** @param {Date} date */ (date) => date.getDate() === 3}
|
|
425
|
-
></lion-calendar>
|
|
426
|
-
`);
|
|
427
|
-
const elObj = new CalendarObject(el);
|
|
428
|
-
expect(isSameDate(el.centralDate, new Date('2001/01/08'))).to.be.true;
|
|
429
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
430
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
431
|
-
clock.restore();
|
|
432
|
-
});
|
|
433
|
-
it('requires the user to set an appropriate centralDate even when minDate and maxDate are equal', async () => {
|
|
434
|
-
const clock = sinon.useFakeTimers({
|
|
435
|
-
now: new Date('2019/06/03').getTime(),
|
|
436
|
-
});
|
|
437
|
-
const el = await fixture(html`
|
|
438
|
-
<lion-calendar
|
|
439
|
-
.minDate="${new Date('2019/07/03')}"
|
|
440
|
-
.maxDate="${new Date('2019/07/03')}"
|
|
441
|
-
></lion-calendar>
|
|
442
|
-
`);
|
|
443
|
-
const elSetting = await fixture(html`
|
|
444
|
-
<lion-calendar
|
|
445
|
-
.centralDate="${new Date('2019/07/03')}"
|
|
446
|
-
.minDate="${new Date('2019/07/03')}"
|
|
447
|
-
.maxDate="${new Date('2019/07/03')}"
|
|
448
|
-
></lion-calendar>
|
|
449
|
-
`);
|
|
450
|
-
clock.restore();
|
|
451
|
-
expect(isSameDate(el.centralDate, new Date('2019/07/03'))).to.be.true;
|
|
452
|
-
expect(isSameDate(elSetting.centralDate, new Date('2019/07/03'))).to.be.true;
|
|
453
|
-
});
|
|
454
|
-
describe('Normalization', () => {
|
|
455
|
-
it('normalizes all generated dates', async () => {
|
|
456
|
-
/** @param {Date} d */
|
|
457
|
-
function isNormalizedDate(d) {
|
|
458
|
-
return d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0;
|
|
459
|
-
}
|
|
460
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
461
|
-
// The central date will be today's date: it's the date all other
|
|
462
|
-
// dates in the month view will be derived from.
|
|
463
|
-
expect(isNormalizedDate(el.centralDate)).to.be.true;
|
|
464
|
-
});
|
|
465
|
-
it('normalizes dates in date comparisons', async () => {
|
|
466
|
-
const selectedDate = new Date('2000-11-04T03:00:00');
|
|
467
|
-
// without normalization, selectedDate > maxDate would wrongfully be disabled
|
|
468
|
-
const maxDate = new Date('2000-11-29T02:00:00');
|
|
469
|
-
// without normalization, selectedDate < minDate would wrongfully be disabled
|
|
470
|
-
const minDate = new Date('2000-11-02T04:00:00');
|
|
471
|
-
const el = await fixture(html`
|
|
472
|
-
<lion-calendar
|
|
473
|
-
.selectedDate="${selectedDate}"
|
|
474
|
-
.minDate="${minDate}"
|
|
475
|
-
.maxDate="${maxDate}"
|
|
476
|
-
></lion-calendar>
|
|
477
|
-
`);
|
|
478
|
-
const elObj = new CalendarObject(el);
|
|
479
|
-
expect(elObj.getDayObj(29).isDisabled).to.equal(false);
|
|
480
|
-
expect(elObj.getDayObj(30).isDisabled).to.equal(true);
|
|
481
|
-
expect(elObj.getDayObj(2).isDisabled).to.equal(false);
|
|
482
|
-
expect(elObj.getDayObj(1).isDisabled).to.equal(true);
|
|
483
|
-
});
|
|
484
|
-
});
|
|
485
|
-
});
|
|
486
|
-
});
|
|
487
|
-
describe('Calendar navigation', () => {
|
|
488
|
-
describe('Title', () => {
|
|
489
|
-
it('contains secondary title displaying the current month and year in focus', async () => {
|
|
490
|
-
const el = await fixture(
|
|
491
|
-
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
492
|
-
);
|
|
493
|
-
const elObj = new CalendarObject(el);
|
|
494
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
495
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
496
|
-
});
|
|
497
|
-
it('updates the secondary title when the displayed month/year changes', async () => {
|
|
498
|
-
const el = await fixture(
|
|
499
|
-
html`<lion-calendar .centralDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
500
|
-
);
|
|
501
|
-
const elObj = new CalendarObject(el);
|
|
502
|
-
el.centralDate = new Date('1999/10/12');
|
|
503
|
-
await el.updateComplete;
|
|
504
|
-
expect(elObj.activeMonth).to.equal('October');
|
|
505
|
-
expect(elObj.activeYear).to.equal('1999');
|
|
506
|
-
});
|
|
507
|
-
describe('Accessibility', () => {
|
|
508
|
-
it('has aria-atomic="true" set on the secondary title', async () => {
|
|
509
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
510
|
-
expect(elObj.monthHeadingEl?.getAttribute('aria-atomic')).to.equal('true');
|
|
511
|
-
});
|
|
512
|
-
});
|
|
513
|
-
});
|
|
514
|
-
describe('Navigation', () => {
|
|
515
|
-
describe('finding enabled dates', () => {
|
|
516
|
-
it('has helper for `findNextEnabledDate()`, `findPreviousEnabledDate()`, `findNearestEnabledDate()`', async () => {
|
|
517
|
-
const el = await fixture(html`
|
|
518
|
-
<lion-calendar
|
|
519
|
-
.selectedDate="${new Date('2001/01/02')}"
|
|
520
|
-
.disableDates=${
|
|
521
|
-
/** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
|
|
522
|
-
}
|
|
523
|
-
></lion-calendar>
|
|
524
|
-
`);
|
|
525
|
-
const elObj = new CalendarObject(el);
|
|
526
|
-
el.focusDate(el.findNextEnabledDate());
|
|
527
|
-
await el.updateComplete;
|
|
528
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(5);
|
|
529
|
-
el.focusDate(el.findPreviousEnabledDate());
|
|
530
|
-
await el.updateComplete;
|
|
531
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(2);
|
|
532
|
-
el.focusDate(el.findNearestEnabledDate());
|
|
533
|
-
await el.updateComplete;
|
|
534
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(1);
|
|
535
|
-
});
|
|
536
|
-
it('future dates take precedence over past dates when "distance" between dates is equal', async () => {
|
|
537
|
-
const clock = sinon.useFakeTimers({
|
|
538
|
-
now: new Date('2000/12/15').getTime(),
|
|
539
|
-
});
|
|
540
|
-
const el = await fixture(html`
|
|
541
|
-
<lion-calendar
|
|
542
|
-
.disableDates="${/** @param {Date} d */ (d) => d.getDate() === 15}"
|
|
543
|
-
></lion-calendar>
|
|
544
|
-
`);
|
|
545
|
-
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
546
|
-
await el.updateComplete;
|
|
547
|
-
const elObj = new CalendarObject(el);
|
|
548
|
-
expect(elObj.centralDayObj?.monthday).to.equal(16);
|
|
549
|
-
clock.restore();
|
|
550
|
-
});
|
|
551
|
-
it('will search 750 days in the past', async () => {
|
|
552
|
-
const clock = sinon.useFakeTimers({
|
|
553
|
-
now: new Date('2000/12/15').getTime(),
|
|
554
|
-
});
|
|
555
|
-
const el = await fixture(html`
|
|
556
|
-
<lion-calendar
|
|
557
|
-
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() > 1998}"
|
|
558
|
-
></lion-calendar>
|
|
559
|
-
`);
|
|
560
|
-
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
561
|
-
await el.updateComplete;
|
|
562
|
-
expect(el.centralDate.getFullYear()).to.equal(1998);
|
|
563
|
-
expect(el.centralDate.getMonth()).to.equal(11);
|
|
564
|
-
expect(el.centralDate.getDate()).to.equal(31);
|
|
565
|
-
clock.restore();
|
|
566
|
-
});
|
|
567
|
-
it('will search 750 days in the future', async () => {
|
|
568
|
-
const clock = sinon.useFakeTimers({
|
|
569
|
-
now: new Date('2000/12/15').getTime(),
|
|
570
|
-
});
|
|
571
|
-
const el = await fixture(html`
|
|
572
|
-
<lion-calendar
|
|
573
|
-
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
|
|
574
|
-
></lion-calendar>
|
|
575
|
-
`);
|
|
576
|
-
el.focusDate(el.findNearestEnabledDate(new Date()));
|
|
577
|
-
await el.updateComplete;
|
|
578
|
-
expect(el.centralDate.getFullYear()).to.equal(2002);
|
|
579
|
-
expect(el.centralDate.getMonth()).to.equal(0);
|
|
580
|
-
expect(el.centralDate.getDate()).to.equal(1);
|
|
581
|
-
clock.restore();
|
|
582
|
-
});
|
|
583
|
-
it('throws if no available date can be found within +/- 750 days', async () => {
|
|
584
|
-
const el = await fixture(html`
|
|
585
|
-
<lion-calendar
|
|
586
|
-
.disableDates="${/** @param {Date} d */ (d) => d.getFullYear() < 2002}"
|
|
587
|
-
></lion-calendar>
|
|
588
|
-
`);
|
|
589
|
-
expect(() => {
|
|
590
|
-
el.findNextEnabledDate(new Date('1900/01/01'));
|
|
591
|
-
}).to.throw(Error, 'Could not find a selectable date within +/- 750 day for 1900/1/1');
|
|
592
|
-
});
|
|
593
|
-
});
|
|
594
|
-
describe('Year', () => {
|
|
595
|
-
it('has a button for navigation to previous year', async () => {
|
|
596
|
-
const el = await fixture(
|
|
597
|
-
html`<lion-calendar .selectedDate="${new Date('2001/01/01')}"></lion-calendar>`,
|
|
598
|
-
);
|
|
599
|
-
const elObj = new CalendarObject(el);
|
|
600
|
-
expect(elObj.previousYearButtonEl).not.to.equal(null);
|
|
601
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
602
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
603
|
-
|
|
604
|
-
/** @type {HTMLElement} */
|
|
605
|
-
elObj.previousYearButtonEl.click();
|
|
606
|
-
await el.updateComplete;
|
|
607
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
608
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
609
|
-
|
|
610
|
-
/** @type {HTMLElement} */
|
|
611
|
-
elObj.previousYearButtonEl.click();
|
|
612
|
-
await el.updateComplete;
|
|
613
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
614
|
-
expect(elObj.activeYear).to.equal('1999');
|
|
615
|
-
});
|
|
616
|
-
it('has a button for navigation to next year', async () => {
|
|
617
|
-
const el = await fixture(
|
|
618
|
-
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
619
|
-
);
|
|
620
|
-
const elObj = new CalendarObject(el);
|
|
621
|
-
expect(elObj.nextYearButtonEl).not.to.equal(null);
|
|
622
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
623
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
624
|
-
|
|
625
|
-
/** @type {HTMLElement} */
|
|
626
|
-
elObj.nextYearButtonEl.click();
|
|
627
|
-
await el.updateComplete;
|
|
628
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
629
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
630
|
-
|
|
631
|
-
/** @type {HTMLElement} */
|
|
632
|
-
elObj.nextYearButtonEl.click();
|
|
633
|
-
await el.updateComplete;
|
|
634
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
635
|
-
expect(elObj.activeYear).to.equal('2002');
|
|
636
|
-
});
|
|
637
|
-
it('disables previousYearButton and nextYearButton based on disabled days accordingly', async () => {
|
|
638
|
-
const el = await fixture(html`
|
|
639
|
-
<lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
|
|
640
|
-
`);
|
|
641
|
-
const elObj = new CalendarObject(el);
|
|
642
|
-
expect(elObj.activeMonth).to.equal('June');
|
|
643
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
644
|
-
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
645
|
-
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
646
|
-
el.minDate = new Date('2000/01/01');
|
|
647
|
-
el.maxDate = new Date('2000/12/31');
|
|
648
|
-
await el.updateComplete;
|
|
649
|
-
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
650
|
-
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
651
|
-
|
|
652
|
-
/** @type {HTMLElement} */
|
|
653
|
-
elObj.previousYearButtonEl.click();
|
|
654
|
-
await el.updateComplete;
|
|
655
|
-
expect(elObj.activeMonth).to.equal('June');
|
|
656
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
657
|
-
el.minDate = new Date('1999/12/31');
|
|
658
|
-
el.maxDate = new Date('2001/01/01');
|
|
659
|
-
await el.updateComplete;
|
|
660
|
-
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
661
|
-
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
662
|
-
});
|
|
663
|
-
it('sets label to correct month previousYearButton and nextYearButton based on disabled days accordingly', async () => {
|
|
664
|
-
const el = await fixture(html`
|
|
665
|
-
<lion-calendar .selectedDate="${new Date('2000/06/12')}"></lion-calendar>
|
|
666
|
-
`);
|
|
667
|
-
const elObj = new CalendarObject(el);
|
|
668
|
-
el.minDate = new Date('1999/07/12');
|
|
669
|
-
el.maxDate = new Date('2001/05/12');
|
|
670
|
-
await el.updateComplete;
|
|
671
|
-
expect(elObj.previousYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
672
|
-
expect(elObj.previousYearButtonEl.getAttribute('aria-label')).to.equal(
|
|
673
|
-
'Previous year, July 1999',
|
|
674
|
-
);
|
|
675
|
-
expect(elObj.nextYearButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
676
|
-
expect(elObj.nextYearButtonEl.getAttribute('aria-label')).to.equal('Next year, May 2001');
|
|
677
|
-
});
|
|
678
|
-
});
|
|
679
|
-
describe('Month', () => {
|
|
680
|
-
it('has a button for navigation to previous month', async () => {
|
|
681
|
-
const el = await fixture(
|
|
682
|
-
html`<lion-calendar .selectedDate="${new Date('2001/01/01')}"></lion-calendar>`,
|
|
683
|
-
);
|
|
684
|
-
const elObj = new CalendarObject(el);
|
|
685
|
-
expect(elObj.previousMonthButtonEl).not.to.equal(null);
|
|
686
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
687
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
688
|
-
|
|
689
|
-
/** @type {HTMLElement} */
|
|
690
|
-
elObj.previousMonthButtonEl.click();
|
|
691
|
-
await el.updateComplete;
|
|
692
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
693
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
694
|
-
|
|
695
|
-
/** @type {HTMLElement} */
|
|
696
|
-
elObj.previousMonthButtonEl.click();
|
|
697
|
-
await el.updateComplete;
|
|
698
|
-
expect(elObj.activeMonth).to.equal('November');
|
|
699
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
700
|
-
});
|
|
701
|
-
it('has a button for navigation to next month', async () => {
|
|
702
|
-
const el = await fixture(
|
|
703
|
-
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
704
|
-
);
|
|
705
|
-
const elObj = new CalendarObject(el);
|
|
706
|
-
expect(elObj.nextMonthButtonEl).not.to.equal(null);
|
|
707
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
708
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
709
|
-
/** @type {HTMLElement} */
|
|
710
|
-
elObj.nextMonthButtonEl.click();
|
|
711
|
-
await el.updateComplete;
|
|
712
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
713
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
714
|
-
|
|
715
|
-
/** @type {HTMLElement} */
|
|
716
|
-
elObj.nextMonthButtonEl.click();
|
|
717
|
-
await el.updateComplete;
|
|
718
|
-
expect(elObj.activeMonth).to.equal('February');
|
|
719
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
720
|
-
});
|
|
721
|
-
it('disables previousMonthButton and nextMonthButton based on disabled days accordingly', async () => {
|
|
722
|
-
const el = await fixture(html`
|
|
723
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
724
|
-
`);
|
|
725
|
-
const elObj = new CalendarObject(el);
|
|
726
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
727
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
728
|
-
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
729
|
-
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
730
|
-
el.minDate = new Date('2000/12/01');
|
|
731
|
-
el.maxDate = new Date('2000/12/31');
|
|
732
|
-
await el.updateComplete;
|
|
733
|
-
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
734
|
-
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(true);
|
|
735
|
-
/** @type {HTMLElement} */
|
|
736
|
-
elObj.previousMonthButtonEl.click();
|
|
737
|
-
await el.updateComplete;
|
|
738
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
739
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
740
|
-
/** @type {HTMLElement} */
|
|
741
|
-
elObj.previousMonthButtonEl.click();
|
|
742
|
-
await el.updateComplete;
|
|
743
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
744
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
745
|
-
});
|
|
746
|
-
it('handles switch to previous month when dates are disabled', async () => {
|
|
747
|
-
const clock = sinon.useFakeTimers({
|
|
748
|
-
now: new Date('2000/12/15').getTime(),
|
|
749
|
-
});
|
|
750
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
751
|
-
const elObj = new CalendarObject(el);
|
|
752
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
753
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
754
|
-
el.minDate = new Date('2000/11/20');
|
|
755
|
-
await el.updateComplete;
|
|
756
|
-
expect(elObj.previousMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
757
|
-
expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
|
|
758
|
-
|
|
759
|
-
/** @type {HTMLElement} */
|
|
760
|
-
elObj.previousMonthButtonEl.click();
|
|
761
|
-
await el.updateComplete;
|
|
762
|
-
expect(elObj.activeMonth).to.equal('November');
|
|
763
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
764
|
-
expect(isSameDate(el.centralDate, new Date('2000/11/15'))).to.be.true;
|
|
765
|
-
clock.restore();
|
|
766
|
-
});
|
|
767
|
-
it('handles switch to next month when dates are disabled', async () => {
|
|
768
|
-
const clock = sinon.useFakeTimers({
|
|
769
|
-
now: new Date('2000/12/15').getTime(),
|
|
770
|
-
});
|
|
771
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
772
|
-
const elObj = new CalendarObject(el);
|
|
773
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
774
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
775
|
-
el.maxDate = new Date('2001/01/10');
|
|
776
|
-
await el.updateComplete;
|
|
777
|
-
expect(elObj.nextMonthButtonEl?.hasAttribute('disabled')).to.equal(false);
|
|
778
|
-
expect(isSameDate(el.centralDate, new Date('2000/12/15'))).to.be.true;
|
|
779
|
-
/** @type {HTMLElement} */
|
|
780
|
-
elObj.nextMonthButtonEl.click();
|
|
781
|
-
await el.updateComplete;
|
|
782
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
783
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
784
|
-
expect(isSameDate(el.centralDate, new Date('2001/01/15'))).to.be.true;
|
|
785
|
-
clock.restore();
|
|
786
|
-
});
|
|
787
|
-
it('supports navigating from larger months to smaller ones (day counts)', async () => {
|
|
788
|
-
// given
|
|
789
|
-
const inputDate = new Date('2019/08/31');
|
|
790
|
-
const element = await fixture(html`
|
|
791
|
-
<lion-calendar .centralDate="${inputDate}"> </lion-calendar>
|
|
792
|
-
`);
|
|
793
|
-
// when
|
|
794
|
-
const remote = new CalendarObject(element);
|
|
795
|
-
/** @type {HTMLElement} */
|
|
796
|
-
remote.nextMonthButtonEl.click();
|
|
797
|
-
await element.updateComplete;
|
|
798
|
-
// then
|
|
799
|
-
expect(remote.activeMonth).to.equal('September');
|
|
800
|
-
expect(remote.activeYear).to.equal('2019');
|
|
801
|
-
expect(remote.centralDayObj?.el).dom.to.equal(`
|
|
802
|
-
<div
|
|
803
|
-
class="calendar__day-button"
|
|
804
|
-
aria-disabled="false"
|
|
805
|
-
role="button"
|
|
806
|
-
tabindex="0"
|
|
807
|
-
aria-pressed="false"
|
|
808
|
-
past=""
|
|
809
|
-
current-month="">
|
|
810
|
-
<span class="calendar__day-button__text">
|
|
811
|
-
30
|
|
812
|
-
</span>
|
|
813
|
-
<span class="u-sr-only">
|
|
814
|
-
September 2019 Monday
|
|
815
|
-
</span>
|
|
816
|
-
</div>
|
|
817
|
-
`);
|
|
818
|
-
});
|
|
819
|
-
});
|
|
820
|
-
describe('Accessibility', () => {
|
|
821
|
-
it('navigate buttons have a aria-label and title attribute with accessible label', async () => {
|
|
822
|
-
const el = await fixture(html`
|
|
823
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
824
|
-
`);
|
|
825
|
-
const elObj = new CalendarObject(el);
|
|
826
|
-
// month
|
|
827
|
-
expect(elObj.previousMonthButtonEl?.getAttribute('title')).to.equal(
|
|
828
|
-
'Previous month, November 2000',
|
|
829
|
-
);
|
|
830
|
-
expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
831
|
-
'Previous month, November 2000',
|
|
832
|
-
);
|
|
833
|
-
expect(elObj.nextMonthButtonEl?.getAttribute('title')).to.equal(
|
|
834
|
-
'Next month, January 2001',
|
|
835
|
-
);
|
|
836
|
-
expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
837
|
-
'Next month, January 2001',
|
|
838
|
-
);
|
|
839
|
-
|
|
840
|
-
// year
|
|
841
|
-
expect(elObj.previousYearButtonEl.getAttribute('title')).to.equal(
|
|
842
|
-
'Previous year, December 1999',
|
|
843
|
-
);
|
|
844
|
-
expect(elObj.previousYearButtonEl.getAttribute('aria-label')).to.equal(
|
|
845
|
-
'Previous year, December 1999',
|
|
846
|
-
);
|
|
847
|
-
expect(elObj.nextYearButtonEl.getAttribute('title')).to.equal('Next year, December 2001');
|
|
848
|
-
expect(elObj.nextYearButtonEl.getAttribute('aria-label')).to.equal(
|
|
849
|
-
'Next year, December 2001',
|
|
850
|
-
);
|
|
851
|
-
});
|
|
852
|
-
it('disables a date with disableDates function provide a correct message', async () => {
|
|
853
|
-
/** @param {Date} d */
|
|
854
|
-
const disable15th = (d) => d.getDate() === 15;
|
|
855
|
-
const el = await fixture(html`
|
|
856
|
-
<lion-calendar
|
|
857
|
-
.selectedDate="${new Date('2000/12/01')}"
|
|
858
|
-
.disableDates=${disable15th}
|
|
859
|
-
></lion-calendar>
|
|
860
|
-
`);
|
|
861
|
-
const elObj = new CalendarObject(el);
|
|
862
|
-
expect(elObj.getDayObj(15).isDisabled).to.equal(true);
|
|
863
|
-
expect(elObj.getDayObj(15).el).dom.to.equal(`
|
|
864
|
-
<div
|
|
865
|
-
class="calendar__day-button"
|
|
866
|
-
aria-disabled="true"
|
|
867
|
-
role="button"
|
|
868
|
-
tabindex="-1"
|
|
869
|
-
aria-pressed="false"
|
|
870
|
-
past=""
|
|
871
|
-
current-month="">
|
|
872
|
-
<span class="calendar__day-button__text">
|
|
873
|
-
15
|
|
874
|
-
</span>
|
|
875
|
-
<span class="u-sr-only">
|
|
876
|
-
December 2000 Friday This date is unavailable. Please choose another date.
|
|
877
|
-
</span>
|
|
878
|
-
</div>
|
|
879
|
-
`);
|
|
880
|
-
});
|
|
881
|
-
it('disables days before "minDate" property provide a correct message', async () => {
|
|
882
|
-
const el = await fixture(html`
|
|
883
|
-
<lion-calendar
|
|
884
|
-
.selectedDate="${new Date('2000/12/31')}"
|
|
885
|
-
.minDate="${new Date('2000/12/09')}"
|
|
886
|
-
>
|
|
887
|
-
</lion-calendar>
|
|
888
|
-
`);
|
|
889
|
-
const elObj = new CalendarObject(el);
|
|
890
|
-
expect(elObj.getDayObj(1).isDisabled).to.equal(true);
|
|
891
|
-
expect(elObj.getDayObj(1).el).dom.to.equal(`
|
|
892
|
-
<div
|
|
893
|
-
class="calendar__day-button"
|
|
894
|
-
aria-disabled="true"
|
|
895
|
-
role="button"
|
|
896
|
-
tabindex="-1"
|
|
897
|
-
aria-pressed="false"
|
|
898
|
-
past=""
|
|
899
|
-
current-month="">
|
|
900
|
-
<span class="calendar__day-button__text">
|
|
901
|
-
1
|
|
902
|
-
</span>
|
|
903
|
-
<span class="u-sr-only">
|
|
904
|
-
December 2000 Friday This date is unavailable. Earliest available date is 9 December 2000. Please choose another date.
|
|
905
|
-
</span>
|
|
906
|
-
</div>
|
|
907
|
-
`);
|
|
908
|
-
});
|
|
909
|
-
it('disables days after "maxDate" property provide a correct message', async () => {
|
|
910
|
-
const el = await fixture(html`
|
|
911
|
-
<lion-calendar
|
|
912
|
-
.selectedDate="${new Date('2000/12/31')}"
|
|
913
|
-
.maxDate="${new Date('2000/12/09')}"
|
|
914
|
-
>
|
|
915
|
-
</lion-calendar>
|
|
916
|
-
`);
|
|
917
|
-
const elObj = new CalendarObject(el);
|
|
918
|
-
expect(elObj.getDayObj(30).isDisabled).to.equal(true);
|
|
919
|
-
expect(elObj.getDayObj(30).el).dom.to.equal(`
|
|
920
|
-
<div
|
|
921
|
-
class="calendar__day-button"
|
|
922
|
-
aria-disabled="true"
|
|
923
|
-
role="button"
|
|
924
|
-
tabindex="-1"
|
|
925
|
-
aria-pressed="false"
|
|
926
|
-
past=""
|
|
927
|
-
current-month="">
|
|
928
|
-
<span class="calendar__day-button__text">
|
|
929
|
-
30
|
|
930
|
-
</span>
|
|
931
|
-
<span class="u-sr-only">
|
|
932
|
-
December 2000 Saturday This date is unavailable. Latest available date is 9 December 2000. Please choose another date.
|
|
933
|
-
</span>
|
|
934
|
-
</div>
|
|
935
|
-
`);
|
|
936
|
-
});
|
|
937
|
-
});
|
|
938
|
-
});
|
|
939
|
-
});
|
|
940
|
-
describe('Calendar body (months view)', () => {
|
|
941
|
-
it('renders the days of the week as table headers', async () => {
|
|
942
|
-
const el = await fixture(
|
|
943
|
-
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
944
|
-
);
|
|
945
|
-
const elObj = new CalendarObject(el);
|
|
946
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
947
|
-
'Sun',
|
|
948
|
-
'Mon',
|
|
949
|
-
'Tue',
|
|
950
|
-
'Wed',
|
|
951
|
-
'Thu',
|
|
952
|
-
'Fri',
|
|
953
|
-
'Sat',
|
|
954
|
-
]);
|
|
955
|
-
});
|
|
956
|
-
describe('Day view', () => {
|
|
957
|
-
it('adds "today" attribute if date is today', async () => {
|
|
958
|
-
const clock = sinon.useFakeTimers({
|
|
959
|
-
now: new Date('2000/12/15').getTime(),
|
|
960
|
-
});
|
|
961
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
962
|
-
const elObj = new CalendarObject(el);
|
|
963
|
-
expect(elObj.getDayEl(15).hasAttribute('today')).to.be.true;
|
|
964
|
-
expect(
|
|
965
|
-
elObj.checkForAllDayObjs(/** @param {DayObject} d */ (d) => d.isToday, [15]),
|
|
966
|
-
).to.equal(true);
|
|
967
|
-
clock.restore();
|
|
968
|
-
});
|
|
969
|
-
it('adds "selected" attribute to the selected date', async () => {
|
|
970
|
-
const el = await fixture(
|
|
971
|
-
html`<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>`,
|
|
972
|
-
);
|
|
973
|
-
const elObj = new CalendarObject(el);
|
|
974
|
-
expect(
|
|
975
|
-
elObj.checkForAllDayObjs(
|
|
976
|
-
/** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
|
|
977
|
-
[12],
|
|
978
|
-
),
|
|
979
|
-
).to.equal(true);
|
|
980
|
-
el.selectedDate = new Date('2000/12/15');
|
|
981
|
-
await el.updateComplete;
|
|
982
|
-
expect(
|
|
983
|
-
elObj.checkForAllDayObjs(
|
|
984
|
-
/** @param {DayObject} obj */ (obj) => obj.el.hasAttribute('selected'),
|
|
985
|
-
[15],
|
|
986
|
-
),
|
|
987
|
-
).to.equal(true);
|
|
988
|
-
});
|
|
989
|
-
it('adds aria-disabled="true" attribute to disabled dates', async () => {
|
|
990
|
-
const clock = sinon.useFakeTimers({
|
|
991
|
-
now: new Date('2000/12/15').getTime(),
|
|
992
|
-
});
|
|
993
|
-
const el = await fixture(html`
|
|
994
|
-
<lion-calendar
|
|
995
|
-
.selectedDate="${new Date('2000/12/10')}"
|
|
996
|
-
.minDate="${new Date('2000/12/03')}"
|
|
997
|
-
.maxDate="${new Date('2000/12/29')}"
|
|
998
|
-
>
|
|
999
|
-
</lion-calendar>
|
|
1000
|
-
`);
|
|
1001
|
-
const elObj = new CalendarObject(el);
|
|
1002
|
-
expect(
|
|
1003
|
-
elObj.checkForAllDayObjs(
|
|
1004
|
-
/** @param {DayObject} d */ (d) => d.el.getAttribute('aria-disabled') === 'true',
|
|
1005
|
-
[1, 2, 30, 31],
|
|
1006
|
-
),
|
|
1007
|
-
).to.equal(true);
|
|
1008
|
-
clock.restore();
|
|
1009
|
-
});
|
|
1010
|
-
});
|
|
1011
|
-
describe('User Interaction', () => {
|
|
1012
|
-
// For implementation, base on: https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/grid/js/dataGrid.js
|
|
1013
|
-
|
|
1014
|
-
describe('Keyboard Navigation', () => {
|
|
1015
|
-
it('focused day is reachable via tab (tabindex="0")', async () => {
|
|
1016
|
-
const el = await fixture(html`
|
|
1017
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1018
|
-
`);
|
|
1019
|
-
const elObj = new CalendarObject(el);
|
|
1020
|
-
expect(
|
|
1021
|
-
elObj.checkForAllDayObjs(
|
|
1022
|
-
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '0',
|
|
1023
|
-
[12],
|
|
1024
|
-
),
|
|
1025
|
-
).to.equal(true);
|
|
1026
|
-
});
|
|
1027
|
-
it('non focused days are not reachable via tab (have tabindex="-1")', async () => {
|
|
1028
|
-
const el = await fixture(html`
|
|
1029
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1030
|
-
`);
|
|
1031
|
-
const elObj = new CalendarObject(el);
|
|
1032
|
-
expect(
|
|
1033
|
-
elObj.checkForAllDayObjs(
|
|
1034
|
-
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1035
|
-
/** @param {number} dayNumber */ (dayNumber) => dayNumber !== 12,
|
|
1036
|
-
),
|
|
1037
|
-
).to.equal(true);
|
|
1038
|
-
});
|
|
1039
|
-
it('blocks navigation to disabled days', async () => {
|
|
1040
|
-
const el = await fixture(html`
|
|
1041
|
-
<lion-calendar
|
|
1042
|
-
.selectedDate="${new Date('2000/12/31')}"
|
|
1043
|
-
.minDate="${new Date('2000/12/09')}"
|
|
1044
|
-
>
|
|
1045
|
-
</lion-calendar>
|
|
1046
|
-
`);
|
|
1047
|
-
const elObj = new CalendarObject(el);
|
|
1048
|
-
expect(
|
|
1049
|
-
elObj.checkForAllDayObjs(
|
|
1050
|
-
/** @param {DayObject} d */ (d) => d.buttonEl.getAttribute('tabindex') === '-1',
|
|
1051
|
-
/** @param {number} dayNumber */ (dayNumber) => dayNumber < 9,
|
|
1052
|
-
),
|
|
1053
|
-
).to.equal(true);
|
|
1054
|
-
});
|
|
1055
|
-
it('navigates through months with [pageup] [pagedown] keys', async () => {
|
|
1056
|
-
const el = await fixture(html`
|
|
1057
|
-
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1058
|
-
`);
|
|
1059
|
-
const elObj = new CalendarObject(el);
|
|
1060
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1061
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1062
|
-
focusSelectedDate(el);
|
|
1063
|
-
await sendKeys({
|
|
1064
|
-
press: 'PageUp',
|
|
1065
|
-
});
|
|
1066
|
-
await el.updateComplete;
|
|
1067
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1068
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
1069
|
-
await sendKeys({
|
|
1070
|
-
press: 'PageDown',
|
|
1071
|
-
});
|
|
1072
|
-
await el.updateComplete;
|
|
1073
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1074
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1075
|
-
});
|
|
1076
|
-
it('navigates through years with [alt + pageup] [alt + pagedown] keys', async () => {
|
|
1077
|
-
const el = await fixture(html`
|
|
1078
|
-
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1079
|
-
`);
|
|
1080
|
-
focusSelectedDate(el);
|
|
1081
|
-
const elObj = new CalendarObject(el);
|
|
1082
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1083
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1084
|
-
await sendKeys({
|
|
1085
|
-
down: 'Alt',
|
|
1086
|
-
});
|
|
1087
|
-
await sendKeys({
|
|
1088
|
-
press: 'PageDown',
|
|
1089
|
-
});
|
|
1090
|
-
await sendKeys({
|
|
1091
|
-
up: 'Alt',
|
|
1092
|
-
});
|
|
1093
|
-
await el.updateComplete;
|
|
1094
|
-
focusSelectedDate(el);
|
|
1095
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1096
|
-
expect(elObj.activeYear).to.equal('2002');
|
|
1097
|
-
await sendKeys({
|
|
1098
|
-
down: 'Alt',
|
|
1099
|
-
});
|
|
1100
|
-
await sendKeys({
|
|
1101
|
-
press: 'PageUp',
|
|
1102
|
-
});
|
|
1103
|
-
await sendKeys({
|
|
1104
|
-
up: 'Alt',
|
|
1105
|
-
});
|
|
1106
|
-
await el.updateComplete;
|
|
1107
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1108
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1109
|
-
});
|
|
1110
|
-
describe('Arrow keys', () => {
|
|
1111
|
-
it('navigates (sets focus) to next row item via [arrow down] key', async () => {
|
|
1112
|
-
const el = await fixture(html`
|
|
1113
|
-
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1114
|
-
`);
|
|
1115
|
-
const elObj = new CalendarObject(el);
|
|
1116
|
-
focusSelectedDate(el);
|
|
1117
|
-
await sendKeys({
|
|
1118
|
-
press: 'ArrowDown',
|
|
1119
|
-
});
|
|
1120
|
-
await el.updateComplete;
|
|
1121
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(2 + 7);
|
|
1122
|
-
});
|
|
1123
|
-
it('navigates (sets focus) to previous row item via [arrow up] key', async () => {
|
|
1124
|
-
const el = await fixture(html`
|
|
1125
|
-
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1126
|
-
`);
|
|
1127
|
-
const elObj = new CalendarObject(el);
|
|
1128
|
-
focusSelectedDate(el);
|
|
1129
|
-
await sendKeys({
|
|
1130
|
-
press: 'ArrowUp',
|
|
1131
|
-
});
|
|
1132
|
-
await el.updateComplete;
|
|
1133
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(26); // of month before
|
|
1134
|
-
});
|
|
1135
|
-
it('navigates (sets focus) to previous column item via [arrow left] key', async () => {
|
|
1136
|
-
// 2000-12-12 is Tuesday; at 2nd of row
|
|
1137
|
-
const el = await fixture(html`
|
|
1138
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1139
|
-
`);
|
|
1140
|
-
const elObj = new CalendarObject(el);
|
|
1141
|
-
focusSelectedDate(el);
|
|
1142
|
-
await sendKeys({
|
|
1143
|
-
press: 'ArrowLeft',
|
|
1144
|
-
});
|
|
1145
|
-
await el.updateComplete;
|
|
1146
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(12 - 1);
|
|
1147
|
-
});
|
|
1148
|
-
it('navigates (sets focus) to next column item via [arrow right] key', async () => {
|
|
1149
|
-
// 2000-12-12 is Tuesday; at 2nd of row
|
|
1150
|
-
const el = await fixture(html`
|
|
1151
|
-
<lion-calendar .selectedDate="${new Date('2000/12/12')}"></lion-calendar>
|
|
1152
|
-
`);
|
|
1153
|
-
const elObj = new CalendarObject(el);
|
|
1154
|
-
focusSelectedDate(el);
|
|
1155
|
-
await sendKeys({
|
|
1156
|
-
press: 'ArrowRight',
|
|
1157
|
-
});
|
|
1158
|
-
await el.updateComplete;
|
|
1159
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(12 + 1);
|
|
1160
|
-
});
|
|
1161
|
-
it('navigates (sets focus) to next column item via [arrow right] key', async () => {
|
|
1162
|
-
const el = await fixture(html`
|
|
1163
|
-
<lion-calendar
|
|
1164
|
-
.selectedDate="${new Date('2001/01/02')}"
|
|
1165
|
-
.disableDates=${
|
|
1166
|
-
/** @param {Date} date */ (date) => date.getDate() === 3 || date.getDate() === 4
|
|
1167
|
-
}
|
|
1168
|
-
></lion-calendar>
|
|
1169
|
-
`);
|
|
1170
|
-
const elObj = new CalendarObject(el);
|
|
1171
|
-
focusSelectedDate(el);
|
|
1172
|
-
await sendKeys({
|
|
1173
|
-
press: 'ArrowRight',
|
|
1174
|
-
});
|
|
1175
|
-
await el.updateComplete;
|
|
1176
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(3);
|
|
1177
|
-
});
|
|
1178
|
-
it('navigates (sets focus) to next row via [arrow right] key if last item in row', async () => {
|
|
1179
|
-
const el = await fixture(html`
|
|
1180
|
-
<lion-calendar .selectedDate="${new Date('2019/01/05')}"></lion-calendar>
|
|
1181
|
-
`);
|
|
1182
|
-
const elObj = new CalendarObject(el);
|
|
1183
|
-
expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sat');
|
|
1184
|
-
focusSelectedDate(el);
|
|
1185
|
-
await sendKeys({
|
|
1186
|
-
press: 'ArrowRight',
|
|
1187
|
-
});
|
|
1188
|
-
await el.updateComplete;
|
|
1189
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(6);
|
|
1190
|
-
expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sun');
|
|
1191
|
-
});
|
|
1192
|
-
it('navigates (sets focus) to previous row via [arrow left] key if first item in row', async () => {
|
|
1193
|
-
const el = await fixture(html`
|
|
1194
|
-
<lion-calendar .selectedDate="${new Date('2019/01/06')}"></lion-calendar>
|
|
1195
|
-
`);
|
|
1196
|
-
const elObj = new CalendarObject(el);
|
|
1197
|
-
expect(elObj.centralDayObj?.weekdayNameShort).to.equal('Sun');
|
|
1198
|
-
focusSelectedDate(el);
|
|
1199
|
-
await sendKeys({
|
|
1200
|
-
press: 'ArrowLeft',
|
|
1201
|
-
});
|
|
1202
|
-
await el.updateComplete;
|
|
1203
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(5);
|
|
1204
|
-
expect(elObj.focusedDayObj?.weekdayNameShort).to.equal('Sat');
|
|
1205
|
-
});
|
|
1206
|
-
it('navigates to next month via [arrow right] key if last day of month', async () => {
|
|
1207
|
-
const el = await fixture(html`
|
|
1208
|
-
<lion-calendar .selectedDate="${new Date('2000/12/31')}"></lion-calendar>
|
|
1209
|
-
`);
|
|
1210
|
-
const elObj = new CalendarObject(el);
|
|
1211
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1212
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
1213
|
-
focusSelectedDate(el);
|
|
1214
|
-
await sendKeys({
|
|
1215
|
-
press: 'ArrowRight',
|
|
1216
|
-
});
|
|
1217
|
-
await el.updateComplete;
|
|
1218
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1219
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1220
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(1);
|
|
1221
|
-
});
|
|
1222
|
-
it('navigates to previous month via [arrow left] key if first day of month', async () => {
|
|
1223
|
-
const el = await fixture(html`
|
|
1224
|
-
<lion-calendar .selectedDate="${new Date('2001/01/01')}"></lion-calendar>
|
|
1225
|
-
`);
|
|
1226
|
-
const elObj = new CalendarObject(el);
|
|
1227
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1228
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1229
|
-
focusSelectedDate(el);
|
|
1230
|
-
await sendKeys({
|
|
1231
|
-
press: 'ArrowLeft',
|
|
1232
|
-
});
|
|
1233
|
-
await el.updateComplete;
|
|
1234
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1235
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
1236
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(31);
|
|
1237
|
-
});
|
|
1238
|
-
it('navigates to next month via [arrow down] key if last row of month', async () => {
|
|
1239
|
-
const el = await fixture(html`
|
|
1240
|
-
<lion-calendar .selectedDate="${new Date('2000/12/30')}"></lion-calendar>
|
|
1241
|
-
`);
|
|
1242
|
-
const elObj = new CalendarObject(el);
|
|
1243
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1244
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
1245
|
-
focusSelectedDate(el);
|
|
1246
|
-
await sendKeys({
|
|
1247
|
-
press: 'ArrowDown',
|
|
1248
|
-
});
|
|
1249
|
-
await el.updateComplete;
|
|
1250
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1251
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1252
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(6);
|
|
1253
|
-
});
|
|
1254
|
-
it('navigates to previous month via [arrow up] key if first row of month', async () => {
|
|
1255
|
-
const el = await fixture(html`
|
|
1256
|
-
<lion-calendar .selectedDate="${new Date('2001/01/02')}"></lion-calendar>
|
|
1257
|
-
`);
|
|
1258
|
-
const elObj = new CalendarObject(el);
|
|
1259
|
-
expect(elObj.activeMonth).to.equal('January');
|
|
1260
|
-
expect(elObj.activeYear).to.equal('2001');
|
|
1261
|
-
focusSelectedDate(el);
|
|
1262
|
-
await sendKeys({
|
|
1263
|
-
press: 'ArrowUp',
|
|
1264
|
-
});
|
|
1265
|
-
await el.updateComplete;
|
|
1266
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1267
|
-
expect(elObj.activeYear).to.equal('2000');
|
|
1268
|
-
expect(elObj.focusedDayObj?.monthday).to.equal(26);
|
|
1269
|
-
});
|
|
1270
|
-
});
|
|
1271
|
-
});
|
|
1272
|
-
describe('Initial central', () => {
|
|
1273
|
-
it('is based on "selectedDate"', async () => {
|
|
1274
|
-
const el = await fixture(html`
|
|
1275
|
-
<lion-calendar .selectedDate=${new Date('2019/06/15')}></lion-calendar>
|
|
1276
|
-
`);
|
|
1277
|
-
const elObj = new CalendarObject(el);
|
|
1278
|
-
expect(elObj.centralDayObj?.monthday).to.equal(15);
|
|
1279
|
-
});
|
|
1280
|
-
it('is today if no selected date is available', async () => {
|
|
1281
|
-
const clock = sinon.useFakeTimers({
|
|
1282
|
-
now: new Date('2000/12/15').getTime(),
|
|
1283
|
-
});
|
|
1284
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
1285
|
-
const elObj = new CalendarObject(el);
|
|
1286
|
-
expect(elObj.centralDayObj?.monthday).to.equal(15);
|
|
1287
|
-
clock.restore();
|
|
1288
|
-
});
|
|
1289
|
-
it('is nearest to today if no selected date is available and today is disabled', async () => {
|
|
1290
|
-
const clock = sinon.useFakeTimers({
|
|
1291
|
-
now: new Date('2000/12/15').getTime(),
|
|
1292
|
-
});
|
|
1293
|
-
const calWithMin = await fixture(
|
|
1294
|
-
html`<lion-calendar .minDate=${new Date('2000/12/25')}></lion-calendar>`,
|
|
1295
|
-
);
|
|
1296
|
-
const calObjWithMin = new CalendarObject(calWithMin);
|
|
1297
|
-
expect(calObjWithMin.centralDayObj?.monthday).to.equal(25);
|
|
1298
|
-
const calWithMax = await fixture(
|
|
1299
|
-
html`<lion-calendar .maxDate=${new Date('2000/12/05')}></lion-calendar>`,
|
|
1300
|
-
);
|
|
1301
|
-
const calObjWithMax = new CalendarObject(calWithMax);
|
|
1302
|
-
expect(calObjWithMax.centralDayObj?.monthday).to.equal(5);
|
|
1303
|
-
const calWithDisabled = await fixture(
|
|
1304
|
-
html`<lion-calendar
|
|
1305
|
-
.disableDates=${/** @param {Date} date */ (date) => date.getDate() === 15}
|
|
1306
|
-
></lion-calendar>`,
|
|
1307
|
-
);
|
|
1308
|
-
await calWithDisabled.updateComplete;
|
|
1309
|
-
const calObjWithDisabled = new CalendarObject(calWithDisabled);
|
|
1310
|
-
expect(calObjWithDisabled.centralDayObj?.monthday).to.equal(16);
|
|
1311
|
-
clock.restore();
|
|
1312
|
-
});
|
|
1313
|
-
});
|
|
1314
|
-
|
|
1315
|
-
/**
|
|
1316
|
-
* Not in scope:
|
|
1317
|
-
* - (virtual) scrolling: still under discussion. Wait for UX
|
|
1318
|
-
*/
|
|
1319
|
-
});
|
|
1320
|
-
describe('Accessibility', () => {
|
|
1321
|
-
// Based on:
|
|
1322
|
-
// - https://codepen.io/erikkroes/pen/jJEWpR
|
|
1323
|
-
|
|
1324
|
-
// Navigation and day labels based on:
|
|
1325
|
-
// - https://dequeuniversity.com/library/aria/date-pickers/sf-date-picker
|
|
1326
|
-
// (recommended in W3C Editors Draft)
|
|
1327
|
-
|
|
1328
|
-
// For implementation, base on:
|
|
1329
|
-
// https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/grid/js/dataGrid.js
|
|
1330
|
-
// As an enhancement, we detect when grid boundaries day are exceeded, so we move to
|
|
1331
|
-
// next/previous month.
|
|
1332
|
-
it('has role="application" to activate keyboard navigation', async () => {
|
|
1333
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1334
|
-
expect(elObj.rootEl?.getAttribute('role')).to.equal('application');
|
|
1335
|
-
});
|
|
1336
|
-
it(`renders the calendar as a table element with role="grid", aria-readonly="true" and
|
|
1337
|
-
a caption (month + year)`, async () => {
|
|
1338
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1339
|
-
expect(elObj.gridEl?.getAttribute('role')).to.equal('grid');
|
|
1340
|
-
expect(elObj.gridEl?.getAttribute('aria-readonly')).to.equal('true');
|
|
1341
|
-
});
|
|
1342
|
-
it('adds aria-labels to the weekday table headers', async () => {
|
|
1343
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1344
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1345
|
-
'Sunday',
|
|
1346
|
-
'Monday',
|
|
1347
|
-
'Tuesday',
|
|
1348
|
-
'Wednesday',
|
|
1349
|
-
'Thursday',
|
|
1350
|
-
'Friday',
|
|
1351
|
-
'Saturday',
|
|
1352
|
-
]);
|
|
1353
|
-
});
|
|
1354
|
-
it('renders each day as a button inside a table cell', async () => {
|
|
1355
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1356
|
-
const hasBtn = /** @param {DayObject} d */ (d) =>
|
|
1357
|
-
d.el.tagName === 'DIV' && d.el.getAttribute('role') === 'button';
|
|
1358
|
-
expect(elObj.checkForAllDayObjs(hasBtn)).to.equal(true);
|
|
1359
|
-
});
|
|
1360
|
-
it('renders days for previous and next months', async () => {
|
|
1361
|
-
const elObj = new CalendarObject(
|
|
1362
|
-
await fixture(html`
|
|
1363
|
-
<lion-calendar .selectedDate="${new Date('2000/11/12')}"></lion-calendar>
|
|
1364
|
-
`),
|
|
1365
|
-
);
|
|
1366
|
-
const { previousMonthDayObjs, nextMonthDayObjs } = elObj;
|
|
1367
|
-
expect(previousMonthDayObjs.length).to.equal(3);
|
|
1368
|
-
expect(previousMonthDayObjs[0].cellIndex).to.equal(0);
|
|
1369
|
-
expect(previousMonthDayObjs[0].monthday).to.equal(29);
|
|
1370
|
-
expect(previousMonthDayObjs[1].cellIndex).to.equal(1);
|
|
1371
|
-
expect(previousMonthDayObjs[1].monthday).to.equal(30);
|
|
1372
|
-
expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
|
|
1373
|
-
expect(previousMonthDayObjs[2].monthday).to.equal(31);
|
|
1374
|
-
expect(nextMonthDayObjs.length).to.equal(9);
|
|
1375
|
-
expect(nextMonthDayObjs[0].cellIndex).to.equal(5);
|
|
1376
|
-
expect(nextMonthDayObjs[0].monthday).to.equal(1);
|
|
1377
|
-
expect(nextMonthDayObjs[1].cellIndex).to.equal(6);
|
|
1378
|
-
expect(nextMonthDayObjs[1].monthday).to.equal(2);
|
|
1379
|
-
expect(nextMonthDayObjs[2].cellIndex).to.equal(0);
|
|
1380
|
-
expect(nextMonthDayObjs[2].monthday).to.equal(3);
|
|
1381
|
-
expect(nextMonthDayObjs[3].cellIndex).to.equal(1);
|
|
1382
|
-
expect(nextMonthDayObjs[3].monthday).to.equal(4);
|
|
1383
|
-
expect(nextMonthDayObjs[4].cellIndex).to.equal(2);
|
|
1384
|
-
expect(nextMonthDayObjs[4].monthday).to.equal(5);
|
|
1385
|
-
expect(nextMonthDayObjs[5].cellIndex).to.equal(3);
|
|
1386
|
-
expect(nextMonthDayObjs[5].monthday).to.equal(6);
|
|
1387
|
-
expect(nextMonthDayObjs[6].cellIndex).to.equal(4);
|
|
1388
|
-
expect(nextMonthDayObjs[6].monthday).to.equal(7);
|
|
1389
|
-
expect(nextMonthDayObjs[7].cellIndex).to.equal(5);
|
|
1390
|
-
expect(nextMonthDayObjs[7].monthday).to.equal(8);
|
|
1391
|
-
expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
|
|
1392
|
-
expect(nextMonthDayObjs[8].monthday).to.equal(9);
|
|
1393
|
-
});
|
|
1394
|
-
it('renders days for next months in the last month of the year', async () => {
|
|
1395
|
-
const elObj = new CalendarObject(
|
|
1396
|
-
await fixture(html`
|
|
1397
|
-
<lion-calendar .selectedDate="${new Date('2020/12/12')}"></lion-calendar>
|
|
1398
|
-
`),
|
|
1399
|
-
);
|
|
1400
|
-
const { nextMonthDayObjs } = elObj;
|
|
1401
|
-
expect(nextMonthDayObjs.length).to.equal(9);
|
|
1402
|
-
expect(nextMonthDayObjs[0].cellIndex).to.equal(5);
|
|
1403
|
-
expect(nextMonthDayObjs[0].monthday).to.equal(1);
|
|
1404
|
-
expect(nextMonthDayObjs[1].cellIndex).to.equal(6);
|
|
1405
|
-
expect(nextMonthDayObjs[1].monthday).to.equal(2);
|
|
1406
|
-
expect(nextMonthDayObjs[2].cellIndex).to.equal(0);
|
|
1407
|
-
expect(nextMonthDayObjs[2].monthday).to.equal(3);
|
|
1408
|
-
expect(nextMonthDayObjs[3].cellIndex).to.equal(1);
|
|
1409
|
-
expect(nextMonthDayObjs[3].monthday).to.equal(4);
|
|
1410
|
-
expect(nextMonthDayObjs[4].cellIndex).to.equal(2);
|
|
1411
|
-
expect(nextMonthDayObjs[4].monthday).to.equal(5);
|
|
1412
|
-
expect(nextMonthDayObjs[5].cellIndex).to.equal(3);
|
|
1413
|
-
expect(nextMonthDayObjs[5].monthday).to.equal(6);
|
|
1414
|
-
expect(nextMonthDayObjs[6].cellIndex).to.equal(4);
|
|
1415
|
-
expect(nextMonthDayObjs[6].monthday).to.equal(7);
|
|
1416
|
-
expect(nextMonthDayObjs[7].cellIndex).to.equal(5);
|
|
1417
|
-
expect(nextMonthDayObjs[7].monthday).to.equal(8);
|
|
1418
|
-
expect(nextMonthDayObjs[8].cellIndex).to.equal(6);
|
|
1419
|
-
expect(nextMonthDayObjs[8].monthday).to.equal(9);
|
|
1420
|
-
});
|
|
1421
|
-
it('renders days for previous months in the first month of the year', async () => {
|
|
1422
|
-
const elObj = new CalendarObject(
|
|
1423
|
-
await fixture(html`
|
|
1424
|
-
<lion-calendar .selectedDate="${new Date('2020/01/12')}"></lion-calendar>
|
|
1425
|
-
`),
|
|
1426
|
-
);
|
|
1427
|
-
const { previousMonthDayObjs } = elObj;
|
|
1428
|
-
expect(previousMonthDayObjs.length).to.equal(3);
|
|
1429
|
-
expect(previousMonthDayObjs[0].cellIndex).to.equal(0);
|
|
1430
|
-
expect(previousMonthDayObjs[0].monthday).to.equal(29);
|
|
1431
|
-
expect(previousMonthDayObjs[1].cellIndex).to.equal(1);
|
|
1432
|
-
expect(previousMonthDayObjs[1].monthday).to.equal(30);
|
|
1433
|
-
expect(previousMonthDayObjs[2].cellIndex).to.equal(2);
|
|
1434
|
-
expect(previousMonthDayObjs[2].monthday).to.equal(31);
|
|
1435
|
-
});
|
|
1436
|
-
it('sets aria-current="date" to todays button', async () => {
|
|
1437
|
-
const elObj = new CalendarObject(await fixture(html`<lion-calendar></lion-calendar>`));
|
|
1438
|
-
const hasAriaCurrent = /** @param {DayObject} d */ (d) =>
|
|
1439
|
-
d.buttonEl.getAttribute('aria-current') === 'date';
|
|
1440
|
-
const monthday = new Date().getDate();
|
|
1441
|
-
expect(elObj.checkForAllDayObjs(hasAriaCurrent, [monthday])).to.equal(true);
|
|
1442
|
-
});
|
|
1443
|
-
it('sets aria-pressed="true" on selected date button', async () => {
|
|
1444
|
-
const elObj = new CalendarObject(
|
|
1445
|
-
await fixture(html`
|
|
1446
|
-
<lion-calendar .selectedDate="${new Date('2000/11/12')}"></lion-calendar>
|
|
1447
|
-
`),
|
|
1448
|
-
);
|
|
1449
|
-
const hasAriaPressed = /** @param {DayObject} d */ (d) =>
|
|
1450
|
-
d.buttonEl.getAttribute('aria-pressed') === 'true';
|
|
1451
|
-
expect(elObj.checkForAllDayObjs(hasAriaPressed, [12])).to.equal(true);
|
|
1452
|
-
});
|
|
1453
|
-
|
|
1454
|
-
/**
|
|
1455
|
-
* Not in scope:
|
|
1456
|
-
* - reads the new focused day on month navigation"
|
|
1457
|
-
*/
|
|
1458
|
-
});
|
|
1459
|
-
|
|
1460
|
-
/**
|
|
1461
|
-
* Not in scope:
|
|
1462
|
-
* - show week numbers
|
|
1463
|
-
*/
|
|
1464
|
-
});
|
|
1465
|
-
describe('Localization', () => {
|
|
1466
|
-
it('supports custom locale with a fallback to a global locale', async () => {
|
|
1467
|
-
const el = await fixture(html`
|
|
1468
|
-
<lion-calendar .selectedDate="${new Date('2019/12/20')}"></lion-calendar>
|
|
1469
|
-
`);
|
|
1470
|
-
const elObj = new CalendarObject(el);
|
|
1471
|
-
expect(elObj.activeMonth).to.equal('December');
|
|
1472
|
-
el.locale = 'fr-FR';
|
|
1473
|
-
await el.updateComplete;
|
|
1474
|
-
expect(elObj.activeMonth).to.equal('décembre');
|
|
1475
|
-
localizeManager.locale = 'cs-CZ';
|
|
1476
|
-
await el.updateComplete;
|
|
1477
|
-
expect(elObj.activeMonth).to.equal('décembre');
|
|
1478
|
-
el.locale = '';
|
|
1479
|
-
await el.updateComplete;
|
|
1480
|
-
expect(elObj.activeMonth).to.equal('prosinec');
|
|
1481
|
-
});
|
|
1482
|
-
it('displays the right translations according to locale', async () => {
|
|
1483
|
-
const el = await fixture(html`
|
|
1484
|
-
<lion-calendar .centralDate=${new Date('2019/11/20')}></lion-calendar>
|
|
1485
|
-
`);
|
|
1486
|
-
const elObj = new CalendarObject(el);
|
|
1487
|
-
expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1488
|
-
'Next month, December 2019',
|
|
1489
|
-
);
|
|
1490
|
-
expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1491
|
-
'Previous month, October 2019',
|
|
1492
|
-
);
|
|
1493
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1494
|
-
'Sunday',
|
|
1495
|
-
'Monday',
|
|
1496
|
-
'Tuesday',
|
|
1497
|
-
'Wednesday',
|
|
1498
|
-
'Thursday',
|
|
1499
|
-
'Friday',
|
|
1500
|
-
'Saturday',
|
|
1501
|
-
]);
|
|
1502
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
1503
|
-
'Sun',
|
|
1504
|
-
'Mon',
|
|
1505
|
-
'Tue',
|
|
1506
|
-
'Wed',
|
|
1507
|
-
'Thu',
|
|
1508
|
-
'Fri',
|
|
1509
|
-
'Sat',
|
|
1510
|
-
]);
|
|
1511
|
-
localizeManager.locale = 'nl-NL';
|
|
1512
|
-
await el.localizeNamespacesLoaded;
|
|
1513
|
-
await el.updateComplete;
|
|
1514
|
-
expect(elObj.nextMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1515
|
-
'Volgende maand, december 2019',
|
|
1516
|
-
);
|
|
1517
|
-
expect(elObj.previousMonthButtonEl?.getAttribute('aria-label')).to.equal(
|
|
1518
|
-
'Vorige maand, oktober 2019',
|
|
1519
|
-
);
|
|
1520
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.getAttribute('aria-label'))).to.eql([
|
|
1521
|
-
'zondag',
|
|
1522
|
-
'maandag',
|
|
1523
|
-
'dinsdag',
|
|
1524
|
-
'woensdag',
|
|
1525
|
-
'donderdag',
|
|
1526
|
-
'vrijdag',
|
|
1527
|
-
'zaterdag',
|
|
1528
|
-
]);
|
|
1529
|
-
expect(elObj.weekdayHeaderEls.map((h) => h.textContent?.trim())).to.deep.equal([
|
|
1530
|
-
'zo',
|
|
1531
|
-
'ma',
|
|
1532
|
-
'di',
|
|
1533
|
-
'wo',
|
|
1534
|
-
'do',
|
|
1535
|
-
'vr',
|
|
1536
|
-
'za',
|
|
1537
|
-
]);
|
|
1538
|
-
});
|
|
1539
|
-
});
|
|
1540
|
-
describe('Accessibility', () => {
|
|
1541
|
-
it('is accessible', async () => {
|
|
1542
|
-
const el = await fixture(html`<lion-calendar></lion-calendar>`);
|
|
1543
|
-
await expect(el).to.be.accessible();
|
|
1544
|
-
});
|
|
1545
|
-
it('is accessible with a date selected', async () => {
|
|
1546
|
-
const today = new Date();
|
|
1547
|
-
const selectedDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
|
|
1548
|
-
const el = await fixture(
|
|
1549
|
-
html`<lion-calendar .selectedDate="${selectedDate}"></lion-calendar>`,
|
|
1550
|
-
);
|
|
1551
|
-
await expect(el).to.be.accessible();
|
|
1552
|
-
});
|
|
1553
|
-
it('is accessible with disabled dates', async () => {
|
|
1554
|
-
const el = await fixture(html`
|
|
1555
|
-
<lion-calendar
|
|
1556
|
-
.disableDates=${
|
|
1557
|
-
/** @param {Date} date */ (date) => date.getDay() === 6 || date.getDay() === 0
|
|
1558
|
-
}
|
|
1559
|
-
></lion-calendar>
|
|
1560
|
-
`);
|
|
1561
|
-
await expect(el).to.be.accessible();
|
|
1562
|
-
});
|
|
1563
|
-
it('is hidden when attribute hidden is true', async () => {
|
|
1564
|
-
const el = await fixture(html`<lion-calendar hidden></lion-calendar>`);
|
|
1565
|
-
expect(el).not.to.be.displayed;
|
|
1566
|
-
});
|
|
1567
|
-
});
|
|
1568
|
-
describe('Run suite', () => {
|
|
1569
|
-
runCalendarSuite();
|
|
1570
|
-
});
|
|
1571
|
-
});
|
|
2
|
+
runCalendarSuite();
|