igniteui-webcomponents 6.4.0-alpha.3 → 6.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 +90 -2
- package/LICENSE +18 -10
- 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/calendar.d.ts +5 -3
- package/components/calendar/calendar.js +22 -35
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +3 -3
- package/components/calendar/days-view/days-view.js +15 -22
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/months-view/months-view.d.ts +2 -3
- package/components/calendar/months-view/months-view.js +9 -19
- 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/carousel/carousel.d.ts +2 -1
- package/components/carousel/carousel.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/input.base.css.js +1 -1
- package/components/chat/themes/input.base.css.js.map +1 -1
- package/components/chat/themes/shared/chat.bootstrap.css.js +1 -1
- package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -1
- package/components/chat/themes/shared/chat.fluent.css.js +1 -1
- package/components/chat/themes/shared/chat.fluent.css.js.map +1 -1
- package/components/chat/themes/shared/chat.indigo.css.js +1 -1
- package/components/chat/themes/shared/chat.indigo.css.js.map +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/checkbox/checkbox.material.css.js +1 -1
- package/components/checkbox/themes/shared/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/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/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 +12 -9
- 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 +6 -2
- package/components/date-time-input/date-time-input.js +22 -15
- 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 +13 -0
- package/components/file-input/file-input.js +27 -2
- package/components/file-input/file-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.js +3 -2
- package/components/mask-input/mask-input-base.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 +2 -2
- 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/snackbar/themes/shared/snackbar.common.css.js +1 -1
- package/components/snackbar/themes/shared/snackbar.common.css.js.map +1 -1
- package/components/snackbar/themes/shared/snackbar.fluent.css.js +1 -1
- package/components/snackbar/themes/shared/snackbar.fluent.css.js.map +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.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/snackbar/themes/themes.js +2 -3
- package/components/snackbar/themes/themes.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/textarea/themes/textarea.base.css.js +1 -1
- package/components/textarea/themes/textarea.base.css.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 +706 -1056
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +2 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/package.json +10 -5
- 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/snackbar/themes/shared/snackbar.bootstrap.css.d.ts +0 -1
- package/components/snackbar/themes/shared/snackbar.bootstrap.css.js +0 -3
- package/components/snackbar/themes/shared/snackbar.bootstrap.css.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,10 +1,6 @@
|
|
|
1
1
|
import { createAbortHandle } from '../abort-handler.js';
|
|
2
2
|
class KeyboardFocusRingController {
|
|
3
|
-
static { this._events = [
|
|
4
|
-
'keyup',
|
|
5
|
-
'focusout',
|
|
6
|
-
'pointerdown',
|
|
7
|
-
]; }
|
|
3
|
+
static { this._events = ['keyup', 'focusout', 'pointerup']; }
|
|
8
4
|
get focused() {
|
|
9
5
|
return this._isKeyboardFocused;
|
|
10
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-ring.js","sourceRoot":"","sources":["../../../../src/components/common/controllers/focus-ring.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAmBxD,MAAM,2BAA2B;aACP,YAAO,GAAG
|
|
1
|
+
{"version":3,"file":"focus-ring.js","sourceRoot":"","sources":["../../../../src/components/common/controllers/focus-ring.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAmBxD,MAAM,2BAA2B;aACP,YAAO,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAU,AAA9C,CAA+C;IAS9E,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,YAAY,IAA0C;QAVrC,iBAAY,GAAG,iBAAiB,EAAE,CAAC;QAC5C,uBAAkB,GAAG,KAAK,CAAC;QAUjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAGM,aAAa;QAClB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,2BAA2B,CAAC,OAAO,EAAE,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAGM,gBAAgB;QACrB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAGM,WAAW,CAAC,KAAY;QAC7B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;;AAWH,MAAM,UAAU,oBAAoB,CAClC,IAA0C;IAE1C,OAAO,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { createAbortHandle } from '../abort-handler.js';\n\n/**\n * A controller class which determines whether a focus ring should be shown to indicate keyboard focus.\n * Focus rings are visible only when the user is interacting with a keyboard, not with a mouse, touch, or other input methods.\n *\n * By default the class attaches a keyup event handler on the component host and will update its keyboard focus\n * state based on it.\n *\n * **Important Note:** This controller is designed for use with **atomic web components** that represent single,\n * interactive elements (e.g., buttons, form fields, interactive icons). It helps these components correctly\n * display a focus indicator *only* when keyboard navigation is occurring, improving accessibility without\n * visual clutter during mouse or touch interactions.\n *\n * **Do not use this controller as a general-purpose shortcut for managing focus state in complex components or layouts.**\n * Misusing it in this way can lead to incorrect focus ring behavior, accessibility issues, and make your\n * application harder to maintain. For managing focus within larger, composite components, consider alternative\n * strategies like ARIA attributes, managing `tabindex`, or a bespoke implementation if needed.\n */\nclass KeyboardFocusRingController implements ReactiveController {\n private static readonly _events = ['keyup', 'focusout', 'pointerup'] as const;\n\n private readonly _host: ReactiveControllerHost & HTMLElement;\n private readonly _abortHandle = createAbortHandle();\n private _isKeyboardFocused = false;\n\n /**\n * Gets whether the current focus state is activated through a keyboard interaction.\n */\n public get focused(): boolean {\n return this._isKeyboardFocused;\n }\n\n constructor(host: ReactiveControllerHost & HTMLElement) {\n this._host = host;\n host.addController(this);\n }\n\n /** @internal */\n public hostConnected(): void {\n const { signal } = this._abortHandle;\n\n for (const event of KeyboardFocusRingController._events) {\n this._host.addEventListener(event, this, { passive: true, signal });\n }\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._abortHandle.abort();\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n this._isKeyboardFocused = event.type === 'keyup';\n this._host.requestUpdate();\n }\n}\n\nexport type { KeyboardFocusRingController };\n\n/**\n * Adds a {@link KeyboardFocusRingController} responsible for managing keyboard focus state.\n *\n * This utility function is intended for use with **atomic web components** that require\n * dynamic focus ring visibility based on keyboard interaction.\n */\nexport function addKeyboardFocusRing(\n host: ReactiveControllerHost & HTMLElement\n): KeyboardFocusRingController {\n return new KeyboardFocusRingController(host);\n}\n"]}
|
|
@@ -1,20 +1,35 @@
|
|
|
1
|
+
import { createAbortHandle } from '../abort-handler.js';
|
|
1
2
|
import { findElementFromEventPath, isEmpty } from '../util.js';
|
|
2
|
-
let
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
let ROOT_CLICK_LISTENER_ACTIVE = false;
|
|
4
|
+
const SHARED_ABORT_HANDLER = createAbortHandle();
|
|
5
|
+
const POINTER_DOWN_HOSTS = new Set();
|
|
6
|
+
const HOST_CONFIGURATIONS = new WeakMap();
|
|
7
|
+
const ACTIVE_HOSTS = new Set();
|
|
8
|
+
function getHostTargets(host, config) {
|
|
9
|
+
return new Set(config?.target ? [host, config.target] : [host]);
|
|
10
|
+
}
|
|
11
|
+
function handlePointerDown(event) {
|
|
12
|
+
POINTER_DOWN_HOSTS.clear();
|
|
13
|
+
for (const host of ACTIVE_HOSTS) {
|
|
14
|
+
const config = HOST_CONFIGURATIONS.get(host);
|
|
15
|
+
const targets = getHostTargets(host, config);
|
|
16
|
+
if (findElementFromEventPath((node) => targets.has(node), event)) {
|
|
17
|
+
POINTER_DOWN_HOSTS.add(host);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
5
21
|
function handleRootClick(event) {
|
|
6
|
-
for (const host of
|
|
7
|
-
|
|
8
|
-
if (host.keepOpenOnOutsideClick) {
|
|
22
|
+
for (const host of [...ACTIVE_HOSTS]) {
|
|
23
|
+
if (host.keepOpenOnOutsideClick || POINTER_DOWN_HOSTS.has(host)) {
|
|
9
24
|
continue;
|
|
10
25
|
}
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
: new Set([host]);
|
|
26
|
+
const config = HOST_CONFIGURATIONS.get(host);
|
|
27
|
+
const targets = getHostTargets(host, config);
|
|
14
28
|
if (!findElementFromEventPath((node) => targets.has(node), event)) {
|
|
15
29
|
config?.onHide ? config.onHide.call(host) : host.hide();
|
|
16
30
|
}
|
|
17
31
|
}
|
|
32
|
+
POINTER_DOWN_HOSTS.clear();
|
|
18
33
|
}
|
|
19
34
|
class RootClickController {
|
|
20
35
|
constructor(host, config) {
|
|
@@ -22,24 +37,34 @@ class RootClickController {
|
|
|
22
37
|
this._config = config;
|
|
23
38
|
this._host.addController(this);
|
|
24
39
|
if (this._config) {
|
|
25
|
-
|
|
40
|
+
HOST_CONFIGURATIONS.set(this._host, this._config);
|
|
26
41
|
}
|
|
27
42
|
}
|
|
28
43
|
_addActiveHost() {
|
|
29
|
-
|
|
44
|
+
ACTIVE_HOSTS.add(this._host);
|
|
30
45
|
if (this._config) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
46
|
+
HOST_CONFIGURATIONS.set(this._host, this._config);
|
|
47
|
+
}
|
|
48
|
+
if (!ROOT_CLICK_LISTENER_ACTIVE) {
|
|
49
|
+
const options = {
|
|
50
|
+
capture: true,
|
|
51
|
+
signal: SHARED_ABORT_HANDLER.signal,
|
|
52
|
+
};
|
|
53
|
+
document.addEventListener('pointerdown', handlePointerDown, {
|
|
54
|
+
...options,
|
|
55
|
+
passive: true,
|
|
56
|
+
});
|
|
57
|
+
document.addEventListener('click', handleRootClick, options);
|
|
58
|
+
ROOT_CLICK_LISTENER_ACTIVE = true;
|
|
36
59
|
}
|
|
37
60
|
}
|
|
38
61
|
_removeActiveHost() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
62
|
+
ACTIVE_HOSTS.delete(this._host);
|
|
63
|
+
HOST_CONFIGURATIONS.delete(this._host);
|
|
64
|
+
POINTER_DOWN_HOSTS.delete(this._host);
|
|
65
|
+
if (isEmpty(ACTIVE_HOSTS) && ROOT_CLICK_LISTENER_ACTIVE) {
|
|
66
|
+
SHARED_ABORT_HANDLER.abort();
|
|
67
|
+
ROOT_CLICK_LISTENER_ACTIVE = false;
|
|
43
68
|
}
|
|
44
69
|
}
|
|
45
70
|
_configureListeners() {
|
|
@@ -50,7 +75,7 @@ class RootClickController {
|
|
|
50
75
|
update(config) {
|
|
51
76
|
if (config) {
|
|
52
77
|
this._config = { ...this._config, ...config };
|
|
53
|
-
|
|
78
|
+
HOST_CONFIGURATIONS.set(this._host, this._config);
|
|
54
79
|
}
|
|
55
80
|
this._configureListeners();
|
|
56
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-click.js","sourceRoot":"","sources":["../../../../src/components/common/controllers/root-click.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAiC/D,IAAI,
|
|
1
|
+
{"version":3,"file":"root-click.js","sourceRoot":"","sources":["../../../../src/components/common/controllers/root-click.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { createAbortHandle } from '../abort-handler.js';\nimport { findElementFromEventPath, isEmpty } from '../util.js';\n\n/** Configuration options for the RootClickController */\ntype RootClickControllerConfig = {\n /**\n * An optional callback function to execute when an outside click occurs.\n * If not provided, the `hide()` method of the host will be called.\n */\n onHide?: () => void;\n /**\n * An optional additional HTMLElement that, if clicked, should not trigger the hide action.\n * This is useful for elements like a toggle button that opens the component.\n */\n target?: HTMLElement;\n};\n\n/** Interface for the host element that the RootClickController will be attached to. */\ninterface RootClickControllerHost extends ReactiveControllerHost, HTMLElement {\n /**\n * Indicates whether the host element is currently open or visible.\n */\n open: boolean;\n /**\n * If true, outside clicks will not trigger the hide action.\n */\n keepOpenOnOutsideClick?: boolean;\n /**\n * A method on the host to hide or close itself.\n * This will be called if `hideCallback` is not provided in the config.\n */\n hide(): void;\n}\n\nlet ROOT_CLICK_LISTENER_ACTIVE = false;\n\n/** Shared abort handler for the singleton document listeners. */\nconst SHARED_ABORT_HANDLER = createAbortHandle();\n\n/** Tracks which hosts had a pointerdown event inside them. */\nconst POINTER_DOWN_HOSTS = new Set<RootClickControllerHost>();\n\nconst HOST_CONFIGURATIONS = new WeakMap<\n RootClickControllerHost,\n RootClickControllerConfig\n>();\n\nconst ACTIVE_HOSTS = new Set<RootClickControllerHost>();\n\n/** Returns the set of elements that should be considered as \"inside\" the host. */\nfunction getHostTargets(\n host: RootClickControllerHost,\n config?: RootClickControllerConfig\n): Set<Element> {\n return new Set(config?.target ? [host, config.target] : [host]);\n}\n\nfunction handlePointerDown(event: PointerEvent): void {\n POINTER_DOWN_HOSTS.clear();\n\n for (const host of ACTIVE_HOSTS) {\n const config = HOST_CONFIGURATIONS.get(host);\n const targets = getHostTargets(host, config);\n\n if (findElementFromEventPath((node) => targets.has(node), event)) {\n POINTER_DOWN_HOSTS.add(host);\n }\n }\n}\n\nfunction handleRootClick(event: PointerEvent): void {\n for (const host of [...ACTIVE_HOSTS]) {\n if (host.keepOpenOnOutsideClick || POINTER_DOWN_HOSTS.has(host)) {\n continue;\n }\n\n const config = HOST_CONFIGURATIONS.get(host);\n const targets = getHostTargets(host, config);\n\n if (!findElementFromEventPath((node) => targets.has(node), event)) {\n config?.onHide ? config.onHide.call(host) : host.hide();\n }\n }\n\n POINTER_DOWN_HOSTS.clear();\n}\n\n/* blazorSuppress */\n/**\n * A Lit ReactiveController that manages global click listeners to hide a component\n * when a click occurs outside of the component or its specified target.\n *\n * This controller implements a singleton pattern for the document click listener,\n * meaning only one event listener is attached to `document` regardless of how many\n * instances of `RootClickController` are active. Each controller instance\n * subscribes to this single listener.\n */\nclass RootClickController implements ReactiveController {\n private readonly _host: RootClickControllerHost;\n private _config?: RootClickControllerConfig;\n\n constructor(\n host: RootClickControllerHost,\n config?: RootClickControllerConfig\n ) {\n this._host = host;\n this._config = config;\n this._host.addController(this);\n\n if (this._config) {\n HOST_CONFIGURATIONS.set(this._host, this._config);\n }\n }\n\n /**\n * Adds the host to the set of active hosts and ensures the global\n * document click listener is active if needed.\n */\n private _addActiveHost(): void {\n ACTIVE_HOSTS.add(this._host);\n\n if (this._config) {\n HOST_CONFIGURATIONS.set(this._host, this._config);\n }\n\n if (!ROOT_CLICK_LISTENER_ACTIVE) {\n const options: AddEventListenerOptions = {\n capture: true,\n signal: SHARED_ABORT_HANDLER.signal,\n };\n\n document.addEventListener('pointerdown', handlePointerDown, {\n ...options,\n passive: true,\n });\n document.addEventListener('click', handleRootClick, options);\n ROOT_CLICK_LISTENER_ACTIVE = true;\n }\n }\n\n /**\n * Removes the host from the set of active hosts and removes the global\n * document click listener if no other hosts are active.\n */\n private _removeActiveHost(): void {\n ACTIVE_HOSTS.delete(this._host);\n HOST_CONFIGURATIONS.delete(this._host);\n POINTER_DOWN_HOSTS.delete(this._host);\n\n if (isEmpty(ACTIVE_HOSTS) && ROOT_CLICK_LISTENER_ACTIVE) {\n SHARED_ABORT_HANDLER.abort();\n ROOT_CLICK_LISTENER_ACTIVE = false;\n }\n }\n\n /**\n * Configures the active state of the controller based on the host's `open` property.\n * If `host.open` is true, the controller becomes active; otherwise, it becomes inactive.\n */\n private _configureListeners(): void {\n this._host.open && !this._host.keepOpenOnOutsideClick\n ? this._addActiveHost()\n : this._removeActiveHost();\n }\n\n /** Updates the controller configuration and active state. */\n public update(config?: RootClickControllerConfig): void {\n if (config) {\n this._config = { ...this._config, ...config };\n HOST_CONFIGURATIONS.set(this._host, this._config);\n }\n\n this._configureListeners();\n }\n\n /** @internal */\n public hostConnected(): void {\n this._configureListeners();\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._removeActiveHost();\n }\n}\n\n/**\n * Creates and adds a {@link RootClickController} instance with a {@link RootClickControllerConfig | configuration}\n * to the given {@link RootClickControllerHost | host}.\n */\nexport function addRootClickController(\n host: RootClickControllerHost,\n config?: RootClickControllerConfig\n): RootClickController {\n return new RootClickController(host, config);\n}\n\nexport type { RootClickController };\n"]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { CalendarResourceStringsEN } from 'igniteui-i18n-core';
|
|
2
2
|
import { convertToIgcResource } from '../utils.js';
|
|
3
|
-
export const IgcCalendarResourceStringEN =
|
|
3
|
+
export const IgcCalendarResourceStringEN = {
|
|
4
|
+
...convertToIgcResource(CalendarResourceStringsEN),
|
|
5
|
+
...{ weekLabel: 'Wk' },
|
|
6
|
+
};
|
|
4
7
|
//# sourceMappingURL=calendar.resources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.resources.js","sourceRoot":"","sources":["../../../../../src/components/common/i18n/EN/calendar.resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"calendar.resources.js","sourceRoot":"","sources":["../../../../../src/components/common/i18n/EN/calendar.resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAuBnD,MAAM,CAAC,MAAM,2BAA2B,GAA+B;IACrE,GAAG,oBAAoB,CAAC,yBAAyB,CAAC;IAClD,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;CACvB,CAAC","sourcesContent":["import { CalendarResourceStringsEN } from 'igniteui-i18n-core';\nimport { convertToIgcResource } from '../utils.js';\n\n/* blazorSuppress */\nexport interface IgcCalendarResourceStrings {\n selectMonth: string;\n selectYear: string;\n selectDate: string;\n selectRange: string;\n selectedDate: string;\n startDate: string;\n endDate: string;\n previousMonth: string;\n nextMonth: string;\n previousYear: string;\n nextYear: string;\n previousYears: string;\n nextYears: string;\n weekLabel: string;\n}\n\n// Because weekLabel should be retrieved from the i18n formatter, but previously was present in resources.\n// Manually add it for now, as part of the default EN. When updating make sure to switch in source\n// the week start to be retrieved using a formatter instead of locale.\nexport const IgcCalendarResourceStringEN: IgcCalendarResourceStrings = {\n ...convertToIgcResource(CalendarResourceStringsEN),\n ...{ weekLabel: 'Wk' },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.resources.js","sourceRoot":"","sources":["../../../../../src/components/common/i18n/EN/date-range-picker.resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"date-range-picker.resources.js","sourceRoot":"","sources":["../../../../../src/components/common/i18n/EN/date-range-picker.resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AAajC,MAAM,CAAC,MAAM,mCAAmC,GAC9C;IACE,GAAG,oBAAoB,CAAC,gCAAgC,CAAC;IACzD,GAAG,2BAA2B;CAC/B,CAAC","sourcesContent":["import { DateRangePickerResourceStringsEN } from 'igniteui-i18n-core';\nimport { convertToIgcResource } from '../utils.js';\nimport {\n IgcCalendarResourceStringEN,\n type IgcCalendarResourceStrings,\n} from './calendar.resources.js';\n\n/* blazorSuppress */\nexport interface IgcDateRangePickerResourceStrings extends IgcCalendarResourceStrings {\n separator: string;\n done: string;\n cancel: string;\n last7Days: string;\n last30Days: string;\n currentMonth: string;\n yearToDate: string;\n}\n\nexport const IgcDateRangePickerResourceStringsEN: IgcDateRangePickerResourceStrings =\n {\n ...convertToIgcResource(DateRangePickerResourceStringsEN),\n ...IgcCalendarResourceStringEN,\n };\n"]}
|
|
@@ -57,13 +57,10 @@ class I18nController {
|
|
|
57
57
|
_getCurrentResourceStrings() {
|
|
58
58
|
const coreResourceStrings = getI18nManager().getCurrentResourceStrings(this.locale);
|
|
59
59
|
const resourceMap = this._getResourceMapForComponent();
|
|
60
|
-
if (!resourceMap) {
|
|
61
|
-
return coreResourceStrings;
|
|
62
|
-
}
|
|
63
60
|
const normalizedResourceStrings = {};
|
|
64
61
|
const defaultComponentKeys = Object.keys(this._defaultEN);
|
|
65
62
|
for (const igcKey of defaultComponentKeys) {
|
|
66
|
-
const coreKey = resourceMap
|
|
63
|
+
const coreKey = resourceMap?.get(igcKey);
|
|
67
64
|
let resolvedValue = this._defaultEN[igcKey];
|
|
68
65
|
if (coreKey) {
|
|
69
66
|
if (coreKey.includes('getWeekLabel')) {
|
|
@@ -71,13 +68,13 @@ class I18nController {
|
|
|
71
68
|
style: 'short',
|
|
72
69
|
});
|
|
73
70
|
}
|
|
74
|
-
else {
|
|
75
|
-
resolvedValue =
|
|
76
|
-
coreKey in coreResourceStrings
|
|
77
|
-
? coreResourceStrings[coreKey]
|
|
78
|
-
: this._defaultEN[igcKey];
|
|
71
|
+
else if (coreKey in coreResourceStrings) {
|
|
72
|
+
resolvedValue = coreResourceStrings[coreKey];
|
|
79
73
|
}
|
|
80
74
|
}
|
|
75
|
+
else if (igcKey in coreResourceStrings) {
|
|
76
|
+
resolvedValue = coreResourceStrings[igcKey];
|
|
77
|
+
}
|
|
81
78
|
normalizedResourceStrings[igcKey] = resolvedValue;
|
|
82
79
|
}
|
|
83
80
|
return normalizedResourceStrings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n-controller.js","sourceRoot":"","sources":["../../../../src/components/common/i18n/i18n-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,cAAc,GAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AA6BpB,MAAM,cAAc;IAmBlB,IAAW,MAAM,CAAC,KAAyB;QACzC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACjE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAOD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IAC1C,CAAC;IAMD,IAAW,eAAe,CAAC,KAAoB;QAC7C,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAGD,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,uBAAuB,CAAC;IAC/D,CAAC;IAMD,YAAY,IAAwB,EAAE,MAA+B;QACnE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEvD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACjE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAGM,aAAa;QAClB,cAAc,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAGM,gBAAgB;QACrB,cAAc,EAAE,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAGM,WAAW,CAAC,KAA4C;QAC7D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACjE,IAAI,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAOO,kBAAkB,CAAC,QAAW;QACpC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAMO,2BAA2B;QAGjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,2BAA2B,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IASO,0BAA0B;QAChC,MAAM,mBAAmB,GAAG,cAAc,EAAE,CAAC,yBAAyB,CACpE,IAAI,CAAC,MAAM,CACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n-controller.js","sourceRoot":"","sources":["../../../../src/components/common/i18n/i18n-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getCurrentI18n,\n getDisplayNamesFormatter,\n getI18nManager,\n type IResourceChangeEventArgs,\n type IResourceStrings,\n} from 'igniteui-i18n-core';\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport {\n calendarResourcesMap,\n convertToCoreResource,\n dateRangePickerResourcesMap,\n} from './utils.js';\n\n/**\n * Defines the structure for the host element that will use this controller.\n * The host must be a Lit element (ReactiveControllerHost) and an HTMLElement.\n */\ninterface I18nControllerHost extends ReactiveControllerHost, HTMLElement {\n // Properties the host is expected to have/use, though they are managed by the controller.\n resourceStrings?: unknown;\n locale?: string;\n}\n\ntype ResourceChangeCallback = (\n event: CustomEvent<IResourceChangeEventArgs>\n) => unknown;\n\n/** Configuration object for the I18nController. */\ntype I18nControllerConfig<T extends object> = {\n /** The full default English resource strings object for the component. */\n defaultEN: T;\n /** An optional callback to execute when the global locale changes. */\n onResourceChange?: ResourceChangeCallback;\n};\n\n/**\n * Manages localization (i18n) for a Lit web component.\n * It handles the current locale, component-specific resource overrides,\n * and updates when the global localization state changes.\n */\nclass I18nController<T extends object> implements ReactiveController {\n //#region Internal properties and state\n\n private readonly _host: I18nControllerHost;\n private readonly _defaultEN: T;\n\n private _resourceChangeCallback?: ResourceChangeCallback;\n private _defaultResourceStrings: T;\n private _locale?: string;\n private _resourceStrings?: T;\n\n //#endregion\n\n //#region Public properties\n\n /**\n * Sets a custom locale that overrides the global one for this host component instance.\n * Setting a new locale triggers an update of the resource strings.\n */\n public set locale(value: string | undefined) {\n if (this._locale !== value) {\n this._locale = value;\n this._defaultResourceStrings = this._getCurrentResourceStrings();\n this._host.requestUpdate();\n }\n }\n\n /**\n * Gets the resolved locale for the host component.\n * This is the component's custom locale if set, otherwise it falls back to the\n * global locale.\n */\n public get locale(): string {\n return this._locale ?? getCurrentI18n();\n }\n\n /**\n * Sets custom resource string for component with this controller.\n * Gets the resolved resource string for component.\n */\n public set resourceStrings(value: T | undefined) {\n if (this._resourceStrings !== value) {\n this._resourceStrings = value;\n this._host.requestUpdate();\n }\n }\n\n /** Get resolved resource strings for component */\n public get resourceStrings(): T {\n return this._resourceStrings ?? this._defaultResourceStrings;\n }\n\n //#endregion\n\n //#region Life-cycle hooks and event listener\n\n constructor(host: I18nControllerHost, config: I18nControllerConfig<T>) {\n this._host = host;\n this._defaultEN = config.defaultEN;\n this._resourceChangeCallback = config.onResourceChange;\n\n this._defaultResourceStrings = this._getCurrentResourceStrings();\n this._registerResources(this._defaultEN);\n\n this._host.addController(this);\n }\n\n /** @internal */\n public hostConnected(): void {\n getI18nManager().addEventListener('onResourceChange', this);\n }\n\n /** @internal */\n public hostDisconnected(): void {\n getI18nManager().removeEventListener('onResourceChange', this);\n }\n\n /** @internal */\n public handleEvent(event: CustomEvent<IResourceChangeEventArgs>): void {\n this._defaultResourceStrings = this._getCurrentResourceStrings();\n this._resourceChangeCallback?.(event);\n this._host.requestUpdate();\n }\n\n //#endregion\n\n //#region Internal API\n\n /** Registers the default English resources with the global i18n manager. */\n private _registerResources(resource: T): void {\n const convertedResource = convertToCoreResource(resource);\n const manager = getI18nManager();\n\n manager.registerI18n(convertedResource, manager.defaultLocale);\n }\n\n /**\n * Helper to find the correct resource map based on the component's default resources (`#defaultEN`).\n * This relies on structural checking (the component's key names).\n */\n private _getResourceMapForComponent():\n | Map<string, string | undefined>\n | undefined {\n const keys = Object.keys(this._defaultEN);\n\n if (keys.includes('last7Days')) {\n return dateRangePickerResourcesMap;\n }\n\n if (keys.includes('selectMonth')) {\n return calendarResourcesMap;\n }\n\n return undefined;\n }\n\n /**\n * Gets the current, locale-specific resource strings for the component.\n * The logic maps component keys (from defaultEN) to core library keys\n * and retrieves the localized string from the i18n manager.\n *\n * Result is truncated, containing only relevant locale strings.\n */\n private _getCurrentResourceStrings(): T {\n const coreResourceStrings = getI18nManager().getCurrentResourceStrings(\n this.locale\n );\n\n const resourceMap = this._getResourceMapForComponent();\n const normalizedResourceStrings: T = {} as T;\n const defaultComponentKeys = Object.keys(this._defaultEN) as (keyof T)[];\n\n for (const igcKey of defaultComponentKeys) {\n const coreKey = resourceMap?.get(igcKey as string);\n let resolvedValue: T[keyof T] = this._defaultEN[igcKey];\n\n if (coreKey) {\n if (coreKey.includes('getWeekLabel')) {\n // To be removed once the Calendar switches completely to the new i18n resources.\n resolvedValue = getDisplayNamesFormatter().getWeekLabel(this.locale, {\n style: 'short',\n }) as T[keyof T];\n } else if (coreKey in coreResourceStrings) {\n resolvedValue = coreResourceStrings[\n coreKey as keyof IResourceStrings\n ] as T[keyof T];\n }\n } else if (igcKey in coreResourceStrings) {\n // For a mix of old and core resources.\n // Only for internal default resources. Users shouldn't mix them.\n resolvedValue = coreResourceStrings[\n igcKey as keyof IResourceStrings\n ] as T[keyof T];\n }\n\n normalizedResourceStrings[igcKey] = resolvedValue;\n }\n\n return normalizedResourceStrings;\n }\n\n //#endregion\n}\n\n/** Factory function to create and attach the I18nController to a host. */\nexport function addI18nController<T extends object>(\n host: I18nControllerHost,\n config: I18nControllerConfig<T>\n): I18nController<T> {\n return new I18nController<T>(host, config);\n}\n\nexport type { I18nController };\n"]}
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
import type { IResourceStrings } from 'igniteui-i18n-core';
|
|
2
2
|
import type { IgcCalendarResourceStrings } from './EN/calendar.resources.js';
|
|
3
3
|
import type { IgcDateRangePickerResourceStrings } from './EN/date-range-picker.resources.js';
|
|
4
|
-
export declare const validationResourcesKeys: {
|
|
5
|
-
readonly minLength: "min_length_validation_error";
|
|
6
|
-
readonly maxLength: "max_length_validation_error";
|
|
7
|
-
readonly required: "required_validation_error";
|
|
8
|
-
readonly pattern: "pattern_validation_error";
|
|
9
|
-
readonly mask: "mask_validation_error";
|
|
10
|
-
readonly min: "min_validation_error";
|
|
11
|
-
readonly max: "max_validation_error";
|
|
12
|
-
readonly email: "email_validation_error";
|
|
13
|
-
readonly url: "url_validation_error";
|
|
14
|
-
readonly disabledDate: "disabled_date_validation_error";
|
|
15
|
-
};
|
|
16
4
|
export declare const calendarResourcesMap: Map<keyof IgcCalendarResourceStrings, string | undefined>;
|
|
17
5
|
export declare const dateRangePickerResourcesMap: Map<keyof IgcDateRangePickerResourceStrings, string | undefined>;
|
|
18
6
|
export declare function convertToIgcResource<T extends object>(resource: IResourceStrings): T;
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
import { isObject, isString } from '../util.js';
|
|
2
|
-
export const validationResourcesKeys = {
|
|
3
|
-
minLength: 'min_length_validation_error',
|
|
4
|
-
maxLength: 'max_length_validation_error',
|
|
5
|
-
required: 'required_validation_error',
|
|
6
|
-
pattern: 'pattern_validation_error',
|
|
7
|
-
mask: 'mask_validation_error',
|
|
8
|
-
min: 'min_validation_error',
|
|
9
|
-
max: 'max_validation_error',
|
|
10
|
-
email: 'email_validation_error',
|
|
11
|
-
url: 'url_validation_error',
|
|
12
|
-
disabledDate: 'disabled_date_validation_error',
|
|
13
|
-
};
|
|
14
2
|
export const calendarResourcesMap = new Map([
|
|
15
3
|
['selectMonth', 'calendar_select_month'],
|
|
16
4
|
['selectYear', 'calendar_select_year'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/common/i18n/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/common/i18n/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IResourceStrings } from 'igniteui-i18n-core';\nimport { isObject, isString } from '../util.js';\nimport type { IgcCalendarResourceStrings } from './EN/calendar.resources.js';\nimport type { IgcDateRangePickerResourceStrings } from './EN/date-range-picker.resources.js';\n\nexport const calendarResourcesMap = new Map<\n keyof IgcCalendarResourceStrings,\n string | undefined\n>([\n ['selectMonth', 'calendar_select_month'],\n ['selectYear', 'calendar_select_year'],\n ['selectDate', 'calendar_select_date'],\n ['selectRange', 'calendar_range_placeholder'],\n ['selectedDate', undefined], // This one seems not to be in use anyway\n ['startDate', 'calendar_range_label_start'],\n ['endDate', 'calendar_range_label_end'],\n ['previousMonth', 'calendar_previous_month'],\n ['nextMonth', 'calendar_next_month'],\n ['previousYear', 'calendar_previous_year'],\n ['nextYear', 'calendar_next_year'],\n ['previousYears', 'calendar_previous_years'],\n ['nextYears', 'calendar_next_years'],\n ['weekLabel', 'i18n/getWeekLabel'],\n]);\n\nexport const dateRangePickerResourcesMap = new Map<\n keyof IgcDateRangePickerResourceStrings,\n string | undefined\n>([\n ['separator', 'date_range_picker_date_separator'],\n ['done', 'date_range_picker_done_button'],\n ['cancel', 'date_range_picker_cancel_button'],\n ['last7Days', 'date_range_picker_last7Days'],\n ['last30Days', 'date_range_picker_last30Days'],\n ['currentMonth', 'date_range_picker_currentMonth'],\n ['yearToDate', 'date_range_picker_yearToDate'],\n ...(\n calendarResourcesMap as Map<\n keyof IgcDateRangePickerResourceStrings,\n string | undefined\n >\n ).entries(),\n]);\n\nfunction isCalendarResource(\n resource: unknown\n): resource is IgcCalendarResourceStrings {\n return (\n isObject(resource) &&\n 'selectMonth' in resource &&\n !isDateRangePickerResource(resource)\n );\n}\n\nfunction isDateRangePickerResource(\n resource: unknown\n): resource is IgcDateRangePickerResourceStrings {\n return isObject(resource) && 'last7Days' in resource;\n}\n\nfunction getResourceMap<T>(\n resource: T\n): Map<string, string | undefined> | undefined {\n if (isCalendarResource(resource)) {\n return calendarResourcesMap;\n }\n\n if (isDateRangePickerResource(resource)) {\n return dateRangePickerResourcesMap;\n }\n\n return undefined;\n}\n\nfunction getResourceMapForCore<T extends IResourceStrings>(\n resource: T\n): Map<string, string | undefined> | undefined {\n if ('date_range_picker_last7Days' in resource) {\n return dateRangePickerResourcesMap;\n }\n\n if ('calendar_select_month' in resource) {\n return calendarResourcesMap;\n }\n\n return undefined;\n}\n\nexport function convertToIgcResource<T extends object>(\n resource: IResourceStrings\n): T {\n const result = {} as T;\n const resourceMap = getResourceMapForCore(resource);\n\n if (!resourceMap) {\n return resource as T;\n }\n\n for (const [componentKey, coreKey] of resourceMap) {\n if (coreKey && coreKey in resource) {\n const coreValue = resource[coreKey as keyof IResourceStrings];\n\n if (isString(coreValue)) {\n result[componentKey as keyof T] = coreValue as T[keyof T];\n }\n }\n }\n\n return result;\n}\n\nexport function convertToCoreResource<T>(resource: T): IResourceStrings {\n const result: IResourceStrings = {};\n const resourceMap = getResourceMap(resource);\n\n if (resourceMap) {\n for (const [key, coreKey] of resourceMap) {\n if (coreKey) {\n const value = resource[key as keyof T];\n if (isString(value)) {\n result[coreKey as keyof IResourceStrings] = value;\n }\n }\n }\n } else {\n return resource as IResourceStrings;\n }\n\n return result;\n}\n"]}
|
|
@@ -4,10 +4,8 @@ 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 { ValidationResourceStringsEN, } from 'igniteui-i18n-core';
|
|
8
7
|
import { property } from 'lit/decorators.js';
|
|
9
8
|
import { addInternalsController } from '../../controllers/internals.js';
|
|
10
|
-
import { addI18nController } from '../../i18n/i18n-controller.js';
|
|
11
9
|
import { addSafeEventListener, isFunction, isString } from '../../util.js';
|
|
12
10
|
import { InternalInvalidEvent, InternalResetEvent, } from './types.js';
|
|
13
11
|
const INVALID_STATE = 'ig-invalid';
|
|
@@ -62,18 +60,9 @@ function BaseFormAssociated(base) {
|
|
|
62
60
|
get willValidate() {
|
|
63
61
|
return this.__internals.willValidate;
|
|
64
62
|
}
|
|
65
|
-
set resourceStrings(value) {
|
|
66
|
-
this.__i18nController.resourceStrings = value;
|
|
67
|
-
}
|
|
68
|
-
get resourceStrings() {
|
|
69
|
-
return this.__i18nController.resourceStrings;
|
|
70
|
-
}
|
|
71
63
|
constructor(...args) {
|
|
72
64
|
super(args);
|
|
73
65
|
this.__internals = addInternalsController(this);
|
|
74
|
-
this.__i18nController = addI18nController(this, {
|
|
75
|
-
defaultEN: ValidationResourceStringsEN,
|
|
76
|
-
});
|
|
77
66
|
this._isFormSubmit = false;
|
|
78
67
|
this._isInternalValidation = false;
|
|
79
68
|
this._touched = false;
|
|
@@ -118,15 +107,9 @@ function BaseFormAssociated(base) {
|
|
|
118
107
|
validity[validator.key] = !isValid;
|
|
119
108
|
if (!isValid) {
|
|
120
109
|
validationFailed = true;
|
|
121
|
-
|
|
122
|
-
? validator.
|
|
123
|
-
: validator.
|
|
124
|
-
message =
|
|
125
|
-
this.resourceStrings[resourceKey] ??
|
|
126
|
-
"Couldn't retrieve validation resource string!";
|
|
127
|
-
if (isFunction(validator.messageFormat)) {
|
|
128
|
-
message = validator.messageFormat(message, this);
|
|
129
|
-
}
|
|
110
|
+
message = isFunction(validator.message)
|
|
111
|
+
? validator.message(this)
|
|
112
|
+
: validator.message;
|
|
130
113
|
}
|
|
131
114
|
}
|
|
132
115
|
this._invalid = validationFailed;
|
|
@@ -220,9 +203,6 @@ function BaseFormAssociated(base) {
|
|
|
220
203
|
__decorate([
|
|
221
204
|
property({ type: Boolean })
|
|
222
205
|
], BaseFormAssociatedElement.prototype, "invalid", null);
|
|
223
|
-
__decorate([
|
|
224
|
-
property({ attribute: false })
|
|
225
|
-
], BaseFormAssociatedElement.prototype, "resourceStrings", null);
|
|
226
206
|
return BaseFormAssociatedElement;
|
|
227
207
|
}
|
|
228
208
|
export function FormAssociatedMixin(base) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"associated.js","sourceRoot":"","sources":["../../../../../src/components/common/mixins/forms/associated.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type IValidationResourceStrings,\n ValidationResourceStringsEN,\n} from 'igniteui-i18n-core';\nimport type { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { addInternalsController } from '../../controllers/internals.js';\nimport { addI18nController } from '../../i18n/i18n-controller.js';\nimport { addSafeEventListener, isFunction, isString } from '../../util.js';\nimport type { Validator } from '../../validators.js';\nimport type { Constructor } from '../constructor.js';\nimport type { FormValue } from './form-value.js';\nimport {\n type FormAssociatedCheckboxElementInterface,\n type FormAssociatedElementInterface,\n type FormRestoreMode,\n type FormValueType,\n InternalInvalidEvent,\n InternalResetEvent,\n} from './types.js';\n\nconst INVALID_STATE = 'ig-invalid';\n\nconst eventOptions = {\n bubbles: false,\n composed: false,\n};\n\nfunction emitFormInvalidEvent(host: LitElement): void {\n host.dispatchEvent(new CustomEvent(InternalInvalidEvent, eventOptions));\n}\n\nfunction emitFormResetEvent(host: LitElement): void {\n host.dispatchEvent(new CustomEvent(InternalResetEvent, eventOptions));\n}\n\nfunction BaseFormAssociated<T extends Constructor<LitElement>>(base: T) {\n class BaseFormAssociatedElement extends base {\n public static readonly formAssociated = true;\n\n //#region Internal state and properties\n\n private readonly __internals = addInternalsController(this);\n private readonly __i18nController =\n addI18nController<IValidationResourceStrings>(this, {\n defaultEN: ValidationResourceStringsEN,\n });\n protected readonly _formValue!: FormValue<unknown>;\n\n private _isFormSubmit = false;\n private _isInternalValidation = false;\n private _touched = false;\n private _isExternalInvalid = false;\n\n private get _hasUserInteraction(): boolean {\n return this._touched || this._isFormSubmit;\n }\n\n private get _shouldApplyStyles(): boolean {\n if (this._isExternalInvalid) {\n return true;\n }\n\n return (\n this._invalid && this._hasUserInteraction && !this._isInternalValidation\n );\n }\n\n protected _disabled = false;\n protected _invalid = false;\n protected _pristine = true;\n\n protected get __validators(): Validator[] {\n return [];\n }\n\n //#endregion\n\n //#region Public properties and attributes\n\n /**\n * The name attribute of the control.\n * @attr\n */\n @property({ reflect: true })\n public name!: string;\n\n /**\n * The disabled state of the component.\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public set disabled(value: boolean) {\n this._disabled = value;\n this.toggleAttribute('disabled', Boolean(this._disabled));\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Sets the control into invalid state (visual state only).\n * @attr\n * @default false\n */\n @property({ type: Boolean })\n public set invalid(value: boolean) {\n this._isExternalInvalid = value;\n this._setInvalidStyles();\n }\n\n public get invalid(): boolean {\n return this._isExternalInvalid || this._shouldApplyStyles;\n }\n\n /** Returns the HTMLFormElement associated with this element. */\n public get form(): HTMLFormElement | null {\n return this.__internals.form;\n }\n\n /**\n * Returns a ValidityState object which represents the different validity states\n * the element can be in, with respect to constraint validation.\n */\n public get validity(): ValidityState {\n return this.__internals.validity;\n }\n\n /** A string containing the validation message of this element. */\n public get validationMessage(): string {\n return this.__internals.validationMessage;\n }\n\n /**\n * A boolean value which returns true if the element is a submittable element\n * that is a candidate for constraint validation.\n */\n public get willValidate(): boolean {\n return this.__internals.willValidate;\n }\n\n /**\n * The resource strings for localization.\n */\n @property({ attribute: false })\n public set resourceStrings(value: IValidationResourceStrings) {\n this.__i18nController.resourceStrings = value;\n }\n\n public get resourceStrings(): IValidationResourceStrings {\n return this.__i18nController.resourceStrings;\n }\n //#endregion\n\n //#region Life-cycle hooks\n\n constructor(...args: any[]) {\n super(args);\n addSafeEventListener(this, 'invalid', this._handleInvalid);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this._pristine = true;\n this._touched = false;\n this._validate();\n }\n\n //#endregion\n\n //#region Form value and validation states\n\n private async _handleInvalid(event: Event): Promise<void> {\n event.preventDefault();\n this._invalid = true;\n\n if (this._isInternalValidation) {\n this._isInternalValidation = false;\n } else {\n this._isFormSubmit = true;\n emitFormInvalidEvent(this);\n }\n\n this._setInvalidStyles();\n this.requestUpdate();\n\n if (this._isFormSubmit) {\n await this.updateComplete;\n this._isFormSubmit = false;\n }\n }\n\n private _setInvalidStyles(): void {\n this.__internals.setState(INVALID_STATE, this._shouldApplyStyles);\n }\n\n private __runValidators() {\n const validity: ValidityStateFlags = {};\n let message = '';\n let validationFailed = false;\n\n for (const validator of this.__validators) {\n const isValid = validator.isValid(this);\n\n validity[validator.key] = !isValid;\n\n if (!isValid) {\n validationFailed = true;\n const resourceKey = (\n isFunction(validator.messageResourceKey)\n ? validator.messageResourceKey(this)\n : validator.messageResourceKey\n ) as keyof IValidationResourceStrings;\n\n message =\n this.resourceStrings[resourceKey] ??\n \"Couldn't retrieve validation resource string!\";\n if (isFunction(validator.messageFormat)) {\n message = validator.messageFormat(message, this);\n }\n }\n }\n\n this._invalid = validationFailed;\n\n return { validity, message };\n }\n\n /**\n * Executes the component validators and updates the internal validity state.\n */\n protected _validate(userMessage?: string): void {\n let { validity, message } = this.__runValidators();\n const hasCustomError = this.validity.customError;\n\n // valueMissing has precedence over the other validators aside from customError\n if (validity.valueMissing) {\n validity = {\n valueMissing: true,\n customError: hasCustomError,\n };\n }\n\n if (hasCustomError && userMessage === undefined) {\n // Internal validation cycle after the user has called setCustomValidity()\n // with some message. Keep the customError flag and the passed in message.\n validity.customError = true;\n message = this.validationMessage;\n } else if (hasCustomError && userMessage === '') {\n // setCustomValidity with an empty message.\n validity.customError = false;\n } else if (userMessage && userMessage !== '') {\n // setCustomValidity with a message.\n validity.customError = true;\n message = userMessage;\n }\n\n this.__internals.setValidity(validity, message);\n this._isInternalValidation = true;\n this._invalid = !this.__internals.checkValidity();\n }\n\n protected _handleBlur(): void {\n this._setTouchedState();\n this._validate();\n }\n\n protected _setTouchedState(): void {\n if (!this._touched) {\n this._touched = true;\n }\n }\n\n protected _setDefaultValue(current: string | null): void {\n this._formValue.defaultValue = current;\n }\n\n protected _restoreDefaultValue(): void {\n const value = this._formValue.value;\n this._formValue.setValueAndFormState(this._formValue.defaultValue);\n this.requestUpdate('value', value);\n }\n\n protected _setFormValue(value: FormValueType, state?: FormValueType): void {\n this._pristine = false;\n this.__internals.setFormValue(value, state);\n this._validate();\n this._setInvalidStyles();\n }\n\n //#region Form associated callback hooks\n\n protected formAssociatedCallback(_form: HTMLFormElement): void {}\n\n protected formDisabledCallback(state: boolean): void {\n this._disabled = state;\n this.requestUpdate();\n }\n\n protected formResetCallback(): void {\n this._restoreDefaultValue();\n this._pristine = true;\n this._touched = false;\n this._invalid = false;\n this._setInvalidStyles();\n emitFormResetEvent(this);\n }\n\n /* c8 ignore next 4 */\n protected formStateRestoreCallback(\n _state: FormValueType,\n _mode: FormRestoreMode\n ): void {}\n\n //#endregion\n\n //#region Public API\n\n /** Checks for validity of the control and shows the browser message if it invalid. */\n public reportValidity(): boolean {\n const state = this.__internals.reportValidity();\n this._invalid = !state;\n return state;\n }\n\n /** Checks for validity of the control and emits the invalid event if it invalid. */\n public checkValidity(): boolean {\n this._isInternalValidation = true;\n const state = this.__internals.checkValidity();\n this._invalid = !state;\n return state;\n }\n\n /**\n * Sets a custom validation message for the control.\n * As long as `message` is not empty, the control is considered invalid.\n */\n public setCustomValidity(message: string): void {\n this._validate(message);\n this._isInternalValidation = message === '';\n this._setInvalidStyles();\n this.requestUpdate();\n }\n\n //#endregion\n }\n return BaseFormAssociatedElement as Constructor<BaseFormAssociatedElement> &\n T;\n}\n\n/**\n * Mixes the passed in class and turns it into a form associated custom element.\n */\nexport function FormAssociatedMixin<T extends Constructor<LitElement>>(\n base: T\n) {\n class FormAssociatedElement extends BaseFormAssociated(base) {\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultValue(value: unknown) {\n this._formValue.defaultValue = value;\n\n if (this._pristine && 'value' in this) {\n this.value = this.defaultValue;\n this._pristine = true;\n this._validate();\n }\n }\n\n public get defaultValue(): unknown {\n return this._formValue.defaultValue;\n }\n\n public override attributeChangedCallback(\n name: string,\n prev: string | null,\n current: string | null\n ): void {\n super.attributeChangedCallback(name, prev, current);\n if (name === 'value') {\n this._setDefaultValue(current);\n }\n }\n }\n\n return FormAssociatedElement as unknown as Constructor<FormAssociatedElementInterface> &\n T;\n}\n\n/**\n * Mixes the passed in class and turns it into a form associated custom element.\n */\nexport function FormAssociatedCheckboxMixin<T extends Constructor<LitElement>>(\n base: T\n) {\n class FormAssociatedCheckboxElement extends BaseFormAssociated(base) {\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultChecked(value: boolean) {\n this._formValue.defaultValue = value;\n\n if (this._pristine && 'checked' in this) {\n this.checked = this.defaultChecked;\n this._pristine = true;\n this._validate();\n }\n }\n\n public get defaultChecked(): boolean {\n return this._formValue.defaultValue as boolean;\n }\n\n public override attributeChangedCallback(\n name: string,\n prev: string | null,\n current: string | null\n ): void {\n super.attributeChangedCallback(name, prev, current);\n if (name === 'checked') {\n this._setDefaultValue(isString(current) ? 'true' : null);\n }\n }\n }\n\n return FormAssociatedCheckboxElement as unknown as Constructor<FormAssociatedCheckboxElementInterface> &\n T;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"associated.js","sourceRoot":"","sources":["../../../../../src/components/common/mixins/forms/associated.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI3E,OAAO,EAKL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,aAAa,GAAG,YAAY,CAAC;AAEnC,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,SAAS,oBAAoB,CAAC,IAAgB;IAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CAAoC,IAAO;IACpE,MAAM,yBAA0B,SAAQ,IAAI;iBACnB,mBAAc,GAAG,IAAI,AAAP,CAAQ;QAY7C,IAAY,mBAAmB;YAC7B,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC;QAC7C,CAAC;QAED,IAAY,kBAAkB;YAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,CACL,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CACzE,CAAC;QACJ,CAAC;QAMD,IAAc,YAAY;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QAmBD,IAAW,QAAQ,CAAC,KAAc;YAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAW,QAAQ;YACjB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAQD,IAAW,OAAO,CAAC,KAAc;YAC/B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAED,IAAW,OAAO;YAChB,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC5D,CAAC;QAGD,IAAW,IAAI;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,CAAC;QAMD,IAAW,QAAQ;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC,CAAC;QAGD,IAAW,iBAAiB;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;QAC5C,CAAC;QAMD,IAAW,YAAY;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;QACvC,CAAC;QAKD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,IAAI,CAAC,CAAC;YArGG,gBAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAGpD,kBAAa,GAAG,KAAK,CAAC;YACtB,0BAAqB,GAAG,KAAK,CAAC;YAC9B,aAAQ,GAAG,KAAK,CAAC;YACjB,uBAAkB,GAAG,KAAK,CAAC;YAgBzB,cAAS,GAAG,KAAK,CAAC;YAClB,aAAQ,GAAG,KAAK,CAAC;YACjB,cAAS,GAAG,IAAI,CAAC;YA8EzB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7D,CAAC;QAGe,iBAAiB;YAC/B,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAMO,KAAK,CAAC,cAAc,CAAC,KAAY;YACvC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,cAAc,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC;QAEO,iBAAiB;YACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpE,CAAC;QAEO,eAAe;YACrB,MAAM,QAAQ,GAAuB,EAAE,CAAC;YACxC,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAExC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;gBAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,gBAAgB,GAAG,IAAI,CAAC;oBACxB,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;wBACrC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;wBACzB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YAEjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC/B,CAAC;QAKS,SAAS,CAAC,WAAoB;YACtC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACnD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAGjD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC1B,QAAQ,GAAG;oBACT,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,cAAc;iBAC5B,CAAC;YACJ,CAAC;YAED,IAAI,cAAc,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAGhD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,CAAC;iBAAM,IAAI,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBAEhD,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;YAC/B,CAAC;iBAAM,IAAI,WAAW,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBAE7C,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,OAAO,GAAG,WAAW,CAAC;YACxB,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACpD,CAAC;QAES,WAAW;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAES,gBAAgB;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QAES,gBAAgB,CAAC,OAAsB;YAC/C,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,OAAO,CAAC;QACzC,CAAC;QAES,oBAAoB;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QAES,aAAa,CAAC,KAAoB,EAAE,KAAqB;YACjE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAIS,sBAAsB,CAAC,KAAsB,IAAS,CAAC;QAEvD,oBAAoB,CAAC,KAAc;YAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QAES,iBAAiB;YACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAGS,wBAAwB,CAChC,MAAqB,EACrB,KAAsB,IACf,CAAC;QAOH,cAAc;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAGM,aAAa;YAClB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAMM,iBAAiB,CAAC,OAAe;YACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,qBAAqB,GAAG,OAAO,KAAK,EAAE,CAAC;YAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;;IA/OM;QADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2DACP;IAQrB;QADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6DAI1C;IAYD;QADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4DAI3B;IAyNH,OAAO,yBACJ,CAAC;AACN,CAAC;AAKD,MAAM,UAAU,mBAAmB,CACjC,IAAO;IAEP,MAAM,qBAAsB,SAAQ,kBAAkB,CAAC,IAAI,CAAC;QAG1D,IAAW,YAAY,CAAC,KAAc;YACpC,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;YAErC,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAW,YAAY;YACrB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACtC,CAAC;QAEe,wBAAwB,CACtC,IAAY,EACZ,IAAmB,EACnB,OAAsB;YAEtB,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;KACF;IAxBC;QADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;6DAS9B;IAkBH,OAAO,qBACJ,CAAC;AACN,CAAC;AAKD,MAAM,UAAU,2BAA2B,CACzC,IAAO;IAEP,MAAM,6BAA8B,SAAQ,kBAAkB,CAAC,IAAI,CAAC;QAGlE,IAAW,cAAc,CAAC,KAAc;YACtC,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;YAErC,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;gBACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAW,cAAc;YACvB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAuB,CAAC;QACjD,CAAC;QAEe,wBAAwB,CACtC,IAAY,EACZ,IAAmB,EACnB,OAAsB;YAEtB,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;KACF;IAxBC;QADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;uEAS9B;IAkBH,OAAO,6BACJ,CAAC;AACN,CAAC","sourcesContent":["import type { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { addInternalsController } from '../../controllers/internals.js';\nimport { addSafeEventListener, isFunction, isString } from '../../util.js';\nimport type { Validator } from '../../validators.js';\nimport type { Constructor } from '../constructor.js';\nimport type { FormValue } from './form-value.js';\nimport {\n type FormAssociatedCheckboxElementInterface,\n type FormAssociatedElementInterface,\n type FormRestoreMode,\n type FormValueType,\n InternalInvalidEvent,\n InternalResetEvent,\n} from './types.js';\n\nconst INVALID_STATE = 'ig-invalid';\n\nconst eventOptions = {\n bubbles: false,\n composed: false,\n};\n\nfunction emitFormInvalidEvent(host: LitElement): void {\n host.dispatchEvent(new CustomEvent(InternalInvalidEvent, eventOptions));\n}\n\nfunction emitFormResetEvent(host: LitElement): void {\n host.dispatchEvent(new CustomEvent(InternalResetEvent, eventOptions));\n}\n\nfunction BaseFormAssociated<T extends Constructor<LitElement>>(base: T) {\n class BaseFormAssociatedElement extends base {\n public static readonly formAssociated = true;\n\n //#region Internal state and properties\n\n private readonly __internals = addInternalsController(this);\n protected readonly _formValue!: FormValue<unknown>;\n\n private _isFormSubmit = false;\n private _isInternalValidation = false;\n private _touched = false;\n private _isExternalInvalid = false;\n\n private get _hasUserInteraction(): boolean {\n return this._touched || this._isFormSubmit;\n }\n\n private get _shouldApplyStyles(): boolean {\n if (this._isExternalInvalid) {\n return true;\n }\n\n return (\n this._invalid && this._hasUserInteraction && !this._isInternalValidation\n );\n }\n\n protected _disabled = false;\n protected _invalid = false;\n protected _pristine = true;\n\n protected get __validators(): Validator[] {\n return [];\n }\n\n //#endregion\n\n //#region Public properties and attributes\n\n /**\n * The name attribute of the control.\n * @attr\n */\n @property({ reflect: true })\n public name!: string;\n\n /**\n * The disabled state of the component.\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public set disabled(value: boolean) {\n this._disabled = value;\n this.toggleAttribute('disabled', Boolean(this._disabled));\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Sets the control into invalid state (visual state only).\n * @attr\n * @default false\n */\n @property({ type: Boolean })\n public set invalid(value: boolean) {\n this._isExternalInvalid = value;\n this._setInvalidStyles();\n }\n\n public get invalid(): boolean {\n return this._isExternalInvalid || this._shouldApplyStyles;\n }\n\n /** Returns the HTMLFormElement associated with this element. */\n public get form(): HTMLFormElement | null {\n return this.__internals.form;\n }\n\n /**\n * Returns a ValidityState object which represents the different validity states\n * the element can be in, with respect to constraint validation.\n */\n public get validity(): ValidityState {\n return this.__internals.validity;\n }\n\n /** A string containing the validation message of this element. */\n public get validationMessage(): string {\n return this.__internals.validationMessage;\n }\n\n /**\n * A boolean value which returns true if the element is a submittable element\n * that is a candidate for constraint validation.\n */\n public get willValidate(): boolean {\n return this.__internals.willValidate;\n }\n //#endregion\n\n //#region Life-cycle hooks\n\n constructor(...args: any[]) {\n super(args);\n addSafeEventListener(this, 'invalid', this._handleInvalid);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this._pristine = true;\n this._touched = false;\n this._validate();\n }\n\n //#endregion\n\n //#region Form value and validation states\n\n private async _handleInvalid(event: Event): Promise<void> {\n event.preventDefault();\n this._invalid = true;\n\n if (this._isInternalValidation) {\n this._isInternalValidation = false;\n } else {\n this._isFormSubmit = true;\n emitFormInvalidEvent(this);\n }\n\n this._setInvalidStyles();\n this.requestUpdate();\n\n if (this._isFormSubmit) {\n await this.updateComplete;\n this._isFormSubmit = false;\n }\n }\n\n private _setInvalidStyles(): void {\n this.__internals.setState(INVALID_STATE, this._shouldApplyStyles);\n }\n\n private __runValidators() {\n const validity: ValidityStateFlags = {};\n let message = '';\n let validationFailed = false;\n\n for (const validator of this.__validators) {\n const isValid = validator.isValid(this);\n\n validity[validator.key] = !isValid;\n\n if (!isValid) {\n validationFailed = true;\n message = isFunction(validator.message)\n ? validator.message(this)\n : validator.message;\n }\n }\n\n this._invalid = validationFailed;\n\n return { validity, message };\n }\n\n /**\n * Executes the component validators and updates the internal validity state.\n */\n protected _validate(userMessage?: string): void {\n let { validity, message } = this.__runValidators();\n const hasCustomError = this.validity.customError;\n\n // valueMissing has precedence over the other validators aside from customError\n if (validity.valueMissing) {\n validity = {\n valueMissing: true,\n customError: hasCustomError,\n };\n }\n\n if (hasCustomError && userMessage === undefined) {\n // Internal validation cycle after the user has called setCustomValidity()\n // with some message. Keep the customError flag and the passed in message.\n validity.customError = true;\n message = this.validationMessage;\n } else if (hasCustomError && userMessage === '') {\n // setCustomValidity with an empty message.\n validity.customError = false;\n } else if (userMessage && userMessage !== '') {\n // setCustomValidity with a message.\n validity.customError = true;\n message = userMessage;\n }\n\n this.__internals.setValidity(validity, message);\n this._isInternalValidation = true;\n this._invalid = !this.__internals.checkValidity();\n }\n\n protected _handleBlur(): void {\n this._setTouchedState();\n this._validate();\n }\n\n protected _setTouchedState(): void {\n if (!this._touched) {\n this._touched = true;\n }\n }\n\n protected _setDefaultValue(current: string | null): void {\n this._formValue.defaultValue = current;\n }\n\n protected _restoreDefaultValue(): void {\n const value = this._formValue.value;\n this._formValue.setValueAndFormState(this._formValue.defaultValue);\n this.requestUpdate('value', value);\n }\n\n protected _setFormValue(value: FormValueType, state?: FormValueType): void {\n this._pristine = false;\n this.__internals.setFormValue(value, state);\n this._validate();\n this._setInvalidStyles();\n }\n\n //#region Form associated callback hooks\n\n protected formAssociatedCallback(_form: HTMLFormElement): void {}\n\n protected formDisabledCallback(state: boolean): void {\n this._disabled = state;\n this.requestUpdate();\n }\n\n protected formResetCallback(): void {\n this._restoreDefaultValue();\n this._pristine = true;\n this._touched = false;\n this._invalid = false;\n this._setInvalidStyles();\n emitFormResetEvent(this);\n }\n\n /* c8 ignore next 4 */\n protected formStateRestoreCallback(\n _state: FormValueType,\n _mode: FormRestoreMode\n ): void {}\n\n //#endregion\n\n //#region Public API\n\n /** Checks for validity of the control and shows the browser message if it invalid. */\n public reportValidity(): boolean {\n const state = this.__internals.reportValidity();\n this._invalid = !state;\n return state;\n }\n\n /** Checks for validity of the control and emits the invalid event if it invalid. */\n public checkValidity(): boolean {\n this._isInternalValidation = true;\n const state = this.__internals.checkValidity();\n this._invalid = !state;\n return state;\n }\n\n /**\n * Sets a custom validation message for the control.\n * As long as `message` is not empty, the control is considered invalid.\n */\n public setCustomValidity(message: string): void {\n this._validate(message);\n this._isInternalValidation = message === '';\n this._setInvalidStyles();\n this.requestUpdate();\n }\n\n //#endregion\n }\n return BaseFormAssociatedElement as Constructor<BaseFormAssociatedElement> &\n T;\n}\n\n/**\n * Mixes the passed in class and turns it into a form associated custom element.\n */\nexport function FormAssociatedMixin<T extends Constructor<LitElement>>(\n base: T\n) {\n class FormAssociatedElement extends BaseFormAssociated(base) {\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultValue(value: unknown) {\n this._formValue.defaultValue = value;\n\n if (this._pristine && 'value' in this) {\n this.value = this.defaultValue;\n this._pristine = true;\n this._validate();\n }\n }\n\n public get defaultValue(): unknown {\n return this._formValue.defaultValue;\n }\n\n public override attributeChangedCallback(\n name: string,\n prev: string | null,\n current: string | null\n ): void {\n super.attributeChangedCallback(name, prev, current);\n if (name === 'value') {\n this._setDefaultValue(current);\n }\n }\n }\n\n return FormAssociatedElement as unknown as Constructor<FormAssociatedElementInterface> &\n T;\n}\n\n/**\n * Mixes the passed in class and turns it into a form associated custom element.\n */\nexport function FormAssociatedCheckboxMixin<T extends Constructor<LitElement>>(\n base: T\n) {\n class FormAssociatedCheckboxElement extends BaseFormAssociated(base) {\n /* blazorCSSuppress */\n @property({ attribute: false })\n public set defaultChecked(value: boolean) {\n this._formValue.defaultValue = value;\n\n if (this._pristine && 'checked' in this) {\n this.checked = this.defaultChecked;\n this._pristine = true;\n this._validate();\n }\n }\n\n public get defaultChecked(): boolean {\n return this._formValue.defaultValue as boolean;\n }\n\n public override attributeChangedCallback(\n name: string,\n prev: string | null,\n current: string | null\n ): void {\n super.attributeChangedCallback(name, prev, current);\n if (name === 'checked') {\n this._setDefaultValue(isString(current) ? 'true' : null);\n }\n }\n }\n\n return FormAssociatedCheckboxElement as unknown as Constructor<FormAssociatedCheckboxElementInterface> &\n T;\n}\n"]}
|
|
@@ -109,6 +109,11 @@ export declare function getCenterPoint(element: Element): {
|
|
|
109
109
|
x: number;
|
|
110
110
|
y: number;
|
|
111
111
|
};
|
|
112
|
+
/** Returns the scale factor of a given element based on its bounding client rect and offset dimensions. */
|
|
113
|
+
export declare function getScaleFactor(element: HTMLElement): {
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
};
|
|
112
117
|
export declare function roundByDPR(value: number): number;
|
|
113
118
|
export declare function scrollIntoView(element?: HTMLElement, config?: ScrollIntoViewOptions): void;
|
|
114
119
|
export declare function isRegExp(value: unknown): value is RegExp;
|
|
@@ -187,6 +187,11 @@ export function getCenterPoint(element) {
|
|
|
187
187
|
y: top + height * 0.5,
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
|
+
export function getScaleFactor(element) {
|
|
191
|
+
const { offsetWidth, offsetHeight } = element;
|
|
192
|
+
const { width, height } = element.getBoundingClientRect();
|
|
193
|
+
return { x: offsetWidth / width || 1, y: offsetHeight / height || 1 };
|
|
194
|
+
}
|
|
190
195
|
export function roundByDPR(value) {
|
|
191
196
|
const dpr = globalThis.devicePixelRatio || 1;
|
|
192
197
|
return Math.round(value * dpr) / dpr;
|