@keenthemes/ktui 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/CONTRIBUTING.md +88 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +124 -0
  4. package/dist/ktui.js +19201 -0
  5. package/dist/ktui.min.js +2 -0
  6. package/dist/ktui.min.js.map +1 -0
  7. package/lib/cjs/components/accordion/accordion.js +168 -0
  8. package/lib/cjs/components/accordion/accordion.js.map +1 -0
  9. package/lib/cjs/components/accordion/index.js +6 -0
  10. package/lib/cjs/components/accordion/index.js.map +1 -0
  11. package/lib/cjs/components/accordion/types.js +3 -0
  12. package/lib/cjs/components/accordion/types.js.map +1 -0
  13. package/lib/cjs/components/collapse/collapse.js +169 -0
  14. package/lib/cjs/components/collapse/collapse.js.map +1 -0
  15. package/lib/cjs/components/collapse/index.js +6 -0
  16. package/lib/cjs/components/collapse/index.js.map +1 -0
  17. package/lib/cjs/components/collapse/types.js +3 -0
  18. package/lib/cjs/components/collapse/types.js.map +1 -0
  19. package/lib/cjs/components/component.js +135 -0
  20. package/lib/cjs/components/component.js.map +1 -0
  21. package/lib/cjs/components/config.js +26 -0
  22. package/lib/cjs/components/config.js.map +1 -0
  23. package/lib/cjs/components/config.umd.js +23 -0
  24. package/lib/cjs/components/config.umd.js.map +1 -0
  25. package/lib/cjs/components/constants.js +15 -0
  26. package/lib/cjs/components/constants.js.map +1 -0
  27. package/lib/cjs/components/datatable/datatable.js +1464 -0
  28. package/lib/cjs/components/datatable/datatable.js.map +1 -0
  29. package/lib/cjs/components/datatable/index.js +6 -0
  30. package/lib/cjs/components/datatable/index.js.map +1 -0
  31. package/lib/cjs/components/datatable/types.js +3 -0
  32. package/lib/cjs/components/datatable/types.js.map +1 -0
  33. package/lib/cjs/components/dismiss/dismiss.js +131 -0
  34. package/lib/cjs/components/dismiss/dismiss.js.map +1 -0
  35. package/lib/cjs/components/dismiss/index.js +6 -0
  36. package/lib/cjs/components/dismiss/index.js.map +1 -0
  37. package/lib/cjs/components/dismiss/types.js +3 -0
  38. package/lib/cjs/components/dismiss/types.js.map +1 -0
  39. package/lib/cjs/components/drawer/drawer.js +347 -0
  40. package/lib/cjs/components/drawer/drawer.js.map +1 -0
  41. package/lib/cjs/components/drawer/index.js +6 -0
  42. package/lib/cjs/components/drawer/index.js.map +1 -0
  43. package/lib/cjs/components/drawer/types.js +3 -0
  44. package/lib/cjs/components/drawer/types.js.map +1 -0
  45. package/lib/cjs/components/dropdown/dropdown.js +403 -0
  46. package/lib/cjs/components/dropdown/dropdown.js.map +1 -0
  47. package/lib/cjs/components/dropdown/index.js +6 -0
  48. package/lib/cjs/components/dropdown/index.js.map +1 -0
  49. package/lib/cjs/components/dropdown/types.js +3 -0
  50. package/lib/cjs/components/dropdown/types.js.map +1 -0
  51. package/lib/cjs/components/image-input/image-input.js +191 -0
  52. package/lib/cjs/components/image-input/image-input.js.map +1 -0
  53. package/lib/cjs/components/image-input/index.js +6 -0
  54. package/lib/cjs/components/image-input/index.js.map +1 -0
  55. package/lib/cjs/components/image-input/types.js +3 -0
  56. package/lib/cjs/components/image-input/types.js.map +1 -0
  57. package/lib/cjs/components/menu/index.js +6 -0
  58. package/lib/cjs/components/menu/index.js.map +1 -0
  59. package/lib/cjs/components/menu/menu.js +1021 -0
  60. package/lib/cjs/components/menu/menu.js.map +1 -0
  61. package/lib/cjs/components/menu/types.js +3 -0
  62. package/lib/cjs/components/menu/types.js.map +1 -0
  63. package/lib/cjs/components/modal/index.js +6 -0
  64. package/lib/cjs/components/modal/index.js.map +1 -0
  65. package/lib/cjs/components/modal/modal.js +316 -0
  66. package/lib/cjs/components/modal/modal.js.map +1 -0
  67. package/lib/cjs/components/modal/types.js +3 -0
  68. package/lib/cjs/components/modal/types.js.map +1 -0
  69. package/lib/cjs/components/reparent/index.js +6 -0
  70. package/lib/cjs/components/reparent/index.js.map +1 -0
  71. package/lib/cjs/components/reparent/reparent.js +93 -0
  72. package/lib/cjs/components/reparent/reparent.js.map +1 -0
  73. package/lib/cjs/components/reparent/types.js +3 -0
  74. package/lib/cjs/components/reparent/types.js.map +1 -0
  75. package/lib/cjs/components/scrollable/index.js +6 -0
  76. package/lib/cjs/components/scrollable/index.js.map +1 -0
  77. package/lib/cjs/components/scrollable/scrollable.js +259 -0
  78. package/lib/cjs/components/scrollable/scrollable.js.map +1 -0
  79. package/lib/cjs/components/scrollable/types.js +3 -0
  80. package/lib/cjs/components/scrollable/types.js.map +1 -0
  81. package/lib/cjs/components/scrollspy/index.js +6 -0
  82. package/lib/cjs/components/scrollspy/index.js.map +1 -0
  83. package/lib/cjs/components/scrollspy/scrollspy.js +174 -0
  84. package/lib/cjs/components/scrollspy/scrollspy.js.map +1 -0
  85. package/lib/cjs/components/scrollspy/types.js +3 -0
  86. package/lib/cjs/components/scrollspy/types.js.map +1 -0
  87. package/lib/cjs/components/scrollto/index.js +6 -0
  88. package/lib/cjs/components/scrollto/index.js.map +1 -0
  89. package/lib/cjs/components/scrollto/scrollto.js +103 -0
  90. package/lib/cjs/components/scrollto/scrollto.js.map +1 -0
  91. package/lib/cjs/components/scrollto/types.js +3 -0
  92. package/lib/cjs/components/scrollto/types.js.map +1 -0
  93. package/lib/cjs/components/stepper/index.js +6 -0
  94. package/lib/cjs/components/stepper/index.js.map +1 -0
  95. package/lib/cjs/components/stepper/stepper.js +258 -0
  96. package/lib/cjs/components/stepper/stepper.js.map +1 -0
  97. package/lib/cjs/components/stepper/types.js +3 -0
  98. package/lib/cjs/components/stepper/types.js.map +1 -0
  99. package/lib/cjs/components/sticky/index.js +6 -0
  100. package/lib/cjs/components/sticky/index.js.map +1 -0
  101. package/lib/cjs/components/sticky/sticky.js +297 -0
  102. package/lib/cjs/components/sticky/sticky.js.map +1 -0
  103. package/lib/cjs/components/sticky/types.js +3 -0
  104. package/lib/cjs/components/sticky/types.js.map +1 -0
  105. package/lib/cjs/components/tabs/index.js +6 -0
  106. package/lib/cjs/components/tabs/index.js.map +1 -0
  107. package/lib/cjs/components/tabs/tabs.js +146 -0
  108. package/lib/cjs/components/tabs/tabs.js.map +1 -0
  109. package/lib/cjs/components/tabs/types.js +3 -0
  110. package/lib/cjs/components/tabs/types.js.map +1 -0
  111. package/lib/cjs/components/theme/index.js +6 -0
  112. package/lib/cjs/components/theme/index.js.map +1 -0
  113. package/lib/cjs/components/theme/theme.js +147 -0
  114. package/lib/cjs/components/theme/theme.js.map +1 -0
  115. package/lib/cjs/components/theme/types.js +3 -0
  116. package/lib/cjs/components/theme/types.js.map +1 -0
  117. package/lib/cjs/components/toggle/index.js +6 -0
  118. package/lib/cjs/components/toggle/index.js.map +1 -0
  119. package/lib/cjs/components/toggle/toggle.js +139 -0
  120. package/lib/cjs/components/toggle/toggle.js.map +1 -0
  121. package/lib/cjs/components/toggle/types.js +3 -0
  122. package/lib/cjs/components/toggle/types.js.map +1 -0
  123. package/lib/cjs/components/toggle-password/index.js +6 -0
  124. package/lib/cjs/components/toggle-password/index.js.map +1 -0
  125. package/lib/cjs/components/toggle-password/toggle-password.js +131 -0
  126. package/lib/cjs/components/toggle-password/toggle-password.js.map +1 -0
  127. package/lib/cjs/components/toggle-password/types.js +3 -0
  128. package/lib/cjs/components/toggle-password/types.js.map +1 -0
  129. package/lib/cjs/components/tooltip/index.js +6 -0
  130. package/lib/cjs/components/tooltip/index.js.map +1 -0
  131. package/lib/cjs/components/tooltip/tooltip.js +271 -0
  132. package/lib/cjs/components/tooltip/tooltip.js.map +1 -0
  133. package/lib/cjs/components/tooltip/types.js +3 -0
  134. package/lib/cjs/components/tooltip/types.js.map +1 -0
  135. package/lib/cjs/helpers/data.js +33 -0
  136. package/lib/cjs/helpers/data.js.map +1 -0
  137. package/lib/cjs/helpers/dom.js +297 -0
  138. package/lib/cjs/helpers/dom.js.map +1 -0
  139. package/lib/cjs/helpers/event-handler.js +36 -0
  140. package/lib/cjs/helpers/event-handler.js.map +1 -0
  141. package/lib/cjs/helpers/utils.js +94 -0
  142. package/lib/cjs/helpers/utils.js.map +1 -0
  143. package/lib/cjs/index.js +105 -0
  144. package/lib/cjs/index.js.map +1 -0
  145. package/lib/cjs/types.js +3 -0
  146. package/lib/cjs/types.js.map +1 -0
  147. package/lib/esm/components/accordion/accordion.js +165 -0
  148. package/lib/esm/components/accordion/accordion.js.map +1 -0
  149. package/lib/esm/components/accordion/index.js +2 -0
  150. package/lib/esm/components/accordion/index.js.map +1 -0
  151. package/lib/esm/components/accordion/types.js +2 -0
  152. package/lib/esm/components/accordion/types.js.map +1 -0
  153. package/lib/esm/components/collapse/collapse.js +166 -0
  154. package/lib/esm/components/collapse/collapse.js.map +1 -0
  155. package/lib/esm/components/collapse/index.js +2 -0
  156. package/lib/esm/components/collapse/index.js.map +1 -0
  157. package/lib/esm/components/collapse/types.js +2 -0
  158. package/lib/esm/components/collapse/types.js.map +1 -0
  159. package/lib/esm/components/component.js +133 -0
  160. package/lib/esm/components/component.js.map +1 -0
  161. package/lib/esm/components/config.js +24 -0
  162. package/lib/esm/components/config.js.map +1 -0
  163. package/lib/esm/components/config.umd.js +23 -0
  164. package/lib/esm/components/config.umd.js.map +1 -0
  165. package/lib/esm/components/constants.js +12 -0
  166. package/lib/esm/components/constants.js.map +1 -0
  167. package/lib/esm/components/datatable/datatable.js +1461 -0
  168. package/lib/esm/components/datatable/datatable.js.map +1 -0
  169. package/lib/esm/components/datatable/index.js +2 -0
  170. package/lib/esm/components/datatable/index.js.map +1 -0
  171. package/lib/esm/components/datatable/types.js +2 -0
  172. package/lib/esm/components/datatable/types.js.map +1 -0
  173. package/lib/esm/components/dismiss/dismiss.js +128 -0
  174. package/lib/esm/components/dismiss/dismiss.js.map +1 -0
  175. package/lib/esm/components/dismiss/index.js +2 -0
  176. package/lib/esm/components/dismiss/index.js.map +1 -0
  177. package/lib/esm/components/dismiss/types.js +2 -0
  178. package/lib/esm/components/dismiss/types.js.map +1 -0
  179. package/lib/esm/components/drawer/drawer.js +344 -0
  180. package/lib/esm/components/drawer/drawer.js.map +1 -0
  181. package/lib/esm/components/drawer/index.js +2 -0
  182. package/lib/esm/components/drawer/index.js.map +1 -0
  183. package/lib/esm/components/drawer/types.js +2 -0
  184. package/lib/esm/components/drawer/types.js.map +1 -0
  185. package/lib/esm/components/dropdown/dropdown.js +400 -0
  186. package/lib/esm/components/dropdown/dropdown.js.map +1 -0
  187. package/lib/esm/components/dropdown/index.js +2 -0
  188. package/lib/esm/components/dropdown/index.js.map +1 -0
  189. package/lib/esm/components/dropdown/types.js +2 -0
  190. package/lib/esm/components/dropdown/types.js.map +1 -0
  191. package/lib/esm/components/image-input/image-input.js +188 -0
  192. package/lib/esm/components/image-input/image-input.js.map +1 -0
  193. package/lib/esm/components/image-input/index.js +2 -0
  194. package/lib/esm/components/image-input/index.js.map +1 -0
  195. package/lib/esm/components/image-input/types.js +2 -0
  196. package/lib/esm/components/image-input/types.js.map +1 -0
  197. package/lib/esm/components/menu/index.js +2 -0
  198. package/lib/esm/components/menu/index.js.map +1 -0
  199. package/lib/esm/components/menu/menu.js +1018 -0
  200. package/lib/esm/components/menu/menu.js.map +1 -0
  201. package/lib/esm/components/menu/types.js +2 -0
  202. package/lib/esm/components/menu/types.js.map +1 -0
  203. package/lib/esm/components/modal/index.js +2 -0
  204. package/lib/esm/components/modal/index.js.map +1 -0
  205. package/lib/esm/components/modal/modal.js +313 -0
  206. package/lib/esm/components/modal/modal.js.map +1 -0
  207. package/lib/esm/components/modal/types.js +2 -0
  208. package/lib/esm/components/modal/types.js.map +1 -0
  209. package/lib/esm/components/reparent/index.js +2 -0
  210. package/lib/esm/components/reparent/index.js.map +1 -0
  211. package/lib/esm/components/reparent/reparent.js +90 -0
  212. package/lib/esm/components/reparent/reparent.js.map +1 -0
  213. package/lib/esm/components/reparent/types.js +2 -0
  214. package/lib/esm/components/reparent/types.js.map +1 -0
  215. package/lib/esm/components/scrollable/index.js +2 -0
  216. package/lib/esm/components/scrollable/index.js.map +1 -0
  217. package/lib/esm/components/scrollable/scrollable.js +256 -0
  218. package/lib/esm/components/scrollable/scrollable.js.map +1 -0
  219. package/lib/esm/components/scrollable/types.js +2 -0
  220. package/lib/esm/components/scrollable/types.js.map +1 -0
  221. package/lib/esm/components/scrollspy/index.js +2 -0
  222. package/lib/esm/components/scrollspy/index.js.map +1 -0
  223. package/lib/esm/components/scrollspy/scrollspy.js +171 -0
  224. package/lib/esm/components/scrollspy/scrollspy.js.map +1 -0
  225. package/lib/esm/components/scrollspy/types.js +2 -0
  226. package/lib/esm/components/scrollspy/types.js.map +1 -0
  227. package/lib/esm/components/scrollto/index.js +2 -0
  228. package/lib/esm/components/scrollto/index.js.map +1 -0
  229. package/lib/esm/components/scrollto/scrollto.js +100 -0
  230. package/lib/esm/components/scrollto/scrollto.js.map +1 -0
  231. package/lib/esm/components/scrollto/types.js +2 -0
  232. package/lib/esm/components/scrollto/types.js.map +1 -0
  233. package/lib/esm/components/stepper/index.js +2 -0
  234. package/lib/esm/components/stepper/index.js.map +1 -0
  235. package/lib/esm/components/stepper/stepper.js +255 -0
  236. package/lib/esm/components/stepper/stepper.js.map +1 -0
  237. package/lib/esm/components/stepper/types.js +2 -0
  238. package/lib/esm/components/stepper/types.js.map +1 -0
  239. package/lib/esm/components/sticky/index.js +2 -0
  240. package/lib/esm/components/sticky/index.js.map +1 -0
  241. package/lib/esm/components/sticky/sticky.js +294 -0
  242. package/lib/esm/components/sticky/sticky.js.map +1 -0
  243. package/lib/esm/components/sticky/types.js +2 -0
  244. package/lib/esm/components/sticky/types.js.map +1 -0
  245. package/lib/esm/components/tabs/index.js +2 -0
  246. package/lib/esm/components/tabs/index.js.map +1 -0
  247. package/lib/esm/components/tabs/tabs.js +143 -0
  248. package/lib/esm/components/tabs/tabs.js.map +1 -0
  249. package/lib/esm/components/tabs/types.js +2 -0
  250. package/lib/esm/components/tabs/types.js.map +1 -0
  251. package/lib/esm/components/theme/index.js +2 -0
  252. package/lib/esm/components/theme/index.js.map +1 -0
  253. package/lib/esm/components/theme/theme.js +144 -0
  254. package/lib/esm/components/theme/theme.js.map +1 -0
  255. package/lib/esm/components/theme/types.js +2 -0
  256. package/lib/esm/components/theme/types.js.map +1 -0
  257. package/lib/esm/components/toggle/index.js +2 -0
  258. package/lib/esm/components/toggle/index.js.map +1 -0
  259. package/lib/esm/components/toggle/toggle.js +136 -0
  260. package/lib/esm/components/toggle/toggle.js.map +1 -0
  261. package/lib/esm/components/toggle/types.js +2 -0
  262. package/lib/esm/components/toggle/types.js.map +1 -0
  263. package/lib/esm/components/toggle-password/index.js +2 -0
  264. package/lib/esm/components/toggle-password/index.js.map +1 -0
  265. package/lib/esm/components/toggle-password/toggle-password.js +128 -0
  266. package/lib/esm/components/toggle-password/toggle-password.js.map +1 -0
  267. package/lib/esm/components/toggle-password/types.js +2 -0
  268. package/lib/esm/components/toggle-password/types.js.map +1 -0
  269. package/lib/esm/components/tooltip/index.js +2 -0
  270. package/lib/esm/components/tooltip/index.js.map +1 -0
  271. package/lib/esm/components/tooltip/tooltip.js +268 -0
  272. package/lib/esm/components/tooltip/tooltip.js.map +1 -0
  273. package/lib/esm/components/tooltip/types.js +2 -0
  274. package/lib/esm/components/tooltip/types.js.map +1 -0
  275. package/lib/esm/helpers/data.js +31 -0
  276. package/lib/esm/helpers/data.js.map +1 -0
  277. package/lib/esm/helpers/dom.js +295 -0
  278. package/lib/esm/helpers/dom.js.map +1 -0
  279. package/lib/esm/helpers/event-handler.js +34 -0
  280. package/lib/esm/helpers/event-handler.js.map +1 -0
  281. package/lib/esm/helpers/utils.js +92 -0
  282. package/lib/esm/helpers/utils.js.map +1 -0
  283. package/lib/esm/index.js +79 -0
  284. package/lib/esm/index.js.map +1 -0
  285. package/lib/esm/types.js +2 -0
  286. package/lib/esm/types.js.map +1 -0
  287. package/package.json +85 -0
  288. package/prettier.config.js +9 -0
  289. package/src/components/accordion/accordion-menu.css +51 -0
  290. package/src/components/accordion/accordion.css +86 -0
  291. package/src/components/accordion/accordion.ts +221 -0
  292. package/src/components/accordion/index.ts +7 -0
  293. package/src/components/accordion/types.ts +16 -0
  294. package/src/components/alert/alert.css +282 -0
  295. package/src/components/avatar/avatar.css +46 -0
  296. package/src/components/badge/badge.css +176 -0
  297. package/src/components/breadcrumb/breadcrumb.css +38 -0
  298. package/src/components/btn/btn.css +227 -0
  299. package/src/components/card/card.css +158 -0
  300. package/src/components/checkbox/checkbox.css +74 -0
  301. package/src/components/collapse/collapse.css +14 -0
  302. package/src/components/collapse/collapse.ts +200 -0
  303. package/src/components/collapse/index.ts +7 -0
  304. package/src/components/collapse/types.ts +16 -0
  305. package/src/components/component.ts +132 -0
  306. package/src/components/constants.ts +16 -0
  307. package/src/components/datatable/datatable-checkbox.ts +236 -0
  308. package/src/components/datatable/datatable-sort.ts +154 -0
  309. package/src/components/datatable/datatable.css +110 -0
  310. package/src/components/datatable/datatable.ts +1657 -0
  311. package/src/components/datatable/index.ts +19 -0
  312. package/src/components/datatable/types.ts +203 -0
  313. package/src/components/datepicker/calendar.ts +1397 -0
  314. package/src/components/datepicker/config.ts +368 -0
  315. package/src/components/datepicker/datepicker.css +7 -0
  316. package/src/components/datepicker/datepicker.ts +1287 -0
  317. package/src/components/datepicker/dropdown.ts +757 -0
  318. package/src/components/datepicker/events.ts +149 -0
  319. package/src/components/datepicker/index.ts +10 -0
  320. package/src/components/datepicker/keyboard.ts +646 -0
  321. package/src/components/datepicker/locales.ts +80 -0
  322. package/src/components/datepicker/templates.ts +792 -0
  323. package/src/components/datepicker/types.ts +154 -0
  324. package/src/components/datepicker/utils.ts +631 -0
  325. package/src/components/dismiss/dismiss.css +10 -0
  326. package/src/components/dismiss/dismiss.ts +152 -0
  327. package/src/components/dismiss/index.ts +7 -0
  328. package/src/components/dismiss/types.ts +17 -0
  329. package/src/components/drawer/drawer.css +97 -0
  330. package/src/components/drawer/drawer.ts +437 -0
  331. package/src/components/drawer/index.ts +7 -0
  332. package/src/components/drawer/types.ts +25 -0
  333. package/src/components/dropdown/dropdown-menu.css +56 -0
  334. package/src/components/dropdown/dropdown.css +46 -0
  335. package/src/components/dropdown/dropdown.ts +549 -0
  336. package/src/components/dropdown/index.ts +7 -0
  337. package/src/components/dropdown/types.ts +28 -0
  338. package/src/components/form/form.css +54 -0
  339. package/src/components/image-input/image-input.css +56 -0
  340. package/src/components/image-input/image-input.ts +249 -0
  341. package/src/components/image-input/index.ts +10 -0
  342. package/src/components/image-input/types.ts +12 -0
  343. package/src/components/input/input-group.css +42 -0
  344. package/src/components/input/input.css +136 -0
  345. package/src/components/kbd/kbd.css +30 -0
  346. package/src/components/label/label.css +20 -0
  347. package/src/components/link/link.css +81 -0
  348. package/src/components/modal/index.ts +7 -0
  349. package/src/components/modal/modal.css +73 -0
  350. package/src/components/modal/modal.ts +382 -0
  351. package/src/components/modal/types.ts +21 -0
  352. package/src/components/pagination/pagination.css +26 -0
  353. package/src/components/popover/popover.css +22 -0
  354. package/src/components/progress/progress.css +51 -0
  355. package/src/components/radio/radio.css +51 -0
  356. package/src/components/reparent/index.ts +7 -0
  357. package/src/components/reparent/reparent.ts +109 -0
  358. package/src/components/reparent/types.ts +15 -0
  359. package/src/components/scrollable/index.ts +10 -0
  360. package/src/components/scrollable/scrollable.css +29 -0
  361. package/src/components/scrollable/scrollable.ts +297 -0
  362. package/src/components/scrollable/types.ts +16 -0
  363. package/src/components/scrollspy/index.ts +7 -0
  364. package/src/components/scrollspy/scrollspy.css +13 -0
  365. package/src/components/scrollspy/scrollspy.ts +224 -0
  366. package/src/components/scrollspy/types.ts +15 -0
  367. package/src/components/scrollto/index.ts +7 -0
  368. package/src/components/scrollto/scrollto.ts +127 -0
  369. package/src/components/scrollto/types.ts +15 -0
  370. package/src/components/select/combobox.ts +305 -0
  371. package/src/components/select/config.ts +324 -0
  372. package/src/components/select/dropdown.ts +510 -0
  373. package/src/components/select/index.ts +13 -0
  374. package/src/components/select/option.ts +43 -0
  375. package/src/components/select/remote.ts +477 -0
  376. package/src/components/select/search.ts +430 -0
  377. package/src/components/select/select.css +105 -0
  378. package/src/components/select/select.ts +1916 -0
  379. package/src/components/select/tags.ts +123 -0
  380. package/src/components/select/templates.ts +531 -0
  381. package/src/components/select/types.ts +36 -0
  382. package/src/components/select/utils.ts +747 -0
  383. package/src/components/select/variants.css +5 -0
  384. package/src/components/separator/separator.css +14 -0
  385. package/src/components/skeleton/skeleton.css +10 -0
  386. package/src/components/stepper/index.ts +7 -0
  387. package/src/components/stepper/stepper.css +49 -0
  388. package/src/components/stepper/stepper.ts +308 -0
  389. package/src/components/stepper/types.ts +13 -0
  390. package/src/components/sticky/index.ts +7 -0
  391. package/src/components/sticky/sticky.css +22 -0
  392. package/src/components/sticky/sticky.ts +381 -0
  393. package/src/components/sticky/types.ts +23 -0
  394. package/src/components/switch/switch.css +110 -0
  395. package/src/components/table/table.css +168 -0
  396. package/src/components/tabs/index.ts +7 -0
  397. package/src/components/tabs/tabs.css +40 -0
  398. package/src/components/tabs/tabs.ts +190 -0
  399. package/src/components/tabs/types.ts +13 -0
  400. package/src/components/textarea/textarea.css +35 -0
  401. package/src/components/theme-switch/index.ts +10 -0
  402. package/src/components/theme-switch/theme-switch.css +22 -0
  403. package/src/components/theme-switch/theme-switch.ts +176 -0
  404. package/src/components/theme-switch/types.ts +15 -0
  405. package/src/components/toggle/index.ts +7 -0
  406. package/src/components/toggle/toggle.css +13 -0
  407. package/src/components/toggle/toggle.ts +173 -0
  408. package/src/components/toggle/types.ts +18 -0
  409. package/src/components/toggle-group/toggle-group.css +55 -0
  410. package/src/components/toggle-password/index.ts +10 -0
  411. package/src/components/toggle-password/toggle-password.css +13 -0
  412. package/src/components/toggle-password/toggle-password.ts +159 -0
  413. package/src/components/toggle-password/types.ts +13 -0
  414. package/src/components/tooltip/index.ts +7 -0
  415. package/src/components/tooltip/tooltip.css +18 -0
  416. package/src/components/tooltip/tooltip.ts +361 -0
  417. package/src/components/tooltip/types.ts +28 -0
  418. package/src/helpers/data.ts +46 -0
  419. package/src/helpers/dom.ts +405 -0
  420. package/src/helpers/event-handler.ts +61 -0
  421. package/src/helpers/utils.ts +183 -0
  422. package/src/index.ts +113 -0
  423. package/src/types.ts +23 -0
  424. package/styles.css +48 -0
  425. package/tsconfig.json +17 -0
  426. package/webpack.config.js +113 -0
@@ -0,0 +1,477 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ import {
7
+ KTSelectConfigInterface,
8
+ KTSelectOption as KTSelectOptionData,
9
+ } from './config';
10
+
11
+ /**
12
+ * KTSelectRemote class
13
+ * Handles fetching remote data for the KTSelect component
14
+ */
15
+ export class KTSelectRemote {
16
+ private _config: KTSelectConfigInterface;
17
+ private _isLoading: boolean = false;
18
+ private _hasError: boolean = false;
19
+ private _errorMessage: string = '';
20
+ private _currentPage: number = 1;
21
+ private _totalPages: number = 1;
22
+ private _lastQuery: string = '';
23
+ private _element: HTMLElement | null = null;
24
+
25
+ /**
26
+ * Constructor
27
+ * @param config KTSelect configuration
28
+ * @param element The select element
29
+ */
30
+ constructor(config: KTSelectConfigInterface, element?: HTMLElement) {
31
+ this._config = config;
32
+ this._element = element || null;
33
+ }
34
+
35
+ /**
36
+ * Fetch data from remote URL
37
+ * @param query Optional search query
38
+ * @param page Page number for pagination
39
+ * @returns Promise with fetched items
40
+ */
41
+ public fetchData(
42
+ query?: string,
43
+ page: number = 1,
44
+ ): Promise<KTSelectOptionData[]> {
45
+ this._isLoading = true;
46
+ this._hasError = false;
47
+ this._errorMessage = '';
48
+ this._lastQuery = query || '';
49
+ this._currentPage = page;
50
+
51
+ let url = this._buildUrl(query, page);
52
+
53
+ if (this._config.debug) console.log('Fetching remote data from:', url);
54
+
55
+ // Dispatch search start event
56
+ this._dispatchEvent('remoteSearchStart');
57
+
58
+ return fetch(url)
59
+ .then((response: Response): Promise<any> => {
60
+ if (!response.ok) {
61
+ throw new Error(`HTTP error! Status: ${response.status}`);
62
+ }
63
+ return response.json();
64
+ })
65
+ .then((data: any): KTSelectOptionData[] => {
66
+ // Process the data
67
+ return this._processData(data);
68
+ })
69
+ .catch((error: Error): KTSelectOptionData[] => {
70
+ console.error('Error fetching remote data:', error);
71
+ this._hasError = true;
72
+ this._errorMessage =
73
+ this._config.remoteErrorMessage || 'Failed to load data';
74
+ return [];
75
+ })
76
+ .finally((): void => {
77
+ this._isLoading = false;
78
+ // Dispatch search end event
79
+ this._dispatchEvent('remoteSearchEnd');
80
+ });
81
+ }
82
+
83
+ /**
84
+ * Dispatch custom events to notify about search state changes
85
+ * @param eventName Name of the event to dispatch
86
+ */
87
+ private _dispatchEvent(eventName: string): void {
88
+ if (!this._element) return;
89
+
90
+ const event = new CustomEvent(`ktselect.${eventName}`, {
91
+ bubbles: true,
92
+ detail: {
93
+ query: this._lastQuery,
94
+ isLoading: this._isLoading,
95
+ hasError: this._hasError,
96
+ errorMessage: this._errorMessage,
97
+ },
98
+ });
99
+
100
+ this._element.dispatchEvent(event);
101
+ }
102
+
103
+ /**
104
+ * Build the URL for the API request
105
+ * @param query Search query
106
+ * @param page Page number
107
+ * @returns Fully formed URL
108
+ */
109
+ private _buildUrl(query?: string, page: number = 1): string {
110
+ let url = this._config.dataUrl;
111
+
112
+ if (!url) {
113
+ console.error('No URL specified for remote data');
114
+ return '';
115
+ }
116
+
117
+ // Add parameters
118
+ const params = new URLSearchParams();
119
+
120
+ // Add search parameter if provided
121
+ if (query && this._config.searchParam) {
122
+ params.append(this._config.searchParam, query);
123
+ }
124
+
125
+ // Add pagination parameters if enabled
126
+ if (this._config.pagination) {
127
+ const limitParam = this._config.paginationLimitParam || 'limit';
128
+ const pageParam = this._config.paginationPageParam || 'page';
129
+ const limit = this._config.paginationLimit || 10;
130
+
131
+ params.append(limitParam, limit.toString());
132
+ params.append(pageParam, page.toString());
133
+ }
134
+
135
+ // Append parameters to URL if there are any
136
+ const paramsString = params.toString();
137
+ if (paramsString) {
138
+ url += (url.includes('?') ? '&' : '?') + paramsString;
139
+ }
140
+
141
+ return url;
142
+ }
143
+
144
+ /**
145
+ * Process the API response data
146
+ * @param data API response data
147
+ * @returns Array of KTSelectOptionData
148
+ */
149
+ private _processData(data: any): KTSelectOptionData[] {
150
+ try {
151
+ if (this._config.debug) console.log('Processing API response:', data);
152
+
153
+ let processedData = data;
154
+
155
+ // Extract data from the API property if specified
156
+ if (this._config.apiDataProperty && data[this._config.apiDataProperty]) {
157
+ if (this._config.debug)
158
+ console.log(
159
+ `Extracting data from property: ${this._config.apiDataProperty}`,
160
+ );
161
+
162
+ // If pagination metadata is available, extract it
163
+ if (this._config.pagination) {
164
+ if (data.total_pages) {
165
+ this._totalPages = data.total_pages;
166
+ if (this._config.debug)
167
+ console.log(`Total pages found: ${this._totalPages}`);
168
+ }
169
+ if (data.total) {
170
+ this._totalPages = Math.ceil(
171
+ data.total / (this._config.paginationLimit || 10),
172
+ );
173
+ if (this._config.debug)
174
+ console.log(
175
+ `Calculated total pages: ${this._totalPages} from total: ${data.total}`,
176
+ );
177
+ }
178
+ }
179
+
180
+ processedData = data[this._config.apiDataProperty];
181
+ }
182
+
183
+ // Ensure data is an array
184
+ if (!Array.isArray(processedData)) {
185
+ console.warn('Remote data is not an array:', processedData);
186
+ return [];
187
+ }
188
+
189
+ if (this._config.debug)
190
+ console.log(
191
+ `Mapping ${processedData.length} items to KTSelectOptionData format`,
192
+ );
193
+
194
+ // Map data to KTSelectOptionData format
195
+ const mappedData = processedData.map((item: any): KTSelectOptionData => {
196
+ const mappedItem = this._mapItemToOption(item);
197
+
198
+ // Add logging to trace data path extraction
199
+ if (
200
+ this._config.dataValueField &&
201
+ this._config.dataValueField.includes('.')
202
+ ) {
203
+ // For nested paths, verify extraction worked
204
+ const parts = this._config.dataValueField.split('.');
205
+ let nestedValue = item;
206
+
207
+ // Try to navigate to the value manually for verification
208
+ for (const part of parts) {
209
+ if (
210
+ nestedValue &&
211
+ typeof nestedValue === 'object' &&
212
+ part in nestedValue
213
+ ) {
214
+ nestedValue = nestedValue[part];
215
+ } else {
216
+ nestedValue = null;
217
+ break;
218
+ }
219
+ }
220
+
221
+ // If we found a value, verify it matches what was extracted
222
+ if (nestedValue !== null && nestedValue !== undefined) {
223
+ const expectedValue = String(nestedValue);
224
+ if (this._config.debug)
225
+ console.log(
226
+ `Data path verification for [${this._config.dataValueField}]: Expected: ${expectedValue}, Got: ${mappedItem.id}`,
227
+ );
228
+
229
+ if (mappedItem.id !== expectedValue && expectedValue) {
230
+ console.warn(
231
+ `Value mismatch! Path: ${this._config.dataValueField}, Expected: ${expectedValue}, Got: ${mappedItem.id}`,
232
+ );
233
+ }
234
+ }
235
+ }
236
+
237
+ if (this._config.debug)
238
+ console.log(`Mapped item: ${JSON.stringify(mappedItem)}`);
239
+ return mappedItem;
240
+ });
241
+
242
+ if (this._config.debug)
243
+ console.log(`Returned ${mappedData.length} mapped items`);
244
+ return mappedData;
245
+ } catch (error) {
246
+ console.error('Error processing remote data:', error);
247
+ this._hasError = true;
248
+ this._errorMessage = 'Error processing data';
249
+ return [];
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Map a data item to KTSelectOptionData format
255
+ * @param item Data item from API
256
+ * @returns KTSelectOptionData object
257
+ */
258
+ private _mapItemToOption(item: any): KTSelectOptionData {
259
+ // Get the field mapping from config with fallbacks for common field names
260
+ const valueField = this._config.dataValueField || 'id';
261
+ const labelField = this._config.dataFieldText || 'title';
262
+ const descriptionField = this._config.dataFieldDescription || 'description';
263
+ const iconField = this._config.dataFieldIcon || 'icon';
264
+
265
+ if (this._config.debug)
266
+ console.log(
267
+ `Mapping fields: value=${valueField}, label=${labelField}, description=${descriptionField}, icon=${iconField}`,
268
+ );
269
+ if (this._config.debug)
270
+ console.log('Item data:', JSON.stringify(item).substring(0, 200) + '...'); // Trimmed for readability
271
+
272
+ // Extract values using dot notation if needed
273
+ const getValue = (obj: any, path: string): any => {
274
+ if (!path) return null;
275
+ if (!obj) return null;
276
+
277
+ try {
278
+ // Handle dot notation to access nested properties
279
+ const parts = path.split('.');
280
+ let result = obj;
281
+
282
+ for (const part of parts) {
283
+ if (
284
+ result === null ||
285
+ result === undefined ||
286
+ typeof result !== 'object'
287
+ ) {
288
+ return null;
289
+ }
290
+ result = result[part];
291
+ }
292
+
293
+ // Log the extraction result
294
+ if (this._config.debug)
295
+ console.log(
296
+ `Extracted [${path}] => ${
297
+ result !== null && result !== undefined
298
+ ? typeof result === 'object'
299
+ ? JSON.stringify(result).substring(0, 50)
300
+ : String(result).substring(0, 50)
301
+ : 'null'
302
+ }`,
303
+ );
304
+
305
+ return result;
306
+ } catch (error) {
307
+ console.error(`Error extracting path ${path}:`, error);
308
+ return null;
309
+ }
310
+ };
311
+
312
+ // Try to get a usable ID, with fallbacks
313
+ let id = getValue(item, valueField);
314
+
315
+ // Ensure id is always a proper string
316
+ if (id === null || id === undefined) {
317
+ // If no ID found, check for id.value or item.id as fallbacks
318
+ if (
319
+ item.id &&
320
+ typeof item.id === 'object' &&
321
+ 'value' in item.id &&
322
+ item.id.value
323
+ ) {
324
+ id = String(item.id.value);
325
+ if (this._config.debug)
326
+ console.log(`Using id.value as fallback: ${id}`);
327
+ } else if (item.id) {
328
+ id = String(item.id);
329
+ if (this._config.debug)
330
+ console.log(`Using direct item.id as fallback: ${id}`);
331
+ } else {
332
+ // If no ID found at all, use the title instead (will be extracted below)
333
+ if (this._config.debug)
334
+ console.log(`No ID found, will use title as fallback`);
335
+ id = null;
336
+ }
337
+ } else if (typeof id === 'object') {
338
+ // If ID is an object, log the issue and set to null to use title fallback
339
+ console.warn(
340
+ `ID for path ${valueField} is an object, will use title fallback instead`,
341
+ );
342
+ id = null;
343
+ } else {
344
+ // Otherwise, ensure it's a string
345
+ id = String(id);
346
+ if (this._config.debug) console.log(`Final ID value: ${id}`);
347
+ }
348
+
349
+ // Try to get a usable title, with fallbacks
350
+ let title = getValue(item, labelField);
351
+ title = title !== null ? String(title) : '';
352
+ if (this._config.debug)
353
+ console.log(`Title/label field [${labelField}]:`, title);
354
+
355
+ // If title is still empty, try common field names
356
+ if (!title) {
357
+ // Try common field names if the configured one doesn't work
358
+ if (item.name) title = String(item.name);
359
+ else if (item.title) title = String(item.title);
360
+ else if (item.label) title = String(item.label);
361
+ else if (item.text) title = String(item.text);
362
+ if (this._config.debug)
363
+ console.log('After fallback checks, title:', title);
364
+ }
365
+
366
+ // Get description - make sure we don't pass null, undefined, or "null" string values
367
+ let description = getValue(item, descriptionField);
368
+ if (
369
+ description === null ||
370
+ description === undefined ||
371
+ String(description) === 'null' ||
372
+ String(description) === 'undefined'
373
+ ) {
374
+ description = null;
375
+ } else {
376
+ description = String(description);
377
+ }
378
+ if (this._config.debug)
379
+ console.log(`Description field [${descriptionField}]:`, description);
380
+
381
+ // Try to get an icon - make sure we don't pass null, undefined, or "null" string values
382
+ let icon = getValue(item, iconField);
383
+ if (
384
+ icon === null ||
385
+ icon === undefined ||
386
+ String(icon) === 'null' ||
387
+ String(icon) === 'undefined'
388
+ ) {
389
+ icon = null;
390
+ } else {
391
+ icon = String(icon);
392
+ }
393
+ if (this._config.debug) console.log(`Icon field [${iconField}]:`, icon);
394
+
395
+ // If ID is null, use the title as fallback
396
+ if (id === null || id === '') {
397
+ id = title;
398
+ if (this._config.debug)
399
+ console.log(`Using title as fallback for ID: ${id}`);
400
+ }
401
+
402
+ // Create the option object with non-empty values
403
+ const result = {
404
+ id: id || title || 'id-' + Math.random().toString(36).substr(2, 9), // Ensure we always have an ID
405
+ title: title || 'Unnamed option',
406
+ description: description,
407
+ icon: icon,
408
+ };
409
+
410
+ if (this._config.debug)
411
+ console.log('Final mapped item:', JSON.stringify(result));
412
+ return result;
413
+ }
414
+
415
+ /**
416
+ * Load the next page of results
417
+ * @returns Promise with fetched items
418
+ */
419
+ public loadNextPage(): Promise<KTSelectOptionData[]> {
420
+ if (this._currentPage < this._totalPages) {
421
+ return this.fetchData(this._lastQuery, this._currentPage + 1);
422
+ }
423
+ return Promise.resolve([]);
424
+ }
425
+
426
+ /**
427
+ * Check if there are more pages available
428
+ * @returns Boolean indicating if more pages exist
429
+ */
430
+ public hasMorePages(): boolean {
431
+ return this._currentPage < this._totalPages;
432
+ }
433
+
434
+ /**
435
+ * Get loading state
436
+ * @returns Boolean indicating if data is loading
437
+ */
438
+ public isLoading(): boolean {
439
+ return this._isLoading;
440
+ }
441
+
442
+ /**
443
+ * Get error state
444
+ * @returns Boolean indicating if there was an error
445
+ */
446
+ public hasError(): boolean {
447
+ return this._hasError;
448
+ }
449
+
450
+ /**
451
+ * Get error message
452
+ * @returns Error message
453
+ */
454
+ public getErrorMessage(): string {
455
+ return this._errorMessage;
456
+ }
457
+
458
+ /**
459
+ * Reset the remote data state
460
+ */
461
+ public reset(): void {
462
+ this._isLoading = false;
463
+ this._hasError = false;
464
+ this._errorMessage = '';
465
+ this._currentPage = 1;
466
+ this._totalPages = 1;
467
+ this._lastQuery = '';
468
+ }
469
+
470
+ /**
471
+ * Set the select element for event dispatching
472
+ * @param element The select element
473
+ */
474
+ public setElement(element: HTMLElement): void {
475
+ this._element = element;
476
+ }
477
+ }