igniteui-webcomponents 6.4.0-alpha.4 → 6.5.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 +141 -2
- package/README.md +65 -56
- package/components/button/themes/button/dark/button.indigo.css.js +1 -1
- package/components/button/themes/button/dark/button.indigo.css.js.map +1 -1
- package/components/button/themes/button/dark/button.material.css.js +1 -1
- package/components/button/themes/button/dark/button.material.css.js.map +1 -1
- package/components/button/themes/button/light/button.indigo.css.js +1 -1
- package/components/button/themes/button/light/button.indigo.css.js.map +1 -1
- package/components/button/themes/button/light/button.material.css.js +1 -1
- package/components/button/themes/button/light/button.material.css.js.map +1 -1
- package/components/button/themes/button/shared/button.bootstrap.css.js +1 -1
- package/components/button/themes/button/shared/button.bootstrap.css.js.map +1 -1
- package/components/button/themes/button/shared/button.common.css.js +1 -1
- package/components/button/themes/button/shared/button.common.css.js.map +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
- package/components/button/themes/button/shared/button.material.css.js +1 -1
- package/components/button/themes/button/shared/button.material.css.js.map +1 -1
- package/components/button-group/themes/dark/button-group.material.css.js +1 -1
- package/components/button-group/themes/dark/button-group.material.css.js.map +1 -1
- package/components/button-group/themes/light/button-group.material.css.js +1 -1
- package/components/button-group/themes/light/button-group.material.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.material.css.js +1 -1
- package/components/button-group/themes/shared/button/button.material.css.js.map +1 -1
- package/components/calendar/base.d.ts +7 -3
- package/components/calendar/base.js +10 -14
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +48 -44
- package/components/calendar/calendar.js +263 -259
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +49 -27
- package/components/calendar/days-view/days-view.js +170 -168
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/helpers.js +40 -28
- package/components/calendar/helpers.js.map +1 -1
- package/components/calendar/model.d.ts +9 -3
- package/components/calendar/model.js +29 -19
- package/components/calendar/model.js.map +1 -1
- package/components/calendar/months-view/months-view.d.ts +6 -8
- package/components/calendar/months-view/months-view.js +25 -38
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/calendar/themes/dark/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/dark/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/dark/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/dark/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.material.css.js +1 -1
- package/components/calendar/themes/dark/calendar.material.css.js.map +1 -1
- package/components/calendar/themes/days.js +8 -23
- package/components/calendar/themes/days.js.map +1 -1
- package/components/calendar/themes/light/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/light/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/light/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/light/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.material.css.js +1 -1
- package/components/calendar/themes/light/calendar.material.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/bootstrap/year-month-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/year-month-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/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.js +8 -23
- package/components/calendar/themes/year-month.js.map +1 -1
- package/components/calendar/years-view/years-view.d.ts +6 -5
- package/components/calendar/years-view/years-view.js +11 -14
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/carousel/carousel.d.ts +2 -1
- package/components/carousel/carousel.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/themes/light/checkbox/checkbox.material.css.js +1 -1
- package/components/checkbox/themes/light/checkbox/checkbox.material.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.common.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.common.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/chip/chip.d.ts +2 -1
- package/components/chip/chip.js.map +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.fluent.css.js +1 -1
- package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/light/chip.indigo.css.js +1 -1
- package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.shared.css.js +1 -1
- package/components/chip/themes/light/chip.shared.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/combo/combo.d.ts +3 -2
- package/components/combo/combo.js +7 -0
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/selection.js.map +1 -1
- package/components/combo/validators.js +2 -2
- package/components/combo/validators.js.map +1 -1
- package/components/common/controllers/async-consumer.js.map +1 -1
- package/components/common/controllers/focus-ring.js +1 -5
- package/components/common/controllers/focus-ring.js.map +1 -1
- package/components/common/controllers/root-click.js +46 -21
- package/components/common/controllers/root-click.js.map +1 -1
- package/components/common/definitions/defineAllComponents.js +2 -0
- package/components/common/definitions/defineAllComponents.js.map +1 -1
- package/components/common/i18n/EN/calendar.resources.js +4 -1
- package/components/common/i18n/EN/calendar.resources.js.map +1 -1
- package/components/common/i18n/EN/date-range-picker.resources.js.map +1 -1
- package/components/common/i18n/i18n-controller.js +6 -9
- package/components/common/i18n/i18n-controller.js.map +1 -1
- package/components/common/i18n/utils.d.ts +0 -12
- package/components/common/i18n/utils.js +0 -12
- package/components/common/i18n/utils.js.map +1 -1
- package/components/common/mixins/forms/associated.js +3 -23
- package/components/common/mixins/forms/associated.js.map +1 -1
- package/components/common/util.d.ts +5 -0
- package/components/common/util.js +5 -0
- package/components/common/util.js.map +1 -1
- package/components/common/validators.d.ts +2 -4
- package/components/common/validators.js +13 -19
- package/components/common/validators.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +7 -3
- package/components/date-picker/date-picker.js +2 -2
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.material.css.js.map +1 -1
- package/components/date-picker/validators.js +2 -3
- package/components/date-picker/validators.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +7 -2
- package/components/date-range-picker/date-range-picker.js +13 -10
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.material.css.js.map +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.material.css.js +1 -1
- package/components/date-range-picker/themes/light/date-range-picker.material.css.js.map +1 -1
- package/components/date-range-picker/validators.js +5 -8
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +10 -3
- package/components/date-time-input/date-time-input.js +39 -21
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/date-util.d.ts +11 -9
- package/components/date-time-input/date-util.js +23 -219
- package/components/date-time-input/date-util.js.map +1 -1
- package/components/dialog/dialog.d.ts +2 -0
- package/components/dialog/dialog.js +18 -9
- package/components/dialog/dialog.js.map +1 -1
- package/components/dialog/themes/dark/dialog.fluent.css.js +1 -1
- package/components/dialog/themes/dark/dialog.fluent.css.js.map +1 -1
- package/components/dialog/themes/light/dialog.fluent.css.js +1 -1
- package/components/dialog/themes/light/dialog.fluent.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
- package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js +1 -1
- package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js.map +1 -1
- package/components/file-input/file-input.d.ts +28 -13
- package/components/file-input/file-input.js +73 -46
- package/components/file-input/file-input.js.map +1 -1
- package/components/input/input-base.d.ts +31 -34
- package/components/input/input-base.js +58 -83
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +18 -7
- package/components/input/input.js +34 -19
- package/components/input/input.js.map +1 -1
- package/components/input/themes/dark/input.indigo.css.js +1 -1
- package/components/input/themes/dark/input.indigo.css.js.map +1 -1
- package/components/input/themes/light/input.indigo.css.js +1 -1
- package/components/input/themes/light/input.indigo.css.js.map +1 -1
- package/components/input/themes/light/input.shared.css.js +1 -1
- package/components/input/themes/light/input.shared.css.js.map +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.common.css.js +1 -1
- package/components/input/themes/shared/input.common.css.js.map +1 -1
- package/components/input/themes/shared/input.fluent.css.js +1 -1
- package/components/input/themes/shared/input.fluent.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/input/validators.js +3 -3
- package/components/input/validators.js.map +1 -1
- package/components/list/themes/dark/container/list.bootstrap.css.js +1 -1
- package/components/list/themes/dark/container/list.bootstrap.css.js.map +1 -1
- package/components/list/themes/light/container/list.fluent.css.js +1 -1
- package/components/list/themes/light/container/list.fluent.css.js.map +1 -1
- package/components/list/themes/shared/item/list-item.common.css.js +1 -1
- package/components/list/themes/shared/item/list-item.common.css.js.map +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
- package/components/mask-input/mask-input-base.d.ts +10 -4
- package/components/mask-input/mask-input-base.js +21 -16
- package/components/mask-input/mask-input-base.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +9 -3
- package/components/mask-input/mask-input.js +26 -6
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/mask-input/mask-parser.d.ts +30 -7
- package/components/mask-input/mask-parser.js +70 -42
- package/components/mask-input/mask-parser.js.map +1 -1
- package/components/mask-input/validators.js +3 -3
- package/components/mask-input/validators.js.map +1 -1
- package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js +1 -1
- package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js +1 -1
- package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js.map +1 -1
- package/components/navbar/themes/shared/navbar.common.css.js +1 -1
- package/components/navbar/themes/shared/navbar.common.css.js.map +1 -1
- package/components/radio/themes/light/radio.material.css.js +1 -1
- package/components/radio/themes/light/radio.material.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.common.css.js +1 -1
- package/components/radio/themes/shared/radio.common.css.js.map +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js +1 -1
- package/components/radio/themes/shared/radio.fluent.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/themes/shared/radio.material.css.js +1 -1
- package/components/radio/themes/shared/radio.material.css.js.map +1 -1
- package/components/radio/validators.js +2 -2
- package/components/radio/validators.js.map +1 -1
- package/components/rating/themes/dark/rating.indigo.css.js +1 -1
- package/components/rating/themes/dark/rating.indigo.css.js.map +1 -1
- package/components/rating/themes/light/rating.indigo.css.js +1 -1
- package/components/rating/themes/light/rating.indigo.css.js.map +1 -1
- package/components/ripple/ripple.d.ts +3 -3
- package/components/ripple/ripple.js +34 -31
- package/components/ripple/ripple.js.map +1 -1
- package/components/stepper/step.js +2 -2
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/themes/step/dark/step.bootstrap.css.js +1 -1
- package/components/stepper/themes/step/dark/step.bootstrap.css.js.map +1 -1
- package/components/stepper/themes/step/dark/step.fluent.css.js +1 -1
- package/components/stepper/themes/step/dark/step.fluent.css.js.map +1 -1
- package/components/stepper/themes/step/dark/step.indigo.css.js +1 -1
- package/components/stepper/themes/step/dark/step.indigo.css.js.map +1 -1
- package/components/stepper/themes/step/dark/step.material.css.js +1 -1
- package/components/stepper/themes/step/dark/step.material.css.js.map +1 -1
- package/components/stepper/themes/step/light/step.bootstrap.css.js +1 -1
- package/components/stepper/themes/step/light/step.bootstrap.css.js.map +1 -1
- package/components/stepper/themes/step/light/step.fluent.css.js +1 -1
- package/components/stepper/themes/step/light/step.fluent.css.js.map +1 -1
- package/components/stepper/themes/step/light/step.indigo.css.js +1 -1
- package/components/stepper/themes/step/light/step.indigo.css.js.map +1 -1
- package/components/stepper/themes/step/light/step.material.css.js +1 -1
- package/components/stepper/themes/step/light/step.material.css.js.map +1 -1
- package/components/stepper/themes/step/light/step.shared.css.js +1 -1
- package/components/stepper/themes/step/light/step.shared.css.js.map +1 -1
- package/components/stepper/themes/step/shared/step.common.css.js +1 -1
- package/components/stepper/themes/step/shared/step.common.css.js.map +1 -1
- package/components/stepper/themes/step/shared/step.indigo.css.js +1 -1
- package/components/stepper/themes/step/shared/step.indigo.css.js.map +1 -1
- package/components/tabs/tab-dom.js +8 -9
- package/components/tabs/tab-dom.js.map +1 -1
- package/components/tabs/themes/dark/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/dark/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/dark/tab.fluent.css.js +1 -1
- package/components/tabs/themes/dark/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/dark/tab.indigo.css.js +1 -1
- package/components/tabs/themes/dark/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/dark/tab.material.css.js +1 -1
- package/components/tabs/themes/dark/tab.material.css.js.map +1 -1
- package/components/tabs/themes/dark/tab.shared.css.js +1 -1
- package/components/tabs/themes/dark/tab.shared.css.js.map +1 -1
- package/components/tabs/themes/light/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/light/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/light/tab.fluent.css.js +1 -1
- package/components/tabs/themes/light/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/light/tab.indigo.css.js +1 -1
- package/components/tabs/themes/light/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/light/tab.material.css.js +1 -1
- package/components/tabs/themes/light/tab.material.css.js.map +1 -1
- package/components/tabs/themes/light/tab.shared.css.js +1 -1
- package/components/tabs/themes/light/tab.shared.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.common.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.common.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.bootstrap.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.common.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.common.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/tabs.base.css.js +1 -1
- package/components/tabs/themes/tabs.base.css.js.map +1 -1
- package/components/textarea/themes/dark/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/dark/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/light/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/light/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/light/textarea.shared.css.js +1 -1
- package/components/textarea/themes/light/textarea.shared.css.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/theme-provider/theme-provider.d.ts +65 -0
- package/components/theme-provider/theme-provider.js +58 -0
- package/components/theme-provider/theme-provider.js.map +1 -0
- package/components/tile-manager/tile.js +6 -3
- package/components/tile-manager/tile.js.map +1 -1
- package/components/tree/themes/dark/container.bootstrap.css.js +1 -1
- package/components/tree/themes/dark/container.bootstrap.css.js.map +1 -1
- package/components/tree/themes/light/container.bootstrap.css.js +1 -1
- package/components/tree/themes/light/container.bootstrap.css.js.map +1 -1
- package/components/tree/tree-item.js +4 -0
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.d.ts +14 -0
- package/components/tree/tree.js +23 -0
- package/components/tree/tree.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +0 -1
- package/components/validation-container/validation-container.js +6 -9
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +3176 -2986
- package/extras/chat-markdown-renderer.d.ts +72 -4
- package/extras/chat-markdown-renderer.js +19 -7
- package/extras/chat-markdown-renderer.js.map +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +5 -1
- package/index.js +4 -1
- package/index.js.map +1 -1
- package/package.json +9 -4
- package/themes/dark/bootstrap.css +1 -1
- package/themes/dark/fluent.css +1 -1
- package/themes/dark/indigo.css +1 -1
- package/themes/dark/material.css +1 -1
- package/themes/light/bootstrap.css +1 -1
- package/themes/light/fluent.css +1 -1
- package/themes/light/indigo.css +1 -1
- package/themes/light/material.css +1 -1
- package/theming/context.d.ts +36 -0
- package/theming/context.js +3 -0
- package/theming/context.js.map +1 -0
- package/theming/theming-controller.d.ts +7 -1
- package/theming/theming-controller.js +48 -12
- package/theming/theming-controller.js.map +1 -1
- package/theming/utils.d.ts +10 -0
- package/theming/utils.js +8 -42
- package/theming/utils.js.map +1 -1
- package/web-types.json +1 -1
- package/components/common/localization/intl-formatters.d.ts +0 -17
- package/components/common/localization/intl-formatters.js +0 -46
- package/components/common/localization/intl-formatters.js.map +0 -1
- package/components/validation-container/themes/dark/validator.bootstrap.css.d.ts +0 -1
- package/components/validation-container/themes/dark/validator.bootstrap.css.js +0 -3
- package/components/validation-container/themes/dark/validator.bootstrap.css.js.map +0 -1
- package/components/validation-container/themes/dark/validator.fluent.css.d.ts +0 -1
- package/components/validation-container/themes/dark/validator.fluent.css.js +0 -3
- package/components/validation-container/themes/dark/validator.fluent.css.js.map +0 -1
- package/components/validation-container/themes/dark/validator.indigo.css.d.ts +0 -1
- package/components/validation-container/themes/dark/validator.indigo.css.js +0 -3
- package/components/validation-container/themes/dark/validator.indigo.css.js.map +0 -1
- package/components/validation-container/themes/dark/validator.material.css.d.ts +0 -1
- package/components/validation-container/themes/dark/validator.material.css.js +0 -3
- package/components/validation-container/themes/dark/validator.material.css.js.map +0 -1
- package/components/validation-container/themes/light/validator.bootstrap.css.d.ts +0 -1
- package/components/validation-container/themes/light/validator.bootstrap.css.js +0 -3
- package/components/validation-container/themes/light/validator.bootstrap.css.js.map +0 -1
- package/components/validation-container/themes/light/validator.fluent.css.d.ts +0 -1
- package/components/validation-container/themes/light/validator.fluent.css.js +0 -3
- package/components/validation-container/themes/light/validator.fluent.css.js.map +0 -1
- package/components/validation-container/themes/light/validator.indigo.css.d.ts +0 -1
- package/components/validation-container/themes/light/validator.indigo.css.js +0 -3
- package/components/validation-container/themes/light/validator.indigo.css.js.map +0 -1
- package/components/validation-container/themes/light/validator.material.css.d.ts +0 -1
- package/components/validation-container/themes/light/validator.material.css.js +0 -3
- package/components/validation-container/themes/light/validator.material.css.js.map +0 -1
- package/components/validation-container/themes/light/validator.shared.css.d.ts +0 -1
- package/components/validation-container/themes/light/validator.shared.css.js +0 -3
- package/components/validation-container/themes/light/validator.shared.css.js.map +0 -1
- package/components/validation-container/themes/themes.d.ts +0 -2
- package/components/validation-container/themes/themes.js +0 -46
- package/components/validation-container/themes/themes.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--border-color: var(--ig-list-border-color, var(--ig-gray-200));--border-width: var(--ig-list-border-width, 0.0625rem);--ig-theme: fluent}`;
|
|
2
|
+
export const styles = css `:host{--header-text-color: var(--ig-list-header-text-color, var(--ig-secondary-700));--border-color: var(--ig-list-border-color, var(--ig-gray-200));--border-width: var(--ig-list-border-width, 0.0625rem);--ig-theme: fluent}`;
|
|
3
3
|
//# sourceMappingURL=list.fluent.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.fluent.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/light/container/list.fluent.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"list.fluent.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/light/container/list.fluent.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,iOAAiO,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{--header-text-color: var(--ig-list-header-text-color, var(--ig-secondary-700));--border-color: var(--ig-list-border-color, var(--ig-gray-200));--border-width: var(--ig-list-border-width, 0.0625rem);--ig-theme: fluent}`;\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{border-radius:var(--item-border-radius);color:var(--item-text-color);background:var(--item-background);border-bottom:var(--border-width) solid var(--border-color)}:host(:last-of-type){border-bottom:none}[part=title]{color:var(--item-title-color)}[part=subtitle]{color:var(--item-subtitle-color)}[part=start]{color:var(--item-thumbnail-color)}[part=
|
|
2
|
+
export const styles = css `:host{border-radius:var(--item-border-radius);color:var(--item-text-color);background:var(--item-background);border-bottom:var(--border-width) solid var(--border-color)}:host(:last-of-type){border-bottom:none}[part=title]{color:var(--item-title-color)}[part=subtitle]{color:var(--item-subtitle-color)}[part=start]{color:var(--item-thumbnail-color)}[part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color)}[part=end]{color:var(--item-action-color)}:host(:hover),:host(:focus-within){background:var(--item-background-hover);color:var(--item-text-color-hover)}:host(:hover) [part=title],:host(:focus-within) [part=title]{color:var(--item-title-color-hover)}:host(:hover) [part=subtitle],:host(:focus-within) [part=subtitle]{color:var(--item-subtitle-color-hover)}:host(:hover) [part=start],:host(:focus-within) [part=start]{color:var(--item-thumbnail-color-hover)}:host(:hover) [part=start] ::slotted(igc-avatar),:host(:focus-within) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-hover)}:host(:hover) [part=end],:host(:focus-within) [part=end]{color:var(--item-action-color-hover)}:host(:active){color:var(--item-text-color-active);background:var(--item-background-active)}:host(:active) [part=title]{color:var(--item-title-color-active)}:host(:active) [part=subtitle]{color:var(--item-subtitle-color-active)}:host(:active) [part=start]{color:var(--item-thumbnail-color-active)}:host(:active) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-active)}:host(:active) [part=end]{color:var(--item-action-color-active)}:host([selected]){color:var(--item-text-color-selected);background:var(--item-background-selected)}:host([selected]) [part=title]{color:var(--item-title-color-selected)}:host([selected]) [part=subtitle]{color:var(--item-subtitle-color-selected)}:host([selected]) [part=start]{color:var(--item-thumbnail-color-selected)}:host([selected]) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-selected)}:host([selected]) [part=end]{color:var(--item-action-color-selected)}`;
|
|
3
3
|
//# sourceMappingURL=list-item.common.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-item.common.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/shared/item/list-item.common.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"list-item.common.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/shared/item/list-item.common.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,kiEAAkiE,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{border-radius:var(--item-border-radius);color:var(--item-text-color);background:var(--item-background);border-bottom:var(--border-width) solid var(--border-color)}:host(:last-of-type){border-bottom:none}[part=title]{color:var(--item-title-color)}[part=subtitle]{color:var(--item-subtitle-color)}[part=start]{color:var(--item-thumbnail-color)}[part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color)}[part=end]{color:var(--item-action-color)}:host(:hover),:host(:focus-within){background:var(--item-background-hover);color:var(--item-text-color-hover)}:host(:hover) [part=title],:host(:focus-within) [part=title]{color:var(--item-title-color-hover)}:host(:hover) [part=subtitle],:host(:focus-within) [part=subtitle]{color:var(--item-subtitle-color-hover)}:host(:hover) [part=start],:host(:focus-within) [part=start]{color:var(--item-thumbnail-color-hover)}:host(:hover) [part=start] ::slotted(igc-avatar),:host(:focus-within) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-hover)}:host(:hover) [part=end],:host(:focus-within) [part=end]{color:var(--item-action-color-hover)}:host(:active){color:var(--item-text-color-active);background:var(--item-background-active)}:host(:active) [part=title]{color:var(--item-title-color-active)}:host(:active) [part=subtitle]{color:var(--item-subtitle-color-active)}:host(:active) [part=start]{color:var(--item-thumbnail-color-active)}:host(:active) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-active)}:host(:active) [part=end]{color:var(--item-action-color-active)}:host([selected]){color:var(--item-text-color-selected);background:var(--item-background-selected)}:host([selected]) [part=title]{color:var(--item-title-color-selected)}:host([selected]) [part=subtitle]{color:var(--item-subtitle-color-selected)}:host([selected]) [part=start]{color:var(--item-thumbnail-color-selected)}:host([selected]) [part=start] ::slotted(igc-avatar){--icon-color: var(--item-thumbnail-color-selected)}:host([selected]) [part=end]{color:var(--item-action-color-selected)}`;\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{padding-inline:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(0.75rem, -1 * 0.75rem)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));gap:.5rem}:host ::slotted(igc-avatar){--ig-size: 2}[part=title]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part=end]{gap:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem))}`;
|
|
2
|
+
export const styles = css `:host{padding-inline:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(0.75rem, -1 * 0.75rem)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));gap:.5rem}:host ::slotted(igc-button),:host ::slotted(igc-icon-button),:host ::slotted(igc-icon),:host ::slotted(igc-avatar){--ig-size: 2}[part=title]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part=end]{gap:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem))}`;
|
|
3
3
|
//# sourceMappingURL=list-item.indigo.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-item.indigo.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/shared/item/list-item.indigo.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"list-item.indigo.css.js","sourceRoot":"","sources":["../../../../../../src/components/list/themes/shared/item/list-item.indigo.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,u8CAAu8C,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{padding-inline:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(0.75rem, -1 * 0.75rem)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));gap:.5rem}:host ::slotted(igc-button),:host ::slotted(igc-icon-button),:host ::slotted(igc-icon),:host ::slotted(igc-avatar){--ig-size: 2}[part=title]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part=end]{gap:max(var(--is-large, 1)*max(0.5rem, -1 * 0.5rem),var(--is-medium, 1)*max(0.375rem, -1 * 0.375rem),var(--is-small, 1)*max(0.25rem, -1 * 0.25rem))}`;\n"]}
|
|
@@ -8,10 +8,17 @@ export type MaskSelection = {
|
|
|
8
8
|
export declare abstract class IgcMaskInputBaseComponent extends IgcInputBaseComponent {
|
|
9
9
|
protected readonly _parser: MaskParser;
|
|
10
10
|
protected _maskSelection: MaskSelection;
|
|
11
|
-
protected
|
|
11
|
+
protected _compositionStart: number;
|
|
12
12
|
protected _focused: boolean;
|
|
13
13
|
protected _maskedValue: string;
|
|
14
14
|
protected get _inputSelection(): MaskSelection;
|
|
15
|
+
/**
|
|
16
|
+
* Makes the control a readonly field.
|
|
17
|
+
*
|
|
18
|
+
* @attr readonly
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
readOnly: boolean;
|
|
15
22
|
/**
|
|
16
23
|
* The masked pattern of the component.
|
|
17
24
|
*
|
|
@@ -35,9 +42,8 @@ export declare abstract class IgcMaskInputBaseComponent extends IgcInputBaseComp
|
|
|
35
42
|
protected _handleClick(): void;
|
|
36
43
|
protected abstract _updateSetRangeTextValue(): void;
|
|
37
44
|
protected abstract _updateInput(text: string, range: MaskSelection): void;
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
setSelectionRange(start: number, end: number, direction?: SelectionRangeDirection): void;
|
|
45
|
+
/** Sets the text selection range of the control */
|
|
46
|
+
setSelectionRange(start?: number, end?: number, direction?: SelectionRangeDirection): void;
|
|
41
47
|
/** Replaces the selected text in the control and re-applies the mask */
|
|
42
48
|
setRangeText(replacement: string, start?: number, end?: number, selectMode?: RangeTextSelectMode): void;
|
|
43
49
|
}
|
|
@@ -13,14 +13,15 @@ let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInput
|
|
|
13
13
|
super(...arguments);
|
|
14
14
|
this._parser = new MaskParser();
|
|
15
15
|
this._maskSelection = { start: 0, end: 0 };
|
|
16
|
-
this.
|
|
16
|
+
this._compositionStart = 0;
|
|
17
17
|
this._focused = false;
|
|
18
18
|
this._maskedValue = '';
|
|
19
|
+
this.readOnly = false;
|
|
19
20
|
}
|
|
20
21
|
get _inputSelection() {
|
|
21
22
|
return {
|
|
22
|
-
start: this.
|
|
23
|
-
end: this.
|
|
23
|
+
start: this._input?.selectionStart || 0,
|
|
24
|
+
end: this._input?.selectionEnd || 0,
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
set mask(value) {
|
|
@@ -36,7 +37,7 @@ let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInput
|
|
|
36
37
|
return this._parser.prompt;
|
|
37
38
|
}
|
|
38
39
|
async _handleInput({ inputType, isComposing, }) {
|
|
39
|
-
const value = this.
|
|
40
|
+
const value = this._input?.value ?? '';
|
|
40
41
|
const { start, end } = this._maskSelection;
|
|
41
42
|
const deletePosition = this._parser.getNextNonLiteralPosition(end) + 1;
|
|
42
43
|
this._setTouchedState();
|
|
@@ -44,12 +45,12 @@ let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInput
|
|
|
44
45
|
case 'deleteContentForward':
|
|
45
46
|
this._updateInput('', { start, end: deletePosition });
|
|
46
47
|
await this.updateComplete;
|
|
47
|
-
return this.
|
|
48
|
+
return this._input?.setSelectionRange(deletePosition, deletePosition);
|
|
48
49
|
case 'deleteContentBackward':
|
|
49
50
|
if (isComposing)
|
|
50
51
|
return;
|
|
51
52
|
return this._updateInput('', {
|
|
52
|
-
start: this._parser.getPreviousNonLiteralPosition(this._inputSelection.start),
|
|
53
|
+
start: this._parser.getPreviousNonLiteralPosition(this._inputSelection.start + 1),
|
|
53
54
|
end,
|
|
54
55
|
});
|
|
55
56
|
case 'deleteByCut':
|
|
@@ -64,7 +65,8 @@ let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInput
|
|
|
64
65
|
case 'insertFromDrop':
|
|
65
66
|
return this._updateInput(value.substring(this._inputSelection.start, this._inputSelection.end), { ...this._inputSelection });
|
|
66
67
|
case undefined:
|
|
67
|
-
|
|
68
|
+
case '':
|
|
69
|
+
return this._updateInput(this._parser.parse(value.substring(start, this._inputSelection.end)), {
|
|
68
70
|
start,
|
|
69
71
|
end: this._inputSelection.end,
|
|
70
72
|
});
|
|
@@ -74,26 +76,26 @@ let IgcMaskInputBaseComponent = class IgcMaskInputBaseComponent extends IgcInput
|
|
|
74
76
|
this._maskSelection = this._inputSelection;
|
|
75
77
|
}
|
|
76
78
|
_handleCompositionStart() {
|
|
77
|
-
this.
|
|
79
|
+
this._compositionStart = this._inputSelection.start;
|
|
78
80
|
}
|
|
79
81
|
_handleCompositionEnd({ data }) {
|
|
80
82
|
this._updateInput(data, {
|
|
81
|
-
start: this.
|
|
83
|
+
start: this._compositionStart,
|
|
82
84
|
end: this._inputSelection.end,
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
87
|
_handleClick() {
|
|
86
|
-
const { selectionStart: start, selectionEnd: end } = this.
|
|
88
|
+
const { selectionStart: start, selectionEnd: end } = this._input ?? {
|
|
89
|
+
selectionStart: 0,
|
|
90
|
+
selectionEnd: 0,
|
|
91
|
+
};
|
|
87
92
|
if (start === end && start === this._maskedValue.length) {
|
|
88
93
|
this.select();
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
|
-
|
|
92
|
-
this.
|
|
93
|
-
|
|
94
|
-
setSelectionRange(start, end, direction) {
|
|
95
|
-
super.setSelectionRange(start, end, direction);
|
|
96
|
-
this._maskSelection = { start, end };
|
|
96
|
+
setSelectionRange(start, end, direction = 'none') {
|
|
97
|
+
this._input?.setSelectionRange(start ?? null, end ?? null, direction);
|
|
98
|
+
this._maskSelection = { start: start ?? 0, end: end ?? 0 };
|
|
97
99
|
}
|
|
98
100
|
setRangeText(replacement, start, end, selectMode) {
|
|
99
101
|
const current = this._inputSelection;
|
|
@@ -125,6 +127,9 @@ __decorate([
|
|
|
125
127
|
__decorate([
|
|
126
128
|
state()
|
|
127
129
|
], IgcMaskInputBaseComponent.prototype, "_maskedValue", void 0);
|
|
130
|
+
__decorate([
|
|
131
|
+
property({ type: Boolean, reflect: true })
|
|
132
|
+
], IgcMaskInputBaseComponent.prototype, "readOnly", void 0);
|
|
128
133
|
__decorate([
|
|
129
134
|
property()
|
|
130
135
|
], IgcMaskInputBaseComponent.prototype, "mask", null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-input-base.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-input-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { property, state } from 'lit/decorators.js';\nimport { blazorDeepImport } from '../common/decorators/blazorDeepImport.js';\nimport { IgcInputBaseComponent } from '../input/input-base.js';\nimport type { RangeTextSelectMode, SelectionRangeDirection } from '../types.js';\nimport { MaskParser } from './mask-parser.js';\n\nexport type MaskSelection = {\n start: number;\n end: number;\n};\n\n@blazorDeepImport\nexport abstract class IgcMaskInputBaseComponent extends IgcInputBaseComponent {\n //#region Internal state and properties\n\n protected readonly _parser = new MaskParser();\n\n protected _maskSelection: MaskSelection = { start: 0, end: 0 };\n protected compositionStart = 0;\n\n @state()\n protected _focused = false;\n\n @state()\n protected _maskedValue = '';\n\n protected get _inputSelection(): MaskSelection {\n return {\n start: this.input.selectionStart || 0,\n end: this.input.selectionEnd || 0,\n };\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * The masked pattern of the component.\n *\n * @attr\n * @default 'CCCCCCCCCC'\n */\n @property()\n public set mask(value: string) {\n this._parser.mask = value;\n }\n\n public get mask(): string {\n return this._parser.mask;\n }\n\n /**\n * The prompt symbol to use for unfilled parts of the mask pattern.\n *\n * @attr\n * @default '_'\n */\n @property()\n public set prompt(value: string) {\n this._parser.prompt = value;\n }\n\n public get prompt(): string {\n return this._parser.prompt;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected async _handleInput({\n inputType,\n isComposing,\n }: InputEvent): Promise<void> {\n const value = this.input.value;\n const { start, end } = this._maskSelection;\n const deletePosition = this._parser.getNextNonLiteralPosition(end) + 1;\n this._setTouchedState();\n\n switch (inputType) {\n case 'deleteContentForward':\n this._updateInput('', { start, end: deletePosition });\n await this.updateComplete;\n return this.input.setSelectionRange(deletePosition, deletePosition);\n\n case 'deleteContentBackward':\n if (isComposing) return;\n return this._updateInput('', {\n start: this._parser.getPreviousNonLiteralPosition(\n this._inputSelection.start\n ),\n end,\n });\n\n case 'deleteByCut':\n return this._updateInput('', this._maskSelection);\n\n case 'insertText':\n return this._updateInput(\n value.substring(start, this._inputSelection.end),\n this._maskSelection\n );\n\n case 'insertFromPaste':\n return this._updateInput(\n value.substring(start, this._inputSelection.end),\n {\n start,\n end: this._inputSelection.start,\n }\n );\n\n case 'insertFromDrop':\n return this._updateInput(\n value.substring(this._inputSelection.start, this._inputSelection.end),\n { ...this._inputSelection }\n );\n\n // Potential browser auto-fill behavior\n case undefined:\n return this._updateInput(\n value.substring(start, this._inputSelection.end),\n {\n start,\n end: this._inputSelection.end,\n }\n );\n }\n }\n\n protected _setMaskSelection(): void {\n this._maskSelection = this._inputSelection;\n }\n\n protected _handleCompositionStart(): void {\n this.compositionStart = this._inputSelection.start;\n }\n\n protected _handleCompositionEnd({ data }: CompositionEvent): void {\n this._updateInput(data, {\n start: this.compositionStart,\n end: this._inputSelection.end,\n });\n }\n\n protected _handleClick(): void {\n const { selectionStart: start, selectionEnd: end } = this.input;\n\n // Clicking at the end of the input field will select the entire mask\n if (start === end && start === this._maskedValue.length) {\n this.select();\n }\n }\n\n //#endregion\n\n //#region Internal methods\n\n protected abstract _updateSetRangeTextValue(): void;\n protected abstract _updateInput(text: string, range: MaskSelection): void;\n\n //#endregion\n\n //#region Public methods\n\n /** Selects all text within the input. */\n public select(): void {\n this.input.select();\n }\n\n /* blazorSuppress */\n public override setSelectionRange(\n start: number,\n end: number,\n direction?: SelectionRangeDirection\n ): void {\n super.setSelectionRange(start, end, direction);\n this._maskSelection = { start, end };\n }\n\n /* blazorSuppress */\n /** Replaces the selected text in the control and re-applies the mask */\n public override setRangeText(\n replacement: string,\n start?: number,\n end?: number,\n selectMode?: RangeTextSelectMode\n ) {\n const current = this._inputSelection;\n const _start = start ?? current.start;\n const _end = end ?? current.end;\n\n const result = this._parser.replace(\n this._maskedValue || this._parser.emptyMask,\n replacement,\n _start,\n _end\n );\n this._maskedValue = this._parser.apply(this._parser.parse(result.value));\n this._updateSetRangeTextValue();\n\n this.updateComplete.then(() => {\n switch (selectMode) {\n case 'select':\n this.setSelectionRange(_start, _end);\n break;\n case 'start':\n this.setSelectionRange(_start, _start);\n break;\n case 'end':\n this.setSelectionRange(_end, _end);\n break;\n default:\n this.setSelectionRange(current.start, current.end);\n }\n });\n }\n\n //#endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mask-input-base.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-input-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { property, state } from 'lit/decorators.js';\nimport { blazorDeepImport } from '../common/decorators/blazorDeepImport.js';\nimport { IgcInputBaseComponent } from '../input/input-base.js';\nimport type { RangeTextSelectMode, SelectionRangeDirection } from '../types.js';\nimport { MaskParser } from './mask-parser.js';\n\nexport type MaskSelection = {\n start: number;\n end: number;\n};\n\n@blazorDeepImport\nexport abstract class IgcMaskInputBaseComponent extends IgcInputBaseComponent {\n //#region Internal state and properties\n\n protected readonly _parser = new MaskParser();\n\n protected _maskSelection: MaskSelection = { start: 0, end: 0 };\n protected _compositionStart = 0;\n\n @state()\n protected _focused = false;\n\n @state()\n protected _maskedValue = '';\n\n protected get _inputSelection(): MaskSelection {\n return {\n start: this._input?.selectionStart || 0,\n end: this._input?.selectionEnd || 0,\n };\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * Makes the control a readonly field.\n *\n * @attr readonly\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public readOnly = false;\n\n /**\n * The masked pattern of the component.\n *\n * @attr\n * @default 'CCCCCCCCCC'\n */\n @property()\n public set mask(value: string) {\n this._parser.mask = value;\n }\n\n public get mask(): string {\n return this._parser.mask;\n }\n\n /**\n * The prompt symbol to use for unfilled parts of the mask pattern.\n *\n * @attr\n * @default '_'\n */\n @property()\n public set prompt(value: string) {\n this._parser.prompt = value;\n }\n\n public get prompt(): string {\n return this._parser.prompt;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected async _handleInput({\n inputType,\n isComposing,\n }: InputEvent): Promise<void> {\n const value = this._input?.value ?? '';\n const { start, end } = this._maskSelection;\n const deletePosition = this._parser.getNextNonLiteralPosition(end) + 1;\n this._setTouchedState();\n\n switch (inputType) {\n case 'deleteContentForward':\n this._updateInput('', { start, end: deletePosition });\n await this.updateComplete;\n return this._input?.setSelectionRange(deletePosition, deletePosition);\n\n case 'deleteContentBackward':\n if (isComposing) return;\n return this._updateInput('', {\n start: this._parser.getPreviousNonLiteralPosition(\n this._inputSelection.start + 1\n ),\n end,\n });\n\n case 'deleteByCut':\n return this._updateInput('', this._maskSelection);\n\n case 'insertText':\n return this._updateInput(\n value.substring(start, this._inputSelection.end),\n this._maskSelection\n );\n\n case 'insertFromPaste':\n return this._updateInput(\n value.substring(start, this._inputSelection.end),\n {\n start,\n end: this._inputSelection.start,\n }\n );\n\n case 'insertFromDrop':\n return this._updateInput(\n value.substring(this._inputSelection.start, this._inputSelection.end),\n { ...this._inputSelection }\n );\n\n // Potential browser auto-fill behavior\n case undefined:\n case '':\n return this._updateInput(\n this._parser.parse(value.substring(start, this._inputSelection.end)),\n {\n start,\n end: this._inputSelection.end,\n }\n );\n }\n }\n\n protected _setMaskSelection(): void {\n this._maskSelection = this._inputSelection;\n }\n\n protected _handleCompositionStart(): void {\n this._compositionStart = this._inputSelection.start;\n }\n\n protected _handleCompositionEnd({ data }: CompositionEvent): void {\n this._updateInput(data, {\n start: this._compositionStart,\n end: this._inputSelection.end,\n });\n }\n\n protected _handleClick(): void {\n const { selectionStart: start, selectionEnd: end } = this._input ?? {\n selectionStart: 0,\n selectionEnd: 0,\n };\n\n // Clicking at the end of the input field will select the entire mask\n if (start === end && start === this._maskedValue.length) {\n this.select();\n }\n }\n\n //#endregion\n\n //#region Internal methods\n\n protected abstract _updateSetRangeTextValue(): void;\n protected abstract _updateInput(text: string, range: MaskSelection): void;\n\n //#endregion\n\n //#region Public methods\n\n /* blazorSuppress */\n /** Sets the text selection range of the control */\n public setSelectionRange(\n start?: number,\n end?: number,\n direction: SelectionRangeDirection = 'none'\n ): void {\n this._input?.setSelectionRange(start ?? null, end ?? null, direction);\n this._maskSelection = { start: start ?? 0, end: end ?? 0 };\n }\n\n /* blazorSuppress */\n /** Replaces the selected text in the control and re-applies the mask */\n public setRangeText(\n replacement: string,\n start?: number,\n end?: number,\n selectMode?: RangeTextSelectMode\n ): void {\n const current = this._inputSelection;\n const _start = start ?? current.start;\n const _end = end ?? current.end;\n\n const result = this._parser.replace(\n this._maskedValue || this._parser.emptyMask,\n replacement,\n _start,\n _end\n );\n this._maskedValue = this._parser.apply(this._parser.parse(result.value));\n this._updateSetRangeTextValue();\n\n this.updateComplete.then(() => {\n switch (selectMode) {\n case 'select':\n this.setSelectionRange(_start, _end);\n break;\n case 'start':\n this.setSelectionRange(_start, _start);\n break;\n case 'end':\n this.setSelectionRange(_end, _end);\n break;\n default:\n this.setSelectionRange(current.start, current.end);\n }\n });\n }\n\n //#endregion\n}\n"]}
|
|
@@ -26,16 +26,20 @@ import { IgcMaskInputBaseComponent, type MaskSelection } from './mask-input-base
|
|
|
26
26
|
*/
|
|
27
27
|
export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
28
28
|
static readonly tagName = "igc-mask-input";
|
|
29
|
+
static styles: import("lit").CSSResult[];
|
|
29
30
|
static register(): void;
|
|
30
31
|
protected get __validators(): import("../common/validators.js").Validator<IgcMaskInputComponent>[];
|
|
32
|
+
protected readonly _themes: import("../../theming/theming-controller.js").ThemingController;
|
|
33
|
+
protected readonly _slots: import("../common/controllers/slot.js").SlotController<"invalid" | "prefix" | "[default]" | "helper-text" | "suffix" | "value-missing" | "custom-error" | "bad-input">;
|
|
31
34
|
protected readonly _formValue: import("../common/mixins/forms/form-value.js").FormValue<string>;
|
|
32
35
|
protected get _isRawMode(): boolean;
|
|
33
36
|
/**
|
|
34
37
|
* Dictates the behavior when retrieving the value of the control:
|
|
35
38
|
*
|
|
36
|
-
* - `raw
|
|
37
|
-
* - `withFormatting
|
|
39
|
+
* - `raw`: Returns clean input (e.g. "5551234567")
|
|
40
|
+
* - `withFormatting`: Returns with mask formatting (e.g. "(555) 123-4567")
|
|
38
41
|
*
|
|
42
|
+
* Empty values always return an empty string, regardless of the value mode.
|
|
39
43
|
* @attr value-mode
|
|
40
44
|
* @default 'raw'
|
|
41
45
|
*/
|
|
@@ -74,7 +78,9 @@ export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
|
74
78
|
protected _updateInput(text: string, { start, end }: MaskSelection): Promise<void>;
|
|
75
79
|
protected _updateSetRangeTextValue(): void;
|
|
76
80
|
private _updateMaskedValue;
|
|
77
|
-
|
|
81
|
+
/** Returns whether the current masked input is valid according to the mask pattern. */
|
|
82
|
+
isValidMaskPattern(): boolean;
|
|
83
|
+
protected _renderInput(): import("lit-html").TemplateResult<1>;
|
|
78
84
|
}
|
|
79
85
|
declare global {
|
|
80
86
|
interface HTMLElementTagNameMap {
|
|
@@ -4,20 +4,30 @@ 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
|
|
7
|
+
import { html } from 'lit';
|
|
8
8
|
import { property } from 'lit/decorators.js';
|
|
9
9
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
10
10
|
import { live } from 'lit/directives/live.js';
|
|
11
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
12
|
+
import { addSlotController, setSlots } from '../common/controllers/slot.js';
|
|
11
13
|
import { registerComponent } from '../common/definitions/register.js';
|
|
12
14
|
import { createFormValueState } from '../common/mixins/forms/form-value.js';
|
|
13
15
|
import { partMap } from '../common/part-map.js';
|
|
14
|
-
import {
|
|
16
|
+
import { bindIf } from '../common/util.js';
|
|
17
|
+
import { styles } from '../input/themes/input.base.css.js';
|
|
18
|
+
import { styles as shared } from '../input/themes/shared/input.common.css.js';
|
|
19
|
+
import { all } from '../input/themes/themes.js';
|
|
15
20
|
import IgcValidationContainerComponent from '../validation-container/validation-container.js';
|
|
16
21
|
import { IgcMaskInputBaseComponent, } from './mask-input-base.js';
|
|
17
22
|
import { maskValidators } from './validators.js';
|
|
23
|
+
const Slots = setSlots('prefix', 'suffix', 'helper-text', 'value-missing', 'bad-input', 'custom-error', 'invalid');
|
|
18
24
|
export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
19
25
|
constructor() {
|
|
20
26
|
super(...arguments);
|
|
27
|
+
this._themes = addThemingController(this, all);
|
|
28
|
+
this._slots = addSlotController(this, {
|
|
29
|
+
slots: Slots,
|
|
30
|
+
});
|
|
21
31
|
this._formValue = createFormValueState(this, {
|
|
22
32
|
initialValue: '',
|
|
23
33
|
transformers: {
|
|
@@ -27,6 +37,7 @@ export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
|
27
37
|
this.valueMode = 'raw';
|
|
28
38
|
}
|
|
29
39
|
static { this.tagName = 'igc-mask-input'; }
|
|
40
|
+
static { this.styles = [styles, shared]; }
|
|
30
41
|
static register() {
|
|
31
42
|
registerComponent(IgcMaskInputComponent, IgcValidationContainerComponent);
|
|
32
43
|
}
|
|
@@ -112,7 +123,7 @@ export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
|
112
123
|
this.emitEvent('igcInput', { detail: this.value });
|
|
113
124
|
}
|
|
114
125
|
await this.updateComplete;
|
|
115
|
-
this.
|
|
126
|
+
this._input?.setSelectionRange(result.end, result.end);
|
|
116
127
|
}
|
|
117
128
|
_updateSetRangeTextValue() {
|
|
118
129
|
this.value = this._parser.parse(this._maskedValue);
|
|
@@ -122,16 +133,26 @@ export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
|
122
133
|
this._maskedValue = '';
|
|
123
134
|
}
|
|
124
135
|
}
|
|
125
|
-
|
|
136
|
+
isValidMaskPattern() {
|
|
137
|
+
return this._parser.isValidString(this._maskedValue);
|
|
138
|
+
}
|
|
139
|
+
_renderInput() {
|
|
140
|
+
const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';
|
|
141
|
+
const hasHelperText = this._slots.hasAssignedElements('helper-text');
|
|
126
142
|
return html `
|
|
127
143
|
<input
|
|
144
|
+
id=${this._inputId}
|
|
128
145
|
type="text"
|
|
129
|
-
part=${partMap(this.
|
|
146
|
+
part=${partMap(this._resolvePartNames('input'))}
|
|
130
147
|
name=${ifDefined(this.name)}
|
|
131
148
|
.value=${live(this._maskedValue)}
|
|
132
149
|
.placeholder=${this.placeholder ?? this._parser.escapedMask}
|
|
133
150
|
?readonly=${this.readOnly}
|
|
134
151
|
?disabled=${this.disabled}
|
|
152
|
+
?autofocus=${this.autofocus}
|
|
153
|
+
inputmode=${ifDefined(this.inputMode)}
|
|
154
|
+
tabindex=${bindIf(hasNegativeTabIndex, -1)}
|
|
155
|
+
aria-describedby=${bindIf(hasHelperText, 'helper-text')}
|
|
135
156
|
@dragenter=${this._handleDragEnter}
|
|
136
157
|
@dragleave=${this._handleDragLeave}
|
|
137
158
|
@dragstart=${this._setMaskSelection}
|
|
@@ -143,7 +164,6 @@ export default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {
|
|
|
143
164
|
@compositionstart=${this._handleCompositionStart}
|
|
144
165
|
@compositionend=${this._handleCompositionEnd}
|
|
145
166
|
@input=${this._handleInput}
|
|
146
|
-
aria-describedby=${ifDefined(isEmpty(this._helperText) ? nothing : 'helper-text')}
|
|
147
167
|
@keydown=${this._setMaskSelection}
|
|
148
168
|
/>
|
|
149
169
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-input.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport { isEmpty } from '../common/util.js';\nimport type { MaskInputValueMode } from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from './mask-input-base.js';\nimport { maskValidators } from './validators.js';\n\n/**\n * A masked input is an input field where a developer can control user input and format the visible value,\n * based on configurable rules\n *\n * @element igc-mask-input\n *\n * @slot prefix - Renders content before the input\n * @slot suffix - Renders content after the input\n * @slot helper-text - Renders content below the input\n * @slot value-missing - Renders content when the required validation fails.\n * @slot bad-input - Renders content when a required mask pattern validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control receives user input\n * @fires igcChange - Emitted when an alteration of the control's value is committed by the user\n *\n * @csspart container - The main wrapper that holds all main input elements\n * @csspart input - The native input element\n * @csspart label - The native label element\n * @csspart prefix - The prefix wrapper\n * @csspart suffix - The suffix wrapper\n * @csspart helper-text - The helper text wrapper\n */\nexport default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {\n public static readonly tagName = 'igc-mask-input';\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcMaskInputComponent, IgcValidationContainerComponent);\n }\n\n //#region Internal attributes and properties\n\n protected override get __validators() {\n return maskValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: '',\n transformers: {\n setFormValue: (value) =>\n this._isRawMode ? value || null : this._maskedValue || null,\n },\n });\n\n protected get _isRawMode(): boolean {\n return this.valueMode === 'raw';\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * Dictates the behavior when retrieving the value of the control:\n *\n * - `raw` will return the clean user input.\n * - `withFormatting` will return the value with all literals and prompts.\n *\n * @attr value-mode\n * @default 'raw'\n */\n @property({ attribute: 'value-mode' })\n public valueMode: MaskInputValueMode = 'raw';\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n *\n * Regardless of the currently set `value-mode`, an empty value will return an empty string.\n *\n * @attr\n */\n @property()\n public set value(string: string) {\n const value = string ?? '';\n this._maskedValue = this._parser.apply(value);\n this._updateMaskedValue();\n this._formValue.setValueAndFormState(value);\n }\n\n public get value(): string {\n const value = this._formValue.value;\n\n if (this._isRawMode) {\n return value;\n }\n return value ? this._maskedValue : value;\n }\n\n /**\n * The masked pattern of the component.\n *\n * @attr\n * @default 'CCCCCCCCCC'\n */\n @property()\n public override set mask(value: string) {\n super.mask = value;\n if (this.value) {\n this._maskedValue = this._parser.apply(this._formValue.value);\n }\n }\n\n public override get mask(): string {\n return super.mask;\n }\n\n /**\n * The prompt symbol to use for unfilled parts of the mask pattern.\n *\n * @attr\n * @default '_'\n */\n @property()\n public override set prompt(value: string) {\n super.prompt = value;\n if (this.value) {\n this._maskedValue = this._parser.apply(this._formValue.value);\n }\n }\n\n public override get prompt(): string {\n return super.prompt;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleDragEnter(): void {\n if (!this._focused && !this._formValue.value) {\n this._maskedValue = this._parser.emptyMask;\n }\n }\n\n protected _handleDragLeave(): void {\n if (!this._focused) {\n this._updateMaskedValue();\n }\n }\n\n protected async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n if (!this._formValue.value) {\n // In case of empty value, select the whole mask\n this._maskedValue = this._parser.emptyMask;\n\n await this.updateComplete;\n this.select();\n }\n }\n\n protected override _handleBlur(): void {\n this._focused = false;\n this._updateMaskedValue();\n super._handleBlur();\n }\n\n protected _handleChange(): void {\n this._setTouchedState();\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n //#endregion\n\n //#region Internal methods\n\n protected override _restoreDefaultValue(): void {\n const value = this.defaultValue as string;\n\n this._maskedValue = this._parser.apply(value);\n this._updateMaskedValue();\n this._formValue.setValueAndFormState(value);\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n this._formValue.setValueAndFormState(this._parser.parse(this._maskedValue));\n this.requestUpdate();\n\n if (start !== this.mask.length) {\n this.emitEvent('igcInput', { detail: this.value });\n }\n\n await this.updateComplete;\n this.input.setSelectionRange(result.end, result.end);\n }\n\n protected override _updateSetRangeTextValue(): void {\n this.value = this._parser.parse(this._maskedValue);\n }\n\n private _updateMaskedValue(): void {\n if (this._maskedValue === this._parser.emptyMask) {\n this._maskedValue = '';\n }\n }\n\n //#endregion\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder ?? this._parser.escapedMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @dragenter=${this._handleDragEnter}\n @dragleave=${this._handleDragLeave}\n @dragstart=${this._setMaskSelection}\n @blur=${this._handleBlur}\n @focus=${this._handleFocus}\n @cut=${this._setMaskSelection}\n @change=${this._handleChange}\n @click=${this._handleClick}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @input=${this._handleInput}\n aria-describedby=${ifDefined(\n isEmpty(this._helperText) ? nothing : 'helper-text'\n )}\n @keydown=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-mask-input': IgcMaskInputComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mask-input.js","sourceRoot":"","sources":["../../../src/components/mask-input/mask-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport { bindIf } from '../common/util.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport type { MaskInputValueMode } from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from './mask-input-base.js';\nimport { maskValidators } from './validators.js';\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'value-missing',\n 'bad-input',\n 'custom-error',\n 'invalid'\n);\n\n/**\n * A masked input is an input field where a developer can control user input and format the visible value,\n * based on configurable rules\n *\n * @element igc-mask-input\n *\n * @slot prefix - Renders content before the input\n * @slot suffix - Renders content after the input\n * @slot helper-text - Renders content below the input\n * @slot value-missing - Renders content when the required validation fails.\n * @slot bad-input - Renders content when a required mask pattern validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control receives user input\n * @fires igcChange - Emitted when an alteration of the control's value is committed by the user\n *\n * @csspart container - The main wrapper that holds all main input elements\n * @csspart input - The native input element\n * @csspart label - The native label element\n * @csspart prefix - The prefix wrapper\n * @csspart suffix - The suffix wrapper\n * @csspart helper-text - The helper text wrapper\n */\nexport default class IgcMaskInputComponent extends IgcMaskInputBaseComponent {\n public static readonly tagName = 'igc-mask-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcMaskInputComponent, IgcValidationContainerComponent);\n }\n\n //#region Internal attributes and properties\n\n protected override get __validators() {\n return maskValidators;\n }\n\n protected override readonly _themes = addThemingController(this, all);\n\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: '',\n transformers: {\n setFormValue: (value) =>\n this._isRawMode ? value || null : this._maskedValue || null,\n },\n });\n\n protected get _isRawMode(): boolean {\n return this.valueMode === 'raw';\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * Dictates the behavior when retrieving the value of the control:\n *\n * - `raw`: Returns clean input (e.g. \"5551234567\")\n * - `withFormatting`: Returns with mask formatting (e.g. \"(555) 123-4567\")\n *\n * Empty values always return an empty string, regardless of the value mode.\n * @attr value-mode\n * @default 'raw'\n */\n @property({ attribute: 'value-mode' })\n public valueMode: MaskInputValueMode = 'raw';\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n *\n * Regardless of the currently set `value-mode`, an empty value will return an empty string.\n *\n * @attr\n */\n @property()\n public set value(string: string) {\n const value = string ?? '';\n this._maskedValue = this._parser.apply(value);\n this._updateMaskedValue();\n this._formValue.setValueAndFormState(value);\n }\n\n public get value(): string {\n const value = this._formValue.value;\n\n if (this._isRawMode) {\n return value;\n }\n return value ? this._maskedValue : value;\n }\n\n /**\n * The masked pattern of the component.\n *\n * @attr\n * @default 'CCCCCCCCCC'\n */\n @property()\n public override set mask(value: string) {\n super.mask = value;\n if (this.value) {\n this._maskedValue = this._parser.apply(this._formValue.value);\n }\n }\n\n public override get mask(): string {\n return super.mask;\n }\n\n /**\n * The prompt symbol to use for unfilled parts of the mask pattern.\n *\n * @attr\n * @default '_'\n */\n @property()\n public override set prompt(value: string) {\n super.prompt = value;\n if (this.value) {\n this._maskedValue = this._parser.apply(this._formValue.value);\n }\n }\n\n public override get prompt(): string {\n return super.prompt;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleDragEnter(): void {\n if (!this._focused && !this._formValue.value) {\n this._maskedValue = this._parser.emptyMask;\n }\n }\n\n protected _handleDragLeave(): void {\n if (!this._focused) {\n this._updateMaskedValue();\n }\n }\n\n protected async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n if (!this._formValue.value) {\n // In case of empty value, select the whole mask\n this._maskedValue = this._parser.emptyMask;\n\n await this.updateComplete;\n this.select();\n }\n }\n\n protected override _handleBlur(): void {\n this._focused = false;\n this._updateMaskedValue();\n super._handleBlur();\n }\n\n protected _handleChange(): void {\n this._setTouchedState();\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n //#endregion\n\n //#region Internal methods\n\n protected override _restoreDefaultValue(): void {\n const value = this.defaultValue as string;\n\n this._maskedValue = this._parser.apply(value);\n this._updateMaskedValue();\n this._formValue.setValueAndFormState(value);\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n this._formValue.setValueAndFormState(this._parser.parse(this._maskedValue));\n this.requestUpdate();\n\n if (start !== this.mask.length) {\n this.emitEvent('igcInput', { detail: this.value });\n }\n\n await this.updateComplete;\n this._input?.setSelectionRange(result.end, result.end);\n }\n\n protected override _updateSetRangeTextValue(): void {\n this.value = this._parser.parse(this._maskedValue);\n }\n\n private _updateMaskedValue(): void {\n if (this._maskedValue === this._parser.emptyMask) {\n this._maskedValue = '';\n }\n }\n\n //#endregion\n\n //#region Public methods\n\n /* blazorSuppress */\n /** Returns whether the current masked input is valid according to the mask pattern. */\n public isValidMaskPattern(): boolean {\n return this._parser.isValidString(this._maskedValue);\n }\n\n //#endregion\n\n protected override _renderInput() {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n const hasHelperText = this._slots.hasAssignedElements('helper-text');\n\n return html`\n <input\n id=${this._inputId}\n type=\"text\"\n part=${partMap(this._resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder ?? this._parser.escapedMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n ?autofocus=${this.autofocus}\n inputmode=${ifDefined(this.inputMode)}\n tabindex=${bindIf(hasNegativeTabIndex, -1)}\n aria-describedby=${bindIf(hasHelperText, 'helper-text')}\n @dragenter=${this._handleDragEnter}\n @dragleave=${this._handleDragLeave}\n @dragstart=${this._setMaskSelection}\n @blur=${this._handleBlur}\n @focus=${this._handleFocus}\n @cut=${this._setMaskSelection}\n @change=${this._handleChange}\n @click=${this._handleClick}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @input=${this._handleInput}\n @keydown=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-mask-input': IgcMaskInputComponent;\n }\n}\n"]}
|
|
@@ -8,12 +8,17 @@ interface MaskOptions {
|
|
|
8
8
|
* Use `'\'` to escape a flag character if it should be treated as a literal.
|
|
9
9
|
* @default 'CCCCCCCCCC'
|
|
10
10
|
*/
|
|
11
|
-
format
|
|
11
|
+
format?: string;
|
|
12
12
|
/**
|
|
13
13
|
* The character used to prompt for input in unfilled mask positions.
|
|
14
14
|
* Must be a single character.
|
|
15
15
|
* @default '_'
|
|
16
16
|
*/
|
|
17
|
+
promptCharacter?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Internal options with all required fields */
|
|
20
|
+
interface MaskOptionsInternal {
|
|
21
|
+
format: string;
|
|
17
22
|
promptCharacter: string;
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
@@ -29,18 +34,20 @@ type MaskReplaceResult = {
|
|
|
29
34
|
* It handles mask definitions, literals, character validation, and cursor positioning.
|
|
30
35
|
*/
|
|
31
36
|
export declare class MaskParser {
|
|
32
|
-
protected readonly _options:
|
|
37
|
+
protected readonly _options: MaskOptionsInternal;
|
|
33
38
|
/** Stores literal characters and their original positions in the mask (e.g., '(', ')', '-'). */
|
|
34
39
|
protected readonly _literals: Map<number, string>;
|
|
35
40
|
/** A Set of positions where literals occur in the `_escapedMask`. */
|
|
36
41
|
protected _literalPositions: Set<number>;
|
|
37
42
|
/** The mask format after processing escape characters */
|
|
38
43
|
protected _escapedMask: string;
|
|
44
|
+
/** Cached array of required non-literal positions for validation */
|
|
45
|
+
protected _requiredPositions: number[];
|
|
39
46
|
/**
|
|
40
47
|
* Returns a set of the all the literal positions in the mask.
|
|
41
48
|
* These positions are fixed characters that are not part of the input.
|
|
42
49
|
*/
|
|
43
|
-
get literalPositions():
|
|
50
|
+
get literalPositions(): ReadonlySet<number>;
|
|
44
51
|
/**
|
|
45
52
|
* Returns the escaped mask string.
|
|
46
53
|
* This is the mask after processing any escape sequences.
|
|
@@ -66,27 +73,29 @@ export declare class MaskParser {
|
|
|
66
73
|
get prompt(): string;
|
|
67
74
|
/**
|
|
68
75
|
* Sets the prompt character. Only the first character of the provided string is used.
|
|
76
|
+
* @remarks The prompt character cannot be a mask flag character.
|
|
69
77
|
*/
|
|
70
78
|
set prompt(value: string);
|
|
71
79
|
constructor(options?: MaskOptions);
|
|
80
|
+
private _isEscapedFlag;
|
|
72
81
|
/**
|
|
73
82
|
* Parses the mask format string to identify literal characters and
|
|
74
83
|
* create the escaped mask. This method is called whenever the mask format changes.
|
|
75
84
|
*/
|
|
76
85
|
protected _parseMaskLiterals(): void;
|
|
77
86
|
/**
|
|
78
|
-
*
|
|
87
|
+
* Computes an array of positions in the escaped mask that correspond to
|
|
79
88
|
* required input flags (e.g., '0', 'L') and are not literal characters.
|
|
80
89
|
*
|
|
81
90
|
* These positions must be filled for the masked string to be valid.
|
|
82
91
|
*/
|
|
83
|
-
protected
|
|
92
|
+
protected _computeRequiredPositions(): number[];
|
|
84
93
|
/**
|
|
85
94
|
* Finds the closest non-literal position in the mask *before* the given start position.
|
|
86
95
|
* Useful for backward navigation (e.g., backspace).
|
|
87
96
|
*
|
|
88
97
|
* @remarks
|
|
89
|
-
* If no non-literal is found before `start`, return
|
|
98
|
+
* If no non-literal is found before `start`, return 0.
|
|
90
99
|
*/
|
|
91
100
|
getPreviousNonLiteralPosition(start: number): number;
|
|
92
101
|
/**
|
|
@@ -94,12 +103,20 @@ export declare class MaskParser {
|
|
|
94
103
|
* Useful for forward navigation (e.g., arrow keys, delete key or initial cursor placement).
|
|
95
104
|
*
|
|
96
105
|
* @remarks
|
|
97
|
-
* If no non-literal is found after `start`, return
|
|
106
|
+
* If no non-literal is found after `start`, return the mask length.
|
|
98
107
|
*/
|
|
99
108
|
getNextNonLiteralPosition(start: number): number;
|
|
100
109
|
/**
|
|
101
110
|
* Replaces a segment of the masked string with new input, simulating typing or pasting.
|
|
102
111
|
* It handles clearing the selected range and inserting new characters according to the mask.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```ts
|
|
115
|
+
* const parser = new MaskParser({ format: '00/00/0000' });
|
|
116
|
+
* const current = '__/__/____';
|
|
117
|
+
* const result = parser.replace(current, '12', 0, 0);
|
|
118
|
+
* // result.value = '12/__/____', result.end = 2
|
|
119
|
+
* ```
|
|
103
120
|
*/
|
|
104
121
|
replace(maskString: string, value: string, start: number, end: number): MaskReplaceResult;
|
|
105
122
|
/**
|
|
@@ -116,6 +133,12 @@ export declare class MaskParser {
|
|
|
116
133
|
* Applies the mask format to an input string. This attempts to fit the input
|
|
117
134
|
* into the mask from left to right, filling valid positions and skipping invalid
|
|
118
135
|
* input characters.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* const parser = new MaskParser({ format: '00/00/0000' });
|
|
140
|
+
* parser.apply('12252023'); // Returns '12/25/2023'
|
|
141
|
+
* ```
|
|
119
142
|
*/
|
|
120
143
|
apply(input?: string): string;
|
|
121
144
|
}
|