@keenthemes/ktui 1.0.8 → 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 +1 -1
- 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,1061 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
4
|
+
* Copyright 2025 by Keenthemes Inc
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.KTDatepickerCalendar = void 0;
|
|
8
|
+
var templates_1 = require("./templates");
|
|
9
|
+
var utils_1 = require("./utils");
|
|
10
|
+
var dropdown_1 = require("./dropdown");
|
|
11
|
+
var events_1 = require("./events");
|
|
12
|
+
/**
|
|
13
|
+
* Calendar component for the KTDatepicker
|
|
14
|
+
* Handles rendering and interactions with the calendar
|
|
15
|
+
*/
|
|
16
|
+
var KTDatepickerCalendar = /** @class */ (function () {
|
|
17
|
+
/**
|
|
18
|
+
* Constructor for the KTDatepickerCalendar class
|
|
19
|
+
*
|
|
20
|
+
* @param element - The datepicker element
|
|
21
|
+
* @param stateManager - State manager for the datepicker
|
|
22
|
+
*/
|
|
23
|
+
function KTDatepickerCalendar(element, stateManager) {
|
|
24
|
+
this._calendarContainer = null;
|
|
25
|
+
this._dropdownElement = null;
|
|
26
|
+
this._dropdownManager = null;
|
|
27
|
+
this._isVisible = false;
|
|
28
|
+
this._element = element;
|
|
29
|
+
this._stateManager = stateManager;
|
|
30
|
+
this._eventManager = stateManager.getEventManager();
|
|
31
|
+
// Get current date/time
|
|
32
|
+
var now = new Date();
|
|
33
|
+
this._currentViewMonth = now.getMonth();
|
|
34
|
+
this._currentViewYear = now.getFullYear();
|
|
35
|
+
this._initializeCalendar();
|
|
36
|
+
this._setupEventListeners();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Initialize the calendar
|
|
40
|
+
*/
|
|
41
|
+
KTDatepickerCalendar.prototype._initializeCalendar = function () {
|
|
42
|
+
var _this = this;
|
|
43
|
+
var config = this._stateManager.getConfig();
|
|
44
|
+
var locale = (0, utils_1.getLocaleConfig)(config);
|
|
45
|
+
// Create calendar container
|
|
46
|
+
this._dropdownElement = document.createElement('div');
|
|
47
|
+
this._dropdownElement.className = 'kt-datepicker-dropdown';
|
|
48
|
+
this._dropdownElement.setAttribute('role', 'dialog');
|
|
49
|
+
this._dropdownElement.setAttribute('aria-modal', 'true');
|
|
50
|
+
this._dropdownElement.setAttribute('aria-label', 'Calendar');
|
|
51
|
+
// Hidden by default
|
|
52
|
+
this._dropdownElement.classList.add('hidden');
|
|
53
|
+
this._dropdownElement.setAttribute('aria-hidden', 'true');
|
|
54
|
+
// Create header for navigation
|
|
55
|
+
var headerElement = document.createElement('div');
|
|
56
|
+
headerElement.className = 'kt-datepicker-calendar-header';
|
|
57
|
+
// Left navigation button
|
|
58
|
+
var leftNavButton = document.createElement('button');
|
|
59
|
+
leftNavButton.type = 'button';
|
|
60
|
+
leftNavButton.className = 'kt-datepicker-calendar-left-nav-btn';
|
|
61
|
+
leftNavButton.setAttribute('aria-label', 'Previous month');
|
|
62
|
+
leftNavButton.innerHTML =
|
|
63
|
+
'<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" /></svg>';
|
|
64
|
+
leftNavButton.addEventListener('click', function () { return _this._navigateMonth(-1); });
|
|
65
|
+
// Month and Year selector (center)
|
|
66
|
+
var headerCenter = document.createElement('div');
|
|
67
|
+
headerCenter.className = 'kt-datepicker-datepicker-header-middle';
|
|
68
|
+
// Right navigation button
|
|
69
|
+
var rightNavButton = document.createElement('button');
|
|
70
|
+
rightNavButton.type = 'button';
|
|
71
|
+
rightNavButton.className = 'kt-dropdown-calendar-right-nav-btn';
|
|
72
|
+
rightNavButton.setAttribute('aria-label', 'Next month');
|
|
73
|
+
rightNavButton.innerHTML =
|
|
74
|
+
'<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" /></svg>';
|
|
75
|
+
rightNavButton.addEventListener('click', function () { return _this._navigateMonth(1); });
|
|
76
|
+
// Assemble header
|
|
77
|
+
headerElement.appendChild(leftNavButton);
|
|
78
|
+
headerElement.appendChild(headerCenter);
|
|
79
|
+
headerElement.appendChild(rightNavButton);
|
|
80
|
+
this._dropdownElement.appendChild(headerElement);
|
|
81
|
+
// Create calendar content container
|
|
82
|
+
this._calendarContainer = document.createElement('div');
|
|
83
|
+
this._calendarContainer.className = 'kt-datepicker-calendar-container';
|
|
84
|
+
this._dropdownElement.appendChild(this._calendarContainer);
|
|
85
|
+
// Add calendar footer with action buttons
|
|
86
|
+
var footerElement = document.createElement('div');
|
|
87
|
+
footerElement.className = 'kt-datepicker-calendar-footer';
|
|
88
|
+
// Today button
|
|
89
|
+
var todayButton = document.createElement('button');
|
|
90
|
+
todayButton.type = 'button';
|
|
91
|
+
todayButton.className = 'kt-datepicker-calendar-today-btn';
|
|
92
|
+
todayButton.textContent = 'Today';
|
|
93
|
+
todayButton.addEventListener('click', function () { return _this._goToToday(); });
|
|
94
|
+
// Clear button
|
|
95
|
+
var clearButton = document.createElement('button');
|
|
96
|
+
clearButton.type = 'button';
|
|
97
|
+
clearButton.className = 'kt-datepicker-calendar-clear-btn';
|
|
98
|
+
clearButton.textContent = 'Clear';
|
|
99
|
+
clearButton.addEventListener('click', function () { return _this._clearSelection(); });
|
|
100
|
+
// Apply button
|
|
101
|
+
var applyButton = document.createElement('button');
|
|
102
|
+
applyButton.type = 'button';
|
|
103
|
+
applyButton.className = 'kt-datepicker-calendar-clear-btn';
|
|
104
|
+
applyButton.textContent = 'Apply';
|
|
105
|
+
applyButton.addEventListener('click', function () { return _this._applySelection(); });
|
|
106
|
+
// Assemble footer
|
|
107
|
+
footerElement.appendChild(todayButton);
|
|
108
|
+
var rightFooter = document.createElement('div');
|
|
109
|
+
rightFooter.className = 'kt-datepicker-calendar-footer-right';
|
|
110
|
+
rightFooter.appendChild(clearButton);
|
|
111
|
+
rightFooter.appendChild(applyButton);
|
|
112
|
+
footerElement.appendChild(rightFooter);
|
|
113
|
+
this._dropdownElement.appendChild(footerElement);
|
|
114
|
+
// Add to document
|
|
115
|
+
this._element.appendChild(this._dropdownElement);
|
|
116
|
+
// Initialize dropdown manager
|
|
117
|
+
this._initDropdownManager();
|
|
118
|
+
// Initialize calendar view
|
|
119
|
+
this._renderCalendarView();
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Initialize the dropdown manager
|
|
123
|
+
*/
|
|
124
|
+
KTDatepickerCalendar.prototype._initDropdownManager = function () {
|
|
125
|
+
var _this = this;
|
|
126
|
+
var config = this._stateManager.getConfig();
|
|
127
|
+
// Use the display element rather than the input element
|
|
128
|
+
var displayElement = this._element.querySelector('[data-kt-datepicker-display]');
|
|
129
|
+
var inputElement = this._element.querySelector('[data-kt-datepicker-input]');
|
|
130
|
+
var triggerElement = displayElement || inputElement;
|
|
131
|
+
if (triggerElement && this._dropdownElement) {
|
|
132
|
+
this._dropdownManager = new dropdown_1.KTDatepickerDropdown(this._element, triggerElement, this._dropdownElement, config);
|
|
133
|
+
// Add keyboard event listener to the trigger element
|
|
134
|
+
triggerElement.addEventListener('keydown', function (e) {
|
|
135
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
136
|
+
e.preventDefault();
|
|
137
|
+
if (!_this._isVisible) {
|
|
138
|
+
// Open the dropdown
|
|
139
|
+
_this._stateManager.setOpen(true);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Set up event listeners for calendar interactions
|
|
147
|
+
*/
|
|
148
|
+
KTDatepickerCalendar.prototype._setupEventListeners = function () {
|
|
149
|
+
var _this = this;
|
|
150
|
+
if (!this._dropdownElement)
|
|
151
|
+
return;
|
|
152
|
+
// Get elements
|
|
153
|
+
var prevMonthBtn = this._dropdownElement.querySelector('button[aria-label="Previous Month"]');
|
|
154
|
+
var nextMonthBtn = this._dropdownElement.querySelector('button[aria-label="Next Month"]');
|
|
155
|
+
// Find buttons by text content instead of using jQuery-style selectors
|
|
156
|
+
var buttons = this._dropdownElement.querySelectorAll('button');
|
|
157
|
+
var todayBtn = null;
|
|
158
|
+
var clearBtn = null;
|
|
159
|
+
var applyBtn = null;
|
|
160
|
+
buttons.forEach(function (btn) {
|
|
161
|
+
var _a;
|
|
162
|
+
var btnText = (_a = btn.textContent) === null || _a === void 0 ? void 0 : _a.trim();
|
|
163
|
+
if (btnText === 'Today')
|
|
164
|
+
todayBtn = btn;
|
|
165
|
+
else if (btnText === 'Clear')
|
|
166
|
+
clearBtn = btn;
|
|
167
|
+
else if (btnText === 'Apply')
|
|
168
|
+
applyBtn = btn;
|
|
169
|
+
});
|
|
170
|
+
var monthYearText = this._dropdownElement.querySelector('.kt-datepicker-calendar-monthyear-text');
|
|
171
|
+
// Month navigation
|
|
172
|
+
if (prevMonthBtn) {
|
|
173
|
+
prevMonthBtn.addEventListener('click', function () { return _this._navigateMonth(-1); });
|
|
174
|
+
}
|
|
175
|
+
if (nextMonthBtn) {
|
|
176
|
+
nextMonthBtn.addEventListener('click', function () { return _this._navigateMonth(1); });
|
|
177
|
+
}
|
|
178
|
+
// Month/year view toggle
|
|
179
|
+
if (monthYearText) {
|
|
180
|
+
monthYearText.addEventListener('click', function () {
|
|
181
|
+
return _this._toggleMonthYearView();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Today, Clear, Apply buttons
|
|
185
|
+
if (todayBtn) {
|
|
186
|
+
todayBtn.addEventListener('click', function () { return _this._goToToday(); });
|
|
187
|
+
}
|
|
188
|
+
if (clearBtn) {
|
|
189
|
+
clearBtn.addEventListener('click', function () { return _this._clearSelection(); });
|
|
190
|
+
}
|
|
191
|
+
if (applyBtn) {
|
|
192
|
+
applyBtn.addEventListener('click', function () { return _this._applySelection(); });
|
|
193
|
+
}
|
|
194
|
+
// Handle day selection through event delegation
|
|
195
|
+
if (this._calendarContainer) {
|
|
196
|
+
this._calendarContainer.addEventListener('click', function (e) {
|
|
197
|
+
var target = e.target;
|
|
198
|
+
var dayButton = target.closest('button[data-date]');
|
|
199
|
+
if (dayButton && !dayButton.hasAttribute('disabled')) {
|
|
200
|
+
// Get the date ID directly from the clicked button (YYYY-MM-DD format)
|
|
201
|
+
var dateIdAttr = dayButton.getAttribute('data-date-id');
|
|
202
|
+
if (dateIdAttr) {
|
|
203
|
+
// Parse the ISO date string to get exact year, month, day
|
|
204
|
+
var _a = dateIdAttr
|
|
205
|
+
.split('-')
|
|
206
|
+
.map(function (part) { return parseInt(part, 10); }), year = _a[0], month = _a[1], day = _a[2];
|
|
207
|
+
// Create the date object from the parsed components
|
|
208
|
+
var clickedDate = new Date(year, month - 1, day); // Month is 0-indexed in JS
|
|
209
|
+
clickedDate.setHours(0, 0, 0, 0); // Set to midnight
|
|
210
|
+
// Handle this date directly instead of using day number
|
|
211
|
+
_this._handleDateSelection(clickedDate, dayButton);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// Fallback to old method using day number if date-id is not present
|
|
215
|
+
var dateAttr = dayButton.getAttribute('data-date');
|
|
216
|
+
if (dateAttr) {
|
|
217
|
+
var day = parseInt(dateAttr, 10);
|
|
218
|
+
_this._handleDaySelection(day);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
// Add hover effect for range selection
|
|
224
|
+
this._calendarContainer.addEventListener('mouseover', function (e) {
|
|
225
|
+
var state = _this._stateManager.getState();
|
|
226
|
+
var config = _this._stateManager.getConfig();
|
|
227
|
+
// Only apply hover effect in range mode when start date is selected but end date is not
|
|
228
|
+
if (!config.range ||
|
|
229
|
+
!state.selectedDateRange ||
|
|
230
|
+
!state.selectedDateRange.startDate ||
|
|
231
|
+
state.selectedDateRange.endDate) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
var target = e.target;
|
|
235
|
+
var dayButton = target.closest('button[data-date]');
|
|
236
|
+
if (dayButton && !dayButton.hasAttribute('disabled')) {
|
|
237
|
+
// Clear any existing hover classes
|
|
238
|
+
_this._clearRangeHoverClasses();
|
|
239
|
+
// Get the proper date from the data-date-id attribute
|
|
240
|
+
var dateIdAttr = dayButton.getAttribute('data-date-id');
|
|
241
|
+
if (dateIdAttr) {
|
|
242
|
+
// Parse the ISO date string (YYYY-MM-DD)
|
|
243
|
+
var _a = dateIdAttr
|
|
244
|
+
.split('-')
|
|
245
|
+
.map(function (part) { return parseInt(part, 10); }), year = _a[0], month = _a[1], day = _a[2];
|
|
246
|
+
var hoverDate = new Date(year, month - 1, day); // Month is 0-indexed in JS Date
|
|
247
|
+
// Apply hover effect between start date and current hover date
|
|
248
|
+
_this._applyRangeHoverEffect(state.selectedDateRange.startDate, hoverDate);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Fallback to old method if data-date-id is not present
|
|
252
|
+
var dateAttr = dayButton.getAttribute('data-date');
|
|
253
|
+
if (dateAttr) {
|
|
254
|
+
var day = parseInt(dateAttr, 10);
|
|
255
|
+
var hoverDate = new Date(state.currentDate);
|
|
256
|
+
hoverDate.setDate(day);
|
|
257
|
+
// Apply hover effect between start date and current hover date
|
|
258
|
+
_this._applyRangeHoverEffect(state.selectedDateRange.startDate, hoverDate);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
// Clear hover effect when mouse leaves the calendar
|
|
264
|
+
this._calendarContainer.addEventListener('mouseleave', function () {
|
|
265
|
+
_this._clearRangeHoverClasses();
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
// Listen for state changes
|
|
269
|
+
this._eventManager.addEventListener(events_1.KTDatepickerEventName.STATE_CHANGE, function (e) {
|
|
270
|
+
var _a;
|
|
271
|
+
var detail = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.payload;
|
|
272
|
+
var config = _this._stateManager.getConfig();
|
|
273
|
+
// For range selection, check if we need to keep the dropdown open
|
|
274
|
+
if (config.range && detail && detail.selectedDateRange) {
|
|
275
|
+
var _b = detail.selectedDateRange, startDate = _b.startDate, endDate = _b.endDate;
|
|
276
|
+
// If start date is set but no end date, keep dropdown open
|
|
277
|
+
if (startDate && !endDate) {
|
|
278
|
+
_this._stateManager.getState().isRangeSelectionInProgress = true;
|
|
279
|
+
}
|
|
280
|
+
else if (startDate && endDate) {
|
|
281
|
+
_this._stateManager.getState().isRangeSelectionInProgress = false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Update calendar view
|
|
285
|
+
_this._updateCalendarView();
|
|
286
|
+
});
|
|
287
|
+
// Listen for other state changes
|
|
288
|
+
this._eventManager.addEventListener(events_1.KTDatepickerEventName.VIEW_CHANGE, function () {
|
|
289
|
+
return _this._updateViewMode();
|
|
290
|
+
});
|
|
291
|
+
this._eventManager.addEventListener(events_1.KTDatepickerEventName.OPEN, function () {
|
|
292
|
+
return _this.show();
|
|
293
|
+
});
|
|
294
|
+
this._eventManager.addEventListener(events_1.KTDatepickerEventName.CLOSE, function () {
|
|
295
|
+
return _this.hide();
|
|
296
|
+
});
|
|
297
|
+
this._eventManager.addEventListener(events_1.KTDatepickerEventName.UPDATE, function () {
|
|
298
|
+
return _this._updateCalendarView();
|
|
299
|
+
});
|
|
300
|
+
// Time inputs
|
|
301
|
+
var timeContainer = this._dropdownElement.querySelector('.kt-datepicker-calendar-time-container');
|
|
302
|
+
if (timeContainer) {
|
|
303
|
+
var hourInput = timeContainer.querySelector('input[aria-label="Hour"]');
|
|
304
|
+
var minuteInput = timeContainer.querySelector('input[aria-label="Minute"]');
|
|
305
|
+
var secondInput = timeContainer.querySelector('input[aria-label="Second"]');
|
|
306
|
+
var amButton = timeContainer.querySelector('button[aria-label="AM"]');
|
|
307
|
+
var pmButton = timeContainer.querySelector('button[aria-label="PM"]');
|
|
308
|
+
// Update AM/PM button texts
|
|
309
|
+
var config = this._stateManager.getConfig();
|
|
310
|
+
if (amButton)
|
|
311
|
+
amButton.textContent = config.am;
|
|
312
|
+
if (pmButton)
|
|
313
|
+
pmButton.textContent = config.pm;
|
|
314
|
+
// Time input listeners
|
|
315
|
+
if (hourInput) {
|
|
316
|
+
hourInput.addEventListener('change', function () { return _this._handleTimeChange(); });
|
|
317
|
+
}
|
|
318
|
+
if (minuteInput) {
|
|
319
|
+
minuteInput.addEventListener('change', function () { return _this._handleTimeChange(); });
|
|
320
|
+
}
|
|
321
|
+
if (secondInput) {
|
|
322
|
+
secondInput.addEventListener('change', function () { return _this._handleTimeChange(); });
|
|
323
|
+
}
|
|
324
|
+
// AM/PM selection
|
|
325
|
+
if (amButton) {
|
|
326
|
+
amButton.addEventListener('click', function () { return _this._setAmPm('AM'); });
|
|
327
|
+
}
|
|
328
|
+
if (pmButton) {
|
|
329
|
+
pmButton.addEventListener('click', function () { return _this._setAmPm('PM'); });
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Render the calendar view based on current state
|
|
335
|
+
*/
|
|
336
|
+
KTDatepickerCalendar.prototype._renderCalendarView = function () {
|
|
337
|
+
var _this = this;
|
|
338
|
+
if (!this._calendarContainer)
|
|
339
|
+
return;
|
|
340
|
+
var state = this._stateManager.getState();
|
|
341
|
+
var config = this._stateManager.getConfig();
|
|
342
|
+
var locale = (0, utils_1.getLocaleConfig)(config);
|
|
343
|
+
// Clear existing content
|
|
344
|
+
this._calendarContainer.innerHTML = '';
|
|
345
|
+
// Set up proper container classes for multiple months view
|
|
346
|
+
if (config.visibleMonths > 1) {
|
|
347
|
+
// For multiple months, use a flex container with no wrapping
|
|
348
|
+
this._calendarContainer.className = 'kt-datepicker-calendar-container-mt';
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
this._calendarContainer.className = 'kt-datepicker-calendar-container';
|
|
352
|
+
}
|
|
353
|
+
// Render based on view mode
|
|
354
|
+
switch (state.viewMode) {
|
|
355
|
+
case 'days':
|
|
356
|
+
// For each visible month, create a calendar
|
|
357
|
+
for (var i = 0; i < config.visibleMonths; i++) {
|
|
358
|
+
// Calculate the month to display
|
|
359
|
+
var tempDate = new Date(state.currentDate);
|
|
360
|
+
tempDate.setMonth(state.currentDate.getMonth() + i);
|
|
361
|
+
var month = tempDate.getMonth();
|
|
362
|
+
var year = tempDate.getFullYear();
|
|
363
|
+
// Create month container
|
|
364
|
+
var monthContainer = document.createElement('div');
|
|
365
|
+
// Set appropriate class based on number of months
|
|
366
|
+
if (config.visibleMonths > 1) {
|
|
367
|
+
// For multiple months, use fixed width and properly spaced
|
|
368
|
+
monthContainer.className = 'kt-datepicker-calendar-month-mt';
|
|
369
|
+
monthContainer.setAttribute('data-month-id', "".concat(month, "-").concat(year));
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
monthContainer.className = 'kt-datepicker-calendar-month';
|
|
373
|
+
}
|
|
374
|
+
// Add month header
|
|
375
|
+
var monthHeader = document.createElement('div');
|
|
376
|
+
monthHeader.className = 'kt-datepicker-calendar-month-header';
|
|
377
|
+
monthHeader.textContent = "".concat(locale.monthNames[month], " ").concat(year);
|
|
378
|
+
monthContainer.appendChild(monthHeader);
|
|
379
|
+
// Generate calendar grid
|
|
380
|
+
monthContainer.innerHTML += (0, templates_1.calendarGridTemplate)(locale, config.weekDays);
|
|
381
|
+
// Get days for the month
|
|
382
|
+
var calendarMatrix = (0, utils_1.generateCalendarMonth)(year, month, config);
|
|
383
|
+
// Render days
|
|
384
|
+
var daysBody = monthContainer.querySelector('tbody');
|
|
385
|
+
if (daysBody) {
|
|
386
|
+
daysBody.innerHTML = this._renderDays(calendarMatrix, month, year);
|
|
387
|
+
}
|
|
388
|
+
// Add to container
|
|
389
|
+
this._calendarContainer.appendChild(monthContainer);
|
|
390
|
+
}
|
|
391
|
+
// Update the month/year display in header
|
|
392
|
+
this._updateMonthYearDisplay();
|
|
393
|
+
break;
|
|
394
|
+
case 'months':
|
|
395
|
+
// Render month selection view with current month
|
|
396
|
+
var currentMonth = state.currentDate.getMonth();
|
|
397
|
+
this._calendarContainer.innerHTML = (0, templates_1.monthSelectionTemplate)(locale, currentMonth);
|
|
398
|
+
// Add click events to month buttons
|
|
399
|
+
var monthButtons = this._calendarContainer.querySelectorAll('button[data-month]');
|
|
400
|
+
monthButtons.forEach(function (btn) {
|
|
401
|
+
btn.addEventListener('click', function (e) {
|
|
402
|
+
var target = e.target;
|
|
403
|
+
var monthIdx = target.getAttribute('data-month');
|
|
404
|
+
if (monthIdx) {
|
|
405
|
+
_this._selectMonth(parseInt(monthIdx, 10));
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
break;
|
|
410
|
+
case 'years':
|
|
411
|
+
// Get current year and calculate year range
|
|
412
|
+
var currentYear = state.currentDate.getFullYear();
|
|
413
|
+
var startYear_1 = currentYear - Math.floor(config.visibleYears / 2);
|
|
414
|
+
var endYear_1 = startYear_1 + config.visibleYears - 1;
|
|
415
|
+
// Render year selection view
|
|
416
|
+
this._calendarContainer.innerHTML = (0, templates_1.yearSelectionTemplate)(startYear_1, endYear_1, currentYear);
|
|
417
|
+
// Add click events to year buttons
|
|
418
|
+
var yearButtons = this._calendarContainer.querySelectorAll('button[data-year]');
|
|
419
|
+
yearButtons.forEach(function (btn) {
|
|
420
|
+
btn.addEventListener('click', function (e) {
|
|
421
|
+
var target = e.target;
|
|
422
|
+
var year = target.getAttribute('data-year');
|
|
423
|
+
if (year) {
|
|
424
|
+
_this._selectYear(parseInt(year, 10));
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
// Add navigation for year ranges
|
|
429
|
+
var prevYearsBtn = this._calendarContainer.querySelector('button[data-year-nav="prev"]');
|
|
430
|
+
if (prevYearsBtn) {
|
|
431
|
+
prevYearsBtn.addEventListener('click', function () {
|
|
432
|
+
var newYear = startYear_1 - config.visibleYears;
|
|
433
|
+
var newDate = new Date(state.currentDate);
|
|
434
|
+
newDate.setFullYear(newYear);
|
|
435
|
+
_this._stateManager.setCurrentDate(newDate);
|
|
436
|
+
_this._renderCalendarView();
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
var nextYearsBtn = this._calendarContainer.querySelector('button[data-year-nav="next"]');
|
|
440
|
+
if (nextYearsBtn) {
|
|
441
|
+
nextYearsBtn.addEventListener('click', function () {
|
|
442
|
+
var newYear = endYear_1 + 1;
|
|
443
|
+
var newDate = new Date(state.currentDate);
|
|
444
|
+
newDate.setFullYear(newYear);
|
|
445
|
+
_this._stateManager.setCurrentDate(newDate);
|
|
446
|
+
_this._renderCalendarView();
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
/**
|
|
453
|
+
* Render days for a calendar month
|
|
454
|
+
*
|
|
455
|
+
* @param calendarMatrix - Matrix of dates for the month
|
|
456
|
+
* @param currentMonth - Current month
|
|
457
|
+
* @param currentYear - Current year
|
|
458
|
+
* @returns HTML string for the days
|
|
459
|
+
*/
|
|
460
|
+
KTDatepickerCalendar.prototype._renderDays = function (calendarMatrix, currentMonth, currentYear) {
|
|
461
|
+
var state = this._stateManager.getState();
|
|
462
|
+
var config = this._stateManager.getConfig();
|
|
463
|
+
var today = new Date();
|
|
464
|
+
today.setHours(0, 0, 0, 0);
|
|
465
|
+
var html = '';
|
|
466
|
+
// Loop through each week
|
|
467
|
+
for (var _i = 0, calendarMatrix_1 = calendarMatrix; _i < calendarMatrix_1.length; _i++) {
|
|
468
|
+
var week = calendarMatrix_1[_i];
|
|
469
|
+
html += '<tr>';
|
|
470
|
+
var _loop_1 = function (date) {
|
|
471
|
+
// Determine cell properties
|
|
472
|
+
var isCurrentMonth = date.getMonth() === currentMonth;
|
|
473
|
+
var isToday = (0, utils_1.isSameDay)(date, today);
|
|
474
|
+
var isSelected = false;
|
|
475
|
+
var isRangeStart = false;
|
|
476
|
+
var isRangeEnd = false;
|
|
477
|
+
var isInRange = false;
|
|
478
|
+
// Check if date is selected
|
|
479
|
+
if (state.selectedDate && (0, utils_1.isSameDay)(date, state.selectedDate)) {
|
|
480
|
+
isSelected = true;
|
|
481
|
+
}
|
|
482
|
+
// Check if date is in range for range selection
|
|
483
|
+
if (config.range && state.selectedDateRange) {
|
|
484
|
+
var _b = state.selectedDateRange, startDate = _b.startDate, endDate = _b.endDate;
|
|
485
|
+
if (startDate && (0, utils_1.isSameDay)(date, startDate)) {
|
|
486
|
+
isRangeStart = true;
|
|
487
|
+
isSelected = true;
|
|
488
|
+
}
|
|
489
|
+
if (endDate && (0, utils_1.isSameDay)(date, endDate)) {
|
|
490
|
+
isRangeEnd = true;
|
|
491
|
+
isSelected = true;
|
|
492
|
+
}
|
|
493
|
+
if (startDate && endDate && (0, utils_1.isDateBetween)(date, startDate, endDate)) {
|
|
494
|
+
isInRange = true;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
// Check if date is in multi-date selection
|
|
498
|
+
if (config.multiDateSelection && state.selectedDates.length > 0) {
|
|
499
|
+
isSelected = state.selectedDates.some(function (d) { return (0, utils_1.isSameDay)(date, d); });
|
|
500
|
+
}
|
|
501
|
+
// Check if date is disabled
|
|
502
|
+
var isDisabled = (0, utils_1.isDateDisabled)(date, config);
|
|
503
|
+
// Check if weekend
|
|
504
|
+
var isWeekendDay = (0, utils_1.isWeekend)(date);
|
|
505
|
+
// Get the actual month and year of this date (may differ from currentMonth/currentYear for adjacent months)
|
|
506
|
+
var actualMonth = date.getMonth();
|
|
507
|
+
var actualYear = date.getFullYear();
|
|
508
|
+
// Generate day cell
|
|
509
|
+
html += (0, templates_1.dayTemplate)(date.getDate(), actualMonth, actualYear, isCurrentMonth, isToday, isSelected, isDisabled, isRangeStart, isRangeEnd, isInRange, isWeekendDay);
|
|
510
|
+
};
|
|
511
|
+
// Loop through each day in the week
|
|
512
|
+
for (var _a = 0, week_1 = week; _a < week_1.length; _a++) {
|
|
513
|
+
var date = week_1[_a];
|
|
514
|
+
_loop_1(date);
|
|
515
|
+
}
|
|
516
|
+
html += '</tr>';
|
|
517
|
+
}
|
|
518
|
+
return html;
|
|
519
|
+
};
|
|
520
|
+
/**
|
|
521
|
+
* Update the month and year display in the header
|
|
522
|
+
*/
|
|
523
|
+
KTDatepickerCalendar.prototype._updateMonthYearDisplay = function () {
|
|
524
|
+
var _this = this;
|
|
525
|
+
if (!this._dropdownElement)
|
|
526
|
+
return;
|
|
527
|
+
var state = this._stateManager.getState();
|
|
528
|
+
var config = this._stateManager.getConfig();
|
|
529
|
+
var locale = (0, utils_1.getLocaleConfig)(config);
|
|
530
|
+
// Find the calendar header
|
|
531
|
+
var calendarHeader = this._dropdownElement.querySelector('.kt-datepicker-calendar-header');
|
|
532
|
+
if (!calendarHeader)
|
|
533
|
+
return;
|
|
534
|
+
var currentMonth = state.currentDate.getMonth();
|
|
535
|
+
var currentYear = state.currentDate.getFullYear();
|
|
536
|
+
// Update the header with month/year selectors
|
|
537
|
+
calendarHeader.innerHTML = (0, templates_1.monthYearSelectTemplate)(locale, currentMonth, currentYear);
|
|
538
|
+
// Add event listeners to the month and year selectors
|
|
539
|
+
var monthSelector = calendarHeader.querySelector('.kt-datepicker-calendar-month-selector');
|
|
540
|
+
var yearSelector = calendarHeader.querySelector('.kt-datepicker-calendar-year-selector');
|
|
541
|
+
if (monthSelector) {
|
|
542
|
+
monthSelector.addEventListener('click', function () {
|
|
543
|
+
// Switch to months view
|
|
544
|
+
_this._stateManager.setViewMode('months');
|
|
545
|
+
_this._renderCalendarView();
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
if (yearSelector) {
|
|
549
|
+
yearSelector.addEventListener('click', function () {
|
|
550
|
+
// Switch to years view
|
|
551
|
+
_this._stateManager.setViewMode('years');
|
|
552
|
+
_this._renderCalendarView();
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
/**
|
|
557
|
+
* Navigate to a different month
|
|
558
|
+
*
|
|
559
|
+
* @param offset - Number of months to offset by
|
|
560
|
+
*/
|
|
561
|
+
KTDatepickerCalendar.prototype._navigateMonth = function (offset) {
|
|
562
|
+
var state = this._stateManager.getState();
|
|
563
|
+
var newDate = new Date(state.currentDate);
|
|
564
|
+
newDate.setMonth(newDate.getMonth() + offset);
|
|
565
|
+
this._stateManager.setCurrentDate(newDate);
|
|
566
|
+
this._renderCalendarView();
|
|
567
|
+
};
|
|
568
|
+
/**
|
|
569
|
+
* Handle direct date selection (new method that takes the actual date object)
|
|
570
|
+
*
|
|
571
|
+
* @param selectedDate - The exact date that was selected
|
|
572
|
+
* @param clickedButton - The button element that was clicked
|
|
573
|
+
*/
|
|
574
|
+
KTDatepickerCalendar.prototype._handleDateSelection = function (selectedDate, clickedButton) {
|
|
575
|
+
var state = this._stateManager.getState();
|
|
576
|
+
var config = this._stateManager.getConfig();
|
|
577
|
+
// Check if the date is disabled (outside min/max range or explicitly disabled)
|
|
578
|
+
if ((0, utils_1.isDateDisabled)(selectedDate, config)) {
|
|
579
|
+
console.log('Date is disabled, ignoring selection:', selectedDate.toISOString());
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
// Create a new date object set to noon of the selected date in local timezone
|
|
583
|
+
// This prevents timezone shifts causing the wrong date to be selected
|
|
584
|
+
var localSelectedDate = new Date(selectedDate);
|
|
585
|
+
localSelectedDate.setHours(12, 0, 0, 0);
|
|
586
|
+
// Set time if enabled
|
|
587
|
+
if (config.enableTime && state.selectedTime) {
|
|
588
|
+
localSelectedDate.setHours(state.selectedTime.hours, state.selectedTime.minutes, state.selectedTime.seconds, 0);
|
|
589
|
+
}
|
|
590
|
+
// Get the current range state before updating
|
|
591
|
+
var currentRange = state.selectedDateRange;
|
|
592
|
+
var isStartingNewRange = !currentRange ||
|
|
593
|
+
!currentRange.startDate ||
|
|
594
|
+
(currentRange.startDate && currentRange.endDate);
|
|
595
|
+
// Determine if we're in a month different from the currently displayed one
|
|
596
|
+
var selectedMonth = localSelectedDate.getMonth();
|
|
597
|
+
var currentViewMonth = state.currentDate.getMonth();
|
|
598
|
+
var isInDifferentMonth = selectedMonth !== currentViewMonth;
|
|
599
|
+
console.log('Selected date:', localSelectedDate.toISOString(), 'Month:', selectedMonth, 'Current view month:', currentViewMonth, 'Day of month:', localSelectedDate.getDate());
|
|
600
|
+
// Call the state manager's setSelectedDate method
|
|
601
|
+
this._stateManager.setSelectedDate(localSelectedDate);
|
|
602
|
+
// After setting the date, get the updated range state
|
|
603
|
+
var updatedRange = state.selectedDateRange;
|
|
604
|
+
// If we're in range mode, handle specific range selection behavior
|
|
605
|
+
if (config.range) {
|
|
606
|
+
if (isStartingNewRange) {
|
|
607
|
+
console.log('Starting new range selection with date:', localSelectedDate.toISOString());
|
|
608
|
+
// If starting a range with a date in a different month, update the view
|
|
609
|
+
if (isInDifferentMonth) {
|
|
610
|
+
this._stateManager.setCurrentDate(localSelectedDate);
|
|
611
|
+
}
|
|
612
|
+
// Explicitly clear any hover effects when starting a new range
|
|
613
|
+
this._clearRangeHoverClasses();
|
|
614
|
+
}
|
|
615
|
+
else {
|
|
616
|
+
// This is the second click to complete a range
|
|
617
|
+
console.log('Completing range selection with date:', localSelectedDate.toISOString());
|
|
618
|
+
// If the selected range spans different months and we have multiple visible months
|
|
619
|
+
if (updatedRange &&
|
|
620
|
+
updatedRange.startDate &&
|
|
621
|
+
updatedRange.endDate &&
|
|
622
|
+
config.visibleMonths > 1) {
|
|
623
|
+
// Determine range start and end months
|
|
624
|
+
var startMonth = updatedRange.startDate.getMonth();
|
|
625
|
+
var endMonth = updatedRange.endDate.getMonth();
|
|
626
|
+
// If range spans multiple months, update view to show the earlier month
|
|
627
|
+
if (startMonth !== endMonth) {
|
|
628
|
+
// Show the earlier month as the first visible month
|
|
629
|
+
var earlierDate = updatedRange.startDate < updatedRange.endDate
|
|
630
|
+
? updatedRange.startDate
|
|
631
|
+
: updatedRange.endDate;
|
|
632
|
+
this._stateManager.setCurrentDate(earlierDate);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
// Close dropdown only if range selection is complete
|
|
637
|
+
if (updatedRange && updatedRange.startDate && updatedRange.endDate) {
|
|
638
|
+
this._stateManager.setOpen(false);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
else {
|
|
642
|
+
// For single date selection, close the dropdown
|
|
643
|
+
this._stateManager.setOpen(false);
|
|
644
|
+
}
|
|
645
|
+
// Update calendar view to reflect changes
|
|
646
|
+
this._updateCalendarView();
|
|
647
|
+
};
|
|
648
|
+
/**
|
|
649
|
+
* Handle day selection (legacy method, kept for backward compatibility)
|
|
650
|
+
*
|
|
651
|
+
* @param day - Day number
|
|
652
|
+
*/
|
|
653
|
+
KTDatepickerCalendar.prototype._handleDaySelection = function (day) {
|
|
654
|
+
var _a;
|
|
655
|
+
var state = this._stateManager.getState();
|
|
656
|
+
var config = this._stateManager.getConfig();
|
|
657
|
+
// Find the clicked button element using data-date attribute
|
|
658
|
+
var dayButtons = (_a = this._calendarContainer) === null || _a === void 0 ? void 0 : _a.querySelectorAll("button[data-date=\"".concat(day, "\"]"));
|
|
659
|
+
if (!dayButtons || dayButtons.length === 0)
|
|
660
|
+
return;
|
|
661
|
+
// First look for the button that matches the clicked target in the current month
|
|
662
|
+
var clickedButton = null;
|
|
663
|
+
// Find the actual button that was likely clicked (prefer current month days)
|
|
664
|
+
for (var i = 0; i < dayButtons.length; i++) {
|
|
665
|
+
var button = dayButtons[i];
|
|
666
|
+
var parentCell = button.closest('td');
|
|
667
|
+
// Check if the day is in the current month (not faded)
|
|
668
|
+
var isCurrentMonth = !button.classList.contains('current') &&
|
|
669
|
+
(!parentCell || !parentCell.classList.contains('current'));
|
|
670
|
+
if (isCurrentMonth) {
|
|
671
|
+
clickedButton = button;
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
// If no current month button found, use the first one
|
|
676
|
+
if (!clickedButton && dayButtons.length > 0) {
|
|
677
|
+
clickedButton = dayButtons[0];
|
|
678
|
+
}
|
|
679
|
+
if (!clickedButton)
|
|
680
|
+
return;
|
|
681
|
+
// Get the proper date from the data-date-id attribute which contains YYYY-MM-DD
|
|
682
|
+
var dateIdAttr = clickedButton.getAttribute('data-date-id');
|
|
683
|
+
if (!dateIdAttr)
|
|
684
|
+
return;
|
|
685
|
+
// Parse the ISO date string
|
|
686
|
+
var _b = dateIdAttr
|
|
687
|
+
.split('-')
|
|
688
|
+
.map(function (part) { return parseInt(part, 10); }), year = _b[0], month = _b[1], dayOfMonth = _b[2];
|
|
689
|
+
// Create the date object with the proper timezone handling
|
|
690
|
+
// We'll set it to noon in local time to avoid timezone issues
|
|
691
|
+
var selectedDate = new Date(year, month - 1, dayOfMonth, 12, 0, 0, 0); // Month is 0-indexed in JS Date, and setting time to noon
|
|
692
|
+
// First check if this date is disabled (outside min/max range)
|
|
693
|
+
if ((0, utils_1.isDateDisabled)(selectedDate, config)) {
|
|
694
|
+
console.log('Date is disabled, ignoring selection:', selectedDate.toISOString());
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
// Use the new direct date selection method
|
|
698
|
+
this._handleDateSelection(selectedDate, clickedButton);
|
|
699
|
+
};
|
|
700
|
+
/**
|
|
701
|
+
* Toggle between days, months, and years view
|
|
702
|
+
*/
|
|
703
|
+
KTDatepickerCalendar.prototype._toggleMonthYearView = function () {
|
|
704
|
+
var state = this._stateManager.getState();
|
|
705
|
+
var newMode;
|
|
706
|
+
switch (state.viewMode) {
|
|
707
|
+
case 'days':
|
|
708
|
+
newMode = 'months';
|
|
709
|
+
break;
|
|
710
|
+
case 'months':
|
|
711
|
+
newMode = 'years';
|
|
712
|
+
break;
|
|
713
|
+
case 'years':
|
|
714
|
+
newMode = 'days';
|
|
715
|
+
break;
|
|
716
|
+
default:
|
|
717
|
+
newMode = 'days';
|
|
718
|
+
}
|
|
719
|
+
this._stateManager.setViewMode(newMode);
|
|
720
|
+
this._renderCalendarView();
|
|
721
|
+
};
|
|
722
|
+
/**
|
|
723
|
+
* Update view mode based on state change
|
|
724
|
+
*/
|
|
725
|
+
KTDatepickerCalendar.prototype._updateViewMode = function () {
|
|
726
|
+
this._renderCalendarView();
|
|
727
|
+
};
|
|
728
|
+
/**
|
|
729
|
+
* Go to today's date
|
|
730
|
+
*/
|
|
731
|
+
KTDatepickerCalendar.prototype._goToToday = function () {
|
|
732
|
+
var today = new Date();
|
|
733
|
+
this._stateManager.setCurrentDate(today);
|
|
734
|
+
this._renderCalendarView();
|
|
735
|
+
};
|
|
736
|
+
/**
|
|
737
|
+
* Clear date selection
|
|
738
|
+
*/
|
|
739
|
+
KTDatepickerCalendar.prototype._clearSelection = function () {
|
|
740
|
+
this._stateManager.setSelectedDate(null);
|
|
741
|
+
this._updateCalendarView();
|
|
742
|
+
};
|
|
743
|
+
/**
|
|
744
|
+
* Apply current selection and close dropdown
|
|
745
|
+
*/
|
|
746
|
+
KTDatepickerCalendar.prototype._applySelection = function () {
|
|
747
|
+
var state = this._stateManager.getState();
|
|
748
|
+
var config = this._stateManager.getConfig();
|
|
749
|
+
// For range selection, check if range selection is in progress
|
|
750
|
+
if (config.range && state.isRangeSelectionInProgress) {
|
|
751
|
+
console.log('Apply button clicked, but range selection in progress - keeping dropdown open');
|
|
752
|
+
// Don't close when range selection is in progress
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
// Close dropdown for other cases
|
|
756
|
+
this._stateManager.setOpen(false);
|
|
757
|
+
};
|
|
758
|
+
/**
|
|
759
|
+
* Handle time input changes
|
|
760
|
+
*/
|
|
761
|
+
KTDatepickerCalendar.prototype._handleTimeChange = function () {
|
|
762
|
+
if (!this._dropdownElement)
|
|
763
|
+
return;
|
|
764
|
+
var timeContainer = this._dropdownElement.querySelector('.kt-datepicker-calendar-time-container');
|
|
765
|
+
if (!timeContainer)
|
|
766
|
+
return;
|
|
767
|
+
var hourInput = timeContainer.querySelector('input[aria-label="Hour"]');
|
|
768
|
+
var minuteInput = timeContainer.querySelector('input[aria-label="Minute"]');
|
|
769
|
+
var secondInput = timeContainer.querySelector('input[aria-label="Second"]');
|
|
770
|
+
var amButton = timeContainer.querySelector('button[aria-label="AM"]');
|
|
771
|
+
var pmButton = timeContainer.querySelector('button[aria-label="PM"]');
|
|
772
|
+
if (!hourInput || !minuteInput || !secondInput)
|
|
773
|
+
return;
|
|
774
|
+
// Get input values
|
|
775
|
+
var hours = parseInt(hourInput.value, 10);
|
|
776
|
+
var minutes = parseInt(minuteInput.value, 10);
|
|
777
|
+
var seconds = parseInt(secondInput.value, 10);
|
|
778
|
+
// Validate values
|
|
779
|
+
var isValidHours = !isNaN(hours) && hours >= 0 && hours <= 23;
|
|
780
|
+
var isValidMinutes = !isNaN(minutes) && minutes >= 0 && minutes <= 59;
|
|
781
|
+
var isValidSeconds = !isNaN(seconds) && seconds >= 0 && seconds <= 59;
|
|
782
|
+
if (!isValidHours || !isValidMinutes || !isValidSeconds)
|
|
783
|
+
return;
|
|
784
|
+
// Check if using 12-hour format and adjust for AM/PM
|
|
785
|
+
var isPM = amButton && amButton.classList.contains('bg-blue-500');
|
|
786
|
+
if (isPM && hours < 12) {
|
|
787
|
+
hours += 12;
|
|
788
|
+
}
|
|
789
|
+
else if (!isPM && hours === 12) {
|
|
790
|
+
hours = 0;
|
|
791
|
+
}
|
|
792
|
+
// Update time in state
|
|
793
|
+
this._stateManager.setSelectedTime({
|
|
794
|
+
hours: hours,
|
|
795
|
+
minutes: minutes,
|
|
796
|
+
seconds: seconds,
|
|
797
|
+
ampm: isPM ? 'PM' : 'AM',
|
|
798
|
+
});
|
|
799
|
+
// Update selected date with new time if a date is selected
|
|
800
|
+
var state = this._stateManager.getState();
|
|
801
|
+
if (state.selectedDate) {
|
|
802
|
+
var updatedDate = new Date(state.selectedDate);
|
|
803
|
+
updatedDate.setHours(hours, minutes, seconds, 0);
|
|
804
|
+
this._stateManager.setSelectedDate(updatedDate);
|
|
805
|
+
}
|
|
806
|
+
};
|
|
807
|
+
/**
|
|
808
|
+
* Set AM/PM selection
|
|
809
|
+
*
|
|
810
|
+
* @param period - 'AM' or 'PM'
|
|
811
|
+
*/
|
|
812
|
+
KTDatepickerCalendar.prototype._setAmPm = function (period) {
|
|
813
|
+
if (!this._dropdownElement)
|
|
814
|
+
return;
|
|
815
|
+
var timeContainer = this._dropdownElement.querySelector('.py-3.border-t');
|
|
816
|
+
if (!timeContainer)
|
|
817
|
+
return;
|
|
818
|
+
var amButton = timeContainer.querySelector('button[aria-label="AM"]');
|
|
819
|
+
var pmButton = timeContainer.querySelector('button[aria-label="PM"]');
|
|
820
|
+
if (!amButton || !pmButton)
|
|
821
|
+
return;
|
|
822
|
+
// Update button states
|
|
823
|
+
if (period === 'AM') {
|
|
824
|
+
amButton.classList.add('bg-blue-500', 'text-white', 'border-blue-500');
|
|
825
|
+
amButton.classList.remove('bg-gray-50', 'hover:bg-gray-100');
|
|
826
|
+
pmButton.classList.remove('bg-blue-500', 'text-white', 'border-blue-500');
|
|
827
|
+
pmButton.classList.add('bg-gray-50', 'hover:bg-gray-100');
|
|
828
|
+
}
|
|
829
|
+
else {
|
|
830
|
+
amButton.classList.remove('bg-blue-500', 'text-white', 'border-blue-500');
|
|
831
|
+
amButton.classList.add('bg-gray-50', 'hover:bg-gray-100');
|
|
832
|
+
pmButton.classList.add('bg-blue-500', 'text-white', 'border-blue-500');
|
|
833
|
+
pmButton.classList.remove('bg-gray-50', 'hover:bg-gray-100');
|
|
834
|
+
}
|
|
835
|
+
// Update time
|
|
836
|
+
this._handleTimeChange();
|
|
837
|
+
};
|
|
838
|
+
/**
|
|
839
|
+
* Select a month
|
|
840
|
+
*
|
|
841
|
+
* @param month - Month index (0-11)
|
|
842
|
+
*/
|
|
843
|
+
KTDatepickerCalendar.prototype._selectMonth = function (month) {
|
|
844
|
+
var state = this._stateManager.getState();
|
|
845
|
+
var config = this._stateManager.getConfig();
|
|
846
|
+
var newDate = new Date(state.currentDate);
|
|
847
|
+
newDate.setMonth(month);
|
|
848
|
+
this._stateManager.setCurrentDate(newDate);
|
|
849
|
+
// Only change view mode if keepViewModeOnSelection is false
|
|
850
|
+
if (!config.keepViewModeOnSelection) {
|
|
851
|
+
this._stateManager.setViewMode('days');
|
|
852
|
+
}
|
|
853
|
+
this._renderCalendarView();
|
|
854
|
+
};
|
|
855
|
+
/**
|
|
856
|
+
* Select a year
|
|
857
|
+
*
|
|
858
|
+
* @param year - Year value
|
|
859
|
+
*/
|
|
860
|
+
KTDatepickerCalendar.prototype._selectYear = function (year) {
|
|
861
|
+
var state = this._stateManager.getState();
|
|
862
|
+
var config = this._stateManager.getConfig();
|
|
863
|
+
var newDate = new Date(state.currentDate);
|
|
864
|
+
newDate.setFullYear(year);
|
|
865
|
+
this._stateManager.setCurrentDate(newDate);
|
|
866
|
+
// Only change view mode if keepViewModeOnSelection is false
|
|
867
|
+
if (!config.keepViewModeOnSelection) {
|
|
868
|
+
this._stateManager.setViewMode('months');
|
|
869
|
+
}
|
|
870
|
+
this._renderCalendarView();
|
|
871
|
+
};
|
|
872
|
+
/**
|
|
873
|
+
* Update calendar view to reflect state changes
|
|
874
|
+
*/
|
|
875
|
+
KTDatepickerCalendar.prototype._updateCalendarView = function () {
|
|
876
|
+
this._renderCalendarView();
|
|
877
|
+
this._updateTimeDisplay();
|
|
878
|
+
};
|
|
879
|
+
/**
|
|
880
|
+
* Update time inputs to reflect current time selection
|
|
881
|
+
*/
|
|
882
|
+
KTDatepickerCalendar.prototype._updateTimeDisplay = function () {
|
|
883
|
+
if (!this._dropdownElement)
|
|
884
|
+
return;
|
|
885
|
+
var state = this._stateManager.getState();
|
|
886
|
+
var config = this._stateManager.getConfig();
|
|
887
|
+
// Skip if time is not enabled
|
|
888
|
+
if (!config.enableTime)
|
|
889
|
+
return;
|
|
890
|
+
var timeContainer = this._dropdownElement.querySelector('.py-3.border-t');
|
|
891
|
+
if (!timeContainer)
|
|
892
|
+
return;
|
|
893
|
+
var hourInput = timeContainer.querySelector('input[aria-label="Hour"]');
|
|
894
|
+
var minuteInput = timeContainer.querySelector('input[aria-label="Minute"]');
|
|
895
|
+
var secondInput = timeContainer.querySelector('input[aria-label="Second"]');
|
|
896
|
+
var amButton = timeContainer.querySelector('button[aria-label="AM"]');
|
|
897
|
+
var pmButton = timeContainer.querySelector('button[aria-label="PM"]');
|
|
898
|
+
// Get time from selected date or default to current time
|
|
899
|
+
var hours = 0;
|
|
900
|
+
var minutes = 0;
|
|
901
|
+
var seconds = 0;
|
|
902
|
+
var isAM = true;
|
|
903
|
+
if (state.selectedTime) {
|
|
904
|
+
hours = state.selectedTime.hours;
|
|
905
|
+
minutes = state.selectedTime.minutes;
|
|
906
|
+
seconds = state.selectedTime.seconds;
|
|
907
|
+
isAM = state.selectedTime.ampm === 'AM';
|
|
908
|
+
}
|
|
909
|
+
else if (state.selectedDate) {
|
|
910
|
+
hours = state.selectedDate.getHours();
|
|
911
|
+
minutes = state.selectedDate.getMinutes();
|
|
912
|
+
seconds = state.selectedDate.getSeconds();
|
|
913
|
+
isAM = hours < 12;
|
|
914
|
+
}
|
|
915
|
+
else {
|
|
916
|
+
var now = new Date();
|
|
917
|
+
hours = now.getHours();
|
|
918
|
+
minutes = now.getMinutes();
|
|
919
|
+
seconds = now.getSeconds();
|
|
920
|
+
isAM = hours < 12;
|
|
921
|
+
}
|
|
922
|
+
// Adjust for 12-hour display if needed
|
|
923
|
+
var displayHours = hours;
|
|
924
|
+
if (hourInput && config.timeFormat.includes('h')) {
|
|
925
|
+
displayHours = hours % 12;
|
|
926
|
+
if (displayHours === 0)
|
|
927
|
+
displayHours = 12;
|
|
928
|
+
}
|
|
929
|
+
// Update input values
|
|
930
|
+
if (hourInput)
|
|
931
|
+
hourInput.value =
|
|
932
|
+
config.forceLeadingZero && displayHours < 10
|
|
933
|
+
? "0".concat(displayHours)
|
|
934
|
+
: "".concat(displayHours);
|
|
935
|
+
if (minuteInput)
|
|
936
|
+
minuteInput.value =
|
|
937
|
+
config.forceLeadingZero && minutes < 10 ? "0".concat(minutes) : "".concat(minutes);
|
|
938
|
+
if (secondInput)
|
|
939
|
+
secondInput.value =
|
|
940
|
+
config.forceLeadingZero && seconds < 10 ? "0".concat(seconds) : "".concat(seconds);
|
|
941
|
+
// Update AM/PM buttons
|
|
942
|
+
if (amButton && pmButton) {
|
|
943
|
+
if (isAM) {
|
|
944
|
+
amButton.classList.add('bg-blue-500', 'text-white', 'border-blue-500');
|
|
945
|
+
amButton.classList.remove('bg-gray-50', 'hover:bg-gray-100');
|
|
946
|
+
pmButton.classList.remove('bg-blue-500', 'text-white', 'border-blue-500');
|
|
947
|
+
pmButton.classList.add('bg-gray-50', 'hover:bg-gray-100');
|
|
948
|
+
}
|
|
949
|
+
else {
|
|
950
|
+
amButton.classList.remove('bg-blue-500', 'text-white', 'border-blue-500');
|
|
951
|
+
amButton.classList.add('bg-gray-50', 'hover:bg-gray-100');
|
|
952
|
+
pmButton.classList.add('bg-blue-500', 'text-white', 'border-blue-500');
|
|
953
|
+
pmButton.classList.remove('bg-gray-50', 'hover:bg-gray-100');
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
};
|
|
957
|
+
/**
|
|
958
|
+
* Show the calendar dropdown
|
|
959
|
+
*/
|
|
960
|
+
KTDatepickerCalendar.prototype.show = function () {
|
|
961
|
+
if (!this._dropdownElement || this._isVisible)
|
|
962
|
+
return;
|
|
963
|
+
// Ensure we're in days view
|
|
964
|
+
var state = this._stateManager.getState();
|
|
965
|
+
if (state.viewMode !== 'days') {
|
|
966
|
+
this._stateManager.setViewMode('days');
|
|
967
|
+
}
|
|
968
|
+
// Render calendar before showing
|
|
969
|
+
this._renderCalendarView();
|
|
970
|
+
this._updateTimeDisplay();
|
|
971
|
+
// Show dropdown using dropdown manager
|
|
972
|
+
if (this._dropdownManager) {
|
|
973
|
+
this._dropdownManager.open();
|
|
974
|
+
this._isVisible = true;
|
|
975
|
+
}
|
|
976
|
+
};
|
|
977
|
+
/**
|
|
978
|
+
* Hide the calendar dropdown
|
|
979
|
+
*/
|
|
980
|
+
KTDatepickerCalendar.prototype.hide = function () {
|
|
981
|
+
if (!this._dropdownElement || !this._isVisible)
|
|
982
|
+
return;
|
|
983
|
+
// Hide dropdown using dropdown manager
|
|
984
|
+
if (this._dropdownManager) {
|
|
985
|
+
this._dropdownManager.close();
|
|
986
|
+
this._isVisible = false;
|
|
987
|
+
}
|
|
988
|
+
};
|
|
989
|
+
/**
|
|
990
|
+
* Update dropdown position
|
|
991
|
+
*/
|
|
992
|
+
KTDatepickerCalendar.prototype.updatePosition = function () {
|
|
993
|
+
if (this._dropdownManager) {
|
|
994
|
+
this._dropdownManager.updatePosition();
|
|
995
|
+
}
|
|
996
|
+
};
|
|
997
|
+
/**
|
|
998
|
+
* Clear range hover classes from all day cells
|
|
999
|
+
*/
|
|
1000
|
+
KTDatepickerCalendar.prototype._clearRangeHoverClasses = function () {
|
|
1001
|
+
if (!this._calendarContainer)
|
|
1002
|
+
return;
|
|
1003
|
+
// Find all day cells with hover classes across all month containers
|
|
1004
|
+
var hoverCells = this._calendarContainer.querySelectorAll('.bg-blue-50, .text-blue-600, button[data-hover-date="true"]');
|
|
1005
|
+
hoverCells.forEach(function (cell) {
|
|
1006
|
+
cell.classList.remove('bg-blue-50', 'text-blue-600');
|
|
1007
|
+
});
|
|
1008
|
+
};
|
|
1009
|
+
/**
|
|
1010
|
+
* Apply hover effect to show potential range selection
|
|
1011
|
+
*
|
|
1012
|
+
* @param startDate - Start date of the range
|
|
1013
|
+
* @param hoverDate - Current date being hovered
|
|
1014
|
+
*/
|
|
1015
|
+
KTDatepickerCalendar.prototype._applyRangeHoverEffect = function (startDate, hoverDate) {
|
|
1016
|
+
var _this = this;
|
|
1017
|
+
if (!this._calendarContainer)
|
|
1018
|
+
return;
|
|
1019
|
+
// Clear any existing hover effects first
|
|
1020
|
+
this._clearRangeHoverClasses();
|
|
1021
|
+
// Normalize dates to midnight for comparison
|
|
1022
|
+
var startDateMidnight = new Date(startDate);
|
|
1023
|
+
startDateMidnight.setHours(0, 0, 0, 0);
|
|
1024
|
+
var hoverDateMidnight = new Date(hoverDate);
|
|
1025
|
+
hoverDateMidnight.setHours(0, 0, 0, 0);
|
|
1026
|
+
// Ensure proper order for comparison (start date <= end date)
|
|
1027
|
+
var rangeStart = startDateMidnight <= hoverDateMidnight
|
|
1028
|
+
? startDateMidnight
|
|
1029
|
+
: hoverDateMidnight;
|
|
1030
|
+
var rangeEnd = startDateMidnight <= hoverDateMidnight
|
|
1031
|
+
? hoverDateMidnight
|
|
1032
|
+
: startDateMidnight;
|
|
1033
|
+
// Generate all dates in the range as ISO strings (YYYY-MM-DD)
|
|
1034
|
+
var dateRangeISOStrings = [];
|
|
1035
|
+
var currentDate = new Date(rangeStart);
|
|
1036
|
+
while (currentDate <= rangeEnd) {
|
|
1037
|
+
// Format as YYYY-MM-DD
|
|
1038
|
+
var year = currentDate.getFullYear();
|
|
1039
|
+
var month = String(currentDate.getMonth() + 1).padStart(2, '0');
|
|
1040
|
+
var day = String(currentDate.getDate()).padStart(2, '0');
|
|
1041
|
+
dateRangeISOStrings.push("".concat(year, "-").concat(month, "-").concat(day));
|
|
1042
|
+
// Move to the next day
|
|
1043
|
+
currentDate.setDate(currentDate.getDate() + 1);
|
|
1044
|
+
}
|
|
1045
|
+
// Apply hover effect to all day cells in the range using the date-id attribute
|
|
1046
|
+
dateRangeISOStrings.forEach(function (dateStr) {
|
|
1047
|
+
// Find the day cell with matching date-id
|
|
1048
|
+
var dayCells = _this._calendarContainer.querySelectorAll("button[data-date-id=\"".concat(dateStr, "\"]"));
|
|
1049
|
+
dayCells.forEach(function (cell) {
|
|
1050
|
+
// Skip if this is already a selected date (has blue background)
|
|
1051
|
+
if (cell.classList.contains('bg-blue-600'))
|
|
1052
|
+
return;
|
|
1053
|
+
// Apply hover effect
|
|
1054
|
+
cell.classList.add('bg-blue-50', 'text-blue-600');
|
|
1055
|
+
});
|
|
1056
|
+
});
|
|
1057
|
+
};
|
|
1058
|
+
return KTDatepickerCalendar;
|
|
1059
|
+
}());
|
|
1060
|
+
exports.KTDatepickerCalendar = KTDatepickerCalendar;
|
|
1061
|
+
//# sourceMappingURL=calendar.js.map
|