@keenthemes/ktui 1.2.0 → 1.2.2

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 (348) hide show
  1. package/dist/ktui.js +8355 -5213
  2. package/dist/ktui.min.js +1 -1
  3. package/dist/ktui.min.js.map +1 -1
  4. package/dist/styles.css +24 -1
  5. package/lib/cjs/components/carousel/carousel.d.ts +102 -0
  6. package/lib/cjs/components/carousel/carousel.d.ts.map +1 -0
  7. package/lib/cjs/components/carousel/carousel.js +769 -0
  8. package/lib/cjs/components/carousel/carousel.js.map +1 -0
  9. package/lib/cjs/components/carousel/index.d.ts +7 -0
  10. package/lib/cjs/components/carousel/index.d.ts.map +1 -0
  11. package/lib/cjs/components/carousel/index.js +10 -0
  12. package/lib/cjs/components/carousel/index.js.map +1 -0
  13. package/lib/cjs/components/carousel/types.d.ts +36 -0
  14. package/lib/cjs/components/carousel/types.d.ts.map +1 -0
  15. package/lib/cjs/components/carousel/types.js +7 -0
  16. package/lib/cjs/components/carousel/types.js.map +1 -0
  17. package/lib/cjs/components/clipboard/clipboard.d.ts +37 -0
  18. package/lib/cjs/components/clipboard/clipboard.d.ts.map +1 -0
  19. package/lib/cjs/components/clipboard/clipboard.js +402 -0
  20. package/lib/cjs/components/clipboard/clipboard.js.map +1 -0
  21. package/lib/cjs/components/clipboard/index.d.ts +3 -0
  22. package/lib/cjs/components/clipboard/index.d.ts.map +1 -0
  23. package/lib/cjs/components/clipboard/index.js +6 -0
  24. package/lib/cjs/components/clipboard/index.js.map +1 -0
  25. package/lib/cjs/components/clipboard/types.d.ts +44 -0
  26. package/lib/cjs/components/clipboard/types.d.ts.map +1 -0
  27. package/lib/cjs/components/clipboard/types.js +7 -0
  28. package/lib/cjs/components/clipboard/types.js.map +1 -0
  29. package/lib/cjs/components/component.d.ts +3 -3
  30. package/lib/cjs/components/component.d.ts.map +1 -1
  31. package/lib/cjs/components/component.js +9 -1
  32. package/lib/cjs/components/component.js.map +1 -1
  33. package/lib/cjs/components/datatable/datatable-checkbox.d.ts +1 -1
  34. package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -1
  35. package/lib/cjs/components/datatable/datatable-checkbox.js +1 -1
  36. package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -1
  37. package/lib/cjs/components/datatable/datatable-sort.d.ts +1 -1
  38. package/lib/cjs/components/datatable/datatable-sort.d.ts.map +1 -1
  39. package/lib/cjs/components/datatable/datatable-sort.js.map +1 -1
  40. package/lib/cjs/components/datatable/datatable.d.ts +2 -0
  41. package/lib/cjs/components/datatable/datatable.d.ts.map +1 -1
  42. package/lib/cjs/components/datatable/datatable.js +29 -16
  43. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  44. package/lib/cjs/components/datatable/types.d.ts +2 -1
  45. package/lib/cjs/components/datatable/types.d.ts.map +1 -1
  46. package/lib/cjs/components/drawer/drawer.d.ts.map +1 -1
  47. package/lib/cjs/components/drawer/drawer.js +3 -16
  48. package/lib/cjs/components/drawer/drawer.js.map +1 -1
  49. package/lib/cjs/components/dropdown/dropdown.d.ts +1 -1
  50. package/lib/cjs/components/dropdown/dropdown.d.ts.map +1 -1
  51. package/lib/cjs/components/dropdown/dropdown.js +2 -3
  52. package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
  53. package/lib/cjs/components/pin-input/index.d.ts +3 -0
  54. package/lib/cjs/components/pin-input/index.d.ts.map +1 -0
  55. package/lib/cjs/components/pin-input/index.js +6 -0
  56. package/lib/cjs/components/pin-input/index.js.map +1 -0
  57. package/lib/cjs/components/pin-input/pin-input.d.ts +56 -0
  58. package/lib/cjs/components/pin-input/pin-input.d.ts.map +1 -0
  59. package/lib/cjs/components/pin-input/pin-input.js +455 -0
  60. package/lib/cjs/components/pin-input/pin-input.js.map +1 -0
  61. package/lib/cjs/components/pin-input/types.d.ts +41 -0
  62. package/lib/cjs/components/pin-input/types.d.ts.map +1 -0
  63. package/lib/cjs/components/pin-input/types.js +6 -0
  64. package/lib/cjs/components/pin-input/types.js.map +1 -0
  65. package/lib/cjs/components/range-slider/index.d.ts +7 -0
  66. package/lib/cjs/components/range-slider/index.d.ts.map +1 -0
  67. package/lib/cjs/components/range-slider/index.js +10 -0
  68. package/lib/cjs/components/range-slider/index.js.map +1 -0
  69. package/lib/cjs/components/range-slider/range-slider.d.ts +42 -0
  70. package/lib/cjs/components/range-slider/range-slider.d.ts.map +1 -0
  71. package/lib/cjs/components/range-slider/range-slider.js +254 -0
  72. package/lib/cjs/components/range-slider/range-slider.js.map +1 -0
  73. package/lib/cjs/components/range-slider/types.d.ts +33 -0
  74. package/lib/cjs/components/range-slider/types.d.ts.map +1 -0
  75. package/lib/cjs/components/range-slider/types.js +7 -0
  76. package/lib/cjs/components/range-slider/types.js.map +1 -0
  77. package/lib/cjs/components/rating/rating.d.ts.map +1 -1
  78. package/lib/cjs/components/rating/rating.js +8 -3
  79. package/lib/cjs/components/rating/rating.js.map +1 -1
  80. package/lib/cjs/components/repeater/repeater.d.ts.map +1 -1
  81. package/lib/cjs/components/repeater/repeater.js +3 -2
  82. package/lib/cjs/components/repeater/repeater.js.map +1 -1
  83. package/lib/cjs/components/select/combobox.d.ts.map +1 -1
  84. package/lib/cjs/components/select/combobox.js +25 -15
  85. package/lib/cjs/components/select/combobox.js.map +1 -1
  86. package/lib/cjs/components/select/config.d.ts +2 -2
  87. package/lib/cjs/components/select/config.d.ts.map +1 -1
  88. package/lib/cjs/components/select/config.js +10 -9
  89. package/lib/cjs/components/select/config.js.map +1 -1
  90. package/lib/cjs/components/select/dropdown.js.map +1 -1
  91. package/lib/cjs/components/select/option.d.ts +2 -1
  92. package/lib/cjs/components/select/option.d.ts.map +1 -1
  93. package/lib/cjs/components/select/option.js +9 -3
  94. package/lib/cjs/components/select/option.js.map +1 -1
  95. package/lib/cjs/components/select/remote.d.ts +1 -0
  96. package/lib/cjs/components/select/remote.d.ts.map +1 -1
  97. package/lib/cjs/components/select/remote.js +21 -14
  98. package/lib/cjs/components/select/remote.js.map +1 -1
  99. package/lib/cjs/components/select/search.d.ts +1 -1
  100. package/lib/cjs/components/select/search.d.ts.map +1 -1
  101. package/lib/cjs/components/select/search.js +34 -25
  102. package/lib/cjs/components/select/search.js.map +1 -1
  103. package/lib/cjs/components/select/select.d.ts +5 -3
  104. package/lib/cjs/components/select/select.d.ts.map +1 -1
  105. package/lib/cjs/components/select/select.js +31 -31
  106. package/lib/cjs/components/select/select.js.map +1 -1
  107. package/lib/cjs/components/select/tags.d.ts.map +1 -1
  108. package/lib/cjs/components/select/tags.js +22 -13
  109. package/lib/cjs/components/select/tags.js.map +1 -1
  110. package/lib/cjs/components/select/templates.d.ts.map +1 -1
  111. package/lib/cjs/components/select/templates.js +4 -4
  112. package/lib/cjs/components/select/templates.js.map +1 -1
  113. package/lib/cjs/components/select/types.d.ts +1 -1
  114. package/lib/cjs/components/select/types.d.ts.map +1 -1
  115. package/lib/cjs/components/select/utils.d.ts +4 -4
  116. package/lib/cjs/components/select/utils.d.ts.map +1 -1
  117. package/lib/cjs/components/select/utils.js +5 -4
  118. package/lib/cjs/components/select/utils.js.map +1 -1
  119. package/lib/cjs/components/sticky/sticky.d.ts +1 -1
  120. package/lib/cjs/components/sticky/sticky.d.ts.map +1 -1
  121. package/lib/cjs/components/sticky/sticky.js +16 -14
  122. package/lib/cjs/components/sticky/sticky.js.map +1 -1
  123. package/lib/cjs/components/toast/toast.d.ts.map +1 -1
  124. package/lib/cjs/components/toast/toast.js +17 -9
  125. package/lib/cjs/components/toast/toast.js.map +1 -1
  126. package/lib/cjs/components/toast/types.d.ts +3 -0
  127. package/lib/cjs/components/toast/types.d.ts.map +1 -1
  128. package/lib/cjs/components/toggle-password/toggle-password.d.ts.map +1 -1
  129. package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -1
  130. package/lib/cjs/helpers/dom.d.ts +4 -4
  131. package/lib/cjs/helpers/dom.d.ts.map +1 -1
  132. package/lib/cjs/helpers/dom.js +8 -10
  133. package/lib/cjs/helpers/dom.js.map +1 -1
  134. package/lib/cjs/helpers/event-handler.d.ts +1 -1
  135. package/lib/cjs/helpers/event-handler.d.ts.map +1 -1
  136. package/lib/cjs/helpers/event-handler.js +3 -1
  137. package/lib/cjs/helpers/event-handler.js.map +1 -1
  138. package/lib/cjs/helpers/utils.d.ts +1 -1
  139. package/lib/cjs/helpers/utils.d.ts.map +1 -1
  140. package/lib/cjs/helpers/utils.js +4 -1
  141. package/lib/cjs/helpers/utils.js.map +1 -1
  142. package/lib/cjs/index.d.ts +16 -0
  143. package/lib/cjs/index.d.ts.map +1 -1
  144. package/lib/cjs/index.js +17 -1
  145. package/lib/cjs/index.js.map +1 -1
  146. package/lib/cjs/types.d.ts +1 -1
  147. package/lib/cjs/types.d.ts.map +1 -1
  148. package/lib/esm/components/carousel/carousel.d.ts +102 -0
  149. package/lib/esm/components/carousel/carousel.d.ts.map +1 -0
  150. package/lib/esm/components/carousel/carousel.js +766 -0
  151. package/lib/esm/components/carousel/carousel.js.map +1 -0
  152. package/lib/esm/components/carousel/index.d.ts +7 -0
  153. package/lib/esm/components/carousel/index.d.ts.map +1 -0
  154. package/lib/esm/components/carousel/index.js +6 -0
  155. package/lib/esm/components/carousel/index.js.map +1 -0
  156. package/lib/esm/components/carousel/types.d.ts +36 -0
  157. package/lib/esm/components/carousel/types.d.ts.map +1 -0
  158. package/lib/esm/components/carousel/types.js +6 -0
  159. package/lib/esm/components/carousel/types.js.map +1 -0
  160. package/lib/esm/components/clipboard/clipboard.d.ts +37 -0
  161. package/lib/esm/components/clipboard/clipboard.d.ts.map +1 -0
  162. package/lib/esm/components/clipboard/clipboard.js +399 -0
  163. package/lib/esm/components/clipboard/clipboard.js.map +1 -0
  164. package/lib/esm/components/clipboard/index.d.ts +3 -0
  165. package/lib/esm/components/clipboard/index.d.ts.map +1 -0
  166. package/lib/esm/components/clipboard/index.js +2 -0
  167. package/lib/esm/components/clipboard/index.js.map +1 -0
  168. package/lib/esm/components/clipboard/types.d.ts +44 -0
  169. package/lib/esm/components/clipboard/types.d.ts.map +1 -0
  170. package/lib/esm/components/clipboard/types.js +6 -0
  171. package/lib/esm/components/clipboard/types.js.map +1 -0
  172. package/lib/esm/components/component.d.ts +3 -3
  173. package/lib/esm/components/component.d.ts.map +1 -1
  174. package/lib/esm/components/component.js +9 -1
  175. package/lib/esm/components/component.js.map +1 -1
  176. package/lib/esm/components/datatable/datatable-checkbox.d.ts +1 -1
  177. package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -1
  178. package/lib/esm/components/datatable/datatable-checkbox.js +1 -1
  179. package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -1
  180. package/lib/esm/components/datatable/datatable-sort.d.ts +1 -1
  181. package/lib/esm/components/datatable/datatable-sort.d.ts.map +1 -1
  182. package/lib/esm/components/datatable/datatable-sort.js.map +1 -1
  183. package/lib/esm/components/datatable/datatable.d.ts +2 -0
  184. package/lib/esm/components/datatable/datatable.d.ts.map +1 -1
  185. package/lib/esm/components/datatable/datatable.js +29 -16
  186. package/lib/esm/components/datatable/datatable.js.map +1 -1
  187. package/lib/esm/components/datatable/types.d.ts +2 -1
  188. package/lib/esm/components/datatable/types.d.ts.map +1 -1
  189. package/lib/esm/components/drawer/drawer.d.ts.map +1 -1
  190. package/lib/esm/components/drawer/drawer.js +3 -16
  191. package/lib/esm/components/drawer/drawer.js.map +1 -1
  192. package/lib/esm/components/dropdown/dropdown.d.ts +1 -1
  193. package/lib/esm/components/dropdown/dropdown.d.ts.map +1 -1
  194. package/lib/esm/components/dropdown/dropdown.js +2 -3
  195. package/lib/esm/components/dropdown/dropdown.js.map +1 -1
  196. package/lib/esm/components/pin-input/index.d.ts +3 -0
  197. package/lib/esm/components/pin-input/index.d.ts.map +1 -0
  198. package/lib/esm/components/pin-input/index.js +2 -0
  199. package/lib/esm/components/pin-input/index.js.map +1 -0
  200. package/lib/esm/components/pin-input/pin-input.d.ts +56 -0
  201. package/lib/esm/components/pin-input/pin-input.d.ts.map +1 -0
  202. package/lib/esm/components/pin-input/pin-input.js +452 -0
  203. package/lib/esm/components/pin-input/pin-input.js.map +1 -0
  204. package/lib/esm/components/pin-input/types.d.ts +41 -0
  205. package/lib/esm/components/pin-input/types.d.ts.map +1 -0
  206. package/lib/esm/components/pin-input/types.js +5 -0
  207. package/lib/esm/components/pin-input/types.js.map +1 -0
  208. package/lib/esm/components/range-slider/index.d.ts +7 -0
  209. package/lib/esm/components/range-slider/index.d.ts.map +1 -0
  210. package/lib/esm/components/range-slider/index.js +6 -0
  211. package/lib/esm/components/range-slider/index.js.map +1 -0
  212. package/lib/esm/components/range-slider/range-slider.d.ts +42 -0
  213. package/lib/esm/components/range-slider/range-slider.d.ts.map +1 -0
  214. package/lib/esm/components/range-slider/range-slider.js +251 -0
  215. package/lib/esm/components/range-slider/range-slider.js.map +1 -0
  216. package/lib/esm/components/range-slider/types.d.ts +33 -0
  217. package/lib/esm/components/range-slider/types.d.ts.map +1 -0
  218. package/lib/esm/components/range-slider/types.js +6 -0
  219. package/lib/esm/components/range-slider/types.js.map +1 -0
  220. package/lib/esm/components/rating/rating.d.ts.map +1 -1
  221. package/lib/esm/components/rating/rating.js +8 -3
  222. package/lib/esm/components/rating/rating.js.map +1 -1
  223. package/lib/esm/components/repeater/repeater.d.ts.map +1 -1
  224. package/lib/esm/components/repeater/repeater.js +3 -2
  225. package/lib/esm/components/repeater/repeater.js.map +1 -1
  226. package/lib/esm/components/select/combobox.d.ts.map +1 -1
  227. package/lib/esm/components/select/combobox.js +25 -15
  228. package/lib/esm/components/select/combobox.js.map +1 -1
  229. package/lib/esm/components/select/config.d.ts +2 -2
  230. package/lib/esm/components/select/config.d.ts.map +1 -1
  231. package/lib/esm/components/select/config.js +10 -9
  232. package/lib/esm/components/select/config.js.map +1 -1
  233. package/lib/esm/components/select/dropdown.js.map +1 -1
  234. package/lib/esm/components/select/option.d.ts +2 -1
  235. package/lib/esm/components/select/option.d.ts.map +1 -1
  236. package/lib/esm/components/select/option.js +9 -3
  237. package/lib/esm/components/select/option.js.map +1 -1
  238. package/lib/esm/components/select/remote.d.ts +1 -0
  239. package/lib/esm/components/select/remote.d.ts.map +1 -1
  240. package/lib/esm/components/select/remote.js +21 -14
  241. package/lib/esm/components/select/remote.js.map +1 -1
  242. package/lib/esm/components/select/search.d.ts +1 -1
  243. package/lib/esm/components/select/search.d.ts.map +1 -1
  244. package/lib/esm/components/select/search.js +34 -25
  245. package/lib/esm/components/select/search.js.map +1 -1
  246. package/lib/esm/components/select/select.d.ts +5 -3
  247. package/lib/esm/components/select/select.d.ts.map +1 -1
  248. package/lib/esm/components/select/select.js +31 -31
  249. package/lib/esm/components/select/select.js.map +1 -1
  250. package/lib/esm/components/select/tags.d.ts.map +1 -1
  251. package/lib/esm/components/select/tags.js +22 -13
  252. package/lib/esm/components/select/tags.js.map +1 -1
  253. package/lib/esm/components/select/templates.d.ts.map +1 -1
  254. package/lib/esm/components/select/templates.js +4 -4
  255. package/lib/esm/components/select/templates.js.map +1 -1
  256. package/lib/esm/components/select/types.d.ts +1 -1
  257. package/lib/esm/components/select/types.d.ts.map +1 -1
  258. package/lib/esm/components/select/utils.d.ts +4 -4
  259. package/lib/esm/components/select/utils.d.ts.map +1 -1
  260. package/lib/esm/components/select/utils.js +5 -4
  261. package/lib/esm/components/select/utils.js.map +1 -1
  262. package/lib/esm/components/sticky/sticky.d.ts +1 -1
  263. package/lib/esm/components/sticky/sticky.d.ts.map +1 -1
  264. package/lib/esm/components/sticky/sticky.js +16 -14
  265. package/lib/esm/components/sticky/sticky.js.map +1 -1
  266. package/lib/esm/components/toast/toast.d.ts.map +1 -1
  267. package/lib/esm/components/toast/toast.js +17 -9
  268. package/lib/esm/components/toast/toast.js.map +1 -1
  269. package/lib/esm/components/toast/types.d.ts +3 -0
  270. package/lib/esm/components/toast/types.d.ts.map +1 -1
  271. package/lib/esm/components/toggle-password/toggle-password.d.ts.map +1 -1
  272. package/lib/esm/components/toggle-password/toggle-password.js.map +1 -1
  273. package/lib/esm/helpers/dom.d.ts +4 -4
  274. package/lib/esm/helpers/dom.d.ts.map +1 -1
  275. package/lib/esm/helpers/dom.js +8 -10
  276. package/lib/esm/helpers/dom.js.map +1 -1
  277. package/lib/esm/helpers/event-handler.d.ts +1 -1
  278. package/lib/esm/helpers/event-handler.d.ts.map +1 -1
  279. package/lib/esm/helpers/event-handler.js +3 -1
  280. package/lib/esm/helpers/event-handler.js.map +1 -1
  281. package/lib/esm/helpers/utils.d.ts +1 -1
  282. package/lib/esm/helpers/utils.d.ts.map +1 -1
  283. package/lib/esm/helpers/utils.js +4 -1
  284. package/lib/esm/helpers/utils.js.map +1 -1
  285. package/lib/esm/index.d.ts +16 -0
  286. package/lib/esm/index.d.ts.map +1 -1
  287. package/lib/esm/index.js +12 -0
  288. package/lib/esm/index.js.map +1 -1
  289. package/lib/esm/types.d.ts +1 -1
  290. package/lib/esm/types.d.ts.map +1 -1
  291. package/package.json +5 -3
  292. package/src/components/carousel/__tests__/carousel.test.ts +326 -0
  293. package/src/components/carousel/carousel.css +42 -0
  294. package/src/components/carousel/carousel.ts +847 -0
  295. package/src/components/carousel/index.ts +11 -0
  296. package/src/components/carousel/types.ts +38 -0
  297. package/src/components/clipboard/__tests__/clipboard.test.ts +438 -0
  298. package/src/components/clipboard/clipboard.ts +416 -0
  299. package/src/components/clipboard/index.ts +2 -0
  300. package/src/components/clipboard/types.ts +51 -0
  301. package/src/components/component.ts +15 -5
  302. package/src/components/datatable/__tests__/currency-sort.test.ts +6 -13
  303. package/src/components/datatable/__tests__/multi-row-headers.test.ts +2 -2
  304. package/src/components/datatable/__tests__/pagination-reset.test.ts +7 -4
  305. package/src/components/datatable/__tests__/race-conditions.test.ts +11 -14
  306. package/src/components/datatable/__tests__/setup.ts +1 -1
  307. package/src/components/datatable/datatable-checkbox.ts +6 -4
  308. package/src/components/datatable/datatable-sort.ts +27 -7
  309. package/src/components/datatable/datatable.ts +67 -42
  310. package/src/components/datatable/types.ts +3 -1
  311. package/src/components/drawer/drawer.ts +3 -18
  312. package/src/components/dropdown/dropdown.ts +2 -3
  313. package/src/components/pin-input/__tests__/pin-input.test.ts +928 -0
  314. package/src/components/pin-input/index.ts +6 -0
  315. package/src/components/pin-input/pin-input.ts +499 -0
  316. package/src/components/pin-input/types.ts +45 -0
  317. package/src/components/range-slider/__tests__/range-slider.test.ts +659 -0
  318. package/src/components/range-slider/index.ts +11 -0
  319. package/src/components/range-slider/range-slider.ts +276 -0
  320. package/src/components/range-slider/types.ts +36 -0
  321. package/src/components/rating/__tests__/rating.test.ts +11 -4
  322. package/src/components/rating/rating.ts +22 -12
  323. package/src/components/repeater/__tests__/repeater.test.ts +24 -11
  324. package/src/components/repeater/repeater.ts +5 -3
  325. package/src/components/select/__tests__/ux-behaviors.test.ts +25 -6
  326. package/src/components/select/combobox.ts +23 -16
  327. package/src/components/select/config.ts +15 -14
  328. package/src/components/select/dropdown.ts +1 -1
  329. package/src/components/select/option.ts +14 -4
  330. package/src/components/select/remote.ts +68 -56
  331. package/src/components/select/search.ts +30 -27
  332. package/src/components/select/select.ts +41 -37
  333. package/src/components/select/tags.ts +14 -8
  334. package/src/components/select/templates.ts +11 -6
  335. package/src/components/select/types.ts +1 -1
  336. package/src/components/select/utils.ts +12 -10
  337. package/src/components/sticky/__tests__/sticky.test.ts +10 -3
  338. package/src/components/sticky/sticky.ts +16 -26
  339. package/src/components/sticky/types.ts +3 -3
  340. package/src/components/toast/toast.ts +34 -21
  341. package/src/components/toast/types.ts +5 -1
  342. package/src/components/toggle-password/toggle-password.ts +0 -1
  343. package/src/helpers/dom.ts +14 -17
  344. package/src/helpers/event-handler.ts +5 -6
  345. package/src/helpers/utils.ts +5 -2
  346. package/src/index.ts +35 -0
  347. package/src/types.ts +1 -1
  348. package/styles.css +1 -0
@@ -43,7 +43,7 @@ describe('KTDataTable Race Condition Fixes', () => {
43
43
 
44
44
  // Mock fetch to track requests and signals
45
45
  abortSignals = [];
46
- mockFetch = vi.fn<typeof fetch>((url, options) => {
46
+ mockFetch = vi.fn<typeof fetch>((_url, options) => {
47
47
  // Store abort signal for verification
48
48
  if (options?.signal) {
49
49
  abortSignals.push(options.signal);
@@ -98,12 +98,9 @@ describe('KTDataTable Race Condition Fixes', () => {
98
98
 
99
99
  describe('AbortController Integration', () => {
100
100
  it('should create AbortController for remote data requests', async () => {
101
- const datatable = new KTDataTable(
102
- container.querySelector('[data-kt-datatable="true"]')!,
103
- {
104
- apiEndpoint: '/api/data',
105
- },
106
- );
101
+ new KTDataTable(container.querySelector('[data-kt-datatable="true"]')!, {
102
+ apiEndpoint: '/api/data',
103
+ });
107
104
 
108
105
  await waitFor(150);
109
106
 
@@ -186,7 +183,7 @@ describe('KTDataTable Race Condition Fixes', () => {
186
183
 
187
184
  // Mock to capture request sequence
188
185
  mockFetch.mockImplementation(
189
- (url: RequestInfo | URL, options?: RequestInit) => {
186
+ (_url: RequestInfo | URL, _options?: RequestInit) => {
190
187
  callCount++;
191
188
  const id = callCount;
192
189
  requestIds.push(id);
@@ -293,7 +290,7 @@ describe('KTDataTable Race Condition Fixes', () => {
293
290
  it('should reset _isFetching flag even after fetch error', async () => {
294
291
  let callCount = 0;
295
292
  mockFetch.mockImplementation(
296
- (url: RequestInfo | URL, options?: RequestInit) => {
293
+ (_url: RequestInfo | URL, _options?: RequestInit) => {
297
294
  callCount++;
298
295
  if (callCount === 1) {
299
296
  // Return invalid JSON to trigger parse error
@@ -333,7 +330,7 @@ describe('KTDataTable Race Condition Fixes', () => {
333
330
  const element = container.querySelector(
334
331
  '[data-kt-datatable="true"]',
335
332
  ) as HTMLElement;
336
- const datatable = new KTDataTable(element, {
333
+ new KTDataTable(element, {
337
334
  apiEndpoint: '/api/data',
338
335
  });
339
336
 
@@ -410,7 +407,7 @@ describe('KTDataTable Race Condition Fixes', () => {
410
407
 
411
408
  describe('Event Handling During Race Conditions', () => {
412
409
  it('should fire fetch event for successful requests', async () => {
413
- const fetchEvents: any[] = [];
410
+ const fetchEvents: Event[] = [];
414
411
 
415
412
  const element = container.querySelector(
416
413
  '[data-kt-datatable="true"]',
@@ -433,7 +430,7 @@ describe('KTDataTable Race Condition Fixes', () => {
433
430
  });
434
431
 
435
432
  it('should fire fetched event after successful data load', async () => {
436
- const fetchedEvents: any[] = [];
433
+ const fetchedEvents: Event[] = [];
437
434
 
438
435
  const element = container.querySelector(
439
436
  '[data-kt-datatable="true"]',
@@ -442,7 +439,7 @@ describe('KTDataTable Race Condition Fixes', () => {
442
439
  fetchedEvents.push(e);
443
440
  });
444
441
 
445
- const datatable = new KTDataTable(element, {
442
+ new KTDataTable(element, {
446
443
  apiEndpoint: '/api/data',
447
444
  });
448
445
 
@@ -453,7 +450,7 @@ describe('KTDataTable Race Condition Fixes', () => {
453
450
  });
454
451
 
455
452
  it('should not fire error events for AbortError', async () => {
456
- const errorEvents: any[] = [];
453
+ const errorEvents: Event[] = [];
457
454
 
458
455
  const element = container.querySelector(
459
456
  '[data-kt-datatable="true"]',
@@ -46,7 +46,7 @@ Object.defineProperty(window, 'matchMedia', {
46
46
  matches: false,
47
47
  media: query,
48
48
  onchange: null as
49
- | ((this: MediaQueryList, ev: MediaQueryListEvent) => any)
49
+ | ((this: MediaQueryList, ev: MediaQueryListEvent) => unknown)
50
50
  | null,
51
51
  addListener: () => {}, // deprecated
52
52
  removeListener: () => {}, // deprecated
@@ -25,7 +25,7 @@ export interface KTDataTableCheckboxAPI {
25
25
  export function createCheckboxHandler(
26
26
  element: HTMLElement,
27
27
  config: KTDataTableConfigInterface,
28
- fireEvent: (eventName: string, eventData?: any) => void,
28
+ fireEvent: (eventName: string, eventData?: object) => void,
29
29
  ): KTDataTableCheckboxAPI {
30
30
  let headerChecked = false;
31
31
  let headerCheckElement: HTMLInputElement | null = null;
@@ -36,7 +36,8 @@ export function createCheckboxHandler(
36
36
 
37
37
  // Helper: get selectedRows from state, always as string[]
38
38
  function getSelectedRows(): string[] {
39
- if (!config._state) config._state = {} as any;
39
+ if (!config._state)
40
+ config._state = {} as unknown as KTDataTableConfigInterface['_state'];
40
41
  if (!Array.isArray(config._state.selectedRows))
41
42
  config._state.selectedRows = [];
42
43
  return config._state.selectedRows.map(String);
@@ -44,7 +45,8 @@ export function createCheckboxHandler(
44
45
 
45
46
  // Helper: set selectedRows in state
46
47
  function setSelectedRows(rows: string[]) {
47
- if (!config._state) config._state = {} as any;
48
+ if (!config._state)
49
+ config._state = {} as unknown as KTDataTableConfigInterface['_state'];
48
50
  config._state.selectedRows = Array.from(new Set(rows.map(String)));
49
51
  }
50
52
 
@@ -118,7 +120,7 @@ export function createCheckboxHandler(
118
120
  }
119
121
 
120
122
  // When the header checkbox is toggled
121
- function checkboxToggle(event?: Event) {
123
+ function checkboxToggle(_event?: Event) {
122
124
  const checked = !isChecked();
123
125
  // Update state first, then fire events
124
126
  change(checked);
@@ -40,8 +40,8 @@ export function createSortHandler<T = KTDataTableDataInterface>(
40
40
  field: keyof T | number,
41
41
  order: KTDataTableSortOrderInterface,
42
42
  ) => void,
43
- fireEvent: (eventName: string, eventData?: any) => void,
44
- dispatchEvent: (eventName: string, eventData?: any) => void,
43
+ fireEvent: (eventName: string, eventData?: object) => void,
44
+ dispatchEvent: (eventName: string, eventData?: object) => void,
45
45
  updateData: () => void,
46
46
  ): KTDataTableSortAPI<T> {
47
47
  // Helper to compare values for sorting (string)
@@ -93,7 +93,9 @@ export function createSortHandler<T = KTDataTableDataInterface>(
93
93
  | {
94
94
  sortType?: 'string' | 'numeric';
95
95
  sortValue?: (
96
- cellValue: unknown,
96
+ cellValue:
97
+ | KTDataTableDataInterface[keyof KTDataTableDataInterface]
98
+ | string,
97
99
  rowData: KTDataTableDataInterface,
98
100
  ) => number | string;
99
101
  }
@@ -121,8 +123,18 @@ export function createSortHandler<T = KTDataTableDataInterface>(
121
123
  const bRaw = b[sortField as keyof T] as unknown;
122
124
 
123
125
  if (typeof sortValueFn === 'function') {
124
- const aVal = sortValueFn(aRaw, a as KTDataTableDataInterface);
125
- const bVal = sortValueFn(bRaw, b as KTDataTableDataInterface);
126
+ const aVal = sortValueFn(
127
+ aRaw as
128
+ | KTDataTableDataInterface[keyof KTDataTableDataInterface]
129
+ | string,
130
+ a as KTDataTableDataInterface,
131
+ );
132
+ const bVal = sortValueFn(
133
+ bRaw as
134
+ | KTDataTableDataInterface[keyof KTDataTableDataInterface]
135
+ | string,
136
+ b as KTDataTableDataInterface,
137
+ );
126
138
  const aNum = typeof aVal === 'number' ? aVal : parseNumeric(aVal);
127
139
  const bNum = typeof bVal === 'number' ? bVal : parseNumeric(bVal);
128
140
  if (typeof aVal === 'number' && typeof bVal === 'number') {
@@ -131,8 +143,16 @@ export function createSortHandler<T = KTDataTableDataInterface>(
131
143
  return compareValues(aVal, bVal, sortOrder);
132
144
  }
133
145
  if (useNumeric) {
134
- const aNum = parseNumeric(aRaw);
135
- const bNum = parseNumeric(bRaw);
146
+ const aNum = parseNumeric(
147
+ aRaw as
148
+ | KTDataTableDataInterface[keyof KTDataTableDataInterface]
149
+ | string,
150
+ );
151
+ const bNum = parseNumeric(
152
+ bRaw as
153
+ | KTDataTableDataInterface[keyof KTDataTableDataInterface]
154
+ | string,
155
+ );
136
156
  return compareNumeric(aNum, bNum, sortOrder);
137
157
  }
138
158
  return compareValues(aRaw, bRaw, sortOrder);
@@ -13,6 +13,7 @@ import {
13
13
  KTDataTableColumnFilterInterface,
14
14
  KTDataTableAttributeInterface,
15
15
  } from './types';
16
+ import { KTOptionType } from '../../types';
16
17
  import KTUtils from '../../helpers/utils';
17
18
  import KTComponents from '../../index';
18
19
  import KTData from '../../helpers/data';
@@ -35,6 +36,20 @@ export class KTDataTable<T extends KTDataTableDataInterface>
35
36
  extends KTComponent
36
37
  implements KTDataTableInterface
37
38
  {
39
+ private static asElementWithInstance(element: HTMLElement): HTMLElement & {
40
+ instance?: KTDataTable<KTDataTableDataInterface>;
41
+ } {
42
+ return element as HTMLElement & {
43
+ instance?: KTDataTable<KTDataTableDataInterface>;
44
+ };
45
+ }
46
+
47
+ private static asSearchElementWithDebounce(
48
+ element: HTMLInputElement,
49
+ ): HTMLInputElement & { _debouncedSearch?: EventListener } {
50
+ return element as HTMLInputElement & { _debouncedSearch?: EventListener };
51
+ }
52
+
38
53
  protected override _name: string = 'datatable';
39
54
  protected override _config: KTDataTableConfigInterface;
40
55
  protected override _defaultConfig: KTDataTableConfigInterface;
@@ -88,7 +103,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
88
103
  this._buildConfig();
89
104
 
90
105
  // Store the instance directly on the element
91
- (element as any).instance = this;
106
+ KTDataTable.asElementWithInstance(element).instance = this;
92
107
 
93
108
  this._initElements();
94
109
 
@@ -96,7 +111,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
96
111
  this._checkbox = createCheckboxHandler(
97
112
  this._element,
98
113
  this._config,
99
- (eventName: string, eventData?: any) => {
114
+ (eventName: string, eventData?: object) => {
100
115
  this._fireEvent(eventName, eventData);
101
116
  this._dispatchEvent(eventName, eventData);
102
117
  },
@@ -284,22 +299,20 @@ export class KTDataTable<T extends KTDataTableDataInterface>
284
299
  return false;
285
300
  }
286
301
 
287
- return Object.values(item).some(
288
- (value: string | number | boolean) => {
289
- if (
290
- typeof value !== 'string' &&
291
- typeof value !== 'number' &&
292
- typeof value !== 'boolean'
293
- ) {
294
- return false;
295
- }
296
-
297
- const valueText = String(value)
298
- .replace(/<[^>]*>|&nbsp;/g, '')
299
- .toLowerCase();
300
- return valueText.includes(search.toLowerCase());
301
- },
302
- );
302
+ return Object.values(item).some((value: KTOptionType) => {
303
+ if (
304
+ typeof value !== 'string' &&
305
+ typeof value !== 'number' &&
306
+ typeof value !== 'boolean'
307
+ ) {
308
+ return false;
309
+ }
310
+
311
+ const valueText = String(value)
312
+ .replace(/<|>|&nbsp;/g, '')
313
+ .toLowerCase();
314
+ return valueText.includes(search.toLowerCase());
315
+ });
303
316
  });
304
317
  },
305
318
  },
@@ -533,11 +546,13 @@ export class KTDataTable<T extends KTDataTableDataInterface>
533
546
 
534
547
  if (searchElement) {
535
548
  // Check if a debounced search function already exists
536
- if ((searchElement as any)._debouncedSearch) {
549
+ const searchWithDebounce =
550
+ KTDataTable.asSearchElementWithDebounce(searchElement);
551
+ if (searchWithDebounce._debouncedSearch) {
537
552
  // Remove the existing debounced event listener
538
553
  searchElement.removeEventListener(
539
554
  'keyup',
540
- (searchElement as any)._debouncedSearch,
555
+ searchWithDebounce._debouncedSearch,
541
556
  );
542
557
  }
543
558
 
@@ -547,7 +562,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
547
562
  }, this._config.search.delay);
548
563
 
549
564
  // Store the new debounced function as a property of the element
550
- (searchElement as any)._debouncedSearch = debouncedSearch;
565
+ searchWithDebounce._debouncedSearch = debouncedSearch;
551
566
 
552
567
  // Add the new debounced event listener
553
568
  searchElement.addEventListener('keyup', debouncedSearch);
@@ -590,10 +605,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
590
605
  let _temp = (this._data = [...originalData] as T[]);
591
606
 
592
607
  if (search) {
608
+ const searchTerm = typeof search === 'string' ? search : '';
593
609
  _temp = this._data = this._config.search.callback.call(
594
610
  this,
595
611
  this._data,
596
- search,
612
+ searchTerm,
597
613
  ) as T[];
598
614
  }
599
615
 
@@ -651,7 +667,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
651
667
 
652
668
  private _tableConfigInvalidate(): boolean {
653
669
  // Remove _data and _state from config
654
- const { _data, _state, ...restConfig } = this._config;
670
+ const { _state, ...restConfig } = this._config;
655
671
  const checksum: string = KTUtils.checksum(JSON.stringify(restConfig));
656
672
  if (_state._configChecksum !== checksum) {
657
673
  this._config._state._configChecksum = checksum;
@@ -746,9 +762,8 @@ export class KTDataTable<T extends KTDataTableDataInterface>
746
762
  return Object.keys(originalData[0]).length;
747
763
  }
748
764
  if (this._tbodyElement) {
749
- const firstRow = this._tbodyElement.querySelector<HTMLTableRowElement>(
750
- 'tr',
751
- );
765
+ const firstRow =
766
+ this._tbodyElement.querySelector<HTMLTableRowElement>('tr');
752
767
  if (firstRow) {
753
768
  return firstRow.querySelectorAll<HTMLTableCellElement>('td').length;
754
769
  }
@@ -1052,8 +1067,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1052
1067
  th.hasAttribute('data-kt-datatable-column'),
1053
1068
  );
1054
1069
  // When no th has data-kt-datatable-column (e.g. multi-row headers), use logical column count from tbody so we don't overcount thead cells
1055
- const columnsToRender: HTMLTableCellElement[] =
1056
- ths.length > 0 ? ths : [];
1070
+ const columnsToRender: HTMLTableCellElement[] = ths.length > 0 ? ths : [];
1057
1071
  const logicalColumnCount =
1058
1072
  ths.length > 0 ? ths.length : this._getLogicalColumnCount();
1059
1073
 
@@ -1074,7 +1088,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1074
1088
  const th = columnsToRender[colIndex];
1075
1089
  const colName = th?.getAttribute('data-kt-datatable-column');
1076
1090
  const td = document.createElement('td');
1077
- let value: any;
1091
+ let value: KTOptionType | '';
1078
1092
  if (colName && Object.prototype.hasOwnProperty.call(item, colName)) {
1079
1093
  value = item[colName as keyof T];
1080
1094
  } else if (Object.prototype.hasOwnProperty.call(item, colIndex)) {
@@ -1566,12 +1580,17 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1566
1580
  document.querySelector<HTMLInputElement>(
1567
1581
  `[data-kt-datatable-search="#${tableId}"]`,
1568
1582
  );
1569
- if (searchElement && (searchElement as any)._debouncedSearch) {
1583
+ if (searchElement) {
1584
+ const searchWithDebounce =
1585
+ KTDataTable.asSearchElementWithDebounce(searchElement);
1586
+ if (!searchWithDebounce._debouncedSearch) {
1587
+ return;
1588
+ }
1570
1589
  searchElement.removeEventListener(
1571
1590
  'keyup',
1572
- (searchElement as any)._debouncedSearch,
1591
+ searchWithDebounce._debouncedSearch,
1573
1592
  );
1574
- delete (searchElement as any)._debouncedSearch;
1593
+ delete searchWithDebounce._debouncedSearch;
1575
1594
  }
1576
1595
 
1577
1596
  // --- 2. Remove page size dropdown event listener ---
@@ -1589,11 +1608,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1589
1608
 
1590
1609
  // --- 4. Dispose of handler objects (checkbox, sort) ---
1591
1610
  // KTDataTableCheckboxAPI does not have a dispose method, but we can remove header checkbox listener
1592
- if (
1593
- this._checkbox &&
1594
- typeof (this._checkbox as any).dispose === 'function'
1595
- ) {
1596
- (this._checkbox as any).dispose();
1611
+ const checkboxWithDispose = this._checkbox as KTDataTableCheckboxAPI & {
1612
+ dispose?: () => void;
1613
+ };
1614
+ if (this._checkbox && typeof checkboxWithDispose.dispose === 'function') {
1615
+ checkboxWithDispose.dispose();
1597
1616
  } else {
1598
1617
  // Remove header checkbox event listener if possible
1599
1618
  const headerCheckElement = this._element.querySelector<HTMLInputElement>(
@@ -1621,8 +1640,11 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1621
1640
  this._element.classList.remove(this._config.loadingClass);
1622
1641
 
1623
1642
  // --- 6. Remove instance reference from the DOM element ---
1624
- if ((this._element as any).instance) {
1625
- delete (this._element as any).instance;
1643
+ const elementWithInstance = KTDataTable.asElementWithInstance(
1644
+ this._element,
1645
+ );
1646
+ if (elementWithInstance.instance) {
1647
+ delete elementWithInstance.instance;
1626
1648
  }
1627
1649
 
1628
1650
  // --- 7. (Optional) Clear localStorage state ---
@@ -1630,9 +1652,12 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1630
1652
  // this._deleteState();
1631
1653
  }
1632
1654
 
1633
- private _debounce(func: Function, wait: number) {
1655
+ private _debounce<TArgs extends unknown[]>(
1656
+ func: (...args: TArgs) => void,
1657
+ wait: number,
1658
+ ): (...args: TArgs) => void {
1634
1659
  let timeout: number | undefined;
1635
- return function (...args: any[]) {
1660
+ return function (...args: TArgs) {
1636
1661
  const later = () => {
1637
1662
  clearTimeout(timeout);
1638
1663
  func(...args);
@@ -1839,7 +1864,7 @@ export class KTDataTable<T extends KTDataTableDataInterface>
1839
1864
  }
1840
1865
 
1841
1866
  // Fallback to element's instance property (for manually created instances)
1842
- return (element as any).instance;
1867
+ return KTDataTable.asElementWithInstance(element).instance;
1843
1868
  }
1844
1869
 
1845
1870
  /**
@@ -3,11 +3,13 @@
3
3
  * Copyright 2025 by Keenthemes Inc
4
4
  */
5
5
 
6
+ import { KTOptionType } from '../../types';
7
+
6
8
  // Define the sort order and filter criteria types
7
9
  export type KTDataTableSortOrderInterface = 'asc' | 'desc' | '';
8
10
 
9
11
  export interface KTDataTableDataInterface {
10
- [key: string]: string | number | boolean | object;
12
+ [key: string]: KTOptionType;
11
13
  }
12
14
 
13
15
  export interface KTDataTableAttributeInterface {
@@ -448,8 +448,6 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
448
448
  if (!drawerElement) {
449
449
  // If element is a toggle button and drawer element wasn't found, return null
450
450
  // The handleToggle() will handle waiting for the element to appear
451
- if (element.hasAttribute('data-kt-drawer-toggle')) {
452
- }
453
451
  return null;
454
452
  }
455
453
 
@@ -485,10 +483,8 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
485
483
 
486
484
  public static handleResize(): void {
487
485
  window.addEventListener('resize', () => {
488
- let timer;
489
-
490
486
  KTUtils.throttle(
491
- timer,
487
+ undefined,
492
488
  () => {
493
489
  document
494
490
  .querySelectorAll('[data-kt-drawer-initialized]')
@@ -512,8 +508,7 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
512
508
  'click',
513
509
  (rawEvent: MouseEvent) => {
514
510
  const target = rawEvent.target as HTMLElement;
515
- if (target && target.hasAttribute('data-kt-drawer-toggle')) {
516
- }
511
+ void (target && target.hasAttribute('data-kt-drawer-toggle'));
517
512
  },
518
513
  true,
519
514
  ); // Use capture phase to catch before any stopPropagation
@@ -534,15 +529,6 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
534
529
  if (drawer) {
535
530
  drawer.toggle(target);
536
531
  } else {
537
- // Drawer element not found - wait for it to appear (handles persisted Livewire components)
538
- // Check if drawer exists in persisted components (might be in header that's persisted)
539
- const persistedHeader =
540
- document.querySelector('[wire\\:id]')?.closest('[wire\\:id]') ||
541
- document.querySelector('header#header');
542
- const drawerInPersisted = persistedHeader
543
- ? persistedHeader.querySelector(selector)
544
- : null;
545
-
546
532
  // Wait longer for persisted components that may take time to render
547
533
  // Also check if drawer exists in persisted header component
548
534
  KTDrawer.waitForElement(selector, 5000).then((drawerElement) => {
@@ -706,11 +692,10 @@ export class KTDrawer extends KTComponent implements KTDrawerInterface {
706
692
  instance.hide(); // This will clean up backdrop and state
707
693
  }
708
694
  // Clear KTData entries
709
- const hadDrawer = KTData.has(element as HTMLElement, 'drawer');
710
695
  KTData.remove(element as HTMLElement, 'drawer');
711
696
  // Remove initialization attribute to allow fresh initialization
712
697
  element.removeAttribute('data-kt-drawer-initialized');
713
- } catch (e) {
698
+ } catch {
714
699
  // Ignore errors for individual elements
715
700
  }
716
701
  });
@@ -120,7 +120,7 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
120
120
  this._toggle();
121
121
  }
122
122
 
123
- protected _mouseover(event: MouseEvent): void {
123
+ protected _mouseover(_event: MouseEvent): void {
124
124
  if (this._disabled) return;
125
125
 
126
126
  if (this._getOption('trigger') !== 'hover') return;
@@ -244,7 +244,6 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
244
244
  }
245
245
 
246
246
  protected _initPopper(): void {
247
- const isRtl = KTDom.isRTL();
248
247
  let reference: HTMLElement;
249
248
  const attach = this._getOption('attach') as string;
250
249
 
@@ -607,7 +606,7 @@ export class KTDropdown extends KTComponent implements KTDropdownInterface {
607
606
  if (menu) {
608
607
  KTData.remove(menu as HTMLElement, 'dropdownElement');
609
608
  }
610
- } catch (e) {
609
+ } catch {
611
610
  // Ignore errors for individual elements
612
611
  }
613
612
  });