igniteui-webcomponents 7.3.0-beta.0 → 7.3.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 +23 -0
- package/animations/player.d.ts +7 -2
- package/animations/player.js +1 -2
- package/animations/player.js.map +1 -1
- package/components/accordion/accordion.js +4 -16
- package/components/accordion/accordion.js.map +1 -1
- package/components/avatar/avatar.d.ts +0 -1
- package/components/avatar/avatar.js +5 -9
- package/components/avatar/avatar.js.map +1 -1
- package/components/badge/badge.d.ts +1 -3
- package/components/badge/badge.js +4 -8
- package/components/badge/badge.js.map +1 -1
- package/components/banner/banner.d.ts +6 -5
- package/components/banner/banner.js +19 -17
- package/components/banner/banner.js.map +1 -1
- package/components/button/button-base.d.ts +1 -1
- package/components/button/button-base.js.map +1 -1
- package/components/button-group/button-group.d.ts +0 -1
- package/components/button-group/button-group.js +12 -17
- package/components/button-group/button-group.js.map +1 -1
- package/components/calendar/base.d.ts +3 -13
- package/components/calendar/base.js +10 -31
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +2 -2
- package/components/calendar/months-view/months-view.d.ts +1 -1
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/carousel/carousel-indicator.d.ts +1 -1
- package/components/carousel/carousel-indicator.js +13 -13
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +0 -2
- package/components/carousel/carousel-slide.js +7 -9
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +52 -35
- package/components/carousel/carousel.js +136 -122
- package/components/carousel/carousel.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/chat/chat-input.d.ts +1 -1
- package/components/chat/chat-input.js +21 -21
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat.d.ts +0 -2
- package/components/chat/chat.js +6 -12
- package/components/chat/chat.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/checkbox.d.ts +3 -5
- package/components/checkbox/checkbox.js +33 -44
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.d.ts +1 -1
- package/components/checkbox/switch.js +23 -34
- package/components/checkbox/switch.js.map +1 -1
- package/components/chip/chip.d.ts +1 -14
- package/components/chip/chip.js +12 -33
- package/components/chip/chip.js.map +1 -1
- package/components/color-picker/color-picker.d.ts +261 -0
- package/components/color-picker/color-picker.js +620 -0
- package/components/color-picker/color-picker.js.map +1 -0
- package/components/color-picker/common.d.ts +37 -0
- package/components/color-picker/common.js +55 -0
- package/components/color-picker/common.js.map +1 -0
- package/components/color-picker/converters.d.ts +18 -0
- package/components/color-picker/converters.js +173 -0
- package/components/color-picker/converters.js.map +1 -0
- package/components/color-picker/model.d.ts +120 -0
- package/components/color-picker/model.js +174 -0
- package/components/color-picker/model.js.map +1 -0
- package/components/color-picker/picker-canvas.d.ts +95 -0
- package/components/color-picker/picker-canvas.js +154 -0
- package/components/color-picker/picker-canvas.js.map +1 -0
- package/components/color-picker/themes/color-picker.base.css.d.ts +1 -0
- package/components/color-picker/themes/color-picker.base.css.js +3 -0
- package/components/color-picker/themes/color-picker.base.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.shared.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.shared.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.shared.css.js.map +1 -0
- package/components/color-picker/themes/picker-canvas.base.css.d.ts +1 -0
- package/components/color-picker/themes/picker-canvas.base.css.js +3 -0
- package/components/color-picker/themes/picker-canvas.base.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.common.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.common.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.common.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/themes.d.ts +2 -0
- package/components/color-picker/themes/themes.js +50 -0
- package/components/color-picker/themes/themes.js.map +1 -0
- package/components/color-picker/validators.d.ts +3 -0
- package/components/color-picker/validators.js +5 -0
- package/components/color-picker/validators.js.map +1 -0
- package/components/combo/combo-item.d.ts +1 -3
- package/components/combo/combo-item.js +5 -12
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo.d.ts +7 -20
- package/components/combo/combo.js +59 -81
- package/components/combo/combo.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +12 -9
- package/components/date-picker/date-picker.base.js +24 -31
- package/components/date-picker/date-picker.base.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -1
- package/components/date-picker/date-picker.js +3 -5
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-range-picker/date-range-input.d.ts +2 -4
- package/components/date-range-picker/date-range-input.js +6 -37
- package/components/date-range-picker/date-range-input.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +2 -5
- package/components/date-range-picker/date-range-picker.js +15 -28
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.d.ts +2 -2
- package/components/date-range-picker/predefined-ranges-area.js +4 -6
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/validators.d.ts +1 -1
- package/components/date-range-picker/validators.js +5 -18
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-part.d.ts +2 -1
- package/components/date-time-input/date-part.js +38 -75
- package/components/date-time-input/date-part.js.map +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +31 -12
- package/components/date-time-input/date-time-input.base.js +43 -11
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +1 -3
- package/components/date-time-input/date-time-input.js +7 -40
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/datetime-mask-parser.d.ts +8 -0
- package/components/date-time-input/datetime-mask-parser.js +8 -8
- package/components/date-time-input/datetime-mask-parser.js.map +1 -1
- package/components/date-time-input/validators.js +3 -14
- package/components/date-time-input/validators.js.map +1 -1
- package/components/dialog/dialog.d.ts +6 -7
- package/components/dialog/dialog.js +21 -26
- package/components/dialog/dialog.js.map +1 -1
- package/components/divider/divider.d.ts +1 -4
- package/components/divider/divider.js +8 -17
- package/components/divider/divider.js.map +1 -1
- package/components/dropdown/dropdown-group.js +1 -6
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/expansion-panel/expansion-panel.d.ts +15 -5
- package/components/expansion-panel/expansion-panel.js +23 -34
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/file-input/file-input.d.ts +2 -14
- package/components/file-input/file-input.js +5 -23
- package/components/file-input/file-input.js.map +1 -1
- package/components/highlight/highlight.d.ts +6 -8
- package/components/highlight/highlight.js +12 -20
- package/components/highlight/highlight.js.map +1 -1
- package/components/icon/icon-references.js +1 -0
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/icon.d.ts +1 -1
- package/components/icon/internal-icons-lib.js +3 -0
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/icon/registry/types.d.ts +1 -1
- package/components/icon/registry/types.js.map +1 -1
- package/components/input/input.d.ts +9 -19
- package/components/input/input.js +30 -60
- package/components/input/input.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/mask-input/mask-input.d.ts +1 -1
- package/components/mask-input/mask-input.js +2 -4
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/nav-drawer/nav-drawer.d.ts +7 -7
- package/components/nav-drawer/nav-drawer.js +12 -23
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/progress/base.d.ts +4 -7
- package/components/progress/base.js +21 -45
- package/components/progress/base.js.map +1 -1
- package/components/qr-code/qr-code.d.ts +1 -1
- package/components/qr-code/qr-code.js +3 -2
- package/components/qr-code/qr-code.js.map +1 -1
- package/components/qr-code/types.d.ts +1 -1
- package/components/qr-code/types.js.map +1 -1
- package/components/radio/controller.d.ts +2 -30
- package/components/radio/controller.js +8 -94
- package/components/radio/controller.js.map +1 -1
- package/components/radio/radio.d.ts +5 -5
- package/components/radio/radio.js +48 -58
- package/components/radio/radio.js.map +1 -1
- package/components/radio-group/radio-group.d.ts +1 -2
- package/components/radio-group/radio-group.js +2 -9
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.d.ts +24 -12
- package/components/rating/rating.js +79 -73
- package/components/rating/rating.js.map +1 -1
- package/components/resize-container/default-ghost.js +4 -3
- package/components/resize-container/default-ghost.js.map +1 -1
- package/components/resize-container/resize-container.d.ts +1 -1
- package/components/resize-container/resize-container.js +5 -3
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/resize-container/resize-controller.js +4 -3
- package/components/resize-container/resize-controller.js.map +1 -1
- package/components/select/select-group.d.ts +2 -1
- package/components/select/select-group.js +7 -11
- package/components/select/select-group.js.map +1 -1
- package/components/select/select.d.ts +3 -4
- package/components/select/select.js +23 -28
- package/components/select/select.js.map +1 -1
- package/components/slider/range-slider.d.ts +3 -2
- package/components/slider/range-slider.js +22 -70
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.d.ts +9 -6
- package/components/slider/slider-base.js +27 -28
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider.js +9 -5
- package/components/slider/slider.js.map +1 -1
- package/components/splitter/splitter.d.ts +1 -1
- package/components/splitter/splitter.js.map +1 -1
- package/components/stepper/step.d.ts +3 -0
- package/components/stepper/step.js +9 -5
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.d.ts +0 -11
- package/components/stepper/stepper.js +21 -86
- package/components/stepper/stepper.js.map +1 -1
- package/components/tabs/tab.d.ts +1 -1
- package/components/tabs/tab.js +6 -5
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.d.ts +1 -5
- package/components/tabs/tabs.js +12 -34
- package/components/tabs/tabs.js.map +1 -1
- package/components/textarea/textarea.d.ts +6 -7
- package/components/textarea/textarea.js +3 -10
- package/components/textarea/textarea.js.map +1 -1
- package/components/theme-provider/theme-provider.d.ts +2 -4
- package/components/theme-provider/theme-provider.js +11 -21
- package/components/theme-provider/theme-provider.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +10 -21
- package/components/tile-manager/tile-manager.js +43 -74
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +10 -18
- package/components/tile-manager/tile.js +50 -67
- package/components/tile-manager/tile.js.map +1 -1
- package/components/tooltip/tooltip.d.ts +4 -7
- package/components/tooltip/tooltip.js +20 -28
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/tree.d.ts +1 -14
- package/components/tree/tree.js +5 -23
- package/components/tree/tree.js.map +1 -1
- package/components/tree/tree.navigation.d.ts +1 -1
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/types.d.ts +2 -0
- package/components/types.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +1 -2
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +40 -38
- package/components/virtualization/engine.js.map +1 -1
- package/components/virtualization/types.d.ts +6 -5
- package/components/virtualization/types.js.map +1 -1
- package/components/virtualization/virtualization.d.ts +94 -80
- package/components/virtualization/virtualization.js +10 -2
- package/components/virtualization/virtualization.js.map +1 -1
- package/custom-elements.json +31948 -26708
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internals/controllers/aria-projection.d.ts +6 -6
- package/internals/controllers/aria-projection.js.map +1 -1
- package/internals/controllers/context-provider.d.ts +48 -0
- package/internals/controllers/context-provider.js +29 -0
- package/internals/controllers/context-provider.js.map +1 -0
- package/internals/controllers/drag.js +6 -6
- package/internals/controllers/drag.js.map +1 -1
- package/internals/controllers/gestures.js +3 -0
- package/internals/controllers/gestures.js.map +1 -1
- package/internals/controllers/group.d.ts +64 -0
- package/internals/controllers/group.js +104 -0
- package/internals/controllers/group.js.map +1 -0
- package/internals/controllers/internals.d.ts +16 -3
- package/internals/controllers/internals.js +10 -3
- package/internals/controllers/internals.js.map +1 -1
- package/internals/controllers/key-bindings.d.ts +6 -0
- package/internals/controllers/key-bindings.js +3 -0
- package/internals/controllers/key-bindings.js.map +1 -1
- package/internals/controllers/roving-focus.d.ts +72 -0
- package/internals/controllers/roving-focus.js +61 -0
- package/internals/controllers/roving-focus.js.map +1 -0
- package/internals/controllers/slot.d.ts +8 -0
- package/internals/controllers/slot.js +4 -0
- package/internals/controllers/slot.js.map +1 -1
- package/internals/controllers/toggle.d.ts +96 -0
- package/internals/controllers/toggle.js +65 -0
- package/internals/controllers/toggle.js.map +1 -0
- package/internals/date/converters.js +2 -5
- package/internals/date/converters.js.map +1 -1
- package/internals/date/model.d.ts +4 -0
- package/internals/date/model.js +6 -0
- package/internals/date/model.js.map +1 -1
- package/internals/decorators/coerced-property.d.ts +47 -0
- package/internals/decorators/coerced-property.js +36 -0
- package/internals/decorators/coerced-property.js.map +1 -0
- package/internals/definitions/defineAllComponents.js +2 -0
- package/internals/definitions/defineAllComponents.js.map +1 -1
- package/internals/i18n/i18n-controller.d.ts +22 -3
- package/internals/i18n/i18n-controller.js +28 -6
- package/internals/i18n/i18n-controller.js.map +1 -1
- package/internals/mixins/alert.d.ts +1 -1
- package/internals/mixins/alert.js +5 -3
- package/internals/mixins/alert.js.map +1 -1
- package/internals/mixins/combo-box.d.ts +3 -12
- package/internals/mixins/combo-box.js +6 -32
- package/internals/mixins/combo-box.js.map +1 -1
- package/internals/mixins/forms/associated.js +18 -0
- package/internals/mixins/forms/associated.js.map +1 -1
- package/internals/mixins/forms/types.d.ts +20 -1
- package/internals/mixins/forms/types.js.map +1 -1
- package/internals/mixins/i18n.d.ts +31 -0
- package/internals/mixins/i18n.js +36 -0
- package/internals/mixins/i18n.js.map +1 -0
- package/internals/mixins/mask-behavior.d.ts +6 -5
- package/internals/mixins/mask-behavior.js +1 -2
- package/internals/mixins/mask-behavior.js.map +1 -1
- package/internals/mixins/option.js +4 -2
- package/internals/mixins/option.js.map +1 -1
- package/internals/templates/masked-input.d.ts +1 -1
- package/internals/templates/masked-input.js.map +1 -1
- package/internals/templates/slotted-icon.d.ts +32 -0
- package/internals/templates/slotted-icon.js +19 -0
- package/internals/templates/slotted-icon.js.map +1 -0
- package/internals/templates/toggle-shell.d.ts +46 -0
- package/internals/templates/toggle-shell.js +38 -0
- package/internals/templates/toggle-shell.js.map +1 -0
- package/internals/timing.d.ts +32 -0
- package/internals/timing.js +20 -0
- package/internals/timing.js.map +1 -0
- package/internals/utils/arrays.d.ts +2 -2
- package/internals/utils/arrays.js.map +1 -1
- package/internals/utils/dom.d.ts +22 -0
- package/internals/utils/dom.js +15 -1
- package/internals/utils/dom.js.map +1 -1
- package/internals/utils/math.d.ts +1 -1
- package/internals/utils/math.js.map +1 -1
- package/internals/utils/types.d.ts +1 -1
- package/internals/utils/types.js.map +1 -1
- package/internals/validators.d.ts +23 -0
- package/internals/validators.js +21 -0
- package/internals/validators.js.map +1 -1
- package/package.json +3 -1
- package/theming/theming-controller.d.ts +3 -3
- package/theming/theming-controller.js.map +1 -1
- package/web-types.json +2 -2
- package/internals/decorators/watch.d.ts +0 -5
- package/internals/decorators/watch.js +0 -19
- package/internals/decorators/watch.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predefined-ranges-area.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/predefined-ranges-area.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"predefined-ranges-area.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/predefined-ranges-area.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CalendarResourceStringsEN,\n DateRangePickerResourceStringsEN,\n} from 'igniteui-i18n-core';\nimport { html, LitElement, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { CalendarDay } from '#internals/date/model.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { IgcDateRangePickerResourceStrings } from '#internals/i18n/EN/date-range-picker.resources.js';\nimport { addI18nController } from '#internals/i18n/i18n-controller.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport type {\n CustomDateRange,\n DateRangePickerResourceStringsType,\n DateRangeValue,\n} from './date-range-picker.js';\nimport { styles } from './predefined-ranges-area.base.css.js';\nimport { all } from './themes/ranges-themes.js';\nimport { styles as shared } from './themes/shared/predefined-ranges-area.common.css.js';\n\n/* blazorSuppress */\n/**\n * The predefined ranges area component is used within the date range picker and it\n * displays a set of chips with predefined date ranges. The component allows users to quickly select\n * a predefined date range value. Users can also provide custom ranges to be displayed as chips.\n *\n * @element igc-predefined-ranges-area\n */\nexport default class IgcPredefinedRangesAreaComponent extends LitElement {\n public static readonly tagName = 'igc-predefined-ranges-area';\n public static override styles = [styles, shared];\n\n private readonly _i18nController = addI18nController<\n IgcDateRangePickerResourceStrings | DateRangePickerResourceStringsType\n >(this, {\n defaultEN: Object.assign(\n {},\n DateRangePickerResourceStringsEN,\n CalendarResourceStringsEN\n ),\n resourceMapName: 'date-range-picker',\n });\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcPredefinedRangesAreaComponent, IgcChipComponent);\n }\n\n @state()\n private _predefinedRanges: CustomDateRange[] = [];\n\n /**\n * Whether the control will show chips with predefined ranges.\n * @attr use-predefined-ranges\n */\n @property({\n type: Boolean,\n reflect: true,\n attribute: 'use-predefined-ranges',\n })\n public usePredefinedRanges = false;\n\n /**\n * Renders chips with custom ranges based on the elements of the array.\n */\n @property({ attribute: false })\n public customRanges: CustomDateRange[] = [];\n\n /** The resource strings of the date range area component. */\n @property({ attribute: false })\n public set resourceStrings(\n value:\n | IgcDateRangePickerResourceStrings\n | DateRangePickerResourceStringsType\n ) {\n this._i18nController.resourceStrings = value;\n }\n\n public get resourceStrings(): IgcDateRangePickerResourceStrings &\n DateRangePickerResourceStringsType {\n return this._i18nController.resourceStrings;\n }\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('resourceStrings')) {\n this._predefinedRanges = getPredefinedRanges(this.resourceStrings);\n }\n }\n\n private _handleRangeSelect(range: DateRangeValue): void {\n this.dispatchEvent(new CustomEvent('igcRangeSelect', { detail: range }));\n }\n\n protected *_renderDateRanges() {\n const ranges = this.usePredefinedRanges\n ? [...this._predefinedRanges, ...this.customRanges]\n : this.customRanges;\n\n for (const { label, dateRange } of ranges) {\n yield html`\n <igc-chip @click=${() => this._handleRangeSelect(dateRange)}>\n ${label}\n </igc-chip>\n `;\n }\n }\n\n protected override render() {\n return html`<div part=\"ranges\">${this._renderDateRanges()}</div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-predefined-ranges-area': IgcPredefinedRangesAreaComponent;\n }\n}\n\ntype PredefinedRangeKey =\n | 'last7Days'\n | 'currentMonth'\n | 'last30Days'\n | 'yearToDate';\n\nfunction getPredefinedRanges(\n resourceStrings: DateRangePickerResourceStringsType\n): CustomDateRange[] {\n const today = CalendarDay.today;\n\n const ranges: {\n key: PredefinedRangeKey;\n resourceKey: keyof DateRangePickerResourceStringsType;\n getDateRange: () => { start: Date; end: Date };\n }[] = [\n {\n key: 'last7Days',\n resourceKey: 'date_range_picker_last7Days',\n getDateRange: () => ({\n start: today.add('day', -7).native,\n end: today.native,\n }),\n },\n {\n key: 'currentMonth',\n resourceKey: 'date_range_picker_currentMonth',\n getDateRange: () => ({\n start: today.set({ date: 1 }).native,\n end: today.set({ date: 1 }).add('month', 1).add('day', -1).native,\n }),\n },\n {\n key: 'last30Days',\n resourceKey: 'date_range_picker_last30Days',\n getDateRange: () => ({\n start: today.add('day', -29).native,\n end: today.native,\n }),\n },\n {\n key: 'yearToDate',\n resourceKey: 'date_range_picker_yearToDate',\n getDateRange: () => ({\n start: today.set({ year: today.year, month: 0, date: 1 }).native,\n end: today.native,\n }),\n },\n ];\n\n return ranges.map((range) => ({\n label: resourceStrings[range.resourceKey]!,\n dateRange: range.getDateRange(),\n }));\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Validator } from '#internals/validators.js';
|
|
2
2
|
import type { DateRangeValue } from '../types.js';
|
|
3
3
|
import type IgcDateRangePickerComponent from './date-range-picker.js';
|
|
4
4
|
export declare const minDateRangeValidator: Validator<IgcDateRangePickerComponent>;
|
|
@@ -1,27 +1,14 @@
|
|
|
1
1
|
import { ValidationResourceStringsEN } from 'igniteui-i18n-core';
|
|
2
|
-
import { isDateExceedingMax, isDateLessThanMin, } from '#internals/date/compare.js';
|
|
3
2
|
import { calendarRange } from '#internals/date/model.js';
|
|
4
3
|
import { isEmpty } from '#internals/utils/arrays.js';
|
|
5
4
|
import { formatString } from '#internals/utils/strings.js';
|
|
5
|
+
import { createMaxDateTimeValidator, createMinDateTimeValidator, } from '#internals/validators.js';
|
|
6
6
|
import { isDateInRanges } from '../calendar/helpers.js';
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
return !((start && !predicate(start)) || (end && !predicate(end)));
|
|
7
|
+
function rangeEnds({ value }) {
|
|
8
|
+
return [value?.start, value?.end];
|
|
10
9
|
}
|
|
11
|
-
export const minDateRangeValidator =
|
|
12
|
-
|
|
13
|
-
message: (host) => formatString(ValidationResourceStringsEN.min_validation_error, host.min),
|
|
14
|
-
isValid: (host) => host.min
|
|
15
|
-
? isRangeWithinBounds(host, (date) => !isDateLessThanMin(date, host.min, host.hasTimeParts(), host.hasDateParts()))
|
|
16
|
-
: true,
|
|
17
|
-
};
|
|
18
|
-
export const maxDateRangeValidator = {
|
|
19
|
-
key: 'rangeOverflow',
|
|
20
|
-
message: (host) => formatString(ValidationResourceStringsEN.max_validation_error, host.max),
|
|
21
|
-
isValid: (host) => host.max
|
|
22
|
-
? isRangeWithinBounds(host, (date) => !isDateExceedingMax(date, host.max, host.hasTimeParts(), host.hasDateParts()))
|
|
23
|
-
: true,
|
|
24
|
-
};
|
|
10
|
+
export const minDateRangeValidator = createMinDateTimeValidator(rangeEnds);
|
|
11
|
+
export const maxDateRangeValidator = createMaxDateTimeValidator(rangeEnds);
|
|
25
12
|
export const requiredDateRangeValidator = {
|
|
26
13
|
key: 'valueMissing',
|
|
27
14
|
message: ValidationResourceStringsEN.required_validation_error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,SAAS,SAAS,CAAC,EAAE,KAAK,EAA+B;IACvD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAChC,0BAA0B,CAA8B,SAAS,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,qBAAqB,GAChC,0BAA0B,CAA8B,SAAS,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,0BAA0B,GACrC;IACE,GAAG,EAAE,cAAc;IACnB,OAAO,EAAE,2BAA2B,CAAC,yBAA0B;IAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,0BAA0B,GACrC;IACE,GAAG,EAAE,UAAU;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,YAAY,CACV,2BAA2B,CAAC,8BAA+B,EAC3D,IAAI,CAAC,KAAK,CACX;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAEtC,IACE,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC3B,CAAC,aAAa;YACd,OAAO,CAAC,aAAa,CAAC,EACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CACf,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CACvE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,0BAA0B;IAC1B,qBAAqB;IACrB,qBAAqB;IACrB,0BAA0B;CAC3B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CACjC,KAA4B;IAE5B,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;AACnE,CAAC","sourcesContent":["import { ValidationResourceStringsEN } from 'igniteui-i18n-core';\nimport { calendarRange } from '#internals/date/model.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { formatString } from '#internals/utils/strings.js';\nimport {\n createMaxDateTimeValidator,\n createMinDateTimeValidator,\n type Validator,\n} from '#internals/validators.js';\nimport { isDateInRanges } from '../calendar/helpers.js';\nimport type { DateRangeValue } from '../types.js';\nimport type IgcDateRangePickerComponent from './date-range-picker.js';\n\n/** The ends of the current range, each validated against the bound on its own. */\nfunction rangeEnds({ value }: IgcDateRangePickerComponent) {\n return [value?.start, value?.end];\n}\n\nexport const minDateRangeValidator =\n createMinDateTimeValidator<IgcDateRangePickerComponent>(rangeEnds);\n\nexport const maxDateRangeValidator =\n createMaxDateTimeValidator<IgcDateRangePickerComponent>(rangeEnds);\n\nexport const requiredDateRangeValidator: Validator<IgcDateRangePickerComponent> =\n {\n key: 'valueMissing',\n message: ValidationResourceStringsEN.required_validation_error!,\n isValid: (host) => {\n return host.required ? isCompleteDateRange(host.value) : true;\n },\n };\n\nexport const badInputDateRangeValidator: Validator<IgcDateRangePickerComponent> =\n {\n key: 'badInput',\n message: (host) =>\n formatString(\n ValidationResourceStringsEN.disabled_date_validation_error!,\n host.value\n ),\n isValid: (host) => {\n const { value, disabledDates } = host;\n\n if (\n !isCompleteDateRange(value) ||\n !disabledDates ||\n isEmpty(disabledDates)\n ) {\n return true;\n }\n\n return Array.from(\n calendarRange({ start: value.start, end: value.end, inclusive: true })\n ).every((date) => !isDateInRanges(date, disabledDates));\n },\n };\n\nexport const dateRangeValidators: Validator<IgcDateRangePickerComponent>[] = [\n requiredDateRangeValidator,\n minDateRangeValidator,\n maxDateRangeValidator,\n badInputDateRangeValidator,\n];\n\nexport function isCompleteDateRange(\n value: DateRangeValue | null\n): value is { start: Date; end: Date } {\n return value != null && value.start != null && value.end != null;\n}\n"]}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Date Part Classes Module
|
|
3
3
|
*
|
|
4
4
|
* This module provides structured classes for date/time parts used in date-time input.
|
|
5
|
-
* Each part type has its own class with specific validation and spin behavior
|
|
5
|
+
* Each date part type has its own class with specific validation and spin behavior;
|
|
6
|
+
* the time part types share one class driven by a bounds/accessor lookup.
|
|
6
7
|
*
|
|
7
8
|
* Classes are private to this module - only types and factory function are exported.
|
|
8
9
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { clamp, modulo } from '#internals/utils/math.js';
|
|
1
2
|
export var DatePart;
|
|
2
3
|
(function (DatePart) {
|
|
3
4
|
DatePart["Month"] = "month";
|
|
@@ -36,10 +37,26 @@ export const DEFAULT_DATE_PARTS_SPIN_DELTAS = Object.freeze({
|
|
|
36
37
|
minutes: 1,
|
|
37
38
|
seconds: 1,
|
|
38
39
|
});
|
|
39
|
-
const
|
|
40
|
-
hours: {
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const TIME_PART_CONFIG = {
|
|
41
|
+
hours: {
|
|
42
|
+
min: 0,
|
|
43
|
+
max: 23,
|
|
44
|
+
get: (date) => date.getHours(),
|
|
45
|
+
set: (date, value) => date.setHours(value),
|
|
46
|
+
display: (value, format) => format.includes('h') ? toTwelveHourFormat(value) : value,
|
|
47
|
+
},
|
|
48
|
+
minutes: {
|
|
49
|
+
min: 0,
|
|
50
|
+
max: 59,
|
|
51
|
+
get: (date) => date.getMinutes(),
|
|
52
|
+
set: (date, value) => date.setMinutes(value),
|
|
53
|
+
},
|
|
54
|
+
seconds: {
|
|
55
|
+
min: 0,
|
|
56
|
+
max: 59,
|
|
57
|
+
get: (date) => date.getSeconds(),
|
|
58
|
+
set: (date, value) => date.setSeconds(value),
|
|
59
|
+
},
|
|
43
60
|
};
|
|
44
61
|
const DATE_BOUNDS = {
|
|
45
62
|
month: { min: 0, max: 11 },
|
|
@@ -55,15 +72,10 @@ function toTwelveHourFormat(hours) {
|
|
|
55
72
|
const h = hours % 12;
|
|
56
73
|
return h === 0 ? 12 : h;
|
|
57
74
|
}
|
|
58
|
-
function
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
else if (value < min) {
|
|
64
|
-
value = spinLoop ? max + 1 + (value % (max + 1)) : min;
|
|
65
|
-
}
|
|
66
|
-
setter.call(date, value);
|
|
75
|
+
function wrapOrClamp(value, min, max, spinLoop) {
|
|
76
|
+
return spinLoop
|
|
77
|
+
? min + modulo(value - min, max - min + 1)
|
|
78
|
+
: clamp(value, min, max);
|
|
67
79
|
}
|
|
68
80
|
class DatePartBase {
|
|
69
81
|
constructor(type, options) {
|
|
@@ -110,14 +122,7 @@ class MonthPart extends DatePartBase {
|
|
|
110
122
|
if (date.getDate() > maxDate) {
|
|
111
123
|
date.setDate(maxDate);
|
|
112
124
|
}
|
|
113
|
-
|
|
114
|
-
if (month > max) {
|
|
115
|
-
month = spinLoop ? (month % max) - 1 : max;
|
|
116
|
-
}
|
|
117
|
-
else if (month < min) {
|
|
118
|
-
month = spinLoop ? max + (month % max) + 1 : min;
|
|
119
|
-
}
|
|
120
|
-
date.setMonth(month);
|
|
125
|
+
date.setMonth(wrapOrClamp(date.getMonth() + delta, min, max, spinLoop));
|
|
121
126
|
}
|
|
122
127
|
getValue(date) {
|
|
123
128
|
return padValue(date.getMonth() + 1, this.format.length);
|
|
@@ -141,69 +146,29 @@ class DateOfMonthPart extends DatePartBase {
|
|
|
141
146
|
const { date, spinLoop } = options;
|
|
142
147
|
const maxDate = daysInMonth(date.getFullYear(), date.getMonth());
|
|
143
148
|
const { min } = DATE_BOUNDS.date;
|
|
144
|
-
|
|
145
|
-
if (dayOfMonth > maxDate) {
|
|
146
|
-
dayOfMonth = spinLoop ? dayOfMonth % maxDate : maxDate;
|
|
147
|
-
}
|
|
148
|
-
else if (dayOfMonth < min) {
|
|
149
|
-
dayOfMonth = spinLoop ? maxDate + (dayOfMonth % maxDate) : min;
|
|
150
|
-
}
|
|
151
|
-
date.setDate(dayOfMonth);
|
|
149
|
+
date.setDate(wrapOrClamp(date.getDate() + delta, min, maxDate, spinLoop));
|
|
152
150
|
}
|
|
153
151
|
getValue(date) {
|
|
154
152
|
return padValue(date.getDate(), this.format.length);
|
|
155
153
|
}
|
|
156
154
|
}
|
|
157
|
-
class
|
|
158
|
-
constructor(options) {
|
|
159
|
-
super(
|
|
160
|
-
|
|
161
|
-
validate(value) {
|
|
162
|
-
return value >= TIME_BOUNDS.hours.min && value <= TIME_BOUNDS.hours.max;
|
|
163
|
-
}
|
|
164
|
-
spin(delta, options) {
|
|
165
|
-
const { date, spinLoop } = options;
|
|
166
|
-
const { min, max } = TIME_BOUNDS.hours;
|
|
167
|
-
spinTimePart(date, delta, max, min, date.setHours, date.getHours, spinLoop);
|
|
168
|
-
}
|
|
169
|
-
getValue(date) {
|
|
170
|
-
const isTwelveHour = this.format.includes('h');
|
|
171
|
-
const hours = isTwelveHour
|
|
172
|
-
? toTwelveHourFormat(date.getHours())
|
|
173
|
-
: date.getHours();
|
|
174
|
-
return padValue(hours, this.format.length);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
class MinutesPart extends DatePartBase {
|
|
178
|
-
constructor(options) {
|
|
179
|
-
super(DatePartType.Minutes, options);
|
|
180
|
-
}
|
|
181
|
-
validate(value) {
|
|
182
|
-
return value >= TIME_BOUNDS.minutes.min && value <= TIME_BOUNDS.minutes.max;
|
|
183
|
-
}
|
|
184
|
-
spin(delta, options) {
|
|
185
|
-
const { date, spinLoop } = options;
|
|
186
|
-
const { min, max } = TIME_BOUNDS.minutes;
|
|
187
|
-
spinTimePart(date, delta, max, min, date.setMinutes, date.getMinutes, spinLoop);
|
|
188
|
-
}
|
|
189
|
-
getValue(date) {
|
|
190
|
-
return padValue(date.getMinutes(), this.format.length);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
class SecondsPart extends DatePartBase {
|
|
194
|
-
constructor(options) {
|
|
195
|
-
super(DatePartType.Seconds, options);
|
|
155
|
+
class TimePart extends DatePartBase {
|
|
156
|
+
constructor(type, options) {
|
|
157
|
+
super(type, options);
|
|
158
|
+
this._config = TIME_PART_CONFIG[type];
|
|
196
159
|
}
|
|
197
160
|
validate(value) {
|
|
198
|
-
return value >=
|
|
161
|
+
return value >= this._config.min && value <= this._config.max;
|
|
199
162
|
}
|
|
200
163
|
spin(delta, options) {
|
|
201
164
|
const { date, spinLoop } = options;
|
|
202
|
-
const { min, max } =
|
|
203
|
-
|
|
165
|
+
const { min, max, get, set } = this._config;
|
|
166
|
+
set(date, wrapOrClamp(get(date) + delta, min, max, spinLoop));
|
|
204
167
|
}
|
|
205
168
|
getValue(date) {
|
|
206
|
-
|
|
169
|
+
const { get, display } = this._config;
|
|
170
|
+
const value = get(date);
|
|
171
|
+
return padValue(display ? display(value, this.format) : value, this.format.length);
|
|
207
172
|
}
|
|
208
173
|
}
|
|
209
174
|
class AmPmPart extends DatePartBase {
|
|
@@ -250,11 +215,9 @@ export function createDatePart(type, options) {
|
|
|
250
215
|
case DatePartType.Date:
|
|
251
216
|
return new DateOfMonthPart(options);
|
|
252
217
|
case DatePartType.Hours:
|
|
253
|
-
return new HoursPart(options);
|
|
254
218
|
case DatePartType.Minutes:
|
|
255
|
-
return new MinutesPart(options);
|
|
256
219
|
case DatePartType.Seconds:
|
|
257
|
-
return new
|
|
220
|
+
return new TimePart(type, options);
|
|
258
221
|
case DatePartType.AmPm:
|
|
259
222
|
return new AmPmPart(options);
|
|
260
223
|
case DatePartType.Literal:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-part.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-part.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Date Part Classes Module\n *\n * This module provides structured classes for date/time parts used in date-time input.\n * Each part type has its own class with specific validation and spin behavior.\n *\n * Classes are private to this module - only types and factory function are exported.\n */\n\n//#region Types and Enums\n\nexport enum DatePart {\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n}\n\n/** Types of date/time parts that can appear in a format string */\nexport const DatePartType = {\n Month: 'month',\n Year: 'year',\n Date: 'date',\n Hours: 'hours',\n Minutes: 'minutes',\n Seconds: 'seconds',\n AmPm: 'amPm',\n Literal: 'literal',\n} as const;\n\nexport type DatePartType = (typeof DatePartType)[keyof typeof DatePartType];\n\n/** The part types that make up a calendar date. */\nexport const DATE_PART_TYPES = new Set<DatePartType>([\n DatePartType.Date,\n DatePartType.Month,\n DatePartType.Year,\n]);\n\n/** The part types that make up a time of day. */\nexport const TIME_PART_TYPES = new Set<DatePartType>([\n DatePartType.Hours,\n DatePartType.Minutes,\n DatePartType.Seconds,\n]);\n\n// Spin delta defaults\nexport const DEFAULT_DATE_PARTS_SPIN_DELTAS = Object.freeze<DatePartDeltas>({\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n});\n\n/**\n * The amounts by which each date or time part is incremented or decremented on\n * a step action in date-time input; every part defaults to `1`.\n */\nexport interface DatePartDeltas {\n /** The number of days the date part is spun by. */\n date?: number;\n /** The number of months the month part is spun by. */\n month?: number;\n /** The number of years the year part is spun by. */\n year?: number;\n /** The number of hours the hours part is spun by. */\n hours?: number;\n /** The number of minutes the minutes part is spun by. */\n minutes?: number;\n /** The number of seconds the seconds part is spun by. */\n seconds?: number;\n}\n\n/** Options for creating a date part */\nexport interface DatePartOptions {\n /** Start position in the masked string */\n start: number;\n /** End position in the masked string */\n end: number;\n /** The format string for this part (e.g., 'MM', 'yyyy') */\n format: string;\n}\n/* blazorSuppress */\n/** Options for spin operations */\nexport interface SpinOptions {\n /** The current date value */\n date: Date;\n /** Whether to loop values at boundaries */\n spinLoop: boolean;\n /** For AM/PM: the current masked value to determine AM or PM */\n amPmValue?: string;\n /** For AM/PM: the original date (for rollover prevention) */\n originalDate?: Date;\n}\n\n/**\n * Read-only interface for date part information\n * @hidden\n */\nexport interface IDatePart {\n /** The type of date part */\n readonly type: DatePartType;\n /** Start position in the masked string */\n readonly start: number;\n /** End position in the masked string */\n readonly end: number;\n /** The format string for this part */\n readonly format: string;\n\n /**\n * Validates a numeric value for this part.\n * @param value - The value to validate\n * @param context - Optional context (year, month) for date-dependent validation\n * @returns true if the value is valid for this part\n */\n validate(value: number, context?: DateValidationContext): boolean;\n\n /**\n * Spins (increments/decrements) this part's value on the given date.\n * @param delta - The amount to spin (positive = up, negative = down)\n * @param options - Spin options including the date and loop behavior\n */\n spin(delta: number, options: SpinOptions): void;\n\n /**\n * Extracts the value of this part from a Date object.\n * @param date - The date to extract from\n * @returns The formatted string value\n */\n getValue(date: Date): string;\n}\n\n/* blazorSuppress */\n/** Context for date validation (needed for day-of-month validation) */\nexport interface DateValidationContext {\n year?: number;\n month?: number;\n}\n\n//#endregion\n\n//#region Constants\n\n/** Time bounds for validation */\nconst TIME_BOUNDS = {\n hours: { min: 0, max: 23 },\n minutes: { min: 0, max: 59 },\n seconds: { min: 0, max: 59 },\n} as const;\n\n/** Date bounds for validation */\nconst DATE_BOUNDS = {\n month: { min: 0, max: 11 },\n date: { min: 1, max: 31 },\n} as const;\n\n//#endregion\n\n//#region Helper Functions\n\n/**\n * Gets the number of days in a specific month/year.\n */\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Pads a value with zeros to the specified length.\n */\nfunction padValue(value: string | number, length: number): string {\n return String(value).padStart(length, '0');\n}\n\n/**\n * Converts 24-hour format to 12-hour format.\n */\nfunction toTwelveHourFormat(hours: number): number {\n const h = hours % 12;\n return h === 0 ? 12 : h;\n}\n\n/**\n * Generic spin helper for time parts.\n */\nfunction spinTimePart(\n date: Date,\n delta: number,\n max: number,\n min: number,\n setter: (value: number) => number,\n getter: () => number,\n spinLoop: boolean\n): void {\n let value = getter.call(date) + delta;\n\n if (value > max) {\n value = spinLoop ? value % (max + 1) : max;\n } else if (value < min) {\n value = spinLoop ? max + 1 + (value % (max + 1)) : min;\n }\n\n setter.call(date, value);\n}\n\n//#endregion\n\n//#region Abstract Base Class\n\n/**\n * Abstract base class for all date parts.\n * Provides common functionality and defines the contract for concrete implementations.\n */\nabstract class DatePartBase implements IDatePart {\n readonly type: DatePartType;\n readonly start: number;\n readonly end: number;\n readonly format: string;\n\n constructor(type: DatePartType, options: DatePartOptions) {\n this.type = type;\n this.start = options.start;\n this.end = options.end;\n this.format = options.format;\n }\n\n abstract validate(value: number, context?: DateValidationContext): boolean;\n abstract spin(delta: number, options: SpinOptions): void;\n abstract getValue(date: Date): string;\n}\n\n//#endregion\n\n//#region Concrete Implementations\n\n/**\n * Year part (yyyy, yy)\n */\nclass YearPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Year, options);\n }\n\n validate(_value: number): boolean {\n // Years are always valid (no upper bound)\n return _value >= 0;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date } = options;\n const maxDate = daysInMonth(date.getFullYear() + delta, date.getMonth());\n\n // Clip to max day to avoid leap year change shifting the entire value\n if (date.getDate() > maxDate) {\n date.setDate(maxDate);\n }\n\n date.setFullYear(date.getFullYear() + delta);\n }\n\n getValue(date: Date): string {\n const length = this.format.length;\n const year =\n length === 2\n ? date.getFullYear().toString().slice(-2)\n : date.getFullYear();\n return padValue(year, length);\n }\n}\n\n/**\n * Month part (MM, M)\n */\nclass MonthPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Month, options);\n }\n\n validate(value: number): boolean {\n // Month is 0-based internally, but 1-12 in display\n return value >= DATE_BOUNDS.month.min && value <= DATE_BOUNDS.month.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max } = DATE_BOUNDS.month;\n\n const maxDate = daysInMonth(date.getFullYear(), date.getMonth() + delta);\n if (date.getDate() > maxDate) {\n date.setDate(maxDate);\n }\n\n let month = date.getMonth() + delta;\n\n if (month > max) {\n month = spinLoop ? (month % max) - 1 : max;\n } else if (month < min) {\n month = spinLoop ? max + (month % max) + 1 : min;\n }\n\n date.setMonth(month);\n }\n\n getValue(date: Date): string {\n return padValue(date.getMonth() + 1, this.format.length);\n }\n}\n\n/**\n * Date (day of month) part (dd, d)\n */\nclass DateOfMonthPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Date, options);\n }\n\n validate(value: number, context?: DateValidationContext): boolean {\n if (value < DATE_BOUNDS.date.min) {\n return false;\n }\n\n if (context?.year !== undefined && context?.month !== undefined) {\n const maxDays = daysInMonth(context.year, context.month);\n return value <= maxDays;\n }\n\n return value <= DATE_BOUNDS.date.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const maxDate = daysInMonth(date.getFullYear(), date.getMonth());\n const { min } = DATE_BOUNDS.date;\n\n let dayOfMonth = date.getDate() + delta;\n\n if (dayOfMonth > maxDate) {\n dayOfMonth = spinLoop ? dayOfMonth % maxDate : maxDate;\n } else if (dayOfMonth < min) {\n dayOfMonth = spinLoop ? maxDate + (dayOfMonth % maxDate) : min;\n }\n\n date.setDate(dayOfMonth);\n }\n\n getValue(date: Date): string {\n return padValue(date.getDate(), this.format.length);\n }\n}\n\n/**\n * Hours part (HH, H, hh, h)\n */\nclass HoursPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Hours, options);\n }\n\n validate(value: number): boolean {\n return value >= TIME_BOUNDS.hours.min && value <= TIME_BOUNDS.hours.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max } = TIME_BOUNDS.hours;\n spinTimePart(date, delta, max, min, date.setHours, date.getHours, spinLoop);\n }\n\n getValue(date: Date): string {\n const isTwelveHour = this.format.includes('h');\n const hours = isTwelveHour\n ? toTwelveHourFormat(date.getHours())\n : date.getHours();\n return padValue(hours, this.format.length);\n }\n}\n\n/**\n * Minutes part (mm, m)\n */\nclass MinutesPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Minutes, options);\n }\n\n validate(value: number): boolean {\n return value >= TIME_BOUNDS.minutes.min && value <= TIME_BOUNDS.minutes.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max } = TIME_BOUNDS.minutes;\n spinTimePart(\n date,\n delta,\n max,\n min,\n date.setMinutes,\n date.getMinutes,\n spinLoop\n );\n }\n\n getValue(date: Date): string {\n return padValue(date.getMinutes(), this.format.length);\n }\n}\n\n/**\n * Seconds part (ss, s)\n */\nclass SecondsPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Seconds, options);\n }\n\n validate(value: number): boolean {\n return value >= TIME_BOUNDS.seconds.min && value <= TIME_BOUNDS.seconds.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max } = TIME_BOUNDS.seconds;\n spinTimePart(\n date,\n delta,\n max,\n min,\n date.setSeconds,\n date.getSeconds,\n spinLoop\n );\n }\n\n getValue(date: Date): string {\n return padValue(date.getSeconds(), this.format.length);\n }\n}\n\n/**\n * AM/PM part (tt, t)\n */\nclass AmPmPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.AmPm, options);\n }\n\n validate(_value: number): boolean {\n // AM/PM doesn't have numeric validation\n return true;\n }\n\n spin(_delta: number, options: SpinOptions): void {\n const { date, amPmValue, originalDate } = options;\n\n if (!amPmValue) return;\n\n const isAM = amPmValue.toLowerCase() === 'am';\n const newHours = date.getHours() + (isAM ? 12 : -12);\n date.setHours(newHours);\n\n // Prevent date rollover\n if (originalDate && date.getDate() !== originalDate.getDate()) {\n date.setTime(originalDate.getTime());\n }\n }\n\n getValue(date: Date): string {\n return date.getHours() >= 12 ? 'PM' : 'AM';\n }\n}\n\n/**\n * Literal part (separators like /, -, :, space, etc.)\n */\nclass LiteralPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Literal, options);\n }\n\n validate(_value: number): boolean {\n // Literals don't have validation\n return true;\n }\n\n spin(_delta: number, _options: SpinOptions): void {\n // Literals can't be spun\n }\n\n getValue(_date: Date): string {\n return this.format;\n }\n}\n\n//#endregion\n\n//#region Factory Function\n\n/**\n * Creates a date part instance based on the type.\n * This is the only way to create date part instances outside this module.\n *\n * @param type - The type of date part to create\n * @param options - The options for the date part\n * @returns A date part instance implementing IDatePart\n */\nexport function createDatePart(\n type: DatePartType,\n options: DatePartOptions\n): IDatePart {\n switch (type) {\n case DatePartType.Year:\n return new YearPart(options);\n case DatePartType.Month:\n return new MonthPart(options);\n case DatePartType.Date:\n return new DateOfMonthPart(options);\n case DatePartType.Hours:\n return new HoursPart(options);\n case DatePartType.Minutes:\n return new MinutesPart(options);\n case DatePartType.Seconds:\n return new SecondsPart(options);\n case DatePartType.AmPm:\n return new AmPmPart(options);\n case DatePartType.Literal:\n return new LiteralPart(options);\n default:\n throw new Error(`Unknown date part type: ${type}`);\n }\n}\n\n//#endregion\n"]}
|
|
1
|
+
{"version":3,"file":"date-part.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-part.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Date Part Classes Module\n *\n * This module provides structured classes for date/time parts used in date-time input.\n * Each date part type has its own class with specific validation and spin behavior;\n * the time part types share one class driven by a bounds/accessor lookup.\n *\n * Classes are private to this module - only types and factory function are exported.\n */\n\nimport { clamp, modulo } from '#internals/utils/math.js';\n\n//#region Types and Enums\n\nexport enum DatePart {\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n}\n\n/** Types of date/time parts that can appear in a format string */\nexport const DatePartType = {\n Month: 'month',\n Year: 'year',\n Date: 'date',\n Hours: 'hours',\n Minutes: 'minutes',\n Seconds: 'seconds',\n AmPm: 'amPm',\n Literal: 'literal',\n} as const;\n\nexport type DatePartType = (typeof DatePartType)[keyof typeof DatePartType];\n\n/** The part types that make up a calendar date. */\nexport const DATE_PART_TYPES = new Set<DatePartType>([\n DatePartType.Date,\n DatePartType.Month,\n DatePartType.Year,\n]);\n\n/** The part types that make up a time of day. */\nexport const TIME_PART_TYPES = new Set<DatePartType>([\n DatePartType.Hours,\n DatePartType.Minutes,\n DatePartType.Seconds,\n]);\n\n// Spin delta defaults\nexport const DEFAULT_DATE_PARTS_SPIN_DELTAS = Object.freeze<DatePartDeltas>({\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n});\n\n/**\n * The amounts by which each date or time part is incremented or decremented on\n * a step action in date-time input; every part defaults to `1`.\n */\nexport interface DatePartDeltas {\n /** The number of days the date part is spun by. */\n date?: number;\n /** The number of months the month part is spun by. */\n month?: number;\n /** The number of years the year part is spun by. */\n year?: number;\n /** The number of hours the hours part is spun by. */\n hours?: number;\n /** The number of minutes the minutes part is spun by. */\n minutes?: number;\n /** The number of seconds the seconds part is spun by. */\n seconds?: number;\n}\n\n/** Options for creating a date part */\nexport interface DatePartOptions {\n /** Start position in the masked string */\n start: number;\n /** End position in the masked string */\n end: number;\n /** The format string for this part (e.g., 'MM', 'yyyy') */\n format: string;\n}\n/* blazorSuppress */\n/** Options for spin operations */\nexport interface SpinOptions {\n /** The current date value */\n date: Date;\n /** Whether to loop values at boundaries */\n spinLoop: boolean;\n /** For AM/PM: the current masked value to determine AM or PM */\n amPmValue?: string;\n /** For AM/PM: the original date (for rollover prevention) */\n originalDate?: Date;\n}\n\n/**\n * Read-only interface for date part information\n * @hidden\n */\nexport interface IDatePart {\n /** The type of date part */\n readonly type: DatePartType;\n /** Start position in the masked string */\n readonly start: number;\n /** End position in the masked string */\n readonly end: number;\n /** The format string for this part */\n readonly format: string;\n\n /**\n * Validates a numeric value for this part.\n * @param value - The value to validate\n * @param context - Optional context (year, month) for date-dependent validation\n * @returns true if the value is valid for this part\n */\n validate(value: number, context?: DateValidationContext): boolean;\n\n /**\n * Spins (increments/decrements) this part's value on the given date.\n * @param delta - The amount to spin (positive = up, negative = down)\n * @param options - Spin options including the date and loop behavior\n */\n spin(delta: number, options: SpinOptions): void;\n\n /**\n * Extracts the value of this part from a Date object.\n * @param date - The date to extract from\n * @returns The formatted string value\n */\n getValue(date: Date): string;\n}\n\n/* blazorSuppress */\n/** Context for date validation (needed for day-of-month validation) */\nexport interface DateValidationContext {\n year?: number;\n month?: number;\n}\n\n//#endregion\n\n//#region Constants\n\ntype TimePartType =\n | typeof DatePartType.Hours\n | typeof DatePartType.Minutes\n | typeof DatePartType.Seconds;\n\n/** Per-part bounds and `Date` accessors driving the shared {@link TimePart}. */\ninterface TimePartConfig {\n /** Inclusive lower bound for validation and spinning. */\n min: number;\n /** Inclusive upper bound for validation and spinning. */\n max: number;\n get(date: Date): number;\n set(date: Date, value: number): void;\n /** Maps the raw value to its rendered form - 12-hour hours, say. */\n display?(value: number, format: string): number;\n}\n\nconst TIME_PART_CONFIG: Record<TimePartType, TimePartConfig> = {\n hours: {\n min: 0,\n max: 23,\n get: (date) => date.getHours(),\n set: (date, value) => date.setHours(value),\n display: (value, format) =>\n format.includes('h') ? toTwelveHourFormat(value) : value,\n },\n minutes: {\n min: 0,\n max: 59,\n get: (date) => date.getMinutes(),\n set: (date, value) => date.setMinutes(value),\n },\n seconds: {\n min: 0,\n max: 59,\n get: (date) => date.getSeconds(),\n set: (date, value) => date.setSeconds(value),\n },\n};\n\n/** Date bounds for validation */\nconst DATE_BOUNDS = {\n month: { min: 0, max: 11 },\n date: { min: 1, max: 31 },\n} as const;\n\n//#endregion\n\n//#region Helper Functions\n\n/**\n * Gets the number of days in a specific month/year.\n */\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Pads a value with zeros to the specified length.\n */\nfunction padValue(value: string | number, length: number): string {\n return String(value).padStart(length, '0');\n}\n\n/**\n * Converts 24-hour format to 12-hour format.\n */\nfunction toTwelveHourFormat(hours: number): number {\n const h = hours % 12;\n return h === 0 ? 12 : h;\n}\n\n/**\n * Wraps a spun value around the inclusive `[min, max]` range, or clamps it to\n * the nearest bound when looping is off.\n */\nfunction wrapOrClamp(\n value: number,\n min: number,\n max: number,\n spinLoop: boolean\n): number {\n return spinLoop\n ? min + modulo(value - min, max - min + 1)\n : clamp(value, min, max);\n}\n\n//#endregion\n\n//#region Abstract Base Class\n\n/**\n * Abstract base class for all date parts.\n * Provides common functionality and defines the contract for concrete implementations.\n */\nabstract class DatePartBase implements IDatePart {\n readonly type: DatePartType;\n readonly start: number;\n readonly end: number;\n readonly format: string;\n\n constructor(type: DatePartType, options: DatePartOptions) {\n this.type = type;\n this.start = options.start;\n this.end = options.end;\n this.format = options.format;\n }\n\n abstract validate(value: number, context?: DateValidationContext): boolean;\n abstract spin(delta: number, options: SpinOptions): void;\n abstract getValue(date: Date): string;\n}\n\n//#endregion\n\n//#region Concrete Implementations\n\n/**\n * Year part (yyyy, yy)\n */\nclass YearPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Year, options);\n }\n\n validate(_value: number): boolean {\n // Years are always valid (no upper bound)\n return _value >= 0;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date } = options;\n const maxDate = daysInMonth(date.getFullYear() + delta, date.getMonth());\n\n // Clip to max day to avoid leap year change shifting the entire value\n if (date.getDate() > maxDate) {\n date.setDate(maxDate);\n }\n\n date.setFullYear(date.getFullYear() + delta);\n }\n\n getValue(date: Date): string {\n const length = this.format.length;\n const year =\n length === 2\n ? date.getFullYear().toString().slice(-2)\n : date.getFullYear();\n return padValue(year, length);\n }\n}\n\n/**\n * Month part (MM, M)\n */\nclass MonthPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Month, options);\n }\n\n validate(value: number): boolean {\n // Month is 0-based internally, but 1-12 in display\n return value >= DATE_BOUNDS.month.min && value <= DATE_BOUNDS.month.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max } = DATE_BOUNDS.month;\n\n const maxDate = daysInMonth(date.getFullYear(), date.getMonth() + delta);\n if (date.getDate() > maxDate) {\n date.setDate(maxDate);\n }\n\n date.setMonth(wrapOrClamp(date.getMonth() + delta, min, max, spinLoop));\n }\n\n getValue(date: Date): string {\n return padValue(date.getMonth() + 1, this.format.length);\n }\n}\n\n/**\n * Date (day of month) part (dd, d)\n */\nclass DateOfMonthPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Date, options);\n }\n\n validate(value: number, context?: DateValidationContext): boolean {\n if (value < DATE_BOUNDS.date.min) {\n return false;\n }\n\n if (context?.year !== undefined && context?.month !== undefined) {\n const maxDays = daysInMonth(context.year, context.month);\n return value <= maxDays;\n }\n\n return value <= DATE_BOUNDS.date.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const maxDate = daysInMonth(date.getFullYear(), date.getMonth());\n const { min } = DATE_BOUNDS.date;\n\n date.setDate(wrapOrClamp(date.getDate() + delta, min, maxDate, spinLoop));\n }\n\n getValue(date: Date): string {\n return padValue(date.getDate(), this.format.length);\n }\n}\n\n/**\n * Time part (HH/hh hours, mm minutes, ss seconds) - a single implementation\n * over the per-part bounds and accessors in {@link TIME_PART_CONFIG}.\n */\nclass TimePart extends DatePartBase {\n private readonly _config: TimePartConfig;\n\n constructor(type: TimePartType, options: DatePartOptions) {\n super(type, options);\n this._config = TIME_PART_CONFIG[type];\n }\n\n validate(value: number): boolean {\n return value >= this._config.min && value <= this._config.max;\n }\n\n spin(delta: number, options: SpinOptions): void {\n const { date, spinLoop } = options;\n const { min, max, get, set } = this._config;\n\n set(date, wrapOrClamp(get(date) + delta, min, max, spinLoop));\n }\n\n getValue(date: Date): string {\n const { get, display } = this._config;\n const value = get(date);\n\n return padValue(\n display ? display(value, this.format) : value,\n this.format.length\n );\n }\n}\n\n/**\n * AM/PM part (tt, t)\n */\nclass AmPmPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.AmPm, options);\n }\n\n validate(_value: number): boolean {\n // AM/PM doesn't have numeric validation\n return true;\n }\n\n spin(_delta: number, options: SpinOptions): void {\n const { date, amPmValue, originalDate } = options;\n\n if (!amPmValue) return;\n\n const isAM = amPmValue.toLowerCase() === 'am';\n const newHours = date.getHours() + (isAM ? 12 : -12);\n date.setHours(newHours);\n\n // Prevent date rollover\n if (originalDate && date.getDate() !== originalDate.getDate()) {\n date.setTime(originalDate.getTime());\n }\n }\n\n getValue(date: Date): string {\n return date.getHours() >= 12 ? 'PM' : 'AM';\n }\n}\n\n/**\n * Literal part (separators like /, -, :, space, etc.)\n */\nclass LiteralPart extends DatePartBase {\n constructor(options: DatePartOptions) {\n super(DatePartType.Literal, options);\n }\n\n validate(_value: number): boolean {\n // Literals don't have validation\n return true;\n }\n\n spin(_delta: number, _options: SpinOptions): void {\n // Literals can't be spun\n }\n\n getValue(_date: Date): string {\n return this.format;\n }\n}\n\n//#endregion\n\n//#region Factory Function\n\n/**\n * Creates a date part instance based on the type.\n * This is the only way to create date part instances outside this module.\n *\n * @param type - The type of date part to create\n * @param options - The options for the date part\n * @returns A date part instance implementing IDatePart\n */\nexport function createDatePart(\n type: DatePartType,\n options: DatePartOptions\n): IDatePart {\n switch (type) {\n case DatePartType.Year:\n return new YearPart(options);\n case DatePartType.Month:\n return new MonthPart(options);\n case DatePartType.Date:\n return new DateOfMonthPart(options);\n case DatePartType.Hours:\n case DatePartType.Minutes:\n case DatePartType.Seconds:\n return new TimePart(type, options);\n case DatePartType.AmPm:\n return new AmPmPart(options);\n case DatePartType.Literal:\n return new LiteralPart(options);\n default:\n throw new Error(`Unknown date part type: ${type}`);\n }\n}\n\n//#endregion\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
|
|
2
|
+
import type { FormValue } from '#internals/mixins/forms/form-value.js';
|
|
2
3
|
import { type MaskSelection } from '#internals/mixins/mask-behavior.js';
|
|
3
4
|
import type { ThemingController } from '#theming/theming-controller.js';
|
|
4
5
|
import type { RangeTextSelectMode } from '../types.js';
|
|
5
|
-
import type
|
|
6
|
+
import { type DatePartDeltas, type IDatePart } from './date-part.js';
|
|
6
7
|
export type { MaskSelection };
|
|
7
8
|
declare const IgcDateTimeInputBaseComponent_base: import("../../internals/mixins/constructor.js").AbstractConstructor<import("#internals/mixins/mask-behavior.js").MaskBehaviorElementInterface> & import("../../internals/mixins/constructor.js").Constructor<import("../../internals/mixins/forms/types.js").FormRequiredInterface & import("../../internals/mixins/forms/types.js").FormAssociatedElementInterface> & typeof LitElement;
|
|
8
9
|
export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTimeInputBaseComponent_base {
|
|
9
10
|
protected abstract readonly _themes: ThemingController;
|
|
10
|
-
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "
|
|
11
|
+
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "helper-text" | "[default]" | "suffix" | "value-missing" | "custom-error" | "range-overflow" | "range-underflow">;
|
|
11
12
|
protected readonly _inputId: string;
|
|
12
13
|
protected readonly _input?: HTMLInputElement;
|
|
13
14
|
/**
|
|
@@ -20,10 +21,10 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
20
21
|
private readonly _i18nController;
|
|
21
22
|
protected _min: Date | null;
|
|
22
23
|
protected _max: Date | null;
|
|
23
|
-
protected _defaultMask: string;
|
|
24
|
-
protected _defaultDisplayFormat: string;
|
|
25
24
|
protected _displayFormat?: string;
|
|
26
25
|
protected _inputFormat?: string;
|
|
26
|
+
/** The locale-default display format, resolved by the i18n controller. */
|
|
27
|
+
protected get _defaultDisplayFormat(): string;
|
|
27
28
|
/**
|
|
28
29
|
* Whether the user has an uncommitted edit in progress.
|
|
29
30
|
*
|
|
@@ -43,6 +44,8 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
43
44
|
* @hidden @internal
|
|
44
45
|
*/
|
|
45
46
|
get _uncommittedValue(): T | null;
|
|
47
|
+
/** The spin amount for each date part - the defaults overlaid with `spinDelta`. */
|
|
48
|
+
protected get _datePartDeltas(): DatePartDeltas;
|
|
46
49
|
protected get _targetDatePart(): unknown;
|
|
47
50
|
/**
|
|
48
51
|
* Whether the control will have outlined appearance.
|
|
@@ -97,7 +100,8 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
97
100
|
*/
|
|
98
101
|
spinLoop: boolean;
|
|
99
102
|
/**
|
|
100
|
-
*
|
|
103
|
+
* The locale used to format the display value and to resolve the
|
|
104
|
+
* component's resource strings. Falls back to the global locale when not set.
|
|
101
105
|
* @attr locale
|
|
102
106
|
*/
|
|
103
107
|
set locale(value: string);
|
|
@@ -107,6 +111,7 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
107
111
|
private _handleResourceChange;
|
|
108
112
|
protected _handleDragLeave(): void;
|
|
109
113
|
protected _handleDragEnter(): void;
|
|
114
|
+
protected _handleFocus(): Promise<void>;
|
|
110
115
|
protected _handleBlur(): void;
|
|
111
116
|
/**
|
|
112
117
|
* Handles wheel events for spinning date parts.
|
|
@@ -138,6 +143,22 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
138
143
|
* programmatic `stepUp()` - there is no blur coming to commit it.
|
|
139
144
|
*/
|
|
140
145
|
protected _setDraftValue(value: T): void;
|
|
146
|
+
/**
|
|
147
|
+
* Whether the committed value is empty, i.e. gaining focus should start the
|
|
148
|
+
* edit from the empty mask rather than the formatted value.
|
|
149
|
+
*/
|
|
150
|
+
protected _isValueEmpty(): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Applies a programmatic value assignment: bails when the value is unchanged,
|
|
153
|
+
* cancels any edit in progress, and re-renders the mask from the new value.
|
|
154
|
+
*/
|
|
155
|
+
protected _applyValue(value: T | null): void;
|
|
156
|
+
/**
|
|
157
|
+
* Reads the AM/PM designator as currently typed in the mask for the given
|
|
158
|
+
* format part, so spinning it toggles from what the user sees rather than
|
|
159
|
+
* from the underlying date.
|
|
160
|
+
*/
|
|
161
|
+
protected _readAmPmFromMask(part?: IDatePart): string | undefined;
|
|
141
162
|
/** Applies the masked text to the public value without emitting anything. */
|
|
142
163
|
protected _applyDraft(): void;
|
|
143
164
|
/**
|
|
@@ -160,10 +181,7 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
160
181
|
* Applies a mask pattern to the input, parsing the format string into date parts.
|
|
161
182
|
*/
|
|
162
183
|
protected _applyMask(formatString: string): void;
|
|
163
|
-
/**
|
|
164
|
-
* Updates the default display format based on current locale.
|
|
165
|
-
*/
|
|
166
|
-
private _updateDefaultDisplayFormat;
|
|
184
|
+
/** Applies the locale-default mask, unless an explicit input format is set. */
|
|
167
185
|
protected _initializeDefaultMask(): void;
|
|
168
186
|
/**
|
|
169
187
|
* Resolves the part names for the container based on the current state.
|
|
@@ -185,7 +203,7 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
185
203
|
clear(): void;
|
|
186
204
|
protected _renderInput(): TemplateResult;
|
|
187
205
|
protected render(): import("lit-html/directive.js").DirectiveResult<typeof import("lit-html/directives/cache.js").CacheDirective>;
|
|
188
|
-
protected abstract
|
|
206
|
+
protected abstract readonly _formValue: FormValue<T | null>;
|
|
189
207
|
/** Provided by `EventEmitterMixin` in the concrete components. */
|
|
190
208
|
abstract emitEvent(name: string, init?: CustomEventInit): boolean;
|
|
191
209
|
/** The committed value of the input. */
|
|
@@ -195,7 +213,9 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
195
213
|
* Parses the current masked text into the leaf's value type.
|
|
196
214
|
*
|
|
197
215
|
* A `strict` parse mirrors the committed value semantics - an incomplete mask has
|
|
198
|
-
* no value yet and resolves to `null` rather than to a defaults-filled one.
|
|
216
|
+
* no value yet and resolves to `null` rather than to a defaults-filled one. A lenient
|
|
217
|
+
* parse completes the missing parts from their defaults, an empty mask excepted - that
|
|
218
|
+
* one holds no value to complete and resolves to `null` as well.
|
|
199
219
|
*/
|
|
200
220
|
protected abstract _parseMask(strict: boolean): T | null;
|
|
201
221
|
/** Formats a value into the editable mask. */
|
|
@@ -204,7 +224,6 @@ export declare abstract class IgcDateTimeInputBaseComponent<T> extends IgcDateTi
|
|
|
204
224
|
protected abstract _calculatePartNavigationPosition(value: string, direction: number): number;
|
|
205
225
|
protected abstract _calculateSpunValue(part: unknown, delta: number | undefined, isDecrement: boolean): T;
|
|
206
226
|
protected abstract _setCurrentDateTime(): void;
|
|
207
|
-
protected abstract _handleFocus(): Promise<void>;
|
|
208
227
|
protected abstract _getDatePartAtCursor(): unknown;
|
|
209
228
|
protected abstract _getDefaultDatePart(): unknown;
|
|
210
229
|
abstract hasDateParts(): boolean;
|
|
@@ -4,7 +4,6 @@ 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';
|
|
8
7
|
import { LitElement } from 'lit';
|
|
9
8
|
import { eventOptions, property, query } from 'lit/decorators.js';
|
|
10
9
|
import { cache } from 'lit/directives/cache.js';
|
|
@@ -14,21 +13,28 @@ import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
|
14
13
|
import { convertToDate } from '#internals/date/converters.js';
|
|
15
14
|
import { blazorDeepImport } from '#internals/decorators/blazorDeepImport.js';
|
|
16
15
|
import { shadowOptions } from '#internals/decorators/shadow-options.js';
|
|
17
|
-
import { addI18nController
|
|
16
|
+
import { addI18nController } from '#internals/i18n/i18n-controller.js';
|
|
18
17
|
import { FormAssociatedRequiredMixin } from '#internals/mixins/forms/associated-required.js';
|
|
19
18
|
import { MaskBehaviorMixin, } from '#internals/mixins/mask-behavior.js';
|
|
20
19
|
import { nextInputId, renderInputShell, resolveInputPartNames, } from '#internals/templates/input-shell.js';
|
|
21
20
|
import { renderMaskedNativeInput } from '#internals/templates/masked-input.js';
|
|
22
21
|
import { equal } from '#internals/utils/objects.js';
|
|
22
|
+
import { DatePartType, DEFAULT_DATE_PARTS_SPIN_DELTAS, } from './date-part.js';
|
|
23
23
|
import { dateTimeInputValidators } from './validators.js';
|
|
24
24
|
const Slots = setSlots('prefix', 'suffix', 'helper-text', 'value-missing', 'range-overflow', 'range-underflow', 'custom-error', 'invalid');
|
|
25
25
|
let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends MaskBehaviorMixin(FormAssociatedRequiredMixin(LitElement)) {
|
|
26
26
|
get __validators() {
|
|
27
27
|
return dateTimeInputValidators;
|
|
28
28
|
}
|
|
29
|
+
get _defaultDisplayFormat() {
|
|
30
|
+
return this._i18nController.localeDisplayFormat;
|
|
31
|
+
}
|
|
29
32
|
get _uncommittedValue() {
|
|
30
33
|
return this._isEditing ? this._parseMask(true) : this.value;
|
|
31
34
|
}
|
|
35
|
+
get _datePartDeltas() {
|
|
36
|
+
return { ...DEFAULT_DATE_PARTS_SPIN_DELTAS, ...this.spinDelta };
|
|
37
|
+
}
|
|
32
38
|
get _targetDatePart() {
|
|
33
39
|
return this._focused
|
|
34
40
|
? this._getDatePartAtCursor()
|
|
@@ -86,7 +92,6 @@ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends
|
|
|
86
92
|
});
|
|
87
93
|
this._min = null;
|
|
88
94
|
this._max = null;
|
|
89
|
-
this._defaultDisplayFormat = '';
|
|
90
95
|
this._isEditing = false;
|
|
91
96
|
this._oldValue = null;
|
|
92
97
|
this.outlined = false;
|
|
@@ -102,9 +107,6 @@ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends
|
|
|
102
107
|
.set([ctrlKey, arrowRight], this._navigateParts.bind(this, 1));
|
|
103
108
|
}
|
|
104
109
|
update(props) {
|
|
105
|
-
if (props.has('displayFormat')) {
|
|
106
|
-
this._updateDefaultDisplayFormat();
|
|
107
|
-
}
|
|
108
110
|
if (props.has('locale')) {
|
|
109
111
|
this._initializeDefaultMask();
|
|
110
112
|
}
|
|
@@ -127,6 +129,24 @@ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends
|
|
|
127
129
|
this._maskedValue = this._buildMaskedValue();
|
|
128
130
|
}
|
|
129
131
|
}
|
|
132
|
+
async _handleFocus() {
|
|
133
|
+
this._focused = true;
|
|
134
|
+
if (this.readOnly) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
this._oldValue = this.value;
|
|
138
|
+
if (this._isValueEmpty()) {
|
|
139
|
+
this._maskedValue = this._parser.emptyMask;
|
|
140
|
+
this._historyResync();
|
|
141
|
+
await this.updateComplete;
|
|
142
|
+
this.select();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (this.displayFormat !== this.inputFormat) {
|
|
146
|
+
this._updateMaskDisplay();
|
|
147
|
+
}
|
|
148
|
+
this._historyResync();
|
|
149
|
+
}
|
|
130
150
|
_handleBlur() {
|
|
131
151
|
this._focused = false;
|
|
132
152
|
this._commitEdit();
|
|
@@ -186,6 +206,22 @@ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends
|
|
|
186
206
|
this._maskedValue = next;
|
|
187
207
|
this.requestUpdate();
|
|
188
208
|
}
|
|
209
|
+
_isValueEmpty() {
|
|
210
|
+
return !this.value;
|
|
211
|
+
}
|
|
212
|
+
_applyValue(value) {
|
|
213
|
+
if (equal(this._formValue.value, value)) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this._isEditing = false;
|
|
217
|
+
this._formValue.setValueAndFormState(value);
|
|
218
|
+
this._updateMaskDisplay();
|
|
219
|
+
}
|
|
220
|
+
_readAmPmFromMask(part) {
|
|
221
|
+
return part?.type === DatePartType.AmPm
|
|
222
|
+
? this._maskedValue.substring(part.start, part.end)
|
|
223
|
+
: undefined;
|
|
224
|
+
}
|
|
189
225
|
_applyDraft() {
|
|
190
226
|
this._isEditing = false;
|
|
191
227
|
this.value = this._parseMask(true);
|
|
@@ -230,13 +266,9 @@ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends
|
|
|
230
266
|
this.placeholder = this._parser.mask;
|
|
231
267
|
}
|
|
232
268
|
}
|
|
233
|
-
_updateDefaultDisplayFormat() {
|
|
234
|
-
this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(this.locale);
|
|
235
|
-
}
|
|
236
269
|
_initializeDefaultMask() {
|
|
237
|
-
this._updateDefaultDisplayFormat();
|
|
238
270
|
if (!this._inputFormat) {
|
|
239
|
-
this._applyMask(
|
|
271
|
+
this._applyMask(this._i18nController.localeInputFormat);
|
|
240
272
|
}
|
|
241
273
|
}
|
|
242
274
|
_resolvePartNames(base) {
|