@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
@@ -29,7 +29,8 @@ export class KTSelect extends KTComponent {
29
29
  // Core properties
30
30
  protected override readonly _name: string = 'select';
31
31
  protected override readonly _dataOptionPrefix: string = 'kt-'; // Use 'kt-' prefix to support data-kt-select-option attributes
32
- protected override readonly _config: KTSelectConfigInterface;
32
+ protected override _element!: HTMLElement;
33
+ protected override _config: KTSelectConfigInterface;
33
34
  protected override _defaultConfig: KTSelectConfigInterface;
34
35
 
35
36
  // Static global configuration
@@ -81,7 +82,7 @@ export class KTSelect extends KTComponent {
81
82
  this._state = new KTSelectState(this._config);
82
83
  this._config = this._state.getConfig();
83
84
 
84
- (element as any).instance = this;
85
+ (this._element as HTMLElement & { instance?: KTSelect }).instance = this;
85
86
 
86
87
  // Initialize event manager
87
88
  this._eventManager = new EventManager();
@@ -125,8 +126,7 @@ export class KTSelect extends KTComponent {
125
126
  protected override _buildConfig(config: object = {}): void {
126
127
  if (!this._element) return;
127
128
 
128
- // Cast to writable to allow assignment (config is readonly but needs initialization)
129
- (this._config as any) = {
129
+ this._config = {
130
130
  ...this._defaultConfig,
131
131
  ...KTSelect.globalConfig,
132
132
  ...this._getGlobalConfig(),
@@ -143,7 +143,7 @@ export class KTSelect extends KTComponent {
143
143
  */
144
144
  protected override _dispatchEvent(
145
145
  eventType: string,
146
- payload: object = null,
146
+ payload: object | null = null,
147
147
  ): void {
148
148
  // Call parent method to dispatch on element (existing behavior)
149
149
  super._dispatchEvent(eventType, payload);
@@ -179,6 +179,10 @@ export class KTSelect extends KTComponent {
179
179
  }
180
180
  }
181
181
 
182
+ public override getElement(): HTMLElement {
183
+ return this._element;
184
+ }
185
+
182
186
  /**
183
187
  * Initialize remote data fetching
184
188
  */
@@ -461,7 +465,10 @@ export class KTSelect extends KTComponent {
461
465
  optionsContainer.appendChild(
462
466
  defaultTemplates.error({
463
467
  ...this._config,
464
- errorMessage: message,
468
+ errorMessage:
469
+ message ??
470
+ this._config.remoteErrorMessage ??
471
+ 'Failed to load data',
465
472
  }),
466
473
  );
467
474
  break;
@@ -754,7 +761,7 @@ export class KTSelect extends KTComponent {
754
761
  // Create an empty dropdown first (without options) using template
755
762
  const dropdownElement = defaultTemplates.dropdown({
756
763
  ...this._config,
757
- zindex: this._config.dropdownZindex,
764
+ zindex: this._config.dropdownZindex ?? undefined,
758
765
  });
759
766
 
760
767
  // Add search input if needed
@@ -1007,13 +1014,20 @@ export class KTSelect extends KTComponent {
1007
1014
  /**
1008
1015
  * Extract nested property value from object using dot notation
1009
1016
  */
1010
- private _getValueByKey(obj: any, key: string): any {
1017
+ private _getValueByKey(obj: unknown, key: string): unknown {
1011
1018
  if (!key || !obj) return null;
1012
1019
 
1013
1020
  // Use reduce to walk through the object by splitting the key on dots
1014
- const result = key
1015
- .split('.')
1016
- .reduce((o, k) => (o && o[k] !== undefined ? o[k] : null), obj);
1021
+ const result = key.split('.').reduce((o: unknown, k: string) => {
1022
+ if (
1023
+ o &&
1024
+ typeof o === 'object' &&
1025
+ (o as Record<string, unknown>)[k] !== undefined
1026
+ ) {
1027
+ return (o as Record<string, unknown>)[k];
1028
+ }
1029
+ return null;
1030
+ }, obj);
1017
1031
 
1018
1032
  return result;
1019
1033
  }
@@ -1300,7 +1314,7 @@ export class KTSelect extends KTComponent {
1300
1314
  // Sync native select value for FormData support
1301
1315
  this._syncNativeSelectValue();
1302
1316
 
1303
- if (tagsEnabled) {
1317
+ if (this._config.tags && this._tagsModule) {
1304
1318
  // Tags module will render tags if selectedOptions > 0, or clear them if selectedOptions === 0.
1305
1319
  this._tagsModule.updateTagsDisplay(selectedOptions);
1306
1320
  }
@@ -1508,19 +1522,6 @@ export class KTSelect extends KTComponent {
1508
1522
  if (focusedOption) {
1509
1523
  const selectedValue = focusedOption.dataset.value;
1510
1524
 
1511
- // Extract just the title text, not including description
1512
- let selectedText = '';
1513
- const titleElement = focusedOption.querySelector(
1514
- '[data-kt-option-title]',
1515
- );
1516
- if (titleElement) {
1517
- // If it has a structured content with title element
1518
- selectedText = titleElement.textContent?.trim() || '';
1519
- } else {
1520
- // Fallback to the whole text content
1521
- selectedText = focusedOption.textContent?.trim() || '';
1522
- }
1523
-
1524
1525
  // First trigger the selection to ensure state is updated properly
1525
1526
  if (selectedValue) {
1526
1527
  this._selectOption(selectedValue);
@@ -1621,7 +1622,7 @@ export class KTSelect extends KTComponent {
1621
1622
  /**
1622
1623
  * Get the search input element
1623
1624
  */
1624
- public getSearchInput(): HTMLInputElement {
1625
+ public getSearchInput(): HTMLInputElement | null {
1625
1626
  return this._searchInputElement;
1626
1627
  }
1627
1628
 
@@ -1685,7 +1686,7 @@ export class KTSelect extends KTComponent {
1685
1686
  if (option.hasAttribute('style')) {
1686
1687
  const styleAttr = option.getAttribute('style');
1687
1688
 
1688
- if (styleAttr.includes('display:')) {
1689
+ if (styleAttr && styleAttr.includes('display:')) {
1689
1690
  // If style only contains display property, remove the entire attribute
1690
1691
  if (
1691
1692
  styleAttr.trim() === 'display: none;' ||
@@ -1696,7 +1697,7 @@ export class KTSelect extends KTComponent {
1696
1697
  // Otherwise, remove just the display property
1697
1698
  option.setAttribute(
1698
1699
  'style',
1699
- styleAttr?.replace(/display:\s*[^;]+;?/gi, '')?.trim(),
1700
+ styleAttr.replace(/display:\s*[^;]+;?/gi, '').trim(),
1700
1701
  );
1701
1702
  }
1702
1703
  }
@@ -1816,7 +1817,7 @@ export class KTSelect extends KTComponent {
1816
1817
  */
1817
1818
  public override dispose(): void {
1818
1819
  // Clean up event listeners
1819
- this._eventManager.removeAllListeners(null);
1820
+ this._eventManager.removeAllListeners(this._wrapperElement);
1820
1821
 
1821
1822
  // Dispose modules
1822
1823
  if (this._dropdownModule) {
@@ -2464,7 +2465,6 @@ export class KTSelect extends KTComponent {
2464
2465
  }
2465
2466
 
2466
2467
  const isOpen = this._dropdownIsOpen;
2467
- const config = this._config;
2468
2468
  const focusManager = this._focusManager;
2469
2469
  const buffer = this._typeToSearchBuffer;
2470
2470
 
@@ -2588,7 +2588,7 @@ export class KTSelect extends KTComponent {
2588
2588
  }
2589
2589
 
2590
2590
  public renderDisplayTemplateForSelected(selectedValues: string[]): string {
2591
- const optionsConfig = (this._config.optionsConfig as any) || {};
2591
+ const optionsConfig = this._config.optionsConfig || {};
2592
2592
  const displaySeparator = this._config.displaySeparator || ', ';
2593
2593
  const contentArray = Array.from(
2594
2594
  new Set(
@@ -2599,7 +2599,7 @@ export class KTSelect extends KTComponent {
2599
2599
  );
2600
2600
  if (!option) return '';
2601
2601
 
2602
- let displayTemplate = this._config.displayTemplate;
2602
+ let displayTemplate = this._config.displayTemplate || '{{text}}';
2603
2603
  const text = option.getAttribute('data-text') || '';
2604
2604
 
2605
2605
  // Replace all {{varname}} in option.innerHTML with values from _config
@@ -2757,21 +2757,25 @@ export class KTSelect extends KTComponent {
2757
2757
  .getVisibleOptions()
2758
2758
  .filter((opt) => opt.getAttribute('aria-disabled') !== 'true');
2759
2759
 
2760
+ const selectAllButton = this._selectAllButton;
2761
+ const selectAllButtonToggle = this._selectAllButtonToggle;
2762
+ if (!selectAllButton || !selectAllButtonToggle) return;
2763
+
2760
2764
  if (visibleOptions.length === 0) {
2761
- this._selectAllButton.style.display = 'none';
2765
+ selectAllButton.style.display = 'none';
2762
2766
  return;
2763
2767
  }
2764
2768
 
2765
- this._selectAllButton.style.display = '';
2769
+ selectAllButton.style.display = '';
2766
2770
 
2767
2771
  const selectedValues = new Set(this.getSelectedOptions());
2768
2772
  const isAllSelected = visibleOptions.every((opt) =>
2769
2773
  selectedValues.has(opt.dataset.value as string),
2770
2774
  );
2771
2775
 
2772
- this._selectAllButtonToggle.textContent = isAllSelected
2773
- ? this._config.clearAllText
2774
- : this._config.selectAllText;
2776
+ selectAllButtonToggle.textContent = isAllSelected
2777
+ ? (this._config.clearAllText ?? 'Clear all')
2778
+ : (this._config.selectAllText ?? 'Select all');
2775
2779
  }
2776
2780
 
2777
2781
  /**
@@ -14,7 +14,7 @@ import { EventManager } from './utils';
14
14
  export class KTSelectTags {
15
15
  private _select: KTSelect;
16
16
  private _config: KTSelectConfigInterface;
17
- private _valueDisplayElement: HTMLElement;
17
+ private _valueDisplayElement: HTMLElement | null;
18
18
  private _eventManager: EventManager;
19
19
 
20
20
  /**
@@ -32,21 +32,23 @@ export class KTSelectTags {
32
32
  * Renders selected options as tags in the display element
33
33
  */
34
34
  public updateTagsDisplay(selectedOptions: string[]): void {
35
+ if (!this._valueDisplayElement) return;
36
+ const valueDisplayElement = this._valueDisplayElement;
35
37
  // Remove any existing tag elements
36
- const wrapper = this._valueDisplayElement.parentElement;
38
+ const wrapper = valueDisplayElement.parentElement;
37
39
  if (!wrapper) return;
38
40
 
39
41
  // If no options selected, ensure placeholder is shown
40
42
  if (selectedOptions.length === 0) {
41
43
  // Clear any existing content and show placeholder
42
- this._valueDisplayElement.innerHTML = '';
44
+ valueDisplayElement.innerHTML = '';
43
45
  const placeholderEl = defaultTemplates.placeholder(this._config);
44
- this._valueDisplayElement.appendChild(placeholderEl);
46
+ valueDisplayElement.appendChild(placeholderEl);
45
47
  return;
46
48
  }
47
49
 
48
50
  // Clear all existing content before adding tags
49
- this._valueDisplayElement.innerHTML = '';
51
+ valueDisplayElement.innerHTML = '';
50
52
 
51
53
  // Insert each tag before the display element
52
54
  selectedOptions.forEach((optionValue) => {
@@ -62,7 +64,8 @@ export class KTSelectTags {
62
64
  if (!optionElement) {
63
65
  const originalOptions = this._select
64
66
  .getElement()
65
- .querySelectorAll('option');
67
+ ?.querySelectorAll('option');
68
+ if (!originalOptions) return;
66
69
  for (const opt of Array.from(originalOptions)) {
67
70
  if ((opt as HTMLOptionElement).value === optionValue) {
68
71
  optionElement = opt as HTMLOptionElement;
@@ -70,6 +73,7 @@ export class KTSelectTags {
70
73
  }
71
74
  }
72
75
  }
76
+ if (!optionElement) return;
73
77
 
74
78
  const tag = defaultTemplates.tag(optionElement, this._config);
75
79
 
@@ -85,7 +89,7 @@ export class KTSelectTags {
85
89
  }
86
90
 
87
91
  // Insert tag inside the display element
88
- this._valueDisplayElement.appendChild(tag);
92
+ valueDisplayElement.appendChild(tag);
89
93
  });
90
94
  }
91
95
 
@@ -101,6 +105,8 @@ export class KTSelectTags {
101
105
  * Clean up resources used by this module
102
106
  */
103
107
  public destroy(): void {
104
- this._eventManager.removeAllListeners(null);
108
+ if (this._valueDisplayElement) {
109
+ this._eventManager.removeAllListeners(this._valueDisplayElement);
110
+ }
105
111
  }
106
112
  }
@@ -136,7 +136,7 @@ export function getTemplateStrings(
136
136
  ): typeof coreTemplateStrings {
137
137
  const templates =
138
138
  config && typeof config === 'object' && 'templates' in config
139
- ? (config as any).templates
139
+ ? (config as KTSelectConfigInterface).templates
140
140
  : undefined;
141
141
 
142
142
  if (templates) {
@@ -264,7 +264,7 @@ export const defaultTemplates: KTSelectTemplateInterface = {
264
264
  config: KTSelectConfigInterface,
265
265
  ): HTMLElement => {
266
266
  const isHtmlOption = option instanceof HTMLOptionElement;
267
- let optionData: Record<string, any>;
267
+ let optionData: Record<string, unknown>;
268
268
 
269
269
  if (isHtmlOption) {
270
270
  // If it's a plain HTMLOptionElement, construct data similarly to how KTSelectOption would
@@ -288,14 +288,14 @@ export const defaultTemplates: KTSelectTemplateInterface = {
288
288
  ).getOptionDataForTemplate();
289
289
  }
290
290
 
291
- let content = optionData?.text?.trim(); // Default content to option's text
291
+ let content = String(optionData?.text || '').trim(); // Default content to option's text
292
292
 
293
293
  if (config.optionTemplate) {
294
294
  // Use the user-provided template string, rendering with the full optionData.
295
295
  // renderTemplateString will replace {{key}} with values from optionData.
296
296
  content = renderTemplateString(config.optionTemplate, optionData);
297
297
  } else {
298
- content = optionData.text || optionData.content; // Prefer explicit text, fallback to content
298
+ content = String(optionData.text || optionData.content || '');
299
299
  }
300
300
 
301
301
  // Use the core option template string as the base structure.
@@ -326,7 +326,7 @@ export const defaultTemplates: KTSelectTemplateInterface = {
326
326
  }
327
327
 
328
328
  // Ensure data-text attribute is set to the original, clean text for searching/filtering
329
- element.setAttribute('data-text', optionData?.text?.trim() || '');
329
+ element.setAttribute('data-text', String(optionData?.text || '').trim());
330
330
 
331
331
  return element;
332
332
  },
@@ -402,7 +402,12 @@ export const defaultTemplates: KTSelectTemplateInterface = {
402
402
 
403
403
  // Replace all {{varname}} in option.innerHTML with values from _config.optionsConfig
404
404
  Object.entries(
405
- (config.optionsConfig as any)?.[optionValue] || {},
405
+ (
406
+ config.optionsConfig as unknown as Record<
407
+ string,
408
+ Record<string, unknown>
409
+ >
410
+ )?.[optionValue] || {},
406
411
  ).forEach(([key, val]) => {
407
412
  if (
408
413
  typeof val === 'string' ||
@@ -15,7 +15,7 @@ export interface KTSelectOption {
15
15
  }
16
16
 
17
17
  export interface KTSelectOptionData {
18
- [key: string]: any;
18
+ [key: string]: unknown;
19
19
  }
20
20
 
21
21
  export interface KTSelectState {
@@ -5,7 +5,6 @@
5
5
 
6
6
  // utils.ts
7
7
 
8
- import { defaultTemplates } from './templates';
9
8
  import { KTSelectConfigInterface } from './config';
10
9
 
11
10
  /**
@@ -99,7 +98,7 @@ export class FocusManager {
99
98
  constructor(
100
99
  element: HTMLElement,
101
100
  optionsSelector: string = '[data-kt-select-option]',
102
- config?: KTSelectConfigInterface,
101
+ _config?: KTSelectConfigInterface,
103
102
  ) {
104
103
  this._element = element;
105
104
  this._optionsSelector = optionsSelector;
@@ -121,8 +120,7 @@ export class FocusManager {
121
120
  const target = e.target as HTMLElement;
122
121
  const optionElement = target.closest(this._optionsSelector);
123
122
 
124
- if (optionElement) {
125
- }
123
+ void optionElement;
126
124
  });
127
125
  }
128
126
 
@@ -372,7 +370,11 @@ export class FocusManager {
372
370
  const focusedEl = this._element.querySelector(
373
371
  `${this._optionsSelector}.${this._focusClass}`,
374
372
  ) as HTMLElement | null;
375
- if (focusedEl && !focusedEl.classList.contains('hidden') && focusedEl.style.display !== 'none') {
373
+ if (
374
+ focusedEl &&
375
+ !focusedEl.classList.contains('hidden') &&
376
+ focusedEl.style.display !== 'none'
377
+ ) {
376
378
  const idx = options.indexOf(focusedEl);
377
379
  if (idx >= 0) {
378
380
  this._focusedOptionIndex = idx;
@@ -438,7 +440,7 @@ export class EventManager {
438
440
  element: HTMLElement,
439
441
  event: string,
440
442
  handler: EventListenerOrEventListenerObject,
441
- context?: any,
443
+ context?: unknown,
442
444
  ): void {
443
445
  if (!element) return;
444
446
 
@@ -510,12 +512,12 @@ export class EventManager {
510
512
  * Debounce function to limit how often a function can be called
511
513
  */
512
514
  export function debounce(
513
- func: (...args: any[]) => void,
515
+ func: (...args: unknown[]) => void,
514
516
  delay: number,
515
- ): (...args: any[]) => void {
517
+ ): (...args: unknown[]) => void {
516
518
  let timeout: ReturnType<typeof setTimeout>;
517
519
 
518
- return function (...args: any[]) {
520
+ return function (...args: unknown[]) {
519
521
  clearTimeout(timeout);
520
522
  timeout = setTimeout(() => func(...args), delay);
521
523
  };
@@ -527,7 +529,7 @@ export function debounce(
527
529
  */
528
530
  export function renderTemplateString(
529
531
  template: string,
530
- data: Record<string, any>,
532
+ data: Record<string, unknown>,
531
533
  ): string {
532
534
  return template.replace(/{{(\w+)}}/g, (_, key) =>
533
535
  data[key] !== undefined && data[key] !== null ? String(data[key]) : '',
@@ -15,8 +15,13 @@ describe('KTSticky', () => {
15
15
  beforeEach(() => {
16
16
  document.body.innerHTML = '';
17
17
  scrollTop = 0;
18
- vi.spyOn(KTDomModule.default, 'getScrollTop').mockImplementation(() => scrollTop);
19
- vi.spyOn(KTDomModule.default, 'getViewPort').mockReturnValue({ height: 800, width: 1024 });
18
+ vi.spyOn(KTDomModule.default, 'getScrollTop').mockImplementation(
19
+ () => scrollTop,
20
+ );
21
+ vi.spyOn(KTDomModule.default, 'getViewPort').mockReturnValue({
22
+ height: 800,
23
+ width: 1024,
24
+ });
20
25
 
21
26
  wrapper = document.createElement('div');
22
27
  wrapper.setAttribute('data-kt-sticky-wrapper', 'true');
@@ -151,7 +156,9 @@ describe('KTSticky', () => {
151
156
  it('fires change event when sticky becomes active and when released', async () => {
152
157
  const instance = new KTSticky(stickyEl);
153
158
  const changes: { active: boolean }[] = [];
154
- instance.on('change', (payload: { active: boolean }) => changes.push(payload));
159
+ instance.on('change', (payload: { active: boolean }) =>
160
+ changes.push(payload),
161
+ );
155
162
 
156
163
  scrollTop = 150;
157
164
  window.dispatchEvent(new Event('scroll', { bubbles: true }));
@@ -119,42 +119,35 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
119
119
 
120
120
  // Store scroll handler reference for cleanup
121
121
  this._scrollHandler = () => {
122
-
123
122
  this._isScrolling = true;
124
123
 
125
- if(this._isActive() === true){
126
-
124
+ if (this._isActive() === true) {
127
125
  this._debounceScroll(() => {
128
-
129
126
  this._isScrolling = false;
130
127
  this._process();
131
-
132
128
  }, 200);
133
-
134
- }else{
135
-
129
+ } else {
136
130
  this._isScrolling = false;
137
131
  this._process();
138
-
139
132
  }
140
-
141
133
  };
142
134
 
143
135
  if (this._targetElement) {
144
136
  if (this._targetElement === document) {
145
- window.addEventListener('scroll', this._scrollHandler, { passive: true });
137
+ window.addEventListener('scroll', this._scrollHandler, {
138
+ passive: true,
139
+ });
146
140
  } else {
147
141
  (this._targetElement as HTMLElement).addEventListener(
148
142
  'scroll',
149
143
  this._scrollHandler,
150
- { passive: true }
144
+ { passive: true },
151
145
  );
152
146
  }
153
147
  }
154
148
  }
155
149
 
156
150
  protected _debounceScroll(callback: () => void, delay: number = 200): void {
157
-
158
151
  if (this._scrollTimeout) {
159
152
  clearTimeout(this._scrollTimeout);
160
153
  }
@@ -162,7 +155,6 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
162
155
  this._scrollTimeout = setTimeout(() => {
163
156
  callback();
164
157
  }, delay);
165
-
166
158
  }
167
159
 
168
160
  protected _process(): void {
@@ -352,7 +344,7 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
352
344
  const activeClassList = this._getOption('activeClass') as string;
353
345
  if (activeClassList) {
354
346
  KTDom.addClass(this._element, activeClassList);
355
- }else{
347
+ } else {
356
348
  const classList = this._getOption('class') as string;
357
349
  if (classList) {
358
350
  KTDom.addClass(this._element, classList);
@@ -387,10 +379,10 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
387
379
  const activeClassList = this._getOption('activeClass') as string;
388
380
  if (activeClassList) {
389
381
  KTDom.removeClass(this._element, activeClassList);
390
- }else{
382
+ } else {
391
383
  const classList = this._getOption('class') as string;
392
384
  if (classList) {
393
- KTDom.removeClass(this._element, classList);
385
+ KTDom.removeClass(this._element, classList);
394
386
  }
395
387
  }
396
388
 
@@ -399,12 +391,11 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
399
391
  KTDom.addClass(this._element, releaseClassList);
400
392
  }
401
393
 
402
- if(this._eventTriggerState === false){
394
+ if (this._eventTriggerState === false) {
403
395
  const releaseDelay = this._getOption('releaseDelay') as number;
404
- if(releaseDelay && this._timeoutState === null){
396
+ if (releaseDelay && this._timeoutState === null) {
405
397
  this._timeoutState = setTimeout(() => {
406
-
407
- if (!this._element){
398
+ if (!this._element) {
408
399
  return;
409
400
  }
410
401
 
@@ -413,17 +404,16 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
413
404
  }
414
405
 
415
406
  this._timeoutState = null;
416
-
417
407
  }, releaseDelay);
418
- }else{
408
+ } else {
419
409
  this._resetStyles();
420
410
  }
421
- }else{
411
+ } else {
422
412
  this._timeoutState = null;
423
413
  }
424
414
  }
425
415
 
426
- protected _resetStyles = function () {
416
+ protected _resetStyles(): void {
427
417
  this._element.style.top = '';
428
418
  this._element.style.bottom = '';
429
419
  this._element.style.insetInlineStart = '';
@@ -435,7 +425,7 @@ export class KTSticky extends KTComponent implements KTStickyInterface {
435
425
  this._element.style.right = '';
436
426
  this._element.style.zIndex = '';
437
427
  this._element.style.position = '';
438
- };
428
+ }
439
429
 
440
430
  protected _update(): void {
441
431
  this._timeoutState = null;
@@ -19,9 +19,9 @@ export interface KTStickyConfigInterface {
19
19
  reverse: boolean;
20
20
  release: string;
21
21
  activate: string;
22
- releaseDelay: number,
23
- activeClass: string,
24
- releaseClass: string,
22
+ releaseDelay: number;
23
+ activeClass: string;
24
+ releaseClass: string;
25
25
  }
26
26
 
27
27
  export interface KTStickyInterface {