@keenthemes/ktui 1.0.3
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/CONTRIBUTING.md +88 -0
- package/LICENSE.md +21 -0
- package/README.md +124 -0
- package/dist/ktui.js +19201 -0
- package/dist/ktui.min.js +2 -0
- package/dist/ktui.min.js.map +1 -0
- package/lib/cjs/components/accordion/accordion.js +168 -0
- package/lib/cjs/components/accordion/accordion.js.map +1 -0
- package/lib/cjs/components/accordion/index.js +6 -0
- package/lib/cjs/components/accordion/index.js.map +1 -0
- package/lib/cjs/components/accordion/types.js +3 -0
- package/lib/cjs/components/accordion/types.js.map +1 -0
- package/lib/cjs/components/collapse/collapse.js +169 -0
- package/lib/cjs/components/collapse/collapse.js.map +1 -0
- package/lib/cjs/components/collapse/index.js +6 -0
- package/lib/cjs/components/collapse/index.js.map +1 -0
- package/lib/cjs/components/collapse/types.js +3 -0
- package/lib/cjs/components/collapse/types.js.map +1 -0
- package/lib/cjs/components/component.js +135 -0
- package/lib/cjs/components/component.js.map +1 -0
- package/lib/cjs/components/config.js +26 -0
- package/lib/cjs/components/config.js.map +1 -0
- package/lib/cjs/components/config.umd.js +23 -0
- package/lib/cjs/components/config.umd.js.map +1 -0
- package/lib/cjs/components/constants.js +15 -0
- package/lib/cjs/components/constants.js.map +1 -0
- package/lib/cjs/components/datatable/datatable.js +1464 -0
- package/lib/cjs/components/datatable/datatable.js.map +1 -0
- package/lib/cjs/components/datatable/index.js +6 -0
- package/lib/cjs/components/datatable/index.js.map +1 -0
- package/lib/cjs/components/datatable/types.js +3 -0
- package/lib/cjs/components/datatable/types.js.map +1 -0
- package/lib/cjs/components/dismiss/dismiss.js +131 -0
- package/lib/cjs/components/dismiss/dismiss.js.map +1 -0
- package/lib/cjs/components/dismiss/index.js +6 -0
- package/lib/cjs/components/dismiss/index.js.map +1 -0
- package/lib/cjs/components/dismiss/types.js +3 -0
- package/lib/cjs/components/dismiss/types.js.map +1 -0
- package/lib/cjs/components/drawer/drawer.js +347 -0
- package/lib/cjs/components/drawer/drawer.js.map +1 -0
- package/lib/cjs/components/drawer/index.js +6 -0
- package/lib/cjs/components/drawer/index.js.map +1 -0
- package/lib/cjs/components/drawer/types.js +3 -0
- package/lib/cjs/components/drawer/types.js.map +1 -0
- package/lib/cjs/components/dropdown/dropdown.js +403 -0
- package/lib/cjs/components/dropdown/dropdown.js.map +1 -0
- package/lib/cjs/components/dropdown/index.js +6 -0
- package/lib/cjs/components/dropdown/index.js.map +1 -0
- package/lib/cjs/components/dropdown/types.js +3 -0
- package/lib/cjs/components/dropdown/types.js.map +1 -0
- package/lib/cjs/components/image-input/image-input.js +191 -0
- package/lib/cjs/components/image-input/image-input.js.map +1 -0
- package/lib/cjs/components/image-input/index.js +6 -0
- package/lib/cjs/components/image-input/index.js.map +1 -0
- package/lib/cjs/components/image-input/types.js +3 -0
- package/lib/cjs/components/image-input/types.js.map +1 -0
- package/lib/cjs/components/menu/index.js +6 -0
- package/lib/cjs/components/menu/index.js.map +1 -0
- package/lib/cjs/components/menu/menu.js +1021 -0
- package/lib/cjs/components/menu/menu.js.map +1 -0
- package/lib/cjs/components/menu/types.js +3 -0
- package/lib/cjs/components/menu/types.js.map +1 -0
- package/lib/cjs/components/modal/index.js +6 -0
- package/lib/cjs/components/modal/index.js.map +1 -0
- package/lib/cjs/components/modal/modal.js +316 -0
- package/lib/cjs/components/modal/modal.js.map +1 -0
- package/lib/cjs/components/modal/types.js +3 -0
- package/lib/cjs/components/modal/types.js.map +1 -0
- package/lib/cjs/components/reparent/index.js +6 -0
- package/lib/cjs/components/reparent/index.js.map +1 -0
- package/lib/cjs/components/reparent/reparent.js +93 -0
- package/lib/cjs/components/reparent/reparent.js.map +1 -0
- package/lib/cjs/components/reparent/types.js +3 -0
- package/lib/cjs/components/reparent/types.js.map +1 -0
- package/lib/cjs/components/scrollable/index.js +6 -0
- package/lib/cjs/components/scrollable/index.js.map +1 -0
- package/lib/cjs/components/scrollable/scrollable.js +259 -0
- package/lib/cjs/components/scrollable/scrollable.js.map +1 -0
- package/lib/cjs/components/scrollable/types.js +3 -0
- package/lib/cjs/components/scrollable/types.js.map +1 -0
- package/lib/cjs/components/scrollspy/index.js +6 -0
- package/lib/cjs/components/scrollspy/index.js.map +1 -0
- package/lib/cjs/components/scrollspy/scrollspy.js +174 -0
- package/lib/cjs/components/scrollspy/scrollspy.js.map +1 -0
- package/lib/cjs/components/scrollspy/types.js +3 -0
- package/lib/cjs/components/scrollspy/types.js.map +1 -0
- package/lib/cjs/components/scrollto/index.js +6 -0
- package/lib/cjs/components/scrollto/index.js.map +1 -0
- package/lib/cjs/components/scrollto/scrollto.js +103 -0
- package/lib/cjs/components/scrollto/scrollto.js.map +1 -0
- package/lib/cjs/components/scrollto/types.js +3 -0
- package/lib/cjs/components/scrollto/types.js.map +1 -0
- package/lib/cjs/components/stepper/index.js +6 -0
- package/lib/cjs/components/stepper/index.js.map +1 -0
- package/lib/cjs/components/stepper/stepper.js +258 -0
- package/lib/cjs/components/stepper/stepper.js.map +1 -0
- package/lib/cjs/components/stepper/types.js +3 -0
- package/lib/cjs/components/stepper/types.js.map +1 -0
- package/lib/cjs/components/sticky/index.js +6 -0
- package/lib/cjs/components/sticky/index.js.map +1 -0
- package/lib/cjs/components/sticky/sticky.js +297 -0
- package/lib/cjs/components/sticky/sticky.js.map +1 -0
- package/lib/cjs/components/sticky/types.js +3 -0
- package/lib/cjs/components/sticky/types.js.map +1 -0
- package/lib/cjs/components/tabs/index.js +6 -0
- package/lib/cjs/components/tabs/index.js.map +1 -0
- package/lib/cjs/components/tabs/tabs.js +146 -0
- package/lib/cjs/components/tabs/tabs.js.map +1 -0
- package/lib/cjs/components/tabs/types.js +3 -0
- package/lib/cjs/components/tabs/types.js.map +1 -0
- package/lib/cjs/components/theme/index.js +6 -0
- package/lib/cjs/components/theme/index.js.map +1 -0
- package/lib/cjs/components/theme/theme.js +147 -0
- package/lib/cjs/components/theme/theme.js.map +1 -0
- package/lib/cjs/components/theme/types.js +3 -0
- package/lib/cjs/components/theme/types.js.map +1 -0
- package/lib/cjs/components/toggle/index.js +6 -0
- package/lib/cjs/components/toggle/index.js.map +1 -0
- package/lib/cjs/components/toggle/toggle.js +139 -0
- package/lib/cjs/components/toggle/toggle.js.map +1 -0
- package/lib/cjs/components/toggle/types.js +3 -0
- package/lib/cjs/components/toggle/types.js.map +1 -0
- package/lib/cjs/components/toggle-password/index.js +6 -0
- package/lib/cjs/components/toggle-password/index.js.map +1 -0
- package/lib/cjs/components/toggle-password/toggle-password.js +131 -0
- package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -0
- package/lib/cjs/components/toggle-password/types.js +3 -0
- package/lib/cjs/components/toggle-password/types.js.map +1 -0
- package/lib/cjs/components/tooltip/index.js +6 -0
- package/lib/cjs/components/tooltip/index.js.map +1 -0
- package/lib/cjs/components/tooltip/tooltip.js +271 -0
- package/lib/cjs/components/tooltip/tooltip.js.map +1 -0
- package/lib/cjs/components/tooltip/types.js +3 -0
- package/lib/cjs/components/tooltip/types.js.map +1 -0
- package/lib/cjs/helpers/data.js +33 -0
- package/lib/cjs/helpers/data.js.map +1 -0
- package/lib/cjs/helpers/dom.js +297 -0
- package/lib/cjs/helpers/dom.js.map +1 -0
- package/lib/cjs/helpers/event-handler.js +36 -0
- package/lib/cjs/helpers/event-handler.js.map +1 -0
- package/lib/cjs/helpers/utils.js +94 -0
- package/lib/cjs/helpers/utils.js.map +1 -0
- package/lib/cjs/index.js +105 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/types.js +3 -0
- package/lib/cjs/types.js.map +1 -0
- package/lib/esm/components/accordion/accordion.js +165 -0
- package/lib/esm/components/accordion/accordion.js.map +1 -0
- package/lib/esm/components/accordion/index.js +2 -0
- package/lib/esm/components/accordion/index.js.map +1 -0
- package/lib/esm/components/accordion/types.js +2 -0
- package/lib/esm/components/accordion/types.js.map +1 -0
- package/lib/esm/components/collapse/collapse.js +166 -0
- package/lib/esm/components/collapse/collapse.js.map +1 -0
- package/lib/esm/components/collapse/index.js +2 -0
- package/lib/esm/components/collapse/index.js.map +1 -0
- package/lib/esm/components/collapse/types.js +2 -0
- package/lib/esm/components/collapse/types.js.map +1 -0
- package/lib/esm/components/component.js +133 -0
- package/lib/esm/components/component.js.map +1 -0
- package/lib/esm/components/config.js +24 -0
- package/lib/esm/components/config.js.map +1 -0
- package/lib/esm/components/config.umd.js +23 -0
- package/lib/esm/components/config.umd.js.map +1 -0
- package/lib/esm/components/constants.js +12 -0
- package/lib/esm/components/constants.js.map +1 -0
- package/lib/esm/components/datatable/datatable.js +1461 -0
- package/lib/esm/components/datatable/datatable.js.map +1 -0
- package/lib/esm/components/datatable/index.js +2 -0
- package/lib/esm/components/datatable/index.js.map +1 -0
- package/lib/esm/components/datatable/types.js +2 -0
- package/lib/esm/components/datatable/types.js.map +1 -0
- package/lib/esm/components/dismiss/dismiss.js +128 -0
- package/lib/esm/components/dismiss/dismiss.js.map +1 -0
- package/lib/esm/components/dismiss/index.js +2 -0
- package/lib/esm/components/dismiss/index.js.map +1 -0
- package/lib/esm/components/dismiss/types.js +2 -0
- package/lib/esm/components/dismiss/types.js.map +1 -0
- package/lib/esm/components/drawer/drawer.js +344 -0
- package/lib/esm/components/drawer/drawer.js.map +1 -0
- package/lib/esm/components/drawer/index.js +2 -0
- package/lib/esm/components/drawer/index.js.map +1 -0
- package/lib/esm/components/drawer/types.js +2 -0
- package/lib/esm/components/drawer/types.js.map +1 -0
- package/lib/esm/components/dropdown/dropdown.js +400 -0
- package/lib/esm/components/dropdown/dropdown.js.map +1 -0
- package/lib/esm/components/dropdown/index.js +2 -0
- package/lib/esm/components/dropdown/index.js.map +1 -0
- package/lib/esm/components/dropdown/types.js +2 -0
- package/lib/esm/components/dropdown/types.js.map +1 -0
- package/lib/esm/components/image-input/image-input.js +188 -0
- package/lib/esm/components/image-input/image-input.js.map +1 -0
- package/lib/esm/components/image-input/index.js +2 -0
- package/lib/esm/components/image-input/index.js.map +1 -0
- package/lib/esm/components/image-input/types.js +2 -0
- package/lib/esm/components/image-input/types.js.map +1 -0
- package/lib/esm/components/menu/index.js +2 -0
- package/lib/esm/components/menu/index.js.map +1 -0
- package/lib/esm/components/menu/menu.js +1018 -0
- package/lib/esm/components/menu/menu.js.map +1 -0
- package/lib/esm/components/menu/types.js +2 -0
- package/lib/esm/components/menu/types.js.map +1 -0
- package/lib/esm/components/modal/index.js +2 -0
- package/lib/esm/components/modal/index.js.map +1 -0
- package/lib/esm/components/modal/modal.js +313 -0
- package/lib/esm/components/modal/modal.js.map +1 -0
- package/lib/esm/components/modal/types.js +2 -0
- package/lib/esm/components/modal/types.js.map +1 -0
- package/lib/esm/components/reparent/index.js +2 -0
- package/lib/esm/components/reparent/index.js.map +1 -0
- package/lib/esm/components/reparent/reparent.js +90 -0
- package/lib/esm/components/reparent/reparent.js.map +1 -0
- package/lib/esm/components/reparent/types.js +2 -0
- package/lib/esm/components/reparent/types.js.map +1 -0
- package/lib/esm/components/scrollable/index.js +2 -0
- package/lib/esm/components/scrollable/index.js.map +1 -0
- package/lib/esm/components/scrollable/scrollable.js +256 -0
- package/lib/esm/components/scrollable/scrollable.js.map +1 -0
- package/lib/esm/components/scrollable/types.js +2 -0
- package/lib/esm/components/scrollable/types.js.map +1 -0
- package/lib/esm/components/scrollspy/index.js +2 -0
- package/lib/esm/components/scrollspy/index.js.map +1 -0
- package/lib/esm/components/scrollspy/scrollspy.js +171 -0
- package/lib/esm/components/scrollspy/scrollspy.js.map +1 -0
- package/lib/esm/components/scrollspy/types.js +2 -0
- package/lib/esm/components/scrollspy/types.js.map +1 -0
- package/lib/esm/components/scrollto/index.js +2 -0
- package/lib/esm/components/scrollto/index.js.map +1 -0
- package/lib/esm/components/scrollto/scrollto.js +100 -0
- package/lib/esm/components/scrollto/scrollto.js.map +1 -0
- package/lib/esm/components/scrollto/types.js +2 -0
- package/lib/esm/components/scrollto/types.js.map +1 -0
- package/lib/esm/components/stepper/index.js +2 -0
- package/lib/esm/components/stepper/index.js.map +1 -0
- package/lib/esm/components/stepper/stepper.js +255 -0
- package/lib/esm/components/stepper/stepper.js.map +1 -0
- package/lib/esm/components/stepper/types.js +2 -0
- package/lib/esm/components/stepper/types.js.map +1 -0
- package/lib/esm/components/sticky/index.js +2 -0
- package/lib/esm/components/sticky/index.js.map +1 -0
- package/lib/esm/components/sticky/sticky.js +294 -0
- package/lib/esm/components/sticky/sticky.js.map +1 -0
- package/lib/esm/components/sticky/types.js +2 -0
- package/lib/esm/components/sticky/types.js.map +1 -0
- package/lib/esm/components/tabs/index.js +2 -0
- package/lib/esm/components/tabs/index.js.map +1 -0
- package/lib/esm/components/tabs/tabs.js +143 -0
- package/lib/esm/components/tabs/tabs.js.map +1 -0
- package/lib/esm/components/tabs/types.js +2 -0
- package/lib/esm/components/tabs/types.js.map +1 -0
- package/lib/esm/components/theme/index.js +2 -0
- package/lib/esm/components/theme/index.js.map +1 -0
- package/lib/esm/components/theme/theme.js +144 -0
- package/lib/esm/components/theme/theme.js.map +1 -0
- package/lib/esm/components/theme/types.js +2 -0
- package/lib/esm/components/theme/types.js.map +1 -0
- package/lib/esm/components/toggle/index.js +2 -0
- package/lib/esm/components/toggle/index.js.map +1 -0
- package/lib/esm/components/toggle/toggle.js +136 -0
- package/lib/esm/components/toggle/toggle.js.map +1 -0
- package/lib/esm/components/toggle/types.js +2 -0
- package/lib/esm/components/toggle/types.js.map +1 -0
- package/lib/esm/components/toggle-password/index.js +2 -0
- package/lib/esm/components/toggle-password/index.js.map +1 -0
- package/lib/esm/components/toggle-password/toggle-password.js +128 -0
- package/lib/esm/components/toggle-password/toggle-password.js.map +1 -0
- package/lib/esm/components/toggle-password/types.js +2 -0
- package/lib/esm/components/toggle-password/types.js.map +1 -0
- package/lib/esm/components/tooltip/index.js +2 -0
- package/lib/esm/components/tooltip/index.js.map +1 -0
- package/lib/esm/components/tooltip/tooltip.js +268 -0
- package/lib/esm/components/tooltip/tooltip.js.map +1 -0
- package/lib/esm/components/tooltip/types.js +2 -0
- package/lib/esm/components/tooltip/types.js.map +1 -0
- package/lib/esm/helpers/data.js +31 -0
- package/lib/esm/helpers/data.js.map +1 -0
- package/lib/esm/helpers/dom.js +295 -0
- package/lib/esm/helpers/dom.js.map +1 -0
- package/lib/esm/helpers/event-handler.js +34 -0
- package/lib/esm/helpers/event-handler.js.map +1 -0
- package/lib/esm/helpers/utils.js +92 -0
- package/lib/esm/helpers/utils.js.map +1 -0
- package/lib/esm/index.js +79 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/types.js +2 -0
- package/lib/esm/types.js.map +1 -0
- package/package.json +85 -0
- package/prettier.config.js +9 -0
- package/src/components/accordion/accordion-menu.css +51 -0
- package/src/components/accordion/accordion.css +86 -0
- package/src/components/accordion/accordion.ts +221 -0
- package/src/components/accordion/index.ts +7 -0
- package/src/components/accordion/types.ts +16 -0
- package/src/components/alert/alert.css +282 -0
- package/src/components/avatar/avatar.css +46 -0
- package/src/components/badge/badge.css +176 -0
- package/src/components/breadcrumb/breadcrumb.css +38 -0
- package/src/components/btn/btn.css +227 -0
- package/src/components/card/card.css +158 -0
- package/src/components/checkbox/checkbox.css +74 -0
- package/src/components/collapse/collapse.css +14 -0
- package/src/components/collapse/collapse.ts +200 -0
- package/src/components/collapse/index.ts +7 -0
- package/src/components/collapse/types.ts +16 -0
- package/src/components/component.ts +132 -0
- package/src/components/constants.ts +16 -0
- package/src/components/datatable/datatable-checkbox.ts +236 -0
- package/src/components/datatable/datatable-sort.ts +154 -0
- package/src/components/datatable/datatable.css +110 -0
- package/src/components/datatable/datatable.ts +1657 -0
- package/src/components/datatable/index.ts +19 -0
- package/src/components/datatable/types.ts +203 -0
- package/src/components/datepicker/calendar.ts +1397 -0
- package/src/components/datepicker/config.ts +368 -0
- package/src/components/datepicker/datepicker.css +7 -0
- package/src/components/datepicker/datepicker.ts +1287 -0
- package/src/components/datepicker/dropdown.ts +757 -0
- package/src/components/datepicker/events.ts +149 -0
- package/src/components/datepicker/index.ts +10 -0
- package/src/components/datepicker/keyboard.ts +646 -0
- package/src/components/datepicker/locales.ts +80 -0
- package/src/components/datepicker/templates.ts +792 -0
- package/src/components/datepicker/types.ts +154 -0
- package/src/components/datepicker/utils.ts +631 -0
- package/src/components/dismiss/dismiss.css +10 -0
- package/src/components/dismiss/dismiss.ts +152 -0
- package/src/components/dismiss/index.ts +7 -0
- package/src/components/dismiss/types.ts +17 -0
- package/src/components/drawer/drawer.css +97 -0
- package/src/components/drawer/drawer.ts +437 -0
- package/src/components/drawer/index.ts +7 -0
- package/src/components/drawer/types.ts +25 -0
- package/src/components/dropdown/dropdown-menu.css +56 -0
- package/src/components/dropdown/dropdown.css +46 -0
- package/src/components/dropdown/dropdown.ts +549 -0
- package/src/components/dropdown/index.ts +7 -0
- package/src/components/dropdown/types.ts +28 -0
- package/src/components/form/form.css +54 -0
- package/src/components/image-input/image-input.css +56 -0
- package/src/components/image-input/image-input.ts +249 -0
- package/src/components/image-input/index.ts +10 -0
- package/src/components/image-input/types.ts +12 -0
- package/src/components/input/input-group.css +42 -0
- package/src/components/input/input.css +136 -0
- package/src/components/kbd/kbd.css +30 -0
- package/src/components/label/label.css +20 -0
- package/src/components/link/link.css +81 -0
- package/src/components/modal/index.ts +7 -0
- package/src/components/modal/modal.css +73 -0
- package/src/components/modal/modal.ts +382 -0
- package/src/components/modal/types.ts +21 -0
- package/src/components/pagination/pagination.css +26 -0
- package/src/components/popover/popover.css +22 -0
- package/src/components/progress/progress.css +51 -0
- package/src/components/radio/radio.css +51 -0
- package/src/components/reparent/index.ts +7 -0
- package/src/components/reparent/reparent.ts +109 -0
- package/src/components/reparent/types.ts +15 -0
- package/src/components/scrollable/index.ts +10 -0
- package/src/components/scrollable/scrollable.css +29 -0
- package/src/components/scrollable/scrollable.ts +297 -0
- package/src/components/scrollable/types.ts +16 -0
- package/src/components/scrollspy/index.ts +7 -0
- package/src/components/scrollspy/scrollspy.css +13 -0
- package/src/components/scrollspy/scrollspy.ts +224 -0
- package/src/components/scrollspy/types.ts +15 -0
- package/src/components/scrollto/index.ts +7 -0
- package/src/components/scrollto/scrollto.ts +127 -0
- package/src/components/scrollto/types.ts +15 -0
- package/src/components/select/combobox.ts +305 -0
- package/src/components/select/config.ts +324 -0
- package/src/components/select/dropdown.ts +510 -0
- package/src/components/select/index.ts +13 -0
- package/src/components/select/option.ts +43 -0
- package/src/components/select/remote.ts +477 -0
- package/src/components/select/search.ts +430 -0
- package/src/components/select/select.css +105 -0
- package/src/components/select/select.ts +1916 -0
- package/src/components/select/tags.ts +123 -0
- package/src/components/select/templates.ts +531 -0
- package/src/components/select/types.ts +36 -0
- package/src/components/select/utils.ts +747 -0
- package/src/components/select/variants.css +5 -0
- package/src/components/separator/separator.css +14 -0
- package/src/components/skeleton/skeleton.css +10 -0
- package/src/components/stepper/index.ts +7 -0
- package/src/components/stepper/stepper.css +49 -0
- package/src/components/stepper/stepper.ts +308 -0
- package/src/components/stepper/types.ts +13 -0
- package/src/components/sticky/index.ts +7 -0
- package/src/components/sticky/sticky.css +22 -0
- package/src/components/sticky/sticky.ts +381 -0
- package/src/components/sticky/types.ts +23 -0
- package/src/components/switch/switch.css +110 -0
- package/src/components/table/table.css +168 -0
- package/src/components/tabs/index.ts +7 -0
- package/src/components/tabs/tabs.css +40 -0
- package/src/components/tabs/tabs.ts +190 -0
- package/src/components/tabs/types.ts +13 -0
- package/src/components/textarea/textarea.css +35 -0
- package/src/components/theme-switch/index.ts +10 -0
- package/src/components/theme-switch/theme-switch.css +22 -0
- package/src/components/theme-switch/theme-switch.ts +176 -0
- package/src/components/theme-switch/types.ts +15 -0
- package/src/components/toggle/index.ts +7 -0
- package/src/components/toggle/toggle.css +13 -0
- package/src/components/toggle/toggle.ts +173 -0
- package/src/components/toggle/types.ts +18 -0
- package/src/components/toggle-group/toggle-group.css +55 -0
- package/src/components/toggle-password/index.ts +10 -0
- package/src/components/toggle-password/toggle-password.css +13 -0
- package/src/components/toggle-password/toggle-password.ts +159 -0
- package/src/components/toggle-password/types.ts +13 -0
- package/src/components/tooltip/index.ts +7 -0
- package/src/components/tooltip/tooltip.css +18 -0
- package/src/components/tooltip/tooltip.ts +361 -0
- package/src/components/tooltip/types.ts +28 -0
- package/src/helpers/data.ts +46 -0
- package/src/helpers/dom.ts +405 -0
- package/src/helpers/event-handler.ts +61 -0
- package/src/helpers/utils.ts +183 -0
- package/src/index.ts +113 -0
- package/src/types.ts +23 -0
- package/styles.css +48 -0
- package/tsconfig.json +17 -0
- package/webpack.config.js +113 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
* @version: 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import {
|
|
7
|
+
KTSelectConfigInterface,
|
|
8
|
+
KTSelectOption as KTSelectOptionData,
|
|
9
|
+
} from './config';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* KTSelectRemote class
|
|
13
|
+
* Handles fetching remote data for the KTSelect component
|
|
14
|
+
*/
|
|
15
|
+
export class KTSelectRemote {
|
|
16
|
+
private _config: KTSelectConfigInterface;
|
|
17
|
+
private _isLoading: boolean = false;
|
|
18
|
+
private _hasError: boolean = false;
|
|
19
|
+
private _errorMessage: string = '';
|
|
20
|
+
private _currentPage: number = 1;
|
|
21
|
+
private _totalPages: number = 1;
|
|
22
|
+
private _lastQuery: string = '';
|
|
23
|
+
private _element: HTMLElement | null = null;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructor
|
|
27
|
+
* @param config KTSelect configuration
|
|
28
|
+
* @param element The select element
|
|
29
|
+
*/
|
|
30
|
+
constructor(config: KTSelectConfigInterface, element?: HTMLElement) {
|
|
31
|
+
this._config = config;
|
|
32
|
+
this._element = element || null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Fetch data from remote URL
|
|
37
|
+
* @param query Optional search query
|
|
38
|
+
* @param page Page number for pagination
|
|
39
|
+
* @returns Promise with fetched items
|
|
40
|
+
*/
|
|
41
|
+
public fetchData(
|
|
42
|
+
query?: string,
|
|
43
|
+
page: number = 1,
|
|
44
|
+
): Promise<KTSelectOptionData[]> {
|
|
45
|
+
this._isLoading = true;
|
|
46
|
+
this._hasError = false;
|
|
47
|
+
this._errorMessage = '';
|
|
48
|
+
this._lastQuery = query || '';
|
|
49
|
+
this._currentPage = page;
|
|
50
|
+
|
|
51
|
+
let url = this._buildUrl(query, page);
|
|
52
|
+
|
|
53
|
+
if (this._config.debug) console.log('Fetching remote data from:', url);
|
|
54
|
+
|
|
55
|
+
// Dispatch search start event
|
|
56
|
+
this._dispatchEvent('remoteSearchStart');
|
|
57
|
+
|
|
58
|
+
return fetch(url)
|
|
59
|
+
.then((response: Response): Promise<any> => {
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`HTTP error! Status: ${response.status}`);
|
|
62
|
+
}
|
|
63
|
+
return response.json();
|
|
64
|
+
})
|
|
65
|
+
.then((data: any): KTSelectOptionData[] => {
|
|
66
|
+
// Process the data
|
|
67
|
+
return this._processData(data);
|
|
68
|
+
})
|
|
69
|
+
.catch((error: Error): KTSelectOptionData[] => {
|
|
70
|
+
console.error('Error fetching remote data:', error);
|
|
71
|
+
this._hasError = true;
|
|
72
|
+
this._errorMessage =
|
|
73
|
+
this._config.remoteErrorMessage || 'Failed to load data';
|
|
74
|
+
return [];
|
|
75
|
+
})
|
|
76
|
+
.finally((): void => {
|
|
77
|
+
this._isLoading = false;
|
|
78
|
+
// Dispatch search end event
|
|
79
|
+
this._dispatchEvent('remoteSearchEnd');
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Dispatch custom events to notify about search state changes
|
|
85
|
+
* @param eventName Name of the event to dispatch
|
|
86
|
+
*/
|
|
87
|
+
private _dispatchEvent(eventName: string): void {
|
|
88
|
+
if (!this._element) return;
|
|
89
|
+
|
|
90
|
+
const event = new CustomEvent(`ktselect.${eventName}`, {
|
|
91
|
+
bubbles: true,
|
|
92
|
+
detail: {
|
|
93
|
+
query: this._lastQuery,
|
|
94
|
+
isLoading: this._isLoading,
|
|
95
|
+
hasError: this._hasError,
|
|
96
|
+
errorMessage: this._errorMessage,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
this._element.dispatchEvent(event);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Build the URL for the API request
|
|
105
|
+
* @param query Search query
|
|
106
|
+
* @param page Page number
|
|
107
|
+
* @returns Fully formed URL
|
|
108
|
+
*/
|
|
109
|
+
private _buildUrl(query?: string, page: number = 1): string {
|
|
110
|
+
let url = this._config.dataUrl;
|
|
111
|
+
|
|
112
|
+
if (!url) {
|
|
113
|
+
console.error('No URL specified for remote data');
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Add parameters
|
|
118
|
+
const params = new URLSearchParams();
|
|
119
|
+
|
|
120
|
+
// Add search parameter if provided
|
|
121
|
+
if (query && this._config.searchParam) {
|
|
122
|
+
params.append(this._config.searchParam, query);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Add pagination parameters if enabled
|
|
126
|
+
if (this._config.pagination) {
|
|
127
|
+
const limitParam = this._config.paginationLimitParam || 'limit';
|
|
128
|
+
const pageParam = this._config.paginationPageParam || 'page';
|
|
129
|
+
const limit = this._config.paginationLimit || 10;
|
|
130
|
+
|
|
131
|
+
params.append(limitParam, limit.toString());
|
|
132
|
+
params.append(pageParam, page.toString());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Append parameters to URL if there are any
|
|
136
|
+
const paramsString = params.toString();
|
|
137
|
+
if (paramsString) {
|
|
138
|
+
url += (url.includes('?') ? '&' : '?') + paramsString;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return url;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Process the API response data
|
|
146
|
+
* @param data API response data
|
|
147
|
+
* @returns Array of KTSelectOptionData
|
|
148
|
+
*/
|
|
149
|
+
private _processData(data: any): KTSelectOptionData[] {
|
|
150
|
+
try {
|
|
151
|
+
if (this._config.debug) console.log('Processing API response:', data);
|
|
152
|
+
|
|
153
|
+
let processedData = data;
|
|
154
|
+
|
|
155
|
+
// Extract data from the API property if specified
|
|
156
|
+
if (this._config.apiDataProperty && data[this._config.apiDataProperty]) {
|
|
157
|
+
if (this._config.debug)
|
|
158
|
+
console.log(
|
|
159
|
+
`Extracting data from property: ${this._config.apiDataProperty}`,
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
// If pagination metadata is available, extract it
|
|
163
|
+
if (this._config.pagination) {
|
|
164
|
+
if (data.total_pages) {
|
|
165
|
+
this._totalPages = data.total_pages;
|
|
166
|
+
if (this._config.debug)
|
|
167
|
+
console.log(`Total pages found: ${this._totalPages}`);
|
|
168
|
+
}
|
|
169
|
+
if (data.total) {
|
|
170
|
+
this._totalPages = Math.ceil(
|
|
171
|
+
data.total / (this._config.paginationLimit || 10),
|
|
172
|
+
);
|
|
173
|
+
if (this._config.debug)
|
|
174
|
+
console.log(
|
|
175
|
+
`Calculated total pages: ${this._totalPages} from total: ${data.total}`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
processedData = data[this._config.apiDataProperty];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Ensure data is an array
|
|
184
|
+
if (!Array.isArray(processedData)) {
|
|
185
|
+
console.warn('Remote data is not an array:', processedData);
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (this._config.debug)
|
|
190
|
+
console.log(
|
|
191
|
+
`Mapping ${processedData.length} items to KTSelectOptionData format`,
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
// Map data to KTSelectOptionData format
|
|
195
|
+
const mappedData = processedData.map((item: any): KTSelectOptionData => {
|
|
196
|
+
const mappedItem = this._mapItemToOption(item);
|
|
197
|
+
|
|
198
|
+
// Add logging to trace data path extraction
|
|
199
|
+
if (
|
|
200
|
+
this._config.dataValueField &&
|
|
201
|
+
this._config.dataValueField.includes('.')
|
|
202
|
+
) {
|
|
203
|
+
// For nested paths, verify extraction worked
|
|
204
|
+
const parts = this._config.dataValueField.split('.');
|
|
205
|
+
let nestedValue = item;
|
|
206
|
+
|
|
207
|
+
// Try to navigate to the value manually for verification
|
|
208
|
+
for (const part of parts) {
|
|
209
|
+
if (
|
|
210
|
+
nestedValue &&
|
|
211
|
+
typeof nestedValue === 'object' &&
|
|
212
|
+
part in nestedValue
|
|
213
|
+
) {
|
|
214
|
+
nestedValue = nestedValue[part];
|
|
215
|
+
} else {
|
|
216
|
+
nestedValue = null;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// If we found a value, verify it matches what was extracted
|
|
222
|
+
if (nestedValue !== null && nestedValue !== undefined) {
|
|
223
|
+
const expectedValue = String(nestedValue);
|
|
224
|
+
if (this._config.debug)
|
|
225
|
+
console.log(
|
|
226
|
+
`Data path verification for [${this._config.dataValueField}]: Expected: ${expectedValue}, Got: ${mappedItem.id}`,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
if (mappedItem.id !== expectedValue && expectedValue) {
|
|
230
|
+
console.warn(
|
|
231
|
+
`Value mismatch! Path: ${this._config.dataValueField}, Expected: ${expectedValue}, Got: ${mappedItem.id}`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (this._config.debug)
|
|
238
|
+
console.log(`Mapped item: ${JSON.stringify(mappedItem)}`);
|
|
239
|
+
return mappedItem;
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
if (this._config.debug)
|
|
243
|
+
console.log(`Returned ${mappedData.length} mapped items`);
|
|
244
|
+
return mappedData;
|
|
245
|
+
} catch (error) {
|
|
246
|
+
console.error('Error processing remote data:', error);
|
|
247
|
+
this._hasError = true;
|
|
248
|
+
this._errorMessage = 'Error processing data';
|
|
249
|
+
return [];
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Map a data item to KTSelectOptionData format
|
|
255
|
+
* @param item Data item from API
|
|
256
|
+
* @returns KTSelectOptionData object
|
|
257
|
+
*/
|
|
258
|
+
private _mapItemToOption(item: any): KTSelectOptionData {
|
|
259
|
+
// Get the field mapping from config with fallbacks for common field names
|
|
260
|
+
const valueField = this._config.dataValueField || 'id';
|
|
261
|
+
const labelField = this._config.dataFieldText || 'title';
|
|
262
|
+
const descriptionField = this._config.dataFieldDescription || 'description';
|
|
263
|
+
const iconField = this._config.dataFieldIcon || 'icon';
|
|
264
|
+
|
|
265
|
+
if (this._config.debug)
|
|
266
|
+
console.log(
|
|
267
|
+
`Mapping fields: value=${valueField}, label=${labelField}, description=${descriptionField}, icon=${iconField}`,
|
|
268
|
+
);
|
|
269
|
+
if (this._config.debug)
|
|
270
|
+
console.log('Item data:', JSON.stringify(item).substring(0, 200) + '...'); // Trimmed for readability
|
|
271
|
+
|
|
272
|
+
// Extract values using dot notation if needed
|
|
273
|
+
const getValue = (obj: any, path: string): any => {
|
|
274
|
+
if (!path) return null;
|
|
275
|
+
if (!obj) return null;
|
|
276
|
+
|
|
277
|
+
try {
|
|
278
|
+
// Handle dot notation to access nested properties
|
|
279
|
+
const parts = path.split('.');
|
|
280
|
+
let result = obj;
|
|
281
|
+
|
|
282
|
+
for (const part of parts) {
|
|
283
|
+
if (
|
|
284
|
+
result === null ||
|
|
285
|
+
result === undefined ||
|
|
286
|
+
typeof result !== 'object'
|
|
287
|
+
) {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
result = result[part];
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Log the extraction result
|
|
294
|
+
if (this._config.debug)
|
|
295
|
+
console.log(
|
|
296
|
+
`Extracted [${path}] => ${
|
|
297
|
+
result !== null && result !== undefined
|
|
298
|
+
? typeof result === 'object'
|
|
299
|
+
? JSON.stringify(result).substring(0, 50)
|
|
300
|
+
: String(result).substring(0, 50)
|
|
301
|
+
: 'null'
|
|
302
|
+
}`,
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
return result;
|
|
306
|
+
} catch (error) {
|
|
307
|
+
console.error(`Error extracting path ${path}:`, error);
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
// Try to get a usable ID, with fallbacks
|
|
313
|
+
let id = getValue(item, valueField);
|
|
314
|
+
|
|
315
|
+
// Ensure id is always a proper string
|
|
316
|
+
if (id === null || id === undefined) {
|
|
317
|
+
// If no ID found, check for id.value or item.id as fallbacks
|
|
318
|
+
if (
|
|
319
|
+
item.id &&
|
|
320
|
+
typeof item.id === 'object' &&
|
|
321
|
+
'value' in item.id &&
|
|
322
|
+
item.id.value
|
|
323
|
+
) {
|
|
324
|
+
id = String(item.id.value);
|
|
325
|
+
if (this._config.debug)
|
|
326
|
+
console.log(`Using id.value as fallback: ${id}`);
|
|
327
|
+
} else if (item.id) {
|
|
328
|
+
id = String(item.id);
|
|
329
|
+
if (this._config.debug)
|
|
330
|
+
console.log(`Using direct item.id as fallback: ${id}`);
|
|
331
|
+
} else {
|
|
332
|
+
// If no ID found at all, use the title instead (will be extracted below)
|
|
333
|
+
if (this._config.debug)
|
|
334
|
+
console.log(`No ID found, will use title as fallback`);
|
|
335
|
+
id = null;
|
|
336
|
+
}
|
|
337
|
+
} else if (typeof id === 'object') {
|
|
338
|
+
// If ID is an object, log the issue and set to null to use title fallback
|
|
339
|
+
console.warn(
|
|
340
|
+
`ID for path ${valueField} is an object, will use title fallback instead`,
|
|
341
|
+
);
|
|
342
|
+
id = null;
|
|
343
|
+
} else {
|
|
344
|
+
// Otherwise, ensure it's a string
|
|
345
|
+
id = String(id);
|
|
346
|
+
if (this._config.debug) console.log(`Final ID value: ${id}`);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Try to get a usable title, with fallbacks
|
|
350
|
+
let title = getValue(item, labelField);
|
|
351
|
+
title = title !== null ? String(title) : '';
|
|
352
|
+
if (this._config.debug)
|
|
353
|
+
console.log(`Title/label field [${labelField}]:`, title);
|
|
354
|
+
|
|
355
|
+
// If title is still empty, try common field names
|
|
356
|
+
if (!title) {
|
|
357
|
+
// Try common field names if the configured one doesn't work
|
|
358
|
+
if (item.name) title = String(item.name);
|
|
359
|
+
else if (item.title) title = String(item.title);
|
|
360
|
+
else if (item.label) title = String(item.label);
|
|
361
|
+
else if (item.text) title = String(item.text);
|
|
362
|
+
if (this._config.debug)
|
|
363
|
+
console.log('After fallback checks, title:', title);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Get description - make sure we don't pass null, undefined, or "null" string values
|
|
367
|
+
let description = getValue(item, descriptionField);
|
|
368
|
+
if (
|
|
369
|
+
description === null ||
|
|
370
|
+
description === undefined ||
|
|
371
|
+
String(description) === 'null' ||
|
|
372
|
+
String(description) === 'undefined'
|
|
373
|
+
) {
|
|
374
|
+
description = null;
|
|
375
|
+
} else {
|
|
376
|
+
description = String(description);
|
|
377
|
+
}
|
|
378
|
+
if (this._config.debug)
|
|
379
|
+
console.log(`Description field [${descriptionField}]:`, description);
|
|
380
|
+
|
|
381
|
+
// Try to get an icon - make sure we don't pass null, undefined, or "null" string values
|
|
382
|
+
let icon = getValue(item, iconField);
|
|
383
|
+
if (
|
|
384
|
+
icon === null ||
|
|
385
|
+
icon === undefined ||
|
|
386
|
+
String(icon) === 'null' ||
|
|
387
|
+
String(icon) === 'undefined'
|
|
388
|
+
) {
|
|
389
|
+
icon = null;
|
|
390
|
+
} else {
|
|
391
|
+
icon = String(icon);
|
|
392
|
+
}
|
|
393
|
+
if (this._config.debug) console.log(`Icon field [${iconField}]:`, icon);
|
|
394
|
+
|
|
395
|
+
// If ID is null, use the title as fallback
|
|
396
|
+
if (id === null || id === '') {
|
|
397
|
+
id = title;
|
|
398
|
+
if (this._config.debug)
|
|
399
|
+
console.log(`Using title as fallback for ID: ${id}`);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Create the option object with non-empty values
|
|
403
|
+
const result = {
|
|
404
|
+
id: id || title || 'id-' + Math.random().toString(36).substr(2, 9), // Ensure we always have an ID
|
|
405
|
+
title: title || 'Unnamed option',
|
|
406
|
+
description: description,
|
|
407
|
+
icon: icon,
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
if (this._config.debug)
|
|
411
|
+
console.log('Final mapped item:', JSON.stringify(result));
|
|
412
|
+
return result;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Load the next page of results
|
|
417
|
+
* @returns Promise with fetched items
|
|
418
|
+
*/
|
|
419
|
+
public loadNextPage(): Promise<KTSelectOptionData[]> {
|
|
420
|
+
if (this._currentPage < this._totalPages) {
|
|
421
|
+
return this.fetchData(this._lastQuery, this._currentPage + 1);
|
|
422
|
+
}
|
|
423
|
+
return Promise.resolve([]);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Check if there are more pages available
|
|
428
|
+
* @returns Boolean indicating if more pages exist
|
|
429
|
+
*/
|
|
430
|
+
public hasMorePages(): boolean {
|
|
431
|
+
return this._currentPage < this._totalPages;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Get loading state
|
|
436
|
+
* @returns Boolean indicating if data is loading
|
|
437
|
+
*/
|
|
438
|
+
public isLoading(): boolean {
|
|
439
|
+
return this._isLoading;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Get error state
|
|
444
|
+
* @returns Boolean indicating if there was an error
|
|
445
|
+
*/
|
|
446
|
+
public hasError(): boolean {
|
|
447
|
+
return this._hasError;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Get error message
|
|
452
|
+
* @returns Error message
|
|
453
|
+
*/
|
|
454
|
+
public getErrorMessage(): string {
|
|
455
|
+
return this._errorMessage;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Reset the remote data state
|
|
460
|
+
*/
|
|
461
|
+
public reset(): void {
|
|
462
|
+
this._isLoading = false;
|
|
463
|
+
this._hasError = false;
|
|
464
|
+
this._errorMessage = '';
|
|
465
|
+
this._currentPage = 1;
|
|
466
|
+
this._totalPages = 1;
|
|
467
|
+
this._lastQuery = '';
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Set the select element for event dispatching
|
|
472
|
+
* @param element The select element
|
|
473
|
+
*/
|
|
474
|
+
public setElement(element: HTMLElement): void {
|
|
475
|
+
this._element = element;
|
|
476
|
+
}
|
|
477
|
+
}
|