@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.
Files changed (426) hide show
  1. package/CONTRIBUTING.md +88 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +124 -0
  4. package/dist/ktui.js +19201 -0
  5. package/dist/ktui.min.js +2 -0
  6. package/dist/ktui.min.js.map +1 -0
  7. package/lib/cjs/components/accordion/accordion.js +168 -0
  8. package/lib/cjs/components/accordion/accordion.js.map +1 -0
  9. package/lib/cjs/components/accordion/index.js +6 -0
  10. package/lib/cjs/components/accordion/index.js.map +1 -0
  11. package/lib/cjs/components/accordion/types.js +3 -0
  12. package/lib/cjs/components/accordion/types.js.map +1 -0
  13. package/lib/cjs/components/collapse/collapse.js +169 -0
  14. package/lib/cjs/components/collapse/collapse.js.map +1 -0
  15. package/lib/cjs/components/collapse/index.js +6 -0
  16. package/lib/cjs/components/collapse/index.js.map +1 -0
  17. package/lib/cjs/components/collapse/types.js +3 -0
  18. package/lib/cjs/components/collapse/types.js.map +1 -0
  19. package/lib/cjs/components/component.js +135 -0
  20. package/lib/cjs/components/component.js.map +1 -0
  21. package/lib/cjs/components/config.js +26 -0
  22. package/lib/cjs/components/config.js.map +1 -0
  23. package/lib/cjs/components/config.umd.js +23 -0
  24. package/lib/cjs/components/config.umd.js.map +1 -0
  25. package/lib/cjs/components/constants.js +15 -0
  26. package/lib/cjs/components/constants.js.map +1 -0
  27. package/lib/cjs/components/datatable/datatable.js +1464 -0
  28. package/lib/cjs/components/datatable/datatable.js.map +1 -0
  29. package/lib/cjs/components/datatable/index.js +6 -0
  30. package/lib/cjs/components/datatable/index.js.map +1 -0
  31. package/lib/cjs/components/datatable/types.js +3 -0
  32. package/lib/cjs/components/datatable/types.js.map +1 -0
  33. package/lib/cjs/components/dismiss/dismiss.js +131 -0
  34. package/lib/cjs/components/dismiss/dismiss.js.map +1 -0
  35. package/lib/cjs/components/dismiss/index.js +6 -0
  36. package/lib/cjs/components/dismiss/index.js.map +1 -0
  37. package/lib/cjs/components/dismiss/types.js +3 -0
  38. package/lib/cjs/components/dismiss/types.js.map +1 -0
  39. package/lib/cjs/components/drawer/drawer.js +347 -0
  40. package/lib/cjs/components/drawer/drawer.js.map +1 -0
  41. package/lib/cjs/components/drawer/index.js +6 -0
  42. package/lib/cjs/components/drawer/index.js.map +1 -0
  43. package/lib/cjs/components/drawer/types.js +3 -0
  44. package/lib/cjs/components/drawer/types.js.map +1 -0
  45. package/lib/cjs/components/dropdown/dropdown.js +403 -0
  46. package/lib/cjs/components/dropdown/dropdown.js.map +1 -0
  47. package/lib/cjs/components/dropdown/index.js +6 -0
  48. package/lib/cjs/components/dropdown/index.js.map +1 -0
  49. package/lib/cjs/components/dropdown/types.js +3 -0
  50. package/lib/cjs/components/dropdown/types.js.map +1 -0
  51. package/lib/cjs/components/image-input/image-input.js +191 -0
  52. package/lib/cjs/components/image-input/image-input.js.map +1 -0
  53. package/lib/cjs/components/image-input/index.js +6 -0
  54. package/lib/cjs/components/image-input/index.js.map +1 -0
  55. package/lib/cjs/components/image-input/types.js +3 -0
  56. package/lib/cjs/components/image-input/types.js.map +1 -0
  57. package/lib/cjs/components/menu/index.js +6 -0
  58. package/lib/cjs/components/menu/index.js.map +1 -0
  59. package/lib/cjs/components/menu/menu.js +1021 -0
  60. package/lib/cjs/components/menu/menu.js.map +1 -0
  61. package/lib/cjs/components/menu/types.js +3 -0
  62. package/lib/cjs/components/menu/types.js.map +1 -0
  63. package/lib/cjs/components/modal/index.js +6 -0
  64. package/lib/cjs/components/modal/index.js.map +1 -0
  65. package/lib/cjs/components/modal/modal.js +316 -0
  66. package/lib/cjs/components/modal/modal.js.map +1 -0
  67. package/lib/cjs/components/modal/types.js +3 -0
  68. package/lib/cjs/components/modal/types.js.map +1 -0
  69. package/lib/cjs/components/reparent/index.js +6 -0
  70. package/lib/cjs/components/reparent/index.js.map +1 -0
  71. package/lib/cjs/components/reparent/reparent.js +93 -0
  72. package/lib/cjs/components/reparent/reparent.js.map +1 -0
  73. package/lib/cjs/components/reparent/types.js +3 -0
  74. package/lib/cjs/components/reparent/types.js.map +1 -0
  75. package/lib/cjs/components/scrollable/index.js +6 -0
  76. package/lib/cjs/components/scrollable/index.js.map +1 -0
  77. package/lib/cjs/components/scrollable/scrollable.js +259 -0
  78. package/lib/cjs/components/scrollable/scrollable.js.map +1 -0
  79. package/lib/cjs/components/scrollable/types.js +3 -0
  80. package/lib/cjs/components/scrollable/types.js.map +1 -0
  81. package/lib/cjs/components/scrollspy/index.js +6 -0
  82. package/lib/cjs/components/scrollspy/index.js.map +1 -0
  83. package/lib/cjs/components/scrollspy/scrollspy.js +174 -0
  84. package/lib/cjs/components/scrollspy/scrollspy.js.map +1 -0
  85. package/lib/cjs/components/scrollspy/types.js +3 -0
  86. package/lib/cjs/components/scrollspy/types.js.map +1 -0
  87. package/lib/cjs/components/scrollto/index.js +6 -0
  88. package/lib/cjs/components/scrollto/index.js.map +1 -0
  89. package/lib/cjs/components/scrollto/scrollto.js +103 -0
  90. package/lib/cjs/components/scrollto/scrollto.js.map +1 -0
  91. package/lib/cjs/components/scrollto/types.js +3 -0
  92. package/lib/cjs/components/scrollto/types.js.map +1 -0
  93. package/lib/cjs/components/stepper/index.js +6 -0
  94. package/lib/cjs/components/stepper/index.js.map +1 -0
  95. package/lib/cjs/components/stepper/stepper.js +258 -0
  96. package/lib/cjs/components/stepper/stepper.js.map +1 -0
  97. package/lib/cjs/components/stepper/types.js +3 -0
  98. package/lib/cjs/components/stepper/types.js.map +1 -0
  99. package/lib/cjs/components/sticky/index.js +6 -0
  100. package/lib/cjs/components/sticky/index.js.map +1 -0
  101. package/lib/cjs/components/sticky/sticky.js +297 -0
  102. package/lib/cjs/components/sticky/sticky.js.map +1 -0
  103. package/lib/cjs/components/sticky/types.js +3 -0
  104. package/lib/cjs/components/sticky/types.js.map +1 -0
  105. package/lib/cjs/components/tabs/index.js +6 -0
  106. package/lib/cjs/components/tabs/index.js.map +1 -0
  107. package/lib/cjs/components/tabs/tabs.js +146 -0
  108. package/lib/cjs/components/tabs/tabs.js.map +1 -0
  109. package/lib/cjs/components/tabs/types.js +3 -0
  110. package/lib/cjs/components/tabs/types.js.map +1 -0
  111. package/lib/cjs/components/theme/index.js +6 -0
  112. package/lib/cjs/components/theme/index.js.map +1 -0
  113. package/lib/cjs/components/theme/theme.js +147 -0
  114. package/lib/cjs/components/theme/theme.js.map +1 -0
  115. package/lib/cjs/components/theme/types.js +3 -0
  116. package/lib/cjs/components/theme/types.js.map +1 -0
  117. package/lib/cjs/components/toggle/index.js +6 -0
  118. package/lib/cjs/components/toggle/index.js.map +1 -0
  119. package/lib/cjs/components/toggle/toggle.js +139 -0
  120. package/lib/cjs/components/toggle/toggle.js.map +1 -0
  121. package/lib/cjs/components/toggle/types.js +3 -0
  122. package/lib/cjs/components/toggle/types.js.map +1 -0
  123. package/lib/cjs/components/toggle-password/index.js +6 -0
  124. package/lib/cjs/components/toggle-password/index.js.map +1 -0
  125. package/lib/cjs/components/toggle-password/toggle-password.js +131 -0
  126. package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -0
  127. package/lib/cjs/components/toggle-password/types.js +3 -0
  128. package/lib/cjs/components/toggle-password/types.js.map +1 -0
  129. package/lib/cjs/components/tooltip/index.js +6 -0
  130. package/lib/cjs/components/tooltip/index.js.map +1 -0
  131. package/lib/cjs/components/tooltip/tooltip.js +271 -0
  132. package/lib/cjs/components/tooltip/tooltip.js.map +1 -0
  133. package/lib/cjs/components/tooltip/types.js +3 -0
  134. package/lib/cjs/components/tooltip/types.js.map +1 -0
  135. package/lib/cjs/helpers/data.js +33 -0
  136. package/lib/cjs/helpers/data.js.map +1 -0
  137. package/lib/cjs/helpers/dom.js +297 -0
  138. package/lib/cjs/helpers/dom.js.map +1 -0
  139. package/lib/cjs/helpers/event-handler.js +36 -0
  140. package/lib/cjs/helpers/event-handler.js.map +1 -0
  141. package/lib/cjs/helpers/utils.js +94 -0
  142. package/lib/cjs/helpers/utils.js.map +1 -0
  143. package/lib/cjs/index.js +105 -0
  144. package/lib/cjs/index.js.map +1 -0
  145. package/lib/cjs/types.js +3 -0
  146. package/lib/cjs/types.js.map +1 -0
  147. package/lib/esm/components/accordion/accordion.js +165 -0
  148. package/lib/esm/components/accordion/accordion.js.map +1 -0
  149. package/lib/esm/components/accordion/index.js +2 -0
  150. package/lib/esm/components/accordion/index.js.map +1 -0
  151. package/lib/esm/components/accordion/types.js +2 -0
  152. package/lib/esm/components/accordion/types.js.map +1 -0
  153. package/lib/esm/components/collapse/collapse.js +166 -0
  154. package/lib/esm/components/collapse/collapse.js.map +1 -0
  155. package/lib/esm/components/collapse/index.js +2 -0
  156. package/lib/esm/components/collapse/index.js.map +1 -0
  157. package/lib/esm/components/collapse/types.js +2 -0
  158. package/lib/esm/components/collapse/types.js.map +1 -0
  159. package/lib/esm/components/component.js +133 -0
  160. package/lib/esm/components/component.js.map +1 -0
  161. package/lib/esm/components/config.js +24 -0
  162. package/lib/esm/components/config.js.map +1 -0
  163. package/lib/esm/components/config.umd.js +23 -0
  164. package/lib/esm/components/config.umd.js.map +1 -0
  165. package/lib/esm/components/constants.js +12 -0
  166. package/lib/esm/components/constants.js.map +1 -0
  167. package/lib/esm/components/datatable/datatable.js +1461 -0
  168. package/lib/esm/components/datatable/datatable.js.map +1 -0
  169. package/lib/esm/components/datatable/index.js +2 -0
  170. package/lib/esm/components/datatable/index.js.map +1 -0
  171. package/lib/esm/components/datatable/types.js +2 -0
  172. package/lib/esm/components/datatable/types.js.map +1 -0
  173. package/lib/esm/components/dismiss/dismiss.js +128 -0
  174. package/lib/esm/components/dismiss/dismiss.js.map +1 -0
  175. package/lib/esm/components/dismiss/index.js +2 -0
  176. package/lib/esm/components/dismiss/index.js.map +1 -0
  177. package/lib/esm/components/dismiss/types.js +2 -0
  178. package/lib/esm/components/dismiss/types.js.map +1 -0
  179. package/lib/esm/components/drawer/drawer.js +344 -0
  180. package/lib/esm/components/drawer/drawer.js.map +1 -0
  181. package/lib/esm/components/drawer/index.js +2 -0
  182. package/lib/esm/components/drawer/index.js.map +1 -0
  183. package/lib/esm/components/drawer/types.js +2 -0
  184. package/lib/esm/components/drawer/types.js.map +1 -0
  185. package/lib/esm/components/dropdown/dropdown.js +400 -0
  186. package/lib/esm/components/dropdown/dropdown.js.map +1 -0
  187. package/lib/esm/components/dropdown/index.js +2 -0
  188. package/lib/esm/components/dropdown/index.js.map +1 -0
  189. package/lib/esm/components/dropdown/types.js +2 -0
  190. package/lib/esm/components/dropdown/types.js.map +1 -0
  191. package/lib/esm/components/image-input/image-input.js +188 -0
  192. package/lib/esm/components/image-input/image-input.js.map +1 -0
  193. package/lib/esm/components/image-input/index.js +2 -0
  194. package/lib/esm/components/image-input/index.js.map +1 -0
  195. package/lib/esm/components/image-input/types.js +2 -0
  196. package/lib/esm/components/image-input/types.js.map +1 -0
  197. package/lib/esm/components/menu/index.js +2 -0
  198. package/lib/esm/components/menu/index.js.map +1 -0
  199. package/lib/esm/components/menu/menu.js +1018 -0
  200. package/lib/esm/components/menu/menu.js.map +1 -0
  201. package/lib/esm/components/menu/types.js +2 -0
  202. package/lib/esm/components/menu/types.js.map +1 -0
  203. package/lib/esm/components/modal/index.js +2 -0
  204. package/lib/esm/components/modal/index.js.map +1 -0
  205. package/lib/esm/components/modal/modal.js +313 -0
  206. package/lib/esm/components/modal/modal.js.map +1 -0
  207. package/lib/esm/components/modal/types.js +2 -0
  208. package/lib/esm/components/modal/types.js.map +1 -0
  209. package/lib/esm/components/reparent/index.js +2 -0
  210. package/lib/esm/components/reparent/index.js.map +1 -0
  211. package/lib/esm/components/reparent/reparent.js +90 -0
  212. package/lib/esm/components/reparent/reparent.js.map +1 -0
  213. package/lib/esm/components/reparent/types.js +2 -0
  214. package/lib/esm/components/reparent/types.js.map +1 -0
  215. package/lib/esm/components/scrollable/index.js +2 -0
  216. package/lib/esm/components/scrollable/index.js.map +1 -0
  217. package/lib/esm/components/scrollable/scrollable.js +256 -0
  218. package/lib/esm/components/scrollable/scrollable.js.map +1 -0
  219. package/lib/esm/components/scrollable/types.js +2 -0
  220. package/lib/esm/components/scrollable/types.js.map +1 -0
  221. package/lib/esm/components/scrollspy/index.js +2 -0
  222. package/lib/esm/components/scrollspy/index.js.map +1 -0
  223. package/lib/esm/components/scrollspy/scrollspy.js +171 -0
  224. package/lib/esm/components/scrollspy/scrollspy.js.map +1 -0
  225. package/lib/esm/components/scrollspy/types.js +2 -0
  226. package/lib/esm/components/scrollspy/types.js.map +1 -0
  227. package/lib/esm/components/scrollto/index.js +2 -0
  228. package/lib/esm/components/scrollto/index.js.map +1 -0
  229. package/lib/esm/components/scrollto/scrollto.js +100 -0
  230. package/lib/esm/components/scrollto/scrollto.js.map +1 -0
  231. package/lib/esm/components/scrollto/types.js +2 -0
  232. package/lib/esm/components/scrollto/types.js.map +1 -0
  233. package/lib/esm/components/stepper/index.js +2 -0
  234. package/lib/esm/components/stepper/index.js.map +1 -0
  235. package/lib/esm/components/stepper/stepper.js +255 -0
  236. package/lib/esm/components/stepper/stepper.js.map +1 -0
  237. package/lib/esm/components/stepper/types.js +2 -0
  238. package/lib/esm/components/stepper/types.js.map +1 -0
  239. package/lib/esm/components/sticky/index.js +2 -0
  240. package/lib/esm/components/sticky/index.js.map +1 -0
  241. package/lib/esm/components/sticky/sticky.js +294 -0
  242. package/lib/esm/components/sticky/sticky.js.map +1 -0
  243. package/lib/esm/components/sticky/types.js +2 -0
  244. package/lib/esm/components/sticky/types.js.map +1 -0
  245. package/lib/esm/components/tabs/index.js +2 -0
  246. package/lib/esm/components/tabs/index.js.map +1 -0
  247. package/lib/esm/components/tabs/tabs.js +143 -0
  248. package/lib/esm/components/tabs/tabs.js.map +1 -0
  249. package/lib/esm/components/tabs/types.js +2 -0
  250. package/lib/esm/components/tabs/types.js.map +1 -0
  251. package/lib/esm/components/theme/index.js +2 -0
  252. package/lib/esm/components/theme/index.js.map +1 -0
  253. package/lib/esm/components/theme/theme.js +144 -0
  254. package/lib/esm/components/theme/theme.js.map +1 -0
  255. package/lib/esm/components/theme/types.js +2 -0
  256. package/lib/esm/components/theme/types.js.map +1 -0
  257. package/lib/esm/components/toggle/index.js +2 -0
  258. package/lib/esm/components/toggle/index.js.map +1 -0
  259. package/lib/esm/components/toggle/toggle.js +136 -0
  260. package/lib/esm/components/toggle/toggle.js.map +1 -0
  261. package/lib/esm/components/toggle/types.js +2 -0
  262. package/lib/esm/components/toggle/types.js.map +1 -0
  263. package/lib/esm/components/toggle-password/index.js +2 -0
  264. package/lib/esm/components/toggle-password/index.js.map +1 -0
  265. package/lib/esm/components/toggle-password/toggle-password.js +128 -0
  266. package/lib/esm/components/toggle-password/toggle-password.js.map +1 -0
  267. package/lib/esm/components/toggle-password/types.js +2 -0
  268. package/lib/esm/components/toggle-password/types.js.map +1 -0
  269. package/lib/esm/components/tooltip/index.js +2 -0
  270. package/lib/esm/components/tooltip/index.js.map +1 -0
  271. package/lib/esm/components/tooltip/tooltip.js +268 -0
  272. package/lib/esm/components/tooltip/tooltip.js.map +1 -0
  273. package/lib/esm/components/tooltip/types.js +2 -0
  274. package/lib/esm/components/tooltip/types.js.map +1 -0
  275. package/lib/esm/helpers/data.js +31 -0
  276. package/lib/esm/helpers/data.js.map +1 -0
  277. package/lib/esm/helpers/dom.js +295 -0
  278. package/lib/esm/helpers/dom.js.map +1 -0
  279. package/lib/esm/helpers/event-handler.js +34 -0
  280. package/lib/esm/helpers/event-handler.js.map +1 -0
  281. package/lib/esm/helpers/utils.js +92 -0
  282. package/lib/esm/helpers/utils.js.map +1 -0
  283. package/lib/esm/index.js +79 -0
  284. package/lib/esm/index.js.map +1 -0
  285. package/lib/esm/types.js +2 -0
  286. package/lib/esm/types.js.map +1 -0
  287. package/package.json +85 -0
  288. package/prettier.config.js +9 -0
  289. package/src/components/accordion/accordion-menu.css +51 -0
  290. package/src/components/accordion/accordion.css +86 -0
  291. package/src/components/accordion/accordion.ts +221 -0
  292. package/src/components/accordion/index.ts +7 -0
  293. package/src/components/accordion/types.ts +16 -0
  294. package/src/components/alert/alert.css +282 -0
  295. package/src/components/avatar/avatar.css +46 -0
  296. package/src/components/badge/badge.css +176 -0
  297. package/src/components/breadcrumb/breadcrumb.css +38 -0
  298. package/src/components/btn/btn.css +227 -0
  299. package/src/components/card/card.css +158 -0
  300. package/src/components/checkbox/checkbox.css +74 -0
  301. package/src/components/collapse/collapse.css +14 -0
  302. package/src/components/collapse/collapse.ts +200 -0
  303. package/src/components/collapse/index.ts +7 -0
  304. package/src/components/collapse/types.ts +16 -0
  305. package/src/components/component.ts +132 -0
  306. package/src/components/constants.ts +16 -0
  307. package/src/components/datatable/datatable-checkbox.ts +236 -0
  308. package/src/components/datatable/datatable-sort.ts +154 -0
  309. package/src/components/datatable/datatable.css +110 -0
  310. package/src/components/datatable/datatable.ts +1657 -0
  311. package/src/components/datatable/index.ts +19 -0
  312. package/src/components/datatable/types.ts +203 -0
  313. package/src/components/datepicker/calendar.ts +1397 -0
  314. package/src/components/datepicker/config.ts +368 -0
  315. package/src/components/datepicker/datepicker.css +7 -0
  316. package/src/components/datepicker/datepicker.ts +1287 -0
  317. package/src/components/datepicker/dropdown.ts +757 -0
  318. package/src/components/datepicker/events.ts +149 -0
  319. package/src/components/datepicker/index.ts +10 -0
  320. package/src/components/datepicker/keyboard.ts +646 -0
  321. package/src/components/datepicker/locales.ts +80 -0
  322. package/src/components/datepicker/templates.ts +792 -0
  323. package/src/components/datepicker/types.ts +154 -0
  324. package/src/components/datepicker/utils.ts +631 -0
  325. package/src/components/dismiss/dismiss.css +10 -0
  326. package/src/components/dismiss/dismiss.ts +152 -0
  327. package/src/components/dismiss/index.ts +7 -0
  328. package/src/components/dismiss/types.ts +17 -0
  329. package/src/components/drawer/drawer.css +97 -0
  330. package/src/components/drawer/drawer.ts +437 -0
  331. package/src/components/drawer/index.ts +7 -0
  332. package/src/components/drawer/types.ts +25 -0
  333. package/src/components/dropdown/dropdown-menu.css +56 -0
  334. package/src/components/dropdown/dropdown.css +46 -0
  335. package/src/components/dropdown/dropdown.ts +549 -0
  336. package/src/components/dropdown/index.ts +7 -0
  337. package/src/components/dropdown/types.ts +28 -0
  338. package/src/components/form/form.css +54 -0
  339. package/src/components/image-input/image-input.css +56 -0
  340. package/src/components/image-input/image-input.ts +249 -0
  341. package/src/components/image-input/index.ts +10 -0
  342. package/src/components/image-input/types.ts +12 -0
  343. package/src/components/input/input-group.css +42 -0
  344. package/src/components/input/input.css +136 -0
  345. package/src/components/kbd/kbd.css +30 -0
  346. package/src/components/label/label.css +20 -0
  347. package/src/components/link/link.css +81 -0
  348. package/src/components/modal/index.ts +7 -0
  349. package/src/components/modal/modal.css +73 -0
  350. package/src/components/modal/modal.ts +382 -0
  351. package/src/components/modal/types.ts +21 -0
  352. package/src/components/pagination/pagination.css +26 -0
  353. package/src/components/popover/popover.css +22 -0
  354. package/src/components/progress/progress.css +51 -0
  355. package/src/components/radio/radio.css +51 -0
  356. package/src/components/reparent/index.ts +7 -0
  357. package/src/components/reparent/reparent.ts +109 -0
  358. package/src/components/reparent/types.ts +15 -0
  359. package/src/components/scrollable/index.ts +10 -0
  360. package/src/components/scrollable/scrollable.css +29 -0
  361. package/src/components/scrollable/scrollable.ts +297 -0
  362. package/src/components/scrollable/types.ts +16 -0
  363. package/src/components/scrollspy/index.ts +7 -0
  364. package/src/components/scrollspy/scrollspy.css +13 -0
  365. package/src/components/scrollspy/scrollspy.ts +224 -0
  366. package/src/components/scrollspy/types.ts +15 -0
  367. package/src/components/scrollto/index.ts +7 -0
  368. package/src/components/scrollto/scrollto.ts +127 -0
  369. package/src/components/scrollto/types.ts +15 -0
  370. package/src/components/select/combobox.ts +305 -0
  371. package/src/components/select/config.ts +324 -0
  372. package/src/components/select/dropdown.ts +510 -0
  373. package/src/components/select/index.ts +13 -0
  374. package/src/components/select/option.ts +43 -0
  375. package/src/components/select/remote.ts +477 -0
  376. package/src/components/select/search.ts +430 -0
  377. package/src/components/select/select.css +105 -0
  378. package/src/components/select/select.ts +1916 -0
  379. package/src/components/select/tags.ts +123 -0
  380. package/src/components/select/templates.ts +531 -0
  381. package/src/components/select/types.ts +36 -0
  382. package/src/components/select/utils.ts +747 -0
  383. package/src/components/select/variants.css +5 -0
  384. package/src/components/separator/separator.css +14 -0
  385. package/src/components/skeleton/skeleton.css +10 -0
  386. package/src/components/stepper/index.ts +7 -0
  387. package/src/components/stepper/stepper.css +49 -0
  388. package/src/components/stepper/stepper.ts +308 -0
  389. package/src/components/stepper/types.ts +13 -0
  390. package/src/components/sticky/index.ts +7 -0
  391. package/src/components/sticky/sticky.css +22 -0
  392. package/src/components/sticky/sticky.ts +381 -0
  393. package/src/components/sticky/types.ts +23 -0
  394. package/src/components/switch/switch.css +110 -0
  395. package/src/components/table/table.css +168 -0
  396. package/src/components/tabs/index.ts +7 -0
  397. package/src/components/tabs/tabs.css +40 -0
  398. package/src/components/tabs/tabs.ts +190 -0
  399. package/src/components/tabs/types.ts +13 -0
  400. package/src/components/textarea/textarea.css +35 -0
  401. package/src/components/theme-switch/index.ts +10 -0
  402. package/src/components/theme-switch/theme-switch.css +22 -0
  403. package/src/components/theme-switch/theme-switch.ts +176 -0
  404. package/src/components/theme-switch/types.ts +15 -0
  405. package/src/components/toggle/index.ts +7 -0
  406. package/src/components/toggle/toggle.css +13 -0
  407. package/src/components/toggle/toggle.ts +173 -0
  408. package/src/components/toggle/types.ts +18 -0
  409. package/src/components/toggle-group/toggle-group.css +55 -0
  410. package/src/components/toggle-password/index.ts +10 -0
  411. package/src/components/toggle-password/toggle-password.css +13 -0
  412. package/src/components/toggle-password/toggle-password.ts +159 -0
  413. package/src/components/toggle-password/types.ts +13 -0
  414. package/src/components/tooltip/index.ts +7 -0
  415. package/src/components/tooltip/tooltip.css +18 -0
  416. package/src/components/tooltip/tooltip.ts +361 -0
  417. package/src/components/tooltip/types.ts +28 -0
  418. package/src/helpers/data.ts +46 -0
  419. package/src/helpers/dom.ts +405 -0
  420. package/src/helpers/event-handler.ts +61 -0
  421. package/src/helpers/utils.ts +183 -0
  422. package/src/index.ts +113 -0
  423. package/src/types.ts +23 -0
  424. package/styles.css +48 -0
  425. package/tsconfig.json +17 -0
  426. package/webpack.config.js +113 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export interface KTDrawerConfigInterface {
7
+ enable?: boolean;
8
+ class: string;
9
+ zindex?: string;
10
+ shownClass: string;
11
+ hiddenClass: string;
12
+ backdrop: boolean;
13
+ backdropClass: string;
14
+ backdropStatic: boolean;
15
+ keyboard: boolean;
16
+ disableScroll: boolean;
17
+ persistent: boolean;
18
+ focus: boolean;
19
+ container: string;
20
+ }
21
+ export interface KTDrawerInterface {
22
+ show(): void;
23
+ hide(): void;
24
+ toggle(): void;
25
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ @layer components {
7
+ .kt-dropdown-menu {
8
+ @apply p-2 space-y-1 rounded-md shadow-md shadow-[rgba(0,0,0,0.05)] border border-border bg-popover text-popover-foreground;
9
+
10
+ &:not(.open) {
11
+ @apply hidden;
12
+ }
13
+ }
14
+
15
+ .kt-dropdown-menu-sub {
16
+ @apply space-y-1 w-full;
17
+ }
18
+
19
+ .kt-dropdown-menu-toggle {
20
+ @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;
21
+ @apply text-foreground;
22
+ @apply hover:bg-accent hover:text-accent-foreground;
23
+ @apply kt-dropdown-open:bg-accent kt-dropdown-open:text-accent-foreground;
24
+
25
+ .kt-dropdown-menu-indicator {
26
+ @apply inline-flex items-center ms-auto size-3.5 shrink-0 text-muted-foreground;
27
+ }
28
+
29
+ i {
30
+ @apply shrink-0 text-base text-muted-foreground;
31
+ }
32
+
33
+ svg {
34
+ @apply shrink-0 size-4 text-muted-foreground;
35
+ }
36
+ }
37
+
38
+ .kt-dropdown-menu-link {
39
+ @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;
40
+ @apply text-foreground;
41
+ @apply hover:bg-accent hover:text-accent-foreground;
42
+ @apply kt-dropdown-selected:bg-accent kt-dropdown-selected:text-accent-foreground;
43
+
44
+ i {
45
+ @apply shrink-0 text-base text-muted-foreground;
46
+ }
47
+
48
+ svg {
49
+ @apply shrink-0 size-4 text-muted-foreground;
50
+ }
51
+ }
52
+
53
+ .kt-dropdown-menu-separator {
54
+ @apply h-px bg-border my-2.5 -mx-2 rtl:transform rtl:rotate-180;
55
+ }
56
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ @layer components {
7
+ .kt-dropdown {
8
+ @apply rounded-md shadow-md shadow-[rgba(0,0,0,0.05)] border border-border bg-popover text-popover-foreground;
9
+
10
+ &:not(.open) {
11
+ @apply hidden;
12
+ }
13
+ }
14
+
15
+ .kt-dropdown-header {
16
+ @apply px-4 py-3 font-semibold border-b border-border;
17
+ }
18
+
19
+ .kt-dropdown-body {
20
+ @apply px-4 py-3;
21
+ }
22
+ }
23
+
24
+ @custom-variant kt-dropdown-open {
25
+ [data-kt-dropdown-initialized].open > [data-kt-dropdown-toggle]& {
26
+ @slot;
27
+ }
28
+
29
+ [data-kt-dropdown-initialized].open > [data-kt-dropdown-toggle] & {
30
+ @slot;
31
+ }
32
+ }
33
+
34
+ @custom-variant kt-dropdown-selected {
35
+ [data-kt-dropdown-initialized] .selected {
36
+ @slot;
37
+ }
38
+
39
+ [data-kt-dropdown-initialized] .selected & {
40
+ @slot;
41
+ }
42
+
43
+ [data-kt-dropdown-initialized] &.selected {
44
+ @slot;
45
+ }
46
+ }
@@ -0,0 +1,549 @@
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
+ Instance as PopperInstance,
8
+ createPopper,
9
+ Placement,
10
+ VirtualElement,
11
+ } from '@popperjs/core';
12
+ import KTDom from '../../helpers/dom';
13
+ import KTData from '../../helpers/data';
14
+ import KTEventHandler from '../../helpers/event-handler';
15
+ import KTComponent from '../component';
16
+ import { KTDropdownConfigInterface, KTDropdownInterface } from './types';
17
+
18
+ declare global {
19
+ interface Window {
20
+ KT_DROPDOWN_INITIALIZED: boolean;
21
+ KTDropdown: typeof KTDropdown;
22
+ }
23
+ }
24
+
25
+ export class KTDropdown extends KTComponent implements KTDropdownInterface {
26
+ protected override _name: string = 'dropdown';
27
+ protected override _defaultConfig: KTDropdownConfigInterface = {
28
+ zindex: 105,
29
+ hoverTimeout: 200,
30
+ placement: 'bottom-start',
31
+ placementRtl: 'bottom-end',
32
+ permanent: false,
33
+ dismiss: false,
34
+ keyboard: true,
35
+ trigger: 'click',
36
+ attach: '',
37
+ offset: '0px, 5px',
38
+ offsetRtl: '0px, 5px',
39
+ hiddenClass: 'hidden',
40
+ };
41
+ protected override _config: KTDropdownConfigInterface = this._defaultConfig;
42
+ protected _disabled: boolean = false;
43
+ protected _toggleElement: HTMLElement;
44
+ protected _menuElement: HTMLElement;
45
+ protected _isTransitioning: boolean = false;
46
+ protected _isOpen: boolean = false;
47
+
48
+ constructor(element: HTMLElement, config?: KTDropdownConfigInterface) {
49
+ super();
50
+
51
+ if (KTData.has(element as HTMLElement, this._name)) return;
52
+
53
+ this._init(element);
54
+ this._buildConfig(config);
55
+
56
+ this._toggleElement = this._element.querySelector(
57
+ '[data-kt-dropdown-toggle]',
58
+ ) as HTMLElement;
59
+ if (!this._toggleElement) return;
60
+ this._menuElement = this._element.querySelector(
61
+ '[data-kt-dropdown-menu]',
62
+ ) as HTMLElement;
63
+ if (!this._menuElement) return;
64
+
65
+ KTData.set(this._menuElement, 'dropdownElement', this._element);
66
+ this._setupNestedDropdowns();
67
+ }
68
+
69
+ protected _setupNestedDropdowns(): void {
70
+ const subDropdowns = this._menuElement.querySelectorAll(
71
+ '[data-kt-dropdown-toggle]',
72
+ );
73
+ subDropdowns.forEach((subToggle) => {
74
+ const subItem = subToggle.closest(
75
+ '[data-kt-dropdown-item]',
76
+ ) as HTMLElement;
77
+ const subMenu = subToggle
78
+ .closest('.kt-menu-item')
79
+ ?.querySelector('[data-kt-dropdown-menu]');
80
+ if (subItem && subMenu) {
81
+ new KTDropdown(subItem);
82
+ }
83
+ });
84
+ }
85
+
86
+ protected _click(event: Event): void {
87
+ event.preventDefault();
88
+ event.stopPropagation();
89
+
90
+ if (this._disabled) return;
91
+
92
+ if (this._getOption('trigger') !== 'click') return;
93
+
94
+ this._toggle();
95
+ }
96
+
97
+ protected _mouseover(event: MouseEvent): void {
98
+ if (this._disabled) return;
99
+
100
+ if (this._getOption('trigger') !== 'hover') return;
101
+
102
+ if (KTData.get(this._element, 'hover') === '1') {
103
+ clearTimeout(KTData.get(this._element, 'timeout') as number);
104
+ KTData.remove(this._element, 'hover');
105
+ KTData.remove(this._element, 'timeout');
106
+ }
107
+
108
+ this._show();
109
+ }
110
+
111
+ protected _mouseout(event: MouseEvent): void {
112
+ if (this._disabled) return;
113
+
114
+ if (this._getOption('trigger') !== 'hover') return;
115
+
116
+ const relatedTarget = event.relatedTarget as HTMLElement;
117
+ const isWithinDropdown = this._element.contains(relatedTarget);
118
+
119
+ if (isWithinDropdown) return;
120
+
121
+ const timeout = setTimeout(
122
+ () => {
123
+ if (KTData.get(this._element, 'hover') === '1') {
124
+ this._hide();
125
+ }
126
+ },
127
+ parseInt(this._getOption('hoverTimeout') as string),
128
+ );
129
+
130
+ KTData.set(this._element, 'hover', '1');
131
+ KTData.set(this._element, 'timeout', timeout);
132
+ }
133
+
134
+ protected _toggle(): void {
135
+ if (this._isOpen) {
136
+ this._hide();
137
+ } else {
138
+ this._show();
139
+ }
140
+ }
141
+
142
+ protected _show(): void {
143
+ if (this._isOpen || this._isTransitioning) return;
144
+
145
+ const payload = { cancel: false };
146
+ this._fireEvent('show', payload);
147
+ this._dispatchEvent('show', payload);
148
+ if (payload.cancel) return;
149
+
150
+ KTDropdown.hide(this._element);
151
+
152
+ let zIndex: number = parseInt(this._getOption('zindex') as string);
153
+ const parentZindex: number = KTDom.getHighestZindex(this._element);
154
+
155
+ if (parentZindex !== null && parentZindex >= zIndex) {
156
+ zIndex = parentZindex + 1;
157
+ }
158
+ if (zIndex > 0) {
159
+ this._menuElement.style.zIndex = zIndex.toString();
160
+ }
161
+
162
+ this._menuElement.style.display = 'block';
163
+ this._menuElement.style.opacity = '0';
164
+ KTDom.reflow(this._menuElement);
165
+ this._menuElement.style.opacity = '1';
166
+
167
+ this._menuElement.classList.remove(
168
+ this._getOption('hiddenClass') as string,
169
+ );
170
+ this._toggleElement.classList.add('active');
171
+ this._menuElement.classList.add('open');
172
+ this._element.classList.add('open');
173
+
174
+ this._initPopper();
175
+
176
+ KTDom.transitionEnd(this._menuElement, () => {
177
+ this._isTransitioning = false;
178
+ this._isOpen = true;
179
+
180
+ this._fireEvent('shown');
181
+ this._dispatchEvent('shown');
182
+ });
183
+ }
184
+
185
+ protected _hide(): void {
186
+ if (!this._isOpen || this._isTransitioning) return;
187
+
188
+ const payload = { cancel: false };
189
+ this._fireEvent('hide', payload);
190
+ this._dispatchEvent('hide', payload);
191
+ if (payload.cancel) return;
192
+
193
+ this._menuElement.style.opacity = '1';
194
+ KTDom.reflow(this._menuElement);
195
+ this._menuElement.style.opacity = '0';
196
+ this._menuElement.classList.remove('open');
197
+ this._toggleElement.classList.remove('active');
198
+ this._element.classList.remove('open');
199
+
200
+ KTDom.transitionEnd(this._menuElement, () => {
201
+ this._isTransitioning = false;
202
+ this._isOpen = false;
203
+
204
+ this._menuElement.classList.add(this._getOption('hiddenClass') as string);
205
+ this._menuElement.style.display = '';
206
+ this._menuElement.style.zIndex = '';
207
+
208
+ this._destroyPopper();
209
+
210
+ this._fireEvent('hidden');
211
+ this._dispatchEvent('hidden');
212
+ });
213
+ }
214
+
215
+ protected _initPopper(): void {
216
+ const isRtl = KTDom.isRTL();
217
+ let reference: HTMLElement;
218
+ const attach = this._getOption('attach') as string;
219
+
220
+ if (attach) {
221
+ reference =
222
+ attach === 'parent'
223
+ ? (this._toggleElement.parentNode as HTMLElement)
224
+ : (document.querySelector(attach) as HTMLElement);
225
+ } else {
226
+ reference = this._toggleElement;
227
+ }
228
+
229
+ if (reference) {
230
+ const popper = createPopper(
231
+ reference as Element | VirtualElement,
232
+ this._menuElement,
233
+ this._getPopperConfig(),
234
+ );
235
+ KTData.set(this._element, 'popper', popper);
236
+ }
237
+ }
238
+
239
+ protected _destroyPopper(): void {
240
+ if (KTData.has(this._element, 'popper')) {
241
+ (KTData.get(this._element, 'popper') as PopperInstance).destroy();
242
+ KTData.remove(this._element, 'popper');
243
+ }
244
+ }
245
+
246
+ protected _isDropdownOpen(): boolean {
247
+ return (
248
+ this._element.classList.contains('open') &&
249
+ this._menuElement.classList.contains('open')
250
+ );
251
+ }
252
+
253
+ protected _getPopperConfig(): object {
254
+ const isRtl = KTDom.isRTL();
255
+ let placement = this._getOption('placement') as Placement;
256
+ if (isRtl && this._getOption('placementRtl')) {
257
+ placement = this._getOption('placementRtl') as Placement;
258
+ }
259
+
260
+ let offsetValue = this._getOption('offset');
261
+ if (isRtl && this._getOption('offsetRtl')) {
262
+ offsetValue = this._getOption('offsetRtl') as Placement;
263
+ }
264
+ const offset = offsetValue
265
+ ? offsetValue
266
+ .toString()
267
+ .split(',')
268
+ .map((value) => parseInt(value.trim(), 10))
269
+ : [0, 0];
270
+
271
+ const strategy =
272
+ this._getOption('overflow') === true ? 'absolute' : 'fixed';
273
+ const altAxis = this._getOption('flip') !== false;
274
+ return {
275
+ placement: placement,
276
+ strategy: strategy,
277
+ modifiers: [
278
+ {
279
+ name: 'offset',
280
+ options: { offset: offset },
281
+ },
282
+ {
283
+ name: 'preventOverflow',
284
+ options: { altAxis: altAxis },
285
+ },
286
+ {
287
+ name: 'flip',
288
+ options: { flipVariations: false },
289
+ },
290
+ ],
291
+ };
292
+ }
293
+
294
+ protected _getToggleElement(): HTMLElement {
295
+ return this._toggleElement;
296
+ }
297
+
298
+ protected _getContentElement(): HTMLElement {
299
+ return this._menuElement;
300
+ }
301
+
302
+ // General Methods
303
+ public click(event: Event): void {
304
+ this._click(event);
305
+ }
306
+
307
+ public mouseover(event: MouseEvent): void {
308
+ this._mouseover(event);
309
+ }
310
+
311
+ public mouseout(event: MouseEvent): void {
312
+ this._mouseout(event);
313
+ }
314
+
315
+ public show(): void {
316
+ this._show();
317
+ }
318
+
319
+ public hide(): void {
320
+ this._hide();
321
+ }
322
+
323
+ public toggle(): void {
324
+ this._toggle();
325
+ }
326
+
327
+ public getToggleElement(): HTMLElement {
328
+ return this._toggleElement;
329
+ }
330
+
331
+ public getContentElement(): HTMLElement {
332
+ return this._menuElement;
333
+ }
334
+
335
+ public isPermanent(): boolean {
336
+ return this._getOption('permanent') as boolean;
337
+ }
338
+
339
+ public disable(): void {
340
+ this._disabled = true;
341
+ }
342
+
343
+ public enable(): void {
344
+ this._disabled = false;
345
+ }
346
+
347
+ public isOpen(): boolean {
348
+ return this._isDropdownOpen();
349
+ }
350
+
351
+ // Static Methods
352
+ public static getElement(reference: HTMLElement): HTMLElement {
353
+ if (reference && reference.hasAttribute('data-kt-dropdown-initialized'))
354
+ return reference;
355
+
356
+ const findElement =
357
+ reference &&
358
+ (reference.closest('[data-kt-dropdown-initialized]') as HTMLElement);
359
+ if (findElement) return findElement;
360
+
361
+ if (
362
+ reference &&
363
+ reference.hasAttribute('data-kt-dropdown-menu') &&
364
+ KTData.has(reference, 'dropdownElement')
365
+ ) {
366
+ return KTData.get(reference, 'dropdownElement') as HTMLElement;
367
+ }
368
+
369
+ return null;
370
+ }
371
+
372
+ public static getInstance(element: HTMLElement): KTDropdown {
373
+ element = this.getElement(element);
374
+
375
+ if (!element) return null;
376
+
377
+ if (KTData.has(element, 'dropdown')) {
378
+ return KTData.get(element, 'dropdown') as KTDropdown;
379
+ }
380
+
381
+ if (element.getAttribute('data-kt-dropdown-initialized') === 'true') {
382
+ return new KTDropdown(element);
383
+ }
384
+
385
+ return null;
386
+ }
387
+
388
+ public static getOrCreateInstance(
389
+ element: HTMLElement,
390
+ config?: KTDropdownConfigInterface,
391
+ ): KTDropdown {
392
+ return this.getInstance(element) || new KTDropdown(element, config);
393
+ }
394
+
395
+ public static update(): void {
396
+ document
397
+ .querySelectorAll('.open[data-kt-dropdown-initialized]')
398
+ .forEach((item) => {
399
+ if (KTData.has(item as HTMLElement, 'popper')) {
400
+ (
401
+ KTData.get(item as HTMLElement, 'popper') as PopperInstance
402
+ ).forceUpdate();
403
+ }
404
+ });
405
+ }
406
+
407
+ public static hide(skipElement?: HTMLElement): void {
408
+ document
409
+ .querySelectorAll(
410
+ '.open[data-kt-dropdown-initialized]:not([data-kt-dropdown-permanent="true"])',
411
+ )
412
+ .forEach((item) => {
413
+ if (skipElement && (skipElement === item || item.contains(skipElement)))
414
+ return;
415
+
416
+ const dropdown = KTDropdown.getInstance(item as HTMLElement);
417
+ if (dropdown) dropdown.hide();
418
+ });
419
+ }
420
+
421
+ public static handleClickAway(): void {
422
+ document.addEventListener('click', (event: Event) => {
423
+ document
424
+ .querySelectorAll(
425
+ '.open[data-kt-dropdown-initialized]:not([data-kt-dropdown-permanent="true"])',
426
+ )
427
+ .forEach((element) => {
428
+ const dropdown = KTDropdown.getInstance(element as HTMLElement);
429
+ if (!dropdown) return;
430
+
431
+ const contentElement = dropdown.getContentElement();
432
+ const toggleElement = dropdown.getToggleElement();
433
+
434
+ if (
435
+ toggleElement === event.target ||
436
+ toggleElement.contains(event.target as HTMLElement) ||
437
+ contentElement === event.target ||
438
+ contentElement.contains(event.target as HTMLElement)
439
+ ) {
440
+ return;
441
+ }
442
+
443
+ dropdown.hide();
444
+ });
445
+ });
446
+ }
447
+
448
+ public static handleKeyboard(): void {
449
+ document.addEventListener('keydown', (event: KeyboardEvent) => {
450
+ const dropdownEl = document.querySelector(
451
+ '.open[data-kt-dropdown-initialized]',
452
+ );
453
+ const dropdown = KTDropdown.getInstance(dropdownEl as HTMLElement);
454
+ if (!dropdown || !dropdown._getOption('keyboard')) return;
455
+
456
+ if (
457
+ event.key === 'Escape' &&
458
+ !(event.ctrlKey || event.altKey || event.shiftKey)
459
+ ) {
460
+ dropdown.hide();
461
+ }
462
+ });
463
+ }
464
+
465
+ public static handleMouseover(): void {
466
+ KTEventHandler.on(
467
+ document.body,
468
+ '[data-kt-dropdown-toggle], [data-kt-dropdown-menu]',
469
+ 'mouseover',
470
+ (event: Event, target: HTMLElement) => {
471
+ const dropdown = KTDropdown.getInstance(target);
472
+ if (dropdown && dropdown._getOption('trigger') === 'hover') {
473
+ dropdown.mouseover(event as MouseEvent);
474
+ }
475
+ },
476
+ );
477
+ }
478
+
479
+ public static handleMouseout(): void {
480
+ KTEventHandler.on(
481
+ document.body,
482
+ '[data-kt-dropdown-toggle], [data-kt-dropdown-menu]',
483
+ 'mouseout',
484
+ (event: Event, target: HTMLElement) => {
485
+ const dropdown = KTDropdown.getInstance(target);
486
+ if (dropdown && dropdown._getOption('trigger') === 'hover') {
487
+ dropdown.mouseout(event as MouseEvent);
488
+ }
489
+ },
490
+ );
491
+ }
492
+
493
+ public static handleClick(): void {
494
+ KTEventHandler.on(
495
+ document.body,
496
+ '[data-kt-dropdown-toggle]',
497
+ 'click',
498
+ (event: Event, target: HTMLElement) => {
499
+ const dropdown = KTDropdown.getInstance(target);
500
+ if (dropdown) {
501
+ dropdown.click(event);
502
+ }
503
+ },
504
+ );
505
+ }
506
+
507
+ public static handleDismiss(): void {
508
+ KTEventHandler.on(
509
+ document.body,
510
+ '[data-kt-dropdown-dismiss]',
511
+ 'click',
512
+ (event: Event, target: HTMLElement) => {
513
+ const dropdown = KTDropdown.getInstance(target);
514
+ if (dropdown) {
515
+ dropdown.hide();
516
+ }
517
+ },
518
+ );
519
+ }
520
+
521
+ public static initHandlers(): void {
522
+ this.handleClickAway();
523
+ this.handleKeyboard();
524
+ this.handleMouseover();
525
+ this.handleMouseout();
526
+ this.handleClick();
527
+ this.handleDismiss();
528
+ }
529
+
530
+ public static createInstances(): void {
531
+ const elements = document.querySelectorAll('[data-kt-dropdown]');
532
+ elements.forEach((element) => {
533
+ new KTDropdown(element as HTMLElement);
534
+ });
535
+ }
536
+
537
+ public static init(): void {
538
+ KTDropdown.createInstances();
539
+
540
+ if (window.KT_DROPDOWN_INITIALIZED !== true) {
541
+ KTDropdown.initHandlers();
542
+ window.KT_DROPDOWN_INITIALIZED = true;
543
+ }
544
+ }
545
+ }
546
+
547
+ if (typeof window !== 'undefined') {
548
+ window.KTDropdown = KTDropdown;
549
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export { KTDropdown } from './dropdown';
7
+ export type { KTDropdownConfigInterface, KTDropdownInterface } from './types';
@@ -0,0 +1,28 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export declare type KTDropdownTriggerType = 'hover' | 'click';
7
+
8
+ export interface KTDropdownConfigInterface {
9
+ zindex: number;
10
+ hoverTimeout: number;
11
+ keyboard: true;
12
+ permanent: boolean;
13
+ dismiss: boolean;
14
+ placement: string;
15
+ placementRtl: string;
16
+ attach: string;
17
+ offset: string;
18
+ offsetRtl: string;
19
+ trigger: KTDropdownTriggerType;
20
+ hiddenClass: string;
21
+ }
22
+
23
+ export interface KTDropdownInterface {
24
+ disable(): void;
25
+ enable(): void;
26
+ show(): void;
27
+ hide(): void;
28
+ }