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
|
@@ -46,9 +46,9 @@ export declare class MaskParser {
|
|
|
46
46
|
/** Cached array of required non-literal positions for validation */
|
|
47
47
|
protected _requiredPositions: number[];
|
|
48
48
|
/**
|
|
49
|
-
* Declared
|
|
50
|
-
*
|
|
51
|
-
*
|
|
49
|
+
* Declared with no initializer. `useDefineForClassFields: false` emits nothing
|
|
50
|
+
* for it, so {@link _invalidate} can run from the constructor, before the
|
|
51
|
+
* subclass fields exist.
|
|
52
52
|
*/
|
|
53
53
|
private _emptyMask?;
|
|
54
54
|
/**
|
|
@@ -87,25 +87,23 @@ export declare class MaskParser {
|
|
|
87
87
|
constructor(options?: MaskOptions);
|
|
88
88
|
private _isEscapedFlag;
|
|
89
89
|
/**
|
|
90
|
-
* The pattern the literal parser
|
|
91
|
-
*
|
|
90
|
+
* The pattern for the literal parser. A subclass whose public format is not a
|
|
91
|
+
* mask pattern, such as a date format, converts it here.
|
|
92
92
|
*/
|
|
93
93
|
protected _toMaskFormat(format: string): string;
|
|
94
94
|
/**
|
|
95
|
-
* Drops
|
|
96
|
-
* from the constructor, so
|
|
95
|
+
* Drops all that comes from the mask. Runs on each mask and prompt change, and
|
|
96
|
+
* from the constructor, so an override must not touch an initialized field.
|
|
97
97
|
*/
|
|
98
98
|
protected _invalidate(): void;
|
|
99
99
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
100
|
+
* Finds the literal characters of the mask format and builds the escaped
|
|
101
|
+
* mask. Runs on each mask format change.
|
|
102
102
|
*/
|
|
103
103
|
protected _parseMaskLiterals(): void;
|
|
104
104
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* These positions must be filled for the masked string to be valid.
|
|
105
|
+
* The positions of the escaped mask that hold a required input flag, such as
|
|
106
|
+
* '0' or 'L', and are not literals. A valid masked string fills them all.
|
|
109
107
|
*/
|
|
110
108
|
protected _computeRequiredPositions(): number[];
|
|
111
109
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-parser.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-parser.ts"],"names":[],"mappings":"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","sourcesContent":["/** Options for the {@link MaskParser} */\nexport interface MaskOptions {\n /**\n * The mask format string (e.g., '00/00/0000' for dates, 'AAA-000' for custom IDs).\n *\n * Supported flags: a, A, C, L, 0, 9, #, &, ?.\n *\n * Use `'\\'` to escape a flag character if it should be treated as a literal.\n * @default 'CCCCCCCCCC'\n */\n format?: string;\n\n /**\n * The character used to prompt for input in unfilled mask positions.\n *\n * Only the first character is used, and a mask flag is rejected in favor of the\n * default - the same rules the `prompt` accessor applies.\n * @default '_'\n */\n promptCharacter?: string;\n}\n\n/** Internal options with all required fields */\ninterface MaskOptionsInternal {\n format: string;\n promptCharacter: string;\n}\n\n/**\n * Result type for the replace operation, containing the new masked value and the\n * ideal cursor position.\n */\ntype MaskReplaceResult = {\n value: string;\n end: number;\n};\n\nconst MASK_FLAGS = new Set('aACL09#&?');\nconst MASK_REQUIRED_FLAGS = new Set('0#LA&');\n\nconst ESCAPE_CHAR = '\\\\';\nconst DEFAULT_FORMAT = 'CCCCCCCCCC';\nconst DEFAULT_PROMPT = '_';\n\nconst ASCII_ZERO = 0x0030;\nconst DIGIT_ZERO_CODEPOINTS = [\n ASCII_ZERO, // ASCII\n 0x0660, // Arabic-Indic\n 0x06f0, // Extended Arabic-Indic\n 0x0966, // Devanagari\n 0x09e6, // Bengali\n 0x0a66, // Gurmukhi\n 0x0ae6, // Gujarati\n 0x0b66, // Oriya\n 0x0c66, // Telugu\n 0x0ce6, // Kannada\n 0x0d66, // Malayalam\n 0x0e50, // Thai\n 0x0ed0, // Lao\n 0x0f20, // Tibetan\n 0x1040, // Myanmar\n 0x17e0, // Khmer\n 0x1810, // Mongolian\n 0xff10, // Full-width\n] as const;\n\n/**\n * Precomputed map of Unicode digit codepoints to their ASCII equivalents.\n * This eliminates the need for iteration during conversion.\n */\nconst UNICODE_DIGIT_TO_ASCII = new Map<number, string>(\n DIGIT_ZERO_CODEPOINTS.flatMap((zeroCodePoint) =>\n Array.from({ length: 10 }, (_, i) => [\n zeroCodePoint + i,\n String.fromCharCode(ASCII_ZERO + i),\n ])\n )\n);\n\n/**\n * Narrows a prompt down to the single character the parser will actually use.\n *\n * Falls back to `current` when the prompt is empty or collides with a mask flag - a flag\n * standing in for an unfilled position could not be told apart from one the user typed.\n */\nfunction normalizePrompt(value: string | undefined, current: string): string {\n const char = value ? value.substring(0, 1) : current;\n return MASK_FLAGS.has(char) ? current : char;\n}\n\nfunction replaceUnicodeNumbers(text: string): string {\n const matcher = /\\p{Nd}/gu;\n\n return text.replace(matcher, (digit) => {\n return UNICODE_DIGIT_TO_ASCII.get(digit.charCodeAt(0)) ?? digit;\n });\n}\n\nconst MASK_PATTERNS = new Map<string, RegExp>([\n ['C', /[\\s\\S]/u], // Any single character (including newlines)\n ['&', /[^\\p{Separator}]/u], // Any non-separator character (excludes spaces, line/paragraph separators)\n ['a', /[\\p{Letter}\\p{Number}\\p{Separator}]/u], // Alphanumeric and separator characters (Unicode-aware)\n ['A', /[\\p{Letter}\\p{Number}]/u], // Alphanumeric (Unicode-aware)\n ['?', /[\\p{Letter}\\p{Separator}]/u], // Alphabetic and separator characters (Unicode-aware)\n ['L', /\\p{Letter}/u], // Alphabetic (Unicode-aware)\n ['0', /\\p{Number}/u], // Numeric (Unicode-aware, converted to ASCII 0-9 during processing)\n ['9', /[\\p{Number}\\p{Separator}]/u], // Numeric and separator characters (Unicode-aware)\n ['#', /[\\p{Number}\\-+]/u], // Numeric and sign characters (+, -)\n]);\n\nfunction validate(char: string, flag: string): boolean {\n return MASK_PATTERNS.get(flag)?.test(char) ?? false;\n}\n\n/**\n * A class for parsing and applying masks to strings, typically for input fields.\n * It handles mask definitions, literals, character validation, and cursor positioning.\n */\nexport class MaskParser {\n protected readonly _options: MaskOptionsInternal;\n\n /** Stores literal characters and their original positions in the mask (e.g., '(', ')', '-'). */\n protected readonly _literals = new Map<number, string>();\n\n /** A Set of positions where literals occur in the `_escapedMask`. */\n protected _literalPositions = new Set<number>();\n\n /** The mask format after processing escape characters */\n protected _escapedMask = '';\n\n /** Cached array of required non-literal positions for validation */\n protected _requiredPositions: number[] = [];\n\n /**\n * Declared without an initializer on purpose. With `useDefineForClassFields: false`\n * nothing is emitted for it, so {@link _invalidate} can safely run from the\n * constructor - before subclass fields exist.\n */\n private _emptyMask?: string;\n\n /**\n * Returns a set of the all the literal positions in the mask.\n * These positions are fixed characters that are not part of the input.\n */\n public get literalPositions(): ReadonlySet<number> {\n return this._literalPositions;\n }\n\n /**\n * Returns the escaped mask string.\n * This is the mask after processing any escape sequences.\n */\n public get escapedMask(): string {\n return this._escapedMask;\n }\n\n /**\n * Returns the result of applying an empty string over the mask pattern.\n */\n public get emptyMask(): string {\n this._emptyMask ??= this.apply();\n return this._emptyMask;\n }\n\n /**\n * Gets the unescaped mask string (the original format string).\n * If the mask has no escape sequences, then `mask === escapedMask`.\n */\n public get mask(): string {\n return this._options.format;\n }\n\n /**\n * Sets the mask of the parser.\n * When the mask is set, it triggers a re-parsing of the mask literals and escaped mask.\n */\n public set mask(value: string) {\n this._options.format = value || this._options.format;\n this._parseMaskLiterals();\n }\n\n /**\n * Gets the prompt character used for unfilled mask positions.\n */\n public get prompt(): string {\n return this._options.promptCharacter;\n }\n\n /**\n * Sets the prompt character. Only the first character of the provided string is used.\n * @remarks The prompt character cannot be a mask flag character.\n */\n public set prompt(value: string) {\n this._options.promptCharacter = normalizePrompt(\n value,\n this._options.promptCharacter\n );\n this._invalidate();\n }\n\n constructor(options?: MaskOptions) {\n this._options = {\n format: options?.format || DEFAULT_FORMAT,\n promptCharacter: normalizePrompt(\n options?.promptCharacter,\n DEFAULT_PROMPT\n ),\n };\n this._parseMaskLiterals();\n }\n\n private _isEscapedFlag(char: string, nextChar: string): boolean {\n return char === ESCAPE_CHAR && MASK_FLAGS.has(nextChar);\n }\n\n /**\n * The pattern the literal parser consumes. Subclasses whose public format is not itself\n * a mask pattern - date formats, for instance - translate it here.\n */\n protected _toMaskFormat(format: string): string {\n return format;\n }\n\n /**\n * Drops everything derived from the mask. Runs on every mask *and* prompt change, and\n * from the constructor, so overrides must not touch fields with initializers.\n */\n protected _invalidate(): void {\n this._emptyMask = undefined;\n }\n\n /**\n * Parses the mask format string to identify literal characters and\n * create the escaped mask. This method is called whenever the mask format changes.\n */\n protected _parseMaskLiterals(): void {\n const mask = this._toMaskFormat(this._options.format);\n const length = mask.length;\n const escapedMaskChars: string[] = [];\n\n let currentPos = 0;\n\n this._literals.clear();\n\n for (let i = 0; i < length; i++) {\n const [current, next] = [mask.charAt(i), mask.charAt(i + 1)];\n\n if (this._isEscapedFlag(current, next)) {\n // Escaped character - push next as a literal character and skip processing it\n this._literals.set(currentPos, next);\n escapedMaskChars.push(next);\n i++;\n } else if (MASK_FLAGS.has(current)) {\n // Regular flag character\n escapedMaskChars.push(current);\n } else {\n // Literal character\n this._literals.set(currentPos, current);\n escapedMaskChars.push(current);\n }\n\n currentPos++;\n }\n\n this._escapedMask = escapedMaskChars.join('');\n this._literalPositions = new Set(this._literals.keys());\n this._requiredPositions = this._computeRequiredPositions();\n this._invalidate();\n }\n\n /**\n * Computes an array of positions in the escaped mask that correspond to\n * required input flags (e.g., '0', 'L') and are not literal characters.\n *\n * These positions must be filled for the masked string to be valid.\n */\n protected _computeRequiredPositions(): number[] {\n const literalPositions = this._literalPositions;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n const result: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const char = escapedMask[i];\n if (MASK_REQUIRED_FLAGS.has(char) && !literalPositions.has(i)) {\n result.push(i);\n }\n }\n\n return result;\n }\n\n /**\n * Finds the closest non-literal position in the mask *before* the given start position.\n * Useful for backward navigation (e.g., backspace).\n *\n * @remarks\n * If no non-literal is found before `start`, return 0.\n */\n public getPreviousNonLiteralPosition(start: number): number {\n const literalPositions = this._literalPositions;\n\n for (let i = start - 1; i >= 0; i--) {\n if (!literalPositions.has(i)) {\n return i;\n }\n }\n\n return 0;\n }\n\n /**\n * Finds the closest non-literal position in the mask *after* the given start position.\n * Useful for forward navigation (e.g., arrow keys, delete key or initial cursor placement).\n *\n * @remarks\n * If no non-literal is found after `start`, return the mask length.\n */\n public getNextNonLiteralPosition(start: number): number {\n const literalPositions = this._literalPositions;\n const length = this._escapedMask.length;\n\n for (let i = Math.max(0, start); i < length; i++) {\n if (!literalPositions.has(i)) {\n return i;\n }\n }\n\n return length;\n }\n\n /**\n * Replaces a segment of the masked string with new input, simulating typing or pasting.\n * It handles clearing the selected range and inserting new characters according to the mask.\n *\n * @example\n * ```ts\n * const parser = new MaskParser({ format: '00/00/0000' });\n * const current = '__/__/____';\n * const result = parser.replace(current, '12', 0, 0);\n * // result.value = '12/__/____', result.end = 2\n * ```\n */\n public replace(\n maskString: string,\n value: string,\n start: number,\n end: number\n ): MaskReplaceResult {\n const literalPositions = this.literalPositions;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n const prompt = this.prompt;\n const endBoundary = Math.min(end, length);\n\n // Initialize the array for the masked string or get a fresh mask with prompts and/or literals\n const maskedChars = maskString ? [...maskString] : [...this.emptyMask];\n\n const inputChars = Array.from(replaceUnicodeNumbers(value));\n const inputLength = inputChars.length;\n\n // Clear any non-literal positions from `start` to `endBoundary`\n for (let i = start; i < endBoundary; i++) {\n if (!literalPositions.has(i)) {\n maskedChars[i] = prompt;\n }\n }\n\n let cursor = start;\n let inputIndex = 0;\n let maskPosition = start;\n\n // Iterate through the mask starting at `start` as long as there are input characters and mask positions available\n // and start placing characters or skipping literals and invalid characters\n for (; maskPosition < length && inputIndex < inputLength; maskPosition++) {\n if (literalPositions.has(maskPosition)) {\n cursor = maskPosition + 1;\n continue;\n }\n\n const char = inputChars[inputIndex];\n\n if (validate(char, escapedMask[maskPosition]) && char !== prompt) {\n maskedChars[maskPosition] = char;\n cursor = maskPosition + 1;\n inputIndex++;\n } else {\n inputIndex++;\n maskPosition--;\n }\n }\n\n // Move the cursor to the next non-literal position or the end of the mask\n while (cursor < length && literalPositions.has(cursor)) {\n cursor++;\n }\n\n return {\n value: maskedChars.join(''),\n end: cursor,\n };\n }\n\n /**\n * Parses the masked string, extracting only the valid input characters.\n * This effectively \"unmasks\" the string, removing prompts and literals.\n */\n public parse(masked = ''): string {\n const literalPositions = this.literalPositions;\n const prompt = this.prompt;\n const length = masked.length;\n const result: string[] = [];\n\n for (let i = 0; i < length; i++) {\n const char = masked[i];\n if (!literalPositions.has(i) && char !== prompt) {\n result.push(char);\n }\n }\n\n return result.join('');\n }\n\n /**\n * Checks if the masked string is valid, specifically if all required mask positions are filled\n * with valid, non-prompt characters.\n */\n public isValidString(input = ''): boolean {\n const prompt = this.prompt;\n\n return this._requiredPositions.every((position) => {\n const char = input[position];\n return validate(char, this._escapedMask[position]) && char !== prompt;\n });\n }\n\n /**\n * Applies the mask format to an input string. This attempts to fit the input\n * into the mask from left to right, filling valid positions and skipping invalid\n * input characters.\n *\n * @example\n * ```ts\n * const parser = new MaskParser({ format: '00/00/0000' });\n * parser.apply('12252023'); // Returns '12/25/2023'\n * ```\n */\n public apply(input = ''): string {\n const literals = this._literals;\n const prompt = this.prompt;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n\n // Initialize the result array with prompt characters\n const result = new Array(length).fill(prompt);\n\n // Place all literal characters into the result array\n for (const [position, literal] of literals.entries()) {\n result[position] = literal;\n }\n\n if (!input) {\n return result.join('');\n }\n\n // Normalize Unicode digits to ASCII\n const normalizedInput = replaceUnicodeNumbers(input);\n const inputLength = normalizedInput.length;\n let inputIndex = 0;\n\n // Iterate through the mask placing input characters skipping literals and invalid ones\n for (let i = 0; i < length; i++) {\n if (inputIndex >= inputLength) {\n break;\n }\n\n if (literals.has(i)) {\n continue;\n }\n\n if (validate(normalizedInput[inputIndex], escapedMask[i])) {\n result[i] = normalizedInput[inputIndex];\n }\n\n // Always advance - invalid characters are consumed/skipped\n inputIndex++;\n }\n\n return result.join('');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mask-parser.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-parser.ts"],"names":[],"mappings":"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","sourcesContent":["/** Options for the {@link MaskParser} */\nexport interface MaskOptions {\n /**\n * The mask format string (e.g., '00/00/0000' for dates, 'AAA-000' for custom IDs).\n *\n * Supported flags: a, A, C, L, 0, 9, #, &, ?.\n *\n * Use `'\\'` to escape a flag character if it should be treated as a literal.\n * @default 'CCCCCCCCCC'\n */\n format?: string;\n\n /**\n * The character used to prompt for input in unfilled mask positions.\n *\n * Only the first character is used, and a mask flag is rejected in favor of the\n * default - the same rules the `prompt` accessor applies.\n * @default '_'\n */\n promptCharacter?: string;\n}\n\n/** Internal options with all required fields */\ninterface MaskOptionsInternal {\n format: string;\n promptCharacter: string;\n}\n\n/**\n * Result type for the replace operation, containing the new masked value and the\n * ideal cursor position.\n */\ntype MaskReplaceResult = {\n value: string;\n end: number;\n};\n\nconst MASK_FLAGS = new Set('aACL09#&?');\nconst MASK_REQUIRED_FLAGS = new Set('0#LA&');\n\nconst ESCAPE_CHAR = '\\\\';\nconst DEFAULT_FORMAT = 'CCCCCCCCCC';\nconst DEFAULT_PROMPT = '_';\n\nconst ASCII_ZERO = 0x0030;\nconst DIGIT_ZERO_CODEPOINTS = [\n ASCII_ZERO, // ASCII\n 0x0660, // Arabic-Indic\n 0x06f0, // Extended Arabic-Indic\n 0x0966, // Devanagari\n 0x09e6, // Bengali\n 0x0a66, // Gurmukhi\n 0x0ae6, // Gujarati\n 0x0b66, // Oriya\n 0x0c66, // Telugu\n 0x0ce6, // Kannada\n 0x0d66, // Malayalam\n 0x0e50, // Thai\n 0x0ed0, // Lao\n 0x0f20, // Tibetan\n 0x1040, // Myanmar\n 0x17e0, // Khmer\n 0x1810, // Mongolian\n 0xff10, // Full-width\n] as const;\n\n/**\n * Precomputed map of Unicode digit codepoints to their ASCII equivalents.\n * This eliminates the need for iteration during conversion.\n */\nconst UNICODE_DIGIT_TO_ASCII = new Map<number, string>(\n DIGIT_ZERO_CODEPOINTS.flatMap((zeroCodePoint) =>\n Array.from({ length: 10 }, (_, i) => [\n zeroCodePoint + i,\n String.fromCharCode(ASCII_ZERO + i),\n ])\n )\n);\n\n/**\n * Narrows a prompt down to the single character the parser will actually use.\n *\n * Falls back to `current` when the prompt is empty or collides with a mask flag - a flag\n * standing in for an unfilled position could not be told apart from one the user typed.\n */\nfunction normalizePrompt(value: string | undefined, current: string): string {\n const char = value ? value.substring(0, 1) : current;\n return MASK_FLAGS.has(char) ? current : char;\n}\n\nfunction replaceUnicodeNumbers(text: string): string {\n const matcher = /\\p{Nd}/gu;\n\n return text.replace(matcher, (digit) => {\n return UNICODE_DIGIT_TO_ASCII.get(digit.charCodeAt(0)) ?? digit;\n });\n}\n\nconst MASK_PATTERNS = new Map<string, RegExp>([\n ['C', /[\\s\\S]/u], // Any single character (including newlines)\n ['&', /[^\\p{Separator}]/u], // Any non-separator character (excludes spaces, line/paragraph separators)\n ['a', /[\\p{Letter}\\p{Number}\\p{Separator}]/u], // Alphanumeric and separator characters (Unicode-aware)\n ['A', /[\\p{Letter}\\p{Number}]/u], // Alphanumeric (Unicode-aware)\n ['?', /[\\p{Letter}\\p{Separator}]/u], // Alphabetic and separator characters (Unicode-aware)\n ['L', /\\p{Letter}/u], // Alphabetic (Unicode-aware)\n ['0', /\\p{Number}/u], // Numeric (Unicode-aware, converted to ASCII 0-9 during processing)\n ['9', /[\\p{Number}\\p{Separator}]/u], // Numeric and separator characters (Unicode-aware)\n ['#', /[\\p{Number}\\-+]/u], // Numeric and sign characters (+, -)\n]);\n\nfunction validate(char: string, flag: string): boolean {\n return MASK_PATTERNS.get(flag)?.test(char) ?? false;\n}\n\n/**\n * A class for parsing and applying masks to strings, typically for input fields.\n * It handles mask definitions, literals, character validation, and cursor positioning.\n */\nexport class MaskParser {\n protected readonly _options: MaskOptionsInternal;\n\n /** Stores literal characters and their original positions in the mask (e.g., '(', ')', '-'). */\n protected readonly _literals = new Map<number, string>();\n\n /** A Set of positions where literals occur in the `_escapedMask`. */\n protected _literalPositions = new Set<number>();\n\n /** The mask format after processing escape characters */\n protected _escapedMask = '';\n\n /** Cached array of required non-literal positions for validation */\n protected _requiredPositions: number[] = [];\n\n /**\n * Declared with no initializer. `useDefineForClassFields: false` emits nothing\n * for it, so {@link _invalidate} can run from the constructor, before the\n * subclass fields exist.\n */\n private _emptyMask?: string;\n\n /**\n * Returns a set of the all the literal positions in the mask.\n * These positions are fixed characters that are not part of the input.\n */\n public get literalPositions(): ReadonlySet<number> {\n return this._literalPositions;\n }\n\n /**\n * Returns the escaped mask string.\n * This is the mask after processing any escape sequences.\n */\n public get escapedMask(): string {\n return this._escapedMask;\n }\n\n /**\n * Returns the result of applying an empty string over the mask pattern.\n */\n public get emptyMask(): string {\n this._emptyMask ??= this.apply();\n return this._emptyMask;\n }\n\n /**\n * Gets the unescaped mask string (the original format string).\n * If the mask has no escape sequences, then `mask === escapedMask`.\n */\n public get mask(): string {\n return this._options.format;\n }\n\n /**\n * Sets the mask of the parser.\n * When the mask is set, it triggers a re-parsing of the mask literals and escaped mask.\n */\n public set mask(value: string) {\n this._options.format = value || this._options.format;\n this._parseMaskLiterals();\n }\n\n /**\n * Gets the prompt character used for unfilled mask positions.\n */\n public get prompt(): string {\n return this._options.promptCharacter;\n }\n\n /**\n * Sets the prompt character. Only the first character of the provided string is used.\n * @remarks The prompt character cannot be a mask flag character.\n */\n public set prompt(value: string) {\n this._options.promptCharacter = normalizePrompt(\n value,\n this._options.promptCharacter\n );\n this._invalidate();\n }\n\n constructor(options?: MaskOptions) {\n this._options = {\n format: options?.format || DEFAULT_FORMAT,\n promptCharacter: normalizePrompt(\n options?.promptCharacter,\n DEFAULT_PROMPT\n ),\n };\n this._parseMaskLiterals();\n }\n\n private _isEscapedFlag(char: string, nextChar: string): boolean {\n return char === ESCAPE_CHAR && MASK_FLAGS.has(nextChar);\n }\n\n /**\n * The pattern for the literal parser. A subclass whose public format is not a\n * mask pattern, such as a date format, converts it here.\n */\n protected _toMaskFormat(format: string): string {\n return format;\n }\n\n /**\n * Drops all that comes from the mask. Runs on each mask and prompt change, and\n * from the constructor, so an override must not touch an initialized field.\n */\n protected _invalidate(): void {\n this._emptyMask = undefined;\n }\n\n /**\n * Finds the literal characters of the mask format and builds the escaped\n * mask. Runs on each mask format change.\n */\n protected _parseMaskLiterals(): void {\n const mask = this._toMaskFormat(this._options.format);\n const length = mask.length;\n const escapedMaskChars: string[] = [];\n\n let currentPos = 0;\n\n this._literals.clear();\n\n for (let i = 0; i < length; i++) {\n const [current, next] = [mask.charAt(i), mask.charAt(i + 1)];\n\n if (this._isEscapedFlag(current, next)) {\n // Escaped character - push next as a literal character and skip processing it\n this._literals.set(currentPos, next);\n escapedMaskChars.push(next);\n i++;\n } else if (MASK_FLAGS.has(current)) {\n // Regular flag character\n escapedMaskChars.push(current);\n } else {\n // Literal character\n this._literals.set(currentPos, current);\n escapedMaskChars.push(current);\n }\n\n currentPos++;\n }\n\n this._escapedMask = escapedMaskChars.join('');\n this._literalPositions = new Set(this._literals.keys());\n this._requiredPositions = this._computeRequiredPositions();\n this._invalidate();\n }\n\n /**\n * The positions of the escaped mask that hold a required input flag, such as\n * '0' or 'L', and are not literals. A valid masked string fills them all.\n */\n protected _computeRequiredPositions(): number[] {\n const literalPositions = this._literalPositions;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n const result: number[] = [];\n\n for (let i = 0; i < length; i++) {\n const char = escapedMask[i];\n if (MASK_REQUIRED_FLAGS.has(char) && !literalPositions.has(i)) {\n result.push(i);\n }\n }\n\n return result;\n }\n\n /**\n * Finds the closest non-literal position in the mask *before* the given start position.\n * Useful for backward navigation (e.g., backspace).\n *\n * @remarks\n * If no non-literal is found before `start`, return 0.\n */\n public getPreviousNonLiteralPosition(start: number): number {\n const literalPositions = this._literalPositions;\n\n for (let i = start - 1; i >= 0; i--) {\n if (!literalPositions.has(i)) {\n return i;\n }\n }\n\n return 0;\n }\n\n /**\n * Finds the closest non-literal position in the mask *after* the given start position.\n * Useful for forward navigation (e.g., arrow keys, delete key or initial cursor placement).\n *\n * @remarks\n * If no non-literal is found after `start`, return the mask length.\n */\n public getNextNonLiteralPosition(start: number): number {\n const literalPositions = this._literalPositions;\n const length = this._escapedMask.length;\n\n for (let i = Math.max(0, start); i < length; i++) {\n if (!literalPositions.has(i)) {\n return i;\n }\n }\n\n return length;\n }\n\n /**\n * Replaces a segment of the masked string with new input, simulating typing or pasting.\n * It handles clearing the selected range and inserting new characters according to the mask.\n *\n * @example\n * ```ts\n * const parser = new MaskParser({ format: '00/00/0000' });\n * const current = '__/__/____';\n * const result = parser.replace(current, '12', 0, 0);\n * // result.value = '12/__/____', result.end = 2\n * ```\n */\n public replace(\n maskString: string,\n value: string,\n start: number,\n end: number\n ): MaskReplaceResult {\n const literalPositions = this.literalPositions;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n const prompt = this.prompt;\n const endBoundary = Math.min(end, length);\n\n // Initialize the array for the masked string or get a fresh mask with prompts and/or literals\n const maskedChars = maskString ? [...maskString] : [...this.emptyMask];\n\n const inputChars = Array.from(replaceUnicodeNumbers(value));\n const inputLength = inputChars.length;\n\n // Clear any non-literal positions from `start` to `endBoundary`\n for (let i = start; i < endBoundary; i++) {\n if (!literalPositions.has(i)) {\n maskedChars[i] = prompt;\n }\n }\n\n let cursor = start;\n let inputIndex = 0;\n let maskPosition = start;\n\n // Iterate through the mask starting at `start` as long as there are input characters and mask positions available\n // and start placing characters or skipping literals and invalid characters\n for (; maskPosition < length && inputIndex < inputLength; maskPosition++) {\n if (literalPositions.has(maskPosition)) {\n cursor = maskPosition + 1;\n continue;\n }\n\n const char = inputChars[inputIndex];\n\n if (validate(char, escapedMask[maskPosition]) && char !== prompt) {\n maskedChars[maskPosition] = char;\n cursor = maskPosition + 1;\n inputIndex++;\n } else {\n inputIndex++;\n maskPosition--;\n }\n }\n\n // Move the cursor to the next non-literal position or the end of the mask\n while (cursor < length && literalPositions.has(cursor)) {\n cursor++;\n }\n\n return {\n value: maskedChars.join(''),\n end: cursor,\n };\n }\n\n /**\n * Parses the masked string, extracting only the valid input characters.\n * This effectively \"unmasks\" the string, removing prompts and literals.\n */\n public parse(masked = ''): string {\n const literalPositions = this.literalPositions;\n const prompt = this.prompt;\n const length = masked.length;\n const result: string[] = [];\n\n for (let i = 0; i < length; i++) {\n const char = masked[i];\n if (!literalPositions.has(i) && char !== prompt) {\n result.push(char);\n }\n }\n\n return result.join('');\n }\n\n /**\n * Checks if the masked string is valid, specifically if all required mask positions are filled\n * with valid, non-prompt characters.\n */\n public isValidString(input = ''): boolean {\n const prompt = this.prompt;\n\n return this._requiredPositions.every((position) => {\n const char = input[position];\n return validate(char, this._escapedMask[position]) && char !== prompt;\n });\n }\n\n /**\n * Applies the mask format to an input string. This attempts to fit the input\n * into the mask from left to right, filling valid positions and skipping invalid\n * input characters.\n *\n * @example\n * ```ts\n * const parser = new MaskParser({ format: '00/00/0000' });\n * parser.apply('12252023'); // Returns '12/25/2023'\n * ```\n */\n public apply(input = ''): string {\n const literals = this._literals;\n const prompt = this.prompt;\n const escapedMask = this._escapedMask;\n const length = escapedMask.length;\n\n // Initialize the result array with prompt characters\n const result = new Array(length).fill(prompt);\n\n // Place all literal characters into the result array\n for (const [position, literal] of literals.entries()) {\n result[position] = literal;\n }\n\n if (!input) {\n return result.join('');\n }\n\n // Normalize Unicode digits to ASCII\n const normalizedInput = replaceUnicodeNumbers(input);\n const inputLength = normalizedInput.length;\n let inputIndex = 0;\n\n // Iterate through the mask placing input characters skipping literals and invalid ones\n for (let i = 0; i < length; i++) {\n if (inputIndex >= inputLength) {\n break;\n }\n\n if (literals.has(i)) {\n continue;\n }\n\n if (validate(normalizedInput[inputIndex], escapedMask[i])) {\n result[i] = normalizedInput[inputIndex];\n }\n\n // Always advance - invalid characters are consumed/skipped\n inputIndex++;\n }\n\n return result.join('');\n }\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}[part~=base]{display:flex;align-items:center;flex-flow:row nowrap;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:rgba(0,0,0,0);white-space:nowrap;text-decoration:none;border:none;justify-content:flex-start;transition:background .15s ease-out}[part~=base] ::slotted(igc-icon){--ig-size: 3;display:flex;font:inherit}[part=content]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[part="base mini"]{display:block}[part="base mini"] [part=content]{display:none}:host([disabled]){-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:initial;pointer-events:none}`;
|
|
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}[part~=base]{display:flex;align-items:center;flex-flow:row nowrap;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:rgba(0,0,0,0);white-space:nowrap;text-decoration:none;border:none;justify-content:flex-start;transition:background .15s ease-out}[part~=base] ::slotted(igc-icon){--ig-size: 3;display:flex;font:inherit}[part=content]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[part="base mini"]{display:block}[part="base mini"] [part=content]{display:none}:host([disabled]){-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:initial;pointer-events:none}@media(forced-colors: active){[part~=base]:hover,[part~=base]:focus-within{outline:.0625rem solid CanvasText;outline-offset:-0.0625rem}:host([active]) [part~=base]{--item-active-icon-color: Highlight;--item-active-text-color: Highlight}}`;
|
|
3
3
|
//# sourceMappingURL=item.base.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.base.css.js","sourceRoot":"","sources":["../../../../src/components/nav-drawer/themes/item.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":"item.base.css.js","sourceRoot":"","sources":["../../../../src/components/nav-drawer/themes/item.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,yzDAAyzD,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}[part~=base]{display:flex;align-items:center;flex-flow:row nowrap;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:rgba(0,0,0,0);white-space:nowrap;text-decoration:none;border:none;justify-content:flex-start;transition:background .15s ease-out}[part~=base] ::slotted(igc-icon){--ig-size: 3;display:flex;font:inherit}[part=content]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[part=\"base mini\"]{display:block}[part=\"base mini\"] [part=content]{display:none}:host([disabled]){-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:initial;pointer-events:none}@media(forced-colors: active){[part~=base]:hover,[part~=base]:focus-within{outline:.0625rem solid CanvasText;outline-offset:-0.0625rem}:host([active]) [part~=base]{--item-active-icon-color: Highlight;--item-active-text-color: Highlight}}`;\n "]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LitElement, type PropertyValues } from 'lit';
|
|
2
|
+
import type { PopoverScrollStrategy } from '../types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Describes the preferred placement of a toggle component.
|
|
4
5
|
*/
|
|
@@ -9,29 +10,24 @@ export type PopoverPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bot
|
|
|
9
10
|
* @slot - Content of the popover.
|
|
10
11
|
* @slot anchor - The element the popover will be anchored to.
|
|
11
12
|
*
|
|
13
|
+
* @fires igcPopoverScrollClose - The popover emits this event on each document scroll,
|
|
14
|
+
* but only while it shows against its anchor and the scroll strategy is `close`.
|
|
15
|
+
* The popover does not control its own `open` state, so the component that owns that state must close it.
|
|
16
|
+
* The event does not bubble, so add the listener on the popover element.
|
|
17
|
+
*
|
|
12
18
|
* @csspart container - The container wrapping the slotted content in the popover.
|
|
13
19
|
*/
|
|
14
20
|
export default class IgcPopoverComponent extends LitElement {
|
|
15
21
|
static readonly tagName = "igc-popover";
|
|
16
22
|
static styles: import("lit").CSSResult;
|
|
17
23
|
static register(): void;
|
|
18
|
-
private _dispose?;
|
|
19
24
|
private _target?;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
/**
|
|
23
|
-
* The positioning strategy resolved when the popover is opened. The `fixed`
|
|
24
|
-
* strategy is used when the anchor has a `position: sticky` ancestor, otherwise
|
|
25
|
-
* the default `absolute` strategy is used. Cached here to avoid repeated DOM
|
|
26
|
-
* traversals and style reflows on every scroll/resize reposition.
|
|
27
|
-
*
|
|
28
|
-
* Also, time to migrate to CSS Anchor positioning!!!
|
|
29
|
-
*/
|
|
30
|
-
private _strategy;
|
|
25
|
+
private _positionStrategy?;
|
|
26
|
+
private _positionMode?;
|
|
31
27
|
private readonly _slots;
|
|
32
28
|
private readonly _container;
|
|
33
29
|
/**
|
|
34
|
-
* Pass an IDREF or
|
|
30
|
+
* Pass an IDREF or a DOM element reference to use as the
|
|
35
31
|
* anchor target for the floating element.
|
|
36
32
|
*/
|
|
37
33
|
anchor?: Element | string;
|
|
@@ -41,11 +37,6 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
41
37
|
arrow: HTMLElement | null;
|
|
42
38
|
/** Additional offset to apply to the arrow element if enabled. */
|
|
43
39
|
arrowOffset: number;
|
|
44
|
-
/**
|
|
45
|
-
* Improves positioning for inline reference elements that span over multiple lines.
|
|
46
|
-
* Useful for tooltips or similar components.
|
|
47
|
-
*/
|
|
48
|
-
inline: boolean;
|
|
49
40
|
/**
|
|
50
41
|
* When enabled this changes the placement of the floating element in order to keep it
|
|
51
42
|
* in view along the main axis.
|
|
@@ -68,34 +59,54 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
68
59
|
*/
|
|
69
60
|
sameWidth: boolean;
|
|
70
61
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
*
|
|
62
|
+
* Sets the behavior of the popover when an ancestor scroll container
|
|
63
|
+
* scrolls and the popover is open.
|
|
64
|
+
*
|
|
65
|
+
* If the value is `hide`, the popover hides while the anchor is fully out
|
|
66
|
+
* of view. The popover shows again when the anchor returns to view. `hide`
|
|
67
|
+
* is the default value.
|
|
68
|
+
*
|
|
69
|
+
* If the value is `scroll`, the popover stays visible. The popover also
|
|
70
|
+
* stays anchored while the anchor is out of view.
|
|
71
|
+
*
|
|
72
|
+
* If the value is `close`, the popover behaves as for `hide`. The popover
|
|
73
|
+
* also emits `igcPopoverScrollClose` for each scroll. The component that
|
|
74
|
+
* owns the `open` state must then close the popover.
|
|
77
75
|
*/
|
|
78
|
-
|
|
76
|
+
scrollStrategy: PopoverScrollStrategy;
|
|
79
77
|
protected update(properties: PropertyValues<this>): void;
|
|
80
78
|
protected firstUpdated(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Waits also for the position strategy. The fallback strategy positions
|
|
81
|
+
* asynchronously, so the container has no position when Lit ends the update.
|
|
82
|
+
*/
|
|
83
|
+
protected getUpdateComplete(): Promise<boolean>;
|
|
81
84
|
/** @internal */
|
|
82
85
|
connectedCallback(): void;
|
|
83
86
|
/** @internal */
|
|
84
87
|
disconnectedCallback(): void;
|
|
85
88
|
private _handleSlotChange;
|
|
86
|
-
private
|
|
89
|
+
private _getPositionStrategy;
|
|
87
90
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
91
|
+
* Hides the container if the anchor leaves the DOM. The `open` property
|
|
92
|
+
* keeps its value, so the popover shows again when a new anchor resolves.
|
|
93
|
+
*/
|
|
94
|
+
private readonly _handleAnchorRemoved;
|
|
95
|
+
/**
|
|
96
|
+
* An IDREF that does not resolve keeps the current target, so the popover
|
|
97
|
+
* finds an anchor that renders later, at the next open.
|
|
90
98
|
*/
|
|
91
99
|
private _resolveTarget;
|
|
92
100
|
private _setOpenState;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
private
|
|
101
|
+
/**
|
|
102
|
+
* Binds one document `scroll` listener while the container shows and the
|
|
103
|
+
* scroll strategy is `close`. Reads the container, which can stay closed
|
|
104
|
+
* while `open` is true.
|
|
105
|
+
*/
|
|
106
|
+
private _syncScrollStrategy;
|
|
107
|
+
private readonly _handleRootScroll;
|
|
108
|
+
/** Shows or hides the container and then syncs the scroll listener. */
|
|
109
|
+
private _syncContainerState;
|
|
99
110
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
100
111
|
}
|
|
101
112
|
declare global {
|
|
@@ -4,41 +4,40 @@ 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 { arrow, autoUpdate, computePosition, flip, inline, limitShift, offset, shift, size, } from '@floating-ui/dom';
|
|
8
7
|
import { html, LitElement } from 'lit';
|
|
9
8
|
import { property, query } from 'lit/decorators.js';
|
|
10
9
|
import { addSlotController, setSlots, } from '#internals/controllers/slot.js';
|
|
11
10
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
12
11
|
import { firstOf } from '#internals/utils/arrays.js';
|
|
13
|
-
import { getElementByIdFromRoot,
|
|
12
|
+
import { getElementByIdFromRoot, isPopoverOpen } from '#internals/utils/dom.js';
|
|
13
|
+
import { toggleEventListener } from '#internals/utils/events.js';
|
|
14
14
|
import { isString } from '#internals/utils/types.js';
|
|
15
|
+
import { FloatingPositionStrategy } from './position/floating.js';
|
|
16
|
+
import { NativePositionStrategy, shouldUseNativeAnchorPositioning, } from './position/native.js';
|
|
17
|
+
import { resolvePlacement, SCROLL_LISTENER_OPTIONS, } from './position/types.js';
|
|
15
18
|
import { styles } from './themes/light/popover.base.css.js';
|
|
16
|
-
const OPPOSITE_SIDE = {
|
|
17
|
-
top: 'bottom',
|
|
18
|
-
right: 'left',
|
|
19
|
-
bottom: 'top',
|
|
20
|
-
left: 'right',
|
|
21
|
-
};
|
|
22
|
-
const SIDES = Object.keys(OPPOSITE_SIDE);
|
|
23
19
|
export default class IgcPopoverComponent extends LitElement {
|
|
24
20
|
constructor() {
|
|
25
21
|
super(...arguments);
|
|
26
|
-
this._positionId = 0;
|
|
27
|
-
this._strategy = 'absolute';
|
|
28
22
|
this._slots = addSlotController(this, {
|
|
29
23
|
slots: setSlots('anchor'),
|
|
30
24
|
onChange: this._handleSlotChange,
|
|
31
25
|
});
|
|
32
26
|
this.arrow = null;
|
|
33
27
|
this.arrowOffset = 0;
|
|
34
|
-
this.inline = false;
|
|
35
28
|
this.flip = false;
|
|
36
29
|
this.offset = 0;
|
|
37
30
|
this.open = false;
|
|
38
31
|
this.placement = 'bottom-start';
|
|
39
32
|
this.sameWidth = false;
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
33
|
+
this.scrollStrategy = 'hide';
|
|
34
|
+
this._handleAnchorRemoved = () => {
|
|
35
|
+
this._target = undefined;
|
|
36
|
+
this._setOpenState(false);
|
|
37
|
+
};
|
|
38
|
+
this._handleRootScroll = () => {
|
|
39
|
+
this.dispatchEvent(new CustomEvent('igcPopoverScrollClose'));
|
|
40
|
+
};
|
|
42
41
|
}
|
|
43
42
|
static { this.tagName = 'igc-popover'; }
|
|
44
43
|
static { this.styles = styles; }
|
|
@@ -47,15 +46,14 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
47
46
|
}
|
|
48
47
|
update(properties) {
|
|
49
48
|
if (this.hasUpdated) {
|
|
50
|
-
this._middleware = undefined;
|
|
51
|
-
if (properties.has('sameWidth') && !this.sameWidth) {
|
|
52
|
-
setStyles(this._container, { width: '' });
|
|
53
|
-
}
|
|
54
49
|
if (properties.has('open') || properties.has('anchor')) {
|
|
55
50
|
this._setOpenState(this.open);
|
|
56
51
|
}
|
|
57
52
|
else if (this.open) {
|
|
58
|
-
this.
|
|
53
|
+
this._positionStrategy?.update();
|
|
54
|
+
}
|
|
55
|
+
if (properties.has('scrollStrategy')) {
|
|
56
|
+
this._syncScrollStrategy();
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
super.update(properties);
|
|
@@ -63,6 +61,11 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
63
61
|
firstUpdated() {
|
|
64
62
|
this._setOpenState(this.open);
|
|
65
63
|
}
|
|
64
|
+
async getUpdateComplete() {
|
|
65
|
+
const complete = await super.getUpdateComplete();
|
|
66
|
+
await this._positionStrategy?.whenPositioned();
|
|
67
|
+
return complete;
|
|
68
|
+
}
|
|
66
69
|
connectedCallback() {
|
|
67
70
|
super.connectedCallback();
|
|
68
71
|
if (this.hasUpdated) {
|
|
@@ -79,10 +82,21 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
79
82
|
}
|
|
80
83
|
this._setOpenState(this.open);
|
|
81
84
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
_getPositionStrategy(target) {
|
|
86
|
+
const mode = shouldUseNativeAnchorPositioning(target)
|
|
87
|
+
? 'native'
|
|
88
|
+
: 'floating';
|
|
89
|
+
if (this._positionStrategy && this._positionMode === mode) {
|
|
90
|
+
return this._positionStrategy;
|
|
85
91
|
}
|
|
92
|
+
this._positionStrategy?.detach();
|
|
93
|
+
this._positionStrategy?.clear();
|
|
94
|
+
this._positionMode = mode;
|
|
95
|
+
this._positionStrategy =
|
|
96
|
+
mode === 'native'
|
|
97
|
+
? new NativePositionStrategy(this, this._handleAnchorRemoved)
|
|
98
|
+
: new FloatingPositionStrategy(this, this._handleAnchorRemoved);
|
|
99
|
+
return this._positionStrategy;
|
|
86
100
|
}
|
|
87
101
|
_resolveTarget() {
|
|
88
102
|
if (isString(this.anchor)) {
|
|
@@ -92,108 +106,31 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
92
106
|
firstOf(this._slots.getAssignedElements('anchor', { flatten: true })));
|
|
93
107
|
}
|
|
94
108
|
_setOpenState(state) {
|
|
95
|
-
this._clearDispose();
|
|
96
109
|
if (state) {
|
|
97
110
|
this._target = this._resolveTarget();
|
|
98
|
-
if (this._target) {
|
|
99
|
-
this._strategy = hasStickyAncestor(this._target) ? 'fixed' : 'absolute';
|
|
100
|
-
this._dispose = autoUpdate(this._target, this._container, this._updatePosition.bind(this));
|
|
101
|
-
}
|
|
102
111
|
}
|
|
103
|
-
this.
|
|
104
|
-
|
|
105
|
-
_setPopoverState(state) {
|
|
106
|
-
const container = this._container;
|
|
107
|
-
if (!container) {
|
|
108
|
-
return;
|
|
112
|
+
if (state && this._target) {
|
|
113
|
+
this._getPositionStrategy(this._target).attach(this._target, this._container);
|
|
109
114
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
shouldOpen ? container.showPopover() : container.hidePopover();
|
|
115
|
+
else {
|
|
116
|
+
this._positionStrategy?.detach();
|
|
113
117
|
}
|
|
118
|
+
this._syncContainerState(state);
|
|
114
119
|
}
|
|
115
|
-
|
|
116
|
-
this.
|
|
117
|
-
this._dispose = undefined;
|
|
120
|
+
_syncScrollStrategy() {
|
|
121
|
+
toggleEventListener(document, isPopoverOpen(this._container) && this.scrollStrategy === 'close', 'scroll', this._handleRootScroll, SCROLL_LISTENER_OPTIONS);
|
|
118
122
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
_createMiddleware() {
|
|
123
|
-
const shiftMiddleware = this.shift
|
|
124
|
-
? shift({ padding: this.shiftPadding, limiter: limitShift() })
|
|
125
|
-
: null;
|
|
126
|
-
const flipMiddleware = this.flip ? flip() : null;
|
|
127
|
-
const positioners = this._placement.includes('-')
|
|
128
|
-
? [flipMiddleware, shiftMiddleware]
|
|
129
|
-
: [shiftMiddleware, flipMiddleware];
|
|
130
|
-
const chain = [
|
|
131
|
-
this.offset !== 0 ? offset(this.offset) : null,
|
|
132
|
-
this.inline ? inline() : null,
|
|
133
|
-
...positioners,
|
|
134
|
-
this.sameWidth
|
|
135
|
-
? size({
|
|
136
|
-
apply: ({ rects }) => setStyles(this._container, {
|
|
137
|
-
width: `${rects.reference.width}px`,
|
|
138
|
-
}),
|
|
139
|
-
})
|
|
140
|
-
: null,
|
|
141
|
-
this.arrow ? arrow({ element: this.arrow }) : null,
|
|
142
|
-
];
|
|
143
|
-
return chain.filter((entry) => entry !== null);
|
|
144
|
-
}
|
|
145
|
-
async _updatePosition() {
|
|
146
|
-
if (!this.open) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
if (!this._target?.isConnected) {
|
|
150
|
-
this._target = undefined;
|
|
151
|
-
this._clearDispose();
|
|
152
|
-
this._setPopoverState(false);
|
|
123
|
+
_syncContainerState(state) {
|
|
124
|
+
if (!this._container) {
|
|
153
125
|
return;
|
|
154
126
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const { x, y, middlewareData, placement } = await computePosition(this._target, this._container, {
|
|
158
|
-
placement: this._placement,
|
|
159
|
-
middleware: (this._middleware ??= this._createMiddleware()),
|
|
160
|
-
strategy,
|
|
161
|
-
});
|
|
162
|
-
if (positionId !== this._positionId || !this.open) {
|
|
163
|
-
return;
|
|
127
|
+
if (state && this._target) {
|
|
128
|
+
this._positionStrategy?.show();
|
|
164
129
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
left: '0',
|
|
168
|
-
top: '0',
|
|
169
|
-
transform: `translate(${roundByDPR(x)}px,${roundByDPR(y)}px)`,
|
|
170
|
-
});
|
|
171
|
-
this._updateArrowPosition(placement, middlewareData);
|
|
172
|
-
}
|
|
173
|
-
_updateArrowPosition(placement, data) {
|
|
174
|
-
const element = this.arrow;
|
|
175
|
-
if (!(data.arrow && element)) {
|
|
176
|
-
return;
|
|
130
|
+
else {
|
|
131
|
+
this._positionStrategy?.hide();
|
|
177
132
|
}
|
|
178
|
-
|
|
179
|
-
const offset = this.arrowOffset;
|
|
180
|
-
const [side] = placement.split('-');
|
|
181
|
-
const staticSide = OPPOSITE_SIDE[side];
|
|
182
|
-
if (!element.part.contains(side)) {
|
|
183
|
-
element.part.remove(...SIDES);
|
|
184
|
-
element.part.add(side);
|
|
185
|
-
}
|
|
186
|
-
const inset = staticSide === 'top' || staticSide === 'bottom'
|
|
187
|
-
? element.offsetHeight
|
|
188
|
-
: element.offsetWidth;
|
|
189
|
-
const styles = {
|
|
190
|
-
top: y != null ? `${roundByDPR(y + offset)}px` : '',
|
|
191
|
-
right: '',
|
|
192
|
-
bottom: '',
|
|
193
|
-
left: x != null ? `${roundByDPR(x + offset)}px` : '',
|
|
194
|
-
};
|
|
195
|
-
styles[staticSide] = `${-inset}px`;
|
|
196
|
-
setStyles(element, styles);
|
|
133
|
+
this._syncScrollStrategy();
|
|
197
134
|
}
|
|
198
135
|
render() {
|
|
199
136
|
return html `
|
|
@@ -202,7 +139,8 @@ export default class IgcPopoverComponent extends LitElement {
|
|
|
202
139
|
id="container"
|
|
203
140
|
part="container"
|
|
204
141
|
popover="manual"
|
|
205
|
-
|
|
142
|
+
data-placement=${resolvePlacement(this)}
|
|
143
|
+
data-scroll-strategy=${this.scrollStrategy}
|
|
206
144
|
>
|
|
207
145
|
<slot></slot>
|
|
208
146
|
</div>
|
|
@@ -221,9 +159,6 @@ __decorate([
|
|
|
221
159
|
__decorate([
|
|
222
160
|
property({ type: Number, attribute: 'arrow-offset' })
|
|
223
161
|
], IgcPopoverComponent.prototype, "arrowOffset", void 0);
|
|
224
|
-
__decorate([
|
|
225
|
-
property({ type: Boolean, reflect: true })
|
|
226
|
-
], IgcPopoverComponent.prototype, "inline", void 0);
|
|
227
162
|
__decorate([
|
|
228
163
|
property({ type: Boolean, reflect: true })
|
|
229
164
|
], IgcPopoverComponent.prototype, "flip", void 0);
|
|
@@ -240,9 +175,6 @@ __decorate([
|
|
|
240
175
|
property({ type: Boolean, reflect: true, attribute: 'same-width' })
|
|
241
176
|
], IgcPopoverComponent.prototype, "sameWidth", void 0);
|
|
242
177
|
__decorate([
|
|
243
|
-
property({
|
|
244
|
-
], IgcPopoverComponent.prototype, "
|
|
245
|
-
__decorate([
|
|
246
|
-
property({ type: Number, attribute: 'shift-padding' })
|
|
247
|
-
], IgcPopoverComponent.prototype, "shiftPadding", void 0);
|
|
178
|
+
property({ attribute: 'scroll-strategy' })
|
|
179
|
+
], IgcPopoverComponent.prototype, "scrollStrategy", void 0);
|
|
248
180
|
//# sourceMappingURL=popover.js.map
|