@keenthemes/ktui 1.0.28 → 1.1.0

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 (288) hide show
  1. package/README.md +27 -0
  2. package/dist/ktui.js +8780 -6199
  3. package/dist/ktui.min.js +1 -1
  4. package/dist/ktui.min.js.map +1 -1
  5. package/dist/styles.css +2744 -1367
  6. package/lib/cjs/components/alert/alert.js +1025 -0
  7. package/lib/cjs/components/alert/alert.js.map +1 -0
  8. package/lib/cjs/components/alert/index.js +20 -0
  9. package/lib/cjs/components/alert/index.js.map +1 -0
  10. package/lib/cjs/components/alert/templates.js +120 -0
  11. package/lib/cjs/components/alert/templates.js.map +1 -0
  12. package/lib/cjs/components/alert/types.js +7 -0
  13. package/lib/cjs/components/alert/types.js.map +1 -0
  14. package/lib/cjs/components/datepicker/config/config.js +42 -0
  15. package/lib/cjs/components/datepicker/config/config.js.map +1 -0
  16. package/lib/cjs/components/datepicker/config/index.js +24 -0
  17. package/lib/cjs/components/datepicker/config/index.js.map +1 -0
  18. package/lib/cjs/components/datepicker/config/interfaces.js +7 -0
  19. package/lib/cjs/components/datepicker/config/interfaces.js.map +1 -0
  20. package/lib/cjs/components/datepicker/config/types.js +7 -0
  21. package/lib/cjs/components/datepicker/config/types.js.map +1 -0
  22. package/lib/cjs/components/datepicker/core/event-manager.js +135 -0
  23. package/lib/cjs/components/datepicker/core/event-manager.js.map +1 -0
  24. package/lib/cjs/components/datepicker/core/focus-manager.js +167 -0
  25. package/lib/cjs/components/datepicker/core/focus-manager.js.map +1 -0
  26. package/lib/cjs/components/datepicker/core/helpers.js +219 -0
  27. package/lib/cjs/components/datepicker/core/helpers.js.map +1 -0
  28. package/lib/cjs/components/datepicker/core/index.js +25 -0
  29. package/lib/cjs/components/datepicker/core/index.js.map +1 -0
  30. package/lib/cjs/components/datepicker/core/unified-state-manager.js +394 -0
  31. package/lib/cjs/components/datepicker/core/unified-state-manager.js.map +1 -0
  32. package/lib/cjs/components/datepicker/datepicker.js +2066 -763
  33. package/lib/cjs/components/datepicker/datepicker.js.map +1 -1
  34. package/lib/cjs/components/datepicker/index.js +19 -8
  35. package/lib/cjs/components/datepicker/index.js.map +1 -1
  36. package/lib/cjs/components/datepicker/ui/index.js +23 -0
  37. package/lib/cjs/components/datepicker/ui/index.js.map +1 -0
  38. package/lib/cjs/components/datepicker/ui/input/dropdown.js +489 -0
  39. package/lib/cjs/components/datepicker/ui/input/dropdown.js.map +1 -0
  40. package/lib/cjs/components/datepicker/ui/input/index.js +23 -0
  41. package/lib/cjs/components/datepicker/ui/input/index.js.map +1 -0
  42. package/lib/cjs/components/datepicker/ui/input/segmented-input.js +640 -0
  43. package/lib/cjs/components/datepicker/ui/input/segmented-input.js.map +1 -0
  44. package/lib/cjs/components/datepicker/ui/renderers/calendar.js +446 -0
  45. package/lib/cjs/components/datepicker/ui/renderers/calendar.js.map +1 -0
  46. package/lib/cjs/components/datepicker/ui/renderers/footer.js +42 -0
  47. package/lib/cjs/components/datepicker/ui/renderers/footer.js.map +1 -0
  48. package/lib/cjs/components/datepicker/ui/renderers/header.js +32 -0
  49. package/lib/cjs/components/datepicker/ui/renderers/header.js.map +1 -0
  50. package/lib/cjs/components/datepicker/ui/renderers/index.js +25 -0
  51. package/lib/cjs/components/datepicker/ui/renderers/index.js.map +1 -0
  52. package/lib/cjs/components/datepicker/ui/renderers/time-picker.js +384 -0
  53. package/lib/cjs/components/datepicker/ui/renderers/time-picker.js.map +1 -0
  54. package/lib/cjs/components/datepicker/ui/templates/index.js +22 -0
  55. package/lib/cjs/components/datepicker/ui/templates/index.js.map +1 -0
  56. package/lib/cjs/components/datepicker/ui/templates/templates.js +253 -0
  57. package/lib/cjs/components/datepicker/ui/templates/templates.js.map +1 -0
  58. package/lib/cjs/components/datepicker/utils/date-formatters.js +88 -0
  59. package/lib/cjs/components/datepicker/utils/date-formatters.js.map +1 -0
  60. package/lib/cjs/components/datepicker/utils/date-utils.js +194 -0
  61. package/lib/cjs/components/datepicker/utils/date-utils.js.map +1 -0
  62. package/lib/cjs/components/datepicker/utils/index.js +24 -0
  63. package/lib/cjs/components/datepicker/utils/index.js.map +1 -0
  64. package/lib/cjs/components/datepicker/utils/time-utils.js +213 -0
  65. package/lib/cjs/components/datepicker/utils/time-utils.js.map +1 -0
  66. package/lib/cjs/index.js +6 -1
  67. package/lib/cjs/index.js.map +1 -1
  68. package/lib/esm/components/alert/alert.js +1022 -0
  69. package/lib/esm/components/alert/alert.js.map +1 -0
  70. package/lib/esm/components/alert/index.js +4 -0
  71. package/lib/esm/components/alert/index.js.map +1 -0
  72. package/lib/esm/components/alert/templates.js +112 -0
  73. package/lib/esm/components/alert/templates.js.map +1 -0
  74. package/lib/esm/components/alert/types.js +6 -0
  75. package/lib/esm/components/alert/types.js.map +1 -0
  76. package/lib/esm/components/datepicker/config/config.js +39 -0
  77. package/lib/esm/components/datepicker/config/config.js.map +1 -0
  78. package/lib/esm/components/datepicker/config/index.js +8 -0
  79. package/lib/esm/components/datepicker/config/index.js.map +1 -0
  80. package/lib/esm/components/datepicker/config/interfaces.js +6 -0
  81. package/lib/esm/components/datepicker/config/interfaces.js.map +1 -0
  82. package/lib/esm/components/datepicker/config/types.js +6 -0
  83. package/lib/esm/components/datepicker/config/types.js.map +1 -0
  84. package/lib/esm/components/datepicker/core/event-manager.js +133 -0
  85. package/lib/esm/components/datepicker/core/event-manager.js.map +1 -0
  86. package/lib/esm/components/datepicker/core/focus-manager.js +164 -0
  87. package/lib/esm/components/datepicker/core/focus-manager.js.map +1 -0
  88. package/lib/esm/components/datepicker/core/helpers.js +211 -0
  89. package/lib/esm/components/datepicker/core/helpers.js.map +1 -0
  90. package/lib/esm/components/datepicker/core/index.js +9 -0
  91. package/lib/esm/components/datepicker/core/index.js.map +1 -0
  92. package/lib/esm/components/datepicker/core/unified-state-manager.js +391 -0
  93. package/lib/esm/components/datepicker/core/unified-state-manager.js.map +1 -0
  94. package/lib/esm/components/datepicker/datepicker.js +2065 -763
  95. package/lib/esm/components/datepicker/datepicker.js.map +1 -1
  96. package/lib/esm/components/datepicker/index.js +6 -8
  97. package/lib/esm/components/datepicker/index.js.map +1 -1
  98. package/lib/esm/components/datepicker/ui/index.js +7 -0
  99. package/lib/esm/components/datepicker/ui/index.js.map +1 -0
  100. package/lib/esm/components/datepicker/ui/input/dropdown.js +486 -0
  101. package/lib/esm/components/datepicker/ui/input/dropdown.js.map +1 -0
  102. package/lib/esm/components/datepicker/ui/input/index.js +7 -0
  103. package/lib/esm/components/datepicker/ui/input/index.js.map +1 -0
  104. package/lib/esm/components/datepicker/ui/input/segmented-input.js +637 -0
  105. package/lib/esm/components/datepicker/ui/input/segmented-input.js.map +1 -0
  106. package/lib/esm/components/datepicker/ui/renderers/calendar.js +443 -0
  107. package/lib/esm/components/datepicker/ui/renderers/calendar.js.map +1 -0
  108. package/lib/esm/components/datepicker/ui/renderers/footer.js +39 -0
  109. package/lib/esm/components/datepicker/ui/renderers/footer.js.map +1 -0
  110. package/lib/esm/components/datepicker/ui/renderers/header.js +29 -0
  111. package/lib/esm/components/datepicker/ui/renderers/header.js.map +1 -0
  112. package/lib/esm/components/datepicker/ui/renderers/index.js +9 -0
  113. package/lib/esm/components/datepicker/ui/renderers/index.js.map +1 -0
  114. package/lib/esm/components/datepicker/ui/renderers/time-picker.js +381 -0
  115. package/lib/esm/components/datepicker/ui/renderers/time-picker.js.map +1 -0
  116. package/lib/esm/components/datepicker/ui/templates/index.js +6 -0
  117. package/lib/esm/components/datepicker/ui/templates/index.js.map +1 -0
  118. package/lib/esm/components/datepicker/ui/templates/templates.js +242 -0
  119. package/lib/esm/components/datepicker/ui/templates/templates.js.map +1 -0
  120. package/lib/esm/components/datepicker/utils/date-formatters.js +83 -0
  121. package/lib/esm/components/datepicker/utils/date-formatters.js.map +1 -0
  122. package/lib/esm/components/datepicker/utils/date-utils.js +184 -0
  123. package/lib/esm/components/datepicker/utils/date-utils.js.map +1 -0
  124. package/lib/esm/components/datepicker/utils/index.js +8 -0
  125. package/lib/esm/components/datepicker/utils/index.js.map +1 -0
  126. package/lib/esm/components/datepicker/utils/time-utils.js +201 -0
  127. package/lib/esm/components/datepicker/utils/time-utils.js.map +1 -0
  128. package/lib/esm/index.js +4 -0
  129. package/lib/esm/index.js.map +1 -1
  130. package/package.json +22 -3
  131. package/src/components/alert/alert.css +429 -188
  132. package/src/components/alert/alert.ts +990 -0
  133. package/src/components/alert/index.ts +4 -0
  134. package/src/components/alert/templates.ts +110 -0
  135. package/src/components/alert/tests/accessibility/aria-roles.test.ts +19 -0
  136. package/src/components/alert/tests/accessibility/focus-management.test.ts +19 -0
  137. package/src/components/alert/tests/accessibility/keyboard-nav.test.ts +22 -0
  138. package/src/components/alert/tests/actions/confirm-cancel.test.ts +122 -0
  139. package/src/components/alert/tests/actions/input-field.test.ts +180 -0
  140. package/src/components/alert/tests/alert.basic.test.ts +126 -0
  141. package/src/components/alert/tests/alert.config.test.ts +75 -0
  142. package/src/components/alert/tests/alert.templates.test.ts +17 -0
  143. package/src/components/alert/tests/config/attribute-config.test.ts +94 -0
  144. package/src/components/alert/tests/config/json-config.test.ts +119 -0
  145. package/src/components/alert/tests/config/merging.test.ts +89 -0
  146. package/src/components/alert/tests/dismissal/auto-dismiss.test.ts +96 -0
  147. package/src/components/alert/tests/dismissal/escape-key-dismiss.test.ts +105 -0
  148. package/src/components/alert/tests/dismissal/manual-dismiss.test.ts +90 -0
  149. package/src/components/alert/tests/dismissal/outside-click-dismiss.test.ts +91 -0
  150. package/src/components/alert/tests/edge-cases/invalid-config.test.ts +19 -0
  151. package/src/components/alert/tests/edge-cases/multiple-alerts.test.ts +19 -0
  152. package/src/components/alert/tests/rendering/custom-content.test.ts +81 -0
  153. package/src/components/alert/tests/rendering/info-alert.test.ts +84 -0
  154. package/src/components/alert/tests/rendering/success-alert.test.ts +100 -0
  155. package/src/components/alert/tests/templates/default-templates.test.ts +16 -0
  156. package/src/components/alert/tests/templates/user-templates.test.ts +16 -0
  157. package/src/components/alert/types.ts +145 -0
  158. package/src/components/datepicker/__tests__/datepicker-events.test.ts +356 -0
  159. package/src/components/datepicker/__tests__/datepicker-init.test.ts +343 -0
  160. package/src/components/datepicker/__tests__/datepicker-integration.test.ts +435 -0
  161. package/src/components/datepicker/__tests__/datepicker-timezone.test.ts +220 -0
  162. package/src/components/datepicker/__tests__/segmented-input-focus.test.ts +380 -0
  163. package/src/components/datepicker/__tests__/selective-state-updates.test.ts +400 -0
  164. package/src/components/datepicker/__tests__/state-manager.test.ts +421 -0
  165. package/src/components/datepicker/__tests__/time-preservation.test.ts +387 -0
  166. package/src/components/datepicker/config/config.ts +40 -0
  167. package/src/components/datepicker/config/index.ts +8 -0
  168. package/src/components/datepicker/config/interfaces.ts +82 -0
  169. package/src/components/datepicker/config/types.ts +188 -0
  170. package/src/components/datepicker/core/event-manager.ts +159 -0
  171. package/src/components/datepicker/core/focus-manager.ts +201 -0
  172. package/src/components/datepicker/core/helpers.ts +231 -0
  173. package/src/components/datepicker/core/index.ts +9 -0
  174. package/src/components/datepicker/core/unified-state-manager.ts +459 -0
  175. package/src/components/datepicker/datepicker.css +429 -1
  176. package/src/components/datepicker/datepicker.ts +2538 -1277
  177. package/src/components/datepicker/index.ts +6 -8
  178. package/src/components/datepicker/ui/index.ts +7 -0
  179. package/src/components/datepicker/ui/input/dropdown.ts +552 -0
  180. package/src/components/datepicker/ui/input/index.ts +7 -0
  181. package/src/components/datepicker/ui/input/segmented-input.ts +638 -0
  182. package/src/components/datepicker/ui/renderers/__tests__/calendar-optimizations.test.ts +611 -0
  183. package/src/components/datepicker/ui/renderers/calendar.ts +530 -0
  184. package/src/components/datepicker/ui/renderers/footer.ts +43 -0
  185. package/src/components/datepicker/ui/renderers/header.ts +33 -0
  186. package/src/components/datepicker/ui/renderers/index.ts +9 -0
  187. package/src/components/datepicker/ui/renderers/time-picker.ts +438 -0
  188. package/src/components/datepicker/ui/templates/index.ts +6 -0
  189. package/src/components/datepicker/ui/templates/templates.ts +306 -0
  190. package/src/components/datepicker/utils/__tests__/date-formatters.test.ts +160 -0
  191. package/src/components/datepicker/utils/__tests__/date-utils-keys.test.ts +86 -0
  192. package/src/components/datepicker/utils/__tests__/date-utils-timezone.test.ts +215 -0
  193. package/src/components/datepicker/utils/date-formatters.ts +85 -0
  194. package/src/components/datepicker/utils/date-utils.ts +172 -0
  195. package/src/components/datepicker/utils/index.ts +8 -0
  196. package/src/components/datepicker/utils/time-utils.ts +221 -0
  197. package/src/index.ts +7 -1
  198. package/CONTRIBUTING.md +0 -101
  199. package/examples/datatable/checkbox-events-test.html +0 -400
  200. package/examples/datatable/credentials-test.html +0 -423
  201. package/examples/datatable/remote-checkbox-test.html +0 -365
  202. package/examples/datatable/sorting-test.html +0 -258
  203. package/examples/image-input/file-upload-example.html +0 -189
  204. package/examples/modal/persistent.html +0 -205
  205. package/examples/modal/remote-select-dropdown.html +0 -166
  206. package/examples/modal/select-dropdown-container.html +0 -129
  207. package/examples/select/avatar.html +0 -47
  208. package/examples/select/basic-usage.html +0 -39
  209. package/examples/select/country.html +0 -43
  210. package/examples/select/dark-mode.html +0 -93
  211. package/examples/select/description.html +0 -53
  212. package/examples/select/disable-option.html +0 -37
  213. package/examples/select/disable-select.html +0 -35
  214. package/examples/select/dropdowncontainer.html +0 -111
  215. package/examples/select/dynamic-methods.html +0 -273
  216. package/examples/select/formdata-remote.html +0 -161
  217. package/examples/select/global-config.html +0 -81
  218. package/examples/select/icon-multiple.html +0 -50
  219. package/examples/select/icon.html +0 -48
  220. package/examples/select/max-selection.html +0 -38
  221. package/examples/select/modal-container.html +0 -128
  222. package/examples/select/modal-positioning-test.html +0 -338
  223. package/examples/select/modal.html +0 -80
  224. package/examples/select/multiple.html +0 -40
  225. package/examples/select/native-selected.html +0 -64
  226. package/examples/select/placeholder.html +0 -40
  227. package/examples/select/remote-data-preselected.html +0 -283
  228. package/examples/select/remote-data.html +0 -38
  229. package/examples/select/search.html +0 -57
  230. package/examples/select/sizes.html +0 -94
  231. package/examples/select/tags-enhanced.html +0 -86
  232. package/examples/select/tags-icons.html +0 -57
  233. package/examples/select/template-customization.html +0 -61
  234. package/examples/sticky/README.md +0 -158
  235. package/examples/sticky/debug-sticky.html +0 -144
  236. package/examples/sticky/test-runner.html +0 -175
  237. package/examples/sticky/test-sticky-logic.js +0 -369
  238. package/examples/sticky/test-sticky-positioning.html +0 -386
  239. package/examples/toast/example.html +0 -479
  240. package/lib/cjs/components/datepicker/calendar.js +0 -1061
  241. package/lib/cjs/components/datepicker/calendar.js.map +0 -1
  242. package/lib/cjs/components/datepicker/config.js +0 -332
  243. package/lib/cjs/components/datepicker/config.js.map +0 -1
  244. package/lib/cjs/components/datepicker/dropdown.js +0 -635
  245. package/lib/cjs/components/datepicker/dropdown.js.map +0 -1
  246. package/lib/cjs/components/datepicker/events.js +0 -129
  247. package/lib/cjs/components/datepicker/events.js.map +0 -1
  248. package/lib/cjs/components/datepicker/keyboard.js +0 -536
  249. package/lib/cjs/components/datepicker/keyboard.js.map +0 -1
  250. package/lib/cjs/components/datepicker/locales.js +0 -78
  251. package/lib/cjs/components/datepicker/locales.js.map +0 -1
  252. package/lib/cjs/components/datepicker/templates.js +0 -403
  253. package/lib/cjs/components/datepicker/templates.js.map +0 -1
  254. package/lib/cjs/components/datepicker/types.js +0 -23
  255. package/lib/cjs/components/datepicker/types.js.map +0 -1
  256. package/lib/cjs/components/datepicker/utils.js +0 -524
  257. package/lib/cjs/components/datepicker/utils.js.map +0 -1
  258. package/lib/esm/components/datepicker/calendar.js +0 -1058
  259. package/lib/esm/components/datepicker/calendar.js.map +0 -1
  260. package/lib/esm/components/datepicker/config.js +0 -329
  261. package/lib/esm/components/datepicker/config.js.map +0 -1
  262. package/lib/esm/components/datepicker/dropdown.js +0 -632
  263. package/lib/esm/components/datepicker/dropdown.js.map +0 -1
  264. package/lib/esm/components/datepicker/events.js +0 -126
  265. package/lib/esm/components/datepicker/events.js.map +0 -1
  266. package/lib/esm/components/datepicker/keyboard.js +0 -533
  267. package/lib/esm/components/datepicker/keyboard.js.map +0 -1
  268. package/lib/esm/components/datepicker/locales.js +0 -74
  269. package/lib/esm/components/datepicker/locales.js.map +0 -1
  270. package/lib/esm/components/datepicker/templates.js +0 -390
  271. package/lib/esm/components/datepicker/templates.js.map +0 -1
  272. package/lib/esm/components/datepicker/types.js +0 -20
  273. package/lib/esm/components/datepicker/types.js.map +0 -1
  274. package/lib/esm/components/datepicker/utils.js +0 -508
  275. package/lib/esm/components/datepicker/utils.js.map +0 -1
  276. package/prettier.config.js +0 -9
  277. package/src/components/datepicker/calendar.ts +0 -1397
  278. package/src/components/datepicker/config.ts +0 -368
  279. package/src/components/datepicker/dropdown.ts +0 -757
  280. package/src/components/datepicker/events.ts +0 -149
  281. package/src/components/datepicker/keyboard.ts +0 -646
  282. package/src/components/datepicker/locales.ts +0 -80
  283. package/src/components/datepicker/templates.ts +0 -792
  284. package/src/components/datepicker/types.ts +0 -154
  285. package/src/components/datepicker/utils.ts +0 -631
  286. package/src/components/select/variants.css +0 -4
  287. package/tsconfig.json +0 -17
  288. package/webpack.config.js +0 -118
@@ -1,479 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>KTUI Toast Examples</title>
8
- <link rel="stylesheet" href="../../dist/styles.css">
9
- </head>
10
-
11
- <body class="bg-gray-50 min-h-screen">
12
- <div class="bg-white rounded-lg shadow p-8 w-full max-w-md mt-10 mx-auto">
13
- <h2 class="text-xl font-bold mb-4">KTUI Toast Examples</h2>
14
-
15
- <!-- Variants -->
16
- <div class="mb-6">
17
- <h3 class="font-semibold mb-2">Variants</h3>
18
- <div class="flex flex-wrap gap-2">
19
- <button id="toast-variant-info" class="kt-btn">Info</button>
20
- <button id="toast-variant-success" class="kt-btn">Success</button>
21
- <button id="toast-variant-error" class="kt-btn">Error</button>
22
- <button id="toast-variant-warning" class="kt-btn">Warning</button>
23
- <button id="toast-variant-primary" class="kt-btn">Primary</button>
24
- <button id="toast-variant-secondary" class="kt-btn">Secondary</button>
25
- <button id="toast-variant-destructive" class="kt-btn">destructive</button>
26
- <button id="toast-variant-mono" class="kt-btn">Mono</button>
27
- </div>
28
- </div>
29
-
30
- <!-- Appearances -->
31
- <div class="mb-6">
32
- <h3 class="font-semibold mb-2">Appearances</h3>
33
- <div class="flex flex-wrap gap-2">
34
- <button id="toast-appearance-solid" class="kt-btn">Solid</button>
35
- <button id="toast-appearance-outline" class="kt-btn">Outline</button>
36
- <button id="toast-appearance-light" class="kt-btn">Light</button>
37
- </div>
38
- </div>
39
-
40
- <!-- Sizes -->
41
- <div class="mb-6">
42
- <h3 class="font-semibold mb-2">Sizes</h3>
43
- <div class="flex flex-wrap gap-2">
44
- <button id="toast-size-sm" class="kt-btn">Small</button>
45
- <button id="toast-size-md" class="kt-btn">Medium</button>
46
- <button id="toast-size-lg" class="kt-btn">Large</button>
47
- </div>
48
- </div>
49
-
50
- <!-- Position Examples -->
51
- <div class="mb-6">
52
- <h3 class="font-semibold mb-2">Positions</h3>
53
- <div class="flex flex-wrap gap-2 mb-2">
54
- <button id="toast-pos-top-end" class="kt-btn">Top End (Right)</button>
55
- <button id="toast-pos-top-center" class="kt-btn">Top Center</button>
56
- <button id="toast-pos-top-start" class="kt-btn">Top Start (Left)</button>
57
- <button id="toast-pos-middle-end" class="kt-btn">Middle End (Right)</button>
58
- <button id="toast-pos-middle-center" class="kt-btn">Middle Center</button>
59
- <button id="toast-pos-middle-start" class="kt-btn">Middle Start (Left)</button>
60
- <button id="toast-pos-bottom-end" class="kt-btn">Bottom End (Right)</button>
61
- <button id="toast-pos-bottom-center" class="kt-btn">Bottom Center</button>
62
- <button id="toast-pos-bottom-start" class="kt-btn">Bottom Start (Left)</button>
63
- </div>
64
- </div>
65
-
66
- <!-- RTL Testing -->
67
- <div class="mb-6">
68
- <h3 class="font-semibold mb-2">RTL Testing</h3>
69
- <div class="flex flex-wrap gap-2 mb-2">
70
- <button id="toast-rtl-toggle" class="kt-btn kt-btn-primary">Toggle RTL Mode</button>
71
- <button id="toast-rtl-test-center" class="kt-btn">Test RTL Top Center</button>
72
- <button id="toast-rtl-test-middle-center" class="kt-btn">Test RTL Middle Center</button>
73
- </div>
74
- <div class="text-xs text-gray-500">Toggle RTL mode to test centering behavior.</div>
75
- </div>
76
-
77
- <!-- Global Config Example -->
78
- <div class="mb-6">
79
- <h3 class="font-semibold mb-2">Global Config</h3>
80
- <div class="flex flex-wrap gap-2 mb-2">
81
- <button id="toast-set-global-bottom-end" class="kt-btn kt-btn-primary">Set Global: Bottom End</button>
82
- <button id="toast-set-global-top-center" class="kt-btn">Set Global: Top Center</button>
83
- <button id="toast-set-global-reset" class="kt-btn">Reset Global Config</button>
84
- </div>
85
- <div class="text-xs text-gray-500">Current global position will apply to all new toasts unless overridden.</div>
86
- </div>
87
-
88
- <!-- Other and legacy examples -->
89
- <div class="flex flex-col gap-3">
90
- <button id="toast-basic" class="kt-btn">Basic Toast</button>
91
- <button id="toast-custom-headless" class="kt-btn">Custom Headless Toast</button>
92
- <button id="toast-description" class="kt-btn">With Description</button>
93
- <button id="toast-action" class="kt-btn">With Action Button</button>
94
- <button id="toast-cancel" class="kt-btn">With Cancel Button</button>
95
- <button id="toast-custom-icon" class="kt-btn">With Custom Icon</button>
96
- <button id="toast-invert" class="kt-btn">Inverted Colors</button>
97
- <button id="toast-long" class="kt-btn">Long Duration</button>
98
- <button id="toast-important" class="kt-btn">Important (No Auto Dismiss)</button>
99
- <button id="toast-progress-off" class="kt-btn">No Progress Bar</button>
100
- <button id="toast-close-btn-off" class="kt-btn">No Close Button</button>
101
- <button id="toast-non-dismissible" class="kt-btn">Non-dismissible</button>
102
- <button id="toast-position-top-left" class="kt-btn">Position: Top Left</button>
103
- <button id="toast-position-bottom-center" class="kt-btn">Position: Bottom Center</button>
104
- <button id="toast-custom-class" class="kt-btn">Custom Class</button>
105
- <button id="toast-aria" class="kt-btn">Custom ARIA Role</button>
106
- <button id="toast-callbacks" class="kt-btn">With Callbacks</button>
107
- <button id="toast-clear" class="kt-btn">Clear All Toasts</button>
108
- <button id="toast-beep" class="kt-btn kt-btn-primary">Show Toast with Beep</button>
109
- <button id="toast-hover" class="kt-btn kt-btn-primary">Show Toast (Pause on Hover)</button>
110
- </div>
111
- </div>
112
-
113
- <!-- Hidden template for custom headless toast -->
114
- <div id="custom-toast-template" style="display:none">
115
- <div style="padding:1rem; background:#fff; color:#222; border-radius:8px; min-width:220px; max-width:400px; box-shadow:0 2px 12px rgba(0,0,0,0.12); display:flex; align-items:center; gap:1rem;">
116
- <div>
117
- <strong>🎉 Custom Headless Toast</strong>
118
- <div style="font-size:0.95em; color:#555;">This toast uses your own markup and logic!</div>
119
- </div>
120
- </div>
121
- </div>
122
-
123
- <!-- Scripts should be outside the template -->
124
- <script src="../../dist/ktui.js"></script>
125
- <script>
126
- // --- Position Examples ---
127
- const posExamples = [
128
- { id: 'toast-pos-top-end', position: 'top-end', label: 'Top End (Right)' },
129
- { id: 'toast-pos-top-center', position: 'top-center', label: 'Top Center' },
130
- { id: 'toast-pos-top-start', position: 'top-start', label: 'Top Start (Left)' },
131
- { id: 'toast-pos-middle-end', position: 'middle-end', label: 'Middle End (Right)' },
132
- { id: 'toast-pos-middle-center', position: 'middle-center', label: 'Middle Center' },
133
- { id: 'toast-pos-middle-start', position: 'middle-start', label: 'Middle Start (Left)' },
134
- { id: 'toast-pos-bottom-end', position: 'bottom-end', label: 'Bottom End (Right)' },
135
- { id: 'toast-pos-bottom-center', position: 'bottom-center', label: 'Bottom Center' },
136
- { id: 'toast-pos-bottom-start', position: 'bottom-start', label: 'Bottom Start (Left)' }
137
- ];
138
- posExamples.forEach(({ id, position, label }) => {
139
- const btn = document.getElementById(id);
140
- if (btn) {
141
- btn.addEventListener('click', () => {
142
- KTToast.show({
143
- message: `Toast at ${label}`,
144
- position,
145
- variant: 'info'
146
- });
147
- });
148
- }
149
- });
150
-
151
- // --- RTL Testing ---
152
- let isRTL = false;
153
- const rtlToggleBtn = document.getElementById('toast-rtl-toggle');
154
- const rtlTestCenterBtn = document.getElementById('toast-rtl-test-center');
155
- const rtlTestMiddleCenterBtn = document.getElementById('toast-rtl-test-middle-center');
156
-
157
- if (rtlToggleBtn) {
158
- rtlToggleBtn.addEventListener('click', () => {
159
- isRTL = !isRTL;
160
- document.documentElement.setAttribute('dir', isRTL ? 'rtl' : 'ltr');
161
- rtlToggleBtn.textContent = isRTL ? 'Switch to LTR' : 'Switch to RTL';
162
- rtlToggleBtn.className = isRTL ? 'kt-btn kt-btn-secondary' : 'kt-btn kt-btn-primary';
163
- });
164
- }
165
-
166
- if (rtlTestCenterBtn) {
167
- rtlTestCenterBtn.addEventListener('click', () => {
168
- KTToast.show({
169
- message: `RTL Test: Top Center (${isRTL ? 'RTL' : 'LTR'} mode)`,
170
- position: 'top-center',
171
- variant: 'info'
172
- });
173
- });
174
- }
175
-
176
- if (rtlTestMiddleCenterBtn) {
177
- rtlTestMiddleCenterBtn.addEventListener('click', () => {
178
- KTToast.show({
179
- message: `RTL Test: Middle Center (${isRTL ? 'RTL' : 'LTR'} mode)`,
180
- position: 'middle-center',
181
- variant: 'success'
182
- });
183
- });
184
- }
185
-
186
- // --- Global Config Example ---
187
- const defaultGlobalConfig = {
188
- position: 'top-end',
189
- duration: 4000,
190
- maxToasts: 5,
191
- gap: 10,
192
- dismiss: true
193
- };
194
- KTToast.config({ ...defaultGlobalConfig }); // Ensure default on load
195
-
196
- const btnGlobalBottomEnd = document.getElementById('toast-set-global-bottom-end');
197
- const btnGlobalTopCenter = document.getElementById('toast-set-global-top-center');
198
- const btnGlobalReset = document.getElementById('toast-set-global-reset');
199
-
200
- if (btnGlobalBottomEnd) {
201
- btnGlobalBottomEnd.addEventListener('click', () => {
202
- KTToast.config({ position: 'bottom-end' });
203
- KTToast.show({ message: 'Global position set to Bottom End (Right)', variant: 'primary' });
204
- });
205
- }
206
- if (btnGlobalTopCenter) {
207
- btnGlobalTopCenter.addEventListener('click', () => {
208
- KTToast.config({ position: 'top-center' });
209
- KTToast.show({ message: 'Global position set to Top Center', variant: 'primary' });
210
- });
211
- }
212
- if (btnGlobalReset) {
213
- btnGlobalReset.addEventListener('click', () => {
214
- KTToast.config({ ...defaultGlobalConfig });
215
- KTToast.show({ message: 'Global config reset to default', variant: 'primary' });
216
- });
217
- }
218
-
219
- // Beep toast demo
220
- document.getElementById('toast-beep').addEventListener('click', function() {
221
- KTToast.show({
222
- message: 'Beep! Toast with sound.',
223
- variant: 'success',
224
- beep: true
225
- });
226
- });
227
-
228
- // Pause on hover toast demo
229
- document.getElementById('toast-hover').addEventListener('click', function() {
230
- KTToast.show({
231
- message: 'This toast will pause auto-dismiss while hovered!',
232
- variant: 'info',
233
- pauseOnHover: true,
234
- progress: true,
235
- duration: 4000
236
- });
237
- });
238
- // --- Variants ---
239
- const variants = ['info', 'success', 'error', 'warning', 'primary', 'secondary', 'destructive', 'mono'];
240
- variants.forEach(variant => {
241
- const btn = document.getElementById(`toast-variant-${variant}`);
242
- if (btn) {
243
- btn.addEventListener('click', () => {
244
- KTToast.show({
245
- message: `${variant.charAt(0).toUpperCase() + variant.slice(1)} variant`,
246
- variant
247
- });
248
- });
249
- }
250
- });
251
-
252
- // --- Appearances ---
253
- const appearances = ['solid', 'outline', 'light'];
254
- appearances.forEach(appearance => {
255
- const btn = document.getElementById(`toast-appearance-${appearance}`);
256
- if (btn) {
257
- btn.addEventListener('click', () => {
258
- KTToast.show({
259
- message: `${appearance.charAt(0).toUpperCase() + appearance.slice(1)} appearance`,
260
- variant: 'info',
261
- appearance
262
- });
263
- });
264
- }
265
- });
266
-
267
- // --- Sizes ---
268
- const sizes = ['sm', 'md', 'lg'];
269
- sizes.forEach(size => {
270
- const btn = document.getElementById(`toast-size-${size}`);
271
- if (btn) {
272
- btn.addEventListener('click', () => {
273
- KTToast.show({
274
- message: `${size.toUpperCase()} size`,
275
- variant: 'success',
276
- size
277
- });
278
- });
279
- }
280
- });
281
-
282
- // --- Legacy/other examples ---
283
- // Basic toast
284
- const btnBasic = document.getElementById('toast-basic');
285
- btnBasic.addEventListener('click', () => {
286
- KTToast.show({ message: 'This is a basic toast!' });
287
- });
288
-
289
- // With description
290
- const btnDesc = document.getElementById('toast-description');
291
- btnDesc.addEventListener('click', () => {
292
- KTToast.show({
293
- message: 'Saved!',
294
- description: 'Your changes have been saved successfully.',
295
- variant: 'success',
296
- duration: 3500
297
- });
298
- });
299
-
300
- // With action
301
- const btnAction = document.getElementById('toast-action');
302
- btnAction.addEventListener('click', () => {
303
- KTToast.show({
304
- message: 'File uploaded',
305
- description: 'Click undo to revert this action.',
306
- variant: 'info',
307
- action: {
308
- label: 'Undo',
309
- className: 'text-white kt-link kt-link-underlined',
310
- onClick: (id) => {
311
- KTToast.show({ message: 'Undo clicked!', variant: 'warning' });
312
- }
313
- }
314
- });
315
- });
316
-
317
- // With cancel
318
- const btnCancel = document.getElementById('toast-cancel');
319
- btnCancel.addEventListener('click', () => {
320
- KTToast.show({
321
- message: 'Are you sure?',
322
- description: 'You can cancel this operation.',
323
- variant: 'warning',
324
- cancel: {
325
- label: 'Cancel',
326
- onClick: (id) => {
327
- KTToast.show({ message: 'Cancelled!', variant: 'info' });
328
- }
329
- }
330
- });
331
- });
332
-
333
- // Custom icon
334
- const btnCustomIcon = document.getElementById('toast-custom-icon');
335
- btnCustomIcon.addEventListener('click', () => {
336
- KTToast.show({
337
- message: 'Custom Icon!',
338
- icon: '<svg width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M8 12l2 2 4-4"/></svg>',
339
- variant: 'success'
340
- });
341
- });
342
-
343
- // Inverted colors
344
- const btnInvert = document.getElementById('toast-invert');
345
- btnInvert.addEventListener('click', () => {
346
- KTToast.show({
347
- message: 'Inverted colors!',
348
- invert: true,
349
- variant: 'info'
350
- });
351
- });
352
-
353
- // Long duration
354
- const btnLong = document.getElementById('toast-long');
355
- btnLong.addEventListener('click', () => {
356
- KTToast.show({
357
- message: 'This toast will last 10 seconds.',
358
- duration: 10000,
359
- variant: 'info'
360
- });
361
- });
362
-
363
- // Important (no auto dismiss)
364
- const btnImportant = document.getElementById('toast-important');
365
- btnImportant.addEventListener('click', () => {
366
- KTToast.show({
367
- message: 'This toast will not auto-dismiss.',
368
- important: true,
369
- variant: 'error'
370
- });
371
- });
372
-
373
- // No progress bar
374
- const btnProgressOff = document.getElementById('toast-progress-off');
375
- btnProgressOff.addEventListener('click', () => {
376
- KTToast.show({
377
- message: 'Progress bar!',
378
- progress: true,
379
- variant: 'info'
380
- });
381
- });
382
-
383
- // No close button
384
- const btnCloseBtnOff = document.getElementById('toast-close-btn-off');
385
- btnCloseBtnOff.addEventListener('click', () => {
386
- KTToast.show({
387
- message: 'No close button!',
388
- closeButton: false,
389
- variant: 'warning'
390
- });
391
- });
392
-
393
- // Non-dismissible
394
- const btnNonDismiss = document.getElementById('toast-non-dismissible');
395
- btnNonDismiss.addEventListener('click', () => {
396
- KTToast.show({
397
- message: 'You cannot dismiss this toast by clicking it.',
398
- dismissible: false,
399
- variant: 'info'
400
- });
401
- });
402
-
403
- // Position top left
404
- const btnTopLeft = document.getElementById('toast-position-top-left');
405
- btnTopLeft.addEventListener('click', () => {
406
- KTToast.show({
407
- message: 'Top left!',
408
- position: 'top-start',
409
- variant: 'success'
410
- });
411
- });
412
-
413
- // Position bottom center
414
- const btnBottomCenter = document.getElementById('toast-position-bottom-center');
415
- btnBottomCenter.addEventListener('click', () => {
416
- KTToast.show({
417
- message: 'Bottom center!',
418
- position: 'bottom-center',
419
- variant: 'info'
420
- });
421
- });
422
-
423
- // Custom class
424
- const btnCustomClass = document.getElementById('toast-custom-class');
425
- btnCustomClass.addEventListener('click', () => {
426
- KTToast.show({
427
- message: 'Custom class!',
428
- className: 'bg-pink-500 text-white',
429
- variant: 'info'
430
- });
431
- });
432
-
433
- // Custom ARIA role
434
- const btnAria = document.getElementById('toast-aria');
435
- btnAria.addEventListener('click', () => {
436
- KTToast.show({
437
- message: 'Custom ARIA role!',
438
- role: 'alert',
439
- variant: 'info'
440
- });
441
- });
442
-
443
- // With callbacks
444
- const btnCallbacks = document.getElementById('toast-callbacks');
445
- btnCallbacks.addEventListener('click', () => {
446
- KTToast.show({
447
- message: 'Watch the console!',
448
- variant: 'info',
449
- onAutoClose: (id) => {
450
- console.log('Toast auto-closed:', id);
451
- },
452
- onDismiss: (id) => {
453
- console.log('Toast dismissed:', id);
454
- }
455
- });
456
- });
457
-
458
- // Custom headless toast
459
- const btnCustomHeadless = document.getElementById('toast-custom-headless');
460
- btnCustomHeadless.addEventListener('click', () => {
461
- KTToast.show({
462
- content: `
463
- <div class="text-white flex items-center gap-2">
464
- <span>Custom content</span>
465
- <button data-kt-toast-dismiss="true" class="kt-btn">&times;</button>
466
- </div>
467
- `
468
- });
469
- });
470
-
471
- // Clear all toasts
472
- const btnClear = document.getElementById('toast-clear');
473
- btnClear.addEventListener('click', () => {
474
- KTToast.clearAll();
475
- });
476
- </script>
477
- </body>
478
-
479
- </html>