@keenthemes/ktui 1.1.6 → 1.2.1

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 (492) hide show
  1. package/README.md +24 -0
  2. package/dist/ktui.js +4321 -2055
  3. package/dist/ktui.min.js +1 -1
  4. package/dist/ktui.min.js.map +1 -1
  5. package/dist/styles.css +108 -6
  6. package/lib/cjs/components/accordion/accordion.d.ts +32 -0
  7. package/lib/cjs/components/accordion/accordion.d.ts.map +1 -0
  8. package/lib/cjs/components/accordion/index.d.ts +7 -0
  9. package/lib/cjs/components/accordion/index.d.ts.map +1 -0
  10. package/lib/cjs/components/accordion/types.d.ts +15 -0
  11. package/lib/cjs/components/accordion/types.d.ts.map +1 -0
  12. package/lib/cjs/components/clipboard/clipboard.d.ts +37 -0
  13. package/lib/cjs/components/clipboard/clipboard.d.ts.map +1 -0
  14. package/lib/cjs/components/clipboard/clipboard.js +402 -0
  15. package/lib/cjs/components/clipboard/clipboard.js.map +1 -0
  16. package/lib/cjs/components/clipboard/index.d.ts +3 -0
  17. package/lib/cjs/components/clipboard/index.d.ts.map +1 -0
  18. package/lib/cjs/components/clipboard/index.js +6 -0
  19. package/lib/cjs/components/clipboard/index.js.map +1 -0
  20. package/lib/cjs/components/clipboard/types.d.ts +44 -0
  21. package/lib/cjs/components/clipboard/types.d.ts.map +1 -0
  22. package/lib/cjs/components/clipboard/types.js +7 -0
  23. package/lib/cjs/components/clipboard/types.js.map +1 -0
  24. package/lib/cjs/components/collapse/collapse.d.ts +28 -0
  25. package/lib/cjs/components/collapse/collapse.d.ts.map +1 -0
  26. package/lib/cjs/components/collapse/index.d.ts +7 -0
  27. package/lib/cjs/components/collapse/index.d.ts.map +1 -0
  28. package/lib/cjs/components/collapse/types.d.ts +15 -0
  29. package/lib/cjs/components/collapse/types.d.ts.map +1 -0
  30. package/lib/cjs/components/component.d.ts +44 -0
  31. package/lib/cjs/components/component.d.ts.map +1 -0
  32. package/lib/cjs/components/constants.d.ts +6 -0
  33. package/lib/cjs/components/constants.d.ts.map +1 -0
  34. package/lib/cjs/components/datatable/datatable-checkbox.d.ts +16 -0
  35. package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -0
  36. package/lib/cjs/components/datatable/datatable-sort.d.ts +16 -0
  37. package/lib/cjs/components/datatable/datatable-sort.d.ts.map +1 -0
  38. package/lib/cjs/components/datatable/datatable.d.ts +339 -0
  39. package/lib/cjs/components/datatable/datatable.d.ts.map +1 -0
  40. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  41. package/lib/cjs/components/datatable/index.d.ts +7 -0
  42. package/lib/cjs/components/datatable/index.d.ts.map +1 -0
  43. package/lib/cjs/components/datatable/types.d.ts +166 -0
  44. package/lib/cjs/components/datatable/types.d.ts.map +1 -0
  45. package/lib/cjs/components/dismiss/dismiss.d.ts +30 -0
  46. package/lib/cjs/components/dismiss/dismiss.d.ts.map +1 -0
  47. package/lib/cjs/components/dismiss/index.d.ts +7 -0
  48. package/lib/cjs/components/dismiss/index.d.ts.map +1 -0
  49. package/lib/cjs/components/dismiss/types.d.ts +15 -0
  50. package/lib/cjs/components/dismiss/types.d.ts.map +1 -0
  51. package/lib/cjs/components/drawer/drawer.d.ts +63 -0
  52. package/lib/cjs/components/drawer/drawer.d.ts.map +1 -0
  53. package/lib/cjs/components/drawer/index.d.ts +7 -0
  54. package/lib/cjs/components/drawer/index.d.ts.map +1 -0
  55. package/lib/cjs/components/drawer/types.d.ts +27 -0
  56. package/lib/cjs/components/drawer/types.d.ts.map +1 -0
  57. package/lib/cjs/components/dropdown/dropdown.d.ts +71 -0
  58. package/lib/cjs/components/dropdown/dropdown.d.ts.map +1 -0
  59. package/lib/cjs/components/dropdown/index.d.ts +7 -0
  60. package/lib/cjs/components/dropdown/index.d.ts.map +1 -0
  61. package/lib/cjs/components/dropdown/types.d.ts +27 -0
  62. package/lib/cjs/components/dropdown/types.d.ts.map +1 -0
  63. package/lib/cjs/components/image-input/image-input.d.ts +42 -0
  64. package/lib/cjs/components/image-input/image-input.d.ts.map +1 -0
  65. package/lib/cjs/components/image-input/index.d.ts +7 -0
  66. package/lib/cjs/components/image-input/index.d.ts.map +1 -0
  67. package/lib/cjs/components/image-input/types.d.ts +12 -0
  68. package/lib/cjs/components/image-input/types.d.ts.map +1 -0
  69. package/lib/cjs/components/modal/index.d.ts +7 -0
  70. package/lib/cjs/components/modal/index.d.ts.map +1 -0
  71. package/lib/cjs/components/modal/modal.d.ts +45 -0
  72. package/lib/cjs/components/modal/modal.d.ts.map +1 -0
  73. package/lib/cjs/components/modal/types.d.ts +21 -0
  74. package/lib/cjs/components/modal/types.d.ts.map +1 -0
  75. package/lib/cjs/components/range-slider/index.d.ts +7 -0
  76. package/lib/cjs/components/range-slider/index.d.ts.map +1 -0
  77. package/lib/cjs/components/range-slider/index.js +10 -0
  78. package/lib/cjs/components/range-slider/index.js.map +1 -0
  79. package/lib/cjs/components/range-slider/range-slider.d.ts +42 -0
  80. package/lib/cjs/components/range-slider/range-slider.d.ts.map +1 -0
  81. package/lib/cjs/components/range-slider/range-slider.js +254 -0
  82. package/lib/cjs/components/range-slider/range-slider.js.map +1 -0
  83. package/lib/cjs/components/range-slider/types.d.ts +33 -0
  84. package/lib/cjs/components/range-slider/types.d.ts.map +1 -0
  85. package/lib/cjs/components/range-slider/types.js +7 -0
  86. package/lib/cjs/components/range-slider/types.js.map +1 -0
  87. package/lib/cjs/components/rating/index.d.ts +7 -0
  88. package/lib/cjs/components/rating/index.d.ts.map +1 -0
  89. package/lib/cjs/components/rating/index.js +10 -0
  90. package/lib/cjs/components/rating/index.js.map +1 -0
  91. package/lib/cjs/components/rating/rating.d.ts +31 -0
  92. package/lib/cjs/components/rating/rating.d.ts.map +1 -0
  93. package/lib/cjs/components/rating/rating.js +244 -0
  94. package/lib/cjs/components/rating/rating.js.map +1 -0
  95. package/lib/cjs/components/rating/types.d.ts +25 -0
  96. package/lib/cjs/components/rating/types.d.ts.map +1 -0
  97. package/lib/cjs/components/rating/types.js +7 -0
  98. package/lib/cjs/components/rating/types.js.map +1 -0
  99. package/lib/cjs/components/reparent/index.d.ts +7 -0
  100. package/lib/cjs/components/reparent/index.d.ts.map +1 -0
  101. package/lib/cjs/components/reparent/reparent.d.ts +25 -0
  102. package/lib/cjs/components/reparent/reparent.d.ts.map +1 -0
  103. package/lib/cjs/components/reparent/types.d.ts +13 -0
  104. package/lib/cjs/components/reparent/types.d.ts.map +1 -0
  105. package/lib/cjs/components/repeater/index.d.ts +7 -0
  106. package/lib/cjs/components/repeater/index.d.ts.map +1 -0
  107. package/lib/cjs/components/repeater/index.js +10 -0
  108. package/lib/cjs/components/repeater/index.js.map +1 -0
  109. package/lib/cjs/components/repeater/repeater.d.ts +33 -0
  110. package/lib/cjs/components/repeater/repeater.d.ts.map +1 -0
  111. package/lib/cjs/components/repeater/repeater.js +174 -0
  112. package/lib/cjs/components/repeater/repeater.js.map +1 -0
  113. package/lib/cjs/components/repeater/types.d.ts +18 -0
  114. package/lib/cjs/components/repeater/types.d.ts.map +1 -0
  115. package/lib/cjs/components/repeater/types.js +7 -0
  116. package/lib/cjs/components/repeater/types.js.map +1 -0
  117. package/lib/cjs/components/scrollable/index.d.ts +7 -0
  118. package/lib/cjs/components/scrollable/index.d.ts.map +1 -0
  119. package/lib/cjs/components/scrollable/scrollable.d.ts +37 -0
  120. package/lib/cjs/components/scrollable/scrollable.d.ts.map +1 -0
  121. package/lib/cjs/components/scrollable/types.d.ts +15 -0
  122. package/lib/cjs/components/scrollable/types.d.ts.map +1 -0
  123. package/lib/cjs/components/scrollspy/index.d.ts +7 -0
  124. package/lib/cjs/components/scrollspy/index.d.ts.map +1 -0
  125. package/lib/cjs/components/scrollspy/scrollspy.d.ts +35 -0
  126. package/lib/cjs/components/scrollspy/scrollspy.d.ts.map +1 -0
  127. package/lib/cjs/components/scrollspy/types.d.ts +14 -0
  128. package/lib/cjs/components/scrollspy/types.d.ts.map +1 -0
  129. package/lib/cjs/components/scrollto/index.d.ts +7 -0
  130. package/lib/cjs/components/scrollto/index.d.ts.map +1 -0
  131. package/lib/cjs/components/scrollto/scrollto.d.ts +28 -0
  132. package/lib/cjs/components/scrollto/scrollto.d.ts.map +1 -0
  133. package/lib/cjs/components/scrollto/types.d.ts +14 -0
  134. package/lib/cjs/components/scrollto/types.d.ts.map +1 -0
  135. package/lib/cjs/components/select/combobox.d.ts +52 -0
  136. package/lib/cjs/components/select/combobox.d.ts.map +1 -0
  137. package/lib/cjs/components/select/config.d.ts +105 -0
  138. package/lib/cjs/components/select/config.d.ts.map +1 -0
  139. package/lib/cjs/components/select/dropdown.d.ts +101 -0
  140. package/lib/cjs/components/select/dropdown.d.ts.map +1 -0
  141. package/lib/cjs/components/select/index.d.ts +13 -0
  142. package/lib/cjs/components/select/index.d.ts.map +1 -0
  143. package/lib/cjs/components/select/option.d.ts +23 -0
  144. package/lib/cjs/components/select/option.d.ts.map +1 -0
  145. package/lib/cjs/components/select/remote.d.ts +91 -0
  146. package/lib/cjs/components/select/remote.d.ts.map +1 -0
  147. package/lib/cjs/components/select/search.d.ts +67 -0
  148. package/lib/cjs/components/select/search.d.ts.map +1 -0
  149. package/lib/cjs/components/select/select.d.ts +427 -0
  150. package/lib/cjs/components/select/select.d.ts.map +1 -0
  151. package/lib/cjs/components/select/select.js +3 -0
  152. package/lib/cjs/components/select/select.js.map +1 -1
  153. package/lib/cjs/components/select/tags.d.ts +32 -0
  154. package/lib/cjs/components/select/tags.d.ts.map +1 -0
  155. package/lib/cjs/components/select/templates.d.ts +79 -0
  156. package/lib/cjs/components/select/templates.d.ts.map +1 -0
  157. package/lib/cjs/components/select/types.d.ts +23 -0
  158. package/lib/cjs/components/select/types.d.ts.map +1 -0
  159. package/lib/cjs/components/select/utils.d.ts +130 -0
  160. package/lib/cjs/components/select/utils.d.ts.map +1 -0
  161. package/lib/cjs/components/select/utils.js +3 -1
  162. package/lib/cjs/components/select/utils.js.map +1 -1
  163. package/lib/cjs/components/stepper/index.d.ts +7 -0
  164. package/lib/cjs/components/stepper/index.d.ts.map +1 -0
  165. package/lib/cjs/components/stepper/stepper.d.ts +53 -0
  166. package/lib/cjs/components/stepper/stepper.d.ts.map +1 -0
  167. package/lib/cjs/components/stepper/types.d.ts +12 -0
  168. package/lib/cjs/components/stepper/types.d.ts.map +1 -0
  169. package/lib/cjs/components/sticky/index.d.ts +7 -0
  170. package/lib/cjs/components/sticky/index.d.ts.map +1 -0
  171. package/lib/cjs/components/sticky/sticky.d.ts +51 -0
  172. package/lib/cjs/components/sticky/sticky.d.ts.map +1 -0
  173. package/lib/cjs/components/sticky/sticky.js +3 -1
  174. package/lib/cjs/components/sticky/sticky.js.map +1 -1
  175. package/lib/cjs/components/sticky/types.d.ts +28 -0
  176. package/lib/cjs/components/sticky/types.d.ts.map +1 -0
  177. package/lib/cjs/components/tabs/index.d.ts +7 -0
  178. package/lib/cjs/components/tabs/index.d.ts.map +1 -0
  179. package/lib/cjs/components/tabs/tabs.d.ts +38 -0
  180. package/lib/cjs/components/tabs/tabs.d.ts.map +1 -0
  181. package/lib/cjs/components/tabs/types.d.ts +12 -0
  182. package/lib/cjs/components/tabs/types.d.ts.map +1 -0
  183. package/lib/cjs/components/theme-switch/index.d.ts +7 -0
  184. package/lib/cjs/components/theme-switch/index.d.ts.map +1 -0
  185. package/lib/cjs/components/theme-switch/theme-switch.d.ts +33 -0
  186. package/lib/cjs/components/theme-switch/theme-switch.d.ts.map +1 -0
  187. package/lib/cjs/components/theme-switch/types.d.ts +13 -0
  188. package/lib/cjs/components/theme-switch/types.d.ts.map +1 -0
  189. package/lib/cjs/components/toast/index.d.ts +7 -0
  190. package/lib/cjs/components/toast/index.d.ts.map +1 -0
  191. package/lib/cjs/components/toast/toast.d.ts +76 -0
  192. package/lib/cjs/components/toast/toast.d.ts.map +1 -0
  193. package/lib/cjs/components/toast/types.d.ts +146 -0
  194. package/lib/cjs/components/toast/types.d.ts.map +1 -0
  195. package/lib/cjs/components/toggle/index.d.ts +7 -0
  196. package/lib/cjs/components/toggle/index.d.ts.map +1 -0
  197. package/lib/cjs/components/toggle/toggle.d.ts +31 -0
  198. package/lib/cjs/components/toggle/toggle.d.ts.map +1 -0
  199. package/lib/cjs/components/toggle/types.d.ts +17 -0
  200. package/lib/cjs/components/toggle/types.d.ts.map +1 -0
  201. package/lib/cjs/components/toggle-password/index.d.ts +7 -0
  202. package/lib/cjs/components/toggle-password/index.d.ts.map +1 -0
  203. package/lib/cjs/components/toggle-password/toggle-password.d.ts +32 -0
  204. package/lib/cjs/components/toggle-password/toggle-password.d.ts.map +1 -0
  205. package/lib/cjs/components/toggle-password/types.d.ts +12 -0
  206. package/lib/cjs/components/toggle-password/types.d.ts.map +1 -0
  207. package/lib/cjs/components/tooltip/index.d.ts +7 -0
  208. package/lib/cjs/components/tooltip/index.d.ts.map +1 -0
  209. package/lib/cjs/components/tooltip/tooltip.d.ts +46 -0
  210. package/lib/cjs/components/tooltip/tooltip.d.ts.map +1 -0
  211. package/lib/cjs/components/tooltip/types.d.ts +26 -0
  212. package/lib/cjs/components/tooltip/types.d.ts.map +1 -0
  213. package/lib/cjs/helpers/data.d.ts +13 -0
  214. package/lib/cjs/helpers/data.d.ts.map +1 -0
  215. package/lib/cjs/helpers/dom.d.ts +42 -0
  216. package/lib/cjs/helpers/dom.d.ts.map +1 -0
  217. package/lib/cjs/helpers/event-handler.d.ts +14 -0
  218. package/lib/cjs/helpers/event-handler.d.ts.map +1 -0
  219. package/lib/cjs/helpers/utils.d.ts +25 -0
  220. package/lib/cjs/helpers/utils.d.ts.map +1 -0
  221. package/lib/cjs/index.d.ts +122 -0
  222. package/lib/cjs/index.d.ts.map +1 -0
  223. package/lib/cjs/index.js +17 -1
  224. package/lib/cjs/index.js.map +1 -1
  225. package/lib/cjs/types.d.ts +17 -0
  226. package/lib/cjs/types.d.ts.map +1 -0
  227. package/lib/esm/components/accordion/accordion.d.ts +32 -0
  228. package/lib/esm/components/accordion/accordion.d.ts.map +1 -0
  229. package/lib/esm/components/accordion/index.d.ts +7 -0
  230. package/lib/esm/components/accordion/index.d.ts.map +1 -0
  231. package/lib/esm/components/accordion/types.d.ts +15 -0
  232. package/lib/esm/components/accordion/types.d.ts.map +1 -0
  233. package/lib/esm/components/clipboard/clipboard.d.ts +37 -0
  234. package/lib/esm/components/clipboard/clipboard.d.ts.map +1 -0
  235. package/lib/esm/components/clipboard/clipboard.js +399 -0
  236. package/lib/esm/components/clipboard/clipboard.js.map +1 -0
  237. package/lib/esm/components/clipboard/index.d.ts +3 -0
  238. package/lib/esm/components/clipboard/index.d.ts.map +1 -0
  239. package/lib/esm/components/clipboard/index.js +2 -0
  240. package/lib/esm/components/clipboard/index.js.map +1 -0
  241. package/lib/esm/components/clipboard/types.d.ts +44 -0
  242. package/lib/esm/components/clipboard/types.d.ts.map +1 -0
  243. package/lib/esm/components/clipboard/types.js +6 -0
  244. package/lib/esm/components/clipboard/types.js.map +1 -0
  245. package/lib/esm/components/collapse/collapse.d.ts +28 -0
  246. package/lib/esm/components/collapse/collapse.d.ts.map +1 -0
  247. package/lib/esm/components/collapse/index.d.ts +7 -0
  248. package/lib/esm/components/collapse/index.d.ts.map +1 -0
  249. package/lib/esm/components/collapse/types.d.ts +15 -0
  250. package/lib/esm/components/collapse/types.d.ts.map +1 -0
  251. package/lib/esm/components/component.d.ts +44 -0
  252. package/lib/esm/components/component.d.ts.map +1 -0
  253. package/lib/esm/components/constants.d.ts +6 -0
  254. package/lib/esm/components/constants.d.ts.map +1 -0
  255. package/lib/esm/components/datatable/datatable-checkbox.d.ts +16 -0
  256. package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -0
  257. package/lib/esm/components/datatable/datatable-sort.d.ts +16 -0
  258. package/lib/esm/components/datatable/datatable-sort.d.ts.map +1 -0
  259. package/lib/esm/components/datatable/datatable.d.ts +339 -0
  260. package/lib/esm/components/datatable/datatable.d.ts.map +1 -0
  261. package/lib/esm/components/datatable/datatable.js.map +1 -1
  262. package/lib/esm/components/datatable/index.d.ts +7 -0
  263. package/lib/esm/components/datatable/index.d.ts.map +1 -0
  264. package/lib/esm/components/datatable/types.d.ts +166 -0
  265. package/lib/esm/components/datatable/types.d.ts.map +1 -0
  266. package/lib/esm/components/dismiss/dismiss.d.ts +30 -0
  267. package/lib/esm/components/dismiss/dismiss.d.ts.map +1 -0
  268. package/lib/esm/components/dismiss/index.d.ts +7 -0
  269. package/lib/esm/components/dismiss/index.d.ts.map +1 -0
  270. package/lib/esm/components/dismiss/types.d.ts +15 -0
  271. package/lib/esm/components/dismiss/types.d.ts.map +1 -0
  272. package/lib/esm/components/drawer/drawer.d.ts +63 -0
  273. package/lib/esm/components/drawer/drawer.d.ts.map +1 -0
  274. package/lib/esm/components/drawer/index.d.ts +7 -0
  275. package/lib/esm/components/drawer/index.d.ts.map +1 -0
  276. package/lib/esm/components/drawer/types.d.ts +27 -0
  277. package/lib/esm/components/drawer/types.d.ts.map +1 -0
  278. package/lib/esm/components/dropdown/dropdown.d.ts +71 -0
  279. package/lib/esm/components/dropdown/dropdown.d.ts.map +1 -0
  280. package/lib/esm/components/dropdown/index.d.ts +7 -0
  281. package/lib/esm/components/dropdown/index.d.ts.map +1 -0
  282. package/lib/esm/components/dropdown/types.d.ts +27 -0
  283. package/lib/esm/components/dropdown/types.d.ts.map +1 -0
  284. package/lib/esm/components/image-input/image-input.d.ts +42 -0
  285. package/lib/esm/components/image-input/image-input.d.ts.map +1 -0
  286. package/lib/esm/components/image-input/index.d.ts +7 -0
  287. package/lib/esm/components/image-input/index.d.ts.map +1 -0
  288. package/lib/esm/components/image-input/types.d.ts +12 -0
  289. package/lib/esm/components/image-input/types.d.ts.map +1 -0
  290. package/lib/esm/components/modal/index.d.ts +7 -0
  291. package/lib/esm/components/modal/index.d.ts.map +1 -0
  292. package/lib/esm/components/modal/modal.d.ts +45 -0
  293. package/lib/esm/components/modal/modal.d.ts.map +1 -0
  294. package/lib/esm/components/modal/types.d.ts +21 -0
  295. package/lib/esm/components/modal/types.d.ts.map +1 -0
  296. package/lib/esm/components/range-slider/index.d.ts +7 -0
  297. package/lib/esm/components/range-slider/index.d.ts.map +1 -0
  298. package/lib/esm/components/range-slider/index.js +6 -0
  299. package/lib/esm/components/range-slider/index.js.map +1 -0
  300. package/lib/esm/components/range-slider/range-slider.d.ts +42 -0
  301. package/lib/esm/components/range-slider/range-slider.d.ts.map +1 -0
  302. package/lib/esm/components/range-slider/range-slider.js +251 -0
  303. package/lib/esm/components/range-slider/range-slider.js.map +1 -0
  304. package/lib/esm/components/range-slider/types.d.ts +33 -0
  305. package/lib/esm/components/range-slider/types.d.ts.map +1 -0
  306. package/lib/esm/components/range-slider/types.js +6 -0
  307. package/lib/esm/components/range-slider/types.js.map +1 -0
  308. package/lib/esm/components/rating/index.d.ts +7 -0
  309. package/lib/esm/components/rating/index.d.ts.map +1 -0
  310. package/lib/esm/components/rating/index.js +6 -0
  311. package/lib/esm/components/rating/index.js.map +1 -0
  312. package/lib/esm/components/rating/rating.d.ts +31 -0
  313. package/lib/esm/components/rating/rating.d.ts.map +1 -0
  314. package/lib/esm/components/rating/rating.js +241 -0
  315. package/lib/esm/components/rating/rating.js.map +1 -0
  316. package/lib/esm/components/rating/types.d.ts +25 -0
  317. package/lib/esm/components/rating/types.d.ts.map +1 -0
  318. package/lib/esm/components/rating/types.js +6 -0
  319. package/lib/esm/components/rating/types.js.map +1 -0
  320. package/lib/esm/components/reparent/index.d.ts +7 -0
  321. package/lib/esm/components/reparent/index.d.ts.map +1 -0
  322. package/lib/esm/components/reparent/reparent.d.ts +25 -0
  323. package/lib/esm/components/reparent/reparent.d.ts.map +1 -0
  324. package/lib/esm/components/reparent/types.d.ts +13 -0
  325. package/lib/esm/components/reparent/types.d.ts.map +1 -0
  326. package/lib/esm/components/repeater/index.d.ts +7 -0
  327. package/lib/esm/components/repeater/index.d.ts.map +1 -0
  328. package/lib/esm/components/repeater/index.js +6 -0
  329. package/lib/esm/components/repeater/index.js.map +1 -0
  330. package/lib/esm/components/repeater/repeater.d.ts +33 -0
  331. package/lib/esm/components/repeater/repeater.d.ts.map +1 -0
  332. package/lib/esm/components/repeater/repeater.js +171 -0
  333. package/lib/esm/components/repeater/repeater.js.map +1 -0
  334. package/lib/esm/components/repeater/types.d.ts +18 -0
  335. package/lib/esm/components/repeater/types.d.ts.map +1 -0
  336. package/lib/esm/components/repeater/types.js +6 -0
  337. package/lib/esm/components/repeater/types.js.map +1 -0
  338. package/lib/esm/components/scrollable/index.d.ts +7 -0
  339. package/lib/esm/components/scrollable/index.d.ts.map +1 -0
  340. package/lib/esm/components/scrollable/scrollable.d.ts +37 -0
  341. package/lib/esm/components/scrollable/scrollable.d.ts.map +1 -0
  342. package/lib/esm/components/scrollable/types.d.ts +15 -0
  343. package/lib/esm/components/scrollable/types.d.ts.map +1 -0
  344. package/lib/esm/components/scrollspy/index.d.ts +7 -0
  345. package/lib/esm/components/scrollspy/index.d.ts.map +1 -0
  346. package/lib/esm/components/scrollspy/scrollspy.d.ts +35 -0
  347. package/lib/esm/components/scrollspy/scrollspy.d.ts.map +1 -0
  348. package/lib/esm/components/scrollspy/types.d.ts +14 -0
  349. package/lib/esm/components/scrollspy/types.d.ts.map +1 -0
  350. package/lib/esm/components/scrollto/index.d.ts +7 -0
  351. package/lib/esm/components/scrollto/index.d.ts.map +1 -0
  352. package/lib/esm/components/scrollto/scrollto.d.ts +28 -0
  353. package/lib/esm/components/scrollto/scrollto.d.ts.map +1 -0
  354. package/lib/esm/components/scrollto/types.d.ts +14 -0
  355. package/lib/esm/components/scrollto/types.d.ts.map +1 -0
  356. package/lib/esm/components/select/combobox.d.ts +52 -0
  357. package/lib/esm/components/select/combobox.d.ts.map +1 -0
  358. package/lib/esm/components/select/config.d.ts +105 -0
  359. package/lib/esm/components/select/config.d.ts.map +1 -0
  360. package/lib/esm/components/select/dropdown.d.ts +101 -0
  361. package/lib/esm/components/select/dropdown.d.ts.map +1 -0
  362. package/lib/esm/components/select/index.d.ts +13 -0
  363. package/lib/esm/components/select/index.d.ts.map +1 -0
  364. package/lib/esm/components/select/option.d.ts +23 -0
  365. package/lib/esm/components/select/option.d.ts.map +1 -0
  366. package/lib/esm/components/select/remote.d.ts +91 -0
  367. package/lib/esm/components/select/remote.d.ts.map +1 -0
  368. package/lib/esm/components/select/search.d.ts +67 -0
  369. package/lib/esm/components/select/search.d.ts.map +1 -0
  370. package/lib/esm/components/select/select.d.ts +427 -0
  371. package/lib/esm/components/select/select.d.ts.map +1 -0
  372. package/lib/esm/components/select/select.js +3 -0
  373. package/lib/esm/components/select/select.js.map +1 -1
  374. package/lib/esm/components/select/tags.d.ts +32 -0
  375. package/lib/esm/components/select/tags.d.ts.map +1 -0
  376. package/lib/esm/components/select/templates.d.ts +79 -0
  377. package/lib/esm/components/select/templates.d.ts.map +1 -0
  378. package/lib/esm/components/select/types.d.ts +23 -0
  379. package/lib/esm/components/select/types.d.ts.map +1 -0
  380. package/lib/esm/components/select/utils.d.ts +130 -0
  381. package/lib/esm/components/select/utils.d.ts.map +1 -0
  382. package/lib/esm/components/select/utils.js +3 -1
  383. package/lib/esm/components/select/utils.js.map +1 -1
  384. package/lib/esm/components/stepper/index.d.ts +7 -0
  385. package/lib/esm/components/stepper/index.d.ts.map +1 -0
  386. package/lib/esm/components/stepper/stepper.d.ts +53 -0
  387. package/lib/esm/components/stepper/stepper.d.ts.map +1 -0
  388. package/lib/esm/components/stepper/types.d.ts +12 -0
  389. package/lib/esm/components/stepper/types.d.ts.map +1 -0
  390. package/lib/esm/components/sticky/index.d.ts +7 -0
  391. package/lib/esm/components/sticky/index.d.ts.map +1 -0
  392. package/lib/esm/components/sticky/sticky.d.ts +51 -0
  393. package/lib/esm/components/sticky/sticky.d.ts.map +1 -0
  394. package/lib/esm/components/sticky/sticky.js +3 -1
  395. package/lib/esm/components/sticky/sticky.js.map +1 -1
  396. package/lib/esm/components/sticky/types.d.ts +28 -0
  397. package/lib/esm/components/sticky/types.d.ts.map +1 -0
  398. package/lib/esm/components/tabs/index.d.ts +7 -0
  399. package/lib/esm/components/tabs/index.d.ts.map +1 -0
  400. package/lib/esm/components/tabs/tabs.d.ts +38 -0
  401. package/lib/esm/components/tabs/tabs.d.ts.map +1 -0
  402. package/lib/esm/components/tabs/types.d.ts +12 -0
  403. package/lib/esm/components/tabs/types.d.ts.map +1 -0
  404. package/lib/esm/components/theme-switch/index.d.ts +7 -0
  405. package/lib/esm/components/theme-switch/index.d.ts.map +1 -0
  406. package/lib/esm/components/theme-switch/theme-switch.d.ts +33 -0
  407. package/lib/esm/components/theme-switch/theme-switch.d.ts.map +1 -0
  408. package/lib/esm/components/theme-switch/types.d.ts +13 -0
  409. package/lib/esm/components/theme-switch/types.d.ts.map +1 -0
  410. package/lib/esm/components/toast/index.d.ts +7 -0
  411. package/lib/esm/components/toast/index.d.ts.map +1 -0
  412. package/lib/esm/components/toast/toast.d.ts +76 -0
  413. package/lib/esm/components/toast/toast.d.ts.map +1 -0
  414. package/lib/esm/components/toast/types.d.ts +146 -0
  415. package/lib/esm/components/toast/types.d.ts.map +1 -0
  416. package/lib/esm/components/toggle/index.d.ts +7 -0
  417. package/lib/esm/components/toggle/index.d.ts.map +1 -0
  418. package/lib/esm/components/toggle/toggle.d.ts +31 -0
  419. package/lib/esm/components/toggle/toggle.d.ts.map +1 -0
  420. package/lib/esm/components/toggle/types.d.ts +17 -0
  421. package/lib/esm/components/toggle/types.d.ts.map +1 -0
  422. package/lib/esm/components/toggle-password/index.d.ts +7 -0
  423. package/lib/esm/components/toggle-password/index.d.ts.map +1 -0
  424. package/lib/esm/components/toggle-password/toggle-password.d.ts +32 -0
  425. package/lib/esm/components/toggle-password/toggle-password.d.ts.map +1 -0
  426. package/lib/esm/components/toggle-password/types.d.ts +12 -0
  427. package/lib/esm/components/toggle-password/types.d.ts.map +1 -0
  428. package/lib/esm/components/tooltip/index.d.ts +7 -0
  429. package/lib/esm/components/tooltip/index.d.ts.map +1 -0
  430. package/lib/esm/components/tooltip/tooltip.d.ts +46 -0
  431. package/lib/esm/components/tooltip/tooltip.d.ts.map +1 -0
  432. package/lib/esm/components/tooltip/types.d.ts +26 -0
  433. package/lib/esm/components/tooltip/types.d.ts.map +1 -0
  434. package/lib/esm/helpers/data.d.ts +13 -0
  435. package/lib/esm/helpers/data.d.ts.map +1 -0
  436. package/lib/esm/helpers/dom.d.ts +42 -0
  437. package/lib/esm/helpers/dom.d.ts.map +1 -0
  438. package/lib/esm/helpers/event-handler.d.ts +14 -0
  439. package/lib/esm/helpers/event-handler.d.ts.map +1 -0
  440. package/lib/esm/helpers/utils.d.ts +25 -0
  441. package/lib/esm/helpers/utils.d.ts.map +1 -0
  442. package/lib/esm/index.d.ts +122 -0
  443. package/lib/esm/index.d.ts.map +1 -0
  444. package/lib/esm/index.js +12 -0
  445. package/lib/esm/index.js.map +1 -1
  446. package/lib/esm/types.d.ts +17 -0
  447. package/lib/esm/types.d.ts.map +1 -0
  448. package/package.json +4 -4
  449. package/skills/ktui-components/SKILL.md +41 -0
  450. package/skills/ktui-theming/SKILL.md +50 -0
  451. package/src/components/clipboard/__tests__/clipboard.test.ts +438 -0
  452. package/src/components/clipboard/clipboard.ts +416 -0
  453. package/src/components/clipboard/index.ts +2 -0
  454. package/src/components/clipboard/types.ts +51 -0
  455. package/src/components/datatable/__tests__/currency-sort.test.ts +2 -10
  456. package/src/components/datatable/__tests__/multi-row-headers.test.ts +2 -2
  457. package/src/components/datatable/__tests__/race-conditions.test.ts +11 -14
  458. package/src/components/datatable/datatable.ts +3 -5
  459. package/src/components/input/input-group.css +15 -5
  460. package/src/components/range-slider/__tests__/range-slider.test.ts +659 -0
  461. package/src/components/range-slider/index.ts +11 -0
  462. package/src/components/range-slider/range-slider.ts +276 -0
  463. package/src/components/range-slider/types.ts +36 -0
  464. package/src/components/rating/__tests__/rating.test.ts +241 -0
  465. package/src/components/rating/index.ts +11 -0
  466. package/src/components/rating/rating.css +11 -0
  467. package/src/components/rating/rating.ts +245 -0
  468. package/src/components/rating/types.ts +27 -0
  469. package/src/components/repeater/__tests__/repeater.test.ts +321 -0
  470. package/src/components/repeater/index.ts +7 -0
  471. package/src/components/repeater/repeater.ts +181 -0
  472. package/src/components/repeater/types.ts +19 -0
  473. package/src/components/select/__tests__/ux-behaviors.test.ts +21 -3
  474. package/src/components/select/select.ts +4 -0
  475. package/src/components/select/utils.ts +5 -1
  476. package/src/components/sticky/__tests__/sticky.test.ts +10 -3
  477. package/src/components/sticky/sticky.ts +14 -24
  478. package/src/components/sticky/types.ts +3 -3
  479. package/src/index.ts +125 -0
  480. package/styles.css +1 -0
  481. package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js +0 -596
  482. package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js.map +0 -1
  483. package/lib/cjs/components/datatable/__tests__/race-conditions.test.js +0 -548
  484. package/lib/cjs/components/datatable/__tests__/race-conditions.test.js.map +0 -1
  485. package/lib/cjs/components/datatable/__tests__/setup.js +0 -63
  486. package/lib/cjs/components/datatable/__tests__/setup.js.map +0 -1
  487. package/lib/esm/components/datatable/__tests__/pagination-reset.test.js +0 -594
  488. package/lib/esm/components/datatable/__tests__/pagination-reset.test.js.map +0 -1
  489. package/lib/esm/components/datatable/__tests__/race-conditions.test.js +0 -546
  490. package/lib/esm/components/datatable/__tests__/race-conditions.test.js.map +0 -1
  491. package/lib/esm/components/datatable/__tests__/setup.js +0 -58
  492. package/lib/esm/components/datatable/__tests__/setup.js.map +0 -1
package/lib/esm/index.js CHANGED
@@ -24,6 +24,10 @@ import { KTTogglePassword } from './components/toggle-password';
24
24
  import { KTDataTable } from './components/datatable';
25
25
  import { KTSelect } from './components/select';
26
26
  import { KTToast } from './components/toast';
27
+ import { KTRating } from './components/rating';
28
+ import { KTRepeater } from './components/repeater';
29
+ import { KTClipboard } from './components/clipboard';
30
+ import { KTRangeSlider } from './components/range-slider';
27
31
  export { KTDropdown } from './components/dropdown';
28
32
  export { KTModal } from './components/modal';
29
33
  export { KTDrawer } from './components/drawer';
@@ -45,6 +49,10 @@ export { KTTogglePassword } from './components/toggle-password';
45
49
  export { KTDataTable } from './components/datatable';
46
50
  export { KTSelect } from './components/select';
47
51
  export { KTToast } from './components/toast';
52
+ export { KTRating } from './components/rating';
53
+ export { KTRepeater } from './components/repeater';
54
+ export { KTClipboard } from './components/clipboard';
55
+ export { KTRangeSlider } from './components/range-slider';
48
56
  var KTComponents = {
49
57
  init: function () {
50
58
  KTDropdown.init();
@@ -68,6 +76,10 @@ var KTComponents = {
68
76
  KTDataTable.init();
69
77
  KTSelect.init();
70
78
  KTToast.init();
79
+ KTRating.init();
80
+ KTRepeater.init();
81
+ KTClipboard.init();
82
+ KTRangeSlider.init();
71
83
  },
72
84
  };
73
85
  export default KTComponents;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ */
5
+ export declare type KTCallableType = (event?: Event, target?: HTMLElement) => void | boolean;
6
+ export declare type KTViewPortType = {
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export declare type KTOffsetType = {
11
+ top: number;
12
+ left: number;
13
+ right: number;
14
+ bottom: number;
15
+ };
16
+ export declare type KTOptionType = string | number | boolean | object;
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,OAAO,MAAM,cAAc,GAAG,CACpC,KAAK,CAAC,EAAE,KAAK,EACb,MAAM,CAAC,EAAE,WAAW,KAChB,IAAI,GAAG,OAAO,CAAC;AAEpB,MAAM,CAAC,OAAO,MAAM,cAAc,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@keenthemes/ktui",
3
- "version": "1.1.6",
3
+ "version": "1.2.1",
4
4
  "description": "Free & Open-Source Tailwind UI Components by Keenthemes",
5
5
  "homepage": "https://ktui.io",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/keenthemes/ktui.git"
8
+ "url": "git+https://github.com/keenthemes/ktui.git"
9
9
  },
10
10
  "keywords": [
11
11
  "reui",
@@ -61,6 +61,7 @@
61
61
  "lib",
62
62
  "src",
63
63
  "styles",
64
+ "skills",
64
65
  "styles.css",
65
66
  "package.json",
66
67
  "README.md",
@@ -75,7 +76,7 @@
75
76
  "build:webpack": "webpack --mode=development",
76
77
  "build:webpack:watch": "webpack --env watch=true --mode=development",
77
78
  "build:prod": "webpack --env production --mode=production",
78
- "build:lib": "tsc --outDir lib/cjs && tsc -m es6 --outDir lib/esm",
79
+ "build:lib": "tsc -p tsconfig.lib.json --outDir lib/cjs && tsc -p tsconfig.lib.json -m es6 --outDir lib/esm",
79
80
  "build:css": "npx @tailwindcss/cli -i ./styles/main.css -o ./dist/styles.css --watch",
80
81
  "build:css:once": "npx @tailwindcss/cli -i ./styles/main.css -o ./dist/styles.css",
81
82
  "dev": "concurrently \"npm run build:webpack:watch\" \"npm run build:css\"",
@@ -119,7 +120,6 @@
119
120
  "@popperjs/core": "^2.11.8"
120
121
  },
121
122
  "overrides": {
122
- "ajv": "^8.0.0",
123
123
  "minimatch": "^10.2.3",
124
124
  "rollup": "^4.59.0",
125
125
  "serialize-javascript": "^7.0.3",
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: ktui-components
3
+ description: Guides correct use of KtUI (Keenthemes Tailwind UI) components—imports from @keenthemes/ktui, init pattern, and docs. Use this skill when building UI with KtUI, adding or customizing KtUI components, or when the user mentions KtUI, ktui, Keenthemes components, or Tailwind UI components from Keenthemes.
4
+ ---
5
+
6
+ # KtUI Components
7
+
8
+ Use this skill when working with [KtUI](https://ktui.io)—free Tailwind UI components by Keenthemes. It ensures correct package usage, initialization, and reference to official docs.
9
+
10
+ ## Package and imports
11
+
12
+ - **Package:** `@keenthemes/ktui` (npm install `@keenthemes/ktui`).
13
+ - **Import pattern (ESM):** Import components and/or the init helper from the package root:
14
+ - Single component: `import { KTModal } from '@keenthemes/ktui';`
15
+ - Init all: `import { KTComponents } from '@keenthemes/ktui';` then call `KTComponents.init()` after DOM ready.
16
+ - **Types (TypeScript):** Types are exported from the same entry; use the package root (e.g. `@keenthemes/ktui`) for types, not deep `lib/esm` paths.
17
+ - **Styles:** Include KtUI CSS (e.g. from the package or built `dist/styles.css`) and ensure Tailwind and CSS variables are set up as in the [installation docs](https://ktui.io/docs/getting-started/installation).
18
+
19
+ ## Initialization
20
+
21
+ - Call `KTComponents.init()` once after the DOM is ready so that data-attribute–driven components (dropdowns, modals, tabs, etc.) are initialized.
22
+ - **Frameworks (React, Vue, Next):** Run init after the root is mounted (e.g. `useEffect` with empty deps, or `onMounted`) so the DOM with `data-kt-*` attributes exists before init.
23
+ - For dynamically added markup (e.g. after route change or lazy load), run `KTComponents.init()` again or use per-component init (e.g. `KTModal.init()` on the new container).
24
+ - **SSR:** Call init only on the client (e.g. inside `useEffect` or when `typeof document !== 'undefined'`), never during server render.
25
+ - Per-component init is also available (e.g. `KTModal.init()`) when not using the full init.
26
+
27
+ ## Documentation
28
+
29
+ - **Official docs:** [https://ktui.io](https://ktui.io) — use for component APIs, examples, and markup.
30
+ - **Doc paths:** Getting started: `ktui.io/docs/installation`, `ktui.io/docs/theming`, `ktui.io/docs/typescript`, `ktui.io/docs/dark-mode`, `ktui.io/docs/rtl`, `ktui.io/docs/changelog`. Components: `ktui.io/docs/<component>` (e.g. `ktui.io/docs/modal`, `ktui.io/docs/tooltip`, `ktui.io/docs/datatable`, `ktui.io/docs/dropdown`, `ktui.io/docs/repeater`).
31
+ - Prefer docs and examples from ktui.io over inferring markup or options.
32
+
33
+ ## Common pitfalls
34
+
35
+ - **Components not opening or reacting:** Ensure `KTComponents.init()` ran after the relevant DOM was in the page; for SPAs, run init after navigation or after injecting KtUI markup.
36
+ - **Styles missing or wrong:** Confirm KtUI CSS and CSS variables are loaded (see [installation](https://ktui.io/docs/installation), [theming](https://ktui.io/docs/theming)).
37
+ - **SSR/hydration:** Do not call init during server render; run it only in the browser after mount.
38
+
39
+ ## Component list (reference)
40
+
41
+ Components exported from `@keenthemes/ktui` include: KTDropdown, KTModal, KTDrawer, KTCollapse, KTDismiss, KTTabs, KTAccordion, KTScrollspy, KTScrollable, KTScrollto, KTSticky, KTReparent, KTToggle, KTTooltip, KTStepper, KTThemeSwitch, KTImageInput, KTTogglePassword, KTDataTable, KTSelect, KTToast, KTRating, KTRepeater. See the package exports or ktui.io for the full list and usage.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: ktui-theming
3
+ description: Guides KtUI theming with CSS variables, light/dark mode, and semantic colors. Use this skill when the user asks about KtUI colors, theme, dark mode, customizing appearance, or CSS variables for KtUI.
4
+ ---
5
+
6
+ # KtUI Theming
7
+
8
+ Use this skill when working with [KtUI](https://ktui.io) theming—colors, dark mode, and custom appearance. KtUI uses CSS variables and a background/foreground convention; prefer these over inventing custom classes.
9
+
10
+ ## Convention
11
+
12
+ - **Background/foreground:** KtUI follows a Shadcn-inspired convention. Background colors omit the `-background` suffix (e.g. `bg-primary` uses `var(--primary)`). Foreground colors use `-foreground` (e.g. `text-primary-foreground`).
13
+ - **Semantic classes:** Use KtUI semantic utilities (e.g. `bg-background`, `text-foreground`, `bg-primary`, `text-card`, `kt-btn`, `kt-card`) so theming stays consistent.
14
+
15
+ ## Key CSS variables
16
+
17
+ Define or override in your Tailwind entry (e.g. `style.css`). KtUI expects at least:
18
+
19
+ - **Surfaces:** `--background`, `--foreground`; `--card`, `--card-foreground`; `--popover`, `--popover-foreground`.
20
+ - **Brand:** `--primary`, `--primary-foreground`; `--secondary`, `--secondary-foreground`.
21
+ - **Muted / accent:** `--muted`, `--muted-foreground`; `--accent`, `--accent-foreground`.
22
+ - **Destructive:** `--destructive`, `--destructive-foreground`.
23
+ - **Borders and inputs:** `--border`, `--input`, `--ring`.
24
+ - **Radius:** `--radius` (e.g. `0.5rem`).
25
+
26
+ Use `oklch()` or any valid CSS color. Example:
27
+
28
+ ```css
29
+ :root {
30
+ --background: oklch(1 0 0);
31
+ --foreground: oklch(14.1% 0.005 285.823);
32
+ --primary: oklch(62.3% 0.214 259.815);
33
+ --primary-foreground: oklch(1 0 0);
34
+ --radius: 0.5rem;
35
+ }
36
+ ```
37
+
38
+ ## Dark mode
39
+
40
+ - **Variables:** Override the same variables under a `.dark` scope (or your dark-mode class). KtUI docs use `.dark` for dark theme.
41
+ - **Tailwind:** Add the dark variant, e.g. `@custom-variant dark (&:is(.dark *));` in your Tailwind entry so utilities like `dark:bg-background` work.
42
+ - **Theme switch:** Use the KTThemeSwitch component or toggle the `.dark` class on `<html>` (or a wrapper) to switch between light and dark variables.
43
+
44
+ ## Documentation
45
+
46
+ - **Theming:** [ktui.io/docs/theming](https://ktui.io/docs/theming)
47
+ - **Dark mode:** [ktui.io/docs/dark-mode](https://ktui.io/docs/dark-mode)
48
+ - **Installation** (variables setup): [ktui.io/docs/installation](https://ktui.io/docs/installation)
49
+
50
+ Prefer the official variable list and examples from these pages over guessing variable names or values.
@@ -0,0 +1,438 @@
1
+ /**
2
+ * Tests for KTClipboard component
3
+ */
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { KTClipboard } from '../clipboard';
6
+
7
+ function flushPromises() {
8
+ return new Promise<void>((resolve) => {
9
+ setTimeout(() => resolve(), 0);
10
+ });
11
+ }
12
+
13
+ function createFixture(options?: {
14
+ withPredefinedText?: boolean;
15
+ predefinedTextValue?: string;
16
+ predefinedTextAttributeEmpty?: boolean;
17
+ action?: 'copy' | 'cut';
18
+ withTarget?: boolean;
19
+ targetExists?: boolean;
20
+ targetType?: 'input' | 'textarea' | 'div';
21
+ targetValue?: string;
22
+ targetTextContent?: string;
23
+ }) {
24
+ document.body.innerHTML = '';
25
+
26
+ const targetType = options?.targetType ?? 'input';
27
+ const targetId = 'kt-clipboard-target';
28
+ const targetExists = options?.targetExists ?? true;
29
+
30
+ const container = document.createElement('div');
31
+
32
+ const trigger = document.createElement('button');
33
+ trigger.type = 'button';
34
+ trigger.setAttribute('data-kt-clipboard', 'true');
35
+
36
+ if (options?.action) {
37
+ trigger.setAttribute('data-kt-clipboard-action', options.action);
38
+ }
39
+
40
+ if (options?.withTarget) {
41
+ trigger.setAttribute('data-kt-clipboard-target', `#${targetId}`);
42
+ }
43
+
44
+ if (options?.withPredefinedText) {
45
+ if (options.predefinedTextAttributeEmpty) {
46
+ trigger.setAttribute('data-kt-clipboard-text', '');
47
+ } else {
48
+ trigger.setAttribute(
49
+ 'data-kt-clipboard-text',
50
+ options.predefinedTextValue ?? '',
51
+ );
52
+ }
53
+ }
54
+
55
+ trigger.textContent = 'Copy';
56
+ container.appendChild(trigger);
57
+
58
+ if (targetExists && options?.withTarget) {
59
+ if (targetType === 'input') {
60
+ const input = document.createElement('input');
61
+ input.id = targetId;
62
+ input.value = options?.targetValue ?? 'input value';
63
+ container.appendChild(input);
64
+ } else if (targetType === 'textarea') {
65
+ const textarea = document.createElement('textarea');
66
+ textarea.id = targetId;
67
+ textarea.value = options?.targetValue ?? 'textarea value';
68
+ container.appendChild(textarea);
69
+ } else {
70
+ const div = document.createElement('div');
71
+ div.id = targetId;
72
+ div.textContent = options?.targetTextContent ?? 'div text';
73
+ container.appendChild(div);
74
+ }
75
+ }
76
+
77
+ document.body.appendChild(container);
78
+
79
+ return { container, trigger };
80
+ }
81
+
82
+ describe('KTClipboard', () => {
83
+ let originalExecCommand: any;
84
+
85
+ beforeEach(() => {
86
+ // Ensure a clean clipboard state between tests.
87
+ originalExecCommand = document.execCommand;
88
+ });
89
+
90
+ afterEach(() => {
91
+ document.body.innerHTML = '';
92
+ // Restore execCommand (if it was replaced).
93
+ document.execCommand = originalExecCommand as any;
94
+ });
95
+
96
+ it('copies predefined text (text wins over target)', async () => {
97
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
98
+ Object.defineProperty(navigator, 'clipboard', {
99
+ value: { writeText: writeTextMock },
100
+ configurable: true,
101
+ });
102
+
103
+ const { trigger } = createFixture({
104
+ withPredefinedText: true,
105
+ predefinedTextValue: 'hello',
106
+ withTarget: true,
107
+ targetExists: false, // target selector is missing; text must still win
108
+ action: 'copy',
109
+ });
110
+
111
+ const successEvents: CustomEvent[] = [];
112
+ trigger.addEventListener('kt.clipboard.success', (e) =>
113
+ successEvents.push(e as CustomEvent),
114
+ );
115
+ const errorEvents: CustomEvent[] = [];
116
+ trigger.addEventListener('kt.clipboard.error', (e) =>
117
+ errorEvents.push(e as CustomEvent),
118
+ );
119
+
120
+ new KTClipboard(trigger);
121
+ trigger.click();
122
+
123
+ await flushPromises();
124
+
125
+ expect(writeTextMock).toHaveBeenCalledTimes(1);
126
+ expect(writeTextMock).toHaveBeenCalledWith('hello');
127
+ expect(successEvents.length).toBe(1);
128
+ expect(errorEvents.length).toBe(0);
129
+ });
130
+
131
+ it('falls back to execCommand when Clipboard API is unavailable', async () => {
132
+ Object.defineProperty(navigator, 'clipboard', {
133
+ value: undefined,
134
+ configurable: true,
135
+ });
136
+
137
+ const execCommandMock = vi.fn().mockReturnValue(true);
138
+ document.execCommand = execCommandMock as any;
139
+
140
+ const { trigger } = createFixture({
141
+ withPredefinedText: true,
142
+ predefinedTextValue: 'fallback text',
143
+ action: 'copy',
144
+ });
145
+
146
+ const successEvents: CustomEvent[] = [];
147
+ trigger.addEventListener('kt.clipboard.success', (e) =>
148
+ successEvents.push(e as CustomEvent),
149
+ );
150
+
151
+ new KTClipboard(trigger);
152
+ trigger.click();
153
+ await flushPromises();
154
+
155
+ expect(execCommandMock).toHaveBeenCalledWith('copy');
156
+ expect(successEvents.length).toBe(1);
157
+ });
158
+
159
+ it('dispatches error if fallback execCommand fails', async () => {
160
+ Object.defineProperty(navigator, 'clipboard', {
161
+ value: undefined,
162
+ configurable: true,
163
+ });
164
+
165
+ const execCommandMock = vi.fn().mockReturnValue(false);
166
+ document.execCommand = execCommandMock as any;
167
+
168
+ const { trigger } = createFixture({
169
+ withPredefinedText: true,
170
+ predefinedTextValue: 'will fail',
171
+ action: 'copy',
172
+ });
173
+
174
+ const errorEvents: CustomEvent[] = [];
175
+ trigger.addEventListener('kt.clipboard.error', (e) =>
176
+ errorEvents.push(e as CustomEvent),
177
+ );
178
+
179
+ new KTClipboard(trigger);
180
+ trigger.click();
181
+ await flushPromises();
182
+
183
+ expect(execCommandMock).toHaveBeenCalledWith('copy');
184
+ expect(errorEvents.length).toBe(1);
185
+ });
186
+
187
+ it('dispatches error when data-kt-clipboard-text attribute is present but empty (and ignores target)', async () => {
188
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
189
+ Object.defineProperty(navigator, 'clipboard', {
190
+ value: { writeText: writeTextMock },
191
+ configurable: true,
192
+ });
193
+
194
+ const { trigger } = createFixture({
195
+ withPredefinedText: true,
196
+ predefinedTextAttributeEmpty: true,
197
+ withTarget: true,
198
+ targetType: 'input',
199
+ targetValue: 'should not be used',
200
+ action: 'copy',
201
+ });
202
+
203
+ const successEvents: CustomEvent[] = [];
204
+ trigger.addEventListener('kt.clipboard.success', (e) =>
205
+ successEvents.push(e as CustomEvent),
206
+ );
207
+ const errorEvents: CustomEvent[] = [];
208
+ trigger.addEventListener('kt.clipboard.error', (e) =>
209
+ errorEvents.push(e as CustomEvent),
210
+ );
211
+
212
+ new KTClipboard(trigger);
213
+ trigger.click();
214
+ await flushPromises();
215
+
216
+ expect(writeTextMock).not.toHaveBeenCalled();
217
+ expect(successEvents.length).toBe(0);
218
+ expect(errorEvents.length).toBe(1);
219
+ });
220
+
221
+ it('dispatches error when Clipboard API writeText rejects', async () => {
222
+ const writeTextMock = vi
223
+ .fn()
224
+ .mockRejectedValue(new Error('NotAllowedError: permission denied'));
225
+ Object.defineProperty(navigator, 'clipboard', {
226
+ value: { writeText: writeTextMock },
227
+ configurable: true,
228
+ });
229
+
230
+ const { trigger } = createFixture({
231
+ withPredefinedText: true,
232
+ predefinedTextValue: 'hello',
233
+ action: 'copy',
234
+ });
235
+
236
+ const errorEvents: CustomEvent[] = [];
237
+ trigger.addEventListener('kt.clipboard.error', (e) =>
238
+ errorEvents.push(e as CustomEvent),
239
+ );
240
+
241
+ new KTClipboard(trigger);
242
+ trigger.click();
243
+ await flushPromises();
244
+
245
+ expect(writeTextMock).toHaveBeenCalledTimes(1);
246
+ expect(errorEvents.length).toBe(1);
247
+ });
248
+
249
+ it('dispatches error for cut with predefined text when target is missing', async () => {
250
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
251
+ Object.defineProperty(navigator, 'clipboard', {
252
+ value: { writeText: writeTextMock },
253
+ configurable: true,
254
+ });
255
+
256
+ const { trigger } = createFixture({
257
+ withPredefinedText: true,
258
+ predefinedTextValue: 'hello',
259
+ withTarget: false,
260
+ action: 'cut',
261
+ });
262
+
263
+ const errorEvents: CustomEvent[] = [];
264
+ trigger.addEventListener('kt.clipboard.error', (e) =>
265
+ errorEvents.push(e as CustomEvent),
266
+ );
267
+
268
+ new KTClipboard(trigger);
269
+ trigger.click();
270
+ await flushPromises();
271
+
272
+ expect(writeTextMock).not.toHaveBeenCalled();
273
+ expect(errorEvents.length).toBe(1);
274
+ });
275
+
276
+ it('copies from input target value', async () => {
277
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
278
+ Object.defineProperty(navigator, 'clipboard', {
279
+ value: { writeText: writeTextMock },
280
+ configurable: true,
281
+ });
282
+
283
+ const { trigger } = createFixture({
284
+ withPredefinedText: false,
285
+ withTarget: true,
286
+ targetType: 'input',
287
+ targetValue: 'input value',
288
+ action: 'copy',
289
+ });
290
+
291
+ new KTClipboard(trigger);
292
+ trigger.click();
293
+ await flushPromises();
294
+
295
+ expect(writeTextMock).toHaveBeenCalledTimes(1);
296
+ expect(writeTextMock).toHaveBeenCalledWith('input value');
297
+ });
298
+
299
+ it('copies from non-input target textContent', async () => {
300
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
301
+ Object.defineProperty(navigator, 'clipboard', {
302
+ value: { writeText: writeTextMock },
303
+ configurable: true,
304
+ });
305
+
306
+ const { trigger } = createFixture({
307
+ withPredefinedText: false,
308
+ withTarget: true,
309
+ targetType: 'div',
310
+ targetTextContent: 'div text content',
311
+ action: 'copy',
312
+ });
313
+
314
+ new KTClipboard(trigger);
315
+ trigger.click();
316
+ await flushPromises();
317
+
318
+ expect(writeTextMock).toHaveBeenCalledTimes(1);
319
+ expect(writeTextMock).toHaveBeenCalledWith('div text content');
320
+ });
321
+
322
+ it('dispatches error when selector misses and no predefined text exists', async () => {
323
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
324
+ Object.defineProperty(navigator, 'clipboard', {
325
+ value: { writeText: writeTextMock },
326
+ configurable: true,
327
+ });
328
+
329
+ const { trigger } = createFixture({
330
+ withPredefinedText: false,
331
+ withTarget: true,
332
+ targetExists: false,
333
+ action: 'copy',
334
+ });
335
+
336
+ const errorEvents: CustomEvent[] = [];
337
+ trigger.addEventListener('kt.clipboard.error', (e) =>
338
+ errorEvents.push(e as CustomEvent),
339
+ );
340
+
341
+ new KTClipboard(trigger);
342
+ trigger.click();
343
+ await flushPromises();
344
+
345
+ expect(writeTextMock).not.toHaveBeenCalled();
346
+ expect(errorEvents.length).toBe(1);
347
+ });
348
+
349
+ it('dispatches error for cut when target is not input/textarea', async () => {
350
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
351
+ Object.defineProperty(navigator, 'clipboard', {
352
+ value: { writeText: writeTextMock },
353
+ configurable: true,
354
+ });
355
+
356
+ const { trigger } = createFixture({
357
+ withPredefinedText: false,
358
+ withTarget: true,
359
+ targetType: 'div',
360
+ targetTextContent: 'not cuttable',
361
+ action: 'cut',
362
+ });
363
+
364
+ const errorEvents: CustomEvent[] = [];
365
+ trigger.addEventListener('kt.clipboard.error', (e) =>
366
+ errorEvents.push(e as CustomEvent),
367
+ );
368
+
369
+ new KTClipboard(trigger);
370
+ trigger.click();
371
+ await flushPromises();
372
+
373
+ expect(writeTextMock).not.toHaveBeenCalled();
374
+ expect(errorEvents.length).toBe(1);
375
+ });
376
+
377
+ it('cuts from input target (clears value on success)', async () => {
378
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
379
+ Object.defineProperty(navigator, 'clipboard', {
380
+ value: { writeText: writeTextMock },
381
+ configurable: true,
382
+ });
383
+
384
+ const { trigger } = createFixture({
385
+ withPredefinedText: false,
386
+ withTarget: true,
387
+ targetType: 'input',
388
+ targetValue: 'cut value',
389
+ action: 'cut',
390
+ });
391
+
392
+ const input = document.getElementById(
393
+ 'kt-clipboard-target',
394
+ ) as HTMLInputElement;
395
+ expect(input.value).toBe('cut value');
396
+
397
+ new KTClipboard(trigger);
398
+ trigger.click();
399
+ await flushPromises();
400
+
401
+ expect(writeTextMock).toHaveBeenCalledWith('cut value');
402
+ expect(input.value).toBe('');
403
+ });
404
+
405
+ it('is idempotent: createInstances does not double bind', async () => {
406
+ const writeTextMock = vi.fn().mockResolvedValue(undefined);
407
+ Object.defineProperty(navigator, 'clipboard', {
408
+ value: { writeText: writeTextMock },
409
+ configurable: true,
410
+ });
411
+
412
+ const { trigger } = createFixture({
413
+ withPredefinedText: true,
414
+ predefinedTextValue: 'once',
415
+ action: 'copy',
416
+ });
417
+
418
+ // Explicit instance creation.
419
+ new KTClipboard(trigger);
420
+
421
+ // Should not create another handler on the same element.
422
+ KTClipboard.createInstances();
423
+
424
+ trigger.click();
425
+ await flushPromises();
426
+
427
+ expect(writeTextMock).toHaveBeenCalledTimes(1);
428
+ });
429
+
430
+ it('returns null for getInstance on non-initialized trigger', () => {
431
+ document.body.innerHTML = '';
432
+ const trigger = document.createElement('button');
433
+ trigger.setAttribute('data-kt-clipboard', 'true');
434
+ document.body.appendChild(trigger);
435
+
436
+ expect(KTClipboard.getInstance(trigger)).toBeNull();
437
+ });
438
+ });