@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,152 @@
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 KTData from '../../helpers/data';
7
+ import KTDom from '../../helpers/dom';
8
+ import KTComponent from '../component';
9
+ import { KTDismissInterface, KTDismissConfigInterface } from './types';
10
+ import { KTDismissModeType } from './types';
11
+
12
+ declare global {
13
+ interface Window {
14
+ KT_DISMISS_INITIALIZED: boolean;
15
+ KTDismiss: typeof KTDismiss;
16
+ }
17
+ }
18
+
19
+ export class KTDismiss extends KTComponent implements KTDismissInterface {
20
+ protected override _name: string = 'dismiss';
21
+ protected override _defaultConfig: KTDismissConfigInterface = {
22
+ hiddenClass: 'hidden',
23
+ mode: 'remove',
24
+ interrupt: true,
25
+ target: '',
26
+ };
27
+ protected override _config: KTDismissConfigInterface = this._defaultConfig;
28
+ protected _isAnimating: boolean = false;
29
+ protected _targetElement: HTMLElement | null = null;
30
+
31
+ constructor(element: HTMLElement, config?: KTDismissConfigInterface) {
32
+ super();
33
+
34
+ if (KTData.has(element as HTMLElement, this._name)) return;
35
+
36
+ this._init(element);
37
+ this._buildConfig(config);
38
+
39
+ this._config['mode'] = this._config['mode'] as KTDismissModeType;
40
+
41
+ if (!this._element) return;
42
+
43
+ this._targetElement = this._getTargetElement();
44
+ if (!this._targetElement) {
45
+ return;
46
+ }
47
+
48
+ this._handlers();
49
+ }
50
+
51
+ private _getTargetElement(): HTMLElement | null {
52
+ return (
53
+ KTDom.getElement(
54
+ this._element.getAttribute('data-kt-dismiss') as string,
55
+ ) || KTDom.getElement(this._getOption('target') as string)
56
+ );
57
+ }
58
+
59
+ protected _handlers(): void {
60
+ if (!this._element) return;
61
+
62
+ this._element.addEventListener('click', (event: Event) => {
63
+ event.preventDefault();
64
+
65
+ if ((this._getOption('interrupt') as boolean) === true) {
66
+ event.stopPropagation();
67
+ }
68
+
69
+ this._dismiss();
70
+ });
71
+ }
72
+
73
+ protected _dismiss(): void {
74
+ if (this._isAnimating) {
75
+ return;
76
+ }
77
+
78
+ const payload = { cancel: false };
79
+ this._fireEvent('dismiss', payload);
80
+ this._dispatchEvent('dismiss', payload);
81
+ if (payload.cancel === true) {
82
+ return;
83
+ }
84
+
85
+ if (!this._targetElement) return;
86
+ this._targetElement.style.opacity = '0';
87
+ KTDom.reflow(this._targetElement);
88
+ this._isAnimating = true;
89
+
90
+ KTDom.transitionEnd(this._targetElement, () => {
91
+ if (!this._targetElement) return;
92
+ this._isAnimating = false;
93
+ this._targetElement.style.opacity = '';
94
+
95
+ if (this._getOption('mode').toString().toLowerCase() === 'hide') {
96
+ this._targetElement.classList.add(
97
+ this._getOption('hiddenClass') as string,
98
+ );
99
+ } else {
100
+ KTDom.remove(this._targetElement);
101
+ }
102
+
103
+ this._fireEvent('dismissed');
104
+ this._dispatchEvent('dismissed');
105
+ });
106
+ }
107
+
108
+ public getTargetElement(): HTMLElement {
109
+ return this._targetElement;
110
+ }
111
+
112
+ public dismiss(): void {
113
+ this._dismiss();
114
+ }
115
+
116
+ public static getInstance(element: HTMLElement): KTDismiss {
117
+ if (!element) return null;
118
+
119
+ if (KTData.has(element, 'dismiss')) {
120
+ return KTData.get(element, 'dismiss') as KTDismiss;
121
+ }
122
+
123
+ if (element.getAttribute('data-kt-dismiss')) {
124
+ return new KTDismiss(element);
125
+ }
126
+
127
+ return null;
128
+ }
129
+
130
+ public static getOrCreateInstance(
131
+ element: HTMLElement,
132
+ config?: KTDismissConfigInterface,
133
+ ): KTDismiss {
134
+ return this.getInstance(element) || new KTDismiss(element, config);
135
+ }
136
+
137
+ public static createInstances(): void {
138
+ const elements = document.querySelectorAll('[data-kt-dismiss]');
139
+
140
+ elements.forEach((element) => {
141
+ new KTDismiss(element as HTMLElement);
142
+ });
143
+ }
144
+
145
+ public static init(): void {
146
+ KTDismiss.createInstances();
147
+ }
148
+ }
149
+
150
+ if (typeof window !== 'undefined') {
151
+ window.KTDismiss = KTDismiss;
152
+ }
@@ -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 { KTDismiss } from './dismiss';
7
+ export type { KTDismissConfigInterface, KTDismissInterface } from './types';
@@ -0,0 +1,17 @@
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 KTDismissModeType = 'remove' | 'hide';
7
+
8
+ export interface KTDismissConfigInterface {
9
+ hiddenClass: string;
10
+ target: string;
11
+ interrupt: boolean;
12
+ mode?: KTDismissModeType;
13
+ }
14
+
15
+ export interface KTDismissInterface {
16
+ dismiss(): void;
17
+ }
@@ -0,0 +1,97 @@
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-drawer {
8
+ @apply flex-col shadow-lg bg-popover text-popover-foreground outline-none fixed z-10 transition duration-300 ease-in-out inset-0;
9
+ }
10
+
11
+ .kt-drawer-backdrop {
12
+ @apply transition-all duration-300 fixed inset-0 bg-black/30 [backdrop-filter:blur(4px)];
13
+ }
14
+
15
+ .kt-drawer-header {
16
+ @apply flex items-center justify-between p-5 border-b border-border;
17
+ }
18
+
19
+ .kt-drawer-title {
20
+ @apply text-base font-semibold text-mono;
21
+ }
22
+
23
+ /* Alert Close */
24
+ .kt-drawer-close {
25
+ @apply shrink-0 size-6 cursor-pointer -me-2.5;
26
+
27
+ i {
28
+ @apply opacity-70 text-xs;
29
+ }
30
+
31
+ > svg {
32
+ @apply size-3.5 opacity-70;
33
+ }
34
+
35
+ &:focus,
36
+ &:hover {
37
+ i {
38
+ @apply opacity-100;
39
+ }
40
+
41
+ > svg {
42
+ @apply opacity-100;
43
+ }
44
+ }
45
+ }
46
+
47
+ .kt-drawer-content {
48
+ @apply overflow-y-auto grow p-5;
49
+ }
50
+
51
+ .kt-drawer-footer {
52
+ @apply flex items-center justify-between p-5 border-t border-border;
53
+ }
54
+
55
+ /* Open Positions */
56
+ .kt-drawer-start {
57
+ @apply max-w-[90%] -translate-x-full kt-drawer-open:translate-x-0 end-auto;
58
+ }
59
+
60
+ .kt-drawer-end {
61
+ @apply max-w-[90%] translate-x-full kt-drawer-open:translate-x-0 start-auto;
62
+ }
63
+
64
+ .kt-drawer-top {
65
+ @apply max-h-[90%] translate-y-full kt-drawer-open:translate-y-0 start-0 end-0 bottom-0 top-auto;
66
+ }
67
+
68
+ .kt-drawer-bottom {
69
+ @apply max-h-[90%] -translate-y-full kt-drawer-open:translate-y-0 start-0 end-0 top-0 bottom-auto;
70
+ }
71
+
72
+ /* Open State */
73
+ .kt-drawer.open .kt-drawer-start {
74
+ @apply translate-x-0;
75
+ }
76
+
77
+ .kt-drawer.open .kt-drawer-end {
78
+ @apply translate-x-0;
79
+ }
80
+
81
+ .kt-drawer.open .kt-drawer-top {
82
+ @apply translate-y-0;
83
+ }
84
+
85
+ .kt-drawer.open .kt-drawer-bottom {
86
+ @apply translate-y-0;
87
+ }
88
+ }
89
+
90
+ @custom-variant kt-drawer-open {
91
+ &[data-kt-drawer-initialized].open {
92
+ @slot;
93
+ }
94
+ [data-kt-drawer-initialized].open & {
95
+ @slot;
96
+ }
97
+ }
@@ -0,0 +1,437 @@
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 KTData from '../../helpers/data';
7
+ import KTDom from '../../helpers/dom';
8
+ import KTUtils from '../../helpers/utils';
9
+ import KTEventHandler from '../../helpers/event-handler';
10
+ import KTComponent from '../component';
11
+ import { KTDrawerInterface, KTDrawerConfigInterface } from './types';
12
+
13
+ declare global {
14
+ interface Window {
15
+ KT_DRAWER_INITIALIZED: boolean;
16
+ KTDrawer: typeof KTDrawer;
17
+ }
18
+ }
19
+
20
+ export class KTDrawer extends KTComponent implements KTDrawerInterface {
21
+ protected override _name: string = 'drawer';
22
+ protected override _defaultConfig: KTDrawerConfigInterface = {
23
+ zindex: '100',
24
+ enable: true,
25
+ class: '',
26
+ shownClass: 'flex',
27
+ hiddenClass: 'hidden',
28
+ backdrop: true,
29
+ backdropClass: 'kt-drawer-backdrop',
30
+ backdropStatic: false,
31
+ keyboard: true,
32
+ disableScroll: true,
33
+ persistent: false,
34
+ container: '',
35
+ focus: true,
36
+ };
37
+ protected override _config: KTDrawerConfigInterface = this._defaultConfig;
38
+ protected _isOpen: boolean = false;
39
+ protected _isTransitioning: boolean = false;
40
+ protected _backdropElement: HTMLElement | null = null;
41
+ protected _relatedTarget: HTMLElement | null = null;
42
+
43
+ constructor(element: HTMLElement, config?: KTDrawerConfigInterface) {
44
+ super();
45
+
46
+ if (KTData.has(element as HTMLElement, this._name)) return;
47
+
48
+ this._init(element);
49
+ this._buildConfig(config);
50
+ this._handleClose();
51
+ this._update();
52
+ this._handleContainer();
53
+ }
54
+
55
+ protected _handleClose(): void {
56
+ if (!this._element) return;
57
+ KTEventHandler.on(this._element, '[data-kt-drawer-hide]', 'click', () => {
58
+ this._hide();
59
+ });
60
+ }
61
+
62
+ protected _toggle(relatedTarget?: HTMLElement): void {
63
+ const payload = { cancel: false };
64
+ this._fireEvent('toggle', payload);
65
+ this._dispatchEvent('toggle', payload);
66
+ if (payload.cancel === true) {
67
+ return;
68
+ }
69
+
70
+ if (this._isOpen === true) {
71
+ this._hide();
72
+ } else {
73
+ this._show(relatedTarget);
74
+ }
75
+ }
76
+
77
+ protected _show(relatedTarget?: HTMLElement): void {
78
+ if (this._isOpen || this._isTransitioning) {
79
+ return;
80
+ }
81
+
82
+ const payload = { cancel: false };
83
+ this._fireEvent('show', payload);
84
+ this._dispatchEvent('show', payload);
85
+ if (payload.cancel === true) {
86
+ return;
87
+ }
88
+
89
+ KTDrawer.hide();
90
+
91
+ if (this._getOption('backdrop') === true) this._createBackdrop();
92
+
93
+ if (relatedTarget) this._relatedTarget = relatedTarget;
94
+
95
+ if (!this._element) return;
96
+ this._isTransitioning = true;
97
+ this._element.classList.remove(this._getOption('hiddenClass') as string);
98
+ this._element.classList.add(this._getOption('shownClass') as string);
99
+ this._element.setAttribute('role', 'dialog');
100
+ this._element.setAttribute('aria-modal', 'true');
101
+ this._element.setAttribute('tabindex', '-1');
102
+
103
+ const zindex: number = parseInt(this._getOption('zindex') as string);
104
+ if (zindex > 0) {
105
+ this._element.style.zIndex = `${zindex}`;
106
+ }
107
+
108
+ if (this._getOption('disableScroll')) {
109
+ document.body.style.overflow = 'hidden';
110
+ }
111
+
112
+ KTDom.reflow(this._element);
113
+ this._element.classList.add('open');
114
+
115
+ KTDom.transitionEnd(this._element, () => {
116
+ this._isTransitioning = false;
117
+ this._isOpen = true;
118
+
119
+ if (this._getOption('focus') === true) {
120
+ this._autoFocus();
121
+ }
122
+
123
+ this._fireEvent('shown');
124
+ this._dispatchEvent('shown');
125
+ });
126
+ }
127
+
128
+ protected _hide(): void {
129
+ if (!this._element) return;
130
+ if (this._isOpen === false || this._isTransitioning) {
131
+ return;
132
+ }
133
+
134
+ const payload = { cancel: false };
135
+ this._fireEvent('hide', payload);
136
+ this._dispatchEvent('hide', payload);
137
+ if (payload.cancel === true) {
138
+ return;
139
+ }
140
+
141
+ this._isTransitioning = true;
142
+ this._element.removeAttribute('role');
143
+ this._element.removeAttribute('aria-modal');
144
+ this._element.removeAttribute('tabindex');
145
+ if (this._getOption('disableScroll')) {
146
+ document.body.style.overflow = '';
147
+ }
148
+
149
+ KTDom.reflow(this._element);
150
+ this._element.classList.remove('open');
151
+
152
+ if (this._getOption('backdrop') === true) {
153
+ this._deleteBackdrop();
154
+ }
155
+
156
+ KTDom.transitionEnd(this._element, () => {
157
+ if (!this._element) return;
158
+
159
+ this._isTransitioning = false;
160
+ this._isOpen = false;
161
+ this._element.classList.add(this._getOption('hiddenClass') as string);
162
+ this._element.classList.remove(this._getOption('shownClass') as string);
163
+ this._element.style.zIndex = '';
164
+
165
+ this._fireEvent('hidden');
166
+ this._dispatchEvent('hidden');
167
+ });
168
+ }
169
+
170
+ protected _update(): void {
171
+ if ((this._getOption('class') as string)?.length > 0) {
172
+ if (this.isEnabled()) {
173
+ KTDom.addClass(this._element, this._getOption('class') as string);
174
+ } else {
175
+ KTDom.removeClass(this._element, this._getOption('class') as string);
176
+ }
177
+ }
178
+ }
179
+
180
+ protected _handleContainer(): void {
181
+ if (this._getOption('container')) {
182
+ if (this._getOption('container') === 'body') {
183
+ document.body.appendChild(this._element);
184
+ } else {
185
+ document
186
+ .querySelector(this._getOption('container') as string)
187
+ ?.appendChild(this._element);
188
+ }
189
+ }
190
+ }
191
+
192
+ protected _autoFocus(): void {
193
+ if (!this._element) return;
194
+ const input: HTMLInputElement | null = this._element.querySelector(
195
+ '[data-kt-drawer-focus]',
196
+ );
197
+ if (!input) return;
198
+ else input.focus();
199
+ }
200
+
201
+ protected _createBackdrop(): void {
202
+ if (!this._element) return;
203
+
204
+ const zindex: number = parseInt(this._getOption('zindex') as string);
205
+
206
+ this._backdropElement = document.createElement('DIV');
207
+ this._backdropElement.style.zIndex = (zindex - 1).toString();
208
+ this._backdropElement.setAttribute('data-kt-drawer-backdrop', 'true');
209
+ document.body.append(this._backdropElement);
210
+ KTDom.reflow(this._backdropElement);
211
+ KTDom.addClass(
212
+ this._backdropElement,
213
+ this._getOption('backdropClass') as string,
214
+ );
215
+
216
+ this._backdropElement.addEventListener('click', (event: Event) => {
217
+ event.preventDefault();
218
+ if (this._getOption('backdropStatic') === false) {
219
+ this._hide();
220
+ }
221
+ });
222
+ }
223
+
224
+ protected _deleteBackdrop(): void {
225
+ if (!this._backdropElement) return;
226
+
227
+ KTDom.reflow(this._backdropElement);
228
+ this._backdropElement.style.opacity = '0';
229
+
230
+ KTDom.transitionEnd(this._backdropElement, () => {
231
+ if (!this._backdropElement) return;
232
+ KTDom.remove(this._backdropElement);
233
+ });
234
+ }
235
+
236
+ protected _isEnabled(): boolean {
237
+ return KTUtils.stringToBoolean(this._getOption('enable'));
238
+ }
239
+
240
+ public toggle(): void {
241
+ return this._toggle();
242
+ }
243
+
244
+ public show(relatedTarget?: HTMLElement): void {
245
+ return this._show(relatedTarget);
246
+ }
247
+
248
+ public hide(): void {
249
+ return this._hide();
250
+ }
251
+
252
+ public update(): void {
253
+ return this._update();
254
+ }
255
+
256
+ public getRelatedTarget(): HTMLElement | null {
257
+ return this._relatedTarget;
258
+ }
259
+
260
+ public isOpen(): boolean {
261
+ return this._isOpen;
262
+ }
263
+
264
+ public isEnabled(): boolean {
265
+ return this._isEnabled();
266
+ }
267
+
268
+ public static getInstance(element: HTMLElement): KTDrawer {
269
+ if (!element) return null;
270
+
271
+ if (KTData.has(element, 'drawer')) {
272
+ return KTData.get(element, 'drawer') as KTDrawer;
273
+ }
274
+
275
+ if (element.getAttribute('data-kt-drawer-initialized') === 'true') {
276
+ return new KTDrawer(element);
277
+ }
278
+
279
+ return null;
280
+ }
281
+
282
+ public static getOrCreateInstance(
283
+ element: HTMLElement,
284
+ config?: KTDrawerConfigInterface,
285
+ ): KTDrawer {
286
+ return this.getInstance(element) || new KTDrawer(element, config);
287
+ }
288
+
289
+ public static hide(): void {
290
+ const elements = document.querySelectorAll('[data-kt-drawer-initialized]');
291
+
292
+ elements.forEach((element) => {
293
+ const drawer = KTDrawer.getInstance(element as HTMLElement);
294
+
295
+ if (drawer && drawer.isOpen()) {
296
+ drawer.hide();
297
+ }
298
+ });
299
+ }
300
+
301
+ public static handleResize(): void {
302
+ window.addEventListener('resize', () => {
303
+ let timer;
304
+
305
+ KTUtils.throttle(
306
+ timer,
307
+ () => {
308
+ document
309
+ .querySelectorAll('[data-kt-drawer-initialized]')
310
+ .forEach((element) => {
311
+ const drawer = KTDrawer.getInstance(element as HTMLElement);
312
+ drawer.update();
313
+
314
+ if (drawer && drawer.isOpen() && !drawer.isEnabled()) {
315
+ drawer.hide();
316
+ }
317
+ });
318
+ },
319
+ 200,
320
+ );
321
+ });
322
+ }
323
+
324
+ public static handleToggle(): void {
325
+ KTEventHandler.on(
326
+ document.body,
327
+ '[data-kt-drawer-toggle]',
328
+ 'click',
329
+ (event: Event, target: HTMLElement) => {
330
+ event.stopPropagation();
331
+
332
+ const selector = target.getAttribute('data-kt-drawer-toggle');
333
+ if (!selector) return;
334
+
335
+ const drawerEl = document.querySelector(selector);
336
+ const drawer = KTDrawer.getInstance(drawerEl as HTMLElement);
337
+ if (drawer) {
338
+ drawer.toggle();
339
+ }
340
+ },
341
+ );
342
+ }
343
+
344
+ public static handleDismiss(): void {
345
+ KTEventHandler.on(
346
+ document.body,
347
+ '[data-kt-drawer-dismiss]',
348
+ 'click',
349
+ (event: Event, target: HTMLElement) => {
350
+ event.stopPropagation();
351
+
352
+ const modalElement = target.closest(
353
+ '[data-kt-drawer="true"]',
354
+ ) as HTMLElement;
355
+ if (modalElement) {
356
+ const modal = KTDrawer.getInstance(modalElement);
357
+ if (modal) {
358
+ modal.hide();
359
+ }
360
+ }
361
+ },
362
+ );
363
+ }
364
+
365
+ public static handleClickAway() {
366
+ document.addEventListener('click', (event: Event) => {
367
+ const drawerEl = document.querySelector(
368
+ '.open[data-kt-drawer-initialized]',
369
+ );
370
+ if (!drawerEl) return;
371
+
372
+ const drawer = KTDrawer.getInstance(drawerEl as HTMLElement);
373
+ if (!drawer) return;
374
+
375
+ if (drawer.getOption('persistent')) return;
376
+
377
+ if (drawer.getOption('backdrop')) return;
378
+
379
+ if (
380
+ drawerEl !== event.target &&
381
+ drawer.getRelatedTarget() !== event.target &&
382
+ drawerEl.contains(event.target as HTMLElement) === false
383
+ ) {
384
+ drawer.hide();
385
+ }
386
+ });
387
+ }
388
+
389
+ public static handleKeyword() {
390
+ document.addEventListener('keydown', (event: KeyboardEvent) => {
391
+ const drawerEl = document.querySelector(
392
+ '.open[data-kt-drawer-initialized]',
393
+ );
394
+ const drawer = KTDrawer.getInstance(drawerEl as HTMLElement);
395
+ if (!drawer) {
396
+ return;
397
+ }
398
+
399
+ // if esc key was not pressed in combination with ctrl or alt or shift
400
+ if (
401
+ event.key === 'Escape' &&
402
+ !(event.ctrlKey || event.altKey || event.shiftKey)
403
+ ) {
404
+ drawer.hide();
405
+ }
406
+
407
+ if (event.code === 'Tab' && !event.metaKey) {
408
+ return;
409
+ }
410
+ });
411
+ }
412
+
413
+ public static createInstances(): void {
414
+ const elements = document.querySelectorAll('[data-kt-drawer]');
415
+
416
+ elements.forEach((element) => {
417
+ new KTDrawer(element as HTMLElement);
418
+ });
419
+ }
420
+
421
+ public static init(): void {
422
+ KTDrawer.createInstances();
423
+
424
+ if (window.KT_DRAWER_INITIALIZED !== true) {
425
+ KTDrawer.handleToggle();
426
+ KTDrawer.handleDismiss();
427
+ KTDrawer.handleResize();
428
+ KTDrawer.handleClickAway();
429
+ KTDrawer.handleKeyword();
430
+ window.KT_DRAWER_INITIALIZED = true;
431
+ }
432
+ }
433
+ }
434
+
435
+ if (typeof window !== 'undefined') {
436
+ window.KTDrawer = KTDrawer;
437
+ }
@@ -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 { KTDrawer } from './drawer';
7
+ export type { KTDrawerConfigInterface, KTDrawerInterface } from './types';