@keenthemes/ktui 1.0.7 → 1.0.9
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/dist/ktui.js +16038 -17101
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/lib/cjs/components/accordion/accordion.js +20 -11
- package/lib/cjs/components/accordion/accordion.js.map +1 -1
- package/lib/cjs/components/accordion/index.js +4 -0
- package/lib/cjs/components/accordion/index.js.map +1 -1
- package/lib/cjs/components/accordion/types.js +4 -0
- package/lib/cjs/components/accordion/types.js.map +1 -1
- package/lib/cjs/components/collapse/collapse.js +13 -7
- package/lib/cjs/components/collapse/collapse.js.map +1 -1
- package/lib/cjs/components/collapse/index.js +4 -0
- package/lib/cjs/components/collapse/index.js.map +1 -1
- package/lib/cjs/components/collapse/types.js +4 -0
- package/lib/cjs/components/collapse/types.js.map +1 -1
- package/lib/cjs/components/component.js +12 -41
- package/lib/cjs/components/component.js.map +1 -1
- package/lib/cjs/components/constants.js +4 -0
- package/lib/cjs/components/constants.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.js +217 -0
- package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-sort.js +91 -0
- package/lib/cjs/components/datatable/datatable-sort.js.map +1 -0
- package/lib/cjs/components/datatable/datatable.js +294 -349
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/components/datatable/index.js +4 -0
- package/lib/cjs/components/datatable/index.js.map +1 -1
- package/lib/cjs/components/datatable/types.js +4 -0
- package/lib/cjs/components/datatable/types.js.map +1 -1
- package/lib/cjs/components/datepicker/calendar.js +1061 -0
- package/lib/cjs/components/datepicker/calendar.js.map +1 -0
- package/lib/cjs/components/datepicker/config.js +332 -0
- package/lib/cjs/components/datepicker/config.js.map +1 -0
- package/lib/cjs/components/datepicker/datepicker.js +949 -0
- package/lib/cjs/components/datepicker/datepicker.js.map +1 -0
- package/lib/cjs/components/datepicker/dropdown.js +635 -0
- package/lib/cjs/components/datepicker/dropdown.js.map +1 -0
- package/lib/cjs/components/datepicker/events.js +129 -0
- package/lib/cjs/components/datepicker/events.js.map +1 -0
- package/lib/cjs/components/datepicker/index.js +13 -0
- package/lib/cjs/components/datepicker/index.js.map +1 -0
- package/lib/cjs/components/datepicker/keyboard.js +536 -0
- package/lib/cjs/components/datepicker/keyboard.js.map +1 -0
- package/lib/cjs/components/datepicker/locales.js +78 -0
- package/lib/cjs/components/datepicker/locales.js.map +1 -0
- package/lib/cjs/components/datepicker/templates.js +403 -0
- package/lib/cjs/components/datepicker/templates.js.map +1 -0
- package/lib/cjs/components/datepicker/types.js +23 -0
- package/lib/cjs/components/datepicker/types.js.map +1 -0
- package/lib/cjs/components/datepicker/utils.js +524 -0
- package/lib/cjs/components/datepicker/utils.js.map +1 -0
- package/lib/cjs/components/dismiss/dismiss.js +10 -6
- package/lib/cjs/components/dismiss/dismiss.js.map +1 -1
- package/lib/cjs/components/dismiss/index.js +4 -0
- package/lib/cjs/components/dismiss/index.js.map +1 -1
- package/lib/cjs/components/dismiss/types.js +4 -0
- package/lib/cjs/components/dismiss/types.js.map +1 -1
- package/lib/cjs/components/drawer/drawer.js +54 -28
- package/lib/cjs/components/drawer/drawer.js.map +1 -1
- package/lib/cjs/components/drawer/index.js +4 -0
- package/lib/cjs/components/drawer/index.js.map +1 -1
- package/lib/cjs/components/drawer/types.js +4 -0
- package/lib/cjs/components/drawer/types.js.map +1 -1
- package/lib/cjs/components/dropdown/dropdown.js +145 -115
- package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
- package/lib/cjs/components/dropdown/index.js +4 -0
- package/lib/cjs/components/dropdown/index.js.map +1 -1
- package/lib/cjs/components/dropdown/types.js +4 -0
- package/lib/cjs/components/dropdown/types.js.map +1 -1
- package/lib/cjs/components/image-input/image-input.js +21 -16
- package/lib/cjs/components/image-input/image-input.js.map +1 -1
- package/lib/cjs/components/image-input/index.js +4 -0
- package/lib/cjs/components/image-input/index.js.map +1 -1
- package/lib/cjs/components/image-input/types.js +4 -0
- package/lib/cjs/components/image-input/types.js.map +1 -1
- package/lib/cjs/components/modal/index.js +4 -0
- package/lib/cjs/components/modal/index.js.map +1 -1
- package/lib/cjs/components/modal/modal.js +26 -19
- package/lib/cjs/components/modal/modal.js.map +1 -1
- package/lib/cjs/components/modal/types.js +4 -0
- package/lib/cjs/components/modal/types.js.map +1 -1
- package/lib/cjs/components/reparent/index.js +4 -0
- package/lib/cjs/components/reparent/index.js.map +1 -1
- package/lib/cjs/components/reparent/reparent.js +13 -5
- package/lib/cjs/components/reparent/reparent.js.map +1 -1
- package/lib/cjs/components/reparent/types.js +4 -0
- package/lib/cjs/components/reparent/types.js.map +1 -1
- package/lib/cjs/components/scrollable/index.js +4 -0
- package/lib/cjs/components/scrollable/index.js.map +1 -1
- package/lib/cjs/components/scrollable/scrollable.js +17 -10
- package/lib/cjs/components/scrollable/scrollable.js.map +1 -1
- package/lib/cjs/components/scrollable/types.js +4 -0
- package/lib/cjs/components/scrollable/types.js.map +1 -1
- package/lib/cjs/components/scrollspy/index.js +4 -0
- package/lib/cjs/components/scrollspy/index.js.map +1 -1
- package/lib/cjs/components/scrollspy/scrollspy.js +28 -17
- package/lib/cjs/components/scrollspy/scrollspy.js.map +1 -1
- package/lib/cjs/components/scrollspy/types.js +4 -0
- package/lib/cjs/components/scrollspy/types.js.map +1 -1
- package/lib/cjs/components/scrollto/index.js +4 -0
- package/lib/cjs/components/scrollto/index.js.map +1 -1
- package/lib/cjs/components/scrollto/scrollto.js +14 -8
- package/lib/cjs/components/scrollto/scrollto.js.map +1 -1
- package/lib/cjs/components/scrollto/types.js +4 -0
- package/lib/cjs/components/scrollto/types.js.map +1 -1
- package/lib/cjs/components/select/combobox.js +237 -0
- package/lib/cjs/components/select/combobox.js.map +1 -0
- package/lib/cjs/components/select/config.js +226 -0
- package/lib/cjs/components/select/config.js.map +1 -0
- package/lib/cjs/components/select/dropdown.js +429 -0
- package/lib/cjs/components/select/dropdown.js.map +1 -0
- package/lib/cjs/components/select/index.js +24 -0
- package/lib/cjs/components/select/index.js.map +1 -0
- package/lib/cjs/components/select/option.js +53 -0
- package/lib/cjs/components/select/option.js.map +1 -0
- package/lib/cjs/components/select/remote.js +414 -0
- package/lib/cjs/components/select/remote.js.map +1 -0
- package/lib/cjs/components/select/search.js +339 -0
- package/lib/cjs/components/select/search.js.map +1 -0
- package/lib/cjs/components/select/select.js +1538 -0
- package/lib/cjs/components/select/select.js.map +1 -0
- package/lib/cjs/components/select/tags.js +110 -0
- package/lib/cjs/components/select/tags.js.map +1 -0
- package/lib/cjs/components/select/templates.js +337 -0
- package/lib/cjs/components/select/templates.js.map +1 -0
- package/lib/cjs/components/select/types.js +19 -0
- package/lib/cjs/components/select/types.js.map +1 -0
- package/lib/cjs/components/select/utils.js +606 -0
- package/lib/cjs/components/select/utils.js.map +1 -0
- package/lib/cjs/components/stepper/index.js +4 -0
- package/lib/cjs/components/stepper/index.js.map +1 -1
- package/lib/cjs/components/stepper/stepper.js +20 -13
- package/lib/cjs/components/stepper/stepper.js.map +1 -1
- package/lib/cjs/components/stepper/types.js +4 -0
- package/lib/cjs/components/stepper/types.js.map +1 -1
- package/lib/cjs/components/sticky/index.js +4 -0
- package/lib/cjs/components/sticky/index.js.map +1 -1
- package/lib/cjs/components/sticky/sticky.js +60 -38
- package/lib/cjs/components/sticky/sticky.js.map +1 -1
- package/lib/cjs/components/sticky/types.js +4 -0
- package/lib/cjs/components/sticky/types.js.map +1 -1
- package/lib/cjs/components/tabs/index.js +4 -0
- package/lib/cjs/components/tabs/index.js.map +1 -1
- package/lib/cjs/components/tabs/tabs.js +34 -24
- package/lib/cjs/components/tabs/tabs.js.map +1 -1
- package/lib/cjs/components/tabs/types.js +4 -0
- package/lib/cjs/components/tabs/types.js.map +1 -1
- package/lib/cjs/components/theme-switch/index.js +10 -0
- package/lib/cjs/components/theme-switch/index.js.map +1 -0
- package/lib/cjs/components/theme-switch/theme-switch.js +143 -0
- package/lib/cjs/components/theme-switch/theme-switch.js.map +1 -0
- package/lib/cjs/components/theme-switch/types.js +7 -0
- package/lib/cjs/components/theme-switch/types.js.map +1 -0
- package/lib/cjs/components/toggle/index.js +4 -0
- package/lib/cjs/components/toggle/index.js.map +1 -1
- package/lib/cjs/components/toggle/toggle.js +11 -7
- package/lib/cjs/components/toggle/toggle.js.map +1 -1
- package/lib/cjs/components/toggle/types.js +4 -0
- package/lib/cjs/components/toggle/types.js.map +1 -1
- package/lib/cjs/components/toggle-password/index.js +4 -0
- package/lib/cjs/components/toggle-password/index.js.map +1 -1
- package/lib/cjs/components/toggle-password/toggle-password.js +12 -7
- package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -1
- package/lib/cjs/components/toggle-password/types.js +4 -0
- package/lib/cjs/components/toggle-password/types.js.map +1 -1
- package/lib/cjs/components/tooltip/index.js +4 -0
- package/lib/cjs/components/tooltip/index.js.map +1 -1
- package/lib/cjs/components/tooltip/tooltip.js +51 -21
- package/lib/cjs/components/tooltip/tooltip.js.map +1 -1
- package/lib/cjs/components/tooltip/types.js +4 -0
- package/lib/cjs/components/tooltip/types.js.map +1 -1
- package/lib/cjs/helpers/data.js +5 -1
- package/lib/cjs/helpers/data.js.map +1 -1
- package/lib/cjs/helpers/dom.js +34 -29
- package/lib/cjs/helpers/dom.js.map +1 -1
- package/lib/cjs/helpers/event-handler.js +5 -1
- package/lib/cjs/helpers/event-handler.js.map +1 -1
- package/lib/cjs/helpers/utils.js +65 -11
- package/lib/cjs/helpers/utils.js.map +1 -1
- package/lib/cjs/index.js +18 -22
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/types.js +4 -0
- package/lib/cjs/types.js.map +1 -1
- package/lib/esm/components/accordion/accordion.js +20 -11
- package/lib/esm/components/accordion/accordion.js.map +1 -1
- package/lib/esm/components/accordion/index.js +4 -0
- package/lib/esm/components/accordion/index.js.map +1 -1
- package/lib/esm/components/accordion/types.js +4 -0
- package/lib/esm/components/accordion/types.js.map +1 -1
- package/lib/esm/components/collapse/collapse.js +13 -7
- package/lib/esm/components/collapse/collapse.js.map +1 -1
- package/lib/esm/components/collapse/index.js +4 -0
- package/lib/esm/components/collapse/index.js.map +1 -1
- package/lib/esm/components/collapse/types.js +4 -0
- package/lib/esm/components/collapse/types.js.map +1 -1
- package/lib/esm/components/component.js +12 -41
- package/lib/esm/components/component.js.map +1 -1
- package/lib/esm/components/constants.js +4 -0
- package/lib/esm/components/constants.js.map +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.js +214 -0
- package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -0
- package/lib/esm/components/datatable/datatable-sort.js +88 -0
- package/lib/esm/components/datatable/datatable-sort.js.map +1 -0
- package/lib/esm/components/datatable/datatable.js +294 -349
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/components/datatable/index.js +4 -0
- package/lib/esm/components/datatable/index.js.map +1 -1
- package/lib/esm/components/datatable/types.js +4 -0
- package/lib/esm/components/datatable/types.js.map +1 -1
- package/lib/esm/components/datepicker/calendar.js +1058 -0
- package/lib/esm/components/datepicker/calendar.js.map +1 -0
- package/lib/esm/components/datepicker/config.js +329 -0
- package/lib/esm/components/datepicker/config.js.map +1 -0
- package/lib/esm/components/datepicker/datepicker.js +946 -0
- package/lib/esm/components/datepicker/datepicker.js.map +1 -0
- package/lib/esm/components/datepicker/dropdown.js +632 -0
- package/lib/esm/components/datepicker/dropdown.js.map +1 -0
- package/lib/esm/components/datepicker/events.js +126 -0
- package/lib/esm/components/datepicker/events.js.map +1 -0
- package/lib/esm/components/datepicker/index.js +9 -0
- package/lib/esm/components/datepicker/index.js.map +1 -0
- package/lib/esm/components/datepicker/keyboard.js +533 -0
- package/lib/esm/components/datepicker/keyboard.js.map +1 -0
- package/lib/esm/components/datepicker/locales.js +74 -0
- package/lib/esm/components/datepicker/locales.js.map +1 -0
- package/lib/esm/components/datepicker/templates.js +390 -0
- package/lib/esm/components/datepicker/templates.js.map +1 -0
- package/lib/esm/components/datepicker/types.js +20 -0
- package/lib/esm/components/datepicker/types.js.map +1 -0
- package/lib/esm/components/datepicker/utils.js +508 -0
- package/lib/esm/components/datepicker/utils.js.map +1 -0
- package/lib/esm/components/dismiss/dismiss.js +10 -6
- package/lib/esm/components/dismiss/dismiss.js.map +1 -1
- package/lib/esm/components/dismiss/index.js +4 -0
- package/lib/esm/components/dismiss/index.js.map +1 -1
- package/lib/esm/components/dismiss/types.js +4 -0
- package/lib/esm/components/dismiss/types.js.map +1 -1
- package/lib/esm/components/drawer/drawer.js +54 -28
- package/lib/esm/components/drawer/drawer.js.map +1 -1
- package/lib/esm/components/drawer/index.js +4 -0
- package/lib/esm/components/drawer/index.js.map +1 -1
- package/lib/esm/components/drawer/types.js +4 -0
- package/lib/esm/components/drawer/types.js.map +1 -1
- package/lib/esm/components/dropdown/dropdown.js +146 -116
- package/lib/esm/components/dropdown/dropdown.js.map +1 -1
- package/lib/esm/components/dropdown/index.js +4 -0
- package/lib/esm/components/dropdown/index.js.map +1 -1
- package/lib/esm/components/dropdown/types.js +4 -0
- package/lib/esm/components/dropdown/types.js.map +1 -1
- package/lib/esm/components/image-input/image-input.js +21 -16
- package/lib/esm/components/image-input/image-input.js.map +1 -1
- package/lib/esm/components/image-input/index.js +4 -0
- package/lib/esm/components/image-input/index.js.map +1 -1
- package/lib/esm/components/image-input/types.js +4 -0
- package/lib/esm/components/image-input/types.js.map +1 -1
- package/lib/esm/components/modal/index.js +4 -0
- package/lib/esm/components/modal/index.js.map +1 -1
- package/lib/esm/components/modal/modal.js +26 -19
- package/lib/esm/components/modal/modal.js.map +1 -1
- package/lib/esm/components/modal/types.js +4 -0
- package/lib/esm/components/modal/types.js.map +1 -1
- package/lib/esm/components/reparent/index.js +4 -0
- package/lib/esm/components/reparent/index.js.map +1 -1
- package/lib/esm/components/reparent/reparent.js +13 -5
- package/lib/esm/components/reparent/reparent.js.map +1 -1
- package/lib/esm/components/reparent/types.js +4 -0
- package/lib/esm/components/reparent/types.js.map +1 -1
- package/lib/esm/components/scrollable/index.js +4 -0
- package/lib/esm/components/scrollable/index.js.map +1 -1
- package/lib/esm/components/scrollable/scrollable.js +17 -10
- package/lib/esm/components/scrollable/scrollable.js.map +1 -1
- package/lib/esm/components/scrollable/types.js +4 -0
- package/lib/esm/components/scrollable/types.js.map +1 -1
- package/lib/esm/components/scrollspy/index.js +4 -0
- package/lib/esm/components/scrollspy/index.js.map +1 -1
- package/lib/esm/components/scrollspy/scrollspy.js +28 -17
- package/lib/esm/components/scrollspy/scrollspy.js.map +1 -1
- package/lib/esm/components/scrollspy/types.js +4 -0
- package/lib/esm/components/scrollspy/types.js.map +1 -1
- package/lib/esm/components/scrollto/index.js +4 -0
- package/lib/esm/components/scrollto/index.js.map +1 -1
- package/lib/esm/components/scrollto/scrollto.js +14 -8
- package/lib/esm/components/scrollto/scrollto.js.map +1 -1
- package/lib/esm/components/scrollto/types.js +4 -0
- package/lib/esm/components/scrollto/types.js.map +1 -1
- package/lib/esm/components/select/combobox.js +234 -0
- package/lib/esm/components/select/combobox.js.map +1 -0
- package/lib/esm/components/select/config.js +223 -0
- package/lib/esm/components/select/config.js.map +1 -0
- package/lib/esm/components/select/dropdown.js +426 -0
- package/lib/esm/components/select/dropdown.js.map +1 -0
- package/lib/esm/components/select/index.js +12 -0
- package/lib/esm/components/select/index.js.map +1 -0
- package/lib/esm/components/select/option.js +50 -0
- package/lib/esm/components/select/option.js.map +1 -0
- package/lib/esm/components/select/remote.js +411 -0
- package/lib/esm/components/select/remote.js.map +1 -0
- package/lib/esm/components/select/search.js +336 -0
- package/lib/esm/components/select/search.js.map +1 -0
- package/lib/esm/components/select/select.js +1535 -0
- package/lib/esm/components/select/select.js.map +1 -0
- package/lib/esm/components/select/tags.js +107 -0
- package/lib/esm/components/select/tags.js.map +1 -0
- package/lib/esm/components/select/templates.js +332 -0
- package/lib/esm/components/select/templates.js.map +1 -0
- package/lib/esm/components/select/types.js +16 -0
- package/lib/esm/components/select/types.js.map +1 -0
- package/lib/esm/components/select/utils.js +598 -0
- package/lib/esm/components/select/utils.js.map +1 -0
- package/lib/esm/components/stepper/index.js +4 -0
- package/lib/esm/components/stepper/index.js.map +1 -1
- package/lib/esm/components/stepper/stepper.js +20 -13
- package/lib/esm/components/stepper/stepper.js.map +1 -1
- package/lib/esm/components/stepper/types.js +4 -0
- package/lib/esm/components/stepper/types.js.map +1 -1
- package/lib/esm/components/sticky/index.js +4 -0
- package/lib/esm/components/sticky/index.js.map +1 -1
- package/lib/esm/components/sticky/sticky.js +60 -38
- package/lib/esm/components/sticky/sticky.js.map +1 -1
- package/lib/esm/components/sticky/types.js +4 -0
- package/lib/esm/components/sticky/types.js.map +1 -1
- package/lib/esm/components/tabs/index.js +4 -0
- package/lib/esm/components/tabs/index.js.map +1 -1
- package/lib/esm/components/tabs/tabs.js +34 -24
- package/lib/esm/components/tabs/tabs.js.map +1 -1
- package/lib/esm/components/tabs/types.js +4 -0
- package/lib/esm/components/tabs/types.js.map +1 -1
- package/lib/esm/components/theme-switch/index.js +6 -0
- package/lib/esm/components/theme-switch/index.js.map +1 -0
- package/lib/esm/components/theme-switch/theme-switch.js +140 -0
- package/lib/esm/components/theme-switch/theme-switch.js.map +1 -0
- package/lib/esm/components/theme-switch/types.js +6 -0
- package/lib/esm/components/theme-switch/types.js.map +1 -0
- package/lib/esm/components/toggle/index.js +4 -0
- package/lib/esm/components/toggle/index.js.map +1 -1
- package/lib/esm/components/toggle/toggle.js +11 -7
- package/lib/esm/components/toggle/toggle.js.map +1 -1
- package/lib/esm/components/toggle/types.js +4 -0
- package/lib/esm/components/toggle/types.js.map +1 -1
- package/lib/esm/components/toggle-password/index.js +4 -0
- package/lib/esm/components/toggle-password/index.js.map +1 -1
- package/lib/esm/components/toggle-password/toggle-password.js +12 -7
- package/lib/esm/components/toggle-password/toggle-password.js.map +1 -1
- package/lib/esm/components/toggle-password/types.js +4 -0
- package/lib/esm/components/toggle-password/types.js.map +1 -1
- package/lib/esm/components/tooltip/index.js +4 -0
- package/lib/esm/components/tooltip/index.js.map +1 -1
- package/lib/esm/components/tooltip/tooltip.js +52 -22
- package/lib/esm/components/tooltip/tooltip.js.map +1 -1
- package/lib/esm/components/tooltip/types.js +4 -0
- package/lib/esm/components/tooltip/types.js.map +1 -1
- package/lib/esm/helpers/data.js +5 -1
- package/lib/esm/helpers/data.js.map +1 -1
- package/lib/esm/helpers/dom.js +34 -29
- package/lib/esm/helpers/dom.js.map +1 -1
- package/lib/esm/helpers/event-handler.js +5 -1
- package/lib/esm/helpers/event-handler.js.map +1 -1
- package/lib/esm/helpers/utils.js +65 -11
- package/lib/esm/helpers/utils.js.map +1 -1
- package/lib/esm/index.js +14 -16
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/types.js +4 -0
- package/lib/esm/types.js.map +1 -1
- package/package.json +16 -8
- package/src/components/accordion/accordion-menu.css +1 -2
- package/src/components/accordion/accordion.css +1 -1
- package/src/components/accordion/accordion.ts +1 -1
- package/src/components/accordion/index.ts +1 -1
- package/src/components/accordion/types.ts +1 -1
- package/src/components/alert/alert.css +1 -1
- package/src/components/avatar/avatar.css +1 -1
- package/src/components/badge/badge.css +1 -1
- package/src/components/breadcrumb/breadcrumb.css +1 -1
- package/src/components/btn/btn.css +1 -1
- package/src/components/card/card.css +1 -1
- package/src/components/checkbox/checkbox.css +1 -1
- package/src/components/collapse/collapse.css +1 -1
- package/src/components/collapse/collapse.ts +1 -1
- package/src/components/collapse/index.ts +1 -1
- package/src/components/collapse/types.ts +1 -1
- package/src/components/component.ts +1 -1
- package/src/components/constants.ts +1 -1
- package/src/components/datatable/datatable-checkbox.ts +1 -1
- package/src/components/datatable/datatable-sort.ts +1 -1
- package/src/components/datatable/datatable.css +1 -1
- package/src/components/datatable/datatable.ts +38 -2
- package/src/components/datatable/index.ts +1 -1
- package/src/components/datatable/types.ts +1 -1
- package/src/components/datepicker/calendar.ts +1 -1
- package/src/components/datepicker/config.ts +1 -1
- package/src/components/datepicker/datepicker.css +1 -1
- package/src/components/datepicker/datepicker.ts +1 -1
- package/src/components/datepicker/dropdown.ts +1 -1
- package/src/components/datepicker/events.ts +1 -1
- package/src/components/datepicker/index.ts +1 -1
- package/src/components/datepicker/keyboard.ts +1 -1
- package/src/components/datepicker/locales.ts +1 -1
- package/src/components/datepicker/templates.ts +1 -1
- package/src/components/datepicker/types.ts +1 -1
- package/src/components/datepicker/utils.ts +1 -1
- package/src/components/dismiss/dismiss.css +1 -1
- package/src/components/dismiss/dismiss.ts +1 -1
- package/src/components/dismiss/index.ts +1 -1
- package/src/components/dismiss/types.ts +1 -1
- package/src/components/drawer/drawer.css +1 -1
- package/src/components/drawer/drawer.ts +1 -1
- package/src/components/drawer/index.ts +1 -1
- package/src/components/drawer/types.ts +1 -1
- package/src/components/dropdown/dropdown-menu.css +1 -1
- package/src/components/dropdown/dropdown.css +1 -1
- package/src/components/dropdown/dropdown.ts +1 -1
- package/src/components/dropdown/index.ts +1 -1
- package/src/components/dropdown/types.ts +1 -1
- package/src/components/form/form.css +1 -1
- package/src/components/image-input/image-input.css +1 -1
- package/src/components/image-input/image-input.ts +1 -1
- package/src/components/image-input/index.ts +1 -1
- package/src/components/image-input/types.ts +1 -1
- package/src/components/input/input-group.css +8 -5
- package/src/components/input/input.css +1 -1
- package/src/components/kbd/kbd.css +1 -1
- package/src/components/label/label.css +1 -1
- package/src/components/link/link.css +1 -1
- package/src/components/modal/index.ts +1 -1
- package/src/components/modal/modal.css +1 -1
- package/src/components/modal/modal.ts +1 -1
- package/src/components/modal/types.ts +1 -1
- package/src/components/pagination/pagination.css +1 -1
- package/src/components/popover/popover.css +1 -1
- package/src/components/progress/progress.css +2 -2
- package/src/components/radio/radio.css +1 -1
- package/src/components/reparent/index.ts +1 -1
- package/src/components/reparent/reparent.ts +1 -1
- package/src/components/reparent/types.ts +1 -1
- package/src/components/scrollable/index.ts +1 -1
- package/src/components/scrollable/scrollable.css +1 -1
- package/src/components/scrollable/scrollable.ts +1 -1
- package/src/components/scrollable/types.ts +1 -1
- package/src/components/scrollspy/index.ts +1 -1
- package/src/components/scrollspy/scrollspy.css +1 -1
- package/src/components/scrollspy/scrollspy.ts +1 -1
- package/src/components/scrollspy/types.ts +1 -1
- package/src/components/scrollto/index.ts +1 -1
- package/src/components/scrollto/scrollto.ts +1 -1
- package/src/components/scrollto/types.ts +1 -1
- package/src/components/select/combobox.ts +1 -1
- package/src/components/select/config.ts +1 -1
- package/src/components/select/dropdown.ts +1 -1
- package/src/components/select/index.ts +1 -1
- package/src/components/select/option.ts +1 -1
- package/src/components/select/remote.ts +1 -1
- package/src/components/select/search.ts +1 -1
- package/src/components/select/select.css +1 -1
- package/src/components/select/select.ts +1 -1
- package/src/components/select/tags.ts +1 -1
- package/src/components/select/templates.ts +1 -1
- package/src/components/select/types.ts +1 -1
- package/src/components/select/utils.ts +1 -1
- package/src/components/select/variants.css +1 -1
- package/src/components/separator/separator.css +1 -1
- package/src/components/skeleton/skeleton.css +1 -1
- package/src/components/stepper/index.ts +1 -1
- package/src/components/stepper/stepper.css +1 -1
- package/src/components/stepper/stepper.ts +1 -1
- package/src/components/stepper/types.ts +1 -1
- package/src/components/sticky/index.ts +1 -1
- package/src/components/sticky/sticky.css +1 -1
- package/src/components/sticky/sticky.ts +1 -1
- package/src/components/sticky/types.ts +1 -1
- package/src/components/switch/switch.css +1 -1
- package/src/components/table/table.css +2 -2
- package/src/components/tabs/index.ts +1 -1
- package/src/components/tabs/tabs.css +1 -1
- package/src/components/tabs/tabs.ts +1 -1
- package/src/components/tabs/types.ts +1 -1
- package/src/components/textarea/textarea.css +1 -1
- package/src/components/theme-switch/index.ts +1 -1
- package/src/components/theme-switch/theme-switch.css +1 -1
- package/src/components/theme-switch/theme-switch.ts +1 -1
- package/src/components/theme-switch/types.ts +1 -1
- package/src/components/toggle/index.ts +1 -1
- package/src/components/toggle/toggle.css +1 -1
- package/src/components/toggle/toggle.ts +1 -1
- package/src/components/toggle/types.ts +1 -1
- package/src/components/toggle-group/toggle-group.css +1 -1
- package/src/components/toggle-password/index.ts +1 -1
- package/src/components/toggle-password/toggle-password.css +1 -1
- package/src/components/toggle-password/toggle-password.ts +1 -1
- package/src/components/toggle-password/types.ts +1 -1
- package/src/components/tooltip/index.ts +1 -1
- package/src/components/tooltip/tooltip.css +1 -1
- package/src/components/tooltip/tooltip.ts +1 -1
- package/src/components/tooltip/types.ts +1 -1
- package/src/helpers/data.ts +1 -1
- package/src/helpers/dom.ts +1 -1
- package/src/helpers/event-handler.ts +1 -1
- package/src/helpers/utils.ts +1 -1
- package/src/index.ts +1 -1
- package/src/types.ts +1 -1
|
@@ -0,0 +1,946 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
*/
|
|
5
|
+
var __extends = (this && this.__extends) || (function () {
|
|
6
|
+
var extendStatics = function (d, b) {
|
|
7
|
+
extendStatics = Object.setPrototypeOf ||
|
|
8
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
9
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
10
|
+
return extendStatics(d, b);
|
|
11
|
+
};
|
|
12
|
+
return function (d, b) {
|
|
13
|
+
if (typeof b !== "function" && b !== null)
|
|
14
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
15
|
+
extendStatics(d, b);
|
|
16
|
+
function __() { this.constructor = d; }
|
|
17
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
import KTComponent from '../component';
|
|
21
|
+
import { KTDatepickerCalendar } from './calendar';
|
|
22
|
+
import { KTDatepickerStateManager } from './config';
|
|
23
|
+
import { KTDatepickerKeyboard } from './keyboard';
|
|
24
|
+
import { formatDate, parseDate, isDateDisabled } from './utils';
|
|
25
|
+
import { segmentedDateInputTemplate, segmentedDateRangeInputTemplate, placeholderTemplate, } from './templates';
|
|
26
|
+
import { KTDatepickerEventName } from './events';
|
|
27
|
+
// Helper function to replace stringToElement
|
|
28
|
+
function createElement(html) {
|
|
29
|
+
var template = document.createElement('template');
|
|
30
|
+
template.innerHTML = html.trim();
|
|
31
|
+
return template.content.firstChild;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* KTDatepicker - Main datepicker component class
|
|
35
|
+
* Manages the datepicker functionality and integration with input elements
|
|
36
|
+
*/
|
|
37
|
+
var KTDatepicker = /** @class */ (function (_super) {
|
|
38
|
+
__extends(KTDatepicker, _super);
|
|
39
|
+
/**
|
|
40
|
+
* Constructor for the KTDatepicker class.
|
|
41
|
+
*/
|
|
42
|
+
function KTDatepicker(element, config) {
|
|
43
|
+
var _this = _super.call(this) || this;
|
|
44
|
+
_this._name = 'datepicker';
|
|
45
|
+
_this._dateInputElement = null;
|
|
46
|
+
_this._startDateInputElement = null;
|
|
47
|
+
_this._endDateInputElement = null;
|
|
48
|
+
_this._displayElement = null;
|
|
49
|
+
_this._useSegmentedDisplay = false;
|
|
50
|
+
_this._displayWrapper = null;
|
|
51
|
+
_this._displayText = null;
|
|
52
|
+
_this._currentDate = null;
|
|
53
|
+
_this._currentRange = null;
|
|
54
|
+
_this._segmentFocused = null;
|
|
55
|
+
// Check if the element already has a datepicker instance attached to it
|
|
56
|
+
if (element.getAttribute('data-kt-datepicker-initialized') === 'true') {
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
// Initialize the datepicker with the provided element
|
|
60
|
+
_this._init(element);
|
|
61
|
+
// Build the configuration object by merging the default config with the provided config
|
|
62
|
+
_this._buildConfig(config);
|
|
63
|
+
// Store the instance of the datepicker directly on the element
|
|
64
|
+
element.instance = _this;
|
|
65
|
+
// Ensure the element is focusable
|
|
66
|
+
_this._element.setAttribute('tabindex', '0');
|
|
67
|
+
_this._element.classList.add('kt-datepicker', 'relative', 'focus:outline-none');
|
|
68
|
+
// Mark as initialized
|
|
69
|
+
_this._element.setAttribute('data-kt-datepicker-initialized', 'true');
|
|
70
|
+
// Find input elements
|
|
71
|
+
_this._initializeInputElements();
|
|
72
|
+
// Create display element if needed
|
|
73
|
+
_this._createDisplayElement();
|
|
74
|
+
// Create state manager first
|
|
75
|
+
_this._state = new KTDatepickerStateManager(_this._element, _this._config);
|
|
76
|
+
_this._config = _this._state.getConfig();
|
|
77
|
+
// Initialize the calendar and keyboard after creating the state manager
|
|
78
|
+
_this._calendar = new KTDatepickerCalendar(_this._element, _this._state);
|
|
79
|
+
_this._keyboard = new KTDatepickerKeyboard(_this._element, _this._state);
|
|
80
|
+
// Initialize event manager
|
|
81
|
+
_this._eventManager = _this._state.getEventManager();
|
|
82
|
+
// Set up event listeners
|
|
83
|
+
_this._setupEventListeners();
|
|
84
|
+
// Initialize with any default values
|
|
85
|
+
_this._initializeDefaultValues();
|
|
86
|
+
return _this;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Initialize input elements
|
|
90
|
+
*/
|
|
91
|
+
KTDatepicker.prototype._initializeInputElements = function () {
|
|
92
|
+
// Get main input element - will be hidden
|
|
93
|
+
this._dateInputElement = this._element.querySelector('[data-kt-datepicker-input]');
|
|
94
|
+
// Hide the input element and make it only for data storage
|
|
95
|
+
if (this._dateInputElement) {
|
|
96
|
+
this._dateInputElement.classList.add('hidden', 'sr-only');
|
|
97
|
+
this._dateInputElement.setAttribute('aria-hidden', 'true');
|
|
98
|
+
this._dateInputElement.tabIndex = -1;
|
|
99
|
+
}
|
|
100
|
+
// Get range input elements if applicable
|
|
101
|
+
this._startDateInputElement = this._element.querySelector('[data-kt-datepicker-start]');
|
|
102
|
+
this._endDateInputElement = this._element.querySelector('[data-kt-datepicker-end]');
|
|
103
|
+
// Get display element if exists
|
|
104
|
+
this._displayElement = this._element.querySelector('[data-kt-datepicker-display]');
|
|
105
|
+
// Check if we should use segmented display
|
|
106
|
+
this._useSegmentedDisplay =
|
|
107
|
+
this._element.hasAttribute('data-kt-datepicker-segmented') ||
|
|
108
|
+
this._element.hasAttribute('data-kt-datepicker-segmented-input');
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Create display element for datepicker
|
|
112
|
+
*/
|
|
113
|
+
KTDatepicker.prototype._createDisplayElement = function () {
|
|
114
|
+
var _this = this;
|
|
115
|
+
var _a;
|
|
116
|
+
// Skip if already created
|
|
117
|
+
if (this._displayElement) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Get format from config or use default
|
|
121
|
+
var format = this._config.format || 'mm/dd/yyyy';
|
|
122
|
+
var placeholder = ((_a = this._dateInputElement) === null || _a === void 0 ? void 0 : _a.getAttribute('placeholder')) || format;
|
|
123
|
+
// Create wrapper for display element
|
|
124
|
+
this._displayWrapper = document.createElement('div');
|
|
125
|
+
this._displayWrapper.className =
|
|
126
|
+
'kt-datepicker-display-wrapper kt-datepicker-display-segment';
|
|
127
|
+
this._displayWrapper.setAttribute('role', 'combobox');
|
|
128
|
+
this._displayWrapper.setAttribute('aria-haspopup', 'dialog');
|
|
129
|
+
this._displayWrapper.setAttribute('aria-expanded', 'false');
|
|
130
|
+
this._element.appendChild(this._displayWrapper);
|
|
131
|
+
if (this._useSegmentedDisplay) {
|
|
132
|
+
// Create segmented display for better date part selection
|
|
133
|
+
var displayContainer = document.createElement('div');
|
|
134
|
+
displayContainer.className = 'kt-datepicker-display-element';
|
|
135
|
+
displayContainer.setAttribute('tabindex', '0');
|
|
136
|
+
displayContainer.setAttribute('role', 'textbox');
|
|
137
|
+
displayContainer.setAttribute('aria-label', placeholder);
|
|
138
|
+
displayContainer.setAttribute('data-kt-datepicker-display', '');
|
|
139
|
+
// Add segmented template based on range mode
|
|
140
|
+
if (this._config.range) {
|
|
141
|
+
displayContainer.innerHTML = segmentedDateRangeInputTemplate(this._config.format || 'mm/dd/yyyy');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
displayContainer.innerHTML = segmentedDateInputTemplate(this._config.format || 'mm/dd/yyyy');
|
|
145
|
+
}
|
|
146
|
+
this._displayElement = displayContainer;
|
|
147
|
+
this._displayWrapper.appendChild(this._displayElement);
|
|
148
|
+
// Add click handlers for segments
|
|
149
|
+
var segments = this._displayElement.querySelectorAll('[data-segment]');
|
|
150
|
+
segments.forEach(function (segment) {
|
|
151
|
+
segment.addEventListener('click', function (e) {
|
|
152
|
+
e.stopPropagation();
|
|
153
|
+
var segmentType = segment.getAttribute('data-segment');
|
|
154
|
+
_this._handleSegmentClick(segmentType);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Create simple display element
|
|
160
|
+
this._displayElement = document.createElement('div');
|
|
161
|
+
this._displayElement.className = 'kt-datepicker-display-element';
|
|
162
|
+
this._displayElement.setAttribute('tabindex', '0');
|
|
163
|
+
this._displayElement.setAttribute('role', 'textbox');
|
|
164
|
+
this._displayElement.setAttribute('aria-label', placeholder);
|
|
165
|
+
this._displayElement.setAttribute('data-placeholder', placeholder);
|
|
166
|
+
this._displayElement.setAttribute('data-kt-datepicker-display', '');
|
|
167
|
+
// Create display text element
|
|
168
|
+
this._displayText = document.createElement('span');
|
|
169
|
+
this._displayText.className = 'kt-datepicker-display-text';
|
|
170
|
+
this._displayText.textContent = placeholder;
|
|
171
|
+
this._displayText.classList.add('text-gray-400');
|
|
172
|
+
this._displayElement.appendChild(this._displayText);
|
|
173
|
+
this._displayWrapper.appendChild(this._displayElement);
|
|
174
|
+
}
|
|
175
|
+
// Add click event to display element
|
|
176
|
+
this._displayElement.addEventListener('click', function (e) {
|
|
177
|
+
e.preventDefault();
|
|
178
|
+
if (!_this._state.getState().isOpen) {
|
|
179
|
+
_this._state.setOpen(true);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// Enhanced keyboard event handling for display element
|
|
183
|
+
this._displayElement.addEventListener('keydown', function (e) {
|
|
184
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
185
|
+
e.preventDefault();
|
|
186
|
+
e.stopPropagation();
|
|
187
|
+
// If not already open, open the dropdown
|
|
188
|
+
if (!_this._state.getState().isOpen) {
|
|
189
|
+
_this._state.setOpen(true);
|
|
190
|
+
// Dispatch a custom event to notify about the keyboard open
|
|
191
|
+
_this._eventManager.dispatchKeyboardOpenEvent();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Handle segment click to focus and open appropriate view
|
|
198
|
+
*
|
|
199
|
+
* @param segmentType - Type of segment clicked
|
|
200
|
+
*/
|
|
201
|
+
KTDatepicker.prototype._handleSegmentClick = function (segmentType) {
|
|
202
|
+
if (!segmentType)
|
|
203
|
+
return;
|
|
204
|
+
// Store the focused segment
|
|
205
|
+
this._segmentFocused = segmentType;
|
|
206
|
+
// Remove highlight from all segments
|
|
207
|
+
this._removeSegmentHighlights();
|
|
208
|
+
// Add highlight to clicked segment
|
|
209
|
+
if (this._displayElement) {
|
|
210
|
+
var segment = this._displayElement.querySelector("[data-segment=\"".concat(segmentType, "\"]"));
|
|
211
|
+
if (segment) {
|
|
212
|
+
segment.classList.add('kt-datepicker-segment-focused');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Set the appropriate view mode based on segment type
|
|
216
|
+
if (segmentType.includes('day')) {
|
|
217
|
+
// Day segment - open in days view (default)
|
|
218
|
+
this._state.setViewMode('days');
|
|
219
|
+
this._state.setOpen(true);
|
|
220
|
+
}
|
|
221
|
+
else if (segmentType.includes('month')) {
|
|
222
|
+
// Month segment - open in months view
|
|
223
|
+
this._state.setViewMode('months');
|
|
224
|
+
this._state.setOpen(true);
|
|
225
|
+
}
|
|
226
|
+
else if (segmentType.includes('year')) {
|
|
227
|
+
// Year segment - open in years view
|
|
228
|
+
this._state.setViewMode('years');
|
|
229
|
+
this._state.setOpen(true);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* Set up event listeners
|
|
234
|
+
*/
|
|
235
|
+
KTDatepicker.prototype._setupEventListeners = function () {
|
|
236
|
+
var _this = this;
|
|
237
|
+
// Listen for state changes
|
|
238
|
+
this._eventManager.addEventListener(KTDatepickerEventName.STATE_CHANGE, function (e) {
|
|
239
|
+
var state = e.detail.state;
|
|
240
|
+
// Update ARIA attributes based on open state
|
|
241
|
+
if (_this._displayWrapper) {
|
|
242
|
+
_this._displayWrapper.setAttribute('aria-expanded', state.isOpen.toString());
|
|
243
|
+
}
|
|
244
|
+
// Update display when closing
|
|
245
|
+
if (!state.isOpen && state.prevIsOpen) {
|
|
246
|
+
_this._syncDisplayWithSelectedDate();
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
// Set up change event listener to update input values
|
|
250
|
+
this._eventManager.addEventListener(KTDatepickerEventName.DATE_CHANGE, this._handleDateChange.bind(this));
|
|
251
|
+
// Add keyboard events to the root element
|
|
252
|
+
this._element.addEventListener('keydown', function (e) {
|
|
253
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
254
|
+
var state = _this._state.getState();
|
|
255
|
+
if (!state.isOpen) {
|
|
256
|
+
e.preventDefault();
|
|
257
|
+
_this._state.setOpen(true);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
// Add keyboard navigation for segments
|
|
262
|
+
if (this._displayElement && this._useSegmentedDisplay) {
|
|
263
|
+
this._displayElement.addEventListener('keydown', this._handleSegmentKeydown.bind(this));
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Handle keyboard navigation between segments
|
|
268
|
+
*
|
|
269
|
+
* @param e - Keyboard event
|
|
270
|
+
*/
|
|
271
|
+
KTDatepicker.prototype._handleSegmentKeydown = function (e) {
|
|
272
|
+
// Only handle if we have a focused segment
|
|
273
|
+
if (!this._segmentFocused)
|
|
274
|
+
return;
|
|
275
|
+
var target = e.target;
|
|
276
|
+
var segmentType = target.getAttribute('data-segment');
|
|
277
|
+
if (!segmentType)
|
|
278
|
+
return;
|
|
279
|
+
// Handle keyboard navigation
|
|
280
|
+
switch (e.key) {
|
|
281
|
+
case 'ArrowLeft':
|
|
282
|
+
e.preventDefault();
|
|
283
|
+
this._navigateSegments('prev', segmentType);
|
|
284
|
+
break;
|
|
285
|
+
case 'ArrowRight':
|
|
286
|
+
e.preventDefault();
|
|
287
|
+
this._navigateSegments('next', segmentType);
|
|
288
|
+
break;
|
|
289
|
+
case 'Tab':
|
|
290
|
+
// Let default tab behavior work, but update focus segment when tabbing
|
|
291
|
+
this._segmentFocused = segmentType;
|
|
292
|
+
// Remove highlight from all segments
|
|
293
|
+
this._removeSegmentHighlights();
|
|
294
|
+
// Add highlight to current segment
|
|
295
|
+
target.classList.add('segment-focused');
|
|
296
|
+
break;
|
|
297
|
+
case 'Enter':
|
|
298
|
+
case ' ':
|
|
299
|
+
e.preventDefault();
|
|
300
|
+
this._handleSegmentClick(segmentType);
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* Navigate between segments with keyboard
|
|
306
|
+
*
|
|
307
|
+
* @param direction - 'prev' or 'next'
|
|
308
|
+
* @param currentSegment - Current segment identifier
|
|
309
|
+
*/
|
|
310
|
+
KTDatepicker.prototype._navigateSegments = function (direction, currentSegment) {
|
|
311
|
+
if (!this._displayElement)
|
|
312
|
+
return;
|
|
313
|
+
// Define segment order
|
|
314
|
+
var segments;
|
|
315
|
+
if (this._config.range) {
|
|
316
|
+
segments = [
|
|
317
|
+
'start-month',
|
|
318
|
+
'start-day',
|
|
319
|
+
'start-year',
|
|
320
|
+
'end-month',
|
|
321
|
+
'end-day',
|
|
322
|
+
'end-year',
|
|
323
|
+
];
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
segments = ['month', 'day', 'year'];
|
|
327
|
+
}
|
|
328
|
+
// Find current index
|
|
329
|
+
var currentIndex = segments.indexOf(currentSegment);
|
|
330
|
+
if (currentIndex === -1)
|
|
331
|
+
return;
|
|
332
|
+
// Calculate new index
|
|
333
|
+
var newIndex;
|
|
334
|
+
if (direction === 'prev') {
|
|
335
|
+
newIndex = currentIndex === 0 ? segments.length - 1 : currentIndex - 1;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
newIndex = currentIndex === segments.length - 1 ? 0 : currentIndex + 1;
|
|
339
|
+
}
|
|
340
|
+
// Find new segment element
|
|
341
|
+
var newSegment = this._displayElement.querySelector("[data-segment=\"".concat(segments[newIndex], "\"]"));
|
|
342
|
+
if (!newSegment)
|
|
343
|
+
return;
|
|
344
|
+
// Update focus
|
|
345
|
+
newSegment.focus();
|
|
346
|
+
this._segmentFocused = segments[newIndex];
|
|
347
|
+
// Remove highlight from all segments
|
|
348
|
+
this._removeSegmentHighlights();
|
|
349
|
+
// Add highlight to new segment
|
|
350
|
+
newSegment.classList.add('segment-focused');
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* Remove highlight from all segments
|
|
354
|
+
*/
|
|
355
|
+
KTDatepicker.prototype._removeSegmentHighlights = function () {
|
|
356
|
+
if (!this._displayElement)
|
|
357
|
+
return;
|
|
358
|
+
var segments = this._displayElement.querySelectorAll('.segment-part');
|
|
359
|
+
segments.forEach(function (segment) {
|
|
360
|
+
segment.classList.remove('segment-focused');
|
|
361
|
+
});
|
|
362
|
+
};
|
|
363
|
+
/**
|
|
364
|
+
* Sync display element with the selected date
|
|
365
|
+
*/
|
|
366
|
+
KTDatepicker.prototype._syncDisplayWithSelectedDate = function () {
|
|
367
|
+
var _a;
|
|
368
|
+
if (!this._displayElement)
|
|
369
|
+
return;
|
|
370
|
+
var state = this._state.getState();
|
|
371
|
+
var selectedDate = state.selectedDate;
|
|
372
|
+
var selectedDateRange = state.selectedDateRange;
|
|
373
|
+
if (this._useSegmentedDisplay) {
|
|
374
|
+
// Update segmented display elements
|
|
375
|
+
if (selectedDate) {
|
|
376
|
+
// Single date
|
|
377
|
+
var daySegment = this._displayElement.querySelector('[data-segment="day"]');
|
|
378
|
+
var monthSegment = this._displayElement.querySelector('[data-segment="month"]');
|
|
379
|
+
var yearSegment = this._displayElement.querySelector('[data-segment="year"]');
|
|
380
|
+
if (daySegment) {
|
|
381
|
+
daySegment.textContent = selectedDate
|
|
382
|
+
.getDate()
|
|
383
|
+
.toString()
|
|
384
|
+
.padStart(2, '0');
|
|
385
|
+
}
|
|
386
|
+
if (monthSegment) {
|
|
387
|
+
monthSegment.textContent = (selectedDate.getMonth() + 1)
|
|
388
|
+
.toString()
|
|
389
|
+
.padStart(2, '0');
|
|
390
|
+
}
|
|
391
|
+
if (yearSegment) {
|
|
392
|
+
yearSegment.textContent = selectedDate.getFullYear().toString();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
else if (selectedDateRange && selectedDateRange.startDate) {
|
|
396
|
+
// Range selection
|
|
397
|
+
var startDay = this._displayElement.querySelector('[data-segment="start-day"]');
|
|
398
|
+
var startMonth = this._displayElement.querySelector('[data-segment="start-month"]');
|
|
399
|
+
var startYear = this._displayElement.querySelector('[data-segment="start-year"]');
|
|
400
|
+
if (startDay) {
|
|
401
|
+
startDay.textContent = selectedDateRange.startDate
|
|
402
|
+
.getDate()
|
|
403
|
+
.toString()
|
|
404
|
+
.padStart(2, '0');
|
|
405
|
+
}
|
|
406
|
+
if (startMonth) {
|
|
407
|
+
startMonth.textContent = (selectedDateRange.startDate.getMonth() + 1)
|
|
408
|
+
.toString()
|
|
409
|
+
.padStart(2, '0');
|
|
410
|
+
}
|
|
411
|
+
if (startYear) {
|
|
412
|
+
startYear.textContent = selectedDateRange.startDate
|
|
413
|
+
.getFullYear()
|
|
414
|
+
.toString();
|
|
415
|
+
}
|
|
416
|
+
if (selectedDateRange.endDate) {
|
|
417
|
+
var endDay = this._displayElement.querySelector('[data-segment="end-day"]');
|
|
418
|
+
var endMonth = this._displayElement.querySelector('[data-segment="end-month"]');
|
|
419
|
+
var endYear = this._displayElement.querySelector('[data-segment="end-year"]');
|
|
420
|
+
if (endDay) {
|
|
421
|
+
endDay.textContent = selectedDateRange.endDate
|
|
422
|
+
.getDate()
|
|
423
|
+
.toString()
|
|
424
|
+
.padStart(2, '0');
|
|
425
|
+
}
|
|
426
|
+
if (endMonth) {
|
|
427
|
+
endMonth.textContent = (selectedDateRange.endDate.getMonth() + 1)
|
|
428
|
+
.toString()
|
|
429
|
+
.padStart(2, '0');
|
|
430
|
+
}
|
|
431
|
+
if (endYear) {
|
|
432
|
+
endYear.textContent = selectedDateRange.endDate
|
|
433
|
+
.getFullYear()
|
|
434
|
+
.toString();
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
else if (this._displayText) {
|
|
440
|
+
// Simple display
|
|
441
|
+
if (selectedDate) {
|
|
442
|
+
// Clear placeholder styling
|
|
443
|
+
this._displayText.classList.remove('placeholder');
|
|
444
|
+
// Format date(s) based on config
|
|
445
|
+
if (this._config.range &&
|
|
446
|
+
selectedDateRange &&
|
|
447
|
+
selectedDateRange.startDate &&
|
|
448
|
+
selectedDateRange.endDate) {
|
|
449
|
+
this._displayText.textContent = "".concat(formatDate(selectedDateRange.startDate, this._config.format, this._config), " - ").concat(formatDate(selectedDateRange.endDate, this._config.format, this._config));
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
this._displayText.textContent = formatDate(selectedDate, this._config.format, this._config);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
// No date selected, show format as placeholder
|
|
457
|
+
var placeholder = ((_a = this._displayElement) === null || _a === void 0 ? void 0 : _a.getAttribute('data-placeholder')) ||
|
|
458
|
+
this._config.format;
|
|
459
|
+
this._displayText.textContent = placeholder;
|
|
460
|
+
this._displayText.classList.add('placeholder');
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
/**
|
|
465
|
+
* Handle date change events
|
|
466
|
+
*
|
|
467
|
+
* @param e - Custom event with date change details
|
|
468
|
+
*/
|
|
469
|
+
KTDatepicker.prototype._handleDateChange = function (e) {
|
|
470
|
+
var _a;
|
|
471
|
+
var detail = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.payload;
|
|
472
|
+
if (!detail)
|
|
473
|
+
return;
|
|
474
|
+
// Handle single date selection
|
|
475
|
+
if (detail.selectedDate) {
|
|
476
|
+
var formattedDate = formatDate(detail.selectedDate, this._config.format, this._config);
|
|
477
|
+
// Update hidden input value
|
|
478
|
+
if (this._dateInputElement) {
|
|
479
|
+
this._dateInputElement.value = formattedDate;
|
|
480
|
+
// Dispatch change event on input to trigger form validation
|
|
481
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
482
|
+
}
|
|
483
|
+
// Update display element
|
|
484
|
+
this._updateDisplayElement(detail.selectedDate);
|
|
485
|
+
}
|
|
486
|
+
// Handle date range selection
|
|
487
|
+
if (detail.selectedDateRange && this._config.range) {
|
|
488
|
+
var _b = detail.selectedDateRange, startDate = _b.startDate, endDate = _b.endDate;
|
|
489
|
+
// Format the range for the hidden input
|
|
490
|
+
if (this._dateInputElement) {
|
|
491
|
+
var displayValue = '';
|
|
492
|
+
if (startDate) {
|
|
493
|
+
displayValue = formatDate(startDate, this._config.format, this._config);
|
|
494
|
+
if (endDate) {
|
|
495
|
+
var endFormatted = formatDate(endDate, this._config.format, this._config);
|
|
496
|
+
displayValue += "".concat(this._config.rangeSeparator).concat(endFormatted);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
this._dateInputElement.value = displayValue;
|
|
500
|
+
// Dispatch change event on input
|
|
501
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
502
|
+
}
|
|
503
|
+
// Update individual start/end inputs if they exist
|
|
504
|
+
if (this._startDateInputElement && startDate) {
|
|
505
|
+
this._startDateInputElement.value = formatDate(startDate, this._config.format, this._config);
|
|
506
|
+
this._startDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
507
|
+
}
|
|
508
|
+
if (this._endDateInputElement && endDate) {
|
|
509
|
+
this._endDateInputElement.value = formatDate(endDate, this._config.format, this._config);
|
|
510
|
+
this._endDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
511
|
+
}
|
|
512
|
+
// Update display element for range
|
|
513
|
+
this._updateRangeDisplayElement(startDate, endDate);
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
/**
|
|
517
|
+
* Update the display element for a single date
|
|
518
|
+
*
|
|
519
|
+
* @param date - The date to display
|
|
520
|
+
*/
|
|
521
|
+
KTDatepicker.prototype._updateDisplayElement = function (date) {
|
|
522
|
+
var _a;
|
|
523
|
+
if (!this._displayElement)
|
|
524
|
+
return;
|
|
525
|
+
if (!date) {
|
|
526
|
+
// If no date, show placeholder
|
|
527
|
+
var placeholder = ((_a = this._dateInputElement) === null || _a === void 0 ? void 0 : _a.getAttribute('placeholder')) || 'Select date';
|
|
528
|
+
this._displayElement.innerHTML = placeholderTemplate(placeholder);
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
if (this._useSegmentedDisplay) {
|
|
532
|
+
// Update segmented display
|
|
533
|
+
var day = date.getDate();
|
|
534
|
+
var month = date.getMonth() + 1;
|
|
535
|
+
var year = date.getFullYear();
|
|
536
|
+
var daySegment = this._displayElement.querySelector('[data-segment="day"]');
|
|
537
|
+
var monthSegment = this._displayElement.querySelector('[data-segment="month"]');
|
|
538
|
+
var yearSegment = this._displayElement.querySelector('[data-segment="year"]');
|
|
539
|
+
if (daySegment)
|
|
540
|
+
daySegment.textContent = day < 10 ? "0".concat(day) : "".concat(day);
|
|
541
|
+
if (monthSegment)
|
|
542
|
+
monthSegment.textContent = month < 10 ? "0".concat(month) : "".concat(month);
|
|
543
|
+
if (yearSegment)
|
|
544
|
+
yearSegment.textContent = "".concat(year);
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
// Simple display
|
|
548
|
+
this._displayElement.textContent = formatDate(date, this._config.format, this._config);
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
/**
|
|
552
|
+
* Update the display element for a date range
|
|
553
|
+
*
|
|
554
|
+
* @param startDate - The start date of the range
|
|
555
|
+
* @param endDate - The end date of the range
|
|
556
|
+
*/
|
|
557
|
+
KTDatepicker.prototype._updateRangeDisplayElement = function (startDate, endDate) {
|
|
558
|
+
var _a;
|
|
559
|
+
if (!this._displayElement)
|
|
560
|
+
return;
|
|
561
|
+
if (!startDate) {
|
|
562
|
+
// If no date, show placeholder
|
|
563
|
+
var placeholder = ((_a = this._dateInputElement) === null || _a === void 0 ? void 0 : _a.getAttribute('placeholder')) ||
|
|
564
|
+
'Select date range';
|
|
565
|
+
this._displayElement.innerHTML = placeholderTemplate(placeholder);
|
|
566
|
+
return;
|
|
567
|
+
}
|
|
568
|
+
if (this._useSegmentedDisplay) {
|
|
569
|
+
// Update segmented range display
|
|
570
|
+
// Start date segments
|
|
571
|
+
var startDay = this._displayElement.querySelector('[data-segment="start-day"]');
|
|
572
|
+
var startMonth = this._displayElement.querySelector('[data-segment="start-month"]');
|
|
573
|
+
var startYear = this._displayElement.querySelector('[data-segment="start-year"]');
|
|
574
|
+
if (startDay)
|
|
575
|
+
startDay.textContent =
|
|
576
|
+
startDate.getDate() < 10
|
|
577
|
+
? "0".concat(startDate.getDate())
|
|
578
|
+
: "".concat(startDate.getDate());
|
|
579
|
+
if (startMonth)
|
|
580
|
+
startMonth.textContent =
|
|
581
|
+
startDate.getMonth() + 1 < 10
|
|
582
|
+
? "0".concat(startDate.getMonth() + 1)
|
|
583
|
+
: "".concat(startDate.getMonth() + 1);
|
|
584
|
+
if (startYear)
|
|
585
|
+
startYear.textContent = "".concat(startDate.getFullYear());
|
|
586
|
+
// End date segments
|
|
587
|
+
if (endDate) {
|
|
588
|
+
var endDay = this._displayElement.querySelector('[data-segment="end-day"]');
|
|
589
|
+
var endMonth = this._displayElement.querySelector('[data-segment="end-month"]');
|
|
590
|
+
var endYear = this._displayElement.querySelector('[data-segment="end-year"]');
|
|
591
|
+
if (endDay)
|
|
592
|
+
endDay.textContent =
|
|
593
|
+
endDate.getDate() < 10
|
|
594
|
+
? "0".concat(endDate.getDate())
|
|
595
|
+
: "".concat(endDate.getDate());
|
|
596
|
+
if (endMonth)
|
|
597
|
+
endMonth.textContent =
|
|
598
|
+
endDate.getMonth() + 1 < 10
|
|
599
|
+
? "0".concat(endDate.getMonth() + 1)
|
|
600
|
+
: "".concat(endDate.getMonth() + 1);
|
|
601
|
+
if (endYear)
|
|
602
|
+
endYear.textContent = "".concat(endDate.getFullYear());
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
// Simple display
|
|
607
|
+
var displayText = formatDate(startDate, this._config.format, this._config);
|
|
608
|
+
if (endDate) {
|
|
609
|
+
var endFormatted = formatDate(endDate, this._config.format, this._config);
|
|
610
|
+
displayText += "".concat(this._config.rangeSeparator).concat(endFormatted);
|
|
611
|
+
}
|
|
612
|
+
this._displayElement.textContent = displayText;
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
/**
|
|
616
|
+
* Handle input change events
|
|
617
|
+
*
|
|
618
|
+
* @param e - Input change event
|
|
619
|
+
*/
|
|
620
|
+
KTDatepicker.prototype._handleInputChange = function (e) {
|
|
621
|
+
var input = e.target;
|
|
622
|
+
var inputValue = input.value.trim();
|
|
623
|
+
if (!inputValue) {
|
|
624
|
+
// Clear selection if input is empty
|
|
625
|
+
this._state.setSelectedDate(null);
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
if (this._config.range) {
|
|
629
|
+
// Handle range input
|
|
630
|
+
var rangeParts = inputValue.split(this._config.rangeSeparator);
|
|
631
|
+
if (rangeParts.length === 2) {
|
|
632
|
+
var startDate = parseDate(rangeParts[0].trim(), this._config.format, this._config);
|
|
633
|
+
var endDate = parseDate(rangeParts[1].trim(), this._config.format, this._config);
|
|
634
|
+
// Validate dates are within min/max constraints
|
|
635
|
+
if (startDate && isDateDisabled(startDate, this._config)) {
|
|
636
|
+
console.log('Start date from input is outside allowed range:', startDate.toISOString());
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
if (endDate && isDateDisabled(endDate, this._config)) {
|
|
640
|
+
console.log('End date from input is outside allowed range:', endDate.toISOString());
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
if (startDate && endDate) {
|
|
644
|
+
this.setDateRange(startDate, endDate);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
else if (rangeParts.length === 1) {
|
|
648
|
+
var singleDate = parseDate(rangeParts[0].trim(), this._config.format, this._config);
|
|
649
|
+
// Validate date is within min/max constraints
|
|
650
|
+
if (singleDate && isDateDisabled(singleDate, this._config)) {
|
|
651
|
+
console.log('Date from input is outside allowed range:', singleDate.toISOString());
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
if (singleDate) {
|
|
655
|
+
this.setDateRange(singleDate, null);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
else {
|
|
660
|
+
// Handle single date input
|
|
661
|
+
var parsedDate = parseDate(inputValue, this._config.format, this._config);
|
|
662
|
+
// Validate date is within min/max constraints
|
|
663
|
+
if (parsedDate && isDateDisabled(parsedDate, this._config)) {
|
|
664
|
+
console.log('Date from input is outside allowed range:', parsedDate.toISOString());
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
667
|
+
if (parsedDate) {
|
|
668
|
+
this.setDate(parsedDate);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
/**
|
|
673
|
+
* Initialize with default values from input
|
|
674
|
+
*/
|
|
675
|
+
KTDatepicker.prototype._initializeDefaultValues = function () {
|
|
676
|
+
// Set min and max dates from attributes if they exist
|
|
677
|
+
var minDateAttr = this._element.getAttribute('data-kt-datepicker-min-date');
|
|
678
|
+
var maxDateAttr = this._element.getAttribute('data-kt-datepicker-max-date');
|
|
679
|
+
if (minDateAttr) {
|
|
680
|
+
var minDate = parseDate(minDateAttr, this._config.format, this._config);
|
|
681
|
+
if (minDate) {
|
|
682
|
+
this.setMinDate(minDate);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
if (maxDateAttr) {
|
|
686
|
+
var maxDate = parseDate(maxDateAttr, this._config.format, this._config);
|
|
687
|
+
if (maxDate) {
|
|
688
|
+
this.setMaxDate(maxDate);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// Check for default value in main input
|
|
692
|
+
if (this._dateInputElement && this._dateInputElement.value) {
|
|
693
|
+
this._handleInputChange({
|
|
694
|
+
target: this._dateInputElement,
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
// Check for default values in range inputs
|
|
698
|
+
else if (this._config.range &&
|
|
699
|
+
this._startDateInputElement &&
|
|
700
|
+
this._startDateInputElement.value) {
|
|
701
|
+
var startDate = parseDate(this._startDateInputElement.value, this._config.format, this._config);
|
|
702
|
+
var endDate = null;
|
|
703
|
+
if (this._endDateInputElement && this._endDateInputElement.value) {
|
|
704
|
+
endDate = parseDate(this._endDateInputElement.value, this._config.format, this._config);
|
|
705
|
+
}
|
|
706
|
+
if (startDate) {
|
|
707
|
+
this.setDateRange(startDate, endDate);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
/**
|
|
712
|
+
* ========================================================================
|
|
713
|
+
* Public API
|
|
714
|
+
* ========================================================================
|
|
715
|
+
*/
|
|
716
|
+
/**
|
|
717
|
+
* Get the currently selected date
|
|
718
|
+
*
|
|
719
|
+
* @returns Selected date, null if no selection, or date range object
|
|
720
|
+
*/
|
|
721
|
+
KTDatepicker.prototype.getDate = function () {
|
|
722
|
+
var state = this._state.getState();
|
|
723
|
+
var config = this._state.getConfig();
|
|
724
|
+
if (config.range) {
|
|
725
|
+
return state.selectedDateRange || { startDate: null, endDate: null };
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
return state.selectedDate;
|
|
729
|
+
}
|
|
730
|
+
};
|
|
731
|
+
/**
|
|
732
|
+
* Set the selected date
|
|
733
|
+
*
|
|
734
|
+
* @param date - Date to select or null to clear selection
|
|
735
|
+
*/
|
|
736
|
+
KTDatepicker.prototype.setDate = function (date) {
|
|
737
|
+
// Skip if the date is disabled (outside min/max range)
|
|
738
|
+
if (date && isDateDisabled(date, this._config)) {
|
|
739
|
+
console.log('Date is disabled in setDate, ignoring selection:', date.toISOString());
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
this._state.setSelectedDate(date);
|
|
743
|
+
if (date) {
|
|
744
|
+
this._state.setCurrentDate(date);
|
|
745
|
+
}
|
|
746
|
+
// Update the display
|
|
747
|
+
this._updateDisplayElement(date);
|
|
748
|
+
// Update hidden input
|
|
749
|
+
if (this._dateInputElement && date) {
|
|
750
|
+
this._dateInputElement.value = formatDate(date, this._config.format, this._config);
|
|
751
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
752
|
+
}
|
|
753
|
+
else if (this._dateInputElement) {
|
|
754
|
+
this._dateInputElement.value = '';
|
|
755
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
756
|
+
}
|
|
757
|
+
};
|
|
758
|
+
/**
|
|
759
|
+
* Get the currently selected date range
|
|
760
|
+
*
|
|
761
|
+
* @returns Selected date range or null if no selection
|
|
762
|
+
*/
|
|
763
|
+
KTDatepicker.prototype.getDateRange = function () {
|
|
764
|
+
var state = this._state.getState();
|
|
765
|
+
return state.selectedDateRange;
|
|
766
|
+
};
|
|
767
|
+
/**
|
|
768
|
+
* Set the selected date range
|
|
769
|
+
*
|
|
770
|
+
* @param start - Start date of the range
|
|
771
|
+
* @param end - End date of the range
|
|
772
|
+
*/
|
|
773
|
+
KTDatepicker.prototype.setDateRange = function (start, end) {
|
|
774
|
+
var _a;
|
|
775
|
+
var state = this._state.getState();
|
|
776
|
+
// Ensure we're in range mode
|
|
777
|
+
if (!this._config.range) {
|
|
778
|
+
console.warn('Cannot set date range when range mode is disabled');
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
// Validate start and end dates are within min/max range
|
|
782
|
+
if (start && isDateDisabled(start, this._config)) {
|
|
783
|
+
console.log('Start date is disabled in setDateRange, ignoring selection:', start.toISOString());
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
if (end && isDateDisabled(end, this._config)) {
|
|
787
|
+
console.log('End date is disabled in setDateRange, ignoring selection:', end.toISOString());
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
// Reset range selection state
|
|
791
|
+
this._state.getState().isRangeSelectionStart = true;
|
|
792
|
+
// Set start date
|
|
793
|
+
if (start) {
|
|
794
|
+
if (!state.selectedDateRange) {
|
|
795
|
+
state.selectedDateRange = { startDate: null, endDate: null };
|
|
796
|
+
}
|
|
797
|
+
state.selectedDateRange.startDate = start;
|
|
798
|
+
this._state.setCurrentDate(start);
|
|
799
|
+
// Set end date if provided
|
|
800
|
+
if (end) {
|
|
801
|
+
state.selectedDateRange.endDate = end;
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
state.selectedDateRange.endDate = null;
|
|
805
|
+
}
|
|
806
|
+
// Update display element
|
|
807
|
+
this._updateRangeDisplayElement(start, end);
|
|
808
|
+
// Update hidden inputs
|
|
809
|
+
if (this._dateInputElement) {
|
|
810
|
+
var inputValue = formatDate(start, this._config.format, this._config);
|
|
811
|
+
if (end) {
|
|
812
|
+
inputValue += "".concat(this._config.rangeSeparator).concat(formatDate(end, this._config.format, this._config));
|
|
813
|
+
}
|
|
814
|
+
this._dateInputElement.value = inputValue;
|
|
815
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
816
|
+
}
|
|
817
|
+
if (this._startDateInputElement) {
|
|
818
|
+
this._startDateInputElement.value = formatDate(start, this._config.format, this._config);
|
|
819
|
+
this._startDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
820
|
+
}
|
|
821
|
+
if (this._endDateInputElement && end) {
|
|
822
|
+
this._endDateInputElement.value = formatDate(end, this._config.format, this._config);
|
|
823
|
+
this._endDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
824
|
+
}
|
|
825
|
+
else if (this._endDateInputElement) {
|
|
826
|
+
this._endDateInputElement.value = '';
|
|
827
|
+
}
|
|
828
|
+
// Dispatch change event
|
|
829
|
+
this._eventManager.dispatchEvent(KTDatepickerEventName.DATE_CHANGE, {
|
|
830
|
+
selectedDateRange: state.selectedDateRange,
|
|
831
|
+
});
|
|
832
|
+
}
|
|
833
|
+
else {
|
|
834
|
+
// Clear selection
|
|
835
|
+
this._state.getState().selectedDateRange = null;
|
|
836
|
+
// Clear display
|
|
837
|
+
if (this._displayElement) {
|
|
838
|
+
var placeholder = ((_a = this._dateInputElement) === null || _a === void 0 ? void 0 : _a.getAttribute('placeholder')) ||
|
|
839
|
+
'Select date range';
|
|
840
|
+
this._displayElement.innerHTML = placeholderTemplate(placeholder);
|
|
841
|
+
}
|
|
842
|
+
// Clear inputs
|
|
843
|
+
if (this._dateInputElement) {
|
|
844
|
+
this._dateInputElement.value = '';
|
|
845
|
+
this._dateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
846
|
+
}
|
|
847
|
+
if (this._startDateInputElement) {
|
|
848
|
+
this._startDateInputElement.value = '';
|
|
849
|
+
this._startDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
850
|
+
}
|
|
851
|
+
if (this._endDateInputElement) {
|
|
852
|
+
this._endDateInputElement.value = '';
|
|
853
|
+
this._endDateInputElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
854
|
+
}
|
|
855
|
+
this._eventManager.dispatchEvent(KTDatepickerEventName.DATE_CHANGE, {
|
|
856
|
+
selectedDateRange: null,
|
|
857
|
+
});
|
|
858
|
+
}
|
|
859
|
+
};
|
|
860
|
+
/**
|
|
861
|
+
* Set the minimum selectable date
|
|
862
|
+
*
|
|
863
|
+
* @param minDate - Minimum date or null to remove constraint
|
|
864
|
+
*/
|
|
865
|
+
KTDatepicker.prototype.setMinDate = function (minDate) {
|
|
866
|
+
this._config.minDate = minDate;
|
|
867
|
+
// Refresh calendar view to apply new constraints
|
|
868
|
+
this._eventManager.dispatchEvent(KTDatepickerEventName.UPDATE);
|
|
869
|
+
};
|
|
870
|
+
/**
|
|
871
|
+
* Set the maximum selectable date
|
|
872
|
+
*
|
|
873
|
+
* @param maxDate - Maximum date or null to remove constraint
|
|
874
|
+
*/
|
|
875
|
+
KTDatepicker.prototype.setMaxDate = function (maxDate) {
|
|
876
|
+
this._config.maxDate = maxDate;
|
|
877
|
+
// Refresh calendar view to apply new constraints
|
|
878
|
+
this._eventManager.dispatchEvent(KTDatepickerEventName.UPDATE);
|
|
879
|
+
};
|
|
880
|
+
/**
|
|
881
|
+
* Update the datepicker (refresh view)
|
|
882
|
+
*/
|
|
883
|
+
KTDatepicker.prototype.update = function () {
|
|
884
|
+
// Trigger calendar update through events
|
|
885
|
+
this._eventManager.dispatchEvent(KTDatepickerEventName.UPDATE);
|
|
886
|
+
};
|
|
887
|
+
/**
|
|
888
|
+
* Destroy the datepicker instance and clean up
|
|
889
|
+
*/
|
|
890
|
+
KTDatepicker.prototype.destroy = function () {
|
|
891
|
+
// Remove event listeners
|
|
892
|
+
this._eventManager.removeEventListener(KTDatepickerEventName.DATE_CHANGE, this._handleDateChange.bind(this));
|
|
893
|
+
if (this._dateInputElement) {
|
|
894
|
+
this._dateInputElement.removeEventListener('change', this._handleInputChange.bind(this));
|
|
895
|
+
}
|
|
896
|
+
if (this._displayElement) {
|
|
897
|
+
this._displayElement.remove();
|
|
898
|
+
}
|
|
899
|
+
// Remove instance from element
|
|
900
|
+
this._element.removeAttribute('data-kt-datepicker-initialized');
|
|
901
|
+
delete this._element.instance;
|
|
902
|
+
// Remove initialized class
|
|
903
|
+
this._element.classList.remove('relative');
|
|
904
|
+
// Remove from instances map
|
|
905
|
+
KTDatepicker._instances.delete(this._element);
|
|
906
|
+
};
|
|
907
|
+
/**
|
|
908
|
+
* Dispatch a custom event
|
|
909
|
+
*
|
|
910
|
+
* @param eventName - Name of the event
|
|
911
|
+
* @param payload - Optional event payload
|
|
912
|
+
*/
|
|
913
|
+
KTDatepicker.prototype._dispatchEvent = function (eventName, payload) {
|
|
914
|
+
this._eventManager.dispatchEvent(eventName, payload);
|
|
915
|
+
};
|
|
916
|
+
/**
|
|
917
|
+
* Create instances for all datepicker elements on the page
|
|
918
|
+
*/
|
|
919
|
+
KTDatepicker.createInstances = function () {
|
|
920
|
+
var _this = this;
|
|
921
|
+
var elements = document.querySelectorAll('[data-kt-datepicker]');
|
|
922
|
+
elements.forEach(function (element) {
|
|
923
|
+
if (element.hasAttribute('data-kt-datepicker') &&
|
|
924
|
+
!element.getAttribute('data-kt-datepicker-initialized')) {
|
|
925
|
+
// Create instance
|
|
926
|
+
var instance = new KTDatepicker(element);
|
|
927
|
+
_this._instances.set(element, instance);
|
|
928
|
+
}
|
|
929
|
+
});
|
|
930
|
+
};
|
|
931
|
+
/**
|
|
932
|
+
* Initialize all datepickers on the page
|
|
933
|
+
*/
|
|
934
|
+
KTDatepicker.init = function () {
|
|
935
|
+
KTDatepicker.createInstances();
|
|
936
|
+
};
|
|
937
|
+
/**
|
|
938
|
+
* ========================================================================
|
|
939
|
+
* Static instances
|
|
940
|
+
* ========================================================================
|
|
941
|
+
*/
|
|
942
|
+
KTDatepicker._instances = new Map();
|
|
943
|
+
return KTDatepicker;
|
|
944
|
+
}(KTComponent));
|
|
945
|
+
export { KTDatepicker };
|
|
946
|
+
//# sourceMappingURL=datepicker.js.map
|