igniteui-webcomponents 7.3.1 → 7.4.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/CHANGELOG.md +72 -1
- package/animations/easings.d.ts +21 -31
- package/animations/easings.js +21 -34
- package/animations/easings.js.map +1 -1
- package/animations/player.d.ts +8 -16
- package/animations/player.js +5 -8
- package/animations/player.js.map +1 -1
- package/animations/view-transition.d.ts +10 -10
- package/animations/view-transition.js +26 -37
- package/animations/view-transition.js.map +1 -1
- package/components/avatar/themes/avatar.base.css.js +1 -1
- package/components/avatar/themes/avatar.base.css.js.map +1 -1
- package/components/badge/themes/badge.base.css.js +1 -1
- package/components/badge/themes/badge.base.css.js.map +1 -1
- package/components/banner/themes/banner.base.css.js +1 -1
- package/components/banner/themes/banner.base.css.js.map +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
- package/components/breadcrumb/breadcrumb.d.ts +74 -0
- package/components/breadcrumb/breadcrumb.js +107 -0
- package/components/breadcrumb/breadcrumb.js.map +1 -0
- package/components/breadcrumb/breadcrumbs.d.ts +60 -0
- package/components/breadcrumb/breadcrumbs.js +50 -0
- package/components/breadcrumb/breadcrumbs.js.map +1 -0
- package/components/breadcrumb/themes/breadcrumb.base.css.d.ts +1 -0
- package/components/breadcrumb/themes/breadcrumb.base.css.js +3 -0
- package/components/breadcrumb/themes/breadcrumb.base.css.js.map +1 -0
- package/components/breadcrumb/themes/breadcrumbs.base.css.d.ts +1 -0
- package/components/breadcrumb/themes/breadcrumbs.base.css.js +3 -0
- package/components/breadcrumb/themes/breadcrumbs.base.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/themes.d.ts +2 -0
- package/components/breadcrumb/themes/themes.js +50 -0
- package/components/breadcrumb/themes/themes.js.map +1 -0
- package/components/button/button.d.ts +0 -2
- package/components/button/button.js.map +1 -1
- package/components/button-group/button-group.d.ts +42 -12
- package/components/button-group/button-group.js +82 -34
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/toggle-button.d.ts +6 -1
- package/components/button-group/toggle-button.js +28 -2
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/base.d.ts +7 -2
- package/components/calendar/base.js +10 -4
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +6 -3
- package/components/calendar/calendar.js +41 -14
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +5 -8
- package/components/calendar/days-view/days-view.js +7 -16
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/helpers.d.ts +13 -0
- package/components/calendar/helpers.js +15 -0
- package/components/calendar/helpers.js.map +1 -1
- package/components/calendar/themes/calendar.base.css.js +1 -1
- package/components/calendar/themes/calendar.base.css.js.map +1 -1
- package/components/calendar/themes/days-view.base.css.js +1 -1
- package/components/calendar/themes/days-view.base.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/fluent/days-view.fluent.css.js +1 -1
- package/components/calendar/themes/shared/fluent/days-view.fluent.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/days-view.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/days-view.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/material/days-view.material.css.js +1 -1
- package/components/calendar/themes/shared/material/days-view.material.css.js.map +1 -1
- package/components/calendar/themes/year-month-view.base.css.js +1 -1
- package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
- package/components/card/themes/container.base.css.js +1 -1
- package/components/card/themes/container.base.css.js.map +1 -1
- package/components/carousel/carousel-indicator.js +1 -0
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +1 -1
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +3 -3
- 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/shared/carousel.indigo.css.js +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
- package/components/chat/chat-input.d.ts +1 -2
- package/components/chat/chat-input.js +1 -1
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat-state.d.ts +8 -9
- package/components/chat/chat-state.js.map +1 -1
- package/components/chat/chat.d.ts +1 -3
- package/components/chat/chat.js +2 -2
- package/components/chat/chat.js.map +1 -1
- package/components/chat/message-attachments.d.ts +6 -15
- package/components/chat/message-attachments.js.map +1 -1
- package/components/chat/themes/chat.base.css.js +1 -1
- package/components/chat/themes/chat.base.css.js.map +1 -1
- package/components/chat/themes/message.base.css.js +1 -1
- package/components/chat/themes/message.base.css.js.map +1 -1
- package/components/chat/utils.d.ts +0 -1
- package/components/chat/utils.js +1 -1
- package/components/chat/utils.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/checkbox.js +1 -1
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/themes/checkbox.base.css.js +1 -1
- package/components/checkbox/themes/checkbox.base.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/switch.base.css.js +1 -1
- package/components/checkbox/themes/switch.base.css.js.map +1 -1
- package/components/chip/chip.d.ts +2 -2
- package/components/chip/chip.js.map +1 -1
- package/components/color-picker/color-picker.d.ts +35 -34
- package/components/color-picker/color-picker.js +9 -4
- package/components/color-picker/color-picker.js.map +1 -1
- package/components/color-picker/common.d.ts +0 -2
- package/components/color-picker/common.js +2 -2
- package/components/color-picker/common.js.map +1 -1
- package/components/color-picker/converters.js.map +1 -1
- package/components/color-picker/picker-canvas.js.map +1 -1
- package/components/color-picker/themes/color-picker.base.css.js +1 -1
- package/components/color-picker/themes/color-picker.base.css.js.map +1 -1
- package/components/combo/combo.d.ts +18 -20
- package/components/combo/combo.js +8 -2
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/data.d.ts +7 -10
- package/components/combo/controllers/data.js.map +1 -1
- package/components/combo/themes/combo-item.base.css.js +1 -1
- package/components/combo/themes/combo-item.base.css.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/shared/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +33 -29
- package/components/date-picker/date-picker.base.js +15 -4
- package/components/date-picker/date-picker.base.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -1
- package/components/date-picker/date-picker.js +5 -3
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/date-picker.base.css.js +1 -1
- package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
- package/components/date-range-picker/date-range-input.d.ts +0 -2
- package/components/date-range-picker/date-range-input.js +0 -6
- package/components/date-range-picker/date-range-input.js.map +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +22 -31
- package/components/date-range-picker/date-range-picker.js +7 -7
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/i18n.d.ts +21 -0
- package/components/date-range-picker/i18n.js +10 -0
- package/components/date-range-picker/i18n.js.map +1 -0
- package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.d.ts +3 -3
- package/components/date-range-picker/predefined-ranges-area.js +2 -5
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/validators.d.ts +0 -4
- package/components/date-range-picker/validators.js +4 -4
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +39 -37
- package/components/date-time-input/date-time-input.base.js +6 -0
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +1 -11
- package/components/date-time-input/date-time-input.js +0 -6
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/datetime-mask-parser.d.ts +0 -10
- package/components/date-time-input/datetime-mask-parser.js +1 -1
- package/components/date-time-input/datetime-mask-parser.js.map +1 -1
- package/components/dialog/dialog.js.map +1 -1
- package/components/divider/themes/divider.base.css.js +1 -1
- package/components/divider/themes/divider.base.css.js.map +1 -1
- package/components/dropdown/dropdown-group.d.ts +2 -10
- package/components/dropdown/dropdown-group.js +2 -27
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown.d.ts +17 -23
- package/components/dropdown/dropdown.js +5 -17
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
- package/components/dropdown/themes/dropdown.base.css.js +1 -1
- package/components/dropdown/themes/dropdown.base.css.js.map +1 -1
- package/components/file-input/file-input.d.ts +2 -2
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/file-input.base.css.js +1 -1
- package/components/file-input/themes/file-input.base.css.js.map +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
- package/components/icon/icon.d.ts +1 -1
- package/components/icon/icon.registry.d.ts +6 -6
- package/components/icon/icon.registry.js.map +1 -1
- package/components/input/input.d.ts +3 -3
- package/components/input/input.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/list/themes/item.base.css.js +1 -1
- package/components/list/themes/item.base.css.js.map +1 -1
- package/components/mask-input/mask-history.d.ts +22 -18
- package/components/mask-input/mask-history.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +1 -1
- package/components/mask-input/mask-parser.d.ts +11 -13
- package/components/mask-input/mask-parser.js.map +1 -1
- package/components/nav-drawer/themes/item.base.css.js +1 -1
- package/components/nav-drawer/themes/item.base.css.js.map +1 -1
- package/components/popover/popover.d.ts +45 -34
- package/components/popover/popover.js +54 -122
- package/components/popover/popover.js.map +1 -1
- package/components/popover/position/arrow.d.ts +19 -0
- package/components/popover/position/arrow.js +33 -0
- package/components/popover/position/arrow.js.map +1 -0
- package/components/popover/position/floating.d.ts +40 -0
- package/components/popover/position/floating.js +146 -0
- package/components/popover/position/floating.js.map +1 -0
- package/components/popover/position/native.d.ts +45 -0
- package/components/popover/position/native.js +158 -0
- package/components/popover/position/native.js.map +1 -0
- package/components/popover/position/strategy.d.ts +37 -0
- package/components/popover/position/strategy.js +21 -0
- package/components/popover/position/strategy.js.map +1 -0
- package/components/popover/position/types.d.ts +26 -0
- package/components/popover/position/types.js +15 -0
- package/components/popover/position/types.js.map +1 -0
- package/components/popover/themes/light/popover.base.css.js +1 -1
- package/components/popover/themes/light/popover.base.css.js.map +1 -1
- package/components/progress/circular-progress.d.ts +0 -5
- package/components/progress/circular-progress.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/shared/linear.progress.bootstrap.css.d.ts +1 -0
- package/components/progress/themes/linear/shared/linear.progress.bootstrap.css.js +3 -0
- package/components/progress/themes/linear/shared/linear.progress.bootstrap.css.js.map +1 -0
- package/components/progress/themes/linear/themes.js +3 -2
- package/components/progress/themes/linear/themes.js.map +1 -1
- package/components/qr-code/qr-code.d.ts +29 -2
- package/components/qr-code/qr-code.js +56 -13
- package/components/qr-code/qr-code.js.map +1 -1
- package/components/qr-code/renderer/export.d.ts +28 -0
- package/components/qr-code/renderer/export.js +120 -0
- package/components/qr-code/renderer/export.js.map +1 -0
- package/components/qr-code/types.d.ts +26 -0
- package/components/qr-code/types.js.map +1 -1
- package/components/radio/radio.d.ts +4 -4
- package/components/radio/radio.js +17 -14
- package/components/radio/radio.js.map +1 -1
- package/components/radio/themes/radio.base.css.js +1 -1
- package/components/radio/themes/radio.base.css.js.map +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.d.ts +6 -6
- package/components/rating/rating.js.map +1 -1
- package/components/select/select-group.d.ts +5 -10
- package/components/select/select-group.js +10 -34
- package/components/select/select-group.js.map +1 -1
- package/components/select/select.d.ts +12 -20
- package/components/select/select.js +4 -14
- 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/shared/select.bootstrap.css.js +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
- package/components/slider/themes/shared/slider.material.css.js +1 -1
- package/components/slider/themes/shared/slider.material.css.js.map +1 -1
- package/components/slider/themes/slider.base.css.js +1 -1
- package/components/slider/themes/slider.base.css.js.map +1 -1
- package/components/snackbar/themes/snackbar.base.css.js +1 -1
- package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
- package/components/splitter/splitter.d.ts +6 -6
- package/components/splitter/splitter.js.map +1 -1
- package/components/splitter/themes/splitter.base.css.js +1 -1
- package/components/splitter/themes/splitter.base.css.js.map +1 -1
- package/components/stepper/themes/step/step.base.css.js +1 -1
- package/components/stepper/themes/step/step.base.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.fluent.css.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/shared/tabs/tabs.material.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.material.css.js.map +1 -1
- package/components/tabs/themes/tab.base.css.js +1 -1
- package/components/tabs/themes/tab.base.css.js.map +1 -1
- package/components/textarea/textarea.d.ts +1 -1
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
- package/components/tile-manager/themes/tile.base.css.js +1 -1
- package/components/tile-manager/themes/tile.base.css.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +6 -7
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +3 -3
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/themes/toast.base.css.js +1 -1
- package/components/toast/themes/toast.base.css.js.map +1 -1
- package/components/toast/toast.d.ts +0 -2
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/controller.js.map +1 -1
- package/components/tooltip/service.js +4 -5
- package/components/tooltip/service.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 +34 -13
- package/components/tooltip/tooltip.js +8 -4
- package/components/tooltip/tooltip.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/tree-item.d.ts +6 -6
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.navigation.d.ts +5 -6
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/tree/tree.selection.js.map +1 -1
- package/components/types.d.ts +1 -1
- package/components/types.js.map +1 -1
- package/components/validation-container/themes/validator.base.css.js +1 -1
- package/components/validation-container/themes/validator.base.css.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +10 -12
- package/components/validation-container/validation-container.js +14 -17
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +5 -5
- package/components/virtualization/engine.js.map +1 -1
- package/components/virtualization/virtualization.d.ts +61 -63
- package/components/virtualization/virtualization.js +6 -5
- package/components/virtualization/virtualization.js.map +1 -1
- package/custom-elements.json +16769 -19698
- package/igniteui-webcomponents.css-data.json +2 -2
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +3 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/internals/abort-handler.d.ts +13 -25
- package/internals/abort-handler.js +4 -6
- package/internals/abort-handler.js.map +1 -1
- package/internals/context.d.ts +13 -7
- package/internals/context.js +2 -1
- package/internals/context.js.map +1 -1
- package/internals/controllers/adopt-styles.d.ts +19 -20
- package/internals/controllers/adopt-styles.js +3 -8
- package/internals/controllers/adopt-styles.js.map +1 -1
- package/internals/controllers/aria-projection.d.ts +56 -55
- package/internals/controllers/aria-projection.js +14 -15
- package/internals/controllers/aria-projection.js.map +1 -1
- package/internals/controllers/async-consumer.js.map +1 -1
- package/internals/controllers/command.d.ts +15 -30
- package/internals/controllers/command.js +2 -7
- package/internals/controllers/command.js.map +1 -1
- package/internals/controllers/context-provider.d.ts +7 -13
- package/internals/controllers/context-provider.js.map +1 -1
- package/internals/controllers/focus-ring.d.ts +10 -30
- package/internals/controllers/focus-ring.js +6 -12
- package/internals/controllers/focus-ring.js.map +1 -1
- package/internals/controllers/fullscreen.d.ts +7 -23
- package/internals/controllers/fullscreen.js +3 -9
- package/internals/controllers/fullscreen.js.map +1 -1
- package/internals/controllers/gestures.d.ts +10 -29
- package/internals/controllers/gestures.js +1 -3
- package/internals/controllers/gestures.js.map +1 -1
- package/internals/controllers/group.d.ts +13 -30
- package/internals/controllers/group.js.map +1 -1
- package/internals/controllers/host-listeners.d.ts +28 -0
- package/internals/controllers/host-listeners.js +27 -0
- package/internals/controllers/host-listeners.js.map +1 -0
- package/internals/controllers/id-resolver.d.ts +8 -9
- package/internals/controllers/id-resolver.js +6 -14
- package/internals/controllers/id-resolver.js.map +1 -1
- package/internals/controllers/internals.d.ts +53 -104
- package/internals/controllers/internals.js +40 -13
- package/internals/controllers/internals.js.map +1 -1
- package/internals/controllers/key-bindings.d.ts +61 -158
- package/internals/controllers/key-bindings.js +68 -67
- package/internals/controllers/key-bindings.js.map +1 -1
- package/internals/controllers/keys.d.ts +32 -0
- package/internals/controllers/keys.js +20 -0
- package/internals/controllers/keys.js.map +1 -0
- package/internals/controllers/mutation-observer.d.ts +14 -37
- package/internals/controllers/mutation-observer.js +1 -1
- package/internals/controllers/mutation-observer.js.map +1 -1
- package/internals/controllers/resize-observer.d.ts +9 -19
- package/internals/controllers/resize-observer.js.map +1 -1
- package/internals/controllers/root-click.d.ts +11 -42
- package/internals/controllers/root-click.js +4 -6
- package/internals/controllers/root-click.js.map +1 -1
- package/internals/controllers/roving-focus.d.ts +16 -35
- package/internals/controllers/roving-focus.js.map +1 -1
- package/internals/controllers/slot.d.ts +25 -54
- package/internals/controllers/slot.js +6 -6
- package/internals/controllers/slot.js.map +1 -1
- package/internals/controllers/toggle.d.ts +44 -48
- package/internals/controllers/toggle.js.map +1 -1
- package/internals/date/compare.js.map +1 -1
- package/internals/date/converters.d.ts +10 -7
- package/internals/date/converters.js.map +1 -1
- package/internals/date/model.d.ts +9 -16
- package/internals/date/model.js +22 -25
- package/internals/date/model.js.map +1 -1
- package/internals/decorators/blazorAdditionalDependencies.d.ts +4 -2
- package/internals/decorators/blazorAdditionalDependencies.js.map +1 -1
- package/internals/decorators/blazorDeepImport.d.ts +1 -3
- package/internals/decorators/blazorDeepImport.js.map +1 -1
- package/internals/decorators/blazorInclude.d.ts +3 -2
- package/internals/decorators/blazorInclude.js.map +1 -1
- package/internals/decorators/blazorIndirectRender.d.ts +1 -3
- package/internals/decorators/blazorIndirectRender.js.map +1 -1
- package/internals/decorators/blazorSuppressComponent.d.ts +1 -3
- package/internals/decorators/blazorSuppressComponent.js.map +1 -1
- package/internals/decorators/coerced-property.d.ts +14 -20
- package/internals/decorators/coerced-property.js.map +1 -1
- package/internals/decorators/shadow-options.d.ts +2 -5
- package/internals/decorators/shadow-options.js.map +1 -1
- package/internals/definitions/defineAllComponents.js +6 -0
- package/internals/definitions/defineAllComponents.js.map +1 -1
- package/internals/directives/drag.d.ts +51 -81
- package/internals/directives/drag.js +27 -89
- package/internals/directives/drag.js.map +1 -1
- package/internals/directives/pointer-operation.d.ts +75 -0
- package/internals/directives/pointer-operation.js +92 -0
- package/internals/directives/pointer-operation.js.map +1 -0
- package/internals/directives/resize.d.ts +36 -64
- package/internals/directives/resize.js +18 -85
- package/internals/directives/resize.js.map +1 -1
- package/internals/i18n/EN/calendar.resources.d.ts +8 -2
- package/internals/i18n/EN/calendar.resources.js +2 -2
- package/internals/i18n/EN/calendar.resources.js.map +1 -1
- package/internals/i18n/EN/chat.resources.d.ts +8 -2
- package/internals/i18n/EN/chat.resources.js +3 -10
- package/internals/i18n/EN/chat.resources.js.map +1 -1
- package/internals/i18n/EN/date-picker.resources.d.ts +6 -4
- package/internals/i18n/EN/date-picker.resources.js +1 -7
- package/internals/i18n/EN/date-picker.resources.js.map +1 -1
- package/internals/i18n/EN/date-range-picker.resources.d.ts +9 -2
- package/internals/i18n/EN/date-range-picker.resources.js +2 -2
- package/internals/i18n/EN/date-range-picker.resources.js.map +1 -1
- package/internals/i18n/i18n-controller.d.ts +44 -46
- package/internals/i18n/i18n-controller.js +46 -33
- package/internals/i18n/i18n-controller.js.map +1 -1
- package/internals/i18n/utils.d.ts +9 -4
- package/internals/i18n/utils.js +4 -27
- package/internals/i18n/utils.js.map +1 -1
- package/internals/mixins/alert.d.ts +10 -25
- package/internals/mixins/alert.js.map +1 -1
- package/internals/mixins/combo-box.d.ts +21 -11
- package/internals/mixins/combo-box.js +16 -22
- package/internals/mixins/combo-box.js.map +1 -1
- package/internals/mixins/event-emitter.js +9 -11
- package/internals/mixins/event-emitter.js.map +1 -1
- package/internals/mixins/forms/associated-required.d.ts +4 -4
- package/internals/mixins/forms/associated-required.js.map +1 -1
- package/internals/mixins/forms/associated.d.ts +4 -2
- package/internals/mixins/forms/associated.js +8 -19
- package/internals/mixins/forms/associated.js.map +1 -1
- package/internals/mixins/forms/form-transformers.js.map +1 -1
- package/internals/mixins/forms/types.d.ts +24 -80
- package/internals/mixins/forms/types.js.map +1 -1
- package/internals/mixins/group.d.ts +18 -0
- package/internals/mixins/group.js +37 -0
- package/internals/mixins/group.js.map +1 -0
- package/internals/mixins/i18n.d.ts +10 -16
- package/internals/mixins/i18n.js.map +1 -1
- package/internals/mixins/mask-behavior.d.ts +8 -22
- package/internals/mixins/mask-behavior.js +1 -2
- package/internals/mixins/mask-behavior.js.map +1 -1
- package/internals/mixins/option.d.ts +1 -2
- package/internals/mixins/option.js +2 -1
- package/internals/mixins/option.js.map +1 -1
- package/internals/part-map.d.ts +4 -2
- package/internals/part-map.js +1 -1
- package/internals/part-map.js.map +1 -1
- package/internals/templates/input-shell.d.ts +8 -17
- package/internals/templates/input-shell.js +4 -1
- package/internals/templates/input-shell.js.map +1 -1
- package/internals/templates/masked-input.d.ts +7 -8
- package/internals/templates/masked-input.js.map +1 -1
- package/internals/templates/slotted-icon.d.ts +7 -12
- package/internals/templates/slotted-icon.js.map +1 -1
- package/internals/templates/toggle-shell.d.ts +6 -7
- package/internals/templates/toggle-shell.js.map +1 -1
- package/internals/timing.d.ts +5 -14
- package/internals/timing.js.map +1 -1
- package/internals/utils/arrays.d.ts +21 -21
- package/internals/utils/arrays.js +14 -0
- package/internals/utils/arrays.js.map +1 -1
- package/internals/utils/dom.d.ts +51 -39
- package/internals/utils/dom.js +1 -2
- package/internals/utils/dom.js.map +1 -1
- package/internals/utils/events.d.ts +29 -16
- package/internals/utils/events.js +9 -1
- package/internals/utils/events.js.map +1 -1
- package/internals/utils/lit.d.ts +5 -2
- package/internals/utils/lit.js.map +1 -1
- package/internals/utils/math.d.ts +8 -6
- package/internals/utils/math.js.map +1 -1
- package/internals/utils/objects.d.ts +3 -20
- package/internals/utils/objects.js +1 -39
- package/internals/utils/objects.js.map +1 -1
- package/internals/utils/strings.d.ts +9 -11
- package/internals/utils/strings.js.map +1 -1
- package/internals/utils/types.d.ts +16 -3
- package/internals/utils/types.js +3 -0
- package/internals/utils/types.js.map +1 -1
- package/internals/validators.d.ts +9 -8
- package/internals/validators.js +12 -6
- package/internals/validators.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +3 -0
- package/skills/igniteui-wc-figma-to-app/SKILL.md +907 -0
- package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +363 -0
- package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +407 -0
- package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +325 -0
- package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +409 -0
- package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +376 -0
- package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +21 -0
- package/skills/igniteui-wc-integrate-with-framework/SKILL.md +4 -3
- package/skills/igniteui-wc-integrate-with-framework/references/vanilla-js.md +14 -0
- package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +12 -2
- package/theming/config.d.ts +14 -5
- package/theming/config.js +38 -18
- package/theming/config.js.map +1 -1
- package/theming/context.d.ts +1 -23
- package/theming/context.js.map +1 -1
- package/theming/theming-controller.d.ts +2 -32
- package/theming/theming-controller.js +15 -21
- package/theming/theming-controller.js.map +1 -1
- package/theming/theming-event.d.ts +0 -7
- package/theming/theming-event.js +0 -13
- package/theming/theming-event.js.map +1 -1
- package/theming/types.d.ts +1 -8
- package/theming/types.js.map +1 -1
- package/web-types.json +3 -3
- package/animations/presets/slide/index.d.ts +0 -3
- package/animations/presets/slide/index.js +0 -16
- package/animations/presets/slide/index.js.map +0 -1
- package/internals/controllers/root-scroll.d.ts +0 -31
- package/internals/controllers/root-scroll.js +0 -71
- package/internals/controllers/root-scroll.js.map +0 -1
- package/theming/utils.d.ts +0 -11
- package/theming/utils.js +0 -20
- package/theming/utils.js.map +0 -1
|
@@ -2,16 +2,6 @@ import { type MaskOptions, MaskParser } from '../mask-input/mask-parser.js';
|
|
|
2
2
|
import { DatePartType, type IDatePart } from './date-part.js';
|
|
3
3
|
/** Default date/time format */
|
|
4
4
|
export declare const DEFAULT_DATETIME_FORMAT = "MM/dd/yyyy";
|
|
5
|
-
/**
|
|
6
|
-
* Converts a date format string into a mask pattern. Date characters become `0`, or `L`
|
|
7
|
-
* for the alphabetic AM/PM marker; everything else is carried over as a literal.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* toMaskFormat('MM/dd/yyyy'); // '00/00/0000'
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
export declare function toMaskFormat(dateFormat: string): string;
|
|
15
5
|
/**
|
|
16
6
|
* Base for parsers whose public format is a date/time format string rather than a mask
|
|
17
7
|
* pattern. Owns the translation between the two and the list of positioned parts.
|
|
@@ -26,7 +26,7 @@ const DEFAULT_DATE_VALUES = {
|
|
|
26
26
|
seconds: 0,
|
|
27
27
|
};
|
|
28
28
|
export const DEFAULT_DATETIME_FORMAT = 'MM/dd/yyyy';
|
|
29
|
-
|
|
29
|
+
function toMaskFormat(dateFormat) {
|
|
30
30
|
let result = '';
|
|
31
31
|
for (const char of dateFormat) {
|
|
32
32
|
const type = FORMAT_CHAR_TO_DATE_PART.get(char);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datetime-mask-parser.js","sourceRoot":"","sources":["../../../src/components/date-time-input/datetime-mask-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { asNumber, clamp } from '#internals/utils/math.js';\nimport { type MaskOptions, MaskParser } from '../mask-input/mask-parser.js';\nimport {\n createDatePart,\n DATE_PART_TYPES,\n type DatePartOptions,\n DatePartType,\n type IDatePart,\n TIME_PART_TYPES,\n} from './date-part.js';\n\n//#region Constants\n\n/** Maps format characters to their corresponding DatePartType */\nconst FORMAT_CHAR_TO_DATE_PART = new Map<string, DatePartType>([\n ['d', DatePartType.Date],\n ['D', DatePartType.Date],\n ['M', DatePartType.Month],\n ['y', DatePartType.Year],\n ['Y', DatePartType.Year],\n ['h', DatePartType.Hours],\n ['H', DatePartType.Hours],\n ['m', DatePartType.Minutes],\n ['s', DatePartType.Seconds],\n ['S', DatePartType.Seconds],\n ['t', DatePartType.AmPm],\n ['T', DatePartType.AmPm],\n]);\n\n/** Century threshold for two-digit year interpretation */\nconst CENTURY_THRESHOLD = 50;\nconst CENTURY_BASE = 2000;\n\n/** Default values for missing date parts */\nconst DEFAULT_DATE_VALUES = {\n year: 2000,\n month: 0,\n date: 1,\n hours: 0,\n minutes: 0,\n seconds: 0,\n} as const;\n\n/** Default date/time format */\nexport const DEFAULT_DATETIME_FORMAT = 'MM/dd/yyyy';\n\n//#endregion\n\n//#region Format conversion\n\n/** A mutable date part under construction, before it is handed to `createDatePart`. */\ntype PartBuilder = DatePartOptions & { type: DatePartType };\n\n/**\n * Converts a date format string into a mask pattern. Date characters become `0`, or `L`\n * for the alphabetic AM/PM marker; everything else is carried over as a literal.\n *\n * @example\n * ```ts\n * toMaskFormat('MM/dd/yyyy'); // '00/00/0000'\n * ```\n */\nexport function toMaskFormat(dateFormat: string): string {\n let result = '';\n\n for (const char of dateFormat) {\n const type = FORMAT_CHAR_TO_DATE_PART.get(char);\n result += type ? (type === DatePartType.AmPm ? 'L' : '0') : char;\n }\n\n return result;\n}\n\n/**\n * Widens a short year format to `yyyy` for editing purposes, `yy` excluded - a two digit\n * year is edited as two digits.\n */\nfunction normalizeYearFormat(builders: PartBuilder[]): void {\n const year = builders.find((part) => part.type === DatePartType.Year);\n\n if (year && year.format.length !== 2) {\n year.end += 4 - year.format.length;\n year.format = 'yyyy';\n }\n}\n\n//#endregion\n\n/**\n * Base for parsers whose public format is a date/time format string rather than a mask\n * pattern. Owns the translation between the two and the list of positioned parts.\n */\nexport abstract class DateFormatMaskParser<\n T extends IDatePart = IDatePart,\n> extends MaskParser {\n /**\n * Built on first read, because {@link MaskParser} parses the mask from its constructor -\n * before any subclass field exists. Declared without an initializer so that it survives\n * the `_invalidate` call made from there.\n */\n private _parts?: T[];\n\n /** The positioned parts of the current format, literals included. */\n public get parts(): ReadonlyArray<T> {\n this._parts ??= this._buildParts();\n return this._parts;\n }\n\n protected abstract _buildParts(): T[];\n\n protected override _toMaskFormat(format: string): string {\n return toMaskFormat(format);\n }\n\n protected override _invalidate(): void {\n super._invalidate();\n this._parts = undefined;\n }\n\n /**\n * The part at a cursor position. The end is inclusive, so a caret resting at the end of\n * a part still resolves to it.\n */\n public getPartForCursor(position: number): T | undefined {\n return this.parts.find(\n (part) =>\n part.type !== DatePartType.Literal &&\n position >= part.start &&\n position <= part.end\n );\n }\n\n /** The first part of the given type, if the format contains one. */\n public getPartByType(type: DatePartType): T | undefined {\n return this.parts.find((part) => part.type === type);\n }\n\n /** The first non-literal part - the default target when nothing is focused. */\n public getFirstPart(): T | undefined {\n return this.parts.find((part) => part.type !== DatePartType.Literal);\n }\n\n /**\n * Whether the masked string holds nothing typed at all - every date/time position\n * is still a prompt. Unlike a partially filled mask, there is no value in it to\n * complete from the part defaults.\n */\n public isBlank(masked: string): boolean {\n return this.parts.every(\n (part) =>\n part.type === DatePartType.Literal || !this._typedPart(masked, part)\n );\n }\n\n /** Whether the format contains a day, month or year part. */\n public hasDateParts(): boolean {\n return this.parts.some((part) => DATE_PART_TYPES.has(part.type));\n }\n\n /** Whether the format contains an hours, minutes or seconds part. */\n public hasTimeParts(): boolean {\n return this.parts.some((part) => TIME_PART_TYPES.has(part.type));\n }\n\n /** The characters typed into `part`, the prompts of the unfilled positions removed. */\n protected _typedPart(masked: string, part: T): string {\n return masked.substring(part.start, part.end).replaceAll(this.prompt, '');\n }\n}\n\n/**\n * A mask parser for date/time input fields.\n *\n * @example\n * ```ts\n * const parser = new DateTimeMaskParser({ format: 'MM/dd/yyyy' });\n * parser.apply('12252023'); // '12/25/2023'\n * parser.parseDate('12/25/2023'); // Date\n * ```\n */\nexport class DateTimeMaskParser extends DateFormatMaskParser {\n constructor(options?: MaskOptions) {\n super({ ...options, format: options?.format || DEFAULT_DATETIME_FORMAT });\n }\n\n //#region Date Format Parsing\n\n protected override _buildParts(): IDatePart[] {\n const builders: PartBuilder[] = [];\n\n let run: PartBuilder | null = null;\n let position = 0;\n\n for (const char of this.mask) {\n const type = FORMAT_CHAR_TO_DATE_PART.get(char);\n\n // A part runs only while the same format character repeats - 'MM' is one part,\n // 'Mm' is two - and any literal closes it.\n if (run && !(type && run.format.includes(char))) {\n builders.push(run);\n run = null;\n }\n\n if (run) {\n run.end = position + 1;\n run.format += char;\n } else {\n const builder: PartBuilder = {\n type: type ?? DatePartType.Literal,\n start: position,\n end: position + 1,\n format: char,\n };\n\n if (type) {\n run = builder;\n } else {\n builders.push(builder);\n }\n }\n\n position++;\n }\n\n if (run) {\n builders.push(run);\n }\n\n normalizeYearFormat(builders);\n\n return builders.map(({ type, ...options }) =>\n createDatePart(type, options)\n );\n }\n\n //#endregion\n\n //#region Date Parsing\n\n /**\n * Parses a masked string into a Date object.\n * Returns null if the string cannot be parsed into a valid date.\n */\n public parseDate(masked: string): Date | null {\n const parts = this._extractDateValues(masked);\n\n // Convert to zero-based month (only if month is in format)\n if (parts[DatePartType.Month] !== undefined) {\n parts[DatePartType.Month]! -= 1;\n }\n\n // Apply century threshold for two-digit years (only if year is in format)\n if (\n parts[DatePartType.Year] !== undefined &&\n parts[DatePartType.Year]! < CENTURY_THRESHOLD\n ) {\n parts[DatePartType.Year]! += CENTURY_BASE;\n }\n\n if (!this._validateDateParts(parts)) {\n return null;\n }\n\n this._applyAmPmConversion(parts, masked);\n\n return this._createDateFromParts(parts);\n }\n\n /**\n * Extracts numeric values from the masked string for each date part.\n */\n private _extractDateValues(\n masked: string\n ): Partial<Record<DatePartType, number>> {\n const parts: Partial<Record<DatePartType, number>> = {};\n\n for (const datePart of this.parts) {\n if (datePart.type === DatePartType.Literal) continue;\n\n const isMonthOrDate =\n datePart.type === DatePartType.Date ||\n datePart.type === DatePartType.Month;\n\n parts[datePart.type] = clamp(\n asNumber(this._typedPart(masked, datePart)),\n isMonthOrDate ? 1 : 0,\n Number.MAX_SAFE_INTEGER\n );\n }\n\n return parts;\n }\n\n /**\n * Validates that parsed date parts are within valid ranges.\n * Only validates parts that are present in the format.\n */\n private _validateDateParts(\n parts: Partial<Record<DatePartType, number>>\n ): boolean {\n // Day-of-month validation needs both, so the context is built up front.\n const context = {\n year: parts[DatePartType.Year],\n month: parts[DatePartType.Month],\n };\n\n return this.parts.every((datePart) => {\n const value = parts[datePart.type];\n\n return datePart.type === DatePartType.Literal || value === undefined\n ? true\n : datePart.validate(value, context);\n });\n }\n\n /**\n * Applies AM/PM conversion to hours if format includes AM/PM.\n */\n private _applyAmPmConversion(\n parts: Partial<Record<DatePartType, number>>,\n masked: string\n ): void {\n const amPm = this.getPartByType(DatePartType.AmPm);\n const hours = parts[DatePartType.Hours];\n\n // A format can carry an AM/PM marker without an hours part; there is nothing to shift.\n if (!amPm || hours === undefined) {\n return;\n }\n\n const marker = this._typedPart(masked, amPm);\n\n parts[DatePartType.Hours] =\n (hours % 12) + (marker.toLowerCase() === 'pm' ? 12 : 0);\n }\n\n /**\n * Creates a Date object from parsed parts with defaults for missing values.\n */\n private _createDateFromParts(\n parts: Partial<Record<DatePartType, number>>\n ): Date {\n const d = DEFAULT_DATE_VALUES;\n return new Date(\n parts[DatePartType.Year] ?? d.year,\n parts[DatePartType.Month] ?? d.month,\n parts[DatePartType.Date] ?? d.date,\n parts[DatePartType.Hours] ?? d.hours,\n parts[DatePartType.Minutes] ?? d.minutes,\n parts[DatePartType.Seconds] ?? d.seconds\n );\n }\n\n //#endregion\n\n //#region Date Formatting\n\n /**\n * Formats a Date object into a masked string according to the current format.\n */\n public formatDate(date: Date | null): string {\n return date\n ? this.parts.map((part) => part.getValue(date)).join('')\n : this.emptyMask;\n }\n\n //#endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"datetime-mask-parser.js","sourceRoot":"","sources":["../../../src/components/date-time-input/datetime-mask-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { asNumber, clamp } from '#internals/utils/math.js';\nimport { type MaskOptions, MaskParser } from '../mask-input/mask-parser.js';\nimport {\n createDatePart,\n DATE_PART_TYPES,\n type DatePartOptions,\n DatePartType,\n type IDatePart,\n TIME_PART_TYPES,\n} from './date-part.js';\n\n//#region Constants\n\n/** Maps format characters to their corresponding DatePartType */\nconst FORMAT_CHAR_TO_DATE_PART = new Map<string, DatePartType>([\n ['d', DatePartType.Date],\n ['D', DatePartType.Date],\n ['M', DatePartType.Month],\n ['y', DatePartType.Year],\n ['Y', DatePartType.Year],\n ['h', DatePartType.Hours],\n ['H', DatePartType.Hours],\n ['m', DatePartType.Minutes],\n ['s', DatePartType.Seconds],\n ['S', DatePartType.Seconds],\n ['t', DatePartType.AmPm],\n ['T', DatePartType.AmPm],\n]);\n\n/** Century threshold for two-digit year interpretation */\nconst CENTURY_THRESHOLD = 50;\nconst CENTURY_BASE = 2000;\n\n/** Default values for missing date parts */\nconst DEFAULT_DATE_VALUES = {\n year: 2000,\n month: 0,\n date: 1,\n hours: 0,\n minutes: 0,\n seconds: 0,\n} as const;\n\n/** Default date/time format */\nexport const DEFAULT_DATETIME_FORMAT = 'MM/dd/yyyy';\n\n//#endregion\n\n//#region Format conversion\n\n/** A mutable date part under construction, before it is handed to `createDatePart`. */\ntype PartBuilder = DatePartOptions & { type: DatePartType };\n\n/**\n * Converts a date format string into a mask pattern. Date characters become `0`, or `L`\n * for the alphabetic AM/PM marker; everything else is carried over as a literal.\n *\n * @example\n * ```ts\n * toMaskFormat('MM/dd/yyyy'); // '00/00/0000'\n * ```\n */\nfunction toMaskFormat(dateFormat: string): string {\n let result = '';\n\n for (const char of dateFormat) {\n const type = FORMAT_CHAR_TO_DATE_PART.get(char);\n result += type ? (type === DatePartType.AmPm ? 'L' : '0') : char;\n }\n\n return result;\n}\n\n/**\n * Widens a short year format to `yyyy` for editing purposes, `yy` excluded - a two digit\n * year is edited as two digits.\n */\nfunction normalizeYearFormat(builders: PartBuilder[]): void {\n const year = builders.find((part) => part.type === DatePartType.Year);\n\n if (year && year.format.length !== 2) {\n year.end += 4 - year.format.length;\n year.format = 'yyyy';\n }\n}\n\n//#endregion\n\n/**\n * Base for parsers whose public format is a date/time format string rather than a mask\n * pattern. Owns the translation between the two and the list of positioned parts.\n */\nexport abstract class DateFormatMaskParser<\n T extends IDatePart = IDatePart,\n> extends MaskParser {\n /**\n * Built on first read, because {@link MaskParser} parses the mask from its constructor -\n * before any subclass field exists. Declared without an initializer so that it survives\n * the `_invalidate` call made from there.\n */\n private _parts?: T[];\n\n /** The positioned parts of the current format, literals included. */\n public get parts(): ReadonlyArray<T> {\n this._parts ??= this._buildParts();\n return this._parts;\n }\n\n protected abstract _buildParts(): T[];\n\n protected override _toMaskFormat(format: string): string {\n return toMaskFormat(format);\n }\n\n protected override _invalidate(): void {\n super._invalidate();\n this._parts = undefined;\n }\n\n /**\n * The part at a cursor position. The end is inclusive, so a caret resting at the end of\n * a part still resolves to it.\n */\n public getPartForCursor(position: number): T | undefined {\n return this.parts.find(\n (part) =>\n part.type !== DatePartType.Literal &&\n position >= part.start &&\n position <= part.end\n );\n }\n\n /** The first part of the given type, if the format contains one. */\n public getPartByType(type: DatePartType): T | undefined {\n return this.parts.find((part) => part.type === type);\n }\n\n /** The first non-literal part - the default target when nothing is focused. */\n public getFirstPart(): T | undefined {\n return this.parts.find((part) => part.type !== DatePartType.Literal);\n }\n\n /**\n * Whether the masked string holds nothing typed at all - every date/time position\n * is still a prompt. Unlike a partially filled mask, there is no value in it to\n * complete from the part defaults.\n */\n public isBlank(masked: string): boolean {\n return this.parts.every(\n (part) =>\n part.type === DatePartType.Literal || !this._typedPart(masked, part)\n );\n }\n\n /** Whether the format contains a day, month or year part. */\n public hasDateParts(): boolean {\n return this.parts.some((part) => DATE_PART_TYPES.has(part.type));\n }\n\n /** Whether the format contains an hours, minutes or seconds part. */\n public hasTimeParts(): boolean {\n return this.parts.some((part) => TIME_PART_TYPES.has(part.type));\n }\n\n /** The characters typed into `part`, the prompts of the unfilled positions removed. */\n protected _typedPart(masked: string, part: T): string {\n return masked.substring(part.start, part.end).replaceAll(this.prompt, '');\n }\n}\n\n/**\n * A mask parser for date/time input fields.\n *\n * @example\n * ```ts\n * const parser = new DateTimeMaskParser({ format: 'MM/dd/yyyy' });\n * parser.apply('12252023'); // '12/25/2023'\n * parser.parseDate('12/25/2023'); // Date\n * ```\n */\nexport class DateTimeMaskParser extends DateFormatMaskParser {\n constructor(options?: MaskOptions) {\n super({ ...options, format: options?.format || DEFAULT_DATETIME_FORMAT });\n }\n\n //#region Date Format Parsing\n\n protected override _buildParts(): IDatePart[] {\n const builders: PartBuilder[] = [];\n\n let run: PartBuilder | null = null;\n let position = 0;\n\n for (const char of this.mask) {\n const type = FORMAT_CHAR_TO_DATE_PART.get(char);\n\n // A part runs only while the same format character repeats - 'MM' is one part,\n // 'Mm' is two - and any literal closes it.\n if (run && !(type && run.format.includes(char))) {\n builders.push(run);\n run = null;\n }\n\n if (run) {\n run.end = position + 1;\n run.format += char;\n } else {\n const builder: PartBuilder = {\n type: type ?? DatePartType.Literal,\n start: position,\n end: position + 1,\n format: char,\n };\n\n if (type) {\n run = builder;\n } else {\n builders.push(builder);\n }\n }\n\n position++;\n }\n\n if (run) {\n builders.push(run);\n }\n\n normalizeYearFormat(builders);\n\n return builders.map(({ type, ...options }) =>\n createDatePart(type, options)\n );\n }\n\n //#endregion\n\n //#region Date Parsing\n\n /**\n * Parses a masked string into a Date object.\n * Returns null if the string cannot be parsed into a valid date.\n */\n public parseDate(masked: string): Date | null {\n const parts = this._extractDateValues(masked);\n\n // Convert to zero-based month (only if month is in format)\n if (parts[DatePartType.Month] !== undefined) {\n parts[DatePartType.Month]! -= 1;\n }\n\n // Apply century threshold for two-digit years (only if year is in format)\n if (\n parts[DatePartType.Year] !== undefined &&\n parts[DatePartType.Year]! < CENTURY_THRESHOLD\n ) {\n parts[DatePartType.Year]! += CENTURY_BASE;\n }\n\n if (!this._validateDateParts(parts)) {\n return null;\n }\n\n this._applyAmPmConversion(parts, masked);\n\n return this._createDateFromParts(parts);\n }\n\n /**\n * Extracts numeric values from the masked string for each date part.\n */\n private _extractDateValues(\n masked: string\n ): Partial<Record<DatePartType, number>> {\n const parts: Partial<Record<DatePartType, number>> = {};\n\n for (const datePart of this.parts) {\n if (datePart.type === DatePartType.Literal) continue;\n\n const isMonthOrDate =\n datePart.type === DatePartType.Date ||\n datePart.type === DatePartType.Month;\n\n parts[datePart.type] = clamp(\n asNumber(this._typedPart(masked, datePart)),\n isMonthOrDate ? 1 : 0,\n Number.MAX_SAFE_INTEGER\n );\n }\n\n return parts;\n }\n\n /**\n * Validates that parsed date parts are within valid ranges.\n * Only validates parts that are present in the format.\n */\n private _validateDateParts(\n parts: Partial<Record<DatePartType, number>>\n ): boolean {\n // Day-of-month validation needs both, so the context is built up front.\n const context = {\n year: parts[DatePartType.Year],\n month: parts[DatePartType.Month],\n };\n\n return this.parts.every((datePart) => {\n const value = parts[datePart.type];\n\n return datePart.type === DatePartType.Literal || value === undefined\n ? true\n : datePart.validate(value, context);\n });\n }\n\n /**\n * Applies AM/PM conversion to hours if format includes AM/PM.\n */\n private _applyAmPmConversion(\n parts: Partial<Record<DatePartType, number>>,\n masked: string\n ): void {\n const amPm = this.getPartByType(DatePartType.AmPm);\n const hours = parts[DatePartType.Hours];\n\n // A format can carry an AM/PM marker without an hours part; there is nothing to shift.\n if (!amPm || hours === undefined) {\n return;\n }\n\n const marker = this._typedPart(masked, amPm);\n\n parts[DatePartType.Hours] =\n (hours % 12) + (marker.toLowerCase() === 'pm' ? 12 : 0);\n }\n\n /**\n * Creates a Date object from parsed parts with defaults for missing values.\n */\n private _createDateFromParts(\n parts: Partial<Record<DatePartType, number>>\n ): Date {\n const d = DEFAULT_DATE_VALUES;\n return new Date(\n parts[DatePartType.Year] ?? d.year,\n parts[DatePartType.Month] ?? d.month,\n parts[DatePartType.Date] ?? d.date,\n parts[DatePartType.Hours] ?? d.hours,\n parts[DatePartType.Minutes] ?? d.minutes,\n parts[DatePartType.Seconds] ?? d.seconds\n );\n }\n\n //#endregion\n\n //#region Date Formatting\n\n /**\n * Formats a Date object into a masked string according to the current format.\n */\n public formatDate(date: Date | null): string {\n return date\n ? this.parts.map((part) => part.getValue(date)).join('')\n : this.emptyMask;\n }\n\n //#endregion\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeIn, fadeOut } from '#animations/presets/fade/index.js';\nimport { addCommandController } from '#internals/controllers/command.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { addToggleController } from '#internals/controllers/toggle.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { partMap } from '#internals/part-map.js';\nimport { isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('title');\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * A modal dialog component built on the native `<dialog>` element.\n *\n * The dialog traps focus while open and blocks interaction with the rest\n * of the page (modal semantics). It supports animated open/close\n * transitions, an optional backdrop overlay, and multiple content areas\n * through named slots.\n *\n * The component integrates with the\n * [Invoker Commands API](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API):\n * an Ignite button or a native `<button>` with `command=\"--show\"` / `\"--hide\"` / `\"--toggle\"`\n * and `commandfor` pointing to this element will call the corresponding method\n * declaratively without any JavaScript.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitted just before the dialog closes. Cancelable -\n * call `event.preventDefault()` to abort the closing sequence.\n * @fires igcClosed - Emitted after the dialog has fully closed and its\n * exit animation has completed.\n *\n * @slot - General-purpose content area. Also the target for any\n * `<form method=\"dialog\">` placed inside the dialog.\n * @slot title - Content rendered in the dialog header. Falls back to the\n * `title` attribute when empty.\n * @slot message - A dedicated message/body area rendered above the default\n * slot. Hidden when no content is assigned.\n * @slot footer - Content rendered in the dialog footer. When empty, a\n * default \"OK\" close button is shown (unless `hide-default-action` is set).\n *\n * @csspart base - The native `<dialog>` element.\n * @csspart title - The `<header>` element wrapping the title slot.\n * @csspart content - The `<section>` element wrapping the message and default slots.\n * @csspart footer - The `<footer>` element wrapping the footer slot.\n * @csspart backdrop - The decorative backdrop overlay element.\n * @csspart animating - Applied to the backdrop while an animation is running.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = nextId();\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n private readonly _toggleController = addToggleController(this, {\n transition: async (open) => {\n if (open) {\n this.open = true;\n // A superseded exit clears this too, but only once its animation\n // reports the cancellation - too late for this render.\n this._animating = false;\n return this._player.playExclusive(fadeIn());\n }\n\n this._animating = true;\n const completed = await this._player.playExclusive(fadeOut());\n this._animating = false;\n\n // An interrupted exit animation means a newer `show()` took over.\n if (completed) {\n this.open = false;\n }\n\n return completed;\n },\n });\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement | undefined {\n return this._dialogRef.value;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * When set, pressing the `Escape` key will not close the dialog.\n *\n * By default the browser closes a modal dialog on `Escape`. Enable this\n * option when the dialog guards unsaved work and should require an explicit\n * user action to dismiss.\n * @attr keep-open-on-escape\n * @default false\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * When set, clicking on the backdrop area outside the dialog surface\n * will close it (emitting close events).\n *\n * Has no effect when the dialog is not yet open.\n * @attr close-on-outside-click\n * @default false\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * When set, the built-in \"OK\" close button in the footer is not rendered.\n *\n * Has no effect when content is projected into the `footer` slot, since\n * the slot content replaces the default button entirely.\n * @attr hide-default-action\n * @default false\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is open.\n *\n * Setting this property programmatically will open or close the dialog\n * without animation and without emitting close events.\n * Prefer the `show()`, `hide()`, and `toggle()` methods for animated\n * transitions.\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * The title displayed in the dialog header.\n *\n * Overridden by any content projected into the `title` slot.\n * @attr title\n */\n @property()\n public override title!: string;\n\n /**\n * The return value of the dialog.\n *\n * Automatically set to the `value` of the submitter element when a\n * `<form method=\"dialog\">` inside the dialog is submitted. Can also\n * be set programmatically before calling `hide()`.\n */\n @property({ attribute: false })\n public returnValue?: string;\n\n //#endregion\n\n //#region Lifecycle\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addCommandController(this)\n .set('--show', this.show)\n .set('--hide', this.hide)\n .set('--toggle', this.toggle);\n }\n\n protected override updated(properties: PropertyValues<this>): void {\n if (properties.has('open')) {\n this.open ? this._dialog?.showModal() : this._dialog?.close();\n }\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._closeWithEvent();\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._closeWithEvent();\n }\n }\n\n private _handleClose(): void {\n // When a non-cancelable close event is fired (e.g., from repeated Escape presses),\n // reopen the dialog to prevent the broken state with visible backdrop.\n // Note that this handler is invoked only when `keepOpenOnEscape` is true.\n if (this.open) {\n this._dialog?.showModal();\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (\n this.closeOnOutsideClick &&\n this._dialog === target &&\n !isPointInsideElement(this._dialog, clientX, clientY)\n ) {\n this._closeWithEvent();\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private _closeWithEvent(): void {\n this._toggleController.hide(true);\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Opens the dialog with an animated fade-in transition.\n *\n * Returns `true` when the dialog was successfully opened, or `false` if it\n * was already open or the transition was superseded by a newer one.\n */\n public async show(): Promise<boolean> {\n return this._toggleController.show();\n }\n\n /**\n * Closes the dialog with an animated fade-out transition.\n *\n * Returns `true` when the dialog was successfully closed, or `false` if it\n * was already closed or the transition was superseded by a newer one.\n */\n public async hide(): Promise<boolean> {\n return this._toggleController.hide();\n }\n\n /**\n * Toggles the dialog open or closed depending on its current state.\n *\n * Equivalent to calling `show()` when closed and `hide()` when open.\n * Returns `true` when the transition completed successfully.\n */\n public async toggle(): Promise<boolean> {\n return this._toggleController.toggle();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${\n this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${this._closeWithEvent}>\n OK\n </igc-button>\n `\n }\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${bindIf(this.ariaLabel, this.ariaLabel)}\n aria-labelledby=${bindIf(labelledBy, labelledBy)}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n @close=${bindIf(this.keepOpenOnEscape, this._handleClose)}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeIn, fadeOut } from '#animations/presets/fade/index.js';\nimport { addCommandController } from '#internals/controllers/command.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { addToggleController } from '#internals/controllers/toggle.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { partMap } from '#internals/part-map.js';\nimport { isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('title');\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * A modal dialog component built on the native `<dialog>` element.\n *\n * The dialog traps focus while open and blocks interaction with the rest\n * of the page (modal semantics). It supports animated open/close\n * transitions, an optional backdrop overlay, and multiple content areas\n * through named slots.\n *\n * The component integrates with the\n * [Invoker Commands API](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API):\n * an Ignite button or a native `<button>` with `command=\"--show\"` / `\"--hide\"` / `\"--toggle\"`\n * and `commandfor` pointing to this element will call the corresponding method\n * declaratively without any JavaScript.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitted just before the dialog closes. Cancelable -\n * call `event.preventDefault()` to abort the closing sequence.\n * @fires igcClosed - Emitted after the dialog has fully closed and its\n * exit animation has completed.\n *\n * @slot - General-purpose content area. Also the target for any\n * `<form method=\"dialog\">` placed inside the dialog.\n * @slot title - Content rendered in the dialog header. Falls back to the\n * `title` attribute when empty.\n * @slot message - A dedicated message/body area rendered above the default\n * slot. Hidden when no content is assigned.\n * @slot footer - Content rendered in the dialog footer. When empty, a\n * default \"OK\" close button is shown (unless `hide-default-action` is set).\n *\n * @csspart base - The native `<dialog>` element.\n * @csspart title - The `<header>` element wrapping the title slot.\n * @csspart content - The `<section>` element wrapping the message and default slots.\n * @csspart footer - The `<footer>` element wrapping the footer slot.\n * @csspart backdrop - The decorative backdrop overlay element.\n * @csspart animating - Applied to the backdrop while an animation is running.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = nextId();\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n private readonly _toggleController = addToggleController(this, {\n transition: async (open) => {\n if (open) {\n this.open = true;\n // A superseded exit clears this too, but only once its animation\n // reports the cancellation - too late for this render.\n this._animating = false;\n return this._player.playExclusive(fadeIn());\n }\n\n this._animating = true;\n const completed = await this._player.playExclusive(fadeOut());\n this._animating = false;\n\n // An interrupted exit animation means a newer `show()` took over.\n if (completed) {\n this.open = false;\n }\n\n return completed;\n },\n });\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement | undefined {\n return this._dialogRef.value;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * When set, pressing the `Escape` key will not close the dialog.\n *\n * By default the browser closes a modal dialog on `Escape`. Enable this\n * option when the dialog guards unsaved work and should require an explicit\n * user action to dismiss.\n * @attr keep-open-on-escape\n * @default false\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * When set, clicking on the backdrop area outside the dialog surface\n * will close it (emitting close events).\n *\n * Has no effect when the dialog is not yet open.\n * @attr close-on-outside-click\n * @default false\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * When set, the built-in \"OK\" close button in the footer is not rendered.\n *\n * Has no effect when content is projected into the `footer` slot, since\n * the slot content replaces the default button entirely.\n * @attr hide-default-action\n * @default false\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is open.\n *\n * Setting this property programmatically will open or close the dialog\n * without animation and without emitting close events.\n * Prefer the `show()`, `hide()`, and `toggle()` methods for animated\n * transitions.\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * The title displayed in the dialog header.\n *\n * Overridden by any content projected into the `title` slot.\n * @attr title\n */\n @property()\n public override title!: string;\n\n /**\n * The return value of the dialog.\n *\n * Automatically set to the `value` of the submitter element when a\n * `<form method=\"dialog\">` inside the dialog is submitted. Can also\n * be set programmatically before calling `hide()`.\n */\n @property({ attribute: false })\n public returnValue?: string;\n\n //#endregion\n\n //#region Lifecycle\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addCommandController(this)\n .set('--show', this.show)\n .set('--hide', this.hide)\n .set('--toggle', this.toggle);\n }\n\n protected override updated(properties: PropertyValues<this>): void {\n if (properties.has('open')) {\n this.open ? this._dialog?.showModal() : this._dialog?.close();\n }\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._closeWithEvent();\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._closeWithEvent();\n }\n }\n\n private _handleClose(): void {\n // A close event that cannot be cancelled, for example from repeated Escape\n // presses, leaves the backdrop visible. Open the dialog again. This handler\n // runs only if `keepOpenOnEscape` is true.\n if (this.open) {\n this._dialog?.showModal();\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (\n this.closeOnOutsideClick &&\n this._dialog === target &&\n !isPointInsideElement(this._dialog, clientX, clientY)\n ) {\n this._closeWithEvent();\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private _closeWithEvent(): void {\n this._toggleController.hide(true);\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Opens the dialog with an animated fade-in transition.\n *\n * Returns `true` when the dialog was successfully opened, or `false` if it\n * was already open or the transition was superseded by a newer one.\n */\n public async show(): Promise<boolean> {\n return this._toggleController.show();\n }\n\n /**\n * Closes the dialog with an animated fade-out transition.\n *\n * Returns `true` when the dialog was successfully closed, or `false` if it\n * was already closed or the transition was superseded by a newer one.\n */\n public async hide(): Promise<boolean> {\n return this._toggleController.hide();\n }\n\n /**\n * Toggles the dialog open or closed depending on its current state.\n *\n * Equivalent to calling `show()` when closed and `hide()` when open.\n * Returns `true` when the transition completed successfully.\n */\n public async toggle(): Promise<boolean> {\n return this._toggleController.toggle();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${\n this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${this._closeWithEvent}>\n OK\n </igc-button>\n `\n }\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${bindIf(this.ariaLabel, this.ariaLabel)}\n aria-labelledby=${bindIf(labelledBy, labelledBy)}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n @close=${bindIf(this.keepOpenOnEscape, this._handleClose)}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:flex;position:relative;justify-content:center;overflow:hidden;min-height:.0625rem;width:100%}:host::after{content:"";position:absolute;height:100%;width:100%}:host([vertical]){display:inline-flex;min-width:.0625rem;width:.0625rem}`;
|
|
2
|
+
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:flex;position:relative;justify-content:center;overflow:hidden;min-height:.0625rem;width:100%}:host::after{content:"";position:absolute;height:100%;width:100%}:host([vertical]){display:inline-flex;min-width:.0625rem;width:.0625rem}@media(forced-colors: active){:host(:not([vertical]))::after{border:.1875rem solid canvasText}:host(:not([vertical])[type=dashed])::after{border-style:dashed}:host([vertical]:not([type=dashed]))::after{border-inline-start:.1875rem solid canvasText}:host([vertical][type=dashed]){border-inline-start:.0625rem dashed canvasText}}`;
|
|
3
3
|
//# sourceMappingURL=divider.base.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divider.base.css.js","sourceRoot":"","sources":["../../../../src/components/divider/themes/divider.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"divider.base.css.js","sourceRoot":"","sources":["../../../../src/components/divider/themes/divider.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,qgDAAqgD,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:flex;position:relative;justify-content:center;overflow:hidden;min-height:.0625rem;width:100%}:host::after{content:\"\";position:absolute;height:100%;width:100%}:host([vertical]){display:inline-flex;min-width:.0625rem;width:.0625rem}@media(forced-colors: active){:host(:not([vertical]))::after{border:.1875rem solid canvasText}:host(:not([vertical])[type=dashed])::after{border-style:dashed}:host([vertical]:not([type=dashed]))::after{border-inline-start:.1875rem solid canvasText}:host([vertical][type=dashed]){border-inline-start:.0625rem dashed canvasText}}`;\n "]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IgcGroupBaseComponent } from '#internals/mixins/group.js';
|
|
2
2
|
import IgcDropdownItemComponent from './dropdown-item.js';
|
|
3
3
|
/**
|
|
4
4
|
* A container for a group of dropdown items.
|
|
@@ -10,21 +10,13 @@ import IgcDropdownItemComponent from './dropdown-item.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @csspart label - The native label element.
|
|
12
12
|
*/
|
|
13
|
-
export default class IgcDropdownGroupComponent extends
|
|
13
|
+
export default class IgcDropdownGroupComponent extends IgcGroupBaseComponent {
|
|
14
14
|
static readonly tagName = "igc-dropdown-group";
|
|
15
15
|
static styles: import("lit").CSSResult[];
|
|
16
16
|
static register(): void;
|
|
17
|
-
private readonly _internals;
|
|
18
|
-
private readonly _slots;
|
|
19
17
|
/** All child dropdown items. */
|
|
20
18
|
items: Array<IgcDropdownItemComponent>;
|
|
21
19
|
constructor();
|
|
22
|
-
/**
|
|
23
|
-
* The label is rendered into this shadow root, out of reach of an
|
|
24
|
-
* `aria-labelledby` on the host, so its text names the `group` directly.
|
|
25
|
-
*/
|
|
26
|
-
private _labelChange;
|
|
27
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
28
20
|
}
|
|
29
21
|
declare global {
|
|
30
22
|
interface HTMLElementTagNameMap {
|
|
@@ -4,18 +4,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { html, LitElement } from 'lit';
|
|
8
7
|
import { queryAssignedElements } from 'lit/decorators.js';
|
|
9
|
-
import { addInternalsController } from '#internals/controllers/internals.js';
|
|
10
|
-
import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
11
8
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
9
|
+
import { IgcGroupBaseComponent } from '#internals/mixins/group.js';
|
|
12
10
|
import { addThemingController } from '#theming/theming-controller.js';
|
|
13
11
|
import IgcDropdownItemComponent from './dropdown-item.js';
|
|
14
12
|
import { styles } from './themes/dropdown-group.base.css.js';
|
|
15
13
|
import { all } from './themes/group.js';
|
|
16
14
|
import { styles as shared } from './themes/shared/group/dropdown-group.common.css.js';
|
|
17
|
-
|
|
18
|
-
export default class IgcDropdownGroupComponent extends LitElement {
|
|
15
|
+
export default class IgcDropdownGroupComponent extends IgcGroupBaseComponent {
|
|
19
16
|
static { this.tagName = 'igc-dropdown-group'; }
|
|
20
17
|
static { this.styles = [styles, shared]; }
|
|
21
18
|
static register() {
|
|
@@ -23,30 +20,8 @@ export default class IgcDropdownGroupComponent extends LitElement {
|
|
|
23
20
|
}
|
|
24
21
|
constructor() {
|
|
25
22
|
super();
|
|
26
|
-
this._internals = addInternalsController(this, {
|
|
27
|
-
initialARIA: {
|
|
28
|
-
role: 'group',
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
this._slots = addSlotController(this, {
|
|
32
|
-
slots: Slots,
|
|
33
|
-
initial: true,
|
|
34
|
-
onChange: this._labelChange,
|
|
35
|
-
});
|
|
36
23
|
addThemingController(this, all);
|
|
37
24
|
}
|
|
38
|
-
_labelChange() {
|
|
39
|
-
const label = this._slots.getAssignedText('label', true);
|
|
40
|
-
this._internals.setARIA({ ariaLabel: label || null });
|
|
41
|
-
}
|
|
42
|
-
render() {
|
|
43
|
-
return html `
|
|
44
|
-
<label part="label">
|
|
45
|
-
<slot name="label"></slot>
|
|
46
|
-
</label>
|
|
47
|
-
<slot></slot>
|
|
48
|
-
`;
|
|
49
|
-
}
|
|
50
25
|
}
|
|
51
26
|
__decorate([
|
|
52
27
|
queryAssignedElements({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-group.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown-group.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dropdown-group.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown-group.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,wBAAwB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,oDAAoD,CAAC;AAYtF,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,qBAAqB;aACnD,YAAO,GAAG,oBAAoB,CAAC;aAC/B,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG1C,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAUD;QACE,KAAK,EAAE,CAAC;QAER,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;;AANM;IAJN,qBAAqB,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,wBAAwB,CAAC,OAAO;KAC3C,CAAC;wDAC6C","sourcesContent":["import { queryAssignedElements } from 'lit/decorators.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { IgcGroupBaseComponent } from '#internals/mixins/group.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcDropdownItemComponent from './dropdown-item.js';\nimport { styles } from './themes/dropdown-group.base.css.js';\nimport { all } from './themes/group.js';\nimport { styles as shared } from './themes/shared/group/dropdown-group.common.css.js';\n\n/**\n * A container for a group of dropdown items.\n *\n * @element igc-dropdown-group\n *\n * @slot label - Contains the group's label.\n * @slot - Intended to contain the items belonging to this group.\n *\n * @csspart label - The native label element.\n */\nexport default class IgcDropdownGroupComponent extends IgcGroupBaseComponent {\n public static readonly tagName = 'igc-dropdown-group';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDropdownGroupComponent);\n }\n\n /* blazorSuppress */\n /** All child dropdown items. */\n @queryAssignedElements({\n flatten: true,\n selector: IgcDropdownItemComponent.tagName,\n })\n public items!: Array<IgcDropdownItemComponent>;\n\n constructor() {\n super();\n\n addThemingController(this, all);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dropdown-group': IgcDropdownGroupComponent;\n }\n}\n"]}
|
|
@@ -2,7 +2,6 @@ import { type PropertyValues } from 'lit';
|
|
|
2
2
|
import { IgcComboBoxBaseLikeComponent } from '#internals/mixins/combo-box.js';
|
|
3
3
|
import type { AbstractConstructor } from '#internals/mixins/constructor.js';
|
|
4
4
|
import { type PopoverPlacement } from '../popover/popover.js';
|
|
5
|
-
import type { PopoverScrollStrategy } from '../types.js';
|
|
6
5
|
import IgcDropdownGroupComponent from './dropdown-group.js';
|
|
7
6
|
import IgcDropdownItemComponent from './dropdown-item.js';
|
|
8
7
|
export interface IgcDropdownComponentEventMap {
|
|
@@ -21,7 +20,7 @@ declare const IgcDropdownComponent_base: import("#internals/mixins/constructor.j
|
|
|
21
20
|
* @fires igcChange - Emitted when the selected item changes.
|
|
22
21
|
* @fires igcOpening - Emitted just before the dropdown is opened.
|
|
23
22
|
* @fires igcOpened - Emitted after the dropdown is opened.
|
|
24
|
-
* @fires igcClosing -
|
|
23
|
+
* @fires igcClosing - Emitted just before the dropdown is closed.
|
|
25
24
|
* @fires igcClosed - Emitted after closing the dropdown.
|
|
26
25
|
*
|
|
27
26
|
* @slot target - Renders the dropdown's target element.
|
|
@@ -35,7 +34,6 @@ export default class IgcDropdownComponent extends IgcDropdownComponent_base {
|
|
|
35
34
|
static styles: import("lit").CSSResult[];
|
|
36
35
|
static register(): void;
|
|
37
36
|
private readonly _keyBindings;
|
|
38
|
-
private readonly _rootScrollController;
|
|
39
37
|
protected readonly _rootClickController: import("#internals/controllers/root-click.js").RootClickController;
|
|
40
38
|
private _selectedItem;
|
|
41
39
|
/** The item keyboard navigation moves from. Only {@link _activateItem} assigns it. */
|
|
@@ -53,11 +51,6 @@ export default class IgcDropdownComponent extends IgcDropdownComponent_base {
|
|
|
53
51
|
* @attr
|
|
54
52
|
*/
|
|
55
53
|
placement: PopoverPlacement;
|
|
56
|
-
/**
|
|
57
|
-
* Determines the behavior of the component during scrolling of the parent container.
|
|
58
|
-
* @attr scroll-strategy
|
|
59
|
-
*/
|
|
60
|
-
scrollStrategy: PopoverScrollStrategy;
|
|
61
54
|
/**
|
|
62
55
|
* Whether the component should be flipped to the opposite side of the target once it's about to overflow the visible area.
|
|
63
56
|
* When true, once enough space is detected on its preferred side, it will flip back.
|
|
@@ -89,9 +82,9 @@ export default class IgcDropdownComponent extends IgcDropdownComponent_base {
|
|
|
89
82
|
protected firstUpdated(): Promise<void>;
|
|
90
83
|
protected updated(): void;
|
|
91
84
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* navigated item
|
|
85
|
+
* Resolves the selection again when an item enters or leaves the light DOM. A
|
|
86
|
+
* framework usually renders the items after the first paint, and can remove a
|
|
87
|
+
* selected or navigated item.
|
|
95
88
|
*/
|
|
96
89
|
private _handleItemsChange;
|
|
97
90
|
private _handleListBoxClick;
|
|
@@ -113,29 +106,30 @@ export default class IgcDropdownComponent extends IgcDropdownComponent_base {
|
|
|
113
106
|
/** Resolves an item by its `value`, or by its index in {@link items}. */
|
|
114
107
|
private _resolveItem;
|
|
115
108
|
/**
|
|
116
|
-
* Moves
|
|
117
|
-
*
|
|
109
|
+
* Moves all that is bound to the anchor to the current one: the key event
|
|
110
|
+
* listeners, the outside-click exemption and the ARIA state.
|
|
118
111
|
*/
|
|
119
112
|
private _updateTarget;
|
|
120
113
|
/**
|
|
121
|
-
* Only an anchor outside
|
|
122
|
-
*
|
|
114
|
+
* Only an anchor outside this DOM needs its own listeners. A keyboard event
|
|
115
|
+
* on a slotted anchor already reaches the host.
|
|
123
116
|
*/
|
|
124
117
|
private _observeTarget;
|
|
125
118
|
private _setExplicitTarget;
|
|
126
119
|
/**
|
|
127
|
-
* Publishes the popup state and the navigation position on the
|
|
120
|
+
* Publishes the popup state and the navigation position on the anchor.
|
|
128
121
|
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
122
|
+
* @remarks
|
|
123
|
+
* `aria-activedescendant` goes on the anchor, because the anchor holds DOM
|
|
124
|
+
* focus. The list is never focused, because the key bindings listen on the
|
|
125
|
+
* anchor. No `aria-controls` goes with it: the list is in this shadow root,
|
|
126
|
+
* which an IDREF cannot cross, and ARIA element reflection resolves only out
|
|
127
|
+
* of a shadow root, never into one.
|
|
134
128
|
*/
|
|
135
129
|
private _syncAnchorARIA;
|
|
136
130
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
131
|
+
* Releases the current anchor: removes its key event listeners and all that
|
|
132
|
+
* {@link _syncAnchorARIA} wrote onto it.
|
|
139
133
|
*/
|
|
140
134
|
private _releaseTarget;
|
|
141
135
|
/** Shows the component. */
|
|
@@ -10,7 +10,6 @@ import { property, query, state } from 'lit/decorators.js';
|
|
|
10
10
|
import { addKeybindings, arrowDown, arrowLeft, arrowRight, arrowUp, endKey, enterKey, escapeKey, homeKey, tabKey, } from '#internals/controllers/key-bindings.js';
|
|
11
11
|
import { createMutationController, } from '#internals/controllers/mutation-observer.js';
|
|
12
12
|
import { addRootClickController } from '#internals/controllers/root-click.js';
|
|
13
|
-
import { addRootScrollHandler } from '#internals/controllers/root-scroll.js';
|
|
14
13
|
import { blazorAdditionalDependencies } from '#internals/decorators/blazorAdditionalDependencies.js';
|
|
15
14
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
16
15
|
import { getActiveItems, getItems, getNextActiveItem, getPreviousActiveItem, IgcComboBoxBaseLikeComponent, setInitialSelectionState, } from '#internals/mixins/combo-box.js';
|
|
@@ -54,16 +53,12 @@ let IgcDropdownComponent = class IgcDropdownComponent extends EventEmitterMixin(
|
|
|
54
53
|
}
|
|
55
54
|
constructor() {
|
|
56
55
|
super();
|
|
57
|
-
this._rootScrollController = addRootScrollHandler(this, {
|
|
58
|
-
hideCallback: this._handleClosing,
|
|
59
|
-
});
|
|
60
56
|
this._rootClickController = addRootClickController(this, {
|
|
61
57
|
onHide: this._handleClosing,
|
|
62
58
|
});
|
|
63
59
|
this._selectedItem = null;
|
|
64
60
|
this._activeItem = null;
|
|
65
61
|
this.placement = 'bottom-start';
|
|
66
|
-
this.scrollStrategy = 'scroll';
|
|
67
62
|
this.flip = false;
|
|
68
63
|
this.distance = 0;
|
|
69
64
|
this.sameWidth = false;
|
|
@@ -102,14 +97,9 @@ let IgcDropdownComponent = class IgcDropdownComponent extends EventEmitterMixin(
|
|
|
102
97
|
if (!this.hasUpdated) {
|
|
103
98
|
return;
|
|
104
99
|
}
|
|
105
|
-
|
|
106
|
-
const strategyChanged = properties.has('scrollStrategy');
|
|
107
|
-
if (openChanged || properties.has('keepOpenOnOutsideClick')) {
|
|
100
|
+
if (properties.has('open') || properties.has('keepOpenOnOutsideClick')) {
|
|
108
101
|
this._rootClickController.update();
|
|
109
102
|
}
|
|
110
|
-
if (openChanged || strategyChanged) {
|
|
111
|
-
this._rootScrollController.update({ resetListeners: strategyChanged });
|
|
112
|
-
}
|
|
113
103
|
}
|
|
114
104
|
async firstUpdated() {
|
|
115
105
|
await this.updateComplete;
|
|
@@ -302,6 +292,7 @@ let IgcDropdownComponent = class IgcDropdownComponent extends EventEmitterMixin(
|
|
|
302
292
|
this._clearSelectedItem();
|
|
303
293
|
}
|
|
304
294
|
render() {
|
|
295
|
+
const labelledBy = this._target ? [this._target] : null;
|
|
305
296
|
return html `<igc-popover
|
|
306
297
|
?open=${this.open}
|
|
307
298
|
?flip=${this.flip}
|
|
@@ -309,10 +300,10 @@ let IgcDropdownComponent = class IgcDropdownComponent extends EventEmitterMixin(
|
|
|
309
300
|
.anchor=${this._target}
|
|
310
301
|
.offset=${this.distance}
|
|
311
302
|
.placement=${this.placement}
|
|
312
|
-
|
|
303
|
+
.scrollStrategy=${this.scrollStrategy}
|
|
304
|
+
@igcPopoverScrollClose=${this._handleClosing}
|
|
313
305
|
>
|
|
314
306
|
<slot
|
|
315
|
-
id="dropdown-target"
|
|
316
307
|
name="target"
|
|
317
308
|
slot="anchor"
|
|
318
309
|
@click=${this._handleAnchorClick}
|
|
@@ -323,7 +314,7 @@ let IgcDropdownComponent = class IgcDropdownComponent extends EventEmitterMixin(
|
|
|
323
314
|
id="dropdown-list"
|
|
324
315
|
role="listbox"
|
|
325
316
|
part="list"
|
|
326
|
-
|
|
317
|
+
.ariaLabelledByElements=${labelledBy}
|
|
327
318
|
>
|
|
328
319
|
<slot></slot>
|
|
329
320
|
</div>
|
|
@@ -340,9 +331,6 @@ __decorate([
|
|
|
340
331
|
__decorate([
|
|
341
332
|
property()
|
|
342
333
|
], IgcDropdownComponent.prototype, "placement", void 0);
|
|
343
|
-
__decorate([
|
|
344
|
-
property({ attribute: 'scroll-strategy' })
|
|
345
|
-
], IgcDropdownComponent.prototype, "scrollStrategy", void 0);
|
|
346
334
|
__decorate([
|
|
347
335
|
property({ type: Boolean })
|
|
348
336
|
], IgcDropdownComponent.prototype, "flip", void 0);
|