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
|
@@ -11,7 +11,6 @@ import { formatDisplayDate } from '#internals/i18n/i18n-controller.js';
|
|
|
11
11
|
import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
|
|
12
12
|
import { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';
|
|
13
13
|
import { createFormValueState } from '#internals/mixins/forms/form-value.js';
|
|
14
|
-
import { equal } from '#internals/utils/objects.js';
|
|
15
14
|
import { addThemingController } from '#theming/theming-controller.js';
|
|
16
15
|
import { DatePartType, } from '../date-time-input/date-part.js';
|
|
17
16
|
import { IgcDateTimeInputBaseComponent } from '../date-time-input/date-time-input.base.js';
|
|
@@ -34,16 +33,8 @@ export default class IgcDateRangeInputComponent extends EventEmitterMixin(IgcDat
|
|
|
34
33
|
static register() {
|
|
35
34
|
registerComponent(IgcDateRangeInputComponent);
|
|
36
35
|
}
|
|
37
|
-
get _datePartDeltas() {
|
|
38
|
-
return { date: 1, month: 1, year: 1 };
|
|
39
|
-
}
|
|
40
36
|
set value(value) {
|
|
41
|
-
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
this._isEditing = false;
|
|
45
|
-
this._formValue.setValueAndFormState(value);
|
|
46
|
-
this._updateMaskDisplay();
|
|
37
|
+
this._applyValue(value);
|
|
47
38
|
}
|
|
48
39
|
get value() {
|
|
49
40
|
return this._formValue.value;
|
|
@@ -53,23 +44,8 @@ export default class IgcDateRangeInputComponent extends EventEmitterMixin(IgcDat
|
|
|
53
44
|
this._initializeDefaultMask();
|
|
54
45
|
this._updateMaskDisplay();
|
|
55
46
|
}
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
if (this.readOnly) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
this._oldValue = this.value;
|
|
62
|
-
if (!this.value || (!this.value.start && !this.value.end)) {
|
|
63
|
-
this._maskedValue = this._parser.emptyMask;
|
|
64
|
-
this._historyResync();
|
|
65
|
-
await this.updateComplete;
|
|
66
|
-
this.select();
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (this.displayFormat !== this.inputFormat) {
|
|
70
|
-
this._updateMaskDisplay();
|
|
71
|
-
}
|
|
72
|
-
this._historyResync();
|
|
47
|
+
_isValueEmpty() {
|
|
48
|
+
return !this.value || (!this.value.start && !this.value.end);
|
|
73
49
|
}
|
|
74
50
|
_setCurrentDateTime() {
|
|
75
51
|
const today = CalendarDay.today.native;
|
|
@@ -133,9 +109,7 @@ export default class IgcDateRangeInputComponent extends EventEmitterMixin(IgcDat
|
|
|
133
109
|
}
|
|
134
110
|
const effectiveDelta = delta ?? this._datePartDeltas[range.part] ?? 1;
|
|
135
111
|
const spinAmount = effectiveDelta * (isDecrement ? -1 : 1);
|
|
136
|
-
const amPmValue = part
|
|
137
|
-
? this._maskedValue.substring(part.start, part.end)
|
|
138
|
-
: undefined;
|
|
112
|
+
const amPmValue = this._readAmPmFromMask(part);
|
|
139
113
|
return this._parser.spinDateRangePart(part, spinAmount, current, this.spinLoop, amPmValue);
|
|
140
114
|
}
|
|
141
115
|
_getDatePartAtCursor() {
|
|
@@ -164,14 +138,9 @@ export default class IgcDateRangeInputComponent extends EventEmitterMixin(IgcDat
|
|
|
164
138
|
_formatValue(value) {
|
|
165
139
|
return this._parser.formatDateRange(value);
|
|
166
140
|
}
|
|
167
|
-
_applyMask(
|
|
168
|
-
|
|
169
|
-
this._parser.mask = string;
|
|
170
|
-
this._defaultMask = string;
|
|
141
|
+
_applyMask(formatString) {
|
|
142
|
+
super._applyMask(formatString);
|
|
171
143
|
this._parser.prompt = this.prompt;
|
|
172
|
-
if (!this.placeholder || previous === this.placeholder) {
|
|
173
|
-
this.placeholder = this._parser.mask;
|
|
174
|
-
}
|
|
175
144
|
}
|
|
176
145
|
stepUp(datePart, delta) {
|
|
177
146
|
super.stepUp(datePart, delta);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-input.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { CalendarDay } from '#internals/date/model.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { formatDisplayDate } from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { equal } from '#internals/utils/objects.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport {\n type DatePart,\n type DatePartDeltas,\n DatePartType,\n} from '../date-time-input/date-part.js';\nimport { IgcDateTimeInputBaseComponent } from '../date-time-input/date-time-input.base.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport type { DateRangeValue } from '../types.js';\nimport {\n DateRangeMaskParser,\n type DateRangePart,\n DateRangePosition,\n} from './date-range-mask-parser.js';\n\nexport interface IgcDateRangeInputComponentEventMap {\n /* alternateName: inputOcurred */\n igcInput: CustomEvent<string>;\n /* blazorSuppress */\n igcChange: CustomEvent<DateRangeValue | null>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\n/* blazorSuppress */\nexport default class IgcDateRangeInputComponent extends EventEmitterMixin<\n IgcDateRangeInputComponentEventMap,\n AbstractConstructor<IgcDateTimeInputBaseComponent<DateRangeValue>>\n>(IgcDateTimeInputBaseComponent) {\n public static readonly tagName = 'igc-date-range-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDateRangeInputComponent);\n }\n\n //#region Private state and properties\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateRangeMaskParser();\n\n protected override get _datePartDeltas(): DatePartDeltas {\n return { date: 1, month: 1, year: 1 };\n }\n\n // #endregion\n\n // #region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the date range input.\n *\n * Only ever holds a committed value. While the user is typing, the intermediate\n * state lives in the masked text and is committed - together with an `igcChange`\n * event - when the edit is committed on blur.\n *\n * @attr\n */\n @property({ attribute: false })\n public override set value(value: DateRangeValue | null) {\n if (equal(this._formValue.value, value)) {\n return;\n }\n\n this._isEditing = false;\n this._formValue.setValueAndFormState(value);\n this._updateMaskDisplay();\n }\n\n public override get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n // #endregion\n\n // #region Lifecycle Hooks\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n // #endregion\n\n // #region Event Handlers Overrides\n\n protected override async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n\n if (!this.value || (!this.value.start && !this.value.end)) {\n this._maskedValue = this._parser.emptyMask;\n this._historyResync();\n await this.updateComplete;\n this.select();\n return;\n }\n\n if (this.displayFormat !== this.inputFormat) {\n this._updateMaskDisplay();\n }\n\n this._historyResync();\n }\n\n // #endregion\n\n // #region Keybindings overrides\n\n protected override _setCurrentDateTime(): void {\n const today = CalendarDay.today.native;\n this._setDraftValue({ start: today, end: today });\n this._emitInputEvent();\n }\n\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const rangeParts = this._parser.parts;\n\n const currentPart = this._parser.getPartForCursor(cursorPos);\n\n const isStartOrEndPart =\n currentPart &&\n (currentPart.position === DateRangePosition.Start ||\n currentPart.position === DateRangePosition.End);\n\n if (direction === 0) {\n // Backward: if inside a start/end part, move to its start; else, move to previous part's start\n if (isStartOrEndPart && cursorPos !== currentPart.start) {\n return currentPart.start;\n }\n const prevPart = rangeParts.findLast(\n (p) => p.type !== DatePartType.Literal && p.end < cursorPos\n );\n return prevPart?.start ?? 0;\n }\n\n // Forward: if inside a start/end part, move to its end; else, move to next part's end\n if (isStartOrEndPart && cursorPos !== currentPart.end) {\n return currentPart.end;\n }\n const nextPart = rangeParts.find(\n (p) => p.type !== DatePartType.Literal && p.start > cursorPos\n );\n return nextPart?.end ?? inputValue.length;\n }\n\n // #endregion\n\n // #region Internal API Overrides\n\n protected override _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n // If no value exists, set to today's date first\n const current = this._uncommittedValue;\n\n if (!current?.start && !current?.end) {\n const today = CalendarDay.today.native;\n this._setDraftValue({ start: today, end: today });\n const { start, end } = this._inputSelection;\n this.updateComplete.then(() =>\n this._input?.setSelectionRange(start, end)\n );\n return;\n }\n\n super._performStep(datePart, delta, isDecrement);\n }\n\n protected override _buildDisplayValue(): string {\n if (!this.value?.start && !this.value?.end) {\n return '';\n }\n\n const { start, end } = this.value;\n const startStr = start\n ? formatDisplayDate(start, this.locale, this.displayFormat)\n : '';\n const endStr = end\n ? formatDisplayDate(end, this.locale, this.displayFormat)\n : '';\n return startStr && endStr\n ? `${startStr}${this._parser.separator}${endStr}`\n : startStr || endStr;\n }\n\n protected override _calculateSpunValue(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): DateRangeValue {\n const range = datePart as DateRangePart;\n const part = this._parser.getPartByTypeAndPosition(\n range.part as DatePartType,\n range.position\n );\n\n const today = CalendarDay.today.native;\n const defaultValue = { start: today, end: today };\n const current = this._uncommittedValue;\n\n if (!part) {\n return current || defaultValue;\n }\n\n const effectiveDelta =\n delta ?? this._datePartDeltas[range.part as keyof DatePartDeltas] ?? 1;\n const spinAmount = effectiveDelta * (isDecrement ? -1 : 1);\n\n // For AM/PM spinning, extract the current AM/PM value from the mask\n const amPmValue =\n part.type === DatePartType.AmPm\n ? this._maskedValue.substring(part.start, part.end)\n : undefined;\n\n return this._parser.spinDateRangePart(\n part,\n spinAmount,\n current,\n this.spinLoop,\n amPmValue\n );\n }\n\n /**\n * Gets the date range part at the current cursor position.\n * Returns undefined if the cursor sits outside any part - in the separator, say.\n */\n protected override _getDatePartAtCursor(): DateRangePart | undefined {\n const part = this._parser.getPartForCursor(this._inputSelection.start);\n\n return part\n ? { part: part.type as DatePart, position: part.position }\n : undefined;\n }\n\n /**\n * Gets the default date range part to target when the input is not focused.\n * Returns the first date part at the start position.\n */\n protected override _getDefaultDatePart(): DateRangePart | undefined {\n const firstPart = this._parser.getFirstDatePartForPosition(\n DateRangePosition.Start\n );\n if (firstPart) {\n return {\n part: firstPart.type as DatePart,\n position: DateRangePosition.Start,\n };\n }\n\n return undefined;\n }\n\n protected override _parseMask(strict: boolean): DateRangeValue | null {\n if (strict && !this._isMaskComplete()) {\n return null;\n }\n\n const parsed = this._parser.parseDateRange(this._maskedValue);\n return parsed?.start || parsed?.end ? parsed : null;\n }\n\n protected override _formatValue(value: DateRangeValue | null): string {\n return this._parser.formatDateRange(value);\n }\n\n protected override _applyMask(string: string): void {\n const previous = this._parser.mask;\n\n this._parser.mask = string;\n this._defaultMask = string;\n this._parser.prompt = this.prompt;\n\n // Update placeholder if not set or if it matches the previous format\n if (!this.placeholder || previous === this.placeholder) {\n this.placeholder = this._parser.mask;\n }\n }\n\n // #region Public API Overrides\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DateRangePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DateRangePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n public override hasDateParts(): boolean {\n return this._parser.hasDateParts();\n }\n\n public override hasTimeParts(): boolean {\n return this._parser.hasTimeParts();\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-input': IgcDateRangeInputComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"date-range-input.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { CalendarDay } from '#internals/date/model.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { formatDisplayDate } from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport {\n type DatePart,\n type DatePartDeltas,\n DatePartType,\n} from '../date-time-input/date-part.js';\nimport { IgcDateTimeInputBaseComponent } from '../date-time-input/date-time-input.base.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport type { DateRangeValue } from '../types.js';\nimport {\n DateRangeMaskParser,\n type DateRangePart,\n DateRangePosition,\n} from './date-range-mask-parser.js';\n\nexport interface IgcDateRangeInputComponentEventMap {\n /* alternateName: inputOcurred */\n igcInput: CustomEvent<string>;\n /* blazorSuppress */\n igcChange: CustomEvent<DateRangeValue | null>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\n/* blazorSuppress */\nexport default class IgcDateRangeInputComponent extends EventEmitterMixin<\n IgcDateRangeInputComponentEventMap,\n AbstractConstructor<IgcDateTimeInputBaseComponent<DateRangeValue>>\n>(IgcDateTimeInputBaseComponent) {\n public static readonly tagName = 'igc-date-range-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDateRangeInputComponent);\n }\n\n //#region Private state and properties\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateRangeMaskParser();\n\n // #endregion\n\n // #region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the date range input.\n *\n * Only ever holds a committed value. While the user is typing, the intermediate\n * state lives in the masked text and is committed - together with an `igcChange`\n * event - when the edit is committed on blur.\n *\n * @attr\n */\n @property({ attribute: false })\n public override set value(value: DateRangeValue | null) {\n this._applyValue(value);\n }\n\n public override get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n // #endregion\n\n // #region Lifecycle Hooks\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n // #endregion\n\n // #region Event Handlers Overrides\n\n protected override _isValueEmpty(): boolean {\n return !this.value || (!this.value.start && !this.value.end);\n }\n\n // #endregion\n\n // #region Keybindings overrides\n\n protected override _setCurrentDateTime(): void {\n const today = CalendarDay.today.native;\n this._setDraftValue({ start: today, end: today });\n this._emitInputEvent();\n }\n\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const rangeParts = this._parser.parts;\n\n const currentPart = this._parser.getPartForCursor(cursorPos);\n\n const isStartOrEndPart =\n currentPart &&\n (currentPart.position === DateRangePosition.Start ||\n currentPart.position === DateRangePosition.End);\n\n if (direction === 0) {\n // Backward: if inside a start/end part, move to its start; else, move to previous part's start\n if (isStartOrEndPart && cursorPos !== currentPart.start) {\n return currentPart.start;\n }\n const prevPart = rangeParts.findLast(\n (p) => p.type !== DatePartType.Literal && p.end < cursorPos\n );\n return prevPart?.start ?? 0;\n }\n\n // Forward: if inside a start/end part, move to its end; else, move to next part's end\n if (isStartOrEndPart && cursorPos !== currentPart.end) {\n return currentPart.end;\n }\n const nextPart = rangeParts.find(\n (p) => p.type !== DatePartType.Literal && p.start > cursorPos\n );\n return nextPart?.end ?? inputValue.length;\n }\n\n // #endregion\n\n // #region Internal API Overrides\n\n protected override _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n // If no value exists, set to today's date first\n const current = this._uncommittedValue;\n\n if (!current?.start && !current?.end) {\n const today = CalendarDay.today.native;\n this._setDraftValue({ start: today, end: today });\n const { start, end } = this._inputSelection;\n this.updateComplete.then(() =>\n this._input?.setSelectionRange(start, end)\n );\n return;\n }\n\n super._performStep(datePart, delta, isDecrement);\n }\n\n protected override _buildDisplayValue(): string {\n if (!this.value?.start && !this.value?.end) {\n return '';\n }\n\n const { start, end } = this.value;\n const startStr = start\n ? formatDisplayDate(start, this.locale, this.displayFormat)\n : '';\n const endStr = end\n ? formatDisplayDate(end, this.locale, this.displayFormat)\n : '';\n return startStr && endStr\n ? `${startStr}${this._parser.separator}${endStr}`\n : startStr || endStr;\n }\n\n protected override _calculateSpunValue(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): DateRangeValue {\n const range = datePart as DateRangePart;\n const part = this._parser.getPartByTypeAndPosition(\n range.part as DatePartType,\n range.position\n );\n\n const today = CalendarDay.today.native;\n const defaultValue = { start: today, end: today };\n const current = this._uncommittedValue;\n\n if (!part) {\n return current || defaultValue;\n }\n\n const effectiveDelta =\n delta ?? this._datePartDeltas[range.part as keyof DatePartDeltas] ?? 1;\n const spinAmount = effectiveDelta * (isDecrement ? -1 : 1);\n\n // For AM/PM spinning, extract the current AM/PM value from the mask\n const amPmValue = this._readAmPmFromMask(part);\n\n return this._parser.spinDateRangePart(\n part,\n spinAmount,\n current,\n this.spinLoop,\n amPmValue\n );\n }\n\n /**\n * Gets the date range part at the current cursor position.\n * Returns undefined if the cursor sits outside any part - in the separator, say.\n */\n protected override _getDatePartAtCursor(): DateRangePart | undefined {\n const part = this._parser.getPartForCursor(this._inputSelection.start);\n\n return part\n ? { part: part.type as DatePart, position: part.position }\n : undefined;\n }\n\n /**\n * Gets the default date range part to target when the input is not focused.\n * Returns the first date part at the start position.\n */\n protected override _getDefaultDatePart(): DateRangePart | undefined {\n const firstPart = this._parser.getFirstDatePartForPosition(\n DateRangePosition.Start\n );\n if (firstPart) {\n return {\n part: firstPart.type as DatePart,\n position: DateRangePosition.Start,\n };\n }\n\n return undefined;\n }\n\n protected override _parseMask(strict: boolean): DateRangeValue | null {\n if (strict && !this._isMaskComplete()) {\n return null;\n }\n\n const parsed = this._parser.parseDateRange(this._maskedValue);\n return parsed?.start || parsed?.end ? parsed : null;\n }\n\n protected override _formatValue(value: DateRangeValue | null): string {\n return this._parser.formatDateRange(value);\n }\n\n protected override _applyMask(formatString: string): void {\n super._applyMask(formatString);\n this._parser.prompt = this.prompt;\n }\n\n // #region Public API Overrides\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DateRangePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DateRangePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n public override hasDateParts(): boolean {\n return this._parser.hasDateParts();\n }\n\n public override hasTimeParts(): boolean {\n return this._parser.hasTimeParts();\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-input': IgcDateRangeInputComponent;\n }\n}\n"]}
|
|
@@ -117,7 +117,7 @@ export default class IgcDateRangePickerComponent extends IgcDateRangePickerCompo
|
|
|
117
117
|
protected get __validators(): import("../../internals/validators.js").Validator<IgcDateRangePickerComponent>[];
|
|
118
118
|
protected readonly _inputId: string;
|
|
119
119
|
protected readonly _themes: import("#theming/theming-controller.js").ThemingController;
|
|
120
|
-
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "title" | "prefix" | "[default]" | "actions" | "separator" | "suffix" | "
|
|
120
|
+
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "title" | "prefix" | "helper-text" | "[default]" | "actions" | "separator" | "suffix" | "value-missing" | "custom-error" | "range-overflow" | "range-underflow" | "clear-icon" | "calendar-icon-open" | "calendar-icon" | "header-date" | "bad-input" | "prefix-start" | "prefix-end" | "suffix-start" | "suffix-end" | "clear-icon-start" | "clear-icon-end" | "calendar-icon-start" | "calendar-icon-end" | "calendar-icon-open-start" | "calendar-icon-open-end">;
|
|
121
121
|
/**
|
|
122
122
|
* For now we use the core validation strings internally only, to avoid mixing with old resources by users.
|
|
123
123
|
* To Do: Update resourceStrings type when the IgcDateRangePickerResourceStrings is changed to IDateRangePickerResourceStrings
|
|
@@ -125,8 +125,6 @@ export default class IgcDateRangePickerComponent extends IgcDateRangePickerCompo
|
|
|
125
125
|
protected readonly _i18nController: import("#internals/i18n/i18n-controller.js").I18nController<IgcDateRangePickerResourceStrings | DateRangePickerResourceStringsType>;
|
|
126
126
|
protected readonly _formValue: import("#internals/mixins/forms/form-value.js").FormValue<DateRangeValue | null>;
|
|
127
127
|
protected _visibleMonths: number;
|
|
128
|
-
private _localeDisplayFormat;
|
|
129
|
-
private _defaultMask;
|
|
130
128
|
private _placeholder?;
|
|
131
129
|
/** The range reflected in the calendar, committed or still being typed. */
|
|
132
130
|
private _calendarRange;
|
|
@@ -229,7 +227,6 @@ export default class IgcDateRangePickerComponent extends IgcDateRangePickerCompo
|
|
|
229
227
|
protected _handleInputChange(event: CustomEvent<Date | null>): void;
|
|
230
228
|
protected _handleDateRangeInput(event: CustomEvent<string>): Promise<void>;
|
|
231
229
|
protected _handleDateRangeInputChange(event: CustomEvent<DateRangeValue | null>): void;
|
|
232
|
-
private _updateDefaultMask;
|
|
233
230
|
private _syncCalendarRange;
|
|
234
231
|
private _syncEditors;
|
|
235
232
|
protected _revertValue(): void;
|
|
@@ -268,7 +265,7 @@ export default class IgcDateRangePickerComponent extends IgcDateRangePickerCompo
|
|
|
268
265
|
* with the cancel/done buttons rendered in its footer.
|
|
269
266
|
*/
|
|
270
267
|
protected _renderActions(): TemplateResult<1>;
|
|
271
|
-
protected _renderPredefinedRanges(): TemplateResult<1
|
|
268
|
+
protected _renderPredefinedRanges(): typeof nothing | TemplateResult<1>;
|
|
272
269
|
protected _renderPickerContent(id: string): TemplateResult<1>;
|
|
273
270
|
protected _renderDialogFooter(): TemplateResult<1>;
|
|
274
271
|
protected _renderInput(id: string, picker?: DateRangePosition.Start | DateRangePosition.End): TemplateResult<1>;
|
|
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
var IgcDateRangePickerComponent_1;
|
|
8
|
-
import { CalendarResourceStringsEN, DateRangePickerResourceStringsEN,
|
|
8
|
+
import { CalendarResourceStringsEN, DateRangePickerResourceStringsEN, } from 'igniteui-i18n-core';
|
|
9
9
|
import { html, nothing } from 'lit';
|
|
10
10
|
import { property, query, queryAll, state } from 'lit/decorators.js';
|
|
11
11
|
import { cache } from 'lit/directives/cache.js';
|
|
@@ -14,11 +14,11 @@ import { live } from 'lit/directives/live.js';
|
|
|
14
14
|
import { addAriaProjector } from '#internals/controllers/aria-projection.js';
|
|
15
15
|
import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
16
16
|
import { convertToDateRange } from '#internals/date/converters.js';
|
|
17
|
-
import { CalendarDay } from '#internals/date/model.js';
|
|
17
|
+
import { CalendarDay, truncateTime } from '#internals/date/model.js';
|
|
18
18
|
import { blazorAdditionalDependencies } from '#internals/decorators/blazorAdditionalDependencies.js';
|
|
19
19
|
import { shadowOptions } from '#internals/decorators/shadow-options.js';
|
|
20
20
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
21
|
-
import { addI18nController, getDateTimeFormat,
|
|
21
|
+
import { addI18nController, getDateTimeFormat, } from '#internals/i18n/i18n-controller.js';
|
|
22
22
|
import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
|
|
23
23
|
import { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';
|
|
24
24
|
import { createFormValueState } from '#internals/mixins/forms/form-value.js';
|
|
@@ -79,10 +79,10 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
79
79
|
return this.resourceStrings.calendar_select_date;
|
|
80
80
|
}
|
|
81
81
|
get _defaultDisplayFormat() {
|
|
82
|
-
return this._inputFormat ?? this.
|
|
82
|
+
return this._inputFormat ?? this._i18nController.localeDisplayFormat;
|
|
83
83
|
}
|
|
84
84
|
get _defaultInputFormat() {
|
|
85
|
-
return this.
|
|
85
|
+
return this._i18nController.localeInputFormat;
|
|
86
86
|
}
|
|
87
87
|
get _projectionTarget() {
|
|
88
88
|
return this._input ?? this._inputs?.[0] ?? null;
|
|
@@ -156,7 +156,6 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
156
156
|
this._i18nController = addI18nController(this, {
|
|
157
157
|
defaultEN: Object.assign({}, DateRangePickerResourceStringsEN, CalendarResourceStringsEN),
|
|
158
158
|
resourceMapName: 'date-range-picker',
|
|
159
|
-
onResourceChange: this._updateDefaultMask,
|
|
160
159
|
});
|
|
161
160
|
this._formValue = createFormValueState(this, {
|
|
162
161
|
initialValue: { start: null, end: null },
|
|
@@ -178,9 +177,6 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
178
177
|
}
|
|
179
178
|
willUpdate(changedProperties) {
|
|
180
179
|
super.willUpdate(changedProperties);
|
|
181
|
-
if (changedProperties.has('locale')) {
|
|
182
|
-
this._updateDefaultMask();
|
|
183
|
-
}
|
|
184
180
|
if (changedProperties.has('mode') && !this._isDropDown) {
|
|
185
181
|
this.keepOpenOnSelect = true;
|
|
186
182
|
}
|
|
@@ -222,18 +218,16 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
222
218
|
return;
|
|
223
219
|
}
|
|
224
220
|
const input = event.target;
|
|
225
|
-
const
|
|
226
|
-
const newValue = draft ? CalendarDay.from(draft).native : null;
|
|
221
|
+
const newValue = truncateTime(input._uncommittedValue);
|
|
227
222
|
const range = this._getUpdatedDateRange(input, newValue);
|
|
228
223
|
this._setCalendarRangeValues(range);
|
|
229
|
-
this.
|
|
230
|
-
newValue ?? range.start ?? range.end ?? this._calendar.activeDate;
|
|
224
|
+
this._setCalendarActiveDate(newValue, range.start, range.end);
|
|
231
225
|
this.emitEvent('igcInput', { detail: range });
|
|
232
226
|
}
|
|
233
227
|
_handleInputChange(event) {
|
|
234
228
|
event.stopPropagation();
|
|
235
229
|
const input = event.target;
|
|
236
|
-
const newValue =
|
|
230
|
+
const newValue = truncateTime(input.value);
|
|
237
231
|
this._commitRange(this._getUpdatedDateRange(input, newValue));
|
|
238
232
|
}
|
|
239
233
|
async _handleDateRangeInput(event) {
|
|
@@ -252,10 +246,6 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
252
246
|
event.stopPropagation();
|
|
253
247
|
this._commitRange(event.target.value);
|
|
254
248
|
}
|
|
255
|
-
_updateDefaultMask() {
|
|
256
|
-
this._defaultMask = getDefaultDateTimeFormat(this.locale);
|
|
257
|
-
this._localeDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(this.locale);
|
|
258
|
-
}
|
|
259
249
|
async _syncCalendarRange() {
|
|
260
250
|
await this._calendar?.updateComplete;
|
|
261
251
|
this._setCalendarRangeValues();
|
|
@@ -269,8 +259,7 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
269
259
|
}
|
|
270
260
|
_setCalendarActiveDateAndViewIndex() {
|
|
271
261
|
const activeDaysViewIndex = '_activeDaysViewIndex';
|
|
272
|
-
this.
|
|
273
|
-
this._firstDefinedInRange ?? this._calendar.activeDate;
|
|
262
|
+
this._setCalendarActiveDate(this._firstDefinedInRange);
|
|
274
263
|
this._calendar[activeDaysViewIndex] = 0;
|
|
275
264
|
}
|
|
276
265
|
_getUpdatedDateRange(input, newValue) {
|
|
@@ -291,9 +280,7 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
291
280
|
CalendarDay.compare(range.start, range.end) === 0
|
|
292
281
|
? [range.start]
|
|
293
282
|
: [range.start, range.end];
|
|
294
|
-
|
|
295
|
-
this._calendar.activeDate = range.start;
|
|
296
|
-
}
|
|
283
|
+
this._setCalendarActiveDate(range.start);
|
|
297
284
|
return;
|
|
298
285
|
}
|
|
299
286
|
const first = range?.start ?? range?.end ?? null;
|
|
@@ -315,8 +302,7 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
315
302
|
}
|
|
316
303
|
_select(value, emitEvent = false) {
|
|
317
304
|
this.value = value;
|
|
318
|
-
this.
|
|
319
|
-
this._firstDefinedInRange ?? this._calendar.activeDate;
|
|
305
|
+
this._setCalendarActiveDate(this._firstDefinedInRange);
|
|
320
306
|
if (emitEvent) {
|
|
321
307
|
this.emitEvent('igcChange', { detail: this.value });
|
|
322
308
|
this._oldValue = this.value;
|
|
@@ -414,11 +400,12 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
414
400
|
</div>
|
|
415
401
|
${this._renderInput(idEnd, DateRangePosition.End)}
|
|
416
402
|
</div>
|
|
417
|
-
${this._renderPicker(idStart)} ${this.
|
|
403
|
+
${this._renderPicker(idStart)} ${this._renderValidationContainer()}
|
|
418
404
|
`;
|
|
419
405
|
}
|
|
420
406
|
_renderSingleInput(id) {
|
|
421
|
-
const format = getDateTimeFormat(this.displayFormat) ??
|
|
407
|
+
const format = getDateTimeFormat(this.displayFormat) ??
|
|
408
|
+
this._i18nController.localeDisplayFormat;
|
|
422
409
|
const hasClickHandler = !(this._isDropDown || this.readOnly);
|
|
423
410
|
return html `
|
|
424
411
|
<igc-date-range-input
|
|
@@ -443,7 +430,7 @@ let IgcDateRangePickerComponent = class IgcDateRangePickerComponent extends Even
|
|
|
443
430
|
>
|
|
444
431
|
${this._renderEditorSlots()}
|
|
445
432
|
</igc-date-range-input>
|
|
446
|
-
${this.
|
|
433
|
+
${this._renderValidationContainer()} ${this._renderPicker(id)}
|
|
447
434
|
`;
|
|
448
435
|
}
|
|
449
436
|
render() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CalendarResourceStringsEN,\n DateRangePickerResourceStringsEN,\n getDateFormatter,\n type ICalendarResourceStrings,\n type IDateRangePickerResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit';\nimport { property, query, queryAll, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { addAriaProjector } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { convertToDateRange } from '#internals/date/converters.js';\nimport { CalendarDay } from '#internals/date/model.js';\nimport { blazorAdditionalDependencies } from '#internals/decorators/blazorAdditionalDependencies.js';\nimport { shadowOptions } from '#internals/decorators/shadow-options.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { IgcDateRangePickerResourceStrings } from '#internals/i18n/EN/date-range-picker.resources.js';\nimport {\n addI18nController,\n getDateTimeFormat,\n getDefaultDateTimeFormat,\n} from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { firstOf, isEmpty, lastOf } from '#internals/utils/arrays.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { asNumber, clamp } from '#internals/utils/math.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { CalendarSelection } from '../calendar/types.js';\nimport {\n IgcDatePickerBaseComponent,\n type IgcPickerBaseEventMap,\n pickerDependencies,\n} from '../date-picker/date-picker.base.js';\nimport IgcDateTimeInputComponent from '../date-time-input/date-time-input.js';\nimport type { DateRangeValue } from '../types.js';\nimport IgcDateRangeInputComponent from './date-range-input.js';\nimport { DateRangePosition } from './date-range-mask-parser.js';\nimport { styles } from './date-range-picker.base.css.js';\nimport IgcPredefinedRangesAreaComponent from './predefined-ranges-area.js';\nimport { styles as shared } from './themes/shared/date-range-picker.common.css.js';\nimport { all } from './themes/themes.js';\nimport { dateRangeValidators, isCompleteDateRange } from './validators.js';\n\nexport type { DateRangeValue } from '../types.js';\n\n/* jsonAPIPlainObject */\n/** A predefined date range with label for {@link IgcDateRangePickerComponent.customRanges} */\nexport interface CustomDateRange {\n label: string;\n dateRange: DateRangeValue;\n}\n\n/** Either editor the picker renders the range in - the masked single one or a start/end pair. */\ntype PickerEditor = IgcDateRangeInputComponent | IgcDateTimeInputComponent;\n\nexport type IgcDateRangePickerComponentEventMap =\n IgcPickerBaseEventMap<DateRangeValue>;\n\nexport type DateRangePickerResourceStringsType =\n IDateRangePickerResourceStrings & ICalendarResourceStrings;\n\nconst nextId = createIdGenerator('date-range-picker');\nconst Slots = setSlots(\n 'prefix',\n 'prefix-start',\n 'prefix-end',\n 'suffix',\n 'suffix-start',\n 'suffix-end',\n 'helper-text',\n 'bad-input',\n 'value-missing',\n 'range-overflow',\n 'range-underflow',\n 'custom-error',\n 'invalid',\n 'title',\n 'header-date',\n 'clear-icon',\n 'clear-icon-start',\n 'clear-icon-end',\n 'calendar-icon',\n 'calendar-icon-start',\n 'calendar-icon-end',\n 'calendar-icon-open',\n 'calendar-icon-open-start',\n 'calendar-icon-open-end',\n 'actions',\n 'separator'\n);\n\n/* blazorIndirectRender */\n/* blazorSupportsVisualChildren */\n/**\n * The Date Range Picker includes a text input and a calendar pop-up, allowing users to easily select start and end dates.\n *\n * @element igc-date-range-picker\n *\n * @slot prefix - Renders content before the input (single input).\n * @slot prefix-start - Renders content before the start input (two inputs).\n * @slot prefix-end - Renders content before the end input (two inputs).\n * @slot suffix - Renders content after the input (single input).\n * @slot suffix-start - Renders content after the start input (single input).\n * @slot suffix-end - Renders content after the end input (single input).\n * @slot helper-text - Renders content below the input.\n * @slot bad-input - Renders content when the value is in the disabledDates ranges.\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 * @slot title - Renders content in the calendar title.\n * @slot header-date - Renders content instead of the current date/range in the calendar header.\n * @slot clear-icon - Renders a clear icon template.\n * @slot clear-icon-start - Renders a clear icon template for the start input (two inputs).\n * @slot clear-icon-end - Renders a clear icon template for the end input (two inputs).\n * @slot calendar-icon - Renders the icon/content for the calendar picker.\n * @slot calendar-icon-start - Renders the icon/content for the calendar picker for the start input (two inputs).\n * @slot calendar-icon-end - Renders the icon/content for the calendar picker for the end input (two inputs).\n * @slot calendar-icon-open - Renders the icon/content for the picker in open state.\n * @slot calendar-icon-open-start - Renders the icon/content for the picker in open state for the start input (two inputs).\n * @slot calendar-icon-open-end - Renders the icon/content for the picker in open state for the end input (two inputs).\n * @slot actions - Renders content in the action part of the picker in open state.\n * @slot separator - Renders the separator element between the two inputs.\n *\n * @fires igcOpening - Emitted just before the calendar popover is shown.\n * @fires igcOpened - Emitted after the calendar popover is shown.\n * @fires igcClosing - Emitted just before the calendar popover is hidden.\n * @fires igcClosed - Emitted after the calendar popover is hidden.\n * @fires igcChange - Emitted when the user modifies and commits the elements's value.\n * @fires igcInput - Emitted when when the user types in the element.\n *\n * @csspart separator - The separator element between the two inputs.\n * @csspart ranges - The wrapper that renders the custom and predefined ranges.\n * @csspart label - The label wrapper that renders content above the target input.\n * @csspart calendar-icon - The calendar icon wrapper for closed state (single input).\n * @csspart calendar-icon-start - The calendar icon wrapper for closed state for the start input (two inputs).\n * @csspart calendar-icon-end - The calendar icon wrapper for closed state for the end input (two inputs).\n * @csspart calendar-icon-open - The calendar icon wrapper for opened state (single input).\n * @csspart calendar-icon-open-start - The calendar icon wrapper for opened state for the start input (two inputs).\n * @csspart calendar-icon-open-end - The calendar icon wrapper for opened state for the end input (two inputs).\n * @csspart clear-icon - The clear icon wrapper (single input).\n * @csspart clear-icon-start - The clear icon wrapper for the start input (two inputs).\n * @csspart clear-icon-end - The clear icon wrapper for the end input (two inputs).\n * @csspart actions - The wrapper for the custom actions area.\n * @csspart clear-icon - The clear icon wrapper.\n * @csspart input - The native input element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper-text wrapper that renders content below the target input.\n * @csspart header - The calendar header element.\n * @csspart header-title - The calendar header title element.\n * @csspart header-date - The calendar header date element.\n * @csspart calendar-content - The calendar content element which contains the views and navigation elements.\n * @csspart navigation - The calendar navigation container element.\n * @csspart months-navigation - The calendar months navigation button element.\n * @csspart years-navigation - The calendar years navigation button element.\n * @csspart years-range - The calendar years range element.\n * @csspart navigation-buttons - The calendar navigation buttons container.\n * @csspart navigation-button - The calendar previous/next navigation button.\n * @csspart days-view-container - The calendar days view container element.\n * @csspart days-view - The calendar days view element.\n * @csspart months-view - The calendar months view element.\n * @csspart years-view - The calendar years view element.\n * @csspart days-row - The calendar days row element.\n * @csspart calendar-label - The calendar week header label element.\n * @csspart week-number - The calendar week number element.\n * @csspart week-number-inner - The calendar week number inner element.\n * @csspart date - The calendar date element.\n * @csspart date-inner - The calendar date inner element.\n * @csspart first - The calendar first selected date element in range selection.\n * @csspart last - The calendar last selected date element in range selection.\n * @csspart inactive - The calendar inactive date element.\n * @csspart hidden - The calendar hidden date element.\n * @csspart weekend - The calendar weekend date element.\n * @csspart range - The calendar range selected element.\n * @csspart special - The calendar special date element.\n * @csspart disabled - The calendar disabled date element.\n * @csspart single - The calendar single selected date element.\n * @csspart preview - The calendar range selection preview date element.\n * @csspart month - The calendar month element.\n * @csspart month-inner - The calendar month inner element.\n * @csspart year - The calendar year element.\n * @csspart year-inner - The calendar year inner element.\n * @csspart selected - The calendar selected state for element(s). Applies to date, month and year elements.\n * @csspart current - The calendar current state for element(s). Applies to date, month and year elements.\n */\n@blazorAdditionalDependencies(\n 'IgcCalendarComponent, IgcDateTimeInputComponent, IgcDialogComponent, IgcIconComponent, IgcChipComponent, IgcInputComponent'\n)\n@shadowOptions({ delegatesFocus: true })\nexport default class IgcDateRangePickerComponent extends EventEmitterMixin<\n IgcDateRangePickerComponentEventMap,\n AbstractConstructor<IgcDatePickerBaseComponent<DateRangeValue>>\n>(IgcDatePickerBaseComponent) {\n public static readonly tagName = 'igc-date-range-picker';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcDateRangePickerComponent,\n IgcDateRangeInputComponent,\n IgcDateTimeInputComponent,\n IgcPredefinedRangesAreaComponent,\n ...pickerDependencies\n );\n }\n\n // #region Internal state & properties\n\n protected override get __validators() {\n return dateRangeValidators;\n }\n\n protected override readonly _inputId = nextId();\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n /**\n * For now we use the core validation strings internally only, to avoid mixing with old resources by users.\n * To Do: Update resourceStrings type when the IgcDateRangePickerResourceStrings is changed to IDateRangePickerResourceStrings\n */\n protected override readonly _i18nController = addI18nController<\n IgcDateRangePickerResourceStrings | DateRangePickerResourceStringsType\n >(this, {\n defaultEN: Object.assign(\n {},\n DateRangePickerResourceStringsEN,\n CalendarResourceStringsEN\n ),\n resourceMapName: 'date-range-picker',\n onResourceChange: this._updateDefaultMask,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override _visibleMonths = 2;\n\n private _localeDisplayFormat!: string;\n private _defaultMask!: string;\n private _placeholder?: string;\n\n /** The range reflected in the calendar, committed or still being typed. */\n @state()\n private _calendarRange: Date[] | null = null;\n\n @queryAll(IgcDateTimeInputComponent.tagName)\n private readonly _inputs!: NodeListOf<IgcDateTimeInputComponent>;\n\n @query(IgcDateRangeInputComponent.tagName)\n private readonly _input!: IgcDateRangeInputComponent;\n\n /** The editors currently rendered by the picker. */\n private get _editors(): PickerEditor[] {\n return this.useTwoInputs ? Array.from(this._inputs) : [this._input];\n }\n\n /** The editor of single editor operations - the start one when the range is split. */\n private get _startEditor(): PickerEditor {\n return firstOf(this._editors);\n }\n\n private get _firstDefinedInRange(): Date | null {\n return this.value?.start ?? this.value?.end ?? null;\n }\n\n // #endregion\n\n // #region Base class hooks\n\n protected override get _value(): DateRangeValue | null {\n return this.value;\n }\n\n protected override set _value(value: DateRangeValue | null) {\n this.value = value;\n }\n\n protected override get _hasValue(): boolean {\n return this._firstDefinedInRange !== null;\n }\n\n protected override get _calendarSelection(): CalendarSelection {\n return 'range';\n }\n\n protected override get _calendarValues(): Date[] | null {\n return this._calendarRange;\n }\n\n protected override get _defaultActiveDate(): Date | null {\n return this._firstDefinedInRange;\n }\n\n protected override get _selectDateLabel(): string | undefined {\n return this.resourceStrings.calendar_select_date;\n }\n\n protected override get _defaultDisplayFormat(): string | undefined {\n return this._inputFormat ?? this._localeDisplayFormat;\n }\n\n protected override get _defaultInputFormat(): string | undefined {\n return this._defaultMask;\n }\n\n protected override get _projectionTarget() {\n // The host's associated labels are projected only onto the start input.\n return this._input ?? this._inputs?.[0] ?? null;\n }\n\n protected override _focusInput(): void {\n this._startEditor.focus();\n }\n\n protected override _focusAndSelectInput(): void {\n this.useTwoInputs ? this._inputs[0].select() : this._input.focus();\n }\n\n protected override _canCloseOnSelect(): boolean {\n return this._calendar.values.length > 1;\n }\n\n protected override _handleDismiss(): void {\n if (!this._isDropDown) {\n this._revertValue();\n }\n }\n\n protected override _syncCalendarOnToggle(): void {\n this._setCalendarActiveDateAndViewIndex();\n }\n\n protected override _clearEditors(): void {\n for (const editor of this._editors) {\n editor?.clear();\n }\n }\n\n protected override _onDialogClosing(): void {\n this._emitChangeIfDirty();\n }\n\n /** In dialog mode the range is committed by the actions of the dialog instead. */\n protected override _commitsCalendarSelection(): boolean {\n return this._isDropDown;\n }\n\n protected override _valueFromCalendarSelection(\n dates: Date[]\n ): DateRangeValue {\n // A range cleared in the calendar comes through as no dates at all\n return isEmpty(dates)\n ? { start: null, end: null }\n : { start: firstOf(dates), end: lastOf(dates) };\n }\n\n // #endregion\n\n // #region General properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the picker\n * @attr\n */\n @property({ converter: convertToDateRange })\n public set value(value: DateRangeValue | string | null | undefined) {\n this._formValue.setValueAndFormState(convertToDateRange(value));\n this._setCalendarRangeValues();\n }\n\n public get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n /**\n * The number of months displayed in the calendar.\n * @attr visible-months\n * @default 2\n */\n @property({ type: Number, attribute: 'visible-months' })\n public override set visibleMonths(value: number) {\n this._visibleMonths = clamp(asNumber(value, 2), 1, 2);\n }\n\n public override get visibleMonths(): number {\n return this._visibleMonths;\n }\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 /**\n * Use two inputs to display the date range values. Makes the input editable in dropdown mode.\n * @attr use-two-inputs\n */\n @property({ type: Boolean, reflect: true, attribute: 'use-two-inputs' })\n public useTwoInputs = false;\n\n /**\n * Whether the control will show chips with predefined ranges.\n * @attr\n */\n @property({\n type: Boolean,\n reflect: true,\n attribute: 'use-predefined-ranges',\n })\n public usePredefinedRanges = false;\n\n /** The resource strings of the date range picker. */\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 // #endregion\n\n // #region Input-related properties\n\n /**\n * The label of the start input.\n * @attr label-start\n */\n @property({ attribute: 'label-start' })\n public labelStart = '';\n\n /**\n * The label of the end input.\n * @attr label-end\n */\n @property({ attribute: 'label-end' })\n public labelEnd = '';\n\n /**\n * The placeholder text of the control (single input).\n * @attr\n */\n @property()\n public set placeholder(value: string) {\n this._placeholder = value;\n }\n\n public get placeholder(): string {\n const rangePlaceholder = `${this.inputFormat} - ${this.inputFormat}`;\n return this._placeholder ?? rangePlaceholder;\n }\n\n /**\n * The placeholder text of the start input.\n * @attr placeholder-start\n */\n @property({ attribute: 'placeholder-start' })\n public placeholderStart = '';\n\n /**\n * The placeholder text of the end input.\n * @attr placeholder-end\n */\n @property({ attribute: 'placeholder-end' })\n public placeholderEnd = '';\n\n // #endregion\n\n // #region Life-cycle hooks\n\n constructor() {\n super();\n\n // The base class projector covers the start editor. In two-input mode the\n // end editor needs the picker popup semantics as well, labels excluded.\n addAriaProjector(this, {\n target: () => this._inputs[1] ?? null,\n state: () => ({ hasPopup: 'dialog' }),\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('locale')) {\n this._updateDefaultMask();\n }\n\n if (changedProperties.has('mode') && !this._isDropDown) {\n this.keepOpenOnSelect = true;\n }\n\n // The editors are swapped by the render below, so both the range and the\n // delegated validity are re-applied once the new ones are in place.\n if (changedProperties.has('useTwoInputs')) {\n this._syncEditors();\n } else if (changedProperties.has('mode')) {\n this._syncCalendarRange();\n }\n }\n\n protected override firstUpdated() {\n this._delegateInputsValidity();\n }\n\n protected override formResetCallback() {\n super.formResetCallback();\n this._setCalendarRangeValues();\n }\n\n // #endregion\n\n // #region Public API methods\n\n /* blazorSuppress */\n /** @internal */\n public hasDateParts(): boolean {\n return this._startEditor.hasDateParts();\n }\n\n /* blazorSuppress */\n /** @internal */\n public hasTimeParts(): boolean {\n return this._startEditor.hasTimeParts();\n }\n\n /** Selects a date range value in the picker */\n public select(value: DateRangeValue | null): void {\n this._select(value);\n }\n\n // #endregion\n\n // #region Event handlers\n\n protected _dialogCancel() {\n this._revertValue();\n this._hide(true);\n }\n\n protected _dialogDone() {\n this._emitChangeIfDirty();\n this._hide(true);\n }\n\n protected _handleInput(event: CustomEvent<string>) {\n event.stopPropagation();\n if (this.nonEditable) {\n event.preventDefault();\n return;\n }\n\n const input = event.target as IgcDateTimeInputComponent;\n const draft = input._uncommittedValue;\n const newValue = draft ? CalendarDay.from(draft).native : null;\n const range = this._getUpdatedDateRange(input, newValue);\n\n this._setCalendarRangeValues(range);\n this._calendar.activeDate =\n newValue ?? range.start ?? range.end ?? this._calendar.activeDate;\n\n this.emitEvent('igcInput', { detail: range });\n }\n\n protected _handleInputChange(event: CustomEvent<Date | null>) {\n event.stopPropagation();\n\n const input = event.target as IgcDateTimeInputComponent;\n const newValue = input.value ? CalendarDay.from(input.value).native : null;\n\n this._commitRange(this._getUpdatedDateRange(input, newValue));\n }\n\n protected async _handleDateRangeInput(event: CustomEvent<string>) {\n event.stopPropagation();\n if (this.nonEditable) {\n event.preventDefault();\n return;\n }\n\n const input = event.target as IgcDateRangeInputComponent;\n const draft = input._uncommittedValue;\n\n this._setCalendarRangeValues(draft);\n this._calendar.activeDate = draft?.start;\n\n this.emitEvent('igcInput', { detail: draft });\n }\n\n protected _handleDateRangeInputChange(\n event: CustomEvent<DateRangeValue | null>\n ) {\n event.stopPropagation();\n\n this._commitRange((event.target as IgcDateRangeInputComponent).value);\n }\n\n // #endregion\n\n // #region Private methods\n\n private _updateDefaultMask(): void {\n this._defaultMask = getDefaultDateTimeFormat(this.locale);\n this._localeDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(\n this.locale\n );\n }\n\n private async _syncCalendarRange(): Promise<void> {\n await this._calendar?.updateComplete;\n this._setCalendarRangeValues();\n }\n\n private async _syncEditors(): Promise<void> {\n await this._syncCalendarRange();\n this._delegateInputsValidity();\n }\n\n protected _revertValue() {\n this.value = this._oldValue;\n }\n\n /**\n * Points the calendar at the current range, if any, and back to its first rendered\n * month.\n */\n private _setCalendarActiveDateAndViewIndex() {\n const activeDaysViewIndex = '_activeDaysViewIndex';\n\n this._calendar.activeDate =\n this._firstDefinedInRange ?? this._calendar.activeDate;\n this._calendar[activeDaysViewIndex] = 0;\n }\n\n /**\n * Composes the range from what the two editors currently hold.\n *\n * The sibling input is read through its draft rather than through the committed\n * `value`, since an edit in progress there has not reached the picker yet.\n */\n private _getUpdatedDateRange(\n input: IgcDateTimeInputComponent,\n newValue: Date | null\n ): DateRangeValue {\n const [startInput, endInput] = this._inputs;\n\n return input === startInput\n ? { start: newValue, end: endInput?._uncommittedValue ?? null }\n : { start: startInput?._uncommittedValue ?? null, end: newValue };\n }\n\n /**\n * Delegates the validity methods of the editors to the range validation of the picker.\n * The pristine check keeps a form reset, which assigns to the editors, from validating.\n */\n private _delegateInputsValidity() {\n for (const input of this._editors) {\n input.checkValidity = () =>\n !this._pristine ? this.checkValidity() : true;\n input.reportValidity = () =>\n !this._pristine ? this.reportValidity() : true;\n }\n }\n\n /**\n * Reflects a range in the calendar. Defaults to the committed value, but the input\n * handlers pass the uncommitted draft so that the calendar keeps following along\n * while the user types.\n */\n private _setCalendarRangeValues(range: DateRangeValue | null = this.value) {\n if (isCompleteDateRange(range)) {\n this._calendarRange =\n CalendarDay.compare(range.start, range.end) === 0\n ? [range.start]\n : [range.start, range.end];\n\n if (this._calendar) {\n this._calendar.activeDate = range.start;\n }\n return;\n }\n\n const first = range?.start ?? range?.end ?? null;\n this._calendarRange = first ? [first] : null;\n }\n\n /**\n * Commits a range entered through an editor, normalizing a reversed one, and notifies.\n * Assigning the value reflects the range in the calendar on its own.\n */\n private _commitRange(range: DateRangeValue | null): void {\n const { start, end } = (range && this._swapDates(range)) ?? {\n start: null,\n end: null,\n };\n\n this.value = { start, end };\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n private _swapDates(range: DateRangeValue): DateRangeValue {\n return isCompleteDateRange(range) &&\n CalendarDay.compare(range.start, range.end) >= 1\n ? { start: range.end, end: range.start }\n : range;\n }\n\n private _select(value: DateRangeValue | null, emitEvent = false) {\n this.value = value;\n this._calendar.activeDate =\n this._firstDefinedInRange ?? this._calendar.activeDate;\n\n if (emitEvent) {\n this.emitEvent('igcChange', { detail: this.value });\n this._oldValue = this.value;\n this._hide(true);\n }\n }\n\n // #endregion\n\n // #region Rendering\n\n /**\n * Custom actions stay in the body of the dialog, so that they do not collide\n * with the cancel/done buttons rendered in its footer.\n */\n protected override _renderActions() {\n const hasActions = this._slots.hasAssignedElements('actions');\n const slot = this._isDropDown || hasActions ? undefined : 'footer';\n\n return html`\n <div part=\"actions\" ?hidden=${!hasActions} slot=${ifDefined(slot)}>\n <slot name=\"actions\"></slot>\n </div>\n `;\n }\n\n protected _renderPredefinedRanges() {\n const hasRanges = this.usePredefinedRanges || !isEmpty(this.customRanges);\n\n return hasRanges\n ? html`\n <igc-predefined-ranges-area\n .usePredefinedRanges=${this.usePredefinedRanges}\n .customRanges=${this.customRanges}\n .resourceStrings=${this.resourceStrings}\n @igcRangeSelect=${({ detail }: CustomEvent<DateRangeValue>) =>\n this._select(detail, this._isDropDown)}\n >\n </igc-predefined-ranges-area>\n `\n : nothing;\n }\n\n protected override _renderPickerContent(id: string) {\n return this._isDropDown\n ? html`${this._renderCalendar(id)} ${this._renderPredefinedRanges()}\n ${this._renderActions()}`\n : html`${this._renderCalendar(id)} ${this._renderActions()}\n ${this._renderPredefinedRanges()}`;\n }\n\n protected override _renderDialogFooter() {\n const isIndigo = this._themes.theme === 'indigo';\n\n return html`\n <igc-button\n slot=\"footer\"\n @click=${this._dialogCancel}\n variant=${isIndigo ? 'outlined' : 'flat'}\n >${this.resourceStrings.date_range_picker_cancel_button}</igc-button\n >\n <igc-button\n slot=\"footer\"\n @click=${this._dialogDone}\n variant=${isIndigo ? 'contained' : 'flat'}\n >${this.resourceStrings.date_range_picker_done_button}</igc-button\n >\n `;\n }\n\n protected _renderInput(\n id: string,\n picker:\n | DateRangePosition.Start\n | DateRangePosition.End = DateRangePosition.Start\n ) {\n const isStart = picker === DateRangePosition.Start;\n const placeholder = isStart ? this.placeholderStart : this.placeholderEnd;\n const label = isStart ? this.labelStart : this.labelEnd;\n const format = getDateTimeFormat(this._displayFormat);\n const value = isStart ? this.value?.start : this.value?.end;\n const hasClickHandler = !(this._isDropDown || this.readOnly);\n\n return html`\n <igc-date-time-input\n id=${id}\n input-format=${ifDefined(this._inputFormat)}\n display-format=${ifDefined(format)}\n ?disabled=${this.disabled}\n ?readonly=${this._isEditorReadOnly}\n .value=${value ?? null}\n .locale=${live(this.locale)}\n .prompt=${this.prompt}\n .outlined=${this.outlined}\n .placeholder=${placeholder}\n .min=${this._min}\n .max=${this._max}\n label=${label}\n ?invalid=${live(this.invalid)}\n @igcChange=${this._handleInputChange}\n @igcInput=${this._handleInput}\n @keydown=${this._handleEnterKeydown}\n @click=${bindIf(hasClickHandler, this._handleInputClick)}\n exportparts=\"input, label, prefix, suffix\"\n >\n ${this._renderEditorSlots(`-${picker}`)}\n </igc-date-time-input>\n `;\n }\n\n private _renderInputs(idStart: string, idEnd: string) {\n return html`\n <div part=\"inputs\">\n ${this._renderInput(idStart, DateRangePosition.Start)}\n <div part=\"separator\">\n <slot name=\"separator\">\n ${this.resourceStrings.date_range_picker_date_separator}\n </slot>\n </div>\n ${this._renderInput(idEnd, DateRangePosition.End)}\n </div>\n ${this._renderPicker(idStart)} ${this._renderHelperText()}\n `;\n }\n\n private _renderSingleInput(id: string) {\n const format =\n getDateTimeFormat(this.displayFormat) ?? this._localeDisplayFormat;\n const hasClickHandler = !(this._isDropDown || this.readOnly);\n\n return html`\n <igc-date-range-input\n id=${id}\n .value=${live(this.value)}\n .placeholder=${this.placeholder}\n label=${this.label}\n ?readonly=${this._isEditorReadOnly}\n ?required=${this.required}\n .outlined=${this.outlined}\n ?invalid=${live(this.invalid)}\n .disabled=${this.disabled}\n .inputFormat=${live(this.inputFormat)}\n .displayFormat=${live(format)}\n .locale=${live(this.locale)}\n .prompt=${this.prompt}\n @igcInput=${this._handleDateRangeInput}\n @igcChange=${this._handleDateRangeInputChange}\n @keydown=${this._handleEnterKeydown}\n @click=${bindIf(hasClickHandler, this._handleInputClick)}\n exportparts=\"input, label, prefix, suffix\"\n >\n ${this._renderEditorSlots()}\n </igc-date-range-input>\n ${this._renderHelperText()} ${this._renderPicker(id)}\n `;\n }\n\n protected override render(): TemplateResult {\n const id = this.id || this._inputId;\n\n return html`${cache(\n !this.useTwoInputs\n ? this._renderSingleInput(id)\n : this._renderInputs(`${id}-start`, `${id}-end`)\n )}`;\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-picker': IgcDateRangePickerComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"date-range-picker.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CalendarResourceStringsEN,\n DateRangePickerResourceStringsEN,\n type ICalendarResourceStrings,\n type IDateRangePickerResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit';\nimport { property, query, queryAll, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { addAriaProjector } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { convertToDateRange } from '#internals/date/converters.js';\nimport { CalendarDay, truncateTime } from '#internals/date/model.js';\nimport { blazorAdditionalDependencies } from '#internals/decorators/blazorAdditionalDependencies.js';\nimport { shadowOptions } from '#internals/decorators/shadow-options.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { IgcDateRangePickerResourceStrings } from '#internals/i18n/EN/date-range-picker.resources.js';\nimport {\n addI18nController,\n getDateTimeFormat,\n} from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueDateRangeTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { firstOf, isEmpty, lastOf } from '#internals/utils/arrays.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { asNumber, clamp } from '#internals/utils/math.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { CalendarSelection } from '../calendar/types.js';\nimport {\n IgcDatePickerBaseComponent,\n type IgcPickerBaseEventMap,\n pickerDependencies,\n} from '../date-picker/date-picker.base.js';\nimport IgcDateTimeInputComponent from '../date-time-input/date-time-input.js';\nimport type { DateRangeValue } from '../types.js';\nimport IgcDateRangeInputComponent from './date-range-input.js';\nimport { DateRangePosition } from './date-range-mask-parser.js';\nimport { styles } from './date-range-picker.base.css.js';\nimport IgcPredefinedRangesAreaComponent from './predefined-ranges-area.js';\nimport { styles as shared } from './themes/shared/date-range-picker.common.css.js';\nimport { all } from './themes/themes.js';\nimport { dateRangeValidators, isCompleteDateRange } from './validators.js';\n\nexport type { DateRangeValue } from '../types.js';\n\n/* jsonAPIPlainObject */\n/** A predefined date range with label for {@link IgcDateRangePickerComponent.customRanges} */\nexport interface CustomDateRange {\n label: string;\n dateRange: DateRangeValue;\n}\n\n/** Either editor the picker renders the range in - the masked single one or a start/end pair. */\ntype PickerEditor = IgcDateRangeInputComponent | IgcDateTimeInputComponent;\n\nexport type IgcDateRangePickerComponentEventMap =\n IgcPickerBaseEventMap<DateRangeValue>;\n\nexport type DateRangePickerResourceStringsType =\n IDateRangePickerResourceStrings & ICalendarResourceStrings;\n\nconst nextId = createIdGenerator('date-range-picker');\nconst Slots = setSlots(\n 'prefix',\n 'prefix-start',\n 'prefix-end',\n 'suffix',\n 'suffix-start',\n 'suffix-end',\n 'helper-text',\n 'bad-input',\n 'value-missing',\n 'range-overflow',\n 'range-underflow',\n 'custom-error',\n 'invalid',\n 'title',\n 'header-date',\n 'clear-icon',\n 'clear-icon-start',\n 'clear-icon-end',\n 'calendar-icon',\n 'calendar-icon-start',\n 'calendar-icon-end',\n 'calendar-icon-open',\n 'calendar-icon-open-start',\n 'calendar-icon-open-end',\n 'actions',\n 'separator'\n);\n\n/* blazorIndirectRender */\n/* blazorSupportsVisualChildren */\n/**\n * The Date Range Picker includes a text input and a calendar pop-up, allowing users to easily select start and end dates.\n *\n * @element igc-date-range-picker\n *\n * @slot prefix - Renders content before the input (single input).\n * @slot prefix-start - Renders content before the start input (two inputs).\n * @slot prefix-end - Renders content before the end input (two inputs).\n * @slot suffix - Renders content after the input (single input).\n * @slot suffix-start - Renders content after the start input (single input).\n * @slot suffix-end - Renders content after the end input (single input).\n * @slot helper-text - Renders content below the input.\n * @slot bad-input - Renders content when the value is in the disabledDates ranges.\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 * @slot title - Renders content in the calendar title.\n * @slot header-date - Renders content instead of the current date/range in the calendar header.\n * @slot clear-icon - Renders a clear icon template.\n * @slot clear-icon-start - Renders a clear icon template for the start input (two inputs).\n * @slot clear-icon-end - Renders a clear icon template for the end input (two inputs).\n * @slot calendar-icon - Renders the icon/content for the calendar picker.\n * @slot calendar-icon-start - Renders the icon/content for the calendar picker for the start input (two inputs).\n * @slot calendar-icon-end - Renders the icon/content for the calendar picker for the end input (two inputs).\n * @slot calendar-icon-open - Renders the icon/content for the picker in open state.\n * @slot calendar-icon-open-start - Renders the icon/content for the picker in open state for the start input (two inputs).\n * @slot calendar-icon-open-end - Renders the icon/content for the picker in open state for the end input (two inputs).\n * @slot actions - Renders content in the action part of the picker in open state.\n * @slot separator - Renders the separator element between the two inputs.\n *\n * @fires igcOpening - Emitted just before the calendar popover is shown.\n * @fires igcOpened - Emitted after the calendar popover is shown.\n * @fires igcClosing - Emitted just before the calendar popover is hidden.\n * @fires igcClosed - Emitted after the calendar popover is hidden.\n * @fires igcChange - Emitted when the user modifies and commits the elements's value.\n * @fires igcInput - Emitted when when the user types in the element.\n *\n * @csspart separator - The separator element between the two inputs.\n * @csspart ranges - The wrapper that renders the custom and predefined ranges.\n * @csspart label - The label wrapper that renders content above the target input.\n * @csspart calendar-icon - The calendar icon wrapper for closed state (single input).\n * @csspart calendar-icon-start - The calendar icon wrapper for closed state for the start input (two inputs).\n * @csspart calendar-icon-end - The calendar icon wrapper for closed state for the end input (two inputs).\n * @csspart calendar-icon-open - The calendar icon wrapper for opened state (single input).\n * @csspart calendar-icon-open-start - The calendar icon wrapper for opened state for the start input (two inputs).\n * @csspart calendar-icon-open-end - The calendar icon wrapper for opened state for the end input (two inputs).\n * @csspart clear-icon - The clear icon wrapper (single input).\n * @csspart clear-icon-start - The clear icon wrapper for the start input (two inputs).\n * @csspart clear-icon-end - The clear icon wrapper for the end input (two inputs).\n * @csspart actions - The wrapper for the custom actions area.\n * @csspart clear-icon - The clear icon wrapper.\n * @csspart input - The native input element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper-text wrapper that renders content below the target input.\n * @csspart header - The calendar header element.\n * @csspart header-title - The calendar header title element.\n * @csspart header-date - The calendar header date element.\n * @csspart calendar-content - The calendar content element which contains the views and navigation elements.\n * @csspart navigation - The calendar navigation container element.\n * @csspart months-navigation - The calendar months navigation button element.\n * @csspart years-navigation - The calendar years navigation button element.\n * @csspart years-range - The calendar years range element.\n * @csspart navigation-buttons - The calendar navigation buttons container.\n * @csspart navigation-button - The calendar previous/next navigation button.\n * @csspart days-view-container - The calendar days view container element.\n * @csspart days-view - The calendar days view element.\n * @csspart months-view - The calendar months view element.\n * @csspart years-view - The calendar years view element.\n * @csspart days-row - The calendar days row element.\n * @csspart calendar-label - The calendar week header label element.\n * @csspart week-number - The calendar week number element.\n * @csspart week-number-inner - The calendar week number inner element.\n * @csspart date - The calendar date element.\n * @csspart date-inner - The calendar date inner element.\n * @csspart first - The calendar first selected date element in range selection.\n * @csspart last - The calendar last selected date element in range selection.\n * @csspart inactive - The calendar inactive date element.\n * @csspart hidden - The calendar hidden date element.\n * @csspart weekend - The calendar weekend date element.\n * @csspart range - The calendar range selected element.\n * @csspart special - The calendar special date element.\n * @csspart disabled - The calendar disabled date element.\n * @csspart single - The calendar single selected date element.\n * @csspart preview - The calendar range selection preview date element.\n * @csspart month - The calendar month element.\n * @csspart month-inner - The calendar month inner element.\n * @csspart year - The calendar year element.\n * @csspart year-inner - The calendar year inner element.\n * @csspart selected - The calendar selected state for element(s). Applies to date, month and year elements.\n * @csspart current - The calendar current state for element(s). Applies to date, month and year elements.\n */\n@blazorAdditionalDependencies(\n 'IgcCalendarComponent, IgcDateTimeInputComponent, IgcDialogComponent, IgcIconComponent, IgcChipComponent, IgcInputComponent'\n)\n@shadowOptions({ delegatesFocus: true })\nexport default class IgcDateRangePickerComponent extends EventEmitterMixin<\n IgcDateRangePickerComponentEventMap,\n AbstractConstructor<IgcDatePickerBaseComponent<DateRangeValue>>\n>(IgcDatePickerBaseComponent) {\n public static readonly tagName = 'igc-date-range-picker';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcDateRangePickerComponent,\n IgcDateRangeInputComponent,\n IgcDateTimeInputComponent,\n IgcPredefinedRangesAreaComponent,\n ...pickerDependencies\n );\n }\n\n // #region Internal state & properties\n\n protected override get __validators() {\n return dateRangeValidators;\n }\n\n protected override readonly _inputId = nextId();\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n /**\n * For now we use the core validation strings internally only, to avoid mixing with old resources by users.\n * To Do: Update resourceStrings type when the IgcDateRangePickerResourceStrings is changed to IDateRangePickerResourceStrings\n */\n protected override 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 protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override _visibleMonths = 2;\n\n private _placeholder?: string;\n\n /** The range reflected in the calendar, committed or still being typed. */\n @state()\n private _calendarRange: Date[] | null = null;\n\n @queryAll(IgcDateTimeInputComponent.tagName)\n private readonly _inputs!: NodeListOf<IgcDateTimeInputComponent>;\n\n @query(IgcDateRangeInputComponent.tagName)\n private readonly _input!: IgcDateRangeInputComponent;\n\n /** The editors currently rendered by the picker. */\n private get _editors(): PickerEditor[] {\n return this.useTwoInputs ? Array.from(this._inputs) : [this._input];\n }\n\n /** The editor of single editor operations - the start one when the range is split. */\n private get _startEditor(): PickerEditor {\n return firstOf(this._editors);\n }\n\n private get _firstDefinedInRange(): Date | null {\n return this.value?.start ?? this.value?.end ?? null;\n }\n\n // #endregion\n\n // #region Base class hooks\n\n protected override get _value(): DateRangeValue | null {\n return this.value;\n }\n\n protected override set _value(value: DateRangeValue | null) {\n this.value = value;\n }\n\n protected override get _hasValue(): boolean {\n return this._firstDefinedInRange !== null;\n }\n\n protected override get _calendarSelection(): CalendarSelection {\n return 'range';\n }\n\n protected override get _calendarValues(): Date[] | null {\n return this._calendarRange;\n }\n\n protected override get _defaultActiveDate(): Date | null {\n return this._firstDefinedInRange;\n }\n\n protected override get _selectDateLabel(): string | undefined {\n return this.resourceStrings.calendar_select_date;\n }\n\n protected override get _defaultDisplayFormat(): string | undefined {\n return this._inputFormat ?? this._i18nController.localeDisplayFormat;\n }\n\n protected override get _defaultInputFormat(): string | undefined {\n return this._i18nController.localeInputFormat;\n }\n\n protected override get _projectionTarget() {\n // The host's associated labels are projected only onto the start input.\n return this._input ?? this._inputs?.[0] ?? null;\n }\n\n protected override _focusInput(): void {\n this._startEditor.focus();\n }\n\n protected override _focusAndSelectInput(): void {\n this.useTwoInputs ? this._inputs[0].select() : this._input.focus();\n }\n\n protected override _canCloseOnSelect(): boolean {\n return this._calendar.values.length > 1;\n }\n\n protected override _handleDismiss(): void {\n if (!this._isDropDown) {\n this._revertValue();\n }\n }\n\n protected override _syncCalendarOnToggle(): void {\n this._setCalendarActiveDateAndViewIndex();\n }\n\n protected override _clearEditors(): void {\n for (const editor of this._editors) {\n editor?.clear();\n }\n }\n\n protected override _onDialogClosing(): void {\n this._emitChangeIfDirty();\n }\n\n /** In dialog mode the range is committed by the actions of the dialog instead. */\n protected override _commitsCalendarSelection(): boolean {\n return this._isDropDown;\n }\n\n protected override _valueFromCalendarSelection(\n dates: Date[]\n ): DateRangeValue {\n // A range cleared in the calendar comes through as no dates at all\n return isEmpty(dates)\n ? { start: null, end: null }\n : { start: firstOf(dates), end: lastOf(dates) };\n }\n\n // #endregion\n\n // #region General properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the picker\n * @attr\n */\n @property({ converter: convertToDateRange })\n public set value(value: DateRangeValue | string | null | undefined) {\n this._formValue.setValueAndFormState(convertToDateRange(value));\n this._setCalendarRangeValues();\n }\n\n public get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n /**\n * The number of months displayed in the calendar.\n * @attr visible-months\n * @default 2\n */\n @property({ type: Number, attribute: 'visible-months' })\n public override set visibleMonths(value: number) {\n this._visibleMonths = clamp(asNumber(value, 2), 1, 2);\n }\n\n public override get visibleMonths(): number {\n return this._visibleMonths;\n }\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 /**\n * Use two inputs to display the date range values. Makes the input editable in dropdown mode.\n * @attr use-two-inputs\n */\n @property({ type: Boolean, reflect: true, attribute: 'use-two-inputs' })\n public useTwoInputs = false;\n\n /**\n * Whether the control will show chips with predefined ranges.\n * @attr\n */\n @property({\n type: Boolean,\n reflect: true,\n attribute: 'use-predefined-ranges',\n })\n public usePredefinedRanges = false;\n\n /** The resource strings of the date range picker. */\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 // #endregion\n\n // #region Input-related properties\n\n /**\n * The label of the start input.\n * @attr label-start\n */\n @property({ attribute: 'label-start' })\n public labelStart = '';\n\n /**\n * The label of the end input.\n * @attr label-end\n */\n @property({ attribute: 'label-end' })\n public labelEnd = '';\n\n /**\n * The placeholder text of the control (single input).\n * @attr\n */\n @property()\n public set placeholder(value: string) {\n this._placeholder = value;\n }\n\n public get placeholder(): string {\n const rangePlaceholder = `${this.inputFormat} - ${this.inputFormat}`;\n return this._placeholder ?? rangePlaceholder;\n }\n\n /**\n * The placeholder text of the start input.\n * @attr placeholder-start\n */\n @property({ attribute: 'placeholder-start' })\n public placeholderStart = '';\n\n /**\n * The placeholder text of the end input.\n * @attr placeholder-end\n */\n @property({ attribute: 'placeholder-end' })\n public placeholderEnd = '';\n\n // #endregion\n\n // #region Life-cycle hooks\n\n constructor() {\n super();\n\n // The base class projector covers the start editor. In two-input mode the\n // end editor needs the picker popup semantics as well, labels excluded.\n addAriaProjector(this, {\n target: () => this._inputs[1] ?? null,\n state: () => ({ hasPopup: 'dialog' }),\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('mode') && !this._isDropDown) {\n this.keepOpenOnSelect = true;\n }\n\n // The editors are swapped by the render below, so both the range and the\n // delegated validity are re-applied once the new ones are in place.\n if (changedProperties.has('useTwoInputs')) {\n this._syncEditors();\n } else if (changedProperties.has('mode')) {\n this._syncCalendarRange();\n }\n }\n\n protected override firstUpdated() {\n this._delegateInputsValidity();\n }\n\n protected override formResetCallback() {\n super.formResetCallback();\n this._setCalendarRangeValues();\n }\n\n // #endregion\n\n // #region Public API methods\n\n /* blazorSuppress */\n /** @internal */\n public hasDateParts(): boolean {\n return this._startEditor.hasDateParts();\n }\n\n /* blazorSuppress */\n /** @internal */\n public hasTimeParts(): boolean {\n return this._startEditor.hasTimeParts();\n }\n\n /** Selects a date range value in the picker */\n public select(value: DateRangeValue | null): void {\n this._select(value);\n }\n\n // #endregion\n\n // #region Event handlers\n\n protected _dialogCancel() {\n this._revertValue();\n this._hide(true);\n }\n\n protected _dialogDone() {\n this._emitChangeIfDirty();\n this._hide(true);\n }\n\n protected _handleInput(event: CustomEvent<string>) {\n event.stopPropagation();\n if (this.nonEditable) {\n event.preventDefault();\n return;\n }\n\n const input = event.target as IgcDateTimeInputComponent;\n const newValue = truncateTime(input._uncommittedValue);\n const range = this._getUpdatedDateRange(input, newValue);\n\n this._setCalendarRangeValues(range);\n this._setCalendarActiveDate(newValue, range.start, range.end);\n\n this.emitEvent('igcInput', { detail: range });\n }\n\n protected _handleInputChange(event: CustomEvent<Date | null>) {\n event.stopPropagation();\n\n const input = event.target as IgcDateTimeInputComponent;\n const newValue = truncateTime(input.value);\n\n this._commitRange(this._getUpdatedDateRange(input, newValue));\n }\n\n protected async _handleDateRangeInput(event: CustomEvent<string>) {\n event.stopPropagation();\n if (this.nonEditable) {\n event.preventDefault();\n return;\n }\n\n const input = event.target as IgcDateRangeInputComponent;\n const draft = input._uncommittedValue;\n\n this._setCalendarRangeValues(draft);\n this._calendar.activeDate = draft?.start;\n\n this.emitEvent('igcInput', { detail: draft });\n }\n\n protected _handleDateRangeInputChange(\n event: CustomEvent<DateRangeValue | null>\n ) {\n event.stopPropagation();\n\n this._commitRange((event.target as IgcDateRangeInputComponent).value);\n }\n\n // #endregion\n\n // #region Private methods\n\n private async _syncCalendarRange(): Promise<void> {\n await this._calendar?.updateComplete;\n this._setCalendarRangeValues();\n }\n\n private async _syncEditors(): Promise<void> {\n await this._syncCalendarRange();\n this._delegateInputsValidity();\n }\n\n protected _revertValue() {\n this.value = this._oldValue;\n }\n\n /**\n * Points the calendar at the current range, if any, and back to its first rendered\n * month.\n */\n private _setCalendarActiveDateAndViewIndex() {\n const activeDaysViewIndex = '_activeDaysViewIndex';\n\n this._setCalendarActiveDate(this._firstDefinedInRange);\n this._calendar[activeDaysViewIndex] = 0;\n }\n\n /**\n * Composes the range from what the two editors currently hold.\n *\n * The sibling input is read through its draft rather than through the committed\n * `value`, since an edit in progress there has not reached the picker yet.\n */\n private _getUpdatedDateRange(\n input: IgcDateTimeInputComponent,\n newValue: Date | null\n ): DateRangeValue {\n const [startInput, endInput] = this._inputs;\n\n return input === startInput\n ? { start: newValue, end: endInput?._uncommittedValue ?? null }\n : { start: startInput?._uncommittedValue ?? null, end: newValue };\n }\n\n /**\n * Delegates the validity methods of the editors to the range validation of the picker.\n * The pristine check keeps a form reset, which assigns to the editors, from validating.\n */\n private _delegateInputsValidity() {\n for (const input of this._editors) {\n input.checkValidity = () =>\n !this._pristine ? this.checkValidity() : true;\n input.reportValidity = () =>\n !this._pristine ? this.reportValidity() : true;\n }\n }\n\n /**\n * Reflects a range in the calendar. Defaults to the committed value, but the input\n * handlers pass the uncommitted draft so that the calendar keeps following along\n * while the user types.\n */\n private _setCalendarRangeValues(range: DateRangeValue | null = this.value) {\n if (isCompleteDateRange(range)) {\n this._calendarRange =\n CalendarDay.compare(range.start, range.end) === 0\n ? [range.start]\n : [range.start, range.end];\n\n this._setCalendarActiveDate(range.start);\n return;\n }\n\n const first = range?.start ?? range?.end ?? null;\n this._calendarRange = first ? [first] : null;\n }\n\n /**\n * Commits a range entered through an editor, normalizing a reversed one, and notifies.\n * Assigning the value reflects the range in the calendar on its own.\n */\n private _commitRange(range: DateRangeValue | null): void {\n const { start, end } = (range && this._swapDates(range)) ?? {\n start: null,\n end: null,\n };\n\n this.value = { start, end };\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n private _swapDates(range: DateRangeValue): DateRangeValue {\n return isCompleteDateRange(range) &&\n CalendarDay.compare(range.start, range.end) >= 1\n ? { start: range.end, end: range.start }\n : range;\n }\n\n private _select(value: DateRangeValue | null, emitEvent = false) {\n this.value = value;\n this._setCalendarActiveDate(this._firstDefinedInRange);\n\n if (emitEvent) {\n this.emitEvent('igcChange', { detail: this.value });\n this._oldValue = this.value;\n this._hide(true);\n }\n }\n\n // #endregion\n\n // #region Rendering\n\n /**\n * Custom actions stay in the body of the dialog, so that they do not collide\n * with the cancel/done buttons rendered in its footer.\n */\n protected override _renderActions() {\n const hasActions = this._slots.hasAssignedElements('actions');\n const slot = this._isDropDown || hasActions ? undefined : 'footer';\n\n return html`\n <div part=\"actions\" ?hidden=${!hasActions} slot=${ifDefined(slot)}>\n <slot name=\"actions\"></slot>\n </div>\n `;\n }\n\n protected _renderPredefinedRanges() {\n const hasRanges = this.usePredefinedRanges || !isEmpty(this.customRanges);\n\n return hasRanges\n ? html`\n <igc-predefined-ranges-area\n .usePredefinedRanges=${this.usePredefinedRanges}\n .customRanges=${this.customRanges}\n .resourceStrings=${this.resourceStrings}\n @igcRangeSelect=${({ detail }: CustomEvent<DateRangeValue>) =>\n this._select(detail, this._isDropDown)}\n >\n </igc-predefined-ranges-area>\n `\n : nothing;\n }\n\n protected override _renderPickerContent(id: string) {\n return this._isDropDown\n ? html`${this._renderCalendar(id)} ${this._renderPredefinedRanges()}\n ${this._renderActions()}`\n : html`${this._renderCalendar(id)} ${this._renderActions()}\n ${this._renderPredefinedRanges()}`;\n }\n\n protected override _renderDialogFooter() {\n const isIndigo = this._themes.theme === 'indigo';\n\n return html`\n <igc-button\n slot=\"footer\"\n @click=${this._dialogCancel}\n variant=${isIndigo ? 'outlined' : 'flat'}\n >${this.resourceStrings.date_range_picker_cancel_button}</igc-button\n >\n <igc-button\n slot=\"footer\"\n @click=${this._dialogDone}\n variant=${isIndigo ? 'contained' : 'flat'}\n >${this.resourceStrings.date_range_picker_done_button}</igc-button\n >\n `;\n }\n\n protected _renderInput(\n id: string,\n picker:\n | DateRangePosition.Start\n | DateRangePosition.End = DateRangePosition.Start\n ) {\n const isStart = picker === DateRangePosition.Start;\n const placeholder = isStart ? this.placeholderStart : this.placeholderEnd;\n const label = isStart ? this.labelStart : this.labelEnd;\n const format = getDateTimeFormat(this._displayFormat);\n const value = isStart ? this.value?.start : this.value?.end;\n const hasClickHandler = !(this._isDropDown || this.readOnly);\n\n return html`\n <igc-date-time-input\n id=${id}\n input-format=${ifDefined(this._inputFormat)}\n display-format=${ifDefined(format)}\n ?disabled=${this.disabled}\n ?readonly=${this._isEditorReadOnly}\n .value=${value ?? null}\n .locale=${live(this.locale)}\n .prompt=${this.prompt}\n .outlined=${this.outlined}\n .placeholder=${placeholder}\n .min=${this._min}\n .max=${this._max}\n label=${label}\n ?invalid=${live(this.invalid)}\n @igcChange=${this._handleInputChange}\n @igcInput=${this._handleInput}\n @keydown=${this._handleEnterKeydown}\n @click=${bindIf(hasClickHandler, this._handleInputClick)}\n exportparts=\"input, label, prefix, suffix\"\n >\n ${this._renderEditorSlots(`-${picker}`)}\n </igc-date-time-input>\n `;\n }\n\n private _renderInputs(idStart: string, idEnd: string) {\n return html`\n <div part=\"inputs\">\n ${this._renderInput(idStart, DateRangePosition.Start)}\n <div part=\"separator\">\n <slot name=\"separator\">\n ${this.resourceStrings.date_range_picker_date_separator}\n </slot>\n </div>\n ${this._renderInput(idEnd, DateRangePosition.End)}\n </div>\n ${this._renderPicker(idStart)} ${this._renderValidationContainer()}\n `;\n }\n\n private _renderSingleInput(id: string) {\n const format =\n getDateTimeFormat(this.displayFormat) ??\n this._i18nController.localeDisplayFormat;\n const hasClickHandler = !(this._isDropDown || this.readOnly);\n\n return html`\n <igc-date-range-input\n id=${id}\n .value=${live(this.value)}\n .placeholder=${this.placeholder}\n label=${this.label}\n ?readonly=${this._isEditorReadOnly}\n ?required=${this.required}\n .outlined=${this.outlined}\n ?invalid=${live(this.invalid)}\n .disabled=${this.disabled}\n .inputFormat=${live(this.inputFormat)}\n .displayFormat=${live(format)}\n .locale=${live(this.locale)}\n .prompt=${this.prompt}\n @igcInput=${this._handleDateRangeInput}\n @igcChange=${this._handleDateRangeInputChange}\n @keydown=${this._handleEnterKeydown}\n @click=${bindIf(hasClickHandler, this._handleInputClick)}\n exportparts=\"input, label, prefix, suffix\"\n >\n ${this._renderEditorSlots()}\n </igc-date-range-input>\n ${this._renderValidationContainer()} ${this._renderPicker(id)}\n `;\n }\n\n protected override render(): TemplateResult {\n const id = this.id || this._inputId;\n\n return html`${cache(\n !this.useTwoInputs\n ? this._renderSingleInput(id)\n : this._renderInputs(`${id}-start`, `${id}-end`)\n )}`;\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-picker': IgcDateRangePickerComponent;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { LitElement, type PropertyValues } from 'lit';
|
|
2
2
|
import type { IgcDateRangePickerResourceStrings } from '#internals/i18n/EN/date-range-picker.resources.js';
|
|
3
3
|
import type { CustomDateRange, DateRangePickerResourceStringsType } from './date-range-picker.js';
|
|
4
4
|
/**
|
|
@@ -27,7 +27,7 @@ export default class IgcPredefinedRangesAreaComponent extends LitElement {
|
|
|
27
27
|
set resourceStrings(value: IgcDateRangePickerResourceStrings | DateRangePickerResourceStringsType);
|
|
28
28
|
get resourceStrings(): IgcDateRangePickerResourceStrings & DateRangePickerResourceStringsType;
|
|
29
29
|
constructor();
|
|
30
|
-
protected
|
|
30
|
+
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
31
31
|
private _handleRangeSelect;
|
|
32
32
|
protected _renderDateRanges(): Generator<import("lit-html").TemplateResult<1>, void, unknown>;
|
|
33
33
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
@@ -8,7 +8,6 @@ import { CalendarResourceStringsEN, DateRangePickerResourceStringsEN, } from 'ig
|
|
|
8
8
|
import { html, LitElement } from 'lit';
|
|
9
9
|
import { property, state } from 'lit/decorators.js';
|
|
10
10
|
import { CalendarDay } from '#internals/date/model.js';
|
|
11
|
-
import { watch } from '#internals/decorators/watch.js';
|
|
12
11
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
13
12
|
import { addI18nController } from '#internals/i18n/i18n-controller.js';
|
|
14
13
|
import { addThemingController } from '#theming/theming-controller.js';
|
|
@@ -39,8 +38,10 @@ export default class IgcPredefinedRangesAreaComponent extends LitElement {
|
|
|
39
38
|
this.customRanges = [];
|
|
40
39
|
addThemingController(this, all);
|
|
41
40
|
}
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
willUpdate(changedProperties) {
|
|
42
|
+
if (changedProperties.has('resourceStrings')) {
|
|
43
|
+
this._predefinedRanges = getPredefinedRanges(this.resourceStrings);
|
|
44
|
+
}
|
|
44
45
|
}
|
|
45
46
|
_handleRangeSelect(range) {
|
|
46
47
|
this.dispatchEvent(new CustomEvent('igcRangeSelect', { detail: range }));
|
|
@@ -77,9 +78,6 @@ __decorate([
|
|
|
77
78
|
__decorate([
|
|
78
79
|
property({ attribute: false })
|
|
79
80
|
], IgcPredefinedRangesAreaComponent.prototype, "resourceStrings", null);
|
|
80
|
-
__decorate([
|
|
81
|
-
watch('resourceStrings')
|
|
82
|
-
], IgcPredefinedRangesAreaComponent.prototype, "_updatePredefinedRanges", null);
|
|
83
81
|
function getPredefinedRanges(resourceStrings) {
|
|
84
82
|
const today = CalendarDay.today;
|
|
85
83
|
const ranges = [
|