@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
@@ -3,5 +3,433 @@
3
3
  * Copyright 2025 by Keenthemes Inc
4
4
  */
5
5
 
6
- @layer components {
6
+ /* Input Wrapper */
7
+ @layer utilities {
8
+ [data-kt-datepicker-input-wrapper] {
9
+ @apply relative inline-flex items-center w-full cursor-pointer;
10
+ @apply h-8.5 rounded-md border border-input bg-background shadow-xs shadow-[rgba(0,0,0,0.05)] transition-[color,box-shadow];
11
+ @apply focus-within:ring-ring/30 focus-within:border-ring focus-within:outline-none focus-within:ring-[3px];
12
+ @apply hover:border-ring/50;
13
+ @apply disabled:cursor-not-allowed disabled:opacity-60;
14
+ @apply aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10;
15
+ padding-left: 10px;
16
+ padding-right: 10px;
17
+ }
18
+
19
+ /* Segmented Input Container */
20
+ [data-kt-datepicker-segmented-input] {
21
+ @apply inline-flex items-center flex-1 min-w-0;
22
+ @apply border-0 bg-transparent shadow-none;
23
+ @apply focus-within:ring-0 focus-within:border-0;
24
+ @apply hover:border-0;
25
+ @apply text-[0.8125rem] leading-(--text-sm--line-height);
26
+ /* Remove spacing between inline-flex children */
27
+ font-size: 0;
28
+ letter-spacing: 0;
29
+ word-spacing: 0;
30
+ }
31
+
32
+ /* Date Range Input Container - tighter spacing */
33
+ [data-kt-datepicker-segmented-range-input] {
34
+ @apply gap-0.5;
35
+ }
36
+
37
+ /* Date Segment (Day/Month/Year) */
38
+ [data-segment] {
39
+ @apply inline-flex items-center justify-center min-w-[2rem] px-0 py-0 text-sm font-medium text-foreground;
40
+ @apply rounded-sm transition-all outline-none;
41
+ @apply focus:bg-accent focus:text-accent-foreground focus:ring-2 focus:ring-ring/50;
42
+ @apply hover:bg-accent/50;
43
+ @apply disabled:cursor-not-allowed disabled:opacity-50;
44
+ @apply aria-invalid:bg-destructive/10 aria-invalid:text-destructive;
45
+ /* Restore font-size from parent (font-size: 0 trick) */
46
+ font-size: 0.875rem; /* text-sm equivalent */
47
+ letter-spacing: normal;
48
+ word-spacing: normal;
49
+ }
50
+
51
+ [data-segment][contenteditable="true"] {
52
+ @apply cursor-text;
53
+ /* Reset browser defaults for contenteditable spacing */
54
+ padding: 0 !important;
55
+ margin: 0 !important;
56
+ line-height: 1.5;
57
+ white-space: nowrap !important;
58
+ overflow: hidden;
59
+ /* Prevent browser default contenteditable spacing */
60
+ -webkit-user-modify: read-write-plaintext-only;
61
+ user-modify: read-write-plaintext-only;
62
+ /* Remove any default outline spacing */
63
+ outline: none;
64
+ outline-offset: 0;
65
+ /* Prevent any text selection spacing */
66
+ text-indent: 0;
67
+ /* Ensure no extra spacing from flex alignment - use flex-start to minimize spacing */
68
+ align-items: center;
69
+ justify-content: flex-start;
70
+ /* Remove any default browser spacing for contenteditable */
71
+ -webkit-tap-highlight-color: transparent;
72
+ /* Ensure text node has no extra spacing */
73
+ word-spacing: 0;
74
+ letter-spacing: normal;
75
+ /* Prevent empty contenteditable from collapsing */
76
+ min-height: 1em;
77
+ /* Remove any default browser margins on focus */
78
+ -webkit-margin-before: 0;
79
+ -webkit-margin-after: 0;
80
+ -webkit-margin-start: 0;
81
+ -webkit-margin-end: 0;
82
+ /* Reduce min-width when editing to minimize spacing */
83
+ min-width: fit-content;
84
+ width: fit-content;
85
+ }
86
+
87
+ /* Remove spacing from text nodes inside contenteditable segments */
88
+ [data-segment][contenteditable="true"] * {
89
+ margin: 0;
90
+ padding: 0;
91
+ display: inline;
92
+ }
93
+
94
+ /* Handle empty contenteditable to prevent spacing issues */
95
+ [data-segment][contenteditable="true"]:empty::before {
96
+ content: "\200B"; /* Zero-width space to prevent collapsing */
97
+ display: inline-block;
98
+ }
99
+
100
+ [data-segment][contenteditable="true"]:focus {
101
+ @apply bg-accent text-accent-foreground ring-2 ring-ring/50;
102
+ }
103
+
104
+ /* Add left spacing for time input group - hour segment */
105
+ /* Target hour segment that comes after a separator (space between date and time) */
106
+ [data-segment-separator] + [data-segment="hour"] {
107
+ @apply ml-3;
108
+ }
109
+
110
+ /* Remove left spacing if hour is the very first segment (time-only input) */
111
+ [data-kt-datepicker-segmented-input] > [data-segment="hour"]:first-child {
112
+ @apply ml-0;
113
+ }
114
+
115
+ /* Add left spacing for AM/PM segment when it follows time segments (space separator) */
116
+ [data-segment-separator] + [data-segment="ampm"] {
117
+ @apply ml-3;
118
+ }
119
+
120
+ /* Segment Separator */
121
+ [data-segment-separator] {
122
+ @apply inline-flex items-center text-muted-foreground select-none pointer-events-none;
123
+ @apply text-sm font-medium;
124
+ /* Restore font-size from parent (font-size: 0 trick) */
125
+ font-size: 0.875rem; /* text-sm equivalent */
126
+ letter-spacing: normal;
127
+ word-spacing: normal;
128
+ /* Ensure space separators are visible */
129
+ white-space: pre;
130
+ /* Ensure empty separators (whitespace) have minimum width to contribute to spacing */
131
+ min-width: 0.25rem;
132
+ }
133
+
134
+ /* Calendar Button */
135
+ [data-kt-datepicker-calendar-btn] {
136
+ @apply absolute right-0 top-0 bottom-0;
137
+ @apply inline-flex items-center justify-center shrink-0;
138
+ @apply w-10 h-full rounded-r-md;
139
+ @apply text-muted-foreground transition-all;
140
+ @apply hover:bg-accent/50 hover:text-accent-foreground;
141
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-inset;
142
+ @apply active:bg-accent/70;
143
+ @apply border-0 bg-transparent;
144
+ cursor: pointer;
145
+ }
146
+
147
+ [data-kt-datepicker-calendar-btn] svg {
148
+ @apply w-4 h-4;
149
+ }
150
+
151
+ [data-kt-datepicker-calendar-btn][aria-expanded="true"] {
152
+ @apply bg-accent/50 text-accent-foreground;
153
+ }
154
+
155
+ /* Placeholder */
156
+ [data-kt-datepicker-placeholder] {
157
+ @apply text-muted-foreground pointer-events-none select-none;
158
+ }
159
+
160
+ /* Display Wrapper */
161
+ [data-kt-datepicker-display-wrapper] {
162
+ @apply inline-flex items-center min-h-[2rem] px-3 py-1.5 text-sm text-foreground;
163
+ }
164
+
165
+ [data-kt-datepicker-display-element] {
166
+ @apply text-foreground;
167
+ }
168
+ }
169
+
170
+ /* Dropdown Container */
171
+ @layer utilities {
172
+ [data-kt-datepicker-dropdown] {
173
+ @apply absolute z-50 mt-1.5 rounded-md border border-border/60 bg-popover text-popover-foreground;
174
+ @apply px-3 py-2;
175
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
176
+ /* Default width for single month calendar - will be adjusted dynamically for multiple months */
177
+ width: 20rem; /* 320px - standard calendar width */
178
+ min-width: 20rem;
179
+ /* Remove max-width to allow flexible width for multiple months */
180
+ }
181
+
182
+ [data-kt-datepicker-dropdown].hidden {
183
+ @apply hidden;
184
+ }
185
+
186
+ [data-kt-datepicker-dropdown].open {
187
+ @apply block;
188
+ }
189
+
190
+ /* Panel Container */
191
+ [data-kt-datepicker-panel] {
192
+ @apply flex flex-col gap-1.5;
193
+ }
194
+
195
+ /* Header */
196
+ [data-kt-datepicker-header] {
197
+ @apply flex items-center justify-between gap-2 px-0.5 pb-1.5;
198
+ @apply border-0;
199
+ height: 34px;
200
+ }
201
+
202
+ [data-kt-datepicker-month-year] {
203
+ @apply text-sm font-medium text-foreground select-none;
204
+ @apply flex-1 text-center;
205
+ }
206
+
207
+ /* Navigation Buttons */
208
+ [data-kt-datepicker-prev],
209
+ [data-kt-datepicker-next] {
210
+ @apply inline-flex items-center justify-center shrink-0;
211
+ @apply w-7 h-7 rounded-md transition-all duration-150 cursor-pointer;
212
+ @apply text-muted-foreground;
213
+ @apply hover:bg-accent/60 hover:text-foreground;
214
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-1;
215
+ @apply active:scale-95 disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent;
216
+ }
217
+
218
+ [data-kt-datepicker-prev] svg,
219
+ [data-kt-datepicker-next] svg {
220
+ @apply w-3.5 h-3.5;
221
+ }
222
+
223
+ /* Calendar Table */
224
+ [data-kt-datepicker-calendar-table] {
225
+ @apply w-full border-collapse;
226
+ }
227
+
228
+ [data-kt-datepicker-calendar-table] thead {
229
+ @apply border-0;
230
+ }
231
+
232
+ [data-kt-datepicker-calendar-table] th {
233
+ @apply py-1 px-0.5 text-xs font-medium text-muted-foreground text-center uppercase;
234
+ @apply w-[calc(100%/7)];
235
+ }
236
+
237
+ [data-kt-datepicker-calendar-body] {
238
+ @apply border-0;
239
+ }
240
+
241
+ [data-kt-datepicker-calendar-row] {
242
+ @apply border-0;
243
+ }
244
+
245
+ /* Day Cell */
246
+ [data-kt-datepicker-day] {
247
+ @apply py-0.5 px-1 text-center;
248
+ }
249
+
250
+ [data-kt-datepicker-day] button {
251
+ @apply w-full aspect-square rounded-md text-sm font-medium transition-all duration-150;
252
+ @apply text-foreground cursor-pointer;
253
+ @apply hover:bg-accent/60 hover:text-accent-foreground;
254
+ @apply focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-0;
255
+ @apply active:scale-[0.97] disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent;
256
+ }
257
+
258
+ [data-kt-datepicker-day][data-today="true"] button {
259
+ @apply bg-primary/8 text-primary font-semibold;
260
+ @apply hover:bg-primary/15;
261
+ }
262
+
263
+ /* Selected state - circular background like Flatpickr */
264
+ [data-kt-datepicker-day][data-kt-selected="true"] button,
265
+ [data-kt-datepicker-day].active button,
266
+ [data-kt-datepicker-day][aria-selected="true"] button {
267
+ @apply bg-primary text-primary-foreground font-semibold;
268
+ @apply hover:bg-primary/90;
269
+ }
270
+
271
+ /* Selected + Today combination - selected takes precedence */
272
+ [data-kt-datepicker-day][data-kt-selected="true"][data-today="true"] button,
273
+ [data-kt-datepicker-day].active[data-today="true"] button,
274
+ [data-kt-datepicker-day][aria-selected="true"][data-today="true"] button {
275
+ @apply bg-primary text-primary-foreground font-semibold;
276
+ @apply hover:bg-primary/90;
277
+ @apply border-0;
278
+ }
279
+
280
+ /* Hover state */
281
+ [data-kt-datepicker-day][data-kt-hover] button {
282
+ @apply bg-accent text-accent-foreground;
283
+ }
284
+
285
+ /* Hover + Selected combination */
286
+ [data-kt-datepicker-day][data-kt-selected="true"][data-kt-hover] button {
287
+ @apply bg-primary/90 text-primary-foreground;
288
+ }
289
+
290
+ /* Range hover preview - dates in hover range */
291
+ [data-kt-datepicker-day][data-kt-hover-range] button {
292
+ @apply bg-accent/40 text-accent-foreground;
293
+ }
294
+
295
+ /* Range hover preview + Selected (start date) */
296
+ [data-kt-datepicker-day][data-kt-selected="true"][data-kt-hover-range] button {
297
+ @apply bg-primary/80 text-primary-foreground;
298
+ }
299
+
300
+ /* Range hover preview + Hover combination */
301
+ [data-kt-datepicker-day][data-kt-hover-range][data-kt-hover] button {
302
+ @apply bg-accent/60 text-accent-foreground;
303
+ }
304
+
305
+ [data-kt-datepicker-day][data-outside="true"] button {
306
+ @apply text-muted-foreground opacity-50 cursor-default;
307
+ @apply hover:opacity-70 hover:bg-accent/40;
308
+ }
309
+
310
+ [data-kt-datepicker-day][tabindex="0"] button {
311
+ @apply ring-1 ring-ring/50 ring-offset-0;
312
+ }
313
+
314
+ /* Footer */
315
+ [data-kt-datepicker-footer] {
316
+ @apply flex items-center justify-end gap-2 pt-1.5 mt-1.5;
317
+ @apply border-t border-border/40;
318
+ }
319
+
320
+ [data-kt-datepicker-today],
321
+ [data-kt-datepicker-clear],
322
+ [data-kt-datepicker-apply] {
323
+ @apply inline-flex items-center justify-center;
324
+ @apply h-7 px-3 text-xs font-medium rounded-md transition-all duration-150 cursor-pointer;
325
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-2;
326
+ @apply active:scale-[0.97] disabled:opacity-50 disabled:cursor-not-allowed;
327
+ }
328
+
329
+ [data-kt-datepicker-today] {
330
+ @apply text-muted-foreground hover:text-foreground hover:bg-accent/70;
331
+ }
332
+
333
+ [data-kt-datepicker-clear] {
334
+ @apply text-muted-foreground hover:text-destructive hover:bg-destructive/10;
335
+ }
336
+
337
+ [data-kt-datepicker-apply] {
338
+ @apply bg-primary text-primary-foreground;
339
+ @apply hover:bg-primary/95;
340
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
341
+ }
342
+
343
+ /* Multi-Month Container */
344
+ [data-kt-datepicker-multimonth-container] {
345
+ @apply flex flex-col md:flex-row gap-4;
346
+ }
347
+
348
+ /* Time Picker */
349
+ [data-kt-datepicker-time-picker] {
350
+ @apply flex flex-col gap-1.5 p-2 border-t border-border/40;
351
+ }
352
+
353
+ [data-kt-datepicker-time-display] {
354
+ @apply text-center text-lg font-semibold text-foreground;
355
+ }
356
+
357
+ [data-kt-datepicker-time-controls] {
358
+ @apply flex items-center justify-center gap-2;
359
+ }
360
+
361
+ [data-kt-datepicker-time-unit] {
362
+ @apply flex flex-col items-center gap-1;
363
+ }
364
+
365
+ [data-kt-datepicker-time-up],
366
+ [data-kt-datepicker-time-down] {
367
+ @apply inline-flex items-center justify-center;
368
+ @apply w-8 h-6 rounded-md transition-all;
369
+ @apply text-muted-foreground hover:text-foreground;
370
+ @apply hover:bg-accent hover:text-accent-foreground;
371
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50;
372
+ @apply active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed;
373
+ }
374
+
375
+ [data-kt-datepicker-time-value] {
376
+ @apply text-sm font-semibold text-foreground;
377
+ }
378
+
379
+ [data-kt-datepicker-time-separator] {
380
+ @apply text-muted-foreground text-sm font-medium;
381
+ }
382
+
383
+ [data-kt-datepicker-ampm-control] {
384
+ @apply flex flex-col gap-1 ml-2;
385
+ }
386
+
387
+ [data-kt-datepicker-ampm-button] {
388
+ @apply inline-flex items-center justify-center;
389
+ @apply w-10 h-6 rounded-md text-xs font-medium transition-all;
390
+ @apply text-muted-foreground hover:text-foreground;
391
+ @apply hover:bg-accent hover:text-accent-foreground;
392
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50;
393
+ @apply active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed;
394
+ }
395
+
396
+ /* Multi-Date Tag */
397
+ [data-kt-datepicker-multidate-tag] {
398
+ @apply inline-flex items-center gap-1.5 px-2 py-1 rounded-md;
399
+ @apply bg-accent text-accent-foreground text-xs font-medium;
400
+ }
401
+
402
+ [data-kt-datepicker-multidate-tag] button {
403
+ @apply inline-flex items-center justify-center;
404
+ @apply w-4 h-4 rounded-sm transition-all;
405
+ @apply text-muted-foreground hover:text-destructive;
406
+ @apply hover:bg-destructive/10;
407
+ @apply focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring;
408
+ }
409
+
410
+ /* Empty State */
411
+ [data-kt-datepicker-empty] {
412
+ @apply text-center py-8 text-sm text-muted-foreground;
413
+ }
414
+
415
+ /* Live Region (Accessibility) */
416
+ [data-kt-datepicker-live] {
417
+ @apply absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0;
418
+ clip: rect(0, 0, 0, 0);
419
+ }
420
+ }
421
+
422
+ /* Dark Mode Styles */
423
+ @layer utilities {
424
+ .dark [data-kt-datepicker-input-wrapper] {
425
+ @apply aria-invalid:border-destructive aria-invalid:ring-destructive/20;
426
+ }
427
+
428
+ .dark [data-kt-datepicker-dropdown] {
429
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
430
+ }
431
+
432
+ /* Primary colors use system CSS variables - no dark mode overrides needed */
7
433
  }
434
+
435
+