@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,430 @@
|
|
|
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 { KTSelect } from './select';
|
|
7
|
+
import { defaultTemplates } from './templates';
|
|
8
|
+
import {
|
|
9
|
+
handleDropdownKeyNavigation,
|
|
10
|
+
filterOptions,
|
|
11
|
+
FocusManager,
|
|
12
|
+
EventManager,
|
|
13
|
+
} from './utils';
|
|
14
|
+
|
|
15
|
+
export class KTSelectSearch {
|
|
16
|
+
private _select: KTSelect;
|
|
17
|
+
private _searchInput: HTMLInputElement;
|
|
18
|
+
private _noResultsElement: HTMLElement | null = null;
|
|
19
|
+
private _originalOptionContents = new Map<string, string>();
|
|
20
|
+
private _boundKeyNavHandler: (event: KeyboardEvent) => void;
|
|
21
|
+
private _eventManager: EventManager;
|
|
22
|
+
private _focusManager: FocusManager;
|
|
23
|
+
private _config: import('./config').KTSelectConfigInterface;
|
|
24
|
+
|
|
25
|
+
// Public handler for search input (made public for event binding)
|
|
26
|
+
public handleSearchInput: (...args: any[]) => void;
|
|
27
|
+
|
|
28
|
+
constructor(select: KTSelect) {
|
|
29
|
+
this._select = select;
|
|
30
|
+
this._searchInput = select.getSearchInput();
|
|
31
|
+
this._eventManager = new EventManager();
|
|
32
|
+
this._focusManager = new FocusManager(
|
|
33
|
+
this._select.getDropdownElement(),
|
|
34
|
+
'[data-kt-select-option]',
|
|
35
|
+
select.getConfig(),
|
|
36
|
+
);
|
|
37
|
+
this._boundKeyNavHandler = this._handleKeyboardNavigation.bind(this);
|
|
38
|
+
this.handleSearchInput = this._handleSearchInput.bind(this);
|
|
39
|
+
this._config = select.getConfig();
|
|
40
|
+
this._cacheOriginalOptionContents();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
init() {
|
|
44
|
+
if (this._select.getConfig().enableSearch) {
|
|
45
|
+
this._searchInput = this._select.getSearchInput();
|
|
46
|
+
|
|
47
|
+
if (this._searchInput) {
|
|
48
|
+
if (this._config.debug)
|
|
49
|
+
console.log(
|
|
50
|
+
'Initializing search module with input:',
|
|
51
|
+
this._searchInput,
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
// First remove any existing listeners to prevent duplicates
|
|
55
|
+
this._removeEventListeners();
|
|
56
|
+
|
|
57
|
+
// Add the event listener
|
|
58
|
+
this._eventManager.addListener(
|
|
59
|
+
this._searchInput,
|
|
60
|
+
'input',
|
|
61
|
+
this.handleSearchInput,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Add blur event listener to ensure highlights are cleared when focus is lost
|
|
65
|
+
this._eventManager.addListener(this._searchInput, 'blur', () => {
|
|
66
|
+
// Small delay to prevent race conditions with selection
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
if (!this._searchInput.value) {
|
|
69
|
+
this._resetAllOptions();
|
|
70
|
+
this.clearSearchHighlights();
|
|
71
|
+
}
|
|
72
|
+
}, 100);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Listen for remote search events to coordinate with remote search functionality
|
|
76
|
+
if (
|
|
77
|
+
this._select.getConfig().remote &&
|
|
78
|
+
this._select.getConfig().searchParam
|
|
79
|
+
) {
|
|
80
|
+
this._select
|
|
81
|
+
.getElement()
|
|
82
|
+
.addEventListener('remoteSearchStart', () => {
|
|
83
|
+
// Reset focused option when remote search starts
|
|
84
|
+
this._focusManager.resetFocus();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
this._select.getElement().addEventListener('remoteSearchEnd', () => {
|
|
88
|
+
// After remote search completes, refresh our option cache
|
|
89
|
+
this.refreshOptionCache();
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Add keyboard navigation for search results
|
|
94
|
+
// This is stopping event propagation to prevent conflicts
|
|
95
|
+
this._eventManager.addListener(
|
|
96
|
+
this._searchInput,
|
|
97
|
+
'keydown',
|
|
98
|
+
this._boundKeyNavHandler,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
// Listen for dropdown close to reset options if search is empty
|
|
102
|
+
this._select.getElement().addEventListener('dropdown.close', () => {
|
|
103
|
+
this._focusManager.resetFocus();
|
|
104
|
+
// Always clear highlights when dropdown closes
|
|
105
|
+
this.clearSearchHighlights();
|
|
106
|
+
if (!this._searchInput.value) {
|
|
107
|
+
this._resetAllOptions();
|
|
108
|
+
}
|
|
109
|
+
// Clear the search input when dropdown closes if configured
|
|
110
|
+
if (this._select.getConfig().clearSearchOnClose) {
|
|
111
|
+
this._searchInput.value = '';
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Clear highlights when an option is selected
|
|
116
|
+
this._select.getElement().addEventListener('change', () => {
|
|
117
|
+
this.clearSearchHighlights();
|
|
118
|
+
|
|
119
|
+
// Close dropdown if configured to do so
|
|
120
|
+
if (
|
|
121
|
+
this._select.getConfig().closeOnSelect &&
|
|
122
|
+
!this._select.getConfig().multiple
|
|
123
|
+
) {
|
|
124
|
+
this._select.closeDropdown();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Autofocus on search input
|
|
129
|
+
if (this._select.getConfig().searchAutofocus) {
|
|
130
|
+
this._select.getElement().addEventListener('dropdown.show', () => {
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
// Add slight delay to ensure the dropdown and search input are visible
|
|
133
|
+
this._searchInput?.focus();
|
|
134
|
+
}, 50);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Listen for explicit dropdown open event to clear highlights if needed
|
|
139
|
+
this._select.getElement().addEventListener('dropdown.show', () => {
|
|
140
|
+
// If search input is empty, ensure highlights are cleared on open
|
|
141
|
+
if (!this._searchInput?.value) {
|
|
142
|
+
this.clearSearchHighlights();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Remove event listeners to prevent memory leaks or duplicates
|
|
151
|
+
*/
|
|
152
|
+
private _removeEventListeners(): void {
|
|
153
|
+
if (this._searchInput) {
|
|
154
|
+
this._eventManager.removeAllListeners(this._searchInput);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Handle keyboard navigation for search results
|
|
160
|
+
*/
|
|
161
|
+
private _handleKeyboardNavigation(event: KeyboardEvent) {
|
|
162
|
+
// Stop propagation to prevent multiple handlers from firing
|
|
163
|
+
event.stopPropagation();
|
|
164
|
+
|
|
165
|
+
if (this._config.debug) console.log('Search module keydown:', event.key);
|
|
166
|
+
|
|
167
|
+
const visibleOptions = this._focusManager.getVisibleOptions();
|
|
168
|
+
if (visibleOptions.length === 0) return;
|
|
169
|
+
|
|
170
|
+
// Use the shared keyboard navigation handler with custom callbacks
|
|
171
|
+
handleDropdownKeyNavigation(
|
|
172
|
+
event,
|
|
173
|
+
this._select,
|
|
174
|
+
{
|
|
175
|
+
multiple: this._select.getConfig().multiple,
|
|
176
|
+
closeOnSelect: this._select.getConfig().closeOnSelect,
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
onArrowDown: () => this._focusManager.focusNext(),
|
|
180
|
+
onArrowUp: () => this._focusManager.focusPrevious(),
|
|
181
|
+
onEnter: () => this._selectFocusedOption(),
|
|
182
|
+
onClose: () => {
|
|
183
|
+
if (event.key === 'Escape') {
|
|
184
|
+
this.clearSearchHighlights();
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Select the currently focused option
|
|
193
|
+
*/
|
|
194
|
+
private _selectFocusedOption() {
|
|
195
|
+
const focusedOption = this._focusManager.getFocusedOption();
|
|
196
|
+
|
|
197
|
+
if (focusedOption) {
|
|
198
|
+
const optionValue = focusedOption.getAttribute('data-value');
|
|
199
|
+
|
|
200
|
+
if (optionValue) {
|
|
201
|
+
// Ensure highlights are cleared before selection
|
|
202
|
+
this.clearSearchHighlights();
|
|
203
|
+
|
|
204
|
+
// Trigger the selection in the main select component
|
|
205
|
+
this._select['_selectOption'](optionValue);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Store original HTML content of all options for later restoration
|
|
212
|
+
* This prevents losing formatting when clearing search
|
|
213
|
+
*/
|
|
214
|
+
private _cacheOriginalOptionContents() {
|
|
215
|
+
// Wait for options to be initialized
|
|
216
|
+
setTimeout(() => {
|
|
217
|
+
const options = Array.from(this._select.getOptionsElement());
|
|
218
|
+
options.forEach((option) => {
|
|
219
|
+
const value = option.getAttribute('data-value');
|
|
220
|
+
if (value) {
|
|
221
|
+
this._originalOptionContents.set(value, option.innerHTML);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}, 0);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private _handleSearchInput(event: Event) {
|
|
228
|
+
const query = (event.target as HTMLInputElement).value.toLowerCase();
|
|
229
|
+
const config = this._select.getConfig();
|
|
230
|
+
|
|
231
|
+
// Reset focused option when search changes
|
|
232
|
+
this._focusManager.resetFocus();
|
|
233
|
+
|
|
234
|
+
// If search query is empty, clear all highlights
|
|
235
|
+
if (query.trim() === '') {
|
|
236
|
+
this.clearSearchHighlights();
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// For remote search, we don't filter locally
|
|
240
|
+
// The KTSelect component will handle the remote search
|
|
241
|
+
if (config.remote && config.searchParam) {
|
|
242
|
+
// If query is too short, reset all options to visible state
|
|
243
|
+
if (query.length < config.searchMinLength) {
|
|
244
|
+
this._resetAllOptions();
|
|
245
|
+
this._clearNoResultsMessage();
|
|
246
|
+
}
|
|
247
|
+
// Otherwise, let KTSelect handle remote search
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// For local search
|
|
252
|
+
if (query.length >= config.searchMinLength) {
|
|
253
|
+
this._filterOptions(query);
|
|
254
|
+
} else {
|
|
255
|
+
this._resetAllOptions();
|
|
256
|
+
this._clearNoResultsMessage();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
private _filterOptions(query: string) {
|
|
261
|
+
const options = Array.from(
|
|
262
|
+
this._select.getOptionsElement(),
|
|
263
|
+
) as HTMLElement[];
|
|
264
|
+
const config = this._select.getConfig();
|
|
265
|
+
const dropdownElement = this._select.getDropdownElement();
|
|
266
|
+
|
|
267
|
+
// Cache original option HTML if not already cached
|
|
268
|
+
if (this._originalOptionContents.size === 0) {
|
|
269
|
+
this._cacheOriginalOptionContents();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Use the shared filterOptions utility
|
|
273
|
+
filterOptions(options, query, config, dropdownElement, (visibleCount) =>
|
|
274
|
+
this._handleNoResults(visibleCount),
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
// Apply specialized text highlighting if needed
|
|
278
|
+
if (config.searchHighlight && query.trim() !== '') {
|
|
279
|
+
this._applyHighlightToDisplay(query);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Apply highlighting to the display element for multi-select
|
|
285
|
+
*/
|
|
286
|
+
private _applyHighlightToDisplay(query: string) {
|
|
287
|
+
// Implementation for display highlighting
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Reset all options to their original state
|
|
292
|
+
*/
|
|
293
|
+
private _resetAllOptions() {
|
|
294
|
+
// Show all options
|
|
295
|
+
const options = Array.from(
|
|
296
|
+
this._select.getOptionsElement(),
|
|
297
|
+
) as HTMLElement[];
|
|
298
|
+
|
|
299
|
+
// Cache original option HTML if not already cached
|
|
300
|
+
if (this._originalOptionContents.size === 0) {
|
|
301
|
+
this._cacheOriginalOptionContents();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
options.forEach((option) => {
|
|
305
|
+
// Remove the hidden class
|
|
306
|
+
option.classList.remove('hidden');
|
|
307
|
+
|
|
308
|
+
// Restore original HTML content (remove highlights)
|
|
309
|
+
const value = option.getAttribute('data-value');
|
|
310
|
+
if (value && this._originalOptionContents.has(value)) {
|
|
311
|
+
option.innerHTML = this._originalOptionContents.get(value);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Remove any display styling
|
|
315
|
+
if (
|
|
316
|
+
option.hasAttribute('style') &&
|
|
317
|
+
option.getAttribute('style').includes('display:')
|
|
318
|
+
) {
|
|
319
|
+
const styleAttr = option.getAttribute('style');
|
|
320
|
+
if (
|
|
321
|
+
styleAttr.trim() === 'display: none;' ||
|
|
322
|
+
styleAttr.trim() === 'display: block;'
|
|
323
|
+
) {
|
|
324
|
+
option.removeAttribute('style');
|
|
325
|
+
} else {
|
|
326
|
+
option.setAttribute(
|
|
327
|
+
'style',
|
|
328
|
+
styleAttr.replace(/display:\s*[^;]+;?/gi, '').trim(),
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private _handleNoResults(visibleOptionsCount: number) {
|
|
336
|
+
if (visibleOptionsCount === 0 && this._searchInput.value.trim() !== '') {
|
|
337
|
+
this._showNoResultsMessage();
|
|
338
|
+
} else {
|
|
339
|
+
this._clearNoResultsMessage();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
private _showNoResultsMessage() {
|
|
344
|
+
this._clearNoResultsMessage();
|
|
345
|
+
|
|
346
|
+
const config = this._select.getConfig();
|
|
347
|
+
this._noResultsElement = defaultTemplates.noResults(config);
|
|
348
|
+
|
|
349
|
+
const dropdownElement = this._select.getDropdownElement();
|
|
350
|
+
const optionsContainer = dropdownElement.querySelector(
|
|
351
|
+
'[data-kt-select-options-container]',
|
|
352
|
+
);
|
|
353
|
+
if (optionsContainer) {
|
|
354
|
+
optionsContainer.appendChild(this._noResultsElement);
|
|
355
|
+
} else {
|
|
356
|
+
dropdownElement.appendChild(this._noResultsElement);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
private _clearNoResultsMessage() {
|
|
361
|
+
if (this._noResultsElement && this._noResultsElement.parentNode) {
|
|
362
|
+
this._noResultsElement.parentNode.removeChild(this._noResultsElement);
|
|
363
|
+
this._noResultsElement = null;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Public method to explicitly clear all search highlights
|
|
369
|
+
* This is called when search is reset or selection changes
|
|
370
|
+
*/
|
|
371
|
+
public clearSearchHighlights() {
|
|
372
|
+
// Restore original option content (removes highlighting)
|
|
373
|
+
const options = Array.from(
|
|
374
|
+
this._select.getOptionsElement(),
|
|
375
|
+
) as HTMLElement[];
|
|
376
|
+
|
|
377
|
+
options.forEach((option) => {
|
|
378
|
+
const value = option.getAttribute('data-value');
|
|
379
|
+
if (value && this._originalOptionContents.has(value)) {
|
|
380
|
+
option.innerHTML = this._originalOptionContents.get(value);
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
// Also clear highlights from the display element
|
|
385
|
+
this._clearDisplayHighlights();
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Clear any highlights from the display element (selected values)
|
|
390
|
+
*/
|
|
391
|
+
private _clearDisplayHighlights() {
|
|
392
|
+
// Implementation for clearing display highlights
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* This ensures that search highlighting works correctly with new options
|
|
397
|
+
*/
|
|
398
|
+
public refreshOptionCache(): void {
|
|
399
|
+
// Re-cache all option contents
|
|
400
|
+
this._originalOptionContents.clear();
|
|
401
|
+
const options = Array.from(
|
|
402
|
+
this._select.getOptionsElement(),
|
|
403
|
+
) as HTMLElement[];
|
|
404
|
+
|
|
405
|
+
options.forEach((option) => {
|
|
406
|
+
const value = option.getAttribute('data-value');
|
|
407
|
+
if (value) {
|
|
408
|
+
this._originalOptionContents.set(value, option.innerHTML);
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Clean up all resources used by the search module
|
|
415
|
+
*/
|
|
416
|
+
public destroy(): void {
|
|
417
|
+
// Remove all event listeners
|
|
418
|
+
this._removeEventListeners();
|
|
419
|
+
|
|
420
|
+
// Clear all references
|
|
421
|
+
this._focusManager.dispose();
|
|
422
|
+
this._eventManager.removeAllListeners(null);
|
|
423
|
+
|
|
424
|
+
// Clear cached content
|
|
425
|
+
this._originalOptionContents.clear();
|
|
426
|
+
|
|
427
|
+
// Clear highlight elements
|
|
428
|
+
this.clearSearchHighlights();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
* @version: 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
/* Base Styles */
|
|
7
|
+
@layer components {
|
|
8
|
+
.kt-select {
|
|
9
|
+
@apply py-0 appearance-none flex items-center gap-2 w-full bg-background border border-input shadow-xs shadow-[rgba(0,0,0,0.05)] transition-[color,box-shadow] text-foreground placeholder:text-muted-foreground/80;
|
|
10
|
+
@apply focus-visible:ring-ring/30 focus-visible:border-ring focus-visible:outline-none focus-visible:ring-[3px];
|
|
11
|
+
@apply disabled:cursor-not-allowed disabled:opacity-50 [&[readonly]]:opacity-70 file:h-full [&[type=file]]:py-0;
|
|
12
|
+
@apply aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10;
|
|
13
|
+
|
|
14
|
+
background-repeat: no-repeat;
|
|
15
|
+
background-position: right 0.65rem center;
|
|
16
|
+
background-size: 14px 11px;
|
|
17
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239f9fa9' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
|
|
18
|
+
|
|
19
|
+
.dark & {
|
|
20
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239f9fa9' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&[multiple],
|
|
24
|
+
&[size]:not([size='1']) {
|
|
25
|
+
padding-inline-end: var(--btn-default-px);
|
|
26
|
+
background-image: none;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&:-moz-focusring {
|
|
30
|
+
color: transparent;
|
|
31
|
+
text-shadow: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[dir='rtl'] & {
|
|
35
|
+
background-position: left 0.5rem center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&.active {
|
|
39
|
+
@apply ring-ring/30 border-ring outline-none ring-[3px];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&.disabled {
|
|
43
|
+
@apply cursor-not-allowed opacity-50;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.kt-select-arrow {
|
|
48
|
+
@apply ms-auto;
|
|
49
|
+
|
|
50
|
+
svg {
|
|
51
|
+
@apply size-4 text-muted-foreground;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.kt-select-dropdown {
|
|
56
|
+
@apply rounded-md shadow-md shadow-[rgba(0,0,0,0.05)] border border-border bg-popover text-popover-foreground;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.kt-select-option {
|
|
60
|
+
@apply w-full flex items-center gap-x-2.5 py-2 px-2.5 rounded-md font-medium text-sm text-start cursor-pointer disabled:opacity-50 disabled:pointer-events-none;
|
|
61
|
+
@apply hover:bg-accent hover:text-accent-foreground;
|
|
62
|
+
|
|
63
|
+
&.disabled {
|
|
64
|
+
@apply opacity-50 pointer-events-none;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
&.selected {
|
|
68
|
+
@apply bg-accent text-accent-foreground;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&.highlighted {
|
|
72
|
+
@apply bg-accent text-accent-foreground;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.kt-select-group {
|
|
77
|
+
@apply py-1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.kt-select-group-header {
|
|
81
|
+
@apply px-3 py-1 text-xs font-semibold text-muted-foreground uppercase;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* Sizes */
|
|
86
|
+
@layer components {
|
|
87
|
+
.kt-select {
|
|
88
|
+
@apply h-8.5 gap-1 px-3 text-[0.8125rem] leading-(--text-sm--line-height) rounded-md;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.kt-select-lg {
|
|
92
|
+
@apply h-10 gap-1.5 px-4 text-sm rounded-md;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.kt-select-sm {
|
|
96
|
+
@apply h-7 gap-1 px-2.5 text-xs rounded-md;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Dark Mode Styles */
|
|
101
|
+
@layer components {
|
|
102
|
+
.dark .kt-input {
|
|
103
|
+
@apply aria-invalid:border-destructive aria-invalid:ring-destructive/20;
|
|
104
|
+
}
|
|
105
|
+
}
|