@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,132 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ /* eslint-disable guard-for-in */
7
+ /* eslint-disable max-len */
8
+ /* eslint-disable require-jsdoc */
9
+
10
+ declare global {
11
+ interface Window {
12
+ KTGlobalComponentsConfig: object;
13
+ }
14
+ }
15
+
16
+ import KTData from '../helpers/data';
17
+ import KTDom from '../helpers/dom';
18
+ import KTUtils from '../helpers/utils';
19
+ import { KTOptionType } from '../types';
20
+
21
+ export default class KTComponent {
22
+ protected _dataOptionPrefix: string = 'kt-';
23
+ protected _name: string;
24
+ protected _defaultConfig: object;
25
+ protected _config: object;
26
+ protected _events: Map<string, Map<string, CallableFunction>>;
27
+ protected _uid: string | null = null;
28
+ protected _element: HTMLElement | null = null;
29
+
30
+ protected _init(element: HTMLElement | null) {
31
+ element = KTDom.getElement(element);
32
+
33
+ if (!element) {
34
+ return;
35
+ }
36
+
37
+ this._element = element;
38
+ this._events = new Map();
39
+ this._uid = KTUtils.geUID(this._name);
40
+
41
+ this._element.setAttribute(`data-kt-${this._name}-initialized`, 'true');
42
+
43
+ KTData.set(this._element, this._name, this);
44
+ }
45
+
46
+ protected _fireEvent(eventType: string, payload: object = null): void {
47
+ this._events.get(eventType)?.forEach((callable) => {
48
+ callable(payload);
49
+ });
50
+ }
51
+
52
+ protected _dispatchEvent(eventType: string, payload: object = null): void {
53
+ const event = new CustomEvent(eventType, {
54
+ detail: { payload },
55
+ bubbles: true,
56
+ cancelable: true,
57
+ composed: false,
58
+ });
59
+
60
+ if (!this._element) return;
61
+ this._element.dispatchEvent(event);
62
+ }
63
+
64
+ protected _getOption(name: string): KTOptionType {
65
+ const value = this._config[name as keyof object];
66
+ const reponsiveValue = KTDom.getCssProp(
67
+ this._element,
68
+ `--kt-${this._name}-${KTUtils.camelReverseCase(name)}`,
69
+ );
70
+
71
+ return reponsiveValue || value;
72
+ }
73
+
74
+ protected _getGlobalConfig(): object {
75
+ if (
76
+ window.KTGlobalComponentsConfig &&
77
+ (window.KTGlobalComponentsConfig as object)[this._name as keyof object]
78
+ ) {
79
+ return (window.KTGlobalComponentsConfig as object)[
80
+ this._name as keyof object
81
+ ] as object;
82
+ } else {
83
+ return {};
84
+ }
85
+ }
86
+
87
+ protected _buildConfig(config: object = {}): void {
88
+ if (!this._element) return;
89
+
90
+ this._config = {
91
+ ...this._defaultConfig,
92
+ ...this._getGlobalConfig(),
93
+ ...KTDom.getDataAttributes(
94
+ this._element,
95
+ this._dataOptionPrefix + this._name,
96
+ ),
97
+ ...config,
98
+ };
99
+ }
100
+
101
+ public dispose(): void {
102
+ if (!this._element) return;
103
+
104
+ this._element.removeAttribute(`data-kt-${this._name}-initialized`);
105
+ KTData.remove(this._element, this._name);
106
+ }
107
+
108
+ public on(eventType: string, callback: CallableFunction): string {
109
+ const eventId = KTUtils.geUID();
110
+
111
+ if (!this._events.get(eventType)) {
112
+ this._events.set(eventType, new Map());
113
+ }
114
+
115
+ this._events.get(eventType).set(eventId, callback);
116
+
117
+ return eventId;
118
+ }
119
+
120
+ public off(eventType: string, eventId: string): void {
121
+ this._events.get(eventType)?.delete(eventId);
122
+ }
123
+
124
+ public getOption(name: string): KTOptionType {
125
+ return this._getOption(name as keyof object);
126
+ }
127
+
128
+ public getElement(): HTMLElement {
129
+ if (!this._element) return null;
130
+ return this._element;
131
+ }
132
+ }
@@ -0,0 +1,16 @@
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 const KT_ACCESSIBILITY_KEYS = [
7
+ 'ArrowUp',
8
+ 'ArrowLeft',
9
+ 'ArrowDown',
10
+ 'ArrowRight',
11
+ 'Home',
12
+ 'End',
13
+ 'Escape',
14
+ 'Enter',
15
+ 'Tab',
16
+ ];
@@ -0,0 +1,236 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ // Checkbox logic for KTDataTable
7
+
8
+ import {
9
+ KTDataTableConfigInterface,
10
+ KTDataTableCheckChangePayloadInterface,
11
+ } from './types';
12
+ import KTEventHandler from '../../helpers/event-handler';
13
+
14
+ export interface KTDataTableCheckboxAPI {
15
+ init(): void;
16
+ check(): void;
17
+ uncheck(): void;
18
+ toggle(): void;
19
+ isChecked(): boolean;
20
+ getChecked(): string[];
21
+ updateState(): void;
22
+ }
23
+
24
+ // Main function to create checkbox logic for a datatable instance
25
+ export function createCheckboxHandler(
26
+ element: HTMLElement,
27
+ config: KTDataTableConfigInterface,
28
+ fireEvent: (eventName: string, eventData?: any) => void,
29
+ ): KTDataTableCheckboxAPI {
30
+ let headerChecked = false;
31
+ let headerCheckElement: HTMLInputElement | null = null;
32
+ let targetElements: NodeListOf<HTMLInputElement> = null;
33
+
34
+ // Default: preserve selection across all pages
35
+ const preserveSelection = config.checkbox?.preserveSelection !== false;
36
+
37
+ // Helper: get selectedRows from state, always as string[]
38
+ function getSelectedRows(): string[] {
39
+ if (!config._state) config._state = {} as any;
40
+ if (!Array.isArray(config._state.selectedRows))
41
+ config._state.selectedRows = [];
42
+ return config._state.selectedRows.map(String);
43
+ }
44
+
45
+ // Helper: set selectedRows in state
46
+ function setSelectedRows(rows: string[]) {
47
+ if (!config._state) config._state = {} as any;
48
+ config._state.selectedRows = Array.from(new Set(rows.map(String)));
49
+ }
50
+
51
+ // Helper: get all visible row IDs (values)
52
+ function getVisibleRowIds(): string[] {
53
+ if (!targetElements) return [];
54
+ return Array.from(targetElements)
55
+ .map((el) => el.value)
56
+ .filter((v) => v != null && v !== '');
57
+ }
58
+
59
+ // Listener for header checkbox
60
+ const checkboxListener = (event: MouseEvent) => {
61
+ checkboxToggle(event);
62
+ };
63
+
64
+ function init() {
65
+ headerCheckElement = element.querySelector<HTMLInputElement>(
66
+ config.attributes.check,
67
+ );
68
+ if (!headerCheckElement) return;
69
+ headerChecked = headerCheckElement.checked;
70
+ targetElements = element.querySelectorAll(
71
+ config.attributes.checkbox,
72
+ ) as NodeListOf<HTMLInputElement>;
73
+ checkboxHandler();
74
+ reapplyCheckedStates();
75
+ updateHeaderCheckboxState();
76
+ }
77
+
78
+ function checkboxHandler() {
79
+ if (!headerCheckElement) return;
80
+ headerCheckElement.addEventListener('click', checkboxListener);
81
+ KTEventHandler.on(
82
+ document.body,
83
+ config.attributes.checkbox,
84
+ 'input',
85
+ (event: Event) => {
86
+ handleRowCheckboxChange(event as InputEvent);
87
+ },
88
+ );
89
+ }
90
+
91
+ // When a row checkbox is changed
92
+ function handleRowCheckboxChange(event: Event) {
93
+ const input = event.target as HTMLInputElement;
94
+ if (!input) return;
95
+ const value = input.value;
96
+ let selectedRows = getSelectedRows();
97
+ if (input.checked) {
98
+ if (!selectedRows.includes(value)) selectedRows.push(value);
99
+ } else {
100
+ selectedRows = selectedRows.filter((v) => v !== value);
101
+ }
102
+ setSelectedRows(selectedRows);
103
+ updateHeaderCheckboxState();
104
+ fireEvent('changed');
105
+ }
106
+
107
+ // When the header checkbox is toggled
108
+ function checkboxToggle(event?: Event) {
109
+ const checked = !isChecked();
110
+ const eventType = checked ? 'checked' : 'unchecked';
111
+ fireEvent(eventType);
112
+ change(checked);
113
+ }
114
+
115
+ // Change all visible checkboxes and update selectedRows
116
+ function change(checked: boolean) {
117
+ const payload: KTDataTableCheckChangePayloadInterface = { cancel: false };
118
+ fireEvent('change', payload);
119
+ if (payload.cancel === true) return;
120
+ headerChecked = checked;
121
+ if (headerCheckElement) headerCheckElement.checked = checked;
122
+ if (targetElements) {
123
+ const visibleIds = getVisibleRowIds();
124
+ let selectedRows = getSelectedRows();
125
+ if (checked) {
126
+ // Add all visible IDs to selectedRows
127
+ selectedRows = preserveSelection
128
+ ? Array.from(new Set([...selectedRows, ...visibleIds]))
129
+ : visibleIds;
130
+ } else {
131
+ // Remove all visible IDs from selectedRows
132
+ selectedRows = preserveSelection
133
+ ? selectedRows.filter((v) => !visibleIds.includes(v))
134
+ : [];
135
+ }
136
+ setSelectedRows(selectedRows);
137
+ // Update visible checkboxes
138
+ targetElements.forEach((element: HTMLInputElement) => {
139
+ if (element) {
140
+ element.checked = checked;
141
+ }
142
+ });
143
+ }
144
+ updateHeaderCheckboxState();
145
+ fireEvent('changed');
146
+ }
147
+
148
+ // Reapply checked state to visible checkboxes based on selectedRows
149
+ function reapplyCheckedStates() {
150
+ const selectedRows = getSelectedRows();
151
+ if (!targetElements) return;
152
+ targetElements.forEach((element: HTMLInputElement) => {
153
+ if (!element) return;
154
+ const value = element.value;
155
+ element.checked = selectedRows.includes(value);
156
+ // Update row class
157
+ const row = element.closest('tr');
158
+ if (row && config.checkbox?.checkedClass) {
159
+ if (element.checked) {
160
+ row.classList.add(config.checkbox.checkedClass);
161
+ } else {
162
+ row.classList.remove(config.checkbox.checkedClass);
163
+ }
164
+ }
165
+ });
166
+ }
167
+
168
+ // Update header checkbox state (checked/indeterminate/unchecked)
169
+ function updateHeaderCheckboxState() {
170
+ if (!headerCheckElement || !targetElements) return;
171
+ const total = targetElements.length;
172
+ let checked = 0;
173
+ for (let i = 0; i < total; i++) {
174
+ if (targetElements[i].checked) checked++;
175
+ }
176
+ if (checked === 0) {
177
+ headerCheckElement.indeterminate = false;
178
+ headerCheckElement.checked = false;
179
+ headerChecked = false;
180
+ } else if (checked > 0 && checked < total) {
181
+ headerCheckElement.indeterminate = true;
182
+ headerCheckElement.checked = false;
183
+ headerChecked = false;
184
+ } else if (checked === total) {
185
+ headerCheckElement.indeterminate = false;
186
+ headerCheckElement.checked = true;
187
+ headerChecked = true;
188
+ }
189
+ }
190
+
191
+ // Fix: isChecked() implementation
192
+ function isChecked(): boolean {
193
+ return headerChecked;
194
+ }
195
+
196
+ function getChecked(): string[] {
197
+ return getSelectedRows();
198
+ }
199
+
200
+ function check() {
201
+ change(true);
202
+ reapplyCheckedStates();
203
+ updateHeaderCheckboxState();
204
+ }
205
+
206
+ function uncheck() {
207
+ change(false);
208
+ reapplyCheckedStates();
209
+ updateHeaderCheckboxState();
210
+ }
211
+
212
+ function toggle() {
213
+ checkboxToggle();
214
+ reapplyCheckedStates();
215
+ updateHeaderCheckboxState();
216
+ }
217
+
218
+ function updateState() {
219
+ // Called after redraw/pagination
220
+ targetElements = element.querySelectorAll(
221
+ config.attributes.checkbox,
222
+ ) as NodeListOf<HTMLInputElement>;
223
+ reapplyCheckedStates();
224
+ updateHeaderCheckboxState();
225
+ }
226
+
227
+ return {
228
+ init,
229
+ check,
230
+ uncheck,
231
+ toggle,
232
+ isChecked,
233
+ getChecked,
234
+ updateState,
235
+ };
236
+ }
@@ -0,0 +1,154 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ // Sorting logic for KTDataTable
7
+
8
+ import {
9
+ KTDataTableConfigInterface,
10
+ KTDataTableSortOrderInterface,
11
+ KTDataTableDataInterface,
12
+ } from './types';
13
+
14
+ export interface KTDataTableSortAPI<T = KTDataTableDataInterface> {
15
+ initSort(): void;
16
+ sortData(
17
+ data: T[],
18
+ sortField: keyof T | number,
19
+ sortOrder: KTDataTableSortOrderInterface,
20
+ ): T[];
21
+ toggleSortOrder(
22
+ currentField: keyof T | number,
23
+ currentOrder: KTDataTableSortOrderInterface,
24
+ newField: keyof T | number,
25
+ ): KTDataTableSortOrderInterface;
26
+ setSortIcon(
27
+ sortField: keyof T,
28
+ sortOrder: KTDataTableSortOrderInterface,
29
+ ): void;
30
+ }
31
+
32
+ export function createSortHandler<T = KTDataTableDataInterface>(
33
+ config: KTDataTableConfigInterface,
34
+ theadElement: HTMLTableSectionElement,
35
+ getState: () => {
36
+ sortField: keyof T | number;
37
+ sortOrder: KTDataTableSortOrderInterface;
38
+ },
39
+ setState: (
40
+ field: keyof T | number,
41
+ order: KTDataTableSortOrderInterface,
42
+ ) => void,
43
+ fireEvent: (eventName: string, eventData?: any) => void,
44
+ dispatchEvent: (eventName: string, eventData?: any) => void,
45
+ updateData: () => void,
46
+ ): KTDataTableSortAPI<T> {
47
+ // Helper to compare values for sorting
48
+ function compareValues(
49
+ a: unknown,
50
+ b: unknown,
51
+ sortOrder: KTDataTableSortOrderInterface,
52
+ ): number {
53
+ const aText = String(a).replace(/<[^>]*>|&nbsp;/g, '');
54
+ const bText = String(b).replace(/<[^>]*>|&nbsp;/g, '');
55
+ return aText > bText
56
+ ? sortOrder === 'asc'
57
+ ? 1
58
+ : -1
59
+ : aText < bText
60
+ ? sortOrder === 'asc'
61
+ ? -1
62
+ : 1
63
+ : 0;
64
+ }
65
+
66
+ function sortData(
67
+ data: T[],
68
+ sortField: keyof T | number,
69
+ sortOrder: KTDataTableSortOrderInterface,
70
+ ): T[] {
71
+ return data.sort((a, b) => {
72
+ const aValue = a[sortField as keyof T] as unknown;
73
+ const bValue = b[sortField as keyof T] as unknown;
74
+ return compareValues(aValue, bValue, sortOrder);
75
+ });
76
+ }
77
+
78
+ function toggleSortOrder(
79
+ currentField: keyof T | number,
80
+ currentOrder: KTDataTableSortOrderInterface,
81
+ newField: keyof T | number,
82
+ ): KTDataTableSortOrderInterface {
83
+ if (currentField === newField) {
84
+ switch (currentOrder) {
85
+ case 'asc':
86
+ return 'desc';
87
+ case 'desc':
88
+ return '';
89
+ default:
90
+ return 'asc';
91
+ }
92
+ }
93
+ return 'asc';
94
+ }
95
+
96
+ function setSortIcon(
97
+ sortField: keyof T,
98
+ sortOrder: KTDataTableSortOrderInterface,
99
+ ): void {
100
+ const sortClass = sortOrder
101
+ ? sortOrder === 'asc'
102
+ ? config.sort?.classes?.asc || ''
103
+ : config.sort?.classes?.desc || ''
104
+ : '';
105
+ const th =
106
+ typeof sortField === 'number'
107
+ ? theadElement.querySelectorAll('th')[sortField]
108
+ : (theadElement.querySelector(
109
+ `th[data-kt-datatable-column="${String(sortField)}"], th[data-kt-datatable-column-sort="${String(sortField)}"]`,
110
+ ) as HTMLElement);
111
+ if (th) {
112
+ const sortElement = th.querySelector(
113
+ `.${config.sort?.classes?.base}`,
114
+ ) as HTMLElement;
115
+ if (sortElement) {
116
+ sortElement.className =
117
+ `${config.sort?.classes?.base} ${sortClass}`.trim();
118
+ }
119
+ }
120
+ }
121
+
122
+ function initSort(): void {
123
+ if (!theadElement) return;
124
+ // Set the initial sort icon
125
+ setSortIcon(getState().sortField as keyof T, getState().sortOrder);
126
+ // Get all the table headers
127
+ const headers = Array.from(theadElement.querySelectorAll('th'));
128
+ headers.forEach((header) => {
129
+ // If the sort class is not found, it's not a sortable column
130
+ if (!header.querySelector(`.${config.sort?.classes?.base}`)) return;
131
+ const sortAttribute =
132
+ header.getAttribute('data-kt-datatable-column-sort') ||
133
+ header.getAttribute('data-kt-datatable-column');
134
+ const sortField = sortAttribute
135
+ ? (sortAttribute as keyof T)
136
+ : (header.cellIndex as keyof T);
137
+ header.addEventListener('click', () => {
138
+ const state = getState();
139
+ const sortOrder = toggleSortOrder(
140
+ state.sortField,
141
+ state.sortOrder,
142
+ sortField,
143
+ );
144
+ setSortIcon(sortField, sortOrder);
145
+ setState(sortField, sortOrder);
146
+ fireEvent('sort', { field: sortField, order: sortOrder });
147
+ dispatchEvent('sort', { field: sortField, order: sortOrder });
148
+ updateData();
149
+ });
150
+ });
151
+ }
152
+
153
+ return { initSort, sortData, toggleSortOrder, setSortIcon };
154
+ }
@@ -0,0 +1,110 @@
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-datatable-toolbar {
8
+ @apply py-3 px-4 flex justify-center sm:justify-between flex-col sm:flex-row gap-3 text-muted-foreground text-sm font-medium border-t border-border;
9
+ }
10
+
11
+ .kt-datatable-pagination {
12
+ @apply flex items-center gap-1;
13
+
14
+ .kt-datatable-pagination-button {
15
+ @apply cursor-pointer bg-transparent inline-flex h-7 min-w-7 px-0.5 rounded-md items-center justify-center text-muted-foreground;
16
+
17
+ &.active,
18
+ &:hover:not(:disabled) {
19
+ @apply bg-accent text-accent-foreground;
20
+ }
21
+
22
+ &.kt-datatable-pagination-prev {
23
+ @apply text-foreground;
24
+ }
25
+
26
+ &.kt-datatable-pagination-next {
27
+ @apply text-foreground;
28
+ }
29
+
30
+ &.kt-datatable-pagination-more {
31
+ }
32
+
33
+ &:disabled {
34
+ @apply text-muted-foreground cursor-default;
35
+ }
36
+ }
37
+ }
38
+
39
+ .kt-datatable-length {
40
+ @apply flex items-center gap-2 whitespace-nowrap;
41
+ }
42
+
43
+ .kt-datatable-info {
44
+ @apply flex items-center gap-4;
45
+ }
46
+
47
+ .kt-datatable-loading {
48
+ @apply flex items-center gap-2 px-4 py-2 font-medium leading-none text-sm border border-border rounded-md bg-card text-card-foreground shadow-xs shadow-[rgba(0,0,0,0.05)];
49
+ }
50
+
51
+ /* Overlay styles */
52
+ .kt-datatable-overlay {
53
+ position: absolute;
54
+ top: 0;
55
+ left: 0;
56
+ width: 100%;
57
+ height: 100%;
58
+ background-color: rgba(255, 255, 255, 0.7);
59
+ display: flex;
60
+ align-items: center;
61
+ justify-content: center;
62
+ z-index: 10;
63
+ }
64
+
65
+ /* Ensure proper positioning for the table container */
66
+ [data-kt-datatable] {
67
+ position: relative;
68
+ }
69
+
70
+ /* Style when table is loading */
71
+ [data-kt-datatable].loading table {
72
+ opacity: 0.6;
73
+ }
74
+ }
75
+
76
+ @custom-variant kt-datatable-loading {
77
+ &.[data-kt-datatable].loading {
78
+ @slot;
79
+ }
80
+ [data-kt-datatable].loading & {
81
+ @slot;
82
+ }
83
+ }
84
+
85
+ @custom-variant kt-datatable-initialized {
86
+ &.[data-kt-datatable].initialized {
87
+ @slot;
88
+ }
89
+ [data-kt-datatable].initialized & {
90
+ @slot;
91
+ }
92
+ }
93
+
94
+ @custom-variant kt-datatable-sort-asc {
95
+ &.[data-kt-datatable-column-sort='asc']:where([data-kt-datatable] *) {
96
+ @slot;
97
+ }
98
+ [data-kt-datatable] [data-kt-datatable-column-sort='asc'] & {
99
+ @slot;
100
+ }
101
+ }
102
+
103
+ @custom-variant kt-datatable-sort-desc {
104
+ &.[data-kt-datatable-column-sort='desc']:where([data-kt-datatable] *) {
105
+ @slot;
106
+ }
107
+ [data-kt-datatable] [data-kt-datatable-column-sort='desc'] & {
108
+ @slot;
109
+ }
110
+ }