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
|
@@ -4,6 +4,7 @@ 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 { getDateFormatter } from 'igniteui-i18n-core';
|
|
7
8
|
import { html } from 'lit';
|
|
8
9
|
import { eventOptions, property } from 'lit/decorators.js';
|
|
9
10
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
@@ -62,6 +63,12 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
62
63
|
get max() {
|
|
63
64
|
return this._max;
|
|
64
65
|
}
|
|
66
|
+
set displayFormat(value) {
|
|
67
|
+
this._displayFormat = value;
|
|
68
|
+
}
|
|
69
|
+
get displayFormat() {
|
|
70
|
+
return (this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat);
|
|
71
|
+
}
|
|
65
72
|
set locale(value) {
|
|
66
73
|
this._i18nController.locale = value;
|
|
67
74
|
}
|
|
@@ -69,6 +76,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
69
76
|
return this._i18nController.locale;
|
|
70
77
|
}
|
|
71
78
|
setDefaultMask() {
|
|
79
|
+
this.updateDefaultDisplayFormat();
|
|
72
80
|
if (!this._inputFormat) {
|
|
73
81
|
this.updateDefaultMask();
|
|
74
82
|
this.setMask(this._defaultMask);
|
|
@@ -78,20 +86,21 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
78
86
|
}
|
|
79
87
|
}
|
|
80
88
|
setDisplayFormat() {
|
|
89
|
+
this.updateDefaultDisplayFormat();
|
|
81
90
|
if (this.value) {
|
|
82
91
|
this.updateMask();
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
94
|
get hasDateParts() {
|
|
86
95
|
const parts = this._inputDateParts ||
|
|
87
|
-
DateTimeUtil.parseDateTimeFormat(this.inputFormat);
|
|
96
|
+
DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);
|
|
88
97
|
return parts.some((p) => p.type === DateParts.Date ||
|
|
89
98
|
p.type === DateParts.Month ||
|
|
90
99
|
p.type === DateParts.Year);
|
|
91
100
|
}
|
|
92
101
|
get hasTimeParts() {
|
|
93
102
|
const parts = this._inputDateParts ||
|
|
94
|
-
DateTimeUtil.parseDateTimeFormat(this.inputFormat);
|
|
103
|
+
DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);
|
|
95
104
|
return parts.some((p) => p.type === DateParts.Hours ||
|
|
96
105
|
p.type === DateParts.Minutes ||
|
|
97
106
|
p.type === DateParts.Seconds);
|
|
@@ -128,6 +137,9 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
128
137
|
});
|
|
129
138
|
this._i18nController = addI18nController(this, {
|
|
130
139
|
defaultEN: {},
|
|
140
|
+
onResourceChange: () => {
|
|
141
|
+
this.setDefaultMask();
|
|
142
|
+
},
|
|
131
143
|
});
|
|
132
144
|
this._oldValue = null;
|
|
133
145
|
this._min = null;
|
|
@@ -154,6 +166,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
154
166
|
connectedCallback() {
|
|
155
167
|
super.connectedCallback();
|
|
156
168
|
this.updateDefaultMask();
|
|
169
|
+
this.updateDefaultDisplayFormat();
|
|
157
170
|
this.setMask(this.inputFormat);
|
|
158
171
|
if (this.value) {
|
|
159
172
|
this.updateMask();
|
|
@@ -196,16 +209,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
196
209
|
this._maskedValue = '';
|
|
197
210
|
return;
|
|
198
211
|
}
|
|
199
|
-
|
|
200
|
-
if (this.displayFormat) {
|
|
201
|
-
this._maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format, true);
|
|
202
|
-
}
|
|
203
|
-
else if (this.inputFormat) {
|
|
204
|
-
this._maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
this._maskedValue = this.value.toLocaleString();
|
|
208
|
-
}
|
|
212
|
+
this._maskedValue = DateTimeUtil.formatDisplayDate(this.value, this.locale, this.displayFormat);
|
|
209
213
|
}
|
|
210
214
|
}
|
|
211
215
|
_fireInputEvent() {
|
|
@@ -287,11 +291,14 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
|
|
|
287
291
|
this.setSelectionRange(start, end);
|
|
288
292
|
}
|
|
289
293
|
updateDefaultMask() {
|
|
290
|
-
this._defaultMask = DateTimeUtil.
|
|
294
|
+
this._defaultMask = DateTimeUtil.getDefaultInputMask(this.locale);
|
|
295
|
+
}
|
|
296
|
+
updateDefaultDisplayFormat() {
|
|
297
|
+
this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(this.locale);
|
|
291
298
|
}
|
|
292
299
|
setMask(string) {
|
|
293
300
|
const oldFormat = this._inputDateParts?.map((p) => p.format).join('');
|
|
294
|
-
this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);
|
|
301
|
+
this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string, this.locale, true);
|
|
295
302
|
const value = this._inputDateParts.map((p) => p.format).join('');
|
|
296
303
|
this._defaultMask = value;
|
|
297
304
|
const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(new RegExp(/(?=[^t])[\w]/, 'g'), '0');
|
|
@@ -434,7 +441,7 @@ __decorate([
|
|
|
434
441
|
], IgcDateTimeInputComponent.prototype, "max", null);
|
|
435
442
|
__decorate([
|
|
436
443
|
property({ attribute: 'display-format' })
|
|
437
|
-
], IgcDateTimeInputComponent.prototype, "displayFormat",
|
|
444
|
+
], IgcDateTimeInputComponent.prototype, "displayFormat", null);
|
|
438
445
|
__decorate([
|
|
439
446
|
property({ attribute: false })
|
|
440
447
|
], IgcDateTimeInputComponent.prototype, "spinDelta", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { addI18nController } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap\n extends Omit<IgcInputComponentEventMap, 'igcChange'> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n private readonly _i18nController = addI18nController<object>(this, {\n defaultEN: {},\n });\n\n protected _defaultMask!: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the input format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public displayFormat!: string;\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale() {\n return this._i18nController.locale;\n }\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n if (this.value) {\n this.updateMask();\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this._focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this._inputSelection.start &&\n this._inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.setMask(this.inputFormat);\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this._fireInputEvent();\n }\n\n protected updateMask() {\n if (this._focused) {\n this._maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this._maskedValue = '';\n return;\n }\n\n const format = this.displayFormat || this.inputFormat;\n\n if (this.displayFormat) {\n this._maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format,\n true\n );\n } else if (this.inputFormat) {\n this._maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format\n );\n } else {\n this._maskedValue = this.value.toLocaleString();\n }\n }\n }\n\n private _fireInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this._focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this._focused) {\n this._maskedValue = this.getMaskedValue();\n }\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (start !== this.inputFormat.length) {\n this._fireInputEvent();\n }\n\n await this.updateComplete;\n this.input.setSelectionRange(result.end, result.end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this._maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this._focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._fireInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this.mask = newMask.includes('tt') ? newMask.replace(/tt/g, 'LL') : newMask;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this._parser.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this._parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n if (this.readOnly) {\n return '';\n }\n\n return this._maskedValue === '' ? mask : this._maskedValue;\n }\n\n private isComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this._maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this._maskSelection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this._maskedValue === this._parser.emptyMask;\n\n this._focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this._maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._fireInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder || this._parser.emptyMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this._handleInput}\n @wheel=${this.onWheel}\n @keydown=${this._setMaskSelection}\n @click=${this._handleClick}\n @cut=${this._setMaskSelection}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { addI18nController } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap extends Omit<\n IgcInputComponentEventMap,\n 'igcChange'\n> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n private readonly _i18nController = addI18nController<object>(this, {\n defaultEN: {},\n onResourceChange: () => {\n this.setDefaultMask();\n },\n });\n\n protected _defaultMask!: string;\n private _defaultDisplayFormat!: string;\n private _displayFormat?: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the locale format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public set displayFormat(value: string) {\n this._displayFormat = value;\n }\n\n public get displayFormat(): string {\n return (\n this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat\n );\n }\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale() {\n return this._i18nController.locale;\n }\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n this.updateDefaultDisplayFormat();\n\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n this.updateDefaultDisplayFormat();\n if (this.value) {\n this.updateMask();\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this._focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this._inputSelection.start &&\n this._inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.updateDefaultDisplayFormat();\n this.setMask(this.inputFormat);\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this._fireInputEvent();\n }\n\n protected updateMask() {\n if (this._focused) {\n this._maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this._maskedValue = '';\n return;\n }\n\n this._maskedValue = DateTimeUtil.formatDisplayDate(\n this.value,\n this.locale,\n this.displayFormat\n );\n }\n }\n\n private _fireInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this._focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this._focused) {\n this._maskedValue = this.getMaskedValue();\n }\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (start !== this.inputFormat.length) {\n this._fireInputEvent();\n }\n\n await this.updateComplete;\n this.input.setSelectionRange(result.end, result.end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this._maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this._focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._fireInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultInputMask(this.locale);\n }\n\n private updateDefaultDisplayFormat(): void {\n this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(\n this.locale\n );\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(\n string,\n this.locale,\n true\n );\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this.mask = newMask.includes('tt') ? newMask.replace(/tt/g, 'LL') : newMask;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this._parser.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this._parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n if (this.readOnly) {\n return '';\n }\n\n return this._maskedValue === '' ? mask : this._maskedValue;\n }\n\n private isComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this._maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this._maskSelection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this._maskedValue === this._parser.emptyMask;\n\n this._focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this._maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._fireInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder || this._parser.emptyMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this._handleInput}\n @wheel=${this.onWheel}\n @keydown=${this._setMaskSelection}\n @click=${this._handleClick}\n @cut=${this._setMaskSelection}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
|
|
@@ -40,15 +40,21 @@ export interface DatePartDeltas {
|
|
|
40
40
|
export declare abstract class DateTimeUtil {
|
|
41
41
|
static readonly DEFAULT_INPUT_FORMAT = "MM/dd/yyyy";
|
|
42
42
|
static readonly DEFAULT_TIME_INPUT_FORMAT = "hh:mm tt";
|
|
43
|
-
private static readonly SEPARATOR;
|
|
44
|
-
private static readonly DEFAULT_LOCALE;
|
|
45
43
|
private static readonly PREDEFINED_FORMATS;
|
|
46
44
|
static parseValueFromMask(inputData: string, dateTimeParts: DatePartInfo[], promptChar?: string): Date | null;
|
|
47
|
-
static
|
|
48
|
-
static parseDateTimeFormat(mask: string, locale
|
|
45
|
+
static getDefaultInputMask(locale: string): string;
|
|
46
|
+
static parseDateTimeFormat(mask: string, locale: string, leadingZero?: boolean): DatePartInfo[];
|
|
49
47
|
static parseIsoDate(value: string): Date | null;
|
|
50
48
|
static isValidDate(value: any): value is Date;
|
|
51
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Format date for display.
|
|
51
|
+
* @param value Date value
|
|
52
|
+
* @param locale Locale of the component
|
|
53
|
+
* @param displayFormat Display format specified by the user. Can be undefined.
|
|
54
|
+
* @param inputFormat Input format, so it is not calculated again and used for leading zero format.
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
static formatDisplayDate(value: Date, locale: string, displayFormat: string | undefined): string;
|
|
52
58
|
static getPartValue(datePartInfo: DatePartInfo, partLength: number, _dateValue: Date | null): string;
|
|
53
59
|
private static _spinTimePart;
|
|
54
60
|
static spinYear(delta: number, newDate: Date): Date;
|
|
@@ -81,13 +87,9 @@ export declare abstract class DateTimeUtil {
|
|
|
81
87
|
* @param format The format to check and transform
|
|
82
88
|
*/
|
|
83
89
|
static predefinedToDateDisplayFormat(format?: string): string | undefined;
|
|
84
|
-
private static setDisplayFormatOptions;
|
|
85
|
-
private static getMask;
|
|
86
90
|
private static addCurrentPart;
|
|
87
91
|
private static ensureLeadingZero;
|
|
88
92
|
private static determineDatePart;
|
|
89
|
-
private static getDefaultLocaleMask;
|
|
90
|
-
private static fillDatePartsPositions;
|
|
91
93
|
private static getCleanVal;
|
|
92
94
|
private static escapeRegExp;
|
|
93
95
|
private static trimEmptyPlaceholders;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getDateFormatter } from 'igniteui-i18n-core';
|
|
1
2
|
import { parseISODate } from '../calendar/helpers.js';
|
|
2
3
|
import { clamp } from '../common/util.js';
|
|
3
4
|
export var FormatDesc;
|
|
@@ -33,8 +34,6 @@ function isDate(value) {
|
|
|
33
34
|
export class DateTimeUtil {
|
|
34
35
|
static { this.DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy'; }
|
|
35
36
|
static { this.DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt'; }
|
|
36
|
-
static { this.SEPARATOR = 'literal'; }
|
|
37
|
-
static { this.DEFAULT_LOCALE = 'en'; }
|
|
38
37
|
static { this.PREDEFINED_FORMATS = new Set([
|
|
39
38
|
'short',
|
|
40
39
|
'medium',
|
|
@@ -78,20 +77,11 @@ export class DateTimeUtil {
|
|
|
78
77
|
}
|
|
79
78
|
return new Date(parts[DateParts.Year] || 2000, parts[DateParts.Month] || 0, parts[DateParts.Date] || 1, parts[DateParts.Hours] || 0, parts[DateParts.Minutes] || 0, parts[DateParts.Seconds] || 0);
|
|
80
79
|
}
|
|
81
|
-
static
|
|
82
|
-
|
|
83
|
-
if (parts !== undefined) {
|
|
84
|
-
parts.forEach((p) => {
|
|
85
|
-
if (p.type !== DateParts.Year && p.type !== DateTimeUtil.SEPARATOR) {
|
|
86
|
-
p.formatType = FormatDesc.TwoDigits;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return DateTimeUtil.getMask(parts);
|
|
90
|
-
}
|
|
91
|
-
return '';
|
|
80
|
+
static getDefaultInputMask(locale) {
|
|
81
|
+
return getDateFormatter().getLocaleDateTimeFormat(locale, true);
|
|
92
82
|
}
|
|
93
|
-
static parseDateTimeFormat(mask, locale
|
|
94
|
-
const format = mask || DateTimeUtil.
|
|
83
|
+
static parseDateTimeFormat(mask, locale, leadingZero = false) {
|
|
84
|
+
const format = mask || DateTimeUtil.getDefaultInputMask(locale);
|
|
95
85
|
const dateTimeParts = [];
|
|
96
86
|
const formatArray = Array.from(format);
|
|
97
87
|
let currentPart = null;
|
|
@@ -105,7 +95,7 @@ export class DateTimeUtil {
|
|
|
105
95
|
continue;
|
|
106
96
|
}
|
|
107
97
|
}
|
|
108
|
-
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts,
|
|
98
|
+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, leadingZero);
|
|
109
99
|
position = currentPart.end;
|
|
110
100
|
}
|
|
111
101
|
currentPart = {
|
|
@@ -117,7 +107,7 @@ export class DateTimeUtil {
|
|
|
117
107
|
}
|
|
118
108
|
if (!dateTimeParts.filter((p) => p.format.includes(currentPart.format))
|
|
119
109
|
.length) {
|
|
120
|
-
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts,
|
|
110
|
+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, leadingZero);
|
|
121
111
|
}
|
|
122
112
|
const yearPart = dateTimeParts.filter((p) => p.type === DateParts.Year)[0];
|
|
123
113
|
if (yearPart && yearPart.format !== 'yy') {
|
|
@@ -135,41 +125,34 @@ export class DateTimeUtil {
|
|
|
135
125
|
}
|
|
136
126
|
return false;
|
|
137
127
|
}
|
|
138
|
-
static
|
|
128
|
+
static formatDisplayDate(value, locale, displayFormat) {
|
|
139
129
|
const options = {};
|
|
140
|
-
|
|
141
|
-
switch (format) {
|
|
130
|
+
switch (displayFormat) {
|
|
142
131
|
case 'short':
|
|
143
132
|
case 'long':
|
|
144
133
|
case 'medium':
|
|
145
134
|
case 'full':
|
|
146
|
-
options.dateStyle =
|
|
147
|
-
options.timeStyle =
|
|
135
|
+
options.dateStyle = displayFormat;
|
|
136
|
+
options.timeStyle = displayFormat;
|
|
148
137
|
break;
|
|
149
138
|
case 'shortDate':
|
|
150
139
|
case 'longDate':
|
|
151
140
|
case 'mediumDate':
|
|
152
141
|
case 'fullDate':
|
|
153
|
-
options.dateStyle =
|
|
142
|
+
options.dateStyle = displayFormat.toLowerCase().split('date')[0];
|
|
154
143
|
break;
|
|
155
144
|
case 'shortTime':
|
|
156
145
|
case 'longTime':
|
|
157
146
|
case 'mediumTime':
|
|
158
147
|
case 'fullTime':
|
|
159
|
-
options.timeStyle =
|
|
148
|
+
options.timeStyle = displayFormat.toLowerCase().split('time')[0];
|
|
160
149
|
break;
|
|
161
150
|
default:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
try {
|
|
166
|
-
formatter = new Intl.DateTimeFormat(locale, options);
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);
|
|
151
|
+
if (displayFormat) {
|
|
152
|
+
return getDateFormatter().formatDateCustomFormat(value, displayFormat, { locale });
|
|
153
|
+
}
|
|
170
154
|
}
|
|
171
|
-
|
|
172
|
-
return formattedDate;
|
|
155
|
+
return getDateFormatter().formatDateTime(value, locale, options);
|
|
173
156
|
}
|
|
174
157
|
static getPartValue(datePartInfo, partLength, _dateValue) {
|
|
175
158
|
let maskedValue;
|
|
@@ -270,9 +253,11 @@ export class DateTimeUtil {
|
|
|
270
253
|
static spinAmPm(newDate, currentDate, amPmFromMask) {
|
|
271
254
|
let date = new Date(newDate);
|
|
272
255
|
switch (amPmFromMask) {
|
|
256
|
+
case 'am':
|
|
273
257
|
case 'AM':
|
|
274
258
|
date = new Date(newDate.setHours(newDate.getHours() + 12));
|
|
275
259
|
break;
|
|
260
|
+
case 'pm':
|
|
276
261
|
case 'PM':
|
|
277
262
|
date = new Date(newDate.setHours(newDate.getHours() - 12));
|
|
278
263
|
break;
|
|
@@ -339,130 +324,19 @@ export class DateTimeUtil {
|
|
|
339
324
|
? `${format}Date`
|
|
340
325
|
: format;
|
|
341
326
|
}
|
|
342
|
-
static
|
|
343
|
-
|
|
344
|
-
const parts = DateTimeUtil.parseDateTimeFormat(format, locale, noLeadingZero);
|
|
345
|
-
const datePartFormatOptionMap = new Map([
|
|
346
|
-
[DateParts.Date, 'day'],
|
|
347
|
-
[DateParts.Month, 'month'],
|
|
348
|
-
[DateParts.Year, 'year'],
|
|
349
|
-
[DateParts.Hours, 'hour'],
|
|
350
|
-
[DateParts.Minutes, 'minute'],
|
|
351
|
-
[DateParts.Seconds, 'second'],
|
|
352
|
-
[DateParts.AmPm, 'dayPeriod'],
|
|
353
|
-
]);
|
|
354
|
-
const dateFormatMap = new Map([
|
|
355
|
-
['d', 'numeric'],
|
|
356
|
-
['dd', '2-digit'],
|
|
357
|
-
['M', 'numeric'],
|
|
358
|
-
['MM', '2-digit'],
|
|
359
|
-
['MMM', 'short'],
|
|
360
|
-
['MMMM', 'long'],
|
|
361
|
-
['MMMMM', 'narrow'],
|
|
362
|
-
['y', 'numeric'],
|
|
363
|
-
['yy', '2-digit'],
|
|
364
|
-
['yyy', 'numeric'],
|
|
365
|
-
['yyyy', 'numeric'],
|
|
366
|
-
['h', 'numeric'],
|
|
367
|
-
['hh', '2-digit'],
|
|
368
|
-
['H', 'numeric'],
|
|
369
|
-
['HH', '2-digit'],
|
|
370
|
-
['m', 'numeric'],
|
|
371
|
-
['mm', '2-digit'],
|
|
372
|
-
['s', 'numeric'],
|
|
373
|
-
['ss', '2-digit'],
|
|
374
|
-
['ttt', 'short'],
|
|
375
|
-
['tttt', 'long'],
|
|
376
|
-
['ttttt', 'narrow'],
|
|
377
|
-
]);
|
|
378
|
-
for (const part of parts) {
|
|
379
|
-
if (part.type !== DateParts.Literal) {
|
|
380
|
-
const option = datePartFormatOptionMap.get(part.type);
|
|
381
|
-
const format = dateFormatMap.get(part.format) ||
|
|
382
|
-
dateFormatMap.get(part.format.substring(0, 2));
|
|
383
|
-
if (option && format) {
|
|
384
|
-
options[option] = format;
|
|
385
|
-
if (part.type === DateParts.Hours) {
|
|
386
|
-
if (part.format.charAt(0) === 'h') {
|
|
387
|
-
options.hourCycle = 'h12';
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
options.hourCycle = 'h23';
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
if (part.type === DateParts.AmPm && part.format.length <= 2) {
|
|
395
|
-
options.hour = '2-digit';
|
|
396
|
-
options.hourCycle = 'h12';
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
let formatter;
|
|
401
|
-
try {
|
|
402
|
-
formatter = new Intl.DateTimeFormat(locale, options);
|
|
403
|
-
}
|
|
404
|
-
catch {
|
|
405
|
-
formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);
|
|
406
|
-
}
|
|
407
|
-
const formattedParts = formatter.formatToParts(value);
|
|
408
|
-
let result = '';
|
|
409
|
-
for (const part of parts) {
|
|
410
|
-
if (part.type === DateParts.Literal) {
|
|
411
|
-
result += part.format;
|
|
412
|
-
continue;
|
|
413
|
-
}
|
|
414
|
-
const option = datePartFormatOptionMap.get(part.type);
|
|
415
|
-
result += formattedParts.filter((p) => p.type === option)[0]?.value || '';
|
|
416
|
-
}
|
|
417
|
-
return result;
|
|
418
|
-
}
|
|
419
|
-
static getMask(dateStruct) {
|
|
420
|
-
const mask = [];
|
|
421
|
-
for (const part of dateStruct) {
|
|
422
|
-
switch (part.formatType) {
|
|
423
|
-
case FormatDesc.Numeric: {
|
|
424
|
-
if (part.type === DateParts.Day) {
|
|
425
|
-
mask.push('d');
|
|
426
|
-
}
|
|
427
|
-
else if (part.type === DateParts.Month) {
|
|
428
|
-
mask.push('M');
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
mask.push('yyyy');
|
|
432
|
-
}
|
|
433
|
-
break;
|
|
434
|
-
}
|
|
435
|
-
case FormatDesc.TwoDigits: {
|
|
436
|
-
if (part.type === DateParts.Day) {
|
|
437
|
-
mask.push('dd');
|
|
438
|
-
}
|
|
439
|
-
else if (part.type === DateParts.Month) {
|
|
440
|
-
mask.push('MM');
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
mask.push('yy');
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
if (part.type === DateTimeUtil.SEPARATOR) {
|
|
448
|
-
mask.push(part.value);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
return mask.join('');
|
|
452
|
-
}
|
|
453
|
-
static addCurrentPart(currentPart, dateTimeParts, noLeadingZero = false) {
|
|
454
|
-
DateTimeUtil.ensureLeadingZero(currentPart, noLeadingZero);
|
|
327
|
+
static addCurrentPart(currentPart, dateTimeParts, leadingZero = false) {
|
|
328
|
+
DateTimeUtil.ensureLeadingZero(currentPart, leadingZero);
|
|
455
329
|
currentPart.end = currentPart.start + currentPart.format.length;
|
|
456
330
|
dateTimeParts.push(currentPart);
|
|
457
331
|
}
|
|
458
|
-
static ensureLeadingZero(part,
|
|
332
|
+
static ensureLeadingZero(part, leadingZero = false) {
|
|
459
333
|
switch (part.type) {
|
|
460
334
|
case DateParts.Date:
|
|
461
335
|
case DateParts.Month:
|
|
462
336
|
case DateParts.Hours:
|
|
463
337
|
case DateParts.Minutes:
|
|
464
338
|
case DateParts.Seconds:
|
|
465
|
-
if (part.format.length === 1 &&
|
|
339
|
+
if (part.format.length === 1 && leadingZero) {
|
|
466
340
|
part.format = part.format.repeat(2);
|
|
467
341
|
}
|
|
468
342
|
break;
|
|
@@ -493,76 +367,6 @@ export class DateTimeUtil {
|
|
|
493
367
|
return DateParts.Literal;
|
|
494
368
|
}
|
|
495
369
|
}
|
|
496
|
-
static getDefaultLocaleMask(locale) {
|
|
497
|
-
const dateStruct = [];
|
|
498
|
-
let formatter;
|
|
499
|
-
try {
|
|
500
|
-
formatter = new Intl.DateTimeFormat(locale);
|
|
501
|
-
}
|
|
502
|
-
catch {
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
const formatToParts = formatter.formatToParts(new Date());
|
|
506
|
-
for (const part of formatToParts) {
|
|
507
|
-
if (part.type === DateTimeUtil.SEPARATOR) {
|
|
508
|
-
dateStruct.push({
|
|
509
|
-
type: DateTimeUtil.SEPARATOR,
|
|
510
|
-
value: part.value,
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
else {
|
|
514
|
-
dateStruct.push({
|
|
515
|
-
type: part.type,
|
|
516
|
-
});
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
const formatterOptions = formatter.resolvedOptions();
|
|
520
|
-
for (const part of dateStruct) {
|
|
521
|
-
switch (part.type) {
|
|
522
|
-
case DateParts.Day: {
|
|
523
|
-
part.formatType = formatterOptions.day;
|
|
524
|
-
break;
|
|
525
|
-
}
|
|
526
|
-
case DateParts.Month: {
|
|
527
|
-
part.formatType = formatterOptions.month;
|
|
528
|
-
break;
|
|
529
|
-
}
|
|
530
|
-
case DateParts.Year: {
|
|
531
|
-
part.formatType = formatterOptions.year;
|
|
532
|
-
break;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
DateTimeUtil.fillDatePartsPositions(dateStruct);
|
|
537
|
-
return dateStruct;
|
|
538
|
-
}
|
|
539
|
-
static fillDatePartsPositions(dateArray) {
|
|
540
|
-
let currentPos = 0;
|
|
541
|
-
for (const part of dateArray) {
|
|
542
|
-
if (part.type === DateParts.Day || part.type === DateParts.Month) {
|
|
543
|
-
part.position = [currentPos, currentPos + 2];
|
|
544
|
-
currentPos += 2;
|
|
545
|
-
}
|
|
546
|
-
else if (part.type === DateParts.Year) {
|
|
547
|
-
switch (part.formatType) {
|
|
548
|
-
case FormatDesc.Numeric: {
|
|
549
|
-
part.position = [currentPos, currentPos + 4];
|
|
550
|
-
currentPos += 4;
|
|
551
|
-
break;
|
|
552
|
-
}
|
|
553
|
-
case FormatDesc.TwoDigits: {
|
|
554
|
-
part.position = [currentPos, currentPos + 2];
|
|
555
|
-
currentPos += 2;
|
|
556
|
-
break;
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
else if (part.type === DateTimeUtil.SEPARATOR) {
|
|
561
|
-
part.position = [currentPos, currentPos + 1];
|
|
562
|
-
currentPos++;
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
370
|
static getCleanVal(inputData, datePart, prompt) {
|
|
567
371
|
return DateTimeUtil.trimEmptyPlaceholders(inputData.substring(datePart.start, datePart.end), prompt);
|
|
568
372
|
}
|