igniteui-webcomponents 7.2.4 → 7.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +162 -0
- package/animations/player.d.ts +7 -2
- package/animations/player.js +2 -3
- package/animations/player.js.map +1 -1
- package/animations/view-transition.js +1 -1
- package/animations/view-transition.js.map +1 -1
- package/components/accordion/accordion.d.ts +1 -1
- package/components/accordion/accordion.js +11 -22
- package/components/accordion/accordion.js.map +1 -1
- package/components/avatar/avatar.d.ts +0 -1
- package/components/avatar/avatar.js +8 -12
- package/components/avatar/avatar.js.map +1 -1
- package/components/avatar/themes/themes.d.ts +1 -1
- package/components/avatar/themes/themes.js.map +1 -1
- package/components/badge/badge.d.ts +2 -4
- package/components/badge/badge.js +9 -13
- package/components/badge/badge.js.map +1 -1
- package/components/badge/themes/themes.d.ts +1 -1
- package/components/badge/themes/themes.js.map +1 -1
- package/components/banner/banner.d.ts +8 -7
- package/components/banner/banner.js +27 -25
- package/components/banner/banner.js.map +1 -1
- package/components/banner/themes/themes.d.ts +1 -1
- package/components/banner/themes/themes.js.map +1 -1
- package/components/button/button-base.d.ts +3 -3
- package/components/button/button-base.js +9 -8
- package/components/button/button-base.js.map +1 -1
- package/components/button/button.d.ts +3 -3
- package/components/button/button.js +2 -2
- package/components/button/button.js.map +1 -1
- package/components/button/icon-button.js +3 -3
- package/components/button/icon-button.js.map +1 -1
- package/components/button/themes/button/themes.d.ts +1 -1
- package/components/button/themes/button/themes.js.map +1 -1
- package/components/button/themes/icon-button/themes.d.ts +1 -1
- package/components/button/themes/icon-button/themes.js.map +1 -1
- package/components/button-group/button-group.d.ts +41 -21
- package/components/button-group/button-group.js +95 -105
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/themes/button.d.ts +1 -1
- package/components/button-group/themes/button.js.map +1 -1
- package/components/button-group/themes/group.d.ts +1 -1
- package/components/button-group/themes/group.js.map +1 -1
- package/components/button-group/toggle-button.d.ts +17 -10
- package/components/button-group/toggle-button.js +28 -13
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/base.d.ts +28 -19
- package/components/calendar/base.js +20 -44
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +38 -7
- package/components/calendar/calendar.js +96 -85
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +49 -22
- package/components/calendar/days-view/days-view.js +102 -163
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/helpers.d.ts +3 -62
- package/components/calendar/helpers.js +6 -110
- package/components/calendar/helpers.js.map +1 -1
- package/components/calendar/months-view/months-view.d.ts +8 -22
- package/components/calendar/months-view/months-view.js +30 -83
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/calendar/selection.d.ts +21 -0
- package/components/calendar/selection.js +42 -0
- package/components/calendar/selection.js.map +1 -0
- package/components/calendar/themes/calendar.d.ts +1 -1
- package/components/calendar/themes/calendar.js.map +1 -1
- package/components/calendar/themes/days.d.ts +1 -1
- package/components/calendar/themes/days.js.map +1 -1
- package/components/calendar/themes/year-month.d.ts +1 -1
- package/components/calendar/themes/year-month.js.map +1 -1
- package/components/calendar/types.d.ts +18 -0
- package/components/calendar/types.js.map +1 -1
- package/components/calendar/year-month-view.base.d.ts +44 -0
- package/components/calendar/year-month-view.base.js +89 -0
- package/components/calendar/year-month-view.base.js.map +1 -0
- package/components/calendar/years-view/years-view.d.ts +7 -20
- package/components/calendar/years-view/years-view.js +25 -79
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/card/card.actions.js +2 -2
- package/components/card/card.actions.js.map +1 -1
- package/components/card/card.content.d.ts +1 -1
- package/components/card/card.content.js +2 -2
- package/components/card/card.content.js.map +1 -1
- package/components/card/card.d.ts +1 -1
- package/components/card/card.header.js +2 -2
- package/components/card/card.header.js.map +1 -1
- package/components/card/card.js +2 -2
- package/components/card/card.js.map +1 -1
- package/components/card/card.media.d.ts +1 -1
- package/components/card/card.media.js +1 -1
- package/components/card/card.media.js.map +1 -1
- package/components/card/themes/actions.d.ts +1 -1
- package/components/card/themes/actions.js.map +1 -1
- package/components/card/themes/container.d.ts +1 -1
- package/components/card/themes/container.js.map +1 -1
- package/components/card/themes/content.d.ts +1 -1
- package/components/card/themes/content.js.map +1 -1
- package/components/card/themes/header.d.ts +1 -1
- package/components/card/themes/header.js.map +1 -1
- package/components/carousel/animations.d.ts +1 -1
- package/components/carousel/animations.js +2 -2
- package/components/carousel/animations.js.map +1 -1
- package/components/carousel/carousel-indicator-container.js +4 -4
- package/components/carousel/carousel-indicator-container.js.map +1 -1
- package/components/carousel/carousel-indicator.d.ts +2 -2
- package/components/carousel/carousel-indicator.js +17 -17
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +1 -3
- package/components/carousel/carousel-slide.js +16 -18
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +58 -41
- package/components/carousel/carousel.js +170 -145
- package/components/carousel/carousel.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/carousel/themes/container.d.ts +1 -1
- package/components/carousel/themes/container.js.map +1 -1
- package/components/carousel/themes/indicator-container.d.ts +1 -1
- package/components/carousel/themes/indicator-container.js.map +1 -1
- package/components/chat/chat-input.d.ts +4 -4
- package/components/chat/chat-input.js +28 -27
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat-message.d.ts +1 -1
- package/components/chat/chat-message.js +7 -6
- package/components/chat/chat-message.js.map +1 -1
- package/components/chat/chat-state.d.ts +2 -2
- package/components/chat/chat-state.js +2 -1
- package/components/chat/chat-state.js.map +1 -1
- package/components/chat/chat.d.ts +4 -6
- package/components/chat/chat.js +13 -19
- package/components/chat/chat.js.map +1 -1
- package/components/chat/message-attachments.js +5 -5
- package/components/chat/message-attachments.js.map +1 -1
- package/components/chat/themes/attachments.d.ts +1 -1
- package/components/chat/themes/attachments.js.map +1 -1
- package/components/chat/themes/input.d.ts +1 -1
- package/components/chat/themes/input.js.map +1 -1
- package/components/chat/themes/message.d.ts +1 -1
- package/components/chat/themes/message.js.map +1 -1
- package/components/chat/themes/themes.d.ts +1 -1
- package/components/chat/themes/themes.js.map +1 -1
- package/components/chat/types.d.ts +2 -2
- package/components/chat/types.js.map +1 -1
- package/components/chat/utils.d.ts +1 -1
- package/components/chat/utils.js +3 -3
- package/components/chat/utils.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +7 -7
- package/components/checkbox/checkbox-base.js +7 -7
- package/components/checkbox/checkbox-base.js.map +1 -1
- package/components/checkbox/checkbox.d.ts +3 -5
- package/components/checkbox/checkbox.js +40 -50
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.d.ts +1 -1
- package/components/checkbox/switch.js +30 -40
- package/components/checkbox/switch.js.map +1 -1
- package/components/checkbox/themes/checkbox-themes.d.ts +1 -1
- package/components/checkbox/themes/checkbox-themes.js.map +1 -1
- package/components/checkbox/themes/switch-themes.d.ts +1 -1
- package/components/checkbox/themes/switch-themes.js.map +1 -1
- package/components/checkbox/validators.d.ts +1 -1
- package/components/checkbox/validators.js +1 -1
- package/components/checkbox/validators.js.map +1 -1
- package/components/chip/chip.d.ts +9 -16
- package/components/chip/chip.js +21 -38
- package/components/chip/chip.js.map +1 -1
- package/components/chip/themes/chip.base.css.js +1 -1
- package/components/chip/themes/chip.base.css.js.map +1 -1
- package/components/chip/themes/dark/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/dark/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/dark/chip.material.css.js +1 -1
- package/components/chip/themes/dark/chip.material.css.js.map +1 -1
- package/components/chip/themes/light/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/light/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/light/chip.fluent.css.js +1 -1
- package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/light/chip.indigo.css.js +1 -1
- package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.material.css.js +1 -1
- package/components/chip/themes/light/chip.material.css.js.map +1 -1
- package/components/chip/themes/light/chip.shared.css.js +1 -1
- package/components/chip/themes/light/chip.shared.css.js.map +1 -1
- package/components/chip/themes/shared/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/shared/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/shared/chip.common.css.js +1 -1
- package/components/chip/themes/shared/chip.common.css.js.map +1 -1
- package/components/chip/themes/shared/chip.fluent.css.js +1 -1
- package/components/chip/themes/shared/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/themes.d.ts +1 -1
- package/components/chip/themes/themes.js.map +1 -1
- package/components/combo/combo-header.js +2 -2
- package/components/combo/combo-header.js.map +1 -1
- package/components/combo/combo-item.d.ts +1 -5
- package/components/combo/combo-item.js +8 -18
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo.d.ts +89 -45
- package/components/combo/combo.js +244 -229
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/data.d.ts +30 -3
- package/components/combo/controllers/data.js +34 -9
- package/components/combo/controllers/data.js.map +1 -1
- package/components/combo/controllers/navigation.d.ts +8 -2
- package/components/combo/controllers/navigation.js +11 -12
- package/components/combo/controllers/navigation.js.map +1 -1
- package/components/combo/operations/filter.d.ts +17 -1
- package/components/combo/operations/filter.js +29 -9
- package/components/combo/operations/filter.js.map +1 -1
- package/components/combo/operations/group.js +1 -1
- package/components/combo/operations/group.js.map +1 -1
- package/components/combo/themes/combo.base.css.js +1 -1
- package/components/combo/themes/combo.base.css.js.map +1 -1
- package/components/combo/themes/themes.d.ts +1 -1
- package/components/combo/themes/themes.js.map +1 -1
- package/components/combo/types.d.ts +8 -4
- package/components/combo/types.js.map +1 -1
- package/components/combo/validators.d.ts +1 -1
- package/components/combo/validators.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +297 -0
- package/components/date-picker/date-picker.base.js +473 -0
- package/components/date-picker/date-picker.base.js.map +1 -0
- package/components/date-picker/date-picker.d.ts +53 -174
- package/components/date-picker/date-picker.js +90 -403
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/themes.d.ts +1 -1
- package/components/date-picker/themes/themes.js.map +1 -1
- package/components/date-picker/validators.d.ts +1 -1
- package/components/date-picker/validators.js +2 -2
- package/components/date-picker/validators.js.map +1 -1
- package/components/date-range-picker/date-range-input.d.ts +14 -18
- package/components/date-range-picker/date-range-input.js +39 -126
- package/components/date-range-picker/date-range-input.js.map +1 -1
- package/components/date-range-picker/date-range-mask-parser.d.ts +22 -34
- package/components/date-range-picker/date-range-mask-parser.js +38 -69
- package/components/date-range-picker/date-range-mask-parser.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +93 -190
- package/components/date-range-picker/date-range-picker.js +208 -543
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.d.ts +4 -4
- package/components/date-range-picker/predefined-ranges-area.js +8 -10
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/themes/ranges-themes.d.ts +1 -1
- package/components/date-range-picker/themes/ranges-themes.js.map +1 -1
- package/components/date-range-picker/themes/themes.d.ts +1 -1
- package/components/date-range-picker/themes/themes.js.map +1 -1
- package/components/date-range-picker/validators.d.ts +1 -1
- package/components/date-range-picker/validators.js +10 -30
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-part.d.ts +20 -2
- package/components/date-time-input/date-part.js +48 -75
- package/components/date-time-input/date-part.js.map +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +101 -35
- package/components/date-time-input/date-time-input.base.js +142 -46
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +14 -26
- package/components/date-time-input/date-time-input.js +37 -90
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/datetime-mask-parser.d.ts +53 -109
- package/components/date-time-input/datetime-mask-parser.js +93 -144
- package/components/date-time-input/datetime-mask-parser.js.map +1 -1
- package/components/date-time-input/validators.d.ts +1 -1
- package/components/date-time-input/validators.js +3 -14
- package/components/date-time-input/validators.js.map +1 -1
- package/components/dialog/dialog.d.ts +8 -9
- package/components/dialog/dialog.js +38 -44
- package/components/dialog/dialog.js.map +1 -1
- package/components/dialog/themes/themes.d.ts +1 -1
- package/components/dialog/themes/themes.js.map +1 -1
- package/components/divider/divider.d.ts +3 -5
- package/components/divider/divider.js +11 -20
- package/components/divider/divider.js.map +1 -1
- package/components/divider/themes/themes.d.ts +1 -1
- package/components/divider/themes/themes.js.map +1 -1
- package/components/dropdown/dropdown-group.d.ts +10 -3
- package/components/dropdown/dropdown-group.js +16 -5
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown-header.d.ts +2 -2
- package/components/dropdown/dropdown-header.js +7 -2
- package/components/dropdown/dropdown-header.js.map +1 -1
- package/components/dropdown/dropdown-item.d.ts +4 -4
- package/components/dropdown/dropdown-item.js +3 -3
- package/components/dropdown/dropdown-item.js.map +1 -1
- package/components/dropdown/dropdown.d.ts +75 -32
- package/components/dropdown/dropdown.js +189 -110
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/dropdown/themes/container.d.ts +1 -1
- package/components/dropdown/themes/container.js.map +1 -1
- package/components/dropdown/themes/group.d.ts +1 -1
- package/components/dropdown/themes/group.js.map +1 -1
- package/components/dropdown/themes/header.d.ts +1 -1
- package/components/dropdown/themes/header.js.map +1 -1
- package/components/dropdown/themes/item.d.ts +1 -1
- package/components/dropdown/themes/item.js.map +1 -1
- package/components/expansion-panel/expansion-panel.d.ts +27 -8
- package/components/expansion-panel/expansion-panel.js +33 -43
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/expansion-panel/themes/themes.d.ts +1 -1
- package/components/expansion-panel/themes/themes.js.map +1 -1
- package/components/file-input/file-input.d.ts +19 -23
- package/components/file-input/file-input.js +21 -34
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/themes.d.ts +1 -1
- package/components/file-input/themes/themes.js.map +1 -1
- package/components/file-input/validators.d.ts +1 -1
- package/components/file-input/validators.js +1 -1
- package/components/file-input/validators.js.map +1 -1
- package/components/focus-trap/focus-trap.js +3 -2
- package/components/focus-trap/focus-trap.js.map +1 -1
- package/components/highlight/highlight.d.ts +6 -8
- package/components/highlight/highlight.js +14 -22
- package/components/highlight/highlight.js.map +1 -1
- package/components/highlight/service.d.ts +4 -1
- package/components/highlight/service.js +23 -7
- package/components/highlight/service.js.map +1 -1
- package/components/highlight/themes/themes.d.ts +1 -1
- package/components/highlight/themes/themes.js.map +1 -1
- package/components/icon/icon-references.d.ts +3 -2
- package/components/icon/icon-references.js +103 -491
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/icon-state.broadcast.d.ts +14 -17
- package/components/icon/icon-state.broadcast.js +19 -20
- package/components/icon/icon-state.broadcast.js.map +1 -1
- package/components/icon/icon.d.ts +11 -23
- package/components/icon/icon.js +36 -28
- package/components/icon/icon.js.map +1 -1
- package/components/icon/icon.registry.d.ts +69 -131
- package/components/icon/icon.registry.js +51 -53
- package/components/icon/icon.registry.js.map +1 -1
- package/components/icon/internal-icons-lib.js +2 -2
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/icon/registry/parser.d.ts +15 -3
- package/components/icon/registry/parser.js +36 -11
- package/components/icon/registry/parser.js.map +1 -1
- package/components/icon/registry/types.d.ts +55 -11
- package/components/icon/registry/types.js.map +1 -1
- package/components/icon/themes/icon.base.css.js +1 -1
- package/components/icon/themes/icon.base.css.js.map +1 -1
- package/components/icon/themes/shared/icon.common.css.js +1 -1
- package/components/icon/themes/shared/icon.common.css.js.map +1 -1
- package/components/icon/themes/themes.d.ts +1 -1
- package/components/icon/themes/themes.js.map +1 -1
- package/components/input/input-base.d.ts +10 -25
- package/components/input/input-base.js +14 -23
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +23 -30
- package/components/input/input.js +38 -69
- package/components/input/input.js.map +1 -1
- package/components/input/themes/input.base.css.js +1 -1
- package/components/input/themes/input.base.css.js.map +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.common.css.js +1 -1
- package/components/input/themes/shared/input.common.css.js.map +1 -1
- package/components/input/themes/shared/input.fluent.css.js +1 -1
- package/components/input/themes/shared/input.fluent.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/input/themes/themes.d.ts +1 -1
- package/components/input/themes/themes.js.map +1 -1
- package/components/input/validators.d.ts +1 -1
- package/components/input/validators.js +1 -1
- package/components/input/validators.js.map +1 -1
- package/components/list/list-header.js +3 -3
- package/components/list/list-header.js.map +1 -1
- package/components/list/list-item.js +3 -3
- package/components/list/list-item.js.map +1 -1
- package/components/list/list.js +3 -3
- package/components/list/list.js.map +1 -1
- package/components/list/themes/container.d.ts +1 -1
- package/components/list/themes/container.js.map +1 -1
- package/components/list/themes/header.d.ts +1 -1
- package/components/list/themes/header.js.map +1 -1
- package/components/list/themes/item.d.ts +1 -1
- package/components/list/themes/item.js.map +1 -1
- package/components/mask-input/mask-history.d.ts +99 -0
- package/components/mask-input/mask-history.js +95 -0
- package/components/mask-input/mask-history.js.map +1 -0
- package/components/mask-input/mask-input.d.ts +14 -9
- package/components/mask-input/mask-input.js +20 -26
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/mask-input/mask-parser.d.ts +20 -2
- package/components/mask-input/mask-parser.js +21 -13
- package/components/mask-input/mask-parser.js.map +1 -1
- package/components/mask-input/validators.d.ts +1 -1
- package/components/mask-input/validators.js +1 -1
- package/components/mask-input/validators.js.map +1 -1
- package/components/nav-drawer/nav-drawer-header-item.d.ts +1 -1
- package/components/nav-drawer/nav-drawer-header-item.js +2 -2
- package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer-item.d.ts +2 -2
- package/components/nav-drawer/nav-drawer-item.js +4 -4
- package/components/nav-drawer/nav-drawer-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer.d.ts +10 -10
- package/components/nav-drawer/nav-drawer.js +23 -37
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/nav-drawer/themes/container.base.css.js +1 -1
- package/components/nav-drawer/themes/container.base.css.js.map +1 -1
- package/components/nav-drawer/themes/container.d.ts +1 -1
- package/components/nav-drawer/themes/container.js +2 -3
- package/components/nav-drawer/themes/container.js.map +1 -1
- package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js +1 -1
- package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js.map +1 -1
- package/components/nav-drawer/themes/header-item.d.ts +1 -1
- package/components/nav-drawer/themes/header-item.js.map +1 -1
- package/components/nav-drawer/themes/item.d.ts +1 -1
- package/components/nav-drawer/themes/item.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
- package/components/navbar/navbar.js +2 -2
- package/components/navbar/navbar.js.map +1 -1
- package/components/navbar/themes/themes.d.ts +1 -1
- package/components/navbar/themes/themes.js.map +1 -1
- package/components/popover/popover.d.ts +10 -3
- package/components/popover/popover.js +114 -99
- package/components/popover/popover.js.map +1 -1
- package/components/progress/base.d.ts +5 -8
- package/components/progress/base.js +25 -48
- package/components/progress/base.js.map +1 -1
- package/components/progress/circular-gradient.d.ts +2 -2
- package/components/progress/circular-gradient.js +1 -1
- package/components/progress/circular-gradient.js.map +1 -1
- package/components/progress/circular-progress.d.ts +15 -15
- package/components/progress/circular-progress.js +7 -6
- package/components/progress/circular-progress.js.map +1 -1
- package/components/progress/linear-progress.d.ts +12 -12
- package/components/progress/linear-progress.js +4 -4
- package/components/progress/linear-progress.js.map +1 -1
- package/components/progress/themes/circular/circular.progress.base.css.js +1 -1
- package/components/progress/themes/circular/circular.progress.base.css.js.map +1 -1
- package/components/progress/themes/circular/themes.d.ts +1 -1
- package/components/progress/themes/circular/themes.js.map +1 -1
- package/components/progress/themes/linear/linear.progress.base.css.js +1 -1
- package/components/progress/themes/linear/linear.progress.base.css.js.map +1 -1
- package/components/progress/themes/linear/themes.d.ts +1 -1
- package/components/progress/themes/linear/themes.js.map +1 -1
- package/components/qr-code/model/encode.d.ts +20 -0
- package/components/qr-code/model/encode.js +166 -0
- package/components/qr-code/model/encode.js.map +1 -0
- package/components/qr-code/model/error-correction.d.ts +15 -0
- package/components/qr-code/model/error-correction.js +1114 -0
- package/components/qr-code/model/error-correction.js.map +1 -0
- package/components/qr-code/model/mask.d.ts +11 -0
- package/components/qr-code/model/mask.js +161 -0
- package/components/qr-code/model/mask.js.map +1 -0
- package/components/qr-code/model/matrix.d.ts +15 -0
- package/components/qr-code/model/matrix.js +277 -0
- package/components/qr-code/model/matrix.js.map +1 -0
- package/components/qr-code/qr-code.d.ts +134 -0
- package/components/qr-code/qr-code.js +222 -0
- package/components/qr-code/qr-code.js.map +1 -0
- package/components/qr-code/renderer/constants.d.ts +26 -0
- package/components/qr-code/renderer/constants.js +5 -0
- package/components/qr-code/renderer/constants.js.map +1 -0
- package/components/qr-code/renderer/corner.d.ts +23 -0
- package/components/qr-code/renderer/corner.js +25 -0
- package/components/qr-code/renderer/corner.js.map +1 -0
- package/components/qr-code/renderer/dots.d.ts +14 -0
- package/components/qr-code/renderer/dots.js +7 -0
- package/components/qr-code/renderer/dots.js.map +1 -0
- package/components/qr-code/renderer/helpers.d.ts +18 -0
- package/components/qr-code/renderer/helpers.js +158 -0
- package/components/qr-code/renderer/helpers.js.map +1 -0
- package/components/qr-code/renderer/image.d.ts +23 -0
- package/components/qr-code/renderer/image.js +29 -0
- package/components/qr-code/renderer/image.js.map +1 -0
- package/components/qr-code/themes/dark/qr-code.bootstrap.css.js +3 -0
- package/components/qr-code/themes/dark/qr-code.bootstrap.css.js.map +1 -0
- package/components/qr-code/themes/dark/qr-code.fluent.css.d.ts +1 -0
- package/components/qr-code/themes/dark/qr-code.fluent.css.js +3 -0
- package/components/qr-code/themes/dark/qr-code.fluent.css.js.map +1 -0
- package/components/qr-code/themes/dark/qr-code.indigo.css.d.ts +1 -0
- package/components/qr-code/themes/dark/qr-code.indigo.css.js +3 -0
- package/components/qr-code/themes/dark/qr-code.indigo.css.js.map +1 -0
- package/components/qr-code/themes/dark/qr-code.material.css.d.ts +1 -0
- package/components/qr-code/themes/dark/qr-code.material.css.js +3 -0
- package/components/qr-code/themes/dark/qr-code.material.css.js.map +1 -0
- package/components/qr-code/themes/light/qr-code.bootstrap.css.d.ts +1 -0
- package/components/qr-code/themes/light/qr-code.bootstrap.css.js +3 -0
- package/components/qr-code/themes/light/qr-code.bootstrap.css.js.map +1 -0
- package/components/qr-code/themes/light/qr-code.fluent.css.d.ts +1 -0
- package/components/qr-code/themes/light/qr-code.fluent.css.js +3 -0
- package/components/qr-code/themes/light/qr-code.fluent.css.js.map +1 -0
- package/components/qr-code/themes/light/qr-code.indigo.css.d.ts +1 -0
- package/components/qr-code/themes/light/qr-code.indigo.css.js +3 -0
- package/components/qr-code/themes/light/qr-code.indigo.css.js.map +1 -0
- package/components/qr-code/themes/light/qr-code.material.css.d.ts +1 -0
- package/components/qr-code/themes/light/qr-code.material.css.js +3 -0
- package/components/qr-code/themes/light/qr-code.material.css.js.map +1 -0
- package/components/qr-code/themes/light/qr-code.shared.css.d.ts +1 -0
- package/components/qr-code/themes/light/qr-code.shared.css.js +3 -0
- package/components/qr-code/themes/light/qr-code.shared.css.js.map +1 -0
- package/components/qr-code/themes/qr-code.base.css.d.ts +1 -0
- package/components/qr-code/themes/qr-code.base.css.js +3 -0
- package/components/qr-code/themes/qr-code.base.css.js.map +1 -0
- package/components/qr-code/themes/shared/qr-code.common.css.d.ts +1 -0
- package/components/qr-code/themes/shared/qr-code.common.css.js +3 -0
- package/components/qr-code/themes/shared/qr-code.common.css.js.map +1 -0
- package/components/qr-code/themes/themes.d.ts +2 -0
- package/components/qr-code/themes/themes.js +46 -0
- package/components/qr-code/themes/themes.js.map +1 -0
- package/components/qr-code/types.d.ts +16 -0
- package/components/qr-code/types.js +2 -0
- package/components/qr-code/types.js.map +1 -0
- package/components/radio/controller.d.ts +7 -0
- package/components/radio/controller.js +14 -0
- package/components/radio/controller.js.map +1 -0
- package/components/radio/radio.d.ts +30 -18
- package/components/radio/radio.js +90 -89
- package/components/radio/radio.js.map +1 -1
- package/components/radio/themes/themes.d.ts +1 -1
- package/components/radio/themes/themes.js.map +1 -1
- package/components/radio/validators.d.ts +1 -1
- package/components/radio/validators.js +5 -3
- package/components/radio/validators.js.map +1 -1
- package/components/radio-group/radio-group.d.ts +17 -9
- package/components/radio-group/radio-group.js +46 -44
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/radio-group/themes/themes.d.ts +1 -1
- package/components/radio-group/themes/themes.js.map +1 -1
- package/components/rating/rating-symbol.d.ts +1 -1
- package/components/rating/rating-symbol.js +1 -1
- package/components/rating/rating-symbol.js.map +1 -1
- package/components/rating/rating.d.ts +30 -18
- package/components/rating/rating.js +90 -81
- package/components/rating/rating.js.map +1 -1
- package/components/rating/themes/themes.d.ts +1 -1
- package/components/rating/themes/themes.js.map +1 -1
- package/components/resize-container/default-ghost.js +4 -3
- package/components/resize-container/default-ghost.js.map +1 -1
- package/components/resize-container/resize-container.d.ts +3 -3
- package/components/resize-container/resize-container.js +9 -7
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/resize-container/resize-controller.js +6 -5
- package/components/resize-container/resize-controller.js.map +1 -1
- package/components/resize-container/themes/themes.d.ts +1 -1
- package/components/resize-container/themes/themes.js.map +1 -1
- package/components/ripple/ripple.d.ts +1 -1
- package/components/ripple/ripple.js +3 -2
- package/components/ripple/ripple.js.map +1 -1
- package/components/select/select-group.d.ts +11 -3
- package/components/select/select-group.js +21 -9
- package/components/select/select-group.js.map +1 -1
- package/components/select/select-header.d.ts +1 -1
- package/components/select/select-header.js +7 -2
- package/components/select/select-header.js.map +1 -1
- package/components/select/select-item.d.ts +4 -4
- package/components/select/select-item.js +3 -3
- package/components/select/select-item.js.map +1 -1
- package/components/select/select.d.ts +48 -28
- package/components/select/select.js +143 -94
- package/components/select/select.js.map +1 -1
- package/components/select/themes/select.base.css.js +1 -1
- package/components/select/themes/select.base.css.js.map +1 -1
- package/components/select/themes/themes.d.ts +1 -1
- package/components/select/themes/themes.js.map +1 -1
- package/components/select/validators.d.ts +1 -1
- package/components/select/validators.js +1 -1
- package/components/select/validators.js.map +1 -1
- package/components/slider/range-slider.d.ts +5 -4
- package/components/slider/range-slider.js +25 -73
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.d.ts +9 -6
- package/components/slider/slider-base.js +35 -32
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider-label.js +1 -1
- package/components/slider/slider-label.js.map +1 -1
- package/components/slider/slider.d.ts +3 -3
- package/components/slider/slider.js +15 -11
- package/components/slider/slider.js.map +1 -1
- package/components/slider/themes/themes.d.ts +1 -1
- package/components/slider/themes/themes.js.map +1 -1
- package/components/snackbar/snackbar.d.ts +3 -3
- package/components/snackbar/snackbar.js +4 -4
- package/components/snackbar/snackbar.js.map +1 -1
- package/components/snackbar/themes/themes.d.ts +1 -1
- package/components/snackbar/themes/themes.js.map +1 -1
- package/components/splitter/splitter.d.ts +107 -24
- package/components/splitter/splitter.js +234 -147
- package/components/splitter/splitter.js.map +1 -1
- package/components/splitter/themes/themes.d.ts +1 -1
- package/components/splitter/themes/themes.js.map +1 -1
- package/components/splitter/types.d.ts +14 -3
- package/components/splitter/types.js.map +1 -1
- package/components/stepper/common/animations.d.ts +1 -1
- package/components/stepper/common/animations.js +2 -2
- package/components/stepper/common/animations.js.map +1 -1
- package/components/stepper/step.d.ts +4 -1
- package/components/stepper/step.js +16 -12
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.d.ts +5 -16
- package/components/stepper/stepper.js +27 -89
- package/components/stepper/stepper.js.map +1 -1
- package/components/stepper/themes/step/themes.d.ts +1 -1
- package/components/stepper/themes/step/themes.js.map +1 -1
- package/components/tabs/tab-dom.d.ts +31 -28
- package/components/tabs/tab-dom.js +84 -34
- package/components/tabs/tab-dom.js.map +1 -1
- package/components/tabs/tab.d.ts +24 -6
- package/components/tabs/tab.js +36 -14
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.d.ts +37 -27
- package/components/tabs/tabs.js +118 -129
- package/components/tabs/tabs.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
- package/components/tabs/themes/tab-themes.d.ts +1 -1
- package/components/tabs/themes/tab-themes.js.map +1 -1
- package/components/tabs/themes/tabs-themes.d.ts +1 -1
- package/components/tabs/themes/tabs-themes.js.map +1 -1
- package/components/tabs/themes/tabs.base.css.js +1 -1
- package/components/tabs/themes/tabs.base.css.js.map +1 -1
- package/components/textarea/textarea.d.ts +24 -20
- package/components/textarea/textarea.js +25 -27
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/themes.d.ts +1 -1
- package/components/textarea/themes/themes.js.map +1 -1
- package/components/textarea/validators.d.ts +1 -1
- package/components/textarea/validators.js +1 -1
- package/components/textarea/validators.js.map +1 -1
- package/components/theme-provider/theme-provider.d.ts +3 -5
- package/components/theme-provider/theme-provider.js +13 -23
- package/components/theme-provider/theme-provider.js.map +1 -1
- package/components/tile-manager/position.d.ts +1 -1
- package/components/tile-manager/position.js +2 -2
- package/components/tile-manager/position.js.map +1 -1
- package/components/tile-manager/resize-state.js +4 -3
- package/components/tile-manager/resize-state.js.map +1 -1
- package/components/tile-manager/themes/container.d.ts +1 -1
- package/components/tile-manager/themes/container.js.map +1 -1
- package/components/tile-manager/themes/tile.d.ts +1 -1
- package/components/tile-manager/themes/tile.js.map +1 -1
- package/components/tile-manager/tile-ghost-util.js +1 -1
- package/components/tile-manager/tile-ghost-util.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +11 -22
- package/components/tile-manager/tile-manager.js +50 -81
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +14 -22
- package/components/tile-manager/tile.js +66 -80
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/themes/themes.d.ts +1 -1
- package/components/toast/themes/themes.js.map +1 -1
- package/components/toast/toast.d.ts +1 -1
- package/components/toast/toast.js +3 -3
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/controller.d.ts +18 -16
- package/components/tooltip/controller.js +62 -41
- package/components/tooltip/controller.js.map +1 -1
- package/components/tooltip/service.d.ts +2 -1
- package/components/tooltip/service.js +10 -15
- package/components/tooltip/service.js.map +1 -1
- package/components/tooltip/themes/shared/tooltip.common.css.js +1 -1
- package/components/tooltip/themes/shared/tooltip.common.css.js.map +1 -1
- package/components/tooltip/themes/shared/tooltip.indigo.css.js +1 -1
- package/components/tooltip/themes/shared/tooltip.indigo.css.js.map +1 -1
- package/components/tooltip/themes/themes.d.ts +1 -1
- package/components/tooltip/themes/themes.js.map +1 -1
- package/components/tooltip/themes/tooltip.base.css.js +1 -1
- package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
- package/components/tooltip/tooltip.d.ts +68 -25
- package/components/tooltip/tooltip.js +130 -88
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/themes/container.base.css.js +1 -1
- package/components/tree/themes/container.base.css.js.map +1 -1
- package/components/tree/themes/container.d.ts +1 -1
- package/components/tree/themes/container.js.map +1 -1
- package/components/tree/themes/item.base.css.js +1 -1
- package/components/tree/themes/item.base.css.js.map +1 -1
- package/components/tree/themes/item.d.ts +1 -1
- package/components/tree/themes/item.js.map +1 -1
- package/components/tree/tree-item.d.ts +62 -36
- package/components/tree/tree-item.js +198 -208
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.common.d.ts +16 -1
- package/components/tree/tree.common.js +40 -1
- package/components/tree/tree.common.js.map +1 -1
- package/components/tree/tree.d.ts +17 -23
- package/components/tree/tree.js +68 -94
- package/components/tree/tree.js.map +1 -1
- package/components/tree/tree.navigation.d.ts +39 -29
- package/components/tree/tree.navigation.js +140 -192
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/tree/tree.selection.d.ts +32 -31
- package/components/tree/tree.selection.js +184 -178
- package/components/tree/tree.selection.js.map +1 -1
- package/components/types.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +2 -3
- package/components/validation-container/validation-container.js +7 -6
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +94 -0
- package/components/virtualization/engine.js +217 -0
- package/components/virtualization/engine.js.map +1 -0
- package/components/virtualization/types.d.ts +54 -0
- package/components/virtualization/types.js +14 -0
- package/components/virtualization/types.js.map +1 -0
- package/components/virtualization/virtualization.d.ts +249 -0
- package/components/virtualization/virtualization.js +482 -0
- package/components/virtualization/virtualization.js.map +1 -0
- package/components/visually-hidden/visually-hidden.js +1 -1
- package/components/visually-hidden/visually-hidden.js.map +1 -1
- package/custom-elements.json +50649 -38832
- package/extras/chat-markdown-renderer.d.ts +1 -1
- package/extras/chat-markdown-renderer.js.map +1 -1
- package/igniteui-webcomponents.css-data.json +2 -2
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +17 -12
- package/index.js +11 -9
- package/index.js.map +1 -1
- package/internals/abort-handler.js.map +1 -0
- package/internals/context.d.ts +39 -0
- package/{components/common → internals}/context.js +2 -1
- package/internals/context.js.map +1 -0
- package/internals/controllers/adopt-styles.d.ts +76 -0
- package/internals/controllers/adopt-styles.js +173 -0
- package/internals/controllers/adopt-styles.js.map +1 -0
- package/internals/controllers/aria-projection.d.ts +144 -0
- package/internals/controllers/aria-projection.js +138 -0
- package/internals/controllers/aria-projection.js.map +1 -0
- package/{components/common → internals}/controllers/async-consumer.js +8 -7
- package/internals/controllers/async-consumer.js.map +1 -0
- package/internals/controllers/command.js.map +1 -0
- package/internals/controllers/context-provider.d.ts +48 -0
- package/internals/controllers/context-provider.js +29 -0
- package/internals/controllers/context-provider.js.map +1 -0
- package/{components/common → internals}/controllers/drag.js +8 -7
- package/internals/controllers/drag.js.map +1 -0
- package/{components/common → internals}/controllers/focus-ring.js +5 -2
- package/internals/controllers/focus-ring.js.map +1 -0
- package/{components/common → internals}/controllers/fullscreen.js +6 -3
- package/internals/controllers/fullscreen.js.map +1 -0
- package/{components/common → internals}/controllers/gestures.d.ts +1 -1
- package/{components/common → internals}/controllers/gestures.js +7 -4
- package/internals/controllers/gestures.js.map +1 -0
- package/internals/controllers/group.d.ts +64 -0
- package/internals/controllers/group.js +104 -0
- package/internals/controllers/group.js.map +1 -0
- package/{components/common → internals}/controllers/id-resolver.js +15 -21
- package/internals/controllers/id-resolver.js.map +1 -0
- package/{components/common → internals}/controllers/internals.d.ts +52 -3
- package/{components/common → internals}/controllers/internals.js +35 -0
- package/internals/controllers/internals.js.map +1 -0
- package/{components/common → internals}/controllers/key-bindings.d.ts +8 -5
- package/{components/common → internals}/controllers/key-bindings.js +46 -29
- package/internals/controllers/key-bindings.js.map +1 -0
- package/{components/common → internals}/controllers/mutation-observer.d.ts +3 -2
- package/{components/common → internals}/controllers/mutation-observer.js +24 -22
- package/internals/controllers/mutation-observer.js.map +1 -0
- package/{components/common → internals}/controllers/resize-observer.d.ts +11 -1
- package/{components/common → internals}/controllers/resize-observer.js +13 -2
- package/internals/controllers/resize-observer.js.map +1 -0
- package/{components/common → internals}/controllers/root-click.js +8 -13
- package/internals/controllers/root-click.js.map +1 -0
- package/{components/common → internals}/controllers/root-scroll.d.ts +11 -8
- package/internals/controllers/root-scroll.js +71 -0
- package/internals/controllers/root-scroll.js.map +1 -0
- package/internals/controllers/roving-focus.d.ts +72 -0
- package/internals/controllers/roving-focus.js +61 -0
- package/internals/controllers/roving-focus.js.map +1 -0
- package/{components/common → internals}/controllers/slot.d.ts +25 -1
- package/{components/common → internals}/controllers/slot.js +22 -6
- package/internals/controllers/slot.js.map +1 -0
- package/internals/controllers/toggle.d.ts +96 -0
- package/internals/controllers/toggle.js +65 -0
- package/internals/controllers/toggle.js.map +1 -0
- package/internals/date/compare.d.ts +2 -0
- package/internals/date/compare.js +23 -0
- package/internals/date/compare.js.map +1 -0
- package/internals/date/converters.d.ts +18 -0
- package/internals/date/converters.js +70 -0
- package/internals/date/converters.js.map +1 -0
- package/{components/calendar → internals/date}/model.d.ts +10 -3
- package/{components/calendar → internals/date}/model.js +29 -0
- package/internals/date/model.js.map +1 -0
- package/internals/decorators/blazorAdditionalDependencies.js.map +1 -0
- package/internals/decorators/blazorDeepImport.js.map +1 -0
- package/internals/decorators/blazorInclude.js.map +1 -0
- package/internals/decorators/blazorIndirectRender.js.map +1 -0
- package/internals/decorators/blazorSuppressComponent.js.map +1 -0
- package/internals/decorators/coerced-property.d.ts +47 -0
- package/internals/decorators/coerced-property.js +36 -0
- package/internals/decorators/coerced-property.js.map +1 -0
- package/internals/decorators/shadow-options.js.map +1 -0
- package/internals/definitions/defineAllComponents.js +153 -0
- package/internals/definitions/defineAllComponents.js.map +1 -0
- package/internals/definitions/defineComponents.js.map +1 -0
- package/internals/definitions/register.js.map +1 -0
- package/{components/common → internals}/i18n/EN/calendar.resources.js +1 -1
- package/internals/i18n/EN/calendar.resources.js.map +1 -0
- package/internals/i18n/EN/chat.resources.js.map +1 -0
- package/internals/i18n/EN/date-picker.resources.js.map +1 -0
- package/internals/i18n/EN/date-range-picker.resources.js.map +1 -0
- package/{components/common → internals}/i18n/i18n-controller.d.ts +22 -3
- package/{components/common → internals}/i18n/i18n-controller.js +28 -6
- package/internals/i18n/i18n-controller.js.map +1 -0
- package/{components/common → internals}/i18n/utils.js +1 -1
- package/internals/i18n/utils.js.map +1 -0
- package/{components/common → internals}/mixins/alert.d.ts +3 -3
- package/{components/common → internals}/mixins/alert.js +8 -6
- package/internals/mixins/alert.js.map +1 -0
- package/{components/common → internals}/mixins/combo-box.d.ts +13 -14
- package/{components/common → internals}/mixins/combo-box.js +15 -36
- package/internals/mixins/combo-box.js.map +1 -0
- package/internals/mixins/constructor.js.map +1 -0
- package/internals/mixins/event-emitter.js.map +1 -0
- package/{components/common → internals}/mixins/forms/associated-required.js +10 -19
- package/internals/mixins/forms/associated-required.js.map +1 -0
- package/{components/common → internals}/mixins/forms/associated.js +63 -38
- package/internals/mixins/forms/associated.js.map +1 -0
- package/{components/common → internals}/mixins/forms/form-transformers.d.ts +1 -1
- package/{components/common → internals}/mixins/forms/form-transformers.js +2 -2
- package/internals/mixins/forms/form-transformers.js.map +1 -0
- package/internals/mixins/forms/form-value.js.map +1 -0
- package/{components/common → internals}/mixins/forms/types.d.ts +25 -7
- package/internals/mixins/forms/types.js.map +1 -0
- package/internals/mixins/i18n.d.ts +31 -0
- package/internals/mixins/i18n.js +36 -0
- package/internals/mixins/i18n.js.map +1 -0
- package/{components/common → internals}/mixins/mask-behavior.d.ts +17 -8
- package/{components/common → internals}/mixins/mask-behavior.js +118 -31
- package/internals/mixins/mask-behavior.js.map +1 -0
- package/{components/common → internals}/mixins/option.d.ts +0 -2
- package/{components/common → internals}/mixins/option.js +5 -6
- package/internals/mixins/option.js.map +1 -0
- package/internals/part-map.js.map +1 -0
- package/{components/common → internals}/templates/input-shell.d.ts +8 -1
- package/{components/common → internals}/templates/input-shell.js +14 -4
- package/internals/templates/input-shell.js.map +1 -0
- package/{components/common → internals}/templates/masked-input.d.ts +8 -4
- package/{components/common → internals}/templates/masked-input.js +4 -3
- package/internals/templates/masked-input.js.map +1 -0
- package/internals/templates/slotted-icon.d.ts +32 -0
- package/internals/templates/slotted-icon.js +19 -0
- package/internals/templates/slotted-icon.js.map +1 -0
- package/internals/templates/toggle-shell.d.ts +46 -0
- package/internals/templates/toggle-shell.js +38 -0
- package/internals/templates/toggle-shell.js.map +1 -0
- package/internals/timing.d.ts +32 -0
- package/internals/timing.js +20 -0
- package/internals/timing.js.map +1 -0
- package/internals/utils/arrays.d.ts +53 -0
- package/internals/utils/arrays.js +31 -0
- package/internals/utils/arrays.js.map +1 -0
- package/internals/utils/dom.d.ts +114 -0
- package/internals/utils/dom.js +157 -0
- package/internals/utils/dom.js.map +1 -0
- package/internals/utils/events.d.ts +41 -0
- package/internals/utils/events.js +37 -0
- package/internals/utils/events.js.map +1 -0
- package/internals/utils/lit.d.ts +8 -0
- package/internals/utils/lit.js +15 -0
- package/internals/utils/lit.js.map +1 -0
- package/internals/utils/math.d.ts +50 -0
- package/internals/utils/math.js +38 -0
- package/internals/utils/math.js.map +1 -0
- package/internals/utils/objects.d.ts +25 -0
- package/internals/utils/objects.js +125 -0
- package/internals/utils/objects.js.map +1 -0
- package/internals/utils/strings.d.ts +44 -0
- package/internals/utils/strings.js +46 -0
- package/internals/utils/strings.js.map +1 -0
- package/internals/utils/types.d.ts +13 -0
- package/internals/utils/types.js +31 -0
- package/internals/utils/types.js.map +1 -0
- package/{components/common → internals}/validators.d.ts +24 -1
- package/{components/common → internals}/validators.js +25 -2
- package/internals/validators.js.map +1 -0
- package/package.json +15 -7
- package/themes/dark/bootstrap.css +1 -1
- package/themes/dark/fluent.css +1 -1
- package/themes/dark/indigo.css +1 -1
- package/themes/dark/material.css +1 -1
- package/themes/light/bootstrap.css +1 -1
- package/themes/light/fluent.css +1 -1
- package/themes/light/indigo.css +1 -1
- package/themes/light/material.css +1 -1
- package/theming/theming-controller.d.ts +5 -5
- package/theming/theming-controller.js.map +1 -1
- package/web-types.json +3 -3
- package/components/calendar/model.js.map +0 -1
- package/components/combo/combo-list.d.ts +0 -11
- package/components/combo/combo-list.js +0 -13
- package/components/combo/combo-list.js.map +0 -1
- package/components/common/abort-handler.js.map +0 -1
- package/components/common/context.d.ts +0 -25
- package/components/common/context.js.map +0 -1
- package/components/common/controllers/adopt-styles.d.ts +0 -124
- package/components/common/controllers/adopt-styles.js +0 -75
- package/components/common/controllers/adopt-styles.js.map +0 -1
- package/components/common/controllers/async-consumer.js.map +0 -1
- package/components/common/controllers/command.js.map +0 -1
- package/components/common/controllers/drag.js.map +0 -1
- package/components/common/controllers/focus-ring.js.map +0 -1
- package/components/common/controllers/fullscreen.js.map +0 -1
- package/components/common/controllers/gestures.js.map +0 -1
- package/components/common/controllers/id-resolver.js.map +0 -1
- package/components/common/controllers/internals.js.map +0 -1
- package/components/common/controllers/key-bindings.js.map +0 -1
- package/components/common/controllers/mutation-observer.js.map +0 -1
- package/components/common/controllers/resize-observer.js.map +0 -1
- package/components/common/controllers/root-click.js.map +0 -1
- package/components/common/controllers/root-scroll.js +0 -63
- package/components/common/controllers/root-scroll.js.map +0 -1
- package/components/common/controllers/slot.js.map +0 -1
- package/components/common/decorators/blazorAdditionalDependencies.js.map +0 -1
- package/components/common/decorators/blazorDeepImport.js.map +0 -1
- package/components/common/decorators/blazorInclude.js.map +0 -1
- package/components/common/decorators/blazorIndirectRender.js.map +0 -1
- package/components/common/decorators/blazorSuppressComponent.js.map +0 -1
- package/components/common/decorators/shadow-options.js.map +0 -1
- package/components/common/decorators/watch.d.ts +0 -5
- package/components/common/decorators/watch.js +0 -19
- package/components/common/decorators/watch.js.map +0 -1
- package/components/common/definitions/defineAllComponents.js +0 -151
- package/components/common/definitions/defineAllComponents.js.map +0 -1
- package/components/common/definitions/defineComponents.js.map +0 -1
- package/components/common/definitions/register.js.map +0 -1
- package/components/common/i18n/EN/calendar.resources.js.map +0 -1
- package/components/common/i18n/EN/chat.resources.js.map +0 -1
- package/components/common/i18n/EN/date-picker.resources.js.map +0 -1
- package/components/common/i18n/EN/date-range-picker.resources.js.map +0 -1
- package/components/common/i18n/i18n-controller.js.map +0 -1
- package/components/common/i18n/utils.js.map +0 -1
- package/components/common/mixins/alert.js.map +0 -1
- package/components/common/mixins/combo-box.js.map +0 -1
- package/components/common/mixins/constructor.js.map +0 -1
- package/components/common/mixins/event-emitter.js.map +0 -1
- package/components/common/mixins/forms/associated-required.js.map +0 -1
- package/components/common/mixins/forms/associated.js.map +0 -1
- package/components/common/mixins/forms/form-transformers.js.map +0 -1
- package/components/common/mixins/forms/form-value.js.map +0 -1
- package/components/common/mixins/forms/types.js.map +0 -1
- package/components/common/mixins/mask-behavior.js.map +0 -1
- package/components/common/mixins/option.js.map +0 -1
- package/components/common/part-map.js.map +0 -1
- package/components/common/templates/input-shell.js.map +0 -1
- package/components/common/templates/masked-input.js.map +0 -1
- package/components/common/util.d.ts +0 -196
- package/components/common/util.js +0 -390
- package/components/common/util.js.map +0 -1
- package/components/common/validators.js.map +0 -1
- package/components/icon/registry/default-map.d.ts +0 -107
- package/components/icon/registry/default-map.js +0 -25
- package/components/icon/registry/default-map.js.map +0 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js +0 -3
- package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js.map +0 -1
- package/components/radio/utils.d.ts +0 -13
- package/components/radio/utils.js +0 -37
- package/components/radio/utils.js.map +0 -1
- /package/components/{nav-drawer/themes/shared/container/nav-drawer.fluent.css.d.ts → qr-code/themes/dark/qr-code.bootstrap.css.d.ts} +0 -0
- /package/{components/common → internals}/abort-handler.d.ts +0 -0
- /package/{components/common → internals}/abort-handler.js +0 -0
- /package/{components/common → internals}/controllers/async-consumer.d.ts +0 -0
- /package/{components/common → internals}/controllers/command.d.ts +0 -0
- /package/{components/common → internals}/controllers/command.js +0 -0
- /package/{components/common → internals}/controllers/drag.d.ts +0 -0
- /package/{components/common → internals}/controllers/focus-ring.d.ts +0 -0
- /package/{components/common → internals}/controllers/fullscreen.d.ts +0 -0
- /package/{components/common → internals}/controllers/id-resolver.d.ts +0 -0
- /package/{components/common → internals}/controllers/root-click.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorAdditionalDependencies.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorAdditionalDependencies.js +0 -0
- /package/{components/common → internals}/decorators/blazorDeepImport.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorDeepImport.js +0 -0
- /package/{components/common → internals}/decorators/blazorInclude.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorInclude.js +0 -0
- /package/{components/common → internals}/decorators/blazorIndirectRender.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorIndirectRender.js +0 -0
- /package/{components/common → internals}/decorators/blazorSuppressComponent.d.ts +0 -0
- /package/{components/common → internals}/decorators/blazorSuppressComponent.js +0 -0
- /package/{components/common → internals}/decorators/shadow-options.d.ts +0 -0
- /package/{components/common → internals}/decorators/shadow-options.js +0 -0
- /package/{components/common → internals}/definitions/defineAllComponents.d.ts +0 -0
- /package/{components/common → internals}/definitions/defineComponents.d.ts +0 -0
- /package/{components/common → internals}/definitions/defineComponents.js +0 -0
- /package/{components/common → internals}/definitions/register.d.ts +0 -0
- /package/{components/common → internals}/definitions/register.js +0 -0
- /package/{components/common → internals}/i18n/EN/calendar.resources.d.ts +0 -0
- /package/{components/common → internals}/i18n/EN/chat.resources.d.ts +0 -0
- /package/{components/common → internals}/i18n/EN/chat.resources.js +0 -0
- /package/{components/common → internals}/i18n/EN/date-picker.resources.d.ts +0 -0
- /package/{components/common → internals}/i18n/EN/date-picker.resources.js +0 -0
- /package/{components/common → internals}/i18n/EN/date-range-picker.resources.d.ts +0 -0
- /package/{components/common → internals}/i18n/EN/date-range-picker.resources.js +0 -0
- /package/{components/common → internals}/i18n/utils.d.ts +0 -0
- /package/{components/common → internals}/mixins/constructor.d.ts +0 -0
- /package/{components/common → internals}/mixins/constructor.js +0 -0
- /package/{components/common → internals}/mixins/event-emitter.d.ts +0 -0
- /package/{components/common → internals}/mixins/event-emitter.js +0 -0
- /package/{components/common → internals}/mixins/forms/associated-required.d.ts +0 -0
- /package/{components/common → internals}/mixins/forms/associated.d.ts +0 -0
- /package/{components/common → internals}/mixins/forms/form-value.d.ts +0 -0
- /package/{components/common → internals}/mixins/forms/form-value.js +0 -0
- /package/{components/common → internals}/mixins/forms/types.js +0 -0
- /package/{components/common → internals}/part-map.d.ts +0 -0
- /package/{components/common → internals}/part-map.js +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ReactiveControllerHost } from 'lit';
|
|
2
|
+
import { type KeyBindingControllerOptions, type KeyBindingOptions } from './key-bindings.js';
|
|
3
|
+
type RovingFocusHost = ReactiveControllerHost & HTMLElement;
|
|
4
|
+
/**
|
|
5
|
+
* Whether an arrow axis navigates. A predicate keeps the keys bound - and
|
|
6
|
+
* their default behavior suppressed - while gating the navigation itself,
|
|
7
|
+
* for hosts that switch orientation at runtime.
|
|
8
|
+
*/
|
|
9
|
+
type RovingFocusAxis = boolean | (() => boolean);
|
|
10
|
+
type RovingFocusControllerOptions<T extends Element> = {
|
|
11
|
+
/**
|
|
12
|
+
* The keyboard-navigable items, in order, with non-interactive ones
|
|
13
|
+
* already excluded.
|
|
14
|
+
*/
|
|
15
|
+
items: () => T[];
|
|
16
|
+
/**
|
|
17
|
+
* The item navigation moves relative to - typically resolved from the
|
|
18
|
+
* focused element. Arrow navigation and activation are no-ops while nullish.
|
|
19
|
+
*/
|
|
20
|
+
current: () => T | null | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Moves focus to `item`. The host owns the focus delegation and any side
|
|
23
|
+
* effects riding along with it (scrolling, selection-follows-focus).
|
|
24
|
+
*/
|
|
25
|
+
focusItem: (item: T) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Invoked with the current item on Enter/Space, when the item is part of
|
|
28
|
+
* {@link RovingFocusControllerOptions.items}. Omit to skip the activation
|
|
29
|
+
* binding altogether.
|
|
30
|
+
*/
|
|
31
|
+
activateItem?: (item: T) => void;
|
|
32
|
+
/** Binding options for the activation keys. */
|
|
33
|
+
activateOptions?: KeyBindingOptions;
|
|
34
|
+
/**
|
|
35
|
+
* Whether ArrowLeft/ArrowRight navigate, following the writing direction.
|
|
36
|
+
* Defaults to `true`.
|
|
37
|
+
*/
|
|
38
|
+
horizontal?: RovingFocusAxis;
|
|
39
|
+
/** Whether ArrowUp/ArrowDown navigate. Defaults to `false`. */
|
|
40
|
+
vertical?: RovingFocusAxis;
|
|
41
|
+
/** Whether Home/End jump to the first/last item. Defaults to `true`. */
|
|
42
|
+
homeEnd?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* How arrow navigation treats a nullish current item:
|
|
45
|
+
* - `skip` - do nothing (default)
|
|
46
|
+
* - `wrap` - navigate from just outside the list, so "next" lands on the
|
|
47
|
+
* first item and "previous" on the last one
|
|
48
|
+
*/
|
|
49
|
+
missingCurrent?: 'skip' | 'wrap';
|
|
50
|
+
/** Options forwarded to the underlying key-bindings controller. */
|
|
51
|
+
keybindings?: KeyBindingControllerOptions;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Implements the roving keyboard navigation shared by the container
|
|
55
|
+
* components: Home/End jumps and wrapping ArrowKey moves over a flat list of
|
|
56
|
+
* enabled items, relative to the currently focused one, with the horizontal
|
|
57
|
+
* axis following the writing direction.
|
|
58
|
+
*
|
|
59
|
+
* The host supplies the item list, the current-item resolution and the focus
|
|
60
|
+
* delegation; hierarchical structures (the tree) need their own navigation.
|
|
61
|
+
*/
|
|
62
|
+
declare class RovingFocusController<T extends Element> {
|
|
63
|
+
private readonly _host;
|
|
64
|
+
private readonly _options;
|
|
65
|
+
constructor(host: RovingFocusHost, options: RovingFocusControllerOptions<T>);
|
|
66
|
+
private _focus;
|
|
67
|
+
private _move;
|
|
68
|
+
private _activate;
|
|
69
|
+
}
|
|
70
|
+
/** Creates and adds a {@link RovingFocusController} to the given host. */
|
|
71
|
+
export declare function addRovingFocusController<T extends Element>(host: RovingFocusHost, options: RovingFocusControllerOptions<T>): RovingFocusController<T>;
|
|
72
|
+
export type { RovingFocusController, RovingFocusControllerOptions };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { firstOf, isEmpty, lastOf } from '../utils/arrays.js';
|
|
2
|
+
import { isLTR } from '../utils/dom.js';
|
|
3
|
+
import { wrap } from '../utils/math.js';
|
|
4
|
+
import { isFunction } from '../utils/types.js';
|
|
5
|
+
import { addKeybindings, arrowDown, arrowLeft, arrowRight, arrowUp, endKey, homeKey, } from './key-bindings.js';
|
|
6
|
+
class RovingFocusController {
|
|
7
|
+
constructor(host, options) {
|
|
8
|
+
this._host = host;
|
|
9
|
+
this._options = options;
|
|
10
|
+
const { horizontal = true, vertical = false, homeEnd = true, activateItem, activateOptions, keybindings, } = options;
|
|
11
|
+
const bindings = addKeybindings(host, keybindings);
|
|
12
|
+
if (horizontal) {
|
|
13
|
+
bindings
|
|
14
|
+
.set(arrowLeft, () => this._move(-1, horizontal, true))
|
|
15
|
+
.set(arrowRight, () => this._move(1, horizontal, true));
|
|
16
|
+
}
|
|
17
|
+
if (vertical) {
|
|
18
|
+
bindings
|
|
19
|
+
.set(arrowUp, () => this._move(-1, vertical, false))
|
|
20
|
+
.set(arrowDown, () => this._move(1, vertical, false));
|
|
21
|
+
}
|
|
22
|
+
if (homeEnd) {
|
|
23
|
+
bindings
|
|
24
|
+
.set(homeKey, () => this._focus(firstOf(this._options.items())))
|
|
25
|
+
.set(endKey, () => this._focus(lastOf(this._options.items())));
|
|
26
|
+
}
|
|
27
|
+
if (activateItem) {
|
|
28
|
+
bindings.setActivateHandler(() => this._activate(), activateOptions);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
_focus(item) {
|
|
32
|
+
if (item) {
|
|
33
|
+
this._options.focusItem.call(this._host, item);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
_move(delta, axis, rtlAware) {
|
|
37
|
+
if (isFunction(axis) && !axis.call(this._host)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const items = this._options.items();
|
|
41
|
+
const current = this._options.current();
|
|
42
|
+
if (isEmpty(items) ||
|
|
43
|
+
(!current && this._options.missingCurrent !== 'wrap')) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const index = current ? items.indexOf(current) : -1;
|
|
47
|
+
const direction = rtlAware && !isLTR(this._host) ? -delta : delta;
|
|
48
|
+
const next = wrap(0, items.length - 1, index + direction);
|
|
49
|
+
this._focus(items[next]);
|
|
50
|
+
}
|
|
51
|
+
_activate() {
|
|
52
|
+
const current = this._options.current();
|
|
53
|
+
if (current && this._options.items().includes(current)) {
|
|
54
|
+
this._options.activateItem.call(this._host, current);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function addRovingFocusController(host, options) {
|
|
59
|
+
return new RovingFocusController(host, options);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=roving-focus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roving-focus.js","sourceRoot":"","sources":["../../../src/internals/controllers/roving-focus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,MAAM,EACN,OAAO,GAGR,MAAM,mBAAmB,CAAC;AAgE3B,MAAM,qBAAqB;IAIzB,YAAY,IAAqB,EAAE,OAAwC;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,MAAM,EACJ,UAAU,GAAG,IAAI,EACjB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,IAAI,EACd,YAAY,EACZ,eAAe,EACf,WAAW,GACZ,GAAG,OAAO,CAAC;QAEZ,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEnD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ;iBACL,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;iBACtD,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ;iBACL,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;iBACnD,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ;iBACL,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/D,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,IAAQ;QACrB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAa,EAAE,IAAqB,EAAE,QAAiB;QACnE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAExC,IACE,OAAO,CAAC,KAAK,CAAC;YACd,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,EACrD,CAAC;YACD,OAAO;QACT,CAAC;QAID,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAExC,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AAGD,MAAM,UAAU,wBAAwB,CACtC,IAAqB,EACrB,OAAwC;IAExC,OAAO,IAAI,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import type { ReactiveControllerHost } from 'lit';\nimport { firstOf, isEmpty, lastOf } from '../utils/arrays.js';\nimport { isLTR } from '../utils/dom.js';\nimport { wrap } from '../utils/math.js';\nimport { isFunction } from '../utils/types.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n endKey,\n homeKey,\n type KeyBindingControllerOptions,\n type KeyBindingOptions,\n} from './key-bindings.js';\n\ntype RovingFocusHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Whether an arrow axis navigates. A predicate keeps the keys bound - and\n * their default behavior suppressed - while gating the navigation itself,\n * for hosts that switch orientation at runtime.\n */\ntype RovingFocusAxis = boolean | (() => boolean);\n\ntype RovingFocusControllerOptions<T extends Element> = {\n /**\n * The keyboard-navigable items, in order, with non-interactive ones\n * already excluded.\n */\n items: () => T[];\n /**\n * The item navigation moves relative to - typically resolved from the\n * focused element. Arrow navigation and activation are no-ops while nullish.\n */\n current: () => T | null | undefined;\n /**\n * Moves focus to `item`. The host owns the focus delegation and any side\n * effects riding along with it (scrolling, selection-follows-focus).\n */\n focusItem: (item: T) => void;\n /**\n * Invoked with the current item on Enter/Space, when the item is part of\n * {@link RovingFocusControllerOptions.items}. Omit to skip the activation\n * binding altogether.\n */\n activateItem?: (item: T) => void;\n /** Binding options for the activation keys. */\n activateOptions?: KeyBindingOptions;\n /**\n * Whether ArrowLeft/ArrowRight navigate, following the writing direction.\n * Defaults to `true`.\n */\n horizontal?: RovingFocusAxis;\n /** Whether ArrowUp/ArrowDown navigate. Defaults to `false`. */\n vertical?: RovingFocusAxis;\n /** Whether Home/End jump to the first/last item. Defaults to `true`. */\n homeEnd?: boolean;\n /**\n * How arrow navigation treats a nullish current item:\n * - `skip` - do nothing (default)\n * - `wrap` - navigate from just outside the list, so \"next\" lands on the\n * first item and \"previous\" on the last one\n */\n missingCurrent?: 'skip' | 'wrap';\n /** Options forwarded to the underlying key-bindings controller. */\n keybindings?: KeyBindingControllerOptions;\n};\n\n/**\n * Implements the roving keyboard navigation shared by the container\n * components: Home/End jumps and wrapping ArrowKey moves over a flat list of\n * enabled items, relative to the currently focused one, with the horizontal\n * axis following the writing direction.\n *\n * The host supplies the item list, the current-item resolution and the focus\n * delegation; hierarchical structures (the tree) need their own navigation.\n */\nclass RovingFocusController<T extends Element> {\n private readonly _host: RovingFocusHost;\n private readonly _options: RovingFocusControllerOptions<T>;\n\n constructor(host: RovingFocusHost, options: RovingFocusControllerOptions<T>) {\n this._host = host;\n this._options = options;\n\n const {\n horizontal = true,\n vertical = false,\n homeEnd = true,\n activateItem,\n activateOptions,\n keybindings,\n } = options;\n\n const bindings = addKeybindings(host, keybindings);\n\n if (horizontal) {\n bindings\n .set(arrowLeft, () => this._move(-1, horizontal, true))\n .set(arrowRight, () => this._move(1, horizontal, true));\n }\n\n if (vertical) {\n bindings\n .set(arrowUp, () => this._move(-1, vertical, false))\n .set(arrowDown, () => this._move(1, vertical, false));\n }\n\n if (homeEnd) {\n bindings\n .set(homeKey, () => this._focus(firstOf(this._options.items())))\n .set(endKey, () => this._focus(lastOf(this._options.items())));\n }\n\n if (activateItem) {\n bindings.setActivateHandler(() => this._activate(), activateOptions);\n }\n }\n\n private _focus(item?: T): void {\n if (item) {\n this._options.focusItem.call(this._host, item);\n }\n }\n\n private _move(delta: -1 | 1, axis: RovingFocusAxis, rtlAware: boolean): void {\n if (isFunction(axis) && !axis.call(this._host)) {\n return;\n }\n\n const items = this._options.items();\n const current = this._options.current();\n\n if (\n isEmpty(items) ||\n (!current && this._options.missingCurrent !== 'wrap')\n ) {\n return;\n }\n\n // A current item outside the set resolves to -1 as well, wrapping the\n // navigation in from the closest list edge.\n const index = current ? items.indexOf(current) : -1;\n const direction = rtlAware && !isLTR(this._host) ? -delta : delta;\n const next = wrap(0, items.length - 1, index + direction);\n\n this._focus(items[next]);\n }\n\n private _activate(): void {\n const current = this._options.current();\n\n if (current && this._options.items().includes(current)) {\n this._options.activateItem!.call(this._host, current);\n }\n }\n}\n\n/** Creates and adds a {@link RovingFocusController} to the given host. */\nexport function addRovingFocusController<T extends Element>(\n host: RovingFocusHost,\n options: RovingFocusControllerOptions<T>\n): RovingFocusController<T> {\n return new RovingFocusController(host, options);\n}\n\nexport type { RovingFocusController, RovingFocusControllerOptions };\n"]}
|
|
@@ -9,6 +9,11 @@ type SlotQueryOptions = {
|
|
|
9
9
|
* as well as elements assigned to any other slots that are descendants of this slot. If no
|
|
10
10
|
* assigned elements are found, it returns the slot's fallback content.
|
|
11
11
|
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Mind that fallback content when checking whether a consumer projected anything:
|
|
14
|
+
* for a slot rendered as `<slot>${this.label}</slot>`, a flattened query reports
|
|
15
|
+
* the rendered `label` as assigned content even though nothing was projected.
|
|
16
|
+
*
|
|
12
17
|
* Defaults to `false`.
|
|
13
18
|
*/
|
|
14
19
|
flatten?: boolean;
|
|
@@ -39,8 +44,18 @@ declare class SlotController<T> implements ReactiveController {
|
|
|
39
44
|
private readonly _host;
|
|
40
45
|
private readonly _options;
|
|
41
46
|
private readonly _slots?;
|
|
47
|
+
private readonly _slotCache;
|
|
42
48
|
private _initialized;
|
|
43
49
|
constructor(host: ReactiveControllerHost & LitElement, options?: SlotControllerOptions<T>);
|
|
50
|
+
/**
|
|
51
|
+
* The query results are cached, since the accessors below are routinely called
|
|
52
|
+
* from a host's `render`. Only a still connected slot is served from the cache -
|
|
53
|
+
* one removed by a conditional template falls back to a fresh query.
|
|
54
|
+
*
|
|
55
|
+
* There is no slot to find before the host creates its render root, which happens
|
|
56
|
+
* when it connects. A query that comes earlier, such as one from an attribute that
|
|
57
|
+
* the parser applies on upgrade, reports no slot instead of an error.
|
|
58
|
+
*/
|
|
44
59
|
private _getSlot;
|
|
45
60
|
/**
|
|
46
61
|
* Returns an array of the assigned nodes for `slot`.
|
|
@@ -56,12 +71,21 @@ declare class SlotController<T> implements ReactiveController {
|
|
|
56
71
|
* See {@link SlotQueryOptions.flatten} and {@link SlotQueryOptions.selector} for more information.
|
|
57
72
|
*/
|
|
58
73
|
getAssignedElements<U extends Element>(slot: T, options?: SlotQueryOptions): U[];
|
|
74
|
+
/**
|
|
75
|
+
* Returns the combined text content of the nodes assigned to `slot`,
|
|
76
|
+
* trimmed and with consecutive whitespace collapsed.
|
|
77
|
+
*
|
|
78
|
+
* Useful for deriving an accessible label from projected content.
|
|
79
|
+
* See {@link SlotQueryOptions.flatten} for the `flatten` semantics.
|
|
80
|
+
*/
|
|
81
|
+
getAssignedText(slot: T, flatten?: boolean): string;
|
|
59
82
|
/**
|
|
60
83
|
* Return whether `slot` has assigned nodes.
|
|
61
84
|
*
|
|
62
85
|
* If `flatten` is set to `true`, it returns a sequence of both the nodes assigned to the queried slot,
|
|
63
86
|
* as well as nodes assigned to any other slots that are descendants of this slot. If no
|
|
64
|
-
* assigned nodes are found, it returns the slot's fallback content
|
|
87
|
+
* assigned nodes are found, it returns the slot's fallback content - so a slot with
|
|
88
|
+
* fallback content always reports as having nodes. See {@link SlotQueryOptions.flatten}.
|
|
65
89
|
*/
|
|
66
90
|
hasAssignedNodes(slot: T, flatten?: boolean): boolean;
|
|
67
91
|
/**
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { isServer, } from 'lit';
|
|
2
|
-
import { isEmpty } from '../
|
|
2
|
+
import { isEmpty } from '../utils/arrays.js';
|
|
3
|
+
import { normalizedTextContent } from '../utils/dom.js';
|
|
3
4
|
const DefaultSlot = '[default]';
|
|
4
5
|
class SlotController {
|
|
5
6
|
constructor(host, options) {
|
|
7
|
+
this._slotCache = new Map();
|
|
6
8
|
this._initialized = false;
|
|
7
9
|
this._host = host;
|
|
8
10
|
this._host.addController(this);
|
|
@@ -12,10 +14,21 @@ class SlotController {
|
|
|
12
14
|
_getSlot(slotName) {
|
|
13
15
|
if (isServer)
|
|
14
16
|
return null;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
const cached = this._slotCache.get(slotName);
|
|
18
|
+
if (cached?.isConnected) {
|
|
19
|
+
return cached;
|
|
17
20
|
}
|
|
18
|
-
|
|
21
|
+
const selector = slotName === DefaultSlot
|
|
22
|
+
? 'slot:not([name])'
|
|
23
|
+
: `slot[name="${slotName}"]`;
|
|
24
|
+
const slot = this._host.renderRoot?.querySelector(selector) ?? null;
|
|
25
|
+
if (slot) {
|
|
26
|
+
this._slotCache.set(slotName, slot);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this._slotCache.delete(slotName);
|
|
30
|
+
}
|
|
31
|
+
return slot;
|
|
19
32
|
}
|
|
20
33
|
getAssignedNodes(slot, flatten = false) {
|
|
21
34
|
return this._getSlot(slot)?.assignedNodes({ flatten }) ?? [];
|
|
@@ -28,6 +41,9 @@ class SlotController {
|
|
|
28
41
|
? elements.filter((e) => e.matches(options.selector))
|
|
29
42
|
: elements;
|
|
30
43
|
}
|
|
44
|
+
getAssignedText(slot, flatten = false) {
|
|
45
|
+
return normalizedTextContent(this.getAssignedNodes(slot, flatten));
|
|
46
|
+
}
|
|
31
47
|
hasAssignedNodes(slot, flatten = false) {
|
|
32
48
|
return !isEmpty(this.getAssignedNodes(slot, flatten));
|
|
33
49
|
}
|
|
@@ -38,8 +54,8 @@ class SlotController {
|
|
|
38
54
|
const slot = event.target;
|
|
39
55
|
const name = slot.name;
|
|
40
56
|
const isDefault = name === '';
|
|
41
|
-
|
|
42
|
-
|
|
57
|
+
const observed = isDefault ? DefaultSlot : name;
|
|
58
|
+
if (!this._slots || this._slots.has(observed)) {
|
|
43
59
|
this._options.onChange?.call(this._host, {
|
|
44
60
|
slot: name,
|
|
45
61
|
isDefault,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.js","sourceRoot":"","sources":["../../../src/internals/controllers/slot.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isServer,\n type LitElement,\n type ReactiveController,\n type ReactiveControllerHost,\n} from 'lit';\nimport { isEmpty } from '../utils/arrays.js';\nimport { normalizedTextContent } from '../utils/dom.js';\n\ntype InferSlotNames<T> = T extends readonly (infer U)[] ? U : never;\n\n/**\n * Additional query options for the slot controller methods.\n */\ntype SlotQueryOptions = {\n /**\n * If set to `true`, it returns a sequence of both the elements assigned to the queried slot,\n * as well as elements assigned to any other slots that are descendants of this slot. If no\n * assigned elements are found, it returns the slot's fallback content.\n *\n * @remarks\n * Mind that fallback content when checking whether a consumer projected anything:\n * for a slot rendered as `<slot>${this.label}</slot>`, a flattened query reports\n * the rendered `label` as assigned content even though nothing was projected.\n *\n * Defaults to `false`.\n */\n flatten?: boolean;\n /**\n * CSS selector used to filter the elements returned.\n */\n selector?: string;\n};\n\ntype SlotChangeCallback<T> = (\n parameters: SlotChangeCallbackParameters<T>\n) => void;\n\ntype SlotChangeCallbackParameters<T> = {\n /** The slot name that has its assigned nodes changed. */\n slot: T;\n /** `true` if the slot is the default slot. */\n isDefault: boolean;\n /** `true` if the callback handler is called for the initial host update. */\n isInitial: boolean;\n};\n\ntype SlotControllerOptions<T> = {\n /** An iterable collection of slot names to observe. */\n slots?: Iterable<T>;\n /** Callback function which is invoked a slot's assigned nodes change. */\n onChange?: SlotChangeCallback<T>;\n /** If set to `true`, the `onChange` callback is invoked once after the host is updated for the first time. */\n initial?: boolean;\n};\n\nconst DefaultSlot = '[default]';\n\nclass SlotController<T> implements ReactiveController {\n private readonly _host: ReactiveControllerHost & LitElement;\n private readonly _options: SlotControllerOptions<T>;\n private readonly _slots?: Set<T>;\n private readonly _slotCache = new Map<T | undefined, HTMLSlotElement>();\n private _initialized = false;\n\n constructor(\n host: ReactiveControllerHost & LitElement,\n options?: SlotControllerOptions<T>\n ) {\n this._host = host;\n this._host.addController(this);\n\n this._options = { ...options };\n this._slots = options?.slots ? new Set(options.slots) : undefined;\n }\n\n /**\n * The query results are cached, since the accessors below are routinely called\n * from a host's `render`. Only a still connected slot is served from the cache -\n * one removed by a conditional template falls back to a fresh query.\n *\n * There is no slot to find before the host creates its render root, which happens\n * when it connects. A query that comes earlier, such as one from an attribute that\n * the parser applies on upgrade, reports no slot instead of an error.\n */\n private _getSlot(slotName?: T): HTMLSlotElement | null {\n if (isServer) return null;\n\n const cached = this._slotCache.get(slotName);\n\n if (cached?.isConnected) {\n return cached;\n }\n\n const selector =\n slotName === DefaultSlot\n ? 'slot:not([name])'\n : `slot[name=\"${slotName}\"]`;\n const slot =\n this._host.renderRoot?.querySelector<HTMLSlotElement>(selector) ?? null;\n\n if (slot) {\n this._slotCache.set(slotName, slot);\n } else {\n this._slotCache.delete(slotName);\n }\n\n return slot;\n }\n\n /**\n * Returns an array of the assigned nodes for `slot`.\n *\n * If `flatten` is set to `true`, it returns a sequence of both the nodes assigned to the queried slot,\n * as well as nodes assigned to any other slots that are descendants of this slot. If no\n * assigned nodes are found, it returns the slot's fallback content.\n */\n public getAssignedNodes(slot: T, flatten = false): Node[] {\n return this._getSlot(slot)?.assignedNodes({ flatten }) ?? [];\n }\n\n /**\n * Returns an array of the assigned elements for `slot` with additional `options`.\n *\n * See {@link SlotQueryOptions.flatten} and {@link SlotQueryOptions.selector} for more information.\n */\n public getAssignedElements<U extends Element>(\n slot: T,\n options?: SlotQueryOptions\n ): U[] {\n const elements =\n (this._getSlot(slot)?.assignedElements({\n flatten: options?.flatten,\n }) as U[]) ?? [];\n\n return options?.selector\n ? elements.filter((e) => e.matches(options.selector!))\n : elements;\n }\n\n /**\n * Returns the combined text content of the nodes assigned to `slot`,\n * trimmed and with consecutive whitespace collapsed.\n *\n * Useful for deriving an accessible label from projected content.\n * See {@link SlotQueryOptions.flatten} for the `flatten` semantics.\n */\n public getAssignedText(slot: T, flatten = false): string {\n return normalizedTextContent(this.getAssignedNodes(slot, flatten));\n }\n\n /**\n * Return whether `slot` has assigned nodes.\n *\n * If `flatten` is set to `true`, it returns a sequence of both the nodes assigned to the queried slot,\n * as well as nodes assigned to any other slots that are descendants of this slot. If no\n * assigned nodes are found, it returns the slot's fallback content - so a slot with\n * fallback content always reports as having nodes. See {@link SlotQueryOptions.flatten}.\n */\n public hasAssignedNodes(slot: T, flatten = false): boolean {\n return !isEmpty(this.getAssignedNodes(slot, flatten));\n }\n\n /**\n * Return whether `slot` has assigned elements accepting additional `options`.\n *\n * See {@link SlotQueryOptions.flatten} and {@link SlotQueryOptions.selector} for more information.\n */\n public hasAssignedElements(slot: T, options?: SlotQueryOptions): boolean {\n return !isEmpty(this.getAssignedElements(slot, options));\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n const slot = event.target as HTMLSlotElement;\n const name = slot.name as T;\n const isDefault = name === '';\n const observed = isDefault ? (DefaultSlot as T) : name;\n\n if (!this._slots || this._slots.has(observed)) {\n this._options.onChange?.call(this._host, {\n slot: name,\n isDefault,\n isInitial: false,\n });\n this._host.requestUpdate();\n }\n }\n\n /** @internal */\n public hostConnected(): void {\n this._host.renderRoot.addEventListener('slotchange', this);\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._host.renderRoot.removeEventListener('slotchange', this);\n }\n\n /** @internal */\n public hostUpdated(): void {\n if (!this._initialized && this._options.initial) {\n this._initialized = true;\n this._options.onChange?.call(this._host, {\n slot: '<initial>' as T,\n isDefault: false,\n isInitial: true,\n });\n }\n }\n}\n\nfunction addSlotController<K extends readonly string[]>(\n host: ReactiveControllerHost,\n options?: SlotControllerOptions<InferSlotNames<K>> & {\n slots?: K;\n }\n): SlotController<InferSlotNames<K>> {\n return new SlotController(host as ReactiveControllerHost & LitElement, {\n ...options,\n slots: options?.slots as Iterable<InferSlotNames<K>>,\n });\n}\n\nfunction setSlots<const T extends readonly string[]>(...slots: T) {\n return [DefaultSlot, ...slots] as const;\n}\n\nexport type {\n InferSlotNames,\n SlotChangeCallback,\n SlotChangeCallbackParameters,\n SlotController,\n SlotControllerOptions,\n SlotQueryOptions,\n};\nexport { addSlotController, DefaultSlot, setSlots };\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { LitElement } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* The events emitted by a {@link ToggleController}.
|
|
4
|
+
*
|
|
5
|
+
* Include (a subset of) these in a host's event map to document them.
|
|
6
|
+
*/
|
|
7
|
+
export interface ToggleEventMap {
|
|
8
|
+
/** Emitted before opening. Cancelable - preventing it aborts the sequence. */
|
|
9
|
+
igcOpening: CustomEvent<unknown>;
|
|
10
|
+
/** Emitted after the host has opened and its transition has completed. */
|
|
11
|
+
igcOpened: CustomEvent<unknown>;
|
|
12
|
+
/** Emitted before closing. Cancelable - preventing it aborts the sequence. */
|
|
13
|
+
igcClosing: CustomEvent<unknown>;
|
|
14
|
+
/** Emitted after the host has closed and its transition has completed. */
|
|
15
|
+
igcClosed: CustomEvent<unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A toggleable host must expose the event-emitter mixin's `emitEvent` -
|
|
19
|
+
* extend {@link ../mixins/event-emitter.js#EventEmitterMixin | EventEmitterMixin}
|
|
20
|
+
* with (a subset of) the {@link ToggleEventMap}.
|
|
21
|
+
*/
|
|
22
|
+
type ToggleHost = LitElement & {
|
|
23
|
+
open: boolean;
|
|
24
|
+
emitEvent(name: string, init?: CustomEventInit): boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Runs the host's visual transition to the requested state - flipping `open`,
|
|
28
|
+
* playing animations, awaiting updates - in whatever order the host needs.
|
|
29
|
+
*
|
|
30
|
+
* Resolving `false` marks the transition as superseded (an animation was
|
|
31
|
+
* interrupted by a newer one), which skips the trailing "-ed" event.
|
|
32
|
+
*/
|
|
33
|
+
type ToggleTransitionFunction = (open: boolean) => Promise<boolean> | boolean;
|
|
34
|
+
type ToggleControllerOptions = {
|
|
35
|
+
/**
|
|
36
|
+
* The host transition. When omitted, the controller flips `host.open` itself
|
|
37
|
+
* and the transition always counts as completed.
|
|
38
|
+
*/
|
|
39
|
+
transition?: ToggleTransitionFunction;
|
|
40
|
+
/** Factory for the `detail` payload of the emitted events. */
|
|
41
|
+
detail?: () => unknown;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Implements the open/close choreography shared by every toggleable component:
|
|
45
|
+
*
|
|
46
|
+
* 1. Bail when the host is already in the requested state.
|
|
47
|
+
* 2. When emitting, fire the cancelable `igcOpening`/`igcClosing` event and
|
|
48
|
+
* bail if the consumer prevented it.
|
|
49
|
+
* 3. Run the host transition.
|
|
50
|
+
* 4. When emitting and the transition completed, await the host update and
|
|
51
|
+
* fire the `igcOpened`/`igcClosed` event.
|
|
52
|
+
*
|
|
53
|
+
* The host keeps its public `open` property, `show()`/`hide()`/`toggle()`
|
|
54
|
+
* methods and event documentation, and delegates to the controller.
|
|
55
|
+
*
|
|
56
|
+
* Unlike the other controllers of this directory it is not registered with the
|
|
57
|
+
* host - it drives the host on demand and has no life-cycle of its own.
|
|
58
|
+
*/
|
|
59
|
+
declare class ToggleController {
|
|
60
|
+
private readonly _host;
|
|
61
|
+
private readonly _options;
|
|
62
|
+
/** The target of an in-flight operation - a transition may flip `host.open` only at its end. */
|
|
63
|
+
private _pending?;
|
|
64
|
+
/** Bumped per operation, so a superseded one can bail out instead of finishing. */
|
|
65
|
+
private _generation;
|
|
66
|
+
constructor(host: ToggleHost, options?: ToggleControllerOptions);
|
|
67
|
+
/**
|
|
68
|
+
* Events go through the host's `emitEvent` - it is the choke point
|
|
69
|
+
* consumers and framework wrappers observe.
|
|
70
|
+
*/
|
|
71
|
+
private _emit;
|
|
72
|
+
private _setOpenState;
|
|
73
|
+
/**
|
|
74
|
+
* Opens the host. When `emitEvents` is true, wraps the transition in
|
|
75
|
+
* `igcOpening`/`igcOpened` events.
|
|
76
|
+
*
|
|
77
|
+
* Returns `false` when the host was already open (or heading there), the
|
|
78
|
+
* opening event was canceled, or the operation was superseded - either by the
|
|
79
|
+
* transition reporting itself interrupted or by a newer request.
|
|
80
|
+
*/
|
|
81
|
+
show(emitEvents?: boolean): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Closes the host. When `emitEvents` is true, wraps the transition in
|
|
84
|
+
* `igcClosing`/`igcClosed` events.
|
|
85
|
+
*
|
|
86
|
+
* Returns `false` when the host was already closed (or heading there), the
|
|
87
|
+
* closing event was canceled, or the operation was superseded - either by the
|
|
88
|
+
* transition reporting itself interrupted or by a newer request.
|
|
89
|
+
*/
|
|
90
|
+
hide(emitEvents?: boolean): Promise<boolean>;
|
|
91
|
+
/** Opens or closes the host based on its current state. */
|
|
92
|
+
toggle(emitEvents?: boolean): Promise<boolean>;
|
|
93
|
+
}
|
|
94
|
+
/** Creates and adds a {@link ToggleController} to the given host. */
|
|
95
|
+
export declare function addToggleController(host: ToggleHost, options?: ToggleControllerOptions): ToggleController;
|
|
96
|
+
export type { ToggleController, ToggleControllerOptions, ToggleHost };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
class ToggleController {
|
|
2
|
+
constructor(host, options) {
|
|
3
|
+
this._generation = 0;
|
|
4
|
+
this._host = host;
|
|
5
|
+
this._options = { ...options };
|
|
6
|
+
}
|
|
7
|
+
_emit(name, cancelable) {
|
|
8
|
+
const host = this._host;
|
|
9
|
+
const detail = this._options.detail?.call(host);
|
|
10
|
+
return host.emitEvent(name, {
|
|
11
|
+
...(cancelable && { cancelable }),
|
|
12
|
+
...(detail !== undefined && { detail }),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async _setOpenState(open, emitEvents) {
|
|
16
|
+
const host = this._host;
|
|
17
|
+
const { transition } = this._options;
|
|
18
|
+
if ((this._pending ?? host.open) === open) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (emitEvents && !this._emit(open ? 'igcOpening' : 'igcClosing', true)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const generation = ++this._generation;
|
|
25
|
+
this._pending = open;
|
|
26
|
+
let completed = true;
|
|
27
|
+
try {
|
|
28
|
+
if (transition) {
|
|
29
|
+
completed = (await transition.call(host, open)) !== false;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
host.open = open;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
if (generation === this._generation) {
|
|
37
|
+
this._pending = undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (generation !== this._generation) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (emitEvents && completed) {
|
|
44
|
+
await host.updateComplete;
|
|
45
|
+
if (generation !== this._generation) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
this._emit(open ? 'igcOpened' : 'igcClosed', false);
|
|
49
|
+
}
|
|
50
|
+
return completed;
|
|
51
|
+
}
|
|
52
|
+
show(emitEvents = false) {
|
|
53
|
+
return this._setOpenState(true, emitEvents);
|
|
54
|
+
}
|
|
55
|
+
hide(emitEvents = false) {
|
|
56
|
+
return this._setOpenState(false, emitEvents);
|
|
57
|
+
}
|
|
58
|
+
toggle(emitEvents = false) {
|
|
59
|
+
return this._host.open ? this.hide(emitEvents) : this.show(emitEvents);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function addToggleController(host, options) {
|
|
63
|
+
return new ToggleController(host, options);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=toggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../../src/internals/controllers/toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LitElement } from 'lit';\n\n/**\n * The events emitted by a {@link ToggleController}.\n *\n * Include (a subset of) these in a host's event map to document them.\n */\nexport interface ToggleEventMap {\n /** Emitted before opening. Cancelable - preventing it aborts the sequence. */\n igcOpening: CustomEvent<unknown>;\n /** Emitted after the host has opened and its transition has completed. */\n igcOpened: CustomEvent<unknown>;\n /** Emitted before closing. Cancelable - preventing it aborts the sequence. */\n igcClosing: CustomEvent<unknown>;\n /** Emitted after the host has closed and its transition has completed. */\n igcClosed: CustomEvent<unknown>;\n}\n\n/**\n * A toggleable host must expose the event-emitter mixin's `emitEvent` -\n * extend {@link ../mixins/event-emitter.js#EventEmitterMixin | EventEmitterMixin}\n * with (a subset of) the {@link ToggleEventMap}.\n */\ntype ToggleHost = LitElement & {\n open: boolean;\n emitEvent(name: string, init?: CustomEventInit): boolean;\n};\n\n/**\n * Runs the host's visual transition to the requested state - flipping `open`,\n * playing animations, awaiting updates - in whatever order the host needs.\n *\n * Resolving `false` marks the transition as superseded (an animation was\n * interrupted by a newer one), which skips the trailing \"-ed\" event.\n */\ntype ToggleTransitionFunction = (open: boolean) => Promise<boolean> | boolean;\n\ntype ToggleControllerOptions = {\n /**\n * The host transition. When omitted, the controller flips `host.open` itself\n * and the transition always counts as completed.\n */\n transition?: ToggleTransitionFunction;\n /** Factory for the `detail` payload of the emitted events. */\n detail?: () => unknown;\n};\n\n/**\n * Implements the open/close choreography shared by every toggleable component:\n *\n * 1. Bail when the host is already in the requested state.\n * 2. When emitting, fire the cancelable `igcOpening`/`igcClosing` event and\n * bail if the consumer prevented it.\n * 3. Run the host transition.\n * 4. When emitting and the transition completed, await the host update and\n * fire the `igcOpened`/`igcClosed` event.\n *\n * The host keeps its public `open` property, `show()`/`hide()`/`toggle()`\n * methods and event documentation, and delegates to the controller.\n *\n * Unlike the other controllers of this directory it is not registered with the\n * host - it drives the host on demand and has no life-cycle of its own.\n */\nclass ToggleController {\n private readonly _host: ToggleHost;\n private readonly _options: ToggleControllerOptions;\n\n /** The target of an in-flight operation - a transition may flip `host.open` only at its end. */\n private _pending?: boolean;\n\n /** Bumped per operation, so a superseded one can bail out instead of finishing. */\n private _generation = 0;\n\n constructor(host: ToggleHost, options?: ToggleControllerOptions) {\n this._host = host;\n this._options = { ...options };\n }\n\n /**\n * Events go through the host's `emitEvent` - it is the choke point\n * consumers and framework wrappers observe.\n */\n private _emit(name: keyof ToggleEventMap, cancelable: boolean): boolean {\n const host = this._host;\n const detail = this._options.detail?.call(host);\n\n // Both keys are omitted rather than passed as falsy, so that `emitEvent`\n // applies its own defaults and the init of a plain event stays empty.\n return host.emitEvent(name, {\n ...(cancelable && { cancelable }),\n ...(detail !== undefined && { detail }),\n });\n }\n\n private async _setOpenState(\n open: boolean,\n emitEvents: boolean\n ): Promise<boolean> {\n const host = this._host;\n const { transition } = this._options;\n\n if ((this._pending ?? host.open) === open) {\n return false;\n }\n\n if (emitEvents && !this._emit(open ? 'igcOpening' : 'igcClosing', true)) {\n return false;\n }\n\n const generation = ++this._generation;\n this._pending = open;\n\n // The default transition runs synchronously so the state flip - and the\n // `updateComplete` subscription below - happen within the caller's own\n // microtask, exactly as if the host had flipped the property itself.\n let completed = true;\n try {\n if (transition) {\n completed = (await transition.call(host, open)) !== false;\n } else {\n host.open = open;\n }\n } finally {\n // A newer operation owns the pending state from here on.\n if (generation === this._generation) {\n this._pending = undefined;\n }\n }\n\n if (generation !== this._generation) {\n return false;\n }\n\n if (emitEvents && completed) {\n await host.updateComplete;\n\n // A newer operation may have taken over while the update settled.\n if (generation !== this._generation) {\n return false;\n }\n\n this._emit(open ? 'igcOpened' : 'igcClosed', false);\n }\n\n return completed;\n }\n\n /*\n * The methods below deliberately return the underlying promise instead of\n * being `async` - every `async` wrapper that returns a promise costs extra\n * microtask hops on resolution, which shifts the timing of caller code\n * (e.g. focus management) relative to `updateComplete` subscribers.\n */\n\n /**\n * Opens the host. When `emitEvents` is true, wraps the transition in\n * `igcOpening`/`igcOpened` events.\n *\n * Returns `false` when the host was already open (or heading there), the\n * opening event was canceled, or the operation was superseded - either by the\n * transition reporting itself interrupted or by a newer request.\n */\n public show(emitEvents = false): Promise<boolean> {\n return this._setOpenState(true, emitEvents);\n }\n\n /**\n * Closes the host. When `emitEvents` is true, wraps the transition in\n * `igcClosing`/`igcClosed` events.\n *\n * Returns `false` when the host was already closed (or heading there), the\n * closing event was canceled, or the operation was superseded - either by the\n * transition reporting itself interrupted or by a newer request.\n */\n public hide(emitEvents = false): Promise<boolean> {\n return this._setOpenState(false, emitEvents);\n }\n\n /** Opens or closes the host based on its current state. */\n public toggle(emitEvents = false): Promise<boolean> {\n return this._host.open ? this.hide(emitEvents) : this.show(emitEvents);\n }\n}\n\n/** Creates and adds a {@link ToggleController} to the given host. */\nexport function addToggleController(\n host: ToggleHost,\n options?: ToggleControllerOptions\n): ToggleController {\n return new ToggleController(host, options);\n}\n\nexport type { ToggleController, ToggleControllerOptions, ToggleHost };\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function compareDates(value, boundary, comparator, includeTime, includeDate) {
|
|
2
|
+
if (includeTime && includeDate) {
|
|
3
|
+
return comparator(value.getTime(), boundary.getTime());
|
|
4
|
+
}
|
|
5
|
+
const v = new Date(value.getTime());
|
|
6
|
+
const b = new Date(boundary.getTime());
|
|
7
|
+
if (!includeTime) {
|
|
8
|
+
v.setHours(0, 0, 0, 0);
|
|
9
|
+
b.setHours(0, 0, 0, 0);
|
|
10
|
+
}
|
|
11
|
+
if (!includeDate) {
|
|
12
|
+
v.setFullYear(0, 0, 0);
|
|
13
|
+
b.setFullYear(0, 0, 0);
|
|
14
|
+
}
|
|
15
|
+
return comparator(v.getTime(), b.getTime());
|
|
16
|
+
}
|
|
17
|
+
export function isDateExceedingMax(value, maxValue, includeTime = true, includeDate = true) {
|
|
18
|
+
return compareDates(value, maxValue, (a, b) => a > b, includeTime, includeDate);
|
|
19
|
+
}
|
|
20
|
+
export function isDateLessThanMin(value, minValue, includeTime = true, includeDate = true) {
|
|
21
|
+
return compareDates(value, minValue, (a, b) => a < b, includeTime, includeDate);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/internals/date/compare.ts"],"names":[],"mappings":"AACA,SAAS,YAAY,CACnB,KAAW,EACX,QAAc,EACd,UAA6C,EAC7C,WAAoB,EACpB,WAAoB;IAEpB,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAW,EACX,QAAc,EACd,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,IAAI;IAElB,OAAO,YAAY,CACjB,KAAK,EACL,QAAQ,EACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EACf,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAW,EACX,QAAc,EACd,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,IAAI;IAElB,OAAO,YAAY,CACjB,KAAK,EACL,QAAQ,EACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EACf,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC","sourcesContent":["/** Compares two dates, optionally ignoring their time or their date portion. */\nfunction compareDates(\n value: Date,\n boundary: Date,\n comparator: (a: number, b: number) => boolean,\n includeTime: boolean,\n includeDate: boolean\n): boolean {\n if (includeTime && includeDate) {\n return comparator(value.getTime(), boundary.getTime());\n }\n\n const v = new Date(value.getTime());\n const b = new Date(boundary.getTime());\n\n if (!includeTime) {\n v.setHours(0, 0, 0, 0);\n b.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n v.setFullYear(0, 0, 0);\n b.setFullYear(0, 0, 0);\n }\n\n return comparator(v.getTime(), b.getTime());\n}\n\nexport function isDateExceedingMax(\n value: Date,\n maxValue: Date,\n includeTime = true,\n includeDate = true\n): boolean {\n return compareDates(\n value,\n maxValue,\n (a, b) => a > b,\n includeTime,\n includeDate\n );\n}\n\nexport function isDateLessThanMin(\n value: Date,\n minValue: Date,\n includeTime = true,\n includeDate = true\n): boolean {\n return compareDates(\n value,\n minValue,\n (a, b) => a < b,\n includeTime,\n includeDate\n );\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DateRangeValue } from '../../components/types.js';
|
|
2
|
+
/** Whether `value` is a `Date` holding a valid time. */
|
|
3
|
+
export declare function isValidDate(value: unknown): value is Date;
|
|
4
|
+
/** Converts `value` to a `Date`, or to `null` when it is empty or cannot be parsed. */
|
|
5
|
+
export declare function convertToDate(value?: Date | string | null): Date | null;
|
|
6
|
+
/**
|
|
7
|
+
* Converts a comma-separated string of ISO 8601 dates, or an array of dates and ISO 8601
|
|
8
|
+
* strings, into an array of `Date` objects, dropping the ones which cannot be parsed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function convertToDates(value?: (Date | string)[] | string | null): Date[] | null;
|
|
11
|
+
/**
|
|
12
|
+
* Converts `value` to a `DateRangeValue`, parsing a string as JSON and truncating the
|
|
13
|
+
* time of both endpoints. Malformed input converts to `null` rather than throwing, since
|
|
14
|
+
* this runs as an attribute converter.
|
|
15
|
+
*/
|
|
16
|
+
export declare function convertToDateRange(value?: DateRangeValue | string | null): DateRangeValue | null;
|
|
17
|
+
/** Converts a `Date` to an ISO 8601 string. */
|
|
18
|
+
export declare function getDateFormValue(value: Date | null): string | null;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { isPlainObject, isString } from '../utils/types.js';
|
|
2
|
+
import { CalendarDay, truncateTime } from './model.js';
|
|
3
|
+
const ISO_DATE_PATTERN = /^\d{4}/;
|
|
4
|
+
const TIME_PATTERN = /^\d{2}:\d{2}/;
|
|
5
|
+
export function isValidDate(value) {
|
|
6
|
+
return value instanceof Date && !Number.isNaN(value.getTime());
|
|
7
|
+
}
|
|
8
|
+
function getValidDate(date) {
|
|
9
|
+
return isValidDate(date) ? date : null;
|
|
10
|
+
}
|
|
11
|
+
function parseISODate(value) {
|
|
12
|
+
const string = value.trim();
|
|
13
|
+
if (ISO_DATE_PATTERN.test(string)) {
|
|
14
|
+
const timeComponent = !string.includes('T') ? 'T00:00:00' : '';
|
|
15
|
+
return getValidDate(new Date(`${string}${timeComponent}`));
|
|
16
|
+
}
|
|
17
|
+
if (TIME_PATTERN.test(string)) {
|
|
18
|
+
const today = CalendarDay.today;
|
|
19
|
+
const month = `${today.month + 1}`.padStart(2, '0');
|
|
20
|
+
const date = `${today.date}`.padStart(2, '0');
|
|
21
|
+
return getValidDate(new Date(`${today.year}-${month}-${date}T${string}`));
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export function convertToDate(value) {
|
|
26
|
+
if (!value) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return isString(value) ? parseISODate(value) : getValidDate(value);
|
|
30
|
+
}
|
|
31
|
+
export function convertToDates(value) {
|
|
32
|
+
if (!value) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const values = [];
|
|
36
|
+
const sources = isString(value) ? value.split(',') : value;
|
|
37
|
+
for (const source of sources) {
|
|
38
|
+
const trimmed = isString(source) ? source.trim() : source;
|
|
39
|
+
const date = convertToDate(trimmed);
|
|
40
|
+
if (date) {
|
|
41
|
+
values.push(date);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return values;
|
|
45
|
+
}
|
|
46
|
+
export function convertToDateRange(value) {
|
|
47
|
+
if (!value) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (!isString(value)) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
let parsed;
|
|
54
|
+
try {
|
|
55
|
+
parsed = JSON.parse(value);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (!isPlainObject(parsed)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const start = convertToDate(parsed.start);
|
|
64
|
+
const end = convertToDate(parsed.end);
|
|
65
|
+
return { start: truncateTime(start), end: truncateTime(end) };
|
|
66
|
+
}
|
|
67
|
+
export function getDateFormValue(value) {
|
|
68
|
+
return value ? value.toISOString() : null;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converters.js","sourceRoot":"","sources":["../../../src/internals/date/converters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAGlC,MAAM,YAAY,GAAG,cAAc,CAAC;AAGpC,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,IAAU;IAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAGD,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CAAC,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9C,OAAO,YAAY,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,KAA4B;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAMD,MAAM,UAAU,cAAc,CAC5B,KAAyC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAW,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE3D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,kBAAkB,CAChC,KAAsC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAA6B,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,GAA2B,CAAC,CAAC;IAE9D,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC","sourcesContent":["import type { DateRangeValue } from '../../components/types.js';\nimport { isPlainObject, isString } from '../utils/types.js';\nimport { CalendarDay, truncateTime } from './model.js';\n\n/** Matches a string beginning with a four digit year, which is left to `Date` to parse. */\nconst ISO_DATE_PATTERN = /^\\d{4}/;\n\n/** Matches a time only string - `HH:MM` optionally followed by seconds and milliseconds. */\nconst TIME_PATTERN = /^\\d{2}:\\d{2}/;\n\n/** Whether `value` is a `Date` holding a valid time. */\nexport function isValidDate(value: unknown): value is Date {\n return value instanceof Date && !Number.isNaN(value.getTime());\n}\n\nfunction getValidDate(date: Date): Date | null {\n return isValidDate(date) ? date : null;\n}\n\n/** Parses an ISO 8601 date, or a time only string against the current date. */\nfunction parseISODate(value: string): Date | null {\n const string = value.trim();\n\n if (ISO_DATE_PATTERN.test(string)) {\n const timeComponent = !string.includes('T') ? 'T00:00:00' : '';\n return getValidDate(new Date(`${string}${timeComponent}`));\n }\n\n if (TIME_PATTERN.test(string)) {\n const today = CalendarDay.today;\n const month = `${today.month + 1}`.padStart(2, '0');\n const date = `${today.date}`.padStart(2, '0');\n\n return getValidDate(new Date(`${today.year}-${month}-${date}T${string}`));\n }\n\n return null;\n}\n\n/** Converts `value` to a `Date`, or to `null` when it is empty or cannot be parsed. */\nexport function convertToDate(value?: Date | string | null): Date | null {\n if (!value) {\n return null;\n }\n\n return isString(value) ? parseISODate(value) : getValidDate(value);\n}\n\n/**\n * Converts a comma-separated string of ISO 8601 dates, or an array of dates and ISO 8601\n * strings, into an array of `Date` objects, dropping the ones which cannot be parsed.\n */\nexport function convertToDates(\n value?: (Date | string)[] | string | null\n): Date[] | null {\n if (!value) {\n return null;\n }\n\n const values: Date[] = [];\n const sources = isString(value) ? value.split(',') : value;\n\n for (const source of sources) {\n const trimmed = isString(source) ? source.trim() : source;\n const date = convertToDate(trimmed);\n if (date) {\n values.push(date);\n }\n }\n\n return values;\n}\n\n/**\n * Converts `value` to a `DateRangeValue`, parsing a string as JSON and truncating the\n * time of both endpoints. Malformed input converts to `null` rather than throwing, since\n * this runs as an attribute converter.\n */\nexport function convertToDateRange(\n value?: DateRangeValue | string | null\n): DateRangeValue | null {\n if (!value) {\n return null;\n }\n\n if (!isString(value)) {\n return value;\n }\n\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!isPlainObject(parsed)) {\n return null;\n }\n\n const start = convertToDate(parsed.start as Date | string | null);\n const end = convertToDate(parsed.end as Date | string | null);\n\n return { start: truncateTime(start), end: truncateTime(end) };\n}\n\n/** Converts a `Date` to an ISO 8601 string. */\nexport function getDateFormValue(value: Date | null): string | null {\n return value ? value.toISOString() : null;\n}\n"]}
|
|
@@ -13,6 +13,15 @@ type CalendarDayParams = {
|
|
|
13
13
|
};
|
|
14
14
|
export declare const DAYS_IN_WEEK = 7;
|
|
15
15
|
export declare function toCalendarDay(date: DayParameter): CalendarDay;
|
|
16
|
+
/** Null-preserving {@link toCalendarDay}: empty values convert to `null`. */
|
|
17
|
+
export declare function toCalendarDayOrNull(date?: DayParameter | null): CalendarDay | null;
|
|
18
|
+
/** Truncates the time portion of `date`, passing empty values through as `null`. */
|
|
19
|
+
export declare function truncateTime(date?: Date | null): Date | null;
|
|
20
|
+
/**
|
|
21
|
+
* Yields the days between `start` and `end`, stepping by `unit` and stopping short of
|
|
22
|
+
* `end` unless `inclusive` is set.
|
|
23
|
+
*/
|
|
24
|
+
export declare function calendarRange(options: CalendarRangeParams): Generator<CalendarDay, void, unknown>;
|
|
16
25
|
export declare class CalendarDay {
|
|
17
26
|
private readonly _date;
|
|
18
27
|
/** Constructs and returns the current day. */
|
|
@@ -33,9 +42,7 @@ export declare class CalendarDay {
|
|
|
33
42
|
constructor(args: CalendarDayParams);
|
|
34
43
|
/** Returns a copy of this instance. */
|
|
35
44
|
clone(): CalendarDay;
|
|
36
|
-
/**
|
|
37
|
-
* Returns a new instance with values replaced.
|
|
38
|
-
*/
|
|
45
|
+
/** Returns a new instance with the given values replaced. */
|
|
39
46
|
set(args: Partial<CalendarDayParams>): CalendarDay;
|
|
40
47
|
add(unit: DayInterval, value: number): CalendarDay;
|
|
41
48
|
/** Returns the day of the week (Sunday = 0). */
|