@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,40 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ @layer components {
7
+ .kt-tabs.kt-tabs-line {
8
+ @apply flex items-center gap-7 border-b border-border;
9
+ }
10
+
11
+ .kt-tabs.kt-tabs-line .kt-tab-toggle {
12
+ @apply inline-flex items-center gap-2 py-2 font-medium border-b-2 border-b-transparent text-secondary-foreground hover:text-primary kt-tab-active:text-primary kt-tab-active:border-primary text-sm cursor-pointer;
13
+
14
+ svg {
15
+ @apply shrink-0 size-3.5 text-muted-foreground kt-tab-active:text-primary;
16
+ }
17
+
18
+ &:hover {
19
+ svg {
20
+ @apply text-primary;
21
+ }
22
+ }
23
+ }
24
+ }
25
+
26
+ @custom-variant kt-tab-active {
27
+ &[data-kt-tab-toggle].active {
28
+ @slot;
29
+ }
30
+
31
+ [data-kt-tab-toggle].active & {
32
+ @slot;
33
+ }
34
+
35
+ [data-kt-tabs-initialized]
36
+ [data-kt-dropdown-initialized]:has([data-kt-tab-toggle].active)
37
+ & {
38
+ @slot;
39
+ }
40
+ }
@@ -0,0 +1,190 @@
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 KTData from '../../helpers/data';
7
+ import KTDom from '../../helpers/dom';
8
+ import KTEventHandler from '../../helpers/event-handler';
9
+ import KTComponent from '../component';
10
+ import { KTTabsInterface, KTTabsConfigInterface } from './types';
11
+
12
+ declare global {
13
+ interface Window {
14
+ KT_TABS_INITIALIZED: boolean;
15
+ KTTabs: typeof KTTabs;
16
+ }
17
+ }
18
+
19
+ export class KTTabs extends KTComponent implements KTTabsInterface {
20
+ protected override _name: string = 'tabs';
21
+ protected override _defaultConfig: KTTabsConfigInterface = {
22
+ hiddenClass: 'hidden',
23
+ };
24
+ protected override _config: KTTabsConfigInterface = this._defaultConfig;
25
+ protected _currentTabElement: HTMLElement | null = null;
26
+ protected _currentContentElement: HTMLElement | null = null;
27
+ protected _lastTabElement: HTMLElement | null = null;
28
+ protected _lastContentElement: HTMLElement | null = null;
29
+ protected _tabElements: NodeListOf<HTMLElement> | null = null;
30
+ protected _isTransitioning: boolean = false;
31
+
32
+ constructor(element: HTMLElement, config?: KTTabsConfigInterface) {
33
+ super();
34
+
35
+ if (KTData.has(element as HTMLElement, this._name)) return;
36
+
37
+ this._init(element);
38
+ this._buildConfig(config);
39
+
40
+ if (!this._element) return;
41
+ this._tabElements = this._element.querySelectorAll('[data-kt-tab-toggle]');
42
+ this._currentTabElement = this._element.querySelector(
43
+ '.active[data-kt-tab-toggle]',
44
+ );
45
+ this._currentContentElement =
46
+ (this._currentTabElement &&
47
+ (KTDom.getElement(
48
+ this._currentTabElement.getAttribute('data-kt-tab-toggle'),
49
+ ) ||
50
+ KTDom.getElement(this._currentTabElement.getAttribute('href')))) ||
51
+ null;
52
+
53
+ this._handlers();
54
+ }
55
+
56
+ protected _handlers(): void {
57
+ if (!this._element) return;
58
+
59
+ KTEventHandler.on(
60
+ this._element,
61
+ '[data-kt-tab-toggle]',
62
+ 'click',
63
+ (event: Event, target: HTMLElement) => {
64
+ event.preventDefault();
65
+ this._show(target);
66
+ },
67
+ );
68
+ }
69
+
70
+ protected _show(tabElement: HTMLElement): void {
71
+ if (this._isShown(tabElement) || this._isTransitioning) return;
72
+
73
+ const payload = { cancel: false };
74
+ this._fireEvent('show', payload);
75
+ this._dispatchEvent('show', payload);
76
+ if (payload.cancel === true) {
77
+ return;
78
+ }
79
+
80
+ this._currentTabElement?.classList.remove('active');
81
+ this._currentTabElement?.classList.remove('selected');
82
+ this._currentContentElement?.classList.add(
83
+ this._getOption('hiddenClass') as string,
84
+ );
85
+ this._lastTabElement = this._currentTabElement;
86
+ this._getDropdownToggleElement(this._lastTabElement)?.classList.remove(
87
+ 'active',
88
+ );
89
+
90
+ this._lastContentElement = this._currentContentElement;
91
+ this._currentTabElement = tabElement;
92
+ this._currentContentElement =
93
+ KTDom.getElement(tabElement.getAttribute('data-kt-tab-toggle')) ||
94
+ KTDom.getElement(tabElement.getAttribute('href'));
95
+ this._currentTabElement?.classList.add('active');
96
+ this._currentTabElement?.classList.add('selected');
97
+ this._currentContentElement?.classList.remove(
98
+ this._getOption('hiddenClass') as string,
99
+ );
100
+ this._getDropdownToggleElement(this._currentTabElement)?.classList.add(
101
+ 'active',
102
+ );
103
+
104
+ this._currentContentElement.style.opacity = '0';
105
+ KTDom.reflow(this._currentContentElement);
106
+ this._currentContentElement.style.opacity = '1';
107
+
108
+ KTDom.transitionEnd(this._currentContentElement, () => {
109
+ this._isTransitioning = false;
110
+ this._currentContentElement.style.opacity = '';
111
+
112
+ this._fireEvent('shown');
113
+ this._dispatchEvent('shown');
114
+ });
115
+ }
116
+
117
+ protected _getDropdownToggleElement(element: HTMLElement): HTMLElement {
118
+ const containerElement = element.closest(
119
+ '[data-kt-dropdown-initialized],[data-kt-menu-initialized]',
120
+ ) as HTMLElement;
121
+
122
+ if (containerElement) {
123
+ return containerElement.querySelector(
124
+ '[data-kt-dropdown-toggle], [data-kt-menu-toggle]',
125
+ );
126
+ } else {
127
+ return null;
128
+ }
129
+ }
130
+
131
+ protected _isShown(tabElement: HTMLElement): boolean {
132
+ return tabElement.classList.contains('active');
133
+ }
134
+
135
+ public isShown(tabElement: HTMLElement): boolean {
136
+ return this._isShown(tabElement);
137
+ }
138
+
139
+ public show(tabElement: HTMLElement): void {
140
+ return this._show(tabElement);
141
+ }
142
+
143
+ public static keyboardArrow(): void {}
144
+
145
+ public static keyboardJump(): void {}
146
+
147
+ public static handleAccessibility(): void {}
148
+
149
+ public static getInstance(element: HTMLElement): KTTabs {
150
+ if (!element) return null;
151
+
152
+ if (KTData.has(element, 'tabs')) {
153
+ return KTData.get(element, 'tabs') as KTTabs;
154
+ }
155
+
156
+ if (element.getAttribute('data-kt-tabs')) {
157
+ return new KTTabs(element);
158
+ }
159
+
160
+ return null;
161
+ }
162
+
163
+ public static getOrCreateInstance(
164
+ element: HTMLElement,
165
+ config?: KTTabsConfigInterface,
166
+ ): KTTabs {
167
+ return this.getInstance(element) || new KTTabs(element, config);
168
+ }
169
+
170
+ public static createInstances(): void {
171
+ const elements = document.querySelectorAll('[data-kt-tabs]');
172
+
173
+ elements.forEach((element) => {
174
+ new KTTabs(element as HTMLElement);
175
+ });
176
+ }
177
+
178
+ public static init(): void {
179
+ KTTabs.createInstances();
180
+
181
+ if (window.KT_TABS_INITIALIZED !== true) {
182
+ KTTabs.handleAccessibility();
183
+ window.KT_TABS_INITIALIZED = true;
184
+ }
185
+ }
186
+ }
187
+
188
+ if (typeof window !== 'undefined') {
189
+ window.KTTabs = KTTabs;
190
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export interface KTTabsConfigInterface {
7
+ hiddenClass: string;
8
+ }
9
+
10
+ export interface KTTabsInterface {
11
+ show(tabElement: HTMLElement): void;
12
+ isShown(tabElement: HTMLElement): boolean;
13
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ /* Base Styles */
7
+ @layer components {
8
+ /* Base */
9
+ .kt-textarea {
10
+ @apply w-full bg-background border border-input text-foreground shadow-xs shadow-[rgba(0,0,0,0.05)] transition-[color,box-shadow] placeholder:text-muted-foreground/80;
11
+ @apply focus-visible:border-ring focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/30;
12
+ @apply disabled:cursor-not-allowed disabled:opacity-50 [&[readonly]]:opacity-70 aria-invalid:border-destructive/60;
13
+ @apply aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10;
14
+ }
15
+
16
+ /* Size */
17
+ .kt-textarea {
18
+ @apply p-3 text-[0.8125rem] leading-(--text-sm--line-height) rounded-md;
19
+ }
20
+
21
+ .kt-textarea-lg {
22
+ @apply p-4 text-sm rounded-md;
23
+ }
24
+
25
+ .kt-textarea-sm {
26
+ @apply p-2.5 text-xs rounded-md;
27
+ }
28
+ }
29
+
30
+ /* Dark Mode Styles */
31
+ @layer components {
32
+ .dark .kt-textarea {
33
+ @apply aria-invalid:border-destructive aria-invalid:ring-destructive/20;
34
+ }
35
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export { KTThemeSwitch } from './theme-switch';
7
+ export type {
8
+ KTThemeSwitchConfigInterface,
9
+ KTThemeSwitchInterface,
10
+ } from './types';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ @custom-variant kt-theme-switch-light {
7
+ [data-kt-theme-switch-mode='light'] & {
8
+ @slot;
9
+ }
10
+ }
11
+
12
+ @custom-variant kt-theme-switch-dark {
13
+ [data-kt-theme-switch-mode='dark'] & {
14
+ @slot;
15
+ }
16
+ }
17
+
18
+ @custom-variant kt-theme-switch-system {
19
+ [data-kt-theme-switch-mode='system'] & {
20
+ @slot;
21
+ }
22
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ /* eslint-disable max-len */
7
+ /* eslint-disable require-jsdoc */
8
+
9
+ import KTData from '../../helpers/data';
10
+ import KTEventHandler from '../../helpers/event-handler';
11
+ import KTComponent from '../component';
12
+ import { KTThemeSwitchInterface, KTThemeSwitchConfigInterface } from './types';
13
+ import { KTThemeSwitchModeType } from './types';
14
+
15
+ declare global {
16
+ interface Window {
17
+ KT_STICKY_INITIALIZED: boolean;
18
+ KTThemeSwitch: typeof KTThemeSwitch;
19
+ }
20
+ }
21
+
22
+ export class KTThemeSwitch
23
+ extends KTComponent
24
+ implements KTThemeSwitchInterface
25
+ {
26
+ protected override _name: string = 'theme-swtich';
27
+ protected override _defaultConfig: KTThemeSwitchConfigInterface = {
28
+ mode: 'light',
29
+ };
30
+ protected _mode: KTThemeSwitchModeType | null = null;
31
+ protected _currentMode: KTThemeSwitchModeType | null = null;
32
+
33
+ constructor(
34
+ element: HTMLElement | HTMLHtmlElement,
35
+ config: KTThemeSwitchConfigInterface | null = null,
36
+ ) {
37
+ super();
38
+
39
+ if (KTData.has(element as HTMLElement | HTMLHtmlElement, this._name))
40
+ return;
41
+
42
+ this._init(element);
43
+ this._buildConfig(config);
44
+ this._setMode(
45
+ (localStorage.getItem('kt-theme') ||
46
+ this._getOption('mode')) as KTThemeSwitchModeType,
47
+ );
48
+ this._handlers();
49
+ }
50
+
51
+ protected _handlers(): void {
52
+ if (!this._element) return;
53
+
54
+ KTEventHandler.on(
55
+ document.body,
56
+ '[data-kt-theme-switch-toggle]',
57
+ 'click',
58
+ () => {
59
+ this._toggle();
60
+ },
61
+ );
62
+
63
+ KTEventHandler.on(
64
+ document.body,
65
+ '[data-kt-theme-switch-set]',
66
+ 'click',
67
+ (event: Event, target: HTMLElement) => {
68
+ event.preventDefault();
69
+ const mode = target.getAttribute(
70
+ 'data-kt-theme-switch-set',
71
+ ) as KTThemeSwitchModeType;
72
+ this._setMode(mode);
73
+ },
74
+ );
75
+ }
76
+
77
+ protected _toggle() {
78
+ const mode = this._currentMode === 'light' ? 'dark' : 'light';
79
+
80
+ this._setMode(mode);
81
+ }
82
+
83
+ protected _setMode(mode: KTThemeSwitchModeType): void {
84
+ if (!this._element) return;
85
+ const payload = { cancel: false };
86
+ this._fireEvent('change', payload);
87
+ this._dispatchEvent('change', payload);
88
+ if (payload.cancel === true) {
89
+ return;
90
+ }
91
+
92
+ let currentMode: KTThemeSwitchModeType = mode;
93
+ if (mode === 'system') {
94
+ currentMode = this._getSystemMode();
95
+ }
96
+
97
+ this._mode = mode;
98
+ this._currentMode = currentMode;
99
+ this._bindMode();
100
+ this._updateState();
101
+ localStorage.setItem('kt-theme', this._mode);
102
+ this._element.setAttribute('data-kt-theme-switch-mode', mode);
103
+
104
+ this._fireEvent('changed', {});
105
+ this._dispatchEvent('changed', {});
106
+ }
107
+
108
+ protected _getMode(): KTThemeSwitchModeType {
109
+ return (
110
+ (localStorage.getItem('kt-theme') as KTThemeSwitchModeType) || this._mode
111
+ );
112
+ }
113
+
114
+ protected _getSystemMode(): KTThemeSwitchModeType {
115
+ return window.matchMedia('(prefers-color-scheme: dark)').matches
116
+ ? 'dark'
117
+ : 'light';
118
+ }
119
+
120
+ protected _bindMode(): void {
121
+ if (!this._currentMode || !this._element) {
122
+ return;
123
+ }
124
+
125
+ this._element.classList.remove('dark');
126
+ this._element.classList.remove('light');
127
+ this._element.removeAttribute(this._getOption('attribute') as string);
128
+ this._element.classList.add(this._currentMode);
129
+ }
130
+
131
+ protected _updateState() {
132
+ const elements = document.querySelectorAll<HTMLInputElement>(
133
+ 'input[type="checkbox"][data-kt-theme-switch-state]',
134
+ );
135
+ elements.forEach((element) => {
136
+ if (element.getAttribute('data-kt-theme-switch-state') === this._mode) {
137
+ element.checked = true;
138
+ }
139
+ });
140
+ }
141
+
142
+ public getMode(): KTThemeSwitchModeType {
143
+ return this._getMode();
144
+ }
145
+
146
+ public setMode(mode: KTThemeSwitchModeType) {
147
+ this.setMode(mode);
148
+ }
149
+
150
+ public static getInstance(): KTThemeSwitch {
151
+ const root = document.documentElement;
152
+
153
+ if (KTData.has(root, 'theme-switch')) {
154
+ return KTData.get(root, 'theme-switch') as KTThemeSwitch;
155
+ }
156
+
157
+ if (root) {
158
+ return new KTThemeSwitch(root);
159
+ }
160
+
161
+ return null;
162
+ }
163
+
164
+ public static createInstances(): void {
165
+ const root = document.documentElement;
166
+ if (root) new KTThemeSwitch(root);
167
+ }
168
+
169
+ public static init(): void {
170
+ KTThemeSwitch.createInstances();
171
+ }
172
+ }
173
+
174
+ if (typeof window !== 'undefined') {
175
+ window.KTThemeSwitch = KTThemeSwitch;
176
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export declare type KTThemeSwitchModeType = 'light' | 'dark' | 'system';
7
+
8
+ export interface KTThemeSwitchConfigInterface {
9
+ mode: KTThemeSwitchModeType;
10
+ }
11
+
12
+ export interface KTThemeSwitchInterface {
13
+ setMode(mode: KTThemeSwitchModeType): void;
14
+ getMode(): KTThemeSwitchModeType;
15
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ export { KTToggle } from './toggle';
7
+ export type { KTToggleConfigInterface, KTToggleInterface } from './types';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
3
+ * Copyright 2025 by Keenthemes Inc
4
+ * @version: 1.0.0
5
+ */
6
+ @custom-variant kt-toggle-active {
7
+ &[data-kt-toggle].active {
8
+ @slot;
9
+ }
10
+ [data-kt-toggle].active & {
11
+ @slot;
12
+ }
13
+ }
@@ -0,0 +1,173 @@
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 KTData from '../../helpers/data';
7
+ import KTDom from '../../helpers/dom';
8
+ import KTComponent from '../component';
9
+ import { KTToggleConfigInterface, KTToggleInterface } from './types';
10
+
11
+ declare global {
12
+ interface Window {
13
+ KTToggle: typeof KTToggle;
14
+ }
15
+ }
16
+
17
+ export class KTToggle extends KTComponent implements KTToggleInterface {
18
+ protected override _name: string = 'toggle';
19
+ protected override _defaultConfig: KTToggleConfigInterface = {
20
+ target: '',
21
+ activeClass: 'active',
22
+ class: '',
23
+ removeClass: '',
24
+ attribute: '',
25
+ };
26
+ protected override _config: KTToggleConfigInterface = this._defaultConfig;
27
+ protected _targetElement: HTMLElement;
28
+
29
+ constructor(
30
+ element: HTMLElement,
31
+ config: KTToggleConfigInterface | null = null,
32
+ ) {
33
+ super();
34
+
35
+ if (KTData.has(element as HTMLElement, this._name)) return;
36
+
37
+ this._init(element);
38
+ this._buildConfig(config);
39
+
40
+ this._targetElement = this._getTargetElement();
41
+ if (!this._targetElement) {
42
+ return;
43
+ }
44
+
45
+ this._handlers();
46
+ }
47
+
48
+ protected _handlers(): void {
49
+ if (!this._element) return;
50
+
51
+ this._element.addEventListener('click', () => {
52
+ this._toggle();
53
+ });
54
+ }
55
+
56
+ private _getTargetElement(): HTMLElement | null {
57
+ return (
58
+ KTDom.getElement(
59
+ this._element.getAttribute('data-kt-toggle') as string,
60
+ ) || KTDom.getElement(this._getOption('target') as string)
61
+ );
62
+ }
63
+
64
+ protected _toggle(): void {
65
+ if (!this._element) return;
66
+ const payload = { cancel: false };
67
+ this._fireEvent('toggle', payload);
68
+ this._dispatchEvent('toggle', payload);
69
+ if (payload.cancel === true) {
70
+ return;
71
+ }
72
+
73
+ this._element.classList.toggle(this._getOption('activeClass') as string);
74
+ this._update();
75
+
76
+ this._fireEvent('toggled');
77
+ this._dispatchEvent('toggled');
78
+ }
79
+
80
+ protected _update(): void {
81
+ if (!this._targetElement) return;
82
+
83
+ if (this._getOption('removeClass')) {
84
+ KTDom.removeClass(
85
+ this._targetElement,
86
+ this._getOption('removeClass') as string,
87
+ );
88
+ }
89
+
90
+ if (!this._isActive()) {
91
+ if (this._getOption('class')) {
92
+ KTDom.addClass(this._targetElement, this._getOption('class') as string);
93
+ }
94
+
95
+ if (this._getOption('attribute')) {
96
+ this._targetElement.setAttribute(
97
+ this._getOption('attribute') as string,
98
+ 'true',
99
+ );
100
+ }
101
+ } else {
102
+ if (this._getOption('class')) {
103
+ KTDom.removeClass(
104
+ this._targetElement,
105
+ this._getOption('class') as string,
106
+ );
107
+ }
108
+
109
+ if (this._getOption('attribute')) {
110
+ this._targetElement.removeAttribute(
111
+ this._getOption('attribute') as string,
112
+ );
113
+ }
114
+ }
115
+ }
116
+
117
+ public _isActive(): boolean {
118
+ if (!this._element) return false;
119
+
120
+ return (
121
+ KTDom.hasClass(this._targetElement, this._getOption('class') as string) ||
122
+ this._targetElement.hasAttribute(this._getOption('attribute') as string)
123
+ );
124
+ }
125
+
126
+ public toggle(): void {
127
+ this._toggle();
128
+ }
129
+
130
+ public update(): void {
131
+ this._update();
132
+ }
133
+
134
+ public isActive(): boolean {
135
+ return this._isActive();
136
+ }
137
+
138
+ public static getInstance(element: HTMLElement): KTToggle {
139
+ if (!element) return null;
140
+
141
+ if (KTData.has(element, 'toggle')) {
142
+ return KTData.get(element, 'toggle') as KTToggle;
143
+ }
144
+
145
+ if (element.getAttribute('data-kt-toggle')) {
146
+ return new KTToggle(element);
147
+ }
148
+
149
+ return null;
150
+ }
151
+
152
+ public static getOrCreateInstance(
153
+ element: HTMLElement,
154
+ config?: KTToggleConfigInterface,
155
+ ): KTToggle {
156
+ return this.getInstance(element) || new KTToggle(element, config);
157
+ }
158
+
159
+ public static createInstances(): void {
160
+ const elements = document.querySelectorAll('[data-kt-toggle]');
161
+ elements.forEach((element) => {
162
+ new KTToggle(element as HTMLElement);
163
+ });
164
+ }
165
+
166
+ public static init(): void {
167
+ KTToggle.createInstances();
168
+ }
169
+ }
170
+
171
+ if (typeof window !== 'undefined') {
172
+ window.KTToggle = KTToggle;
173
+ }