@justanarthur/modo-ui 0.6.0-canary.9 → 0.6.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 (490) hide show
  1. package/README.md +66 -164
  2. package/dist/base.css +4 -141
  3. package/dist/blocks/sidebar-app/index.js +26 -40
  4. package/dist/components/AI/input-message/index.js +16 -23
  5. package/dist/components/AI/thinking-indicator/index.js +6 -9
  6. package/dist/components/accordion/index.d.ts +11 -39
  7. package/dist/components/accordion/index.js +13 -18
  8. package/dist/components/badge/index.d.ts +11 -18
  9. package/dist/components/badge/index.js +7 -12
  10. package/dist/components/button/index.d.ts +17 -53
  11. package/dist/components/button/index.js +6 -11
  12. package/dist/components/card/index.d.ts +9 -32
  13. package/dist/components/card/index.js +11 -17
  14. package/dist/components/copy/index.d.ts +8 -41
  15. package/dist/components/copy/index.js +9 -15
  16. package/dist/components/inputs/checkbox/index.d.ts +9 -28
  17. package/dist/components/inputs/checkbox/index.js +13 -18
  18. package/dist/components/inputs/color-picker/index.d.ts +14 -22
  19. package/dist/components/inputs/color-picker/index.js +18 -26
  20. package/dist/components/inputs/combobox/index.d.ts +20 -85
  21. package/dist/components/inputs/combobox/index.js +18 -27
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
  23. package/dist/components/inputs/date-time/calendar/index.js +11 -15
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
  25. package/dist/components/inputs/date-time/date-picker/index.js +25 -35
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
  29. package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
  31. package/dist/components/inputs/date-time/month-picker/index.js +23 -32
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
  33. package/dist/components/inputs/date-time/time-picker/index.js +24 -33
  34. package/dist/components/inputs/input/index.d.ts +13 -95
  35. package/dist/components/inputs/input/index.js +9 -18
  36. package/dist/components/inputs/radio/index.d.ts +5 -20
  37. package/dist/components/inputs/radio/index.js +12 -16
  38. package/dist/components/inputs/search/index.d.ts +3 -3
  39. package/dist/components/inputs/search/index.js +18 -26
  40. package/dist/components/inputs/select/index.d.ts +23 -99
  41. package/dist/components/inputs/select/index.js +14 -29
  42. package/dist/components/inputs/slider/index.d.ts +0 -9
  43. package/dist/components/inputs/slider/index.js +5 -8
  44. package/dist/components/inputs/switch/index.d.ts +2 -8
  45. package/dist/components/inputs/switch/index.js +12 -15
  46. package/dist/components/inputs/textarea/index.d.ts +1 -20
  47. package/dist/components/inputs/textarea/index.js +6 -9
  48. package/dist/components/navigation/sidebar/index.d.ts +21 -44
  49. package/dist/components/navigation/sidebar/index.js +31 -42
  50. package/dist/components/navigation/tabs/index.d.ts +2 -8
  51. package/dist/components/navigation/tabs/index.js +10 -15
  52. package/dist/components/navigation/tabs-subtle/index.js +10 -13
  53. package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
  54. package/dist/components/overlays/alert-dialog/index.js +13 -23
  55. package/dist/components/overlays/command/index.d.ts +20 -25
  56. package/dist/components/overlays/command/index.js +17 -25
  57. package/dist/components/overlays/context-menu/index.d.ts +17 -39
  58. package/dist/components/overlays/context-menu/index.js +18 -29
  59. package/dist/components/overlays/dialog/index.d.ts +16 -42
  60. package/dist/components/overlays/dialog/index.js +12 -20
  61. package/dist/components/overlays/dropdown/index.d.ts +34 -304
  62. package/dist/components/overlays/dropdown/index.js +17 -44
  63. package/dist/components/overlays/popover/index.d.ts +12 -38
  64. package/dist/components/overlays/popover/index.js +9 -13
  65. package/dist/components/overlays/preview-card/index.js +8 -12
  66. package/dist/components/overlays/sheet/index.d.ts +8 -25
  67. package/dist/components/overlays/sheet/index.js +13 -19
  68. package/dist/components/overlays/toast/index.d.ts +50 -209
  69. package/dist/components/overlays/toast/index.js +10 -23
  70. package/dist/components/overlays/tooltip/index.d.ts +21 -123
  71. package/dist/components/overlays/tooltip/index.js +6 -16
  72. package/dist/components/table/index.d.ts +8 -63
  73. package/dist/components/table/index.js +9 -20
  74. package/dist/index.d.ts +1048 -2999
  75. package/dist/index.js +82 -231
  76. package/dist/preset.d.ts +0 -22
  77. package/dist/preset.js +2 -24
  78. package/dist/primitives/code/index.js +5 -8
  79. package/dist/primitives/craft/index.js +6 -10
  80. package/dist/primitives/fluid-hover/index.js +8 -10
  81. package/dist/primitives/morph/index.js +10 -16
  82. package/dist/primitives/motion/index.js +8 -11
  83. package/dist/primitives/scroll-area/index.js +3 -5
  84. package/dist/primitives/sizes/index.js +4 -6
  85. package/dist/primitives/surface/index.js +4 -6
  86. package/dist/shared/{components-c7rwx0ap.js → components-0q0sqfh4.js} +49 -27
  87. package/dist/shared/components-0sn7ypjw.js +61 -0
  88. package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
  89. package/dist/shared/components-1434p1mh.js +123 -0
  90. package/dist/shared/{components-c74gf16d.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-bae8sbjx.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-qh1cvj6p.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-y0kfy2g4.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-c5w5zk0s.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-4j3t39dd.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-syynwm1r.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-wgtjt2af.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-91zw3d9f.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-kz5q11pp.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-zkk3fmw8.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-svkt577j.js → components-8snj490h.js} +32 -78
  105. package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
  106. package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
  107. package/dist/shared/{components-pv1dyrtn.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pwayrkw9.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-hgv6tygd.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-z8fedth5.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-cet3jpa0.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-cnead5qm.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-0h78g3b5.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-m06yq8wk.js → components-hqeq3w9q.js} +23 -38
  119. package/dist/shared/{components-7qx17na9.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-9jmjnkqd.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-303jf96s.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-dtca4s6b.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-dc5q749x.js → components-kvr7f9hy.js} +10 -19
  126. package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
  127. package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
  128. package/dist/shared/{components-qx27excf.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-1e64t8aj.js → components-n42c79bz.js} +22 -23
  130. package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
  131. package/dist/shared/components-ng72k97e.js +128 -0
  132. package/dist/shared/{components-w2jqa6hx.js → components-pbmqctfa.js} +65 -169
  133. package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
  134. package/dist/shared/components-raknhppb.js +64 -0
  135. package/dist/shared/{components-2a7hcand.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-005jt2nz.js → components-s083f38z.js} +34 -164
  137. package/dist/shared/components-s5ngg32c.js +267 -0
  138. package/dist/shared/components-sn1rxx1d.js +143 -0
  139. package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
  140. package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
  141. package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
  142. package/dist/shared/components-vynjtrk6.js +19 -0
  143. package/dist/shared/{components-p0fm0bab.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-xd3emmy4.js → components-w90endve.js} +72 -71
  145. package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
  146. package/dist/shared/components-wy9jpqny.js +146 -0
  147. package/dist/shared/{components-yxmxn2jp.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-czdvj1a8.js → components-zfnmn5d4.js} +36 -82
  150. package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
  151. package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
  152. package/dist/styles.css +32 -320
  153. package/dist/tailwind.css +0 -16
  154. package/dist/tokens.css +0 -67
  155. package/package.json +4 -227
  156. package/DESIGN.md +0 -623
  157. package/blocks/sidebar-app/examples.mdx +0 -33
  158. package/blocks/sidebar-app/index.tsx +0 -218
  159. package/blocks/sidebar-app/inset-topbar.tsx +0 -25
  160. package/blocks/sidebar-app/menu-grid.ts +0 -26
  161. package/blocks/sidebar-app/nav-data.ts +0 -36
  162. package/blocks/sidebar-app/search-field.tsx +0 -48
  163. package/blocks/sidebar-app/user-footer.tsx +0 -67
  164. package/blocks/sidebar-app/workspace-header.tsx +0 -129
  165. package/components/AI/input-message/examples.mdx +0 -130
  166. package/components/AI/input-message/file-thumbnail.tsx +0 -173
  167. package/components/AI/input-message/index.tsx +0 -1385
  168. package/components/AI/thinking-indicator/examples.mdx +0 -27
  169. package/components/AI/thinking-indicator/index.tsx +0 -210
  170. package/components/accordion/examples.mdx +0 -233
  171. package/components/accordion/index.tsx +0 -1071
  172. package/components/avatar/examples.mdx +0 -95
  173. package/components/avatar/index.tsx +0 -129
  174. package/components/badge/change-demo.tsx +0 -29
  175. package/components/badge/examples.mdx +0 -124
  176. package/components/badge/index.tsx +0 -225
  177. package/components/badge/variants.ts +0 -73
  178. package/components/button/examples.mdx +0 -168
  179. package/components/button/index.tsx +0 -424
  180. package/components/button/loading-demo.tsx +0 -25
  181. package/components/button/variants.ts +0 -168
  182. package/components/card/examples.mdx +0 -251
  183. package/components/card/index.tsx +0 -1070
  184. package/components/copy/examples.mdx +0 -125
  185. package/components/copy/index.tsx +0 -662
  186. package/components/inputs/checkbox/examples.mdx +0 -87
  187. package/components/inputs/checkbox/index.tsx +0 -611
  188. package/components/inputs/checkbox/select-all-demo.tsx +0 -48
  189. package/components/inputs/color-picker/examples.mdx +0 -111
  190. package/components/inputs/color-picker/index.tsx +0 -1981
  191. package/components/inputs/color-picker/variants.ts +0 -401
  192. package/components/inputs/combobox/examples.mdx +0 -366
  193. package/components/inputs/combobox/index.tsx +0 -1527
  194. package/components/inputs/combobox/remote-demo.tsx +0 -105
  195. package/components/inputs/date-time/calendar/examples.mdx +0 -45
  196. package/components/inputs/date-time/calendar/index.tsx +0 -370
  197. package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
  198. package/components/inputs/date-time/date-picker/examples.mdx +0 -243
  199. package/components/inputs/date-time/date-picker/index.tsx +0 -476
  200. package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
  201. package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
  202. package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
  203. package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
  204. package/components/inputs/date-time/duration-picker/index.tsx +0 -253
  205. package/components/inputs/date-time/month-picker/examples.mdx +0 -45
  206. package/components/inputs/date-time/month-picker/index.tsx +0 -254
  207. package/components/inputs/date-time/picker-shell.tsx +0 -581
  208. package/components/inputs/date-time/time-columns.tsx +0 -94
  209. package/components/inputs/date-time/time-picker/examples.mdx +0 -57
  210. package/components/inputs/date-time/time-picker/index.tsx +0 -227
  211. package/components/inputs/field/examples.mdx +0 -117
  212. package/components/inputs/field/index.tsx +0 -268
  213. package/components/inputs/file-dropzone/examples.mdx +0 -83
  214. package/components/inputs/file-dropzone/file-row.tsx +0 -201
  215. package/components/inputs/file-dropzone/index.tsx +0 -316
  216. package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
  217. package/components/inputs/file-dropzone/variants.ts +0 -94
  218. package/components/inputs/input/examples.mdx +0 -166
  219. package/components/inputs/input/index.tsx +0 -494
  220. package/components/inputs/input/password-demo.tsx +0 -30
  221. package/components/inputs/label/examples.mdx +0 -67
  222. package/components/inputs/label/index.tsx +0 -85
  223. package/components/inputs/number-input/examples.mdx +0 -69
  224. package/components/inputs/number-input/index.tsx +0 -221
  225. package/components/inputs/radio/examples.mdx +0 -77
  226. package/components/inputs/radio/index.tsx +0 -636
  227. package/components/inputs/search/examples.mdx +0 -74
  228. package/components/inputs/search/index.tsx +0 -333
  229. package/components/inputs/select/examples.mdx +0 -296
  230. package/components/inputs/select/index.tsx +0 -1044
  231. package/components/inputs/select/variants.ts +0 -32
  232. package/components/inputs/slider/examples.mdx +0 -153
  233. package/components/inputs/slider/index.tsx +0 -1867
  234. package/components/inputs/switch/examples.mdx +0 -96
  235. package/components/inputs/switch/index.tsx +0 -504
  236. package/components/inputs/textarea/examples.mdx +0 -126
  237. package/components/inputs/textarea/index.tsx +0 -207
  238. package/components/navigation/navigation-menu/examples.mdx +0 -136
  239. package/components/navigation/navigation-menu/index.tsx +0 -704
  240. package/components/navigation/pagination/examples.mdx +0 -74
  241. package/components/navigation/pagination/index.tsx +0 -401
  242. package/components/navigation/sidebar/examples.mdx +0 -325
  243. package/components/navigation/sidebar/index.tsx +0 -453
  244. package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
  245. package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
  246. package/components/navigation/sidebar/sidebar.css +0 -74
  247. package/components/navigation/sidebar/variants.ts +0 -55
  248. package/components/navigation/tabs/examples.mdx +0 -89
  249. package/components/navigation/tabs/index.tsx +0 -494
  250. package/components/navigation/tabs-subtle/examples.mdx +0 -49
  251. package/components/navigation/tabs-subtle/index.tsx +0 -512
  252. package/components/overlays/alert-dialog/examples.mdx +0 -123
  253. package/components/overlays/alert-dialog/index.tsx +0 -276
  254. package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
  255. package/components/overlays/command/examples.mdx +0 -113
  256. package/components/overlays/command/index.tsx +0 -425
  257. package/components/overlays/context-menu/examples.mdx +0 -56
  258. package/components/overlays/context-menu/index.tsx +0 -279
  259. package/components/overlays/dialog/examples.mdx +0 -165
  260. package/components/overlays/dialog/index.tsx +0 -451
  261. package/components/overlays/dropdown/dropdown-search.tsx +0 -395
  262. package/components/overlays/dropdown/examples.mdx +0 -444
  263. package/components/overlays/dropdown/index.tsx +0 -1241
  264. package/components/overlays/dropdown/menu-item.tsx +0 -510
  265. package/components/overlays/dropdown/menu-parts.tsx +0 -725
  266. package/components/overlays/popover/anchored-demo.tsx +0 -59
  267. package/components/overlays/popover/examples.mdx +0 -203
  268. package/components/overlays/popover/index.tsx +0 -317
  269. package/components/overlays/preview-card/examples.mdx +0 -61
  270. package/components/overlays/preview-card/index.tsx +0 -204
  271. package/components/overlays/sheet/examples.mdx +0 -101
  272. package/components/overlays/sheet/index.tsx +0 -307
  273. package/components/overlays/toast/examples.mdx +0 -85
  274. package/components/overlays/toast/global-demo.tsx +0 -72
  275. package/components/overlays/toast/index.tsx +0 -544
  276. package/components/overlays/toast/manager.ts +0 -193
  277. package/components/overlays/tooltip/examples.mdx +0 -106
  278. package/components/overlays/tooltip/index.tsx +0 -539
  279. package/components/progress/examples.mdx +0 -59
  280. package/components/progress/index.tsx +0 -174
  281. package/components/progress/progress.css +0 -49
  282. package/components/progress/step-demo.tsx +0 -27
  283. package/components/table/examples.mdx +0 -188
  284. package/components/table/index.tsx +0 -535
  285. package/components/table/sort-demo.tsx +0 -61
  286. package/dist/components/avatar/index.d.ts +0 -46
  287. package/dist/components/avatar/index.js +0 -19
  288. package/dist/components/badge/variants.d.ts +0 -33
  289. package/dist/components/badge/variants.js +0 -10
  290. package/dist/components/button/variants.d.ts +0 -39
  291. package/dist/components/button/variants.js +0 -8
  292. package/dist/components/inputs/color-picker/variants.d.ts +0 -61
  293. package/dist/components/inputs/color-picker/variants.js +0 -28
  294. package/dist/components/inputs/field/index.d.ts +0 -116
  295. package/dist/components/inputs/field/index.js +0 -29
  296. package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
  297. package/dist/components/inputs/file-dropzone/index.js +0 -33
  298. package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
  299. package/dist/components/inputs/file-dropzone/variants.js +0 -12
  300. package/dist/components/inputs/label/index.d.ts +0 -32
  301. package/dist/components/inputs/label/index.js +0 -11
  302. package/dist/components/inputs/number-input/index.d.ts +0 -87
  303. package/dist/components/inputs/number-input/index.js +0 -21
  304. package/dist/components/inputs/select/variants.d.ts +0 -5
  305. package/dist/components/inputs/select/variants.js +0 -6
  306. package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
  307. package/dist/components/navigation/navigation-menu/index.js +0 -41
  308. package/dist/components/navigation/pagination/index.d.ts +0 -75
  309. package/dist/components/navigation/pagination/index.js +0 -41
  310. package/dist/components/navigation/sidebar/variants.d.ts +0 -25
  311. package/dist/components/navigation/sidebar/variants.js +0 -28
  312. package/dist/components/progress/index.d.ts +0 -56
  313. package/dist/components/progress/index.js +0 -15
  314. package/dist/docs/index.d.ts +0 -83
  315. package/dist/docs/index.js +0 -288
  316. package/dist/docs/vite.d.ts +0 -31
  317. package/dist/docs/vite.js +0 -45
  318. package/dist/lib/date-locale.d.ts +0 -26
  319. package/dist/lib/date-locale.js +0 -24
  320. package/dist/lib/field-classes.d.ts +0 -149
  321. package/dist/lib/field-classes.js +0 -41
  322. package/dist/lib/field-variants.d.ts +0 -47
  323. package/dist/lib/field-variants.js +0 -26
  324. package/dist/lib/fluid-hover-highlight.d.ts +0 -112
  325. package/dist/lib/fluid-hover-highlight.js +0 -17
  326. package/dist/lib/focus-ring.d.ts +0 -18
  327. package/dist/lib/focus-ring.js +0 -11
  328. package/dist/lib/goo-indicator.d.ts +0 -46
  329. package/dist/lib/goo-indicator.js +0 -14
  330. package/dist/lib/icon-context.d.ts +0 -30
  331. package/dist/lib/icon-context.js +0 -12
  332. package/dist/lib/inert.d.ts +0 -9
  333. package/dist/lib/inert.js +0 -8
  334. package/dist/lib/morph-layers.d.ts +0 -93
  335. package/dist/lib/morph-layers.js +0 -13
  336. package/dist/lib/morph-part.d.ts +0 -21
  337. package/dist/lib/morph-part.js +0 -12
  338. package/dist/lib/popup.d.ts +0 -20
  339. package/dist/lib/popup.js +0 -12
  340. package/dist/lib/reduced-motion.d.ts +0 -9
  341. package/dist/lib/reduced-motion.js +0 -6
  342. package/dist/lib/row-index.d.ts +0 -10
  343. package/dist/lib/row-index.js +0 -8
  344. package/dist/lib/row-order.d.ts +0 -28
  345. package/dist/lib/row-order.js +0 -10
  346. package/dist/lib/scroll-column.d.ts +0 -31
  347. package/dist/lib/scroll-column.js +0 -19
  348. package/dist/lib/shape-context.d.ts +0 -30
  349. package/dist/lib/shape-context.js +0 -13
  350. package/dist/lib/shape-radius.d.ts +0 -19
  351. package/dist/lib/shape-radius.js +0 -6
  352. package/dist/lib/size-context.d.ts +0 -94
  353. package/dist/lib/size-context.js +0 -20
  354. package/dist/lib/size-scale.d.ts +0 -79
  355. package/dist/lib/size-scale.js +0 -8
  356. package/dist/lib/slot.d.ts +0 -39
  357. package/dist/lib/slot.js +0 -14
  358. package/dist/lib/springs.d.ts +0 -44
  359. package/dist/lib/springs.js +0 -8
  360. package/dist/lib/surface-classes.d.ts +0 -19
  361. package/dist/lib/surface-classes.js +0 -10
  362. package/dist/lib/surface-context.d.ts +0 -9
  363. package/dist/lib/surface-context.js +0 -8
  364. package/dist/lib/use-controllable-state.d.ts +0 -2
  365. package/dist/lib/use-controllable-state.js +0 -6
  366. package/dist/lib/use-fluid-hover.d.ts +0 -138
  367. package/dist/lib/use-fluid-hover.js +0 -14
  368. package/dist/lib/use-is-mobile.d.ts +0 -2
  369. package/dist/lib/use-is-mobile.js +0 -6
  370. package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
  371. package/dist/lib/use-keyboard-nav-gate.js +0 -7
  372. package/dist/lib/use-merge-split.d.ts +0 -47
  373. package/dist/lib/use-merge-split.js +0 -15
  374. package/dist/lib/use-morph.d.ts +0 -101
  375. package/dist/lib/use-morph.js +0 -20
  376. package/dist/lib/use-touch-primary.d.ts +0 -2
  377. package/dist/lib/use-touch-primary.js +0 -6
  378. package/dist/lib/utils.d.ts +0 -3
  379. package/dist/lib/utils.js +0 -6
  380. package/dist/primitives/separator/index.d.ts +0 -25
  381. package/dist/primitives/separator/index.js +0 -9
  382. package/dist/primitives/skeleton/index.d.ts +0 -35
  383. package/dist/primitives/skeleton/index.js +0 -13
  384. package/dist/shared/components-01w9qcfa.js +0 -277
  385. package/dist/shared/components-124epb7f.js +0 -53
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-2krsc300.js +0 -254
  388. package/dist/shared/components-2qbqqpgq.js +0 -1545
  389. package/dist/shared/components-34txk9rj.js +0 -35
  390. package/dist/shared/components-3h92d94m.js +0 -23
  391. package/dist/shared/components-4vfm04wq.js +0 -82
  392. package/dist/shared/components-54nq988h.js +0 -123
  393. package/dist/shared/components-7s7pykk5.js +0 -281
  394. package/dist/shared/components-868v7scv.js +0 -399
  395. package/dist/shared/components-8jrk5eye.js +0 -448
  396. package/dist/shared/components-adkarj8n.js +0 -35
  397. package/dist/shared/components-b1e239g3.js +0 -28
  398. package/dist/shared/components-b94t6qtj.js +0 -143
  399. package/dist/shared/components-bsqynhaj.js +0 -179
  400. package/dist/shared/components-c9yr4ed1.js +0 -44
  401. package/dist/shared/components-d3shbwqq.js +0 -95
  402. package/dist/shared/components-dhgk6mbt.js +0 -16
  403. package/dist/shared/components-drxrtnp2.js +0 -25
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-g3eafs70.js +0 -337
  406. package/dist/shared/components-gx4h5rbb.js +0 -40
  407. package/dist/shared/components-gyt7my41.js +0 -328
  408. package/dist/shared/components-h6p86be3.js +0 -19
  409. package/dist/shared/components-h83az0bz.js +0 -33
  410. package/dist/shared/components-hdzrqqpx.js +0 -55
  411. package/dist/shared/components-krtx3m5b.js +0 -84
  412. package/dist/shared/components-kswxnm3h.js +0 -24
  413. package/dist/shared/components-mhza2wdn.js +0 -482
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rtadhd9j.js +0 -64
  417. package/dist/shared/components-tv7b8tet.js +0 -271
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-wknae3m4.js +0 -298
  421. package/dist/shared/components-xdqmt6ed.js +0 -20
  422. package/dist/shared/components-xjkdvnbg.js +0 -107
  423. package/dist/shared/components-z3v0n0de.js +0 -11
  424. package/dist/tokens/colors.css +0 -230
  425. package/dist/tokens/motion.css +0 -40
  426. package/dist/tokens/radius.css +0 -10
  427. package/dist/tokens/spacing.css +0 -9
  428. package/dist/tokens/typography.css +0 -119
  429. package/docs/chrome.css +0 -120
  430. package/docs/chrome.tsx +0 -283
  431. package/docs/index.ts +0 -9
  432. package/docs/vite.ts +0 -85
  433. package/index.ts +0 -60
  434. package/lib/date-locale.ts +0 -195
  435. package/lib/field-classes.ts +0 -121
  436. package/lib/field-variants.ts +0 -117
  437. package/lib/fluid-hover-highlight.tsx +0 -139
  438. package/lib/focus-ring.tsx +0 -46
  439. package/lib/goo-indicator.tsx +0 -261
  440. package/lib/icon-context.tsx +0 -310
  441. package/lib/inert.ts +0 -22
  442. package/lib/morph-layers.tsx +0 -102
  443. package/lib/morph-part.tsx +0 -49
  444. package/lib/popup.ts +0 -52
  445. package/lib/reduced-motion.ts +0 -19
  446. package/lib/row-index.tsx +0 -29
  447. package/lib/row-order.tsx +0 -126
  448. package/lib/scroll-column.tsx +0 -273
  449. package/lib/shape-context.tsx +0 -138
  450. package/lib/shape-radius.ts +0 -67
  451. package/lib/size-context.tsx +0 -66
  452. package/lib/size-scale.ts +0 -115
  453. package/lib/slot.ts +0 -115
  454. package/lib/springs.ts +0 -62
  455. package/lib/surface-classes.ts +0 -58
  456. package/lib/surface-context.tsx +0 -21
  457. package/lib/use-controllable-state.ts +0 -44
  458. package/lib/use-fluid-hover.ts +0 -541
  459. package/lib/use-is-mobile.ts +0 -25
  460. package/lib/use-keyboard-nav-gate.ts +0 -45
  461. package/lib/use-merge-split.tsx +0 -209
  462. package/lib/use-morph.ts +0 -575
  463. package/lib/use-touch-primary.tsx +0 -43
  464. package/lib/utils.ts +0 -37
  465. package/preset.ts +0 -199
  466. package/primitives/code/examples.mdx +0 -27
  467. package/primitives/code/index.tsx +0 -80
  468. package/primitives/craft/demos.tsx +0 -173
  469. package/primitives/craft/examples.mdx +0 -142
  470. package/primitives/craft/index.tsx +0 -76
  471. package/primitives/fluid-hover/examples.mdx +0 -84
  472. package/primitives/fluid-hover/index.tsx +0 -316
  473. package/primitives/morph/examples.mdx +0 -139
  474. package/primitives/morph/index.tsx +0 -192
  475. package/primitives/motion/examples.mdx +0 -100
  476. package/primitives/motion/index.tsx +0 -160
  477. package/primitives/scroll-area/examples.mdx +0 -58
  478. package/primitives/scroll-area/index.tsx +0 -204
  479. package/primitives/separator/examples.mdx +0 -30
  480. package/primitives/separator/index.tsx +0 -53
  481. package/primitives/sizes/examples.mdx +0 -167
  482. package/primitives/sizes/index.tsx +0 -89
  483. package/primitives/skeleton/examples.mdx +0 -51
  484. package/primitives/skeleton/index.tsx +0 -72
  485. package/primitives/skeleton/skeleton.css +0 -15
  486. package/primitives/surface/examples.mdx +0 -173
  487. package/primitives/surface/index.tsx +0 -109
  488. package/primitives/surface/surface.css +0 -176
  489. /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
  490. /package/dist/shared/{components-jcnjay5g.js → components-ezxhrmer.js} +0 -0
@@ -1,348 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): the editable DatePicker's
3
- * text field. Typing fills a numeric mask in the locale's own order
4
- * ("DD.MM.YYYY", "MM/DD/YYYY", with "HH:mm" for a time); the rest of the mask
5
- * shows muted after the caret. After utegsk/ui's `MaskedDateInput`
6
- * (`packages/ui/src/components/form/calendar/date-input.client.tsx`). The caller's
7
- * attributes (`type`, `inputMode`, `autoComplete`, …) are spread after
8
- * the field's own defaults (`text`, `numeric`, `off`), so they win; the value, text and
9
- * key handling stay the field's.
10
- */
11
-
12
- import { getDate, getHours, getMinutes, getMonth, getYear, isValid, type Locale, set } from 'date-fns'
13
- import {
14
- type FocusEvent,
15
- forwardRef,
16
- type InputHTMLAttributes,
17
- type KeyboardEvent,
18
- useEffect,
19
- useMemo,
20
- useRef,
21
- useState,
22
- } from 'react'
23
- import { useSize } from '../../../../lib/size-context'
24
- import { cn } from '../../../../lib/utils'
25
-
26
- type Part = 'day' | 'month' | 'year' | 'hour' | 'minute'
27
- type Slot = { type: Part; width: number } | { type: 'literal'; value: string }
28
-
29
- const PLACEHOLDER: Record<Part, string> = { day: 'DD', month: 'MM', year: 'YYYY', hour: 'HH', minute: 'mm' }
30
-
31
- /** The locale's numeric date (and 24-hour time) as a mask: parts in order, literals between. */
32
- function maskOf(locale: Locale, withTime: boolean): Slot[] {
33
- const parts = new Intl.DateTimeFormat(locale.code, {
34
- calendar: 'gregory',
35
- numberingSystem: 'latn',
36
- day: '2-digit',
37
- month: '2-digit',
38
- year: 'numeric',
39
- ...(withTime ? { hour: '2-digit', minute: '2-digit', hourCycle: 'h23' as const } : {}),
40
- }).formatToParts(new Date(2006, 10, 22, 13, 45))
41
- return parts.flatMap<Slot>(part => {
42
- if (part.type === 'literal') return [{ type: 'literal', value: part.value }]
43
- if (!(part.type in PLACEHOLDER)) return []
44
- const type = part.type as Part
45
- return [{ type, width: type === 'year' ? 4 : 2 }]
46
- })
47
- }
48
-
49
- /** Every digit the locale writes, mapped to its Latin twin, so "٢" types as "2". */
50
- function digitsOf(locale: Locale) {
51
- const format = new Intl.NumberFormat(locale.code, { useGrouping: false })
52
- const map = new Map<string, string>()
53
- for (let digit = 0; digit <= 9; digit++) {
54
- map.set(String(digit), String(digit))
55
- for (const char of format.format(digit)) if (/\p{Nd}/u.test(char)) map.set(char, String(digit))
56
- }
57
- return map
58
- }
59
-
60
- const digitCount = (mask: Slot[]) => mask.reduce((n, slot) => n + (slot.type === 'literal' ? 0 : slot.width), 0)
61
-
62
- /** The typed digits laid into the mask; a literal follows each finished part. */
63
- function layout(digits: string, mask: Slot[]) {
64
- let at = 0
65
- let text = ''
66
- for (const slot of mask) {
67
- if (slot.type === 'literal') {
68
- if (text) text += slot.value
69
- continue
70
- }
71
- const chunk = digits.slice(at, at + slot.width)
72
- if (!chunk) break
73
- text += chunk
74
- at += chunk.length
75
- if (chunk.length < slot.width) break
76
- }
77
- return text.trimEnd()
78
- }
79
-
80
- function formatMasked(date: Date, mask: Slot[]) {
81
- const values: Record<Part, number> = {
82
- day: getDate(date),
83
- month: getMonth(date) + 1,
84
- year: getYear(date),
85
- hour: getHours(date),
86
- minute: getMinutes(date),
87
- }
88
- return mask
89
- .map(slot => (slot.type === 'literal' ? slot.value : String(values[slot.type]).padStart(slot.width, '0')))
90
- .join('')
91
- }
92
-
93
- /** A complete set of digits as a date, keeping `base`'s time when the mask has none; `null` when no such day exists. */
94
- function parseMasked(digits: string, mask: Slot[], base: Date | null): Date | null {
95
- const values: Partial<Record<Part, number>> = {}
96
- let at = 0
97
- for (const slot of mask) {
98
- if (slot.type === 'literal') continue
99
- values[slot.type] = Number(digits.slice(at, at + slot.width))
100
- at += slot.width
101
- }
102
- const { day = 0, month = 0, year = 0, hour, minute } = values
103
- const date = set(base ?? new Date(0), {
104
- year,
105
- month: month - 1,
106
- date: day,
107
- hours: hour ?? base?.getHours() ?? 0,
108
- minutes: minute ?? base?.getMinutes() ?? 0,
109
- seconds: 0,
110
- milliseconds: 0,
111
- })
112
- const exact =
113
- isValid(date) &&
114
- year >= 1000 &&
115
- getYear(date) === year &&
116
- getMonth(date) === month - 1 &&
117
- getDate(date) === day &&
118
- (hour === undefined || getHours(date) === hour) &&
119
- (minute === undefined || getMinutes(date) === minute)
120
- return exact ? date : null
121
- }
122
-
123
- /** Puts the caret after the `count`th digit. */
124
- function caretAfter(input: HTMLInputElement, count: number) {
125
- requestAnimationFrame(() => {
126
- let seen = 0
127
- let i = 0
128
- while (i < input.value.length && seen < count) {
129
- if (/\p{Nd}/u.test(input.value[i] ?? '')) seen++
130
- i++
131
- }
132
- input.setSelectionRange(i, i)
133
- })
134
- }
135
-
136
- interface MaskedDateInputProps
137
- extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange'> {
138
- /** The committed date; `null` when empty. */
139
- value: Date | null
140
- /** The value from outside can't be read as a date: keep what was typed and stay invalid. */
141
- externallyInvalid: boolean
142
- /** A complete, real date; `null` once emptied; an Invalid Date when left incomplete or impossible (Escape then brings back the last real date). */
143
- onValueChange: (value: Date | null) => void
144
- /** Whether what is typed can't be a date (impossible, or left incomplete). */
145
- onInvalidChange: (invalid: boolean) => void
146
- locale: Locale
147
- withTime: boolean
148
- /** Whether a day may be picked (bounds, disabled days). */
149
- allowed: (date: Date) => boolean
150
- /** Whether emptying the text clears the date; when not, leaving it empty brings the date back. Defaults to `true`. */
151
- clearable?: boolean
152
- }
153
-
154
- /** A numeric text field over the locale's date mask. */
155
- const MaskedDateInput = forwardRef<HTMLInputElement, MaskedDateInputProps>(
156
- (
157
- {
158
- value,
159
- externallyInvalid,
160
- onValueChange,
161
- onInvalidChange,
162
- locale,
163
- withTime,
164
- allowed,
165
- clearable = true,
166
- onFocus,
167
- onBlur,
168
- onKeyDown,
169
- placeholder,
170
- className,
171
- ...props
172
- },
173
- ref,
174
- ) => {
175
- const size = useSize()
176
- const mask = useMemo(() => maskOf(locale, withTime), [locale, withTime])
177
- const digitMap = useMemo(() => digitsOf(locale), [locale])
178
- const full = digitCount(mask)
179
- const formatted = value && isValid(value) ? formatMasked(value, mask) : ''
180
- const [text, setText] = useState(formatted)
181
- const [focused, setFocused] = useState(false)
182
- // Typed text the value can't hold (incomplete, impossible): kept until replaced.
183
- const keepText = useRef(false)
184
- // The last real date, so Escape can bring it back after an invalid entry.
185
- const lastValid = useRef<Date | null>(null)
186
- if (value && isValid(value)) lastValid.current = value
187
- // Whether the Invalid Date in `value` is one this field reported.
188
- const emittedInvalid = useRef(false)
189
-
190
- const emit = (next: Date | null) => {
191
- emittedInvalid.current = next !== null && !isValid(next)
192
- onValueChange(next)
193
- }
194
-
195
- const digitsIn = (s: string) => Array.from(s, char => digitMap.get(char) ?? '').join('')
196
-
197
- const flag = (invalid: boolean) => onInvalidChange(invalid)
198
-
199
- // The value changed from outside (a calendar pick, a reset): show it.
200
- useEffect(() => {
201
- if (focused || (keepText.current && externallyInvalid)) return
202
- keepText.current = false
203
- setText(formatted)
204
- flag(false)
205
- }, [formatted, externallyInvalid, focused])
206
-
207
- const commit = (digits: string) => {
208
- const next = digits.slice(0, full)
209
- setText(layout(next, mask))
210
- if (!next) {
211
- keepText.current = false
212
- flag(false)
213
- emit(null)
214
- return
215
- }
216
- if (next.length < full) {
217
- flag(false)
218
- return
219
- }
220
- const date = parseMasked(next, mask, value && isValid(value) ? value : null)
221
- const ok = !!date && allowed(date)
222
- flag(!ok)
223
- if (ok) {
224
- keepText.current = false
225
- emit(date)
226
- }
227
- }
228
-
229
- const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
230
- onKeyDown?.(e)
231
- if (e.defaultPrevented || props.readOnly || props.disabled) return
232
- const input = e.currentTarget
233
- const start = input.selectionStart ?? text.length
234
- const end = input.selectionEnd ?? start
235
- const digits = digitsIn(text)
236
- const from = digitsIn(text.slice(0, start)).length
237
- const to = digitsIn(text.slice(0, end)).length
238
- const typed = digitMap.get(e.key)
239
-
240
- if (typed !== undefined) {
241
- e.preventDefault()
242
- // Overtype in place, so a fixed-width mask edits like a segmented field.
243
- const next =
244
- from === to
245
- ? from < digits.length
246
- ? digits.slice(0, from) + typed + digits.slice(from + 1)
247
- : digits + typed
248
- : digits.slice(0, from) + typed + digits.slice(to)
249
- commit(next)
250
- caretAfter(input, from + 1)
251
- return
252
- }
253
- if (e.key === 'Escape') {
254
- const restore = lastValid.current
255
- const restored = restore ? formatMasked(restore, mask) : ''
256
- // The picker hands an Invalid Date down as `null` + `externallyInvalid`.
257
- const invalidNow = externallyInvalid || (value !== null && !isValid(value))
258
- if (text === restored && !invalidNow) return
259
- // Handled here: a surrounding Dialog must not close as well.
260
- e.preventDefault()
261
- e.stopPropagation()
262
- keepText.current = false
263
- setText(restored)
264
- flag(false)
265
- if (invalidNow && emittedInvalid.current) emit(restore)
266
- return
267
- }
268
- if (e.key !== 'Backspace' && e.key !== 'Delete') return
269
- let cutFrom = from
270
- let cutTo = to
271
- if (cutFrom === cutTo) {
272
- if (e.key === 'Backspace') cutFrom = Math.max(0, cutFrom - 1)
273
- else cutTo = Math.min(digits.length, cutTo + 1)
274
- }
275
- if (cutFrom === cutTo) return
276
- e.preventDefault()
277
- commit(digits.slice(0, cutFrom) + digits.slice(cutTo))
278
- caretAfter(input, cutFrom)
279
- }
280
-
281
- const handleBlur = (e: FocusEvent<HTMLInputElement>) => {
282
- setFocused(false)
283
- const digits = digitsIn(text)
284
- if (!digits && !clearable && formatted) {
285
- setText(formatted)
286
- flag(false)
287
- onBlur?.(e)
288
- return
289
- }
290
- const date = digits.length === full ? parseMasked(digits, mask, value && isValid(value) ? value : null) : null
291
- if (digits && !(date && allowed(date))) {
292
- // Left incomplete or impossible: say so, and let a form see it.
293
- keepText.current = true
294
- flag(true)
295
- emit(new Date(Number.NaN))
296
- }
297
- onBlur?.(e)
298
- }
299
-
300
- const ghost =
301
- placeholder === undefined
302
- ? mask.map(slot => (slot.type === 'literal' ? slot.value : PLACEHOLDER[slot.type])).join('')
303
- : ''
304
-
305
- return (
306
- <span className="relative flex h-full min-w-0 flex-1 items-center">
307
- {/* The rest of the mask, muted, right after what is typed. */}
308
- {ghost && (
309
- <span
310
- aria-hidden
311
- className={cn(
312
- 'pointer-events-none absolute inset-0 flex items-center overflow-hidden whitespace-pre tabular-nums',
313
- size.text,
314
- )}
315
- >
316
- <span className="invisible">{text}</span>
317
- <span className="text-muted-foreground">{ghost.slice(text.length)}</span>
318
- </span>
319
- )}
320
- <input
321
- ref={ref}
322
- type="text"
323
- inputMode="numeric"
324
- autoComplete="off"
325
- {...props}
326
- value={text}
327
- placeholder={placeholder}
328
- onChange={e => commit(digitsIn(e.target.value))}
329
- onFocus={e => {
330
- setFocused(true)
331
- onFocus?.(e)
332
- }}
333
- onBlur={handleBlur}
334
- onKeyDown={handleKeyDown}
335
- className={cn(
336
- 'relative w-full min-w-0 bg-transparent tabular-nums text-foreground outline-none font-[inherit] placeholder:text-muted-foreground',
337
- size.text,
338
- className,
339
- )}
340
- />
341
- </span>
342
- )
343
- },
344
- )
345
- MaskedDateInput.displayName = 'MaskedDateInput'
346
-
347
- export type { MaskedDateInputProps }
348
- export { MaskedDateInput }
@@ -1,93 +0,0 @@
1
- import DateRangePicker from './index'
2
- import { Label } from '../../input'
3
- import { de } from 'react-day-picker/locale'
4
-
5
- # Basics
6
-
7
- ## Basic
8
-
9
- Click a start and an end; the days under the pointer preview the range.
10
-
11
- <div className="w-80 max-w-full">
12
- <DateRangePicker placeholder="Pick a range" />
13
- </div>
14
-
15
- ## With a range
16
-
17
- The field writes the range the way the locale does.
18
-
19
- <div className="w-80 max-w-full">
20
- <DateRangePicker defaultValue={{ from: new Date(2026, 9, 9), to: new Date(2026, 9, 15) }} />
21
- </div>
22
-
23
- ## With time
24
-
25
- `withTime` adds the times: the columns set the end being picked, lit in the header (focus an end's input to switch), and the panel stays open. `hourCycle` picks the clock for both the columns and the field.
26
-
27
- <div className="w-96 max-w-full">
28
- <DateRangePicker
29
- withTime
30
- hourCycle="h23"
31
- minuteStep={15}
32
- defaultValue={{ from: new Date(2026, 9, 9, 9, 0), to: new Date(2026, 9, 11, 17, 30) }}
33
- />
34
- </div>
35
-
36
- ## Hidden days and read only
37
-
38
- `hidden` leaves the weekends out; `readOnly` shows a range and never opens.
39
-
40
- <div className="flex w-80 max-w-full flex-col gap-2">
41
- <DateRangePicker placeholder="Working days" hidden={{ dayOfWeek: [0, 6] }} />
42
- <DateRangePicker readOnly defaultValue={{ from: new Date(2026, 9, 9), to: new Date(2026, 9, 15) }} />
43
- </div>
44
-
45
- # Editable
46
-
47
- `editable` makes the field two masked inputs, one per end, typed in the locale's numeric order; the calendar icon opens the panel. An end that can't be a date, or one left half typed, turns the field destructive with a caption.
48
-
49
- <div className="flex w-80 max-w-full flex-col gap-1">
50
- <Label htmlFor="editable-range">Stay</Label>
51
- <DateRangePicker id="editable-range" editable locale={de} defaultValue={{ from: new Date(2026, 9, 9), to: new Date(2026, 9, 15) }} />
52
- </div>
53
-
54
- ## Editable with time
55
-
56
- <div className="w-[30rem] max-w-full">
57
- <DateRangePicker editable withTime locale={de} defaultValue={{ from: new Date(2026, 9, 9, 9, 0), to: new Date(2026, 9, 11, 17, 30) }} />
58
- </div>
59
-
60
- ## Editable with a 12-hour clock
61
-
62
- The panel's header keeps both ends readable on a phone: when the two inputs don't fit side by side, they stack.
63
-
64
- <div className="w-[30rem] max-w-full">
65
- <DateRangePicker editable withTime hourCycle="h12" defaultValue={{ from: new Date(2026, 9, 1, 0, 0), to: new Date(2026, 9, 11, 17, 30) }} />
66
- </div>
67
-
68
- # Localization
69
-
70
- ## German, this year only
71
-
72
- <div className="w-80 max-w-full">
73
- <DateRangePicker
74
- locale={de}
75
- startMonth={new Date(2026, 0, 1)}
76
- endMonth={new Date(2026, 11, 1)}
77
- defaultValue={{ from: new Date(2026, 9, 9), to: new Date(2026, 9, 15) }}
78
- />
79
- </div>
80
-
81
- ## Slovak, labels and format
82
-
83
- `locale` takes a BCP 47 tag; `labels` names every part (the ends, the columns, the buttons) and `formatDate` writes each end in the field.
84
-
85
- <div className="w-80 max-w-full">
86
- <DateRangePicker
87
- locale="sk"
88
- placeholder="Termín"
89
- formatDate={date => date.toLocaleDateString('sk', { day: 'numeric', month: 'long' })}
90
- labels={{ start: 'Začiatok', end: 'Koniec', close: 'Zavrieť', month: 'Mesiac', year: 'Rok', calendar: 'Otvoriť kalendár' }}
91
- defaultValue={{ from: new Date(2026, 9, 9), to: new Date(2026, 9, 15) }}
92
- />
93
- </div>