@universal-material/web 3.7.2 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +12 -0
- package/README.md +12 -0
- package/app-bar/top-app-bar.d.ts +20 -4
- package/app-bar/top-app-bar.d.ts.map +1 -1
- package/app-bar/top-app-bar.js +84 -33
- package/app-bar/top-app-bar.js.map +1 -1
- package/app-bar/top-app-bar.styles.d.ts.map +1 -1
- package/app-bar/top-app-bar.styles.js +18 -1
- package/app-bar/top-app-bar.styles.js.map +1 -1
- package/badge/badge.d.ts +5 -2
- package/badge/badge.d.ts.map +1 -1
- package/badge/badge.js +9 -6
- package/badge/badge.js.map +1 -1
- package/badge/badge.styles.d.ts.map +1 -1
- package/badge/badge.styles.js +1 -0
- package/badge/badge.styles.js.map +1 -1
- package/bundle.min.js +5480 -2170
- package/button/button-base.d.ts +9 -2
- package/button/button-base.d.ts.map +1 -1
- package/button/button-base.js +12 -5
- package/button/button-base.js.map +1 -1
- package/button/button-set.d.ts +3 -3
- package/button/button-set.d.ts.map +1 -1
- package/button/button-set.js +7 -7
- package/button/button-set.js.map +1 -1
- package/button/button.d.ts +10 -7
- package/button/button.d.ts.map +1 -1
- package/button/button.js +17 -14
- package/button/button.js.map +1 -1
- package/button/fab-menu-color-context.d.ts +2 -2
- package/button/fab-menu-color-context.d.ts.map +1 -1
- package/button/fab-menu-color-context.js.map +1 -1
- package/button/fab-menu-item.d.ts +3 -3
- package/button/fab-menu-item.d.ts.map +1 -1
- package/button/fab-menu-item.js +11 -11
- package/button/fab-menu-item.js.map +1 -1
- package/button/fab-menu.d.ts +20 -5
- package/button/fab-menu.d.ts.map +1 -1
- package/button/fab-menu.js +48 -11
- package/button/fab-menu.js.map +1 -1
- package/button/fab.d.ts +22 -7
- package/button/fab.d.ts.map +1 -1
- package/button/fab.js +49 -11
- package/button/fab.js.map +1 -1
- package/button/icon-button.d.ts +13 -7
- package/button/icon-button.d.ts.map +1 -1
- package/button/icon-button.js +14 -8
- package/button/icon-button.js.map +1 -1
- package/button/toggle-button.d.ts +6 -6
- package/button/toggle-button.d.ts.map +1 -1
- package/button/toggle-button.js +10 -10
- package/button/toggle-button.js.map +1 -1
- package/button-field/button-field.d.ts +6 -3
- package/button-field/button-field.d.ts.map +1 -1
- package/button-field/button-field.js +12 -9
- package/button-field/button-field.js.map +1 -1
- package/calendar/calendar-adapter.d.ts +3 -0
- package/calendar/calendar-adapter.d.ts.map +1 -1
- package/calendar/calendar-adapter.js.map +1 -1
- package/calendar/calendar-base.d.ts +18 -1
- package/calendar/calendar-base.d.ts.map +1 -1
- package/calendar/calendar-base.js +188 -25
- package/calendar/calendar-base.js.map +1 -1
- package/calendar/calendar.d.ts +6 -2
- package/calendar/calendar.d.ts.map +1 -1
- package/calendar/calendar.js +12 -8
- package/calendar/calendar.js.map +1 -1
- package/calendar/default-calendar-adapter.d.ts +3 -0
- package/calendar/default-calendar-adapter.d.ts.map +1 -1
- package/calendar/default-calendar-adapter.js +17 -5
- package/calendar/default-calendar-adapter.js.map +1 -1
- package/calendar/range-calendar.d.ts +2 -2
- package/calendar/range-calendar.d.ts.map +1 -1
- package/calendar/range-calendar.js +9 -9
- package/calendar/range-calendar.js.map +1 -1
- package/card/card-content.d.ts +7 -2
- package/card/card-content.d.ts.map +1 -1
- package/card/card-content.js +10 -5
- package/card/card-content.js.map +1 -1
- package/card/card-media.d.ts +5 -2
- package/card/card-media.d.ts.map +1 -1
- package/card/card-media.js +8 -5
- package/card/card-media.js.map +1 -1
- package/card/card.d.ts +4 -4
- package/card/card.d.ts.map +1 -1
- package/card/card.js +5 -5
- package/card/card.js.map +1 -1
- package/checkbox/checkbox-list-item.d.ts +4 -4
- package/checkbox/checkbox-list-item.d.ts.map +1 -1
- package/checkbox/checkbox-list-item.js +5 -5
- package/checkbox/checkbox-list-item.js.map +1 -1
- package/checkbox/checkbox.d.ts +10 -3
- package/checkbox/checkbox.d.ts.map +1 -1
- package/checkbox/checkbox.js +14 -7
- package/checkbox/checkbox.js.map +1 -1
- package/chip/chip-set.d.ts +3 -3
- package/chip/chip-set.d.ts.map +1 -1
- package/chip/chip-set.js +6 -6
- package/chip/chip-set.js.map +1 -1
- package/chip/chip.d.ts +8 -5
- package/chip/chip.d.ts.map +1 -1
- package/chip/chip.js +23 -20
- package/chip/chip.js.map +1 -1
- package/chip-field/chip-field.d.ts +6 -3
- package/chip-field/chip-field.d.ts.map +1 -1
- package/chip-field/chip-field.js +9 -9
- package/chip-field/chip-field.js.map +1 -1
- package/collapse/collapse.d.ts +26 -0
- package/collapse/collapse.d.ts.map +1 -0
- package/collapse/collapse.js +62 -0
- package/collapse/collapse.js.map +1 -0
- package/collapse/collapse.styles.d.ts +2 -0
- package/collapse/collapse.styles.d.ts.map +1 -0
- package/collapse/collapse.styles.js +8 -0
- package/collapse/collapse.styles.js.map +1 -0
- package/config.js.map +1 -1
- package/css/universal-material.css +2 -1
- package/css/universal-material.min.css +2 -1
- package/custom-elements.json +17175 -9684
- package/datepicker/datepicker.d.ts +54 -3
- package/datepicker/datepicker.d.ts.map +1 -1
- package/datepicker/datepicker.js +202 -6
- package/datepicker/datepicker.js.map +1 -1
- package/datepicker/datepicker.styles.d.ts.map +1 -1
- package/datepicker/datepicker.styles.js +25 -0
- package/datepicker/datepicker.styles.js.map +1 -1
- package/datepicker/format.d.ts +19 -0
- package/datepicker/format.d.ts.map +1 -0
- package/datepicker/format.js +47 -0
- package/datepicker/format.js.map +1 -0
- package/datepicker/range-datepicker.d.ts +58 -0
- package/datepicker/range-datepicker.d.ts.map +1 -0
- package/datepicker/range-datepicker.js +212 -0
- package/datepicker/range-datepicker.js.map +1 -0
- package/dialog/confirm-dialog-builder.d.ts +3 -3
- package/dialog/confirm-dialog-builder.d.ts.map +1 -1
- package/dialog/confirm-dialog-builder.js.map +1 -1
- package/dialog/dialog-builder.d.ts +5 -4
- package/dialog/dialog-builder.d.ts.map +1 -1
- package/dialog/dialog-builder.js +10 -3
- package/dialog/dialog-builder.js.map +1 -1
- package/dialog/dialog-button-def.d.ts +3 -3
- package/dialog/dialog-button-def.d.ts.map +1 -1
- package/dialog/dialog-button-def.js.map +1 -1
- package/dialog/dialog.d.ts +10 -2
- package/dialog/dialog.d.ts.map +1 -1
- package/dialog/dialog.js +22 -14
- package/dialog/dialog.js.map +1 -1
- package/dialog/message-dialog-builder.d.ts +2 -2
- package/dialog/message-dialog-builder.d.ts.map +1 -1
- package/dialog/message-dialog-builder.js.map +1 -1
- package/elevation/elevation.d.ts +2 -2
- package/elevation/elevation.d.ts.map +1 -1
- package/elevation/elevation.js +4 -4
- package/elevation/elevation.js.map +1 -1
- package/expansion-panel/expansion-panel-container.d.ts +24 -0
- package/expansion-panel/expansion-panel-container.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-container.js +54 -0
- package/expansion-panel/expansion-panel-container.js.map +1 -0
- package/expansion-panel/expansion-panel-container.styles.d.ts +2 -0
- package/expansion-panel/expansion-panel-container.styles.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-container.styles.js +9 -0
- package/expansion-panel/expansion-panel-container.styles.js.map +1 -0
- package/expansion-panel/expansion-panel.d.ts +37 -0
- package/expansion-panel/expansion-panel.d.ts.map +1 -0
- package/expansion-panel/expansion-panel.js +89 -0
- package/expansion-panel/expansion-panel.js.map +1 -0
- package/expansion-panel/expansion-panel.styles.d.ts +2 -0
- package/expansion-panel/expansion-panel.styles.d.ts.map +1 -0
- package/expansion-panel/expansion-panel.styles.js +66 -0
- package/expansion-panel/expansion-panel.styles.js.map +1 -0
- package/field/field-base.d.ts +17 -3
- package/field/field-base.d.ts.map +1 -1
- package/field/field-base.js +30 -20
- package/field/field-base.js.map +1 -1
- package/field/field-defaults-context.d.ts +2 -2
- package/field/field-defaults-context.d.ts.map +1 -1
- package/field/field-defaults-context.js.map +1 -1
- package/field/field-defaults.d.ts +3 -3
- package/field/field-defaults.d.ts.map +1 -1
- package/field/field-defaults.js.map +1 -1
- package/field/field-variant.d.ts +1 -1
- package/field/field-variant.d.ts.map +1 -1
- package/field/field-variant.js.map +1 -1
- package/field/field.d.ts +7 -3
- package/field/field.d.ts.map +1 -1
- package/field/field.js +10 -6
- package/field/field.js.map +1 -1
- package/icon/icon.d.ts +2 -2
- package/icon/icon.d.ts.map +1 -1
- package/icon/icon.js +4 -4
- package/icon/icon.js.map +1 -1
- package/index.d.ts +29 -1
- package/index.d.ts.map +1 -1
- package/index.js +29 -1
- package/index.js.map +1 -1
- package/list/list-item.d.ts +19 -2
- package/list/list-item.d.ts.map +1 -1
- package/list/list-item.js +29 -6
- package/list/list-item.js.map +1 -1
- package/list/list-item.styles.d.ts.map +1 -1
- package/list/list-item.styles.js +13 -0
- package/list/list-item.styles.js.map +1 -1
- package/list/list.d.ts +2 -2
- package/list/list.d.ts.map +1 -1
- package/list/list.js +4 -4
- package/list/list.js.map +1 -1
- package/menu/menu-item.d.ts +9 -3
- package/menu/menu-item.d.ts.map +1 -1
- package/menu/menu-item.js +16 -10
- package/menu/menu-item.js.map +1 -1
- package/menu/menu.d.ts +18 -2
- package/menu/menu.d.ts.map +1 -1
- package/menu/menu.js +37 -18
- package/menu/menu.js.map +1 -1
- package/menu/menu.styles.d.ts.map +1 -1
- package/menu/menu.styles.js +5 -0
- package/menu/menu.styles.js.map +1 -1
- package/navigation/drawer-headline.d.ts +2 -2
- package/navigation/drawer-headline.d.ts.map +1 -1
- package/navigation/drawer-headline.js +6 -6
- package/navigation/drawer-headline.js.map +1 -1
- package/navigation/drawer-headline.styles.js +1 -1
- package/navigation/drawer-headline.styles.js.map +1 -1
- package/navigation/drawer-item.d.ts +3 -3
- package/navigation/drawer-item.d.ts.map +1 -1
- package/navigation/drawer-item.js +17 -12
- package/navigation/drawer-item.js.map +1 -1
- package/navigation/drawer.d.ts +2 -2
- package/navigation/drawer.d.ts.map +1 -1
- package/navigation/drawer.js +4 -4
- package/navigation/drawer.js.map +1 -1
- package/navigation/side-navigation.d.ts +9 -2
- package/navigation/side-navigation.d.ts.map +1 -1
- package/navigation/side-navigation.js +15 -8
- package/navigation/side-navigation.js.map +1 -1
- package/navigation-bar/navigation-bar-item.d.ts +40 -0
- package/navigation-bar/navigation-bar-item.d.ts.map +1 -0
- package/navigation-bar/navigation-bar-item.js +113 -0
- package/navigation-bar/navigation-bar-item.js.map +1 -0
- package/navigation-bar/navigation-bar-item.styles.d.ts +2 -0
- package/navigation-bar/navigation-bar-item.styles.d.ts.map +1 -0
- package/navigation-bar/navigation-bar-item.styles.js +101 -0
- package/navigation-bar/navigation-bar-item.styles.js.map +1 -0
- package/navigation-bar/navigation-bar.d.ts +40 -0
- package/navigation-bar/navigation-bar.d.ts.map +1 -0
- package/navigation-bar/navigation-bar.js +85 -0
- package/navigation-bar/navigation-bar.js.map +1 -0
- package/navigation-bar/navigation-bar.styles.d.ts +2 -0
- package/navigation-bar/navigation-bar.styles.d.ts.map +1 -0
- package/navigation-bar/navigation-bar.styles.js +44 -0
- package/navigation-bar/navigation-bar.styles.js.map +1 -0
- package/navigation-rail/navigation-rail-headline.d.ts +23 -0
- package/navigation-rail/navigation-rail-headline.d.ts.map +1 -0
- package/navigation-rail/navigation-rail-headline.js +28 -0
- package/navigation-rail/navigation-rail-headline.js.map +1 -0
- package/navigation-rail/navigation-rail-headline.styles.d.ts +2 -0
- package/navigation-rail/navigation-rail-headline.styles.d.ts.map +1 -0
- package/navigation-rail/navigation-rail-headline.styles.js +19 -0
- package/navigation-rail/navigation-rail-headline.styles.js.map +1 -0
- package/navigation-rail/navigation-rail-item.d.ts +58 -0
- package/navigation-rail/navigation-rail-item.d.ts.map +1 -0
- package/navigation-rail/navigation-rail-item.js +160 -0
- package/navigation-rail/navigation-rail-item.js.map +1 -0
- package/navigation-rail/navigation-rail-item.styles.d.ts +2 -0
- package/navigation-rail/navigation-rail-item.styles.d.ts.map +1 -0
- package/navigation-rail/navigation-rail-item.styles.js +182 -0
- package/navigation-rail/navigation-rail-item.styles.js.map +1 -0
- package/navigation-rail/navigation-rail.d.ts +66 -0
- package/navigation-rail/navigation-rail.d.ts.map +1 -0
- package/navigation-rail/navigation-rail.js +223 -0
- package/navigation-rail/navigation-rail.js.map +1 -0
- package/navigation-rail/navigation-rail.styles.d.ts +2 -0
- package/navigation-rail/navigation-rail.styles.d.ts.map +1 -0
- package/navigation-rail/navigation-rail.styles.js +220 -0
- package/navigation-rail/navigation-rail.styles.js.map +1 -0
- package/overflow-menu/overflow-menu-item.d.ts +8 -0
- package/overflow-menu/overflow-menu-item.d.ts.map +1 -1
- package/overflow-menu/overflow-menu-item.js +8 -0
- package/overflow-menu/overflow-menu-item.js.map +1 -1
- package/overflow-menu/overflow-menu.d.ts +8 -2
- package/overflow-menu/overflow-menu.d.ts.map +1 -1
- package/overflow-menu/overflow-menu.js +10 -1
- package/overflow-menu/overflow-menu.js.map +1 -1
- package/package.json +21 -5
- package/progress/circular-progress.d.ts +9 -2
- package/progress/circular-progress.d.ts.map +1 -1
- package/progress/circular-progress.js +9 -6
- package/progress/circular-progress.js.map +1 -1
- package/progress/progress-bar.d.ts +9 -2
- package/progress/progress-bar.d.ts.map +1 -1
- package/progress/progress-bar.js +9 -6
- package/progress/progress-bar.js.map +1 -1
- package/radio/radio-list-item.d.ts +4 -4
- package/radio/radio-list-item.d.ts.map +1 -1
- package/radio/radio-list-item.js +5 -5
- package/radio/radio-list-item.js.map +1 -1
- package/radio/radio.d.ts +6 -3
- package/radio/radio.d.ts.map +1 -1
- package/radio/radio.js +9 -6
- package/radio/radio.js.map +1 -1
- package/ripple/ripple.d.ts +2 -2
- package/ripple/ripple.d.ts.map +1 -1
- package/ripple/ripple.js +9 -9
- package/ripple/ripple.js.map +1 -1
- package/scaffold/pane.d.ts +127 -0
- package/scaffold/pane.d.ts.map +1 -0
- package/scaffold/pane.js +220 -0
- package/scaffold/pane.js.map +1 -0
- package/scaffold/pane.styles.d.ts +2 -0
- package/scaffold/pane.styles.d.ts.map +1 -0
- package/scaffold/pane.styles.js +1909 -0
- package/scaffold/pane.styles.js.map +1 -0
- package/scaffold/scaffold.d.ts +45 -0
- package/scaffold/scaffold.d.ts.map +1 -0
- package/scaffold/scaffold.js +170 -0
- package/scaffold/scaffold.js.map +1 -0
- package/scaffold/scaffold.styles.d.ts +2 -0
- package/scaffold/scaffold.styles.d.ts.map +1 -0
- package/scaffold/scaffold.styles.js +69 -0
- package/scaffold/scaffold.styles.js.map +1 -0
- package/scaffold/scroll-container-context.d.ts +4 -0
- package/scaffold/scroll-container-context.d.ts.map +1 -0
- package/scaffold/scroll-container-context.js +3 -0
- package/scaffold/scroll-container-context.js.map +1 -0
- package/scss/utilities/_divider.scss +4 -0
- package/search/search.d.ts +6 -3
- package/search/search.d.ts.map +1 -1
- package/search/search.js +10 -7
- package/search/search.js.map +1 -1
- package/search/search.styles.d.ts.map +1 -1
- package/search/search.styles.js +7 -2
- package/search/search.styles.js.map +1 -1
- package/select/option.d.ts +9 -3
- package/select/option.d.ts.map +1 -1
- package/select/option.js +14 -8
- package/select/option.js.map +1 -1
- package/select/select-navigation-controller.d.ts +4 -4
- package/select/select-navigation-controller.d.ts.map +1 -1
- package/select/select-navigation-controller.js.map +1 -1
- package/select/select.d.ts +22 -12
- package/select/select.d.ts.map +1 -1
- package/select/select.js +81 -31
- package/select/select.js.map +1 -1
- package/shared/button-wrapper.d.ts +4 -1
- package/shared/button-wrapper.d.ts.map +1 -1
- package/shared/button-wrapper.js +8 -8
- package/shared/button-wrapper.js.map +1 -1
- package/shared/char-count-text-field/native-text-field-wrapper.d.ts +15 -2
- package/shared/char-count-text-field/native-text-field-wrapper.d.ts.map +1 -1
- package/shared/char-count-text-field/native-text-field-wrapper.js +16 -6
- package/shared/char-count-text-field/native-text-field-wrapper.js.map +1 -1
- package/shared/menu-field/menu-field-navigation-controller.d.ts +3 -3
- package/shared/menu-field/menu-field-navigation-controller.d.ts.map +1 -1
- package/shared/menu-field/menu-field-navigation-controller.js.map +1 -1
- package/shared/menu-field/menu-field.d.ts +5 -5
- package/shared/menu-field/menu-field.d.ts.map +1 -1
- package/shared/menu-field/menu-field.js.map +1 -1
- package/shared/selection-control/selection-control-list-item.d.ts +2 -2
- package/shared/selection-control/selection-control-list-item.d.ts.map +1 -1
- package/shared/selection-control/selection-control-list-item.js +14 -1
- package/shared/selection-control/selection-control-list-item.js.map +1 -1
- package/shared/selection-control/selection-control.d.ts +10 -1
- package/shared/selection-control/selection-control.d.ts.map +1 -1
- package/shared/selection-control/selection-control.js +24 -7
- package/shared/selection-control/selection-control.js.map +1 -1
- package/shared/sets/set-base.d.ts +1 -1
- package/shared/sets/set-base.d.ts.map +1 -1
- package/shared/sets/set-base.js +2 -2
- package/shared/sets/set-base.js.map +1 -1
- package/shared/text-field-base/text-field-base.d.ts +37 -2
- package/shared/text-field-base/text-field-base.d.ts.map +1 -1
- package/shared/text-field-base/text-field-base.js +66 -4
- package/shared/text-field-base/text-field-base.js.map +1 -1
- package/skills/badge/SKILL.md +43 -0
- package/skills/buttons/SKILL.md +115 -0
- package/skills/card/SKILL.md +162 -0
- package/skills/chips/SKILL.md +95 -0
- package/skills/collapse/SKILL.md +37 -0
- package/skills/datepicker/SKILL.md +110 -0
- package/skills/dialog/SKILL.md +92 -0
- package/skills/drawer/SKILL.md +94 -0
- package/skills/expansion-panel/SKILL.md +65 -0
- package/skills/fab/SKILL.md +79 -0
- package/skills/list/SKILL.md +105 -0
- package/skills/menu/SKILL.md +120 -0
- package/skills/navigation-bar/SKILL.md +87 -0
- package/skills/navigation-rail/SKILL.md +127 -0
- package/skills/overview/SKILL.md +44 -0
- package/skills/progress/SKILL.md +63 -0
- package/skills/scaffold/SKILL.md +392 -0
- package/skills/search/SKILL.md +65 -0
- package/skills/select/SKILL.md +120 -0
- package/skills/selection-controls/SKILL.md +88 -0
- package/skills/setup/SKILL.md +58 -0
- package/skills/slider/SKILL.md +119 -0
- package/skills/snackbar/SKILL.md +70 -0
- package/skills/tab-bar/SKILL.md +55 -0
- package/skills/text-field/SKILL.md +114 -0
- package/skills/theming/SKILL.md +80 -0
- package/skills/top-app-bar/SKILL.md +64 -0
- package/skills/typeahead/SKILL.md +113 -0
- package/slider/slider.d.ts +73 -0
- package/slider/slider.d.ts.map +1 -0
- package/slider/slider.js +506 -0
- package/slider/slider.js.map +1 -0
- package/slider/slider.styles.d.ts +2 -0
- package/slider/slider.styles.d.ts.map +1 -0
- package/slider/slider.styles.js +292 -0
- package/slider/slider.styles.js.map +1 -0
- package/snackbar/snackbar.d.ts +13 -4
- package/snackbar/snackbar.d.ts.map +1 -1
- package/snackbar/snackbar.js +37 -28
- package/snackbar/snackbar.js.map +1 -1
- package/snackbar/snackbar.styles.js +1 -1
- package/snackbar/snackbar.styles.js.map +1 -1
- package/switch/switch-list-item.d.ts +4 -4
- package/switch/switch-list-item.d.ts.map +1 -1
- package/switch/switch-list-item.js +5 -5
- package/switch/switch-list-item.js.map +1 -1
- package/switch/switch.d.ts +3 -3
- package/switch/switch.d.ts.map +1 -1
- package/switch/switch.js +5 -5
- package/switch/switch.js.map +1 -1
- package/tab-bar/tab-bar.d.ts +9 -6
- package/tab-bar/tab-bar.d.ts.map +1 -1
- package/tab-bar/tab-bar.js +43 -23
- package/tab-bar/tab-bar.js.map +1 -1
- package/tab-bar/tab.d.ts +10 -5
- package/tab-bar/tab.d.ts.map +1 -1
- package/tab-bar/tab.js +14 -9
- package/tab-bar/tab.js.map +1 -1
- package/text-area/text-area.d.ts +6 -3
- package/text-area/text-area.d.ts.map +1 -1
- package/text-area/text-area.js +12 -9
- package/text-area/text-area.js.map +1 -1
- package/text-field/text-field.d.ts +31 -3
- package/text-field/text-field.d.ts.map +1 -1
- package/text-field/text-field.js +53 -13
- package/text-field/text-field.js.map +1 -1
- package/typeahead/highlight.d.ts +2 -2
- package/typeahead/highlight.d.ts.map +1 -1
- package/typeahead/highlight.js +7 -7
- package/typeahead/highlight.js.map +1 -1
- package/typeahead/typeahead-template-render.d.ts +4 -0
- package/typeahead/typeahead-template-render.d.ts.map +1 -1
- package/typeahead/typeahead-template-render.js +4 -0
- package/typeahead/typeahead-template-render.js.map +1 -1
- package/typeahead/typeahead.d.ts +14 -7
- package/typeahead/typeahead.d.ts.map +1 -1
- package/typeahead/typeahead.js +29 -18
- package/typeahead/typeahead.js.map +1 -1
- package/vscode.html-custom-data.json +1146 -326
|
@@ -1,9 +1,60 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CSSResultGroup } from '@lit/reactive-element/css-tag';
|
|
2
|
+
import { HTMLTemplateResult } from 'lit';
|
|
3
|
+
import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
|
|
4
|
+
import { DatepickerFormat } from './format.js';
|
|
5
|
+
import '../button/icon-button.js';
|
|
6
|
+
import '../calendar/calendar.js';
|
|
7
|
+
import '../menu/menu.js';
|
|
8
|
+
import '../ripple/ripple.js';
|
|
9
|
+
export declare class Datepicker extends NativeTextFieldWrapper {
|
|
10
|
+
#private;
|
|
11
|
+
static styles: CSSResultGroup;
|
|
12
|
+
/**
|
|
13
|
+
* The BCP 47 locale tag forwarded to the underlying calendar and used for
|
|
14
|
+
* non-editable display formatting.
|
|
15
|
+
* When `null`, the calendar falls back to the browser's `navigator.language`.
|
|
16
|
+
*/
|
|
17
|
+
locale: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Format used when displaying the value while the field is not editable.
|
|
20
|
+
* Accepts the named presets `'short'`, `'medium'`, `'long'`, `'full'`,
|
|
21
|
+
* the literal `'iso'` (keeps the ISO `YYYY-MM-DD` value), or an
|
|
22
|
+
* `Intl.DateTimeFormatOptions` object for custom formatting.
|
|
23
|
+
* In editable mode the input uses the browser's native `type="date"` mask
|
|
24
|
+
* and ignores this property.
|
|
25
|
+
*/
|
|
26
|
+
format: DatepickerFormat;
|
|
27
|
+
/**
|
|
28
|
+
* Whether the input accepts manually-typed dates. When `false` (default),
|
|
29
|
+
* the field is read-only and clicking anywhere opens the calendar popover.
|
|
30
|
+
* When `true`, the input uses native `type="date"` and accepts keyboard input;
|
|
31
|
+
* the calendar popover is opened via the trailing icon.
|
|
32
|
+
*/
|
|
33
|
+
editable: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether the input is read-only. When set, manual typing is disabled even
|
|
36
|
+
* if `editable` is `true`; the calendar popover remains available.
|
|
37
|
+
*/
|
|
38
|
+
readOnly: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* The positioning strategy used by the calendar popover. Use `'fixed'`
|
|
41
|
+
* when the datepicker is rendered inside a clipped/scrollable container.
|
|
42
|
+
*/
|
|
43
|
+
menuPositioning: 'relative' | 'fixed';
|
|
44
|
+
input: HTMLInputElement;
|
|
45
|
+
private _menu;
|
|
46
|
+
private _calendar;
|
|
47
|
+
private _trailingSlot;
|
|
48
|
+
protected renderControl(): HTMLTemplateResult;
|
|
49
|
+
protected renderDefaultTrailingIcon(): import("lit-html").TemplateResult<1> | import("lit-html").TemplateResult<2>;
|
|
50
|
+
protected renderAfterContent(): import("lit-html").TemplateResult<1>;
|
|
51
|
+
connectedCallback(): void;
|
|
52
|
+
disconnectedCallback(): void;
|
|
53
|
+
protected _handleInput(): void;
|
|
3
54
|
}
|
|
4
55
|
declare global {
|
|
5
56
|
interface HTMLElementTagNameMap {
|
|
6
|
-
'u-datepicker':
|
|
57
|
+
'u-datepicker': Datepicker;
|
|
7
58
|
}
|
|
8
59
|
}
|
|
9
60
|
//# sourceMappingURL=datepicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["../../src/datepicker/datepicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["../../src/datepicker/datepicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAgB,MAAM,KAAK,CAAC;AAM7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAKtG,OAAO,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAE9D,OAAO,0BAA0B,CAAC;AAClC,OAAO,yBAAyB,CAAC;AACjC,OAAO,iBAAiB,CAAC;AACzB,OAAO,qBAAqB,CAAC;AAI7B,qBACa,UAAW,SAAQ,sBAAsB;;IACpD,OAAgB,MAAM,EAAE,cAAc,CAAmD;IAEzF;;;;OAIG;IACS,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC;;;;;;;OAOG;IACS,MAAM,EAAE,gBAAgB,CAAW;IAE/C;;;;;OAKG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyD,eAAe,EAAE,UAAU,GAAG,OAAO,CAAc;IAE/F,KAAK,EAAG,gBAAgB,CAAC;IAClB,OAAO,CAAC,KAAK,CAAQ;IACjB,OAAO,CAAC,SAAS,CAAY;IACzB,OAAO,CAAC,aAAa,CAAmB;cAEpD,aAAa,IAAI,kBAAkB;cAoCnC,yBAAyB;cAmBzB,kBAAkB;IAkB5B,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;cAKlB,YAAY,IAAI,IAAI;CAmDxC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,UAAU,CAAC;KAC5B;CACF"}
|
package/datepicker/datepicker.js
CHANGED
|
@@ -1,10 +1,206 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import {
|
|
3
|
-
import { customElement } from 'lit/decorators.js';
|
|
4
|
-
|
|
2
|
+
import { html, nothing, svg } from 'lit';
|
|
3
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
|
4
|
+
import { live } from 'lit/directives/live.js';
|
|
5
|
+
import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
|
|
6
|
+
import { TextFieldBase } from '../shared/text-field-base/text-field-base.js';
|
|
7
|
+
import { styles as textFieldStyles } from '../text-field/text-field.styles.js';
|
|
8
|
+
import { styles } from './datepicker.styles.js';
|
|
9
|
+
import { formatIsoDate } from './format.js';
|
|
10
|
+
import '../button/icon-button.js';
|
|
11
|
+
import '../calendar/calendar.js';
|
|
12
|
+
import '../menu/menu.js';
|
|
13
|
+
import '../ripple/ripple.js';
|
|
14
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
15
|
+
let Datepicker = class Datepicker extends NativeTextFieldWrapper {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
/**
|
|
19
|
+
* The BCP 47 locale tag forwarded to the underlying calendar and used for
|
|
20
|
+
* non-editable display formatting.
|
|
21
|
+
* When `null`, the calendar falls back to the browser's `navigator.language`.
|
|
22
|
+
*/
|
|
23
|
+
this.locale = null;
|
|
24
|
+
/**
|
|
25
|
+
* Format used when displaying the value while the field is not editable.
|
|
26
|
+
* Accepts the named presets `'short'`, `'medium'`, `'long'`, `'full'`,
|
|
27
|
+
* the literal `'iso'` (keeps the ISO `YYYY-MM-DD` value), or an
|
|
28
|
+
* `Intl.DateTimeFormatOptions` object for custom formatting.
|
|
29
|
+
* In editable mode the input uses the browser's native `type="date"` mask
|
|
30
|
+
* and ignores this property.
|
|
31
|
+
*/
|
|
32
|
+
this.format = 'short';
|
|
33
|
+
/**
|
|
34
|
+
* Whether the input accepts manually-typed dates. When `false` (default),
|
|
35
|
+
* the field is read-only and clicking anywhere opens the calendar popover.
|
|
36
|
+
* When `true`, the input uses native `type="date"` and accepts keyboard input;
|
|
37
|
+
* the calendar popover is opened via the trailing icon.
|
|
38
|
+
*/
|
|
39
|
+
this.editable = false;
|
|
40
|
+
/**
|
|
41
|
+
* Whether the input is read-only. When set, manual typing is disabled even
|
|
42
|
+
* if `editable` is `true`; the calendar popover remains available.
|
|
43
|
+
*/
|
|
44
|
+
this.readOnly = false;
|
|
45
|
+
/**
|
|
46
|
+
* The positioning strategy used by the calendar popover. Use `'fixed'`
|
|
47
|
+
* when the datepicker is rendered inside a clipped/scrollable container.
|
|
48
|
+
*/
|
|
49
|
+
this.menuPositioning = 'relative';
|
|
50
|
+
this.#handleKeyDown = (e) => {
|
|
51
|
+
if (e.key === 'ArrowDown' && !this._menu.open) {
|
|
52
|
+
e.preventDefault();
|
|
53
|
+
this._menu.show();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (e.key === 'Escape' && this._menu.open) {
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
this._menu.close();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this._handleKeyDown(e);
|
|
62
|
+
};
|
|
63
|
+
this.#handleCalendarInput = (e) => {
|
|
64
|
+
e.stopPropagation();
|
|
65
|
+
const value = e.target.value;
|
|
66
|
+
this.value = value;
|
|
67
|
+
this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));
|
|
68
|
+
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
69
|
+
this._menu.close();
|
|
70
|
+
};
|
|
71
|
+
this.#stopPropagation = (e) => {
|
|
72
|
+
e.stopPropagation();
|
|
73
|
+
};
|
|
74
|
+
this.#toggleMenu = () => {
|
|
75
|
+
if (this.disabled) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this._menu.toggle();
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
static { this.styles = [TextFieldBase.styles, textFieldStyles, styles]; }
|
|
82
|
+
renderControl() {
|
|
83
|
+
const displayValue = this.editable
|
|
84
|
+
? this._value
|
|
85
|
+
: formatIsoDate(this._value, this.format, this.locale);
|
|
86
|
+
return html `
|
|
87
|
+
${this.editable
|
|
88
|
+
? nothing
|
|
89
|
+
: html `
|
|
90
|
+
<button
|
|
91
|
+
class="trigger"
|
|
92
|
+
type="button"
|
|
93
|
+
aria-haspopup="dialog"
|
|
94
|
+
?disabled=${this.disabled}
|
|
95
|
+
@click=${this.#toggleMenu}></button>
|
|
96
|
+
<u-ripple ?disabled=${this.disabled}></u-ripple>
|
|
97
|
+
`}
|
|
98
|
+
<div class="input">
|
|
99
|
+
<input
|
|
100
|
+
type=${this.editable ? 'date' : 'text'}
|
|
101
|
+
part="input"
|
|
102
|
+
id=${this.id || nothing}
|
|
103
|
+
aria-labelledby="label"
|
|
104
|
+
aria-describedby="supporting-text"
|
|
105
|
+
aria-haspopup="dialog"
|
|
106
|
+
tabindex=${this.editable ? nothing : -1}
|
|
107
|
+
?readonly=${this.readOnly || !this.editable}
|
|
108
|
+
?disabled=${this.disabled}
|
|
109
|
+
placeholder=${this.placeholder ?? nothing}
|
|
110
|
+
.value=${live(displayValue)}
|
|
111
|
+
@input=${this._handleInput}
|
|
112
|
+
@keydown=${this.#handleKeyDown} />
|
|
113
|
+
</div>
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
renderDefaultTrailingIcon() {
|
|
117
|
+
const icon = svg `
|
|
118
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em" fill="currentColor">
|
|
119
|
+
<path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Z"/>
|
|
120
|
+
</svg>`;
|
|
121
|
+
// In editable mode the field itself is typeable, so the icon must be a
|
|
122
|
+
// dedicated button for opening the calendar. In non-editable mode the
|
|
123
|
+
// .trigger button covers the whole field, so the icon is just visual.
|
|
124
|
+
return this.editable
|
|
125
|
+
? html `<u-icon-button
|
|
126
|
+
type="button"
|
|
127
|
+
aria-haspopup="dialog"
|
|
128
|
+
aria-label="Open calendar"
|
|
129
|
+
?disabled=${this.disabled}
|
|
130
|
+
@click=${this.#toggleMenu}>${icon}</u-icon-button>`
|
|
131
|
+
: icon;
|
|
132
|
+
}
|
|
133
|
+
renderAfterContent() {
|
|
134
|
+
return html `
|
|
135
|
+
<u-menu
|
|
136
|
+
positioning=${this.menuPositioning}
|
|
137
|
+
autoclose="outside"
|
|
138
|
+
anchor-corner="end-start"
|
|
139
|
+
direction="down-end"
|
|
140
|
+
allow-overflow
|
|
141
|
+
manualFocus
|
|
142
|
+
@click=${this.#stopPropagation}>
|
|
143
|
+
<u-calendar
|
|
144
|
+
.value=${this._value}
|
|
145
|
+
.locale=${this.locale}
|
|
146
|
+
@input=${this.#handleCalendarInput}></u-calendar>
|
|
147
|
+
</u-menu>
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
connectedCallback() {
|
|
151
|
+
super.connectedCallback();
|
|
152
|
+
void this.#attach();
|
|
153
|
+
}
|
|
154
|
+
disconnectedCallback() {
|
|
155
|
+
super.disconnectedCallback();
|
|
156
|
+
this._trailingSlot?.removeEventListener('click', this.#toggleMenu);
|
|
157
|
+
}
|
|
158
|
+
_handleInput() {
|
|
159
|
+
super._handleInput();
|
|
160
|
+
if (ISO_DATE.test(this._value)) {
|
|
161
|
+
this._calendar.value = this._value;
|
|
162
|
+
}
|
|
163
|
+
this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));
|
|
164
|
+
}
|
|
165
|
+
#handleKeyDown;
|
|
166
|
+
#handleCalendarInput;
|
|
167
|
+
#stopPropagation;
|
|
168
|
+
#toggleMenu;
|
|
169
|
+
async #attach() {
|
|
170
|
+
await this.updateComplete;
|
|
171
|
+
this._menu.anchorElement = this._container;
|
|
172
|
+
this._trailingSlot.addEventListener('click', this.#toggleMenu);
|
|
173
|
+
}
|
|
5
174
|
};
|
|
6
|
-
|
|
175
|
+
__decorate([
|
|
176
|
+
property()
|
|
177
|
+
], Datepicker.prototype, "locale", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
property()
|
|
180
|
+
], Datepicker.prototype, "format", void 0);
|
|
181
|
+
__decorate([
|
|
182
|
+
property({ type: Boolean, reflect: true })
|
|
183
|
+
], Datepicker.prototype, "editable", void 0);
|
|
184
|
+
__decorate([
|
|
185
|
+
property({ type: Boolean, reflect: true })
|
|
186
|
+
], Datepicker.prototype, "readOnly", void 0);
|
|
187
|
+
__decorate([
|
|
188
|
+
property({ reflect: true, attribute: 'menu-positioning' })
|
|
189
|
+
], Datepicker.prototype, "menuPositioning", void 0);
|
|
190
|
+
__decorate([
|
|
191
|
+
query('input')
|
|
192
|
+
], Datepicker.prototype, "input", void 0);
|
|
193
|
+
__decorate([
|
|
194
|
+
query('u-menu', true)
|
|
195
|
+
], Datepicker.prototype, "_menu", void 0);
|
|
196
|
+
__decorate([
|
|
197
|
+
query('u-calendar', true)
|
|
198
|
+
], Datepicker.prototype, "_calendar", void 0);
|
|
199
|
+
__decorate([
|
|
200
|
+
query('.trailing-icon', true)
|
|
201
|
+
], Datepicker.prototype, "_trailingSlot", void 0);
|
|
202
|
+
Datepicker = __decorate([
|
|
7
203
|
customElement('u-datepicker')
|
|
8
|
-
],
|
|
9
|
-
export {
|
|
204
|
+
], Datepicker);
|
|
205
|
+
export { Datepicker };
|
|
10
206
|
//# sourceMappingURL=datepicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.js","sourceRoot":"","sources":["../../src/datepicker/datepicker.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG3C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;CAE3C,CAAA;AAFY,YAAY;IADxB,aAAa,CAAC,cAAc,CAAC;GACjB,YAAY,CAExB","sourcesContent":["import { LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('u-datepicker')\nexport class UmDatepicker extends LitElement {\n\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-datepicker': UmDatepicker;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"datepicker.js","sourceRoot":"","sources":["../../src/datepicker/datepicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResultGroup } from '@lit/reactive-element/css-tag';\n\nimport { html, HTMLTemplateResult, nothing, svg } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { Calendar } from '../calendar/calendar.js';\nimport { Menu } from '../menu/menu.js';\nimport { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';\nimport { TextFieldBase } from '../shared/text-field-base/text-field-base.js';\n\nimport { styles as textFieldStyles } from '../text-field/text-field.styles.js';\nimport { styles } from './datepicker.styles.js';\nimport { DatepickerFormat, formatIsoDate } from './format.js';\n\nimport '../button/icon-button.js';\nimport '../calendar/calendar.js';\nimport '../menu/menu.js';\nimport '../ripple/ripple.js';\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n@customElement('u-datepicker')\nexport class Datepicker extends NativeTextFieldWrapper {\n static override styles: CSSResultGroup = [TextFieldBase.styles, textFieldStyles, styles];\n\n /**\n * The BCP 47 locale tag forwarded to the underlying calendar and used for\n * non-editable display formatting.\n * When `null`, the calendar falls back to the browser's `navigator.language`.\n */\n @property() locale: string | null = null;\n\n /**\n * Format used when displaying the value while the field is not editable.\n * Accepts the named presets `'short'`, `'medium'`, `'long'`, `'full'`,\n * the literal `'iso'` (keeps the ISO `YYYY-MM-DD` value), or an\n * `Intl.DateTimeFormatOptions` object for custom formatting.\n * In editable mode the input uses the browser's native `type=\"date\"` mask\n * and ignores this property.\n */\n @property() format: DatepickerFormat = 'short';\n\n /**\n * Whether the input accepts manually-typed dates. When `false` (default),\n * the field is read-only and clicking anywhere opens the calendar popover.\n * When `true`, the input uses native `type=\"date\"` and accepts keyboard input;\n * the calendar popover is opened via the trailing icon.\n */\n @property({ type: Boolean, reflect: true }) editable = false;\n\n /**\n * Whether the input is read-only. When set, manual typing is disabled even\n * if `editable` is `true`; the calendar popover remains available.\n */\n @property({ type: Boolean, reflect: true }) readOnly = false;\n\n /**\n * The positioning strategy used by the calendar popover. Use `'fixed'`\n * when the datepicker is rendered inside a clipped/scrollable container.\n */\n @property({ reflect: true, attribute: 'menu-positioning' }) menuPositioning: 'relative' | 'fixed' = 'relative';\n\n @query('input') input!: HTMLInputElement;\n @query('u-menu', true) private _menu!: Menu;\n @query('u-calendar', true) private _calendar!: Calendar;\n @query('.trailing-icon', true) private _trailingSlot!: HTMLSlotElement;\n\n protected override renderControl(): HTMLTemplateResult {\n const displayValue = this.editable\n ? this._value\n : formatIsoDate(this._value, this.format, this.locale);\n\n return html`\n ${this.editable\n ? nothing\n : html`\n <button\n class=\"trigger\"\n type=\"button\"\n aria-haspopup=\"dialog\"\n ?disabled=${this.disabled}\n @click=${this.#toggleMenu}></button>\n <u-ripple ?disabled=${this.disabled}></u-ripple>\n `}\n <div class=\"input\">\n <input\n type=${this.editable ? 'date' : 'text'}\n part=\"input\"\n id=${this.id || nothing}\n aria-labelledby=\"label\"\n aria-describedby=\"supporting-text\"\n aria-haspopup=\"dialog\"\n tabindex=${this.editable ? nothing : -1}\n ?readonly=${this.readOnly || !this.editable}\n ?disabled=${this.disabled}\n placeholder=${this.placeholder ?? nothing}\n .value=${live(displayValue)}\n @input=${this._handleInput}\n @keydown=${this.#handleKeyDown} />\n </div>\n `;\n }\n\n protected override renderDefaultTrailingIcon() {\n const icon = svg`\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 -960 960 960\" width=\"1em\" fill=\"currentColor\">\n <path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Z\"/>\n </svg>`;\n\n // In editable mode the field itself is typeable, so the icon must be a\n // dedicated button for opening the calendar. In non-editable mode the\n // .trigger button covers the whole field, so the icon is just visual.\n return this.editable\n ? html`<u-icon-button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-label=\"Open calendar\"\n ?disabled=${this.disabled}\n @click=${this.#toggleMenu}>${icon}</u-icon-button>`\n : icon;\n }\n\n protected override renderAfterContent() {\n return html`\n <u-menu\n positioning=${this.menuPositioning}\n autoclose=\"outside\"\n anchor-corner=\"end-start\"\n direction=\"down-end\"\n allow-overflow\n manualFocus\n @click=${this.#stopPropagation}>\n <u-calendar\n .value=${this._value}\n .locale=${this.locale}\n @input=${this.#handleCalendarInput}></u-calendar>\n </u-menu>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n void this.#attach();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._trailingSlot?.removeEventListener('click', this.#toggleMenu);\n }\n\n protected override _handleInput(): void {\n super._handleInput();\n\n if (ISO_DATE.test(this._value)) {\n this._calendar.value = this._value;\n }\n\n this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));\n }\n\n #handleKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' && !this._menu.open) {\n e.preventDefault();\n this._menu.show();\n return;\n }\n\n if (e.key === 'Escape' && this._menu.open) {\n e.preventDefault();\n this._menu.close();\n return;\n }\n\n this._handleKeyDown(e);\n };\n\n #handleCalendarInput = (e: Event): void => {\n e.stopPropagation();\n const value = (e.target as Calendar).value;\n this.value = value;\n this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this._menu.close();\n };\n\n #stopPropagation = (e: Event): void => {\n e.stopPropagation();\n };\n\n #toggleMenu = (): void => {\n if (this.disabled) {\n return;\n }\n this._menu.toggle();\n };\n\n async #attach(): Promise<void> {\n await this.updateComplete;\n this._menu.anchorElement = this._container;\n this._trailingSlot.addEventListener('click', this.#toggleMenu);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-datepicker': Datepicker;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.styles.d.ts","sourceRoot":"","sources":["../../src/datepicker/datepicker.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"datepicker.styles.d.ts","sourceRoot":"","sources":["../../src/datepicker/datepicker.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBA2BlB,CAAC"}
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
2
|
export const styles = css `
|
|
3
|
+
:host(:not([editable]):not([disabled])) .container {
|
|
4
|
+
cursor: pointer;
|
|
5
|
+
}
|
|
3
6
|
|
|
7
|
+
.trigger {
|
|
8
|
+
position: absolute;
|
|
9
|
+
inset: 0;
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
background: transparent;
|
|
13
|
+
border: none;
|
|
14
|
+
appearance: none;
|
|
15
|
+
cursor: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
input[type=date]::-webkit-calendar-picker-indicator {
|
|
19
|
+
display: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
input[type=date]::-webkit-inner-spin-button, input[type=date]::-webkit-clear-button {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:host([empty]:not(:focus-within)) .container:not(.no-label) input[type=date]::-webkit-datetime-edit {
|
|
27
|
+
color: transparent;
|
|
28
|
+
}
|
|
4
29
|
`;
|
|
5
30
|
//# sourceMappingURL=datepicker.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.styles.js","sourceRoot":"","sources":["../../src/datepicker/datepicker.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"datepicker.styles.js","sourceRoot":"","sources":["../../src/datepicker/datepicker.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BzB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css `\n :host(:not([editable]):not([disabled])) .container {\n cursor: pointer;\n }\n\n .trigger {\n position: absolute;\n inset: 0;\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n appearance: none;\n cursor: inherit;\n }\n\n input[type=date]::-webkit-calendar-picker-indicator {\n display: none;\n }\n\n input[type=date]::-webkit-inner-spin-button, input[type=date]::-webkit-clear-button {\n display: none;\n }\n\n :host([empty]:not(:focus-within)) .container:not(.no-label) input[type=date]::-webkit-datetime-edit {\n color: transparent;\n }\n`;\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type DatepickerFormat = 'short' | 'medium' | 'long' | 'full' | 'iso' | Intl.DateTimeFormatOptions;
|
|
2
|
+
/**
|
|
3
|
+
* Parses an ISO `YYYY-MM-DD` string into a `Date` at local midnight,
|
|
4
|
+
* sidestepping the UTC-vs-local parsing ambiguity of the `Date` constructor
|
|
5
|
+
* when given a string.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseIsoDate(iso: string): Date | null;
|
|
8
|
+
/**
|
|
9
|
+
* Formats an ISO date string (`YYYY-MM-DD`) for display, following the
|
|
10
|
+
* datepicker `format` property. Non-ISO inputs are passed through
|
|
11
|
+
* unchanged so partially-typed values aren't mangled.
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatIsoDate(value: string, format: DatepickerFormat, locale: string | null): string;
|
|
14
|
+
/**
|
|
15
|
+
* Formats a range value (`YYYY-MM-DD - YYYY-MM-DD`) by formatting each end
|
|
16
|
+
* with `formatIsoDate` and rejoining them with the same separator.
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatIsoDateRange(value: string, format: DatepickerFormat, locale: string | null): string;
|
|
19
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/datepicker/format.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,QAAQ,GACR,MAAM,GACN,MAAM,GACN,KAAK,GACL,IAAI,CAAC,qBAAqB,CAAC;AAI/B;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOrD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAYR"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
2
|
+
/**
|
|
3
|
+
* Parses an ISO `YYYY-MM-DD` string into a `Date` at local midnight,
|
|
4
|
+
* sidestepping the UTC-vs-local parsing ambiguity of the `Date` constructor
|
|
5
|
+
* when given a string.
|
|
6
|
+
*/
|
|
7
|
+
export function parseIsoDate(iso) {
|
|
8
|
+
if (!ISO_DATE.test(iso)) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const [year, month, day] = iso.split('-').map(Number);
|
|
12
|
+
return new Date(year, month - 1, day);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Formats an ISO date string (`YYYY-MM-DD`) for display, following the
|
|
16
|
+
* datepicker `format` property. Non-ISO inputs are passed through
|
|
17
|
+
* unchanged so partially-typed values aren't mangled.
|
|
18
|
+
*/
|
|
19
|
+
export function formatIsoDate(value, format, locale) {
|
|
20
|
+
if (!value || format === 'iso') {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
const date = parseIsoDate(value);
|
|
24
|
+
if (!date) {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
const options = typeof format === 'string'
|
|
28
|
+
? { dateStyle: format }
|
|
29
|
+
: format;
|
|
30
|
+
return new Intl.DateTimeFormat(locale ?? undefined, options).format(date);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Formats a range value (`YYYY-MM-DD - YYYY-MM-DD`) by formatting each end
|
|
34
|
+
* with `formatIsoDate` and rejoining them with the same separator.
|
|
35
|
+
*/
|
|
36
|
+
export function formatIsoDateRange(value, format, locale) {
|
|
37
|
+
if (!value || format === 'iso') {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
const parts = value.split(' - ');
|
|
41
|
+
if (parts.length !== 2) {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
const [start, end] = parts;
|
|
45
|
+
return `${formatIsoDate(start, format, locale)} - ${formatIsoDate(end, format, locale)}`;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/datepicker/format.ts"],"names":[],"mappings":"AAQA,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,MAAwB,EACxB,MAAqB;IAErB,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;QACvB,CAAC,CAAC,MAAM,CAAC;IAEb,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,MAAwB,EACxB,MAAqB;IAErB,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAC3F,CAAC","sourcesContent":["export type DatepickerFormat =\n | 'short'\n | 'medium'\n | 'long'\n | 'full'\n | 'iso'\n | Intl.DateTimeFormatOptions;\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n/**\n * Parses an ISO `YYYY-MM-DD` string into a `Date` at local midnight,\n * sidestepping the UTC-vs-local parsing ambiguity of the `Date` constructor\n * when given a string.\n */\nexport function parseIsoDate(iso: string): Date | null {\n if (!ISO_DATE.test(iso)) {\n return null;\n }\n\n const [year, month, day] = iso.split('-').map(Number);\n return new Date(year, month - 1, day);\n}\n\n/**\n * Formats an ISO date string (`YYYY-MM-DD`) for display, following the\n * datepicker `format` property. Non-ISO inputs are passed through\n * unchanged so partially-typed values aren't mangled.\n */\nexport function formatIsoDate(\n value: string,\n format: DatepickerFormat,\n locale: string | null,\n): string {\n if (!value || format === 'iso') {\n return value;\n }\n\n const date = parseIsoDate(value);\n if (!date) {\n return value;\n }\n\n const options: Intl.DateTimeFormatOptions =\n typeof format === 'string'\n ? { dateStyle: format }\n : format;\n\n return new Intl.DateTimeFormat(locale ?? undefined, options).format(date);\n}\n\n/**\n * Formats a range value (`YYYY-MM-DD - YYYY-MM-DD`) by formatting each end\n * with `formatIsoDate` and rejoining them with the same separator.\n */\nexport function formatIsoDateRange(\n value: string,\n format: DatepickerFormat,\n locale: string | null,\n): string {\n if (!value || format === 'iso') {\n return value;\n }\n\n const parts = value.split(' - ');\n if (parts.length !== 2) {\n return value;\n }\n\n const [start, end] = parts;\n return `${formatIsoDate(start, format, locale)} - ${formatIsoDate(end, format, locale)}`;\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CSSResultGroup } from '@lit/reactive-element/css-tag';
|
|
2
|
+
import { HTMLTemplateResult } from 'lit';
|
|
3
|
+
import { NativeTextFieldWrapper } from '../shared/char-count-text-field/native-text-field-wrapper.js';
|
|
4
|
+
import { DatepickerFormat } from './format.js';
|
|
5
|
+
import '../button/icon-button.js';
|
|
6
|
+
import '../calendar/range-calendar.js';
|
|
7
|
+
import '../menu/menu.js';
|
|
8
|
+
import '../ripple/ripple.js';
|
|
9
|
+
export declare class RangeDatepicker extends NativeTextFieldWrapper {
|
|
10
|
+
#private;
|
|
11
|
+
static styles: CSSResultGroup;
|
|
12
|
+
/**
|
|
13
|
+
* The BCP 47 locale tag forwarded to the underlying range calendar and used
|
|
14
|
+
* for non-editable display formatting.
|
|
15
|
+
* When `null`, the calendar falls back to the browser's `navigator.language`.
|
|
16
|
+
*/
|
|
17
|
+
locale: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Format used when displaying the value while the field is not editable.
|
|
20
|
+
* Accepts `'short'`, `'medium'`, `'long'`, `'full'`, `'iso'`, or an
|
|
21
|
+
* `Intl.DateTimeFormatOptions` object. Each end of the range is formatted
|
|
22
|
+
* independently and joined with ` - `.
|
|
23
|
+
*/
|
|
24
|
+
format: DatepickerFormat;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the input accepts manually-typed ranges. When `false` (default),
|
|
27
|
+
* the field is read-only and clicking anywhere opens the calendar popover.
|
|
28
|
+
* When `true`, the input accepts text in the `YYYY-MM-DD - YYYY-MM-DD` format;
|
|
29
|
+
* the calendar popover is opened via the trailing icon.
|
|
30
|
+
*/
|
|
31
|
+
editable: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the input is read-only. When set, manual typing is disabled even
|
|
34
|
+
* if `editable` is `true`; the calendar popover remains available.
|
|
35
|
+
*/
|
|
36
|
+
readOnly: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The positioning strategy used by the calendar popover. Use `'fixed'`
|
|
39
|
+
* when the datepicker is rendered inside a clipped/scrollable container.
|
|
40
|
+
*/
|
|
41
|
+
menuPositioning: 'relative' | 'fixed';
|
|
42
|
+
input: HTMLInputElement;
|
|
43
|
+
private _menu;
|
|
44
|
+
private _calendar;
|
|
45
|
+
private _trailingSlot;
|
|
46
|
+
protected renderControl(): HTMLTemplateResult;
|
|
47
|
+
protected renderDefaultTrailingIcon(): import("lit-html").TemplateResult<1> | import("lit-html").TemplateResult<2>;
|
|
48
|
+
protected renderAfterContent(): import("lit-html").TemplateResult<1>;
|
|
49
|
+
connectedCallback(): void;
|
|
50
|
+
disconnectedCallback(): void;
|
|
51
|
+
protected _handleInput(): void;
|
|
52
|
+
}
|
|
53
|
+
declare global {
|
|
54
|
+
interface HTMLElementTagNameMap {
|
|
55
|
+
'u-range-datepicker': RangeDatepicker;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=range-datepicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-datepicker.d.ts","sourceRoot":"","sources":["../../src/datepicker/range-datepicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAQ,kBAAkB,EAAgB,MAAM,KAAK,CAAC;AAM7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAKtG,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AAEnE,OAAO,0BAA0B,CAAC;AAClC,OAAO,+BAA+B,CAAC;AACvC,OAAO,iBAAiB,CAAC;AACzB,OAAO,qBAAqB,CAAC;AAI7B,qBACa,eAAgB,SAAQ,sBAAsB;;IACzD,OAAgB,MAAM,EAAE,cAAc,CAAmD;IAEzF;;;;OAIG;IACS,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC;;;;;OAKG;IACS,MAAM,EAAE,gBAAgB,CAAW;IAE/C;;;;;OAKG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyC,QAAQ,UAAS;IAE7D;;;OAGG;IACyD,eAAe,EAAE,UAAU,GAAG,OAAO,CAAc;IAE/F,KAAK,EAAG,gBAAgB,CAAC;IAClB,OAAO,CAAC,KAAK,CAAQ;IACX,OAAO,CAAC,SAAS,CAAiB;IACpC,OAAO,CAAC,aAAa,CAAmB;cAEpD,aAAa,IAAI,kBAAkB;cAoCnC,yBAAyB;cAmBzB,kBAAkB;IAmB5B,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;cAKlB,YAAY,IAAI,IAAI;CA4DxC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,eAAe,CAAC;KACvC;CACF"}
|