@justanarthur/modo-ui 0.6.0-canary.8 → 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-4y816hwp.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-t2a3qmy9.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-qs4rkqsj.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-av5t26rc.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-wqrvqq5p.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-3ydr2fqe.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-6gk118w3.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-y1qvbawa.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-xqszvkj4.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-9j9abkct.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-8tt3xbb5.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-jymmaevv.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-skfd7kff.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-vkwq2k96.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pw06rbxq.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-eqze3y30.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-5y5shqfd.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-khspp26b.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-km7fhgbk.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-qqcmtrbv.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-awra5sff.js → components-hqeq3w9q.js} +16 -24
  119. package/dist/shared/{components-5tzhqbcw.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-8mt5bsv6.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-2syq4mwc.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-r7q1zm7r.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-qdm3yh26.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-6b0zb8z3.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-2c64r8c9.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-dyae0y7h.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-8rb25gbe.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-5012r6gr.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-w0xq6q9k.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-z0bqtvcp.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-5sxjeh6h.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-t50hrswb.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-124epb7f.js +0 -53
  385. package/dist/shared/components-1kab3j44.js +0 -337
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-34txk9rj.js +0 -35
  388. package/dist/shared/components-3h92d94m.js +0 -23
  389. package/dist/shared/components-4vfm04wq.js +0 -82
  390. package/dist/shared/components-54nq988h.js +0 -123
  391. package/dist/shared/components-7s7pykk5.js +0 -281
  392. package/dist/shared/components-7zkhz3r8.js +0 -399
  393. package/dist/shared/components-8v644a0s.js +0 -298
  394. package/dist/shared/components-a4evvq8h.js +0 -271
  395. package/dist/shared/components-adkarj8n.js +0 -35
  396. package/dist/shared/components-b1e239g3.js +0 -28
  397. package/dist/shared/components-b94t6qtj.js +0 -143
  398. package/dist/shared/components-c9yr4ed1.js +0 -44
  399. package/dist/shared/components-cwg1d0w6.js +0 -254
  400. package/dist/shared/components-d3shbwqq.js +0 -95
  401. package/dist/shared/components-dhgk6mbt.js +0 -16
  402. package/dist/shared/components-drxrtnp2.js +0 -25
  403. package/dist/shared/components-ej4r7wmj.js +0 -482
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-fejdzvqc.js +0 -448
  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-mpa2y6x8.js +0 -277
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rpw4md2b.js +0 -179
  417. package/dist/shared/components-rtadhd9j.js +0 -64
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-xdqmt6ed.js +0 -20
  421. package/dist/shared/components-xjkdvnbg.js +0 -107
  422. package/dist/shared/components-z3v0n0de.js +0 -11
  423. package/dist/shared/components-z6dfqtyt.js +0 -1545
  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 -557
  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,451 +0,0 @@
1
- /*
2
- * Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
3
- * `registry/base/dialog.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
5
- * Local modifications:
6
- * - `"use client"` directive dropped (no RSC here).
7
- * - `framer-motion` → `motion/react`; `@/lib/{utils,icon-context,springs,shape-context,
8
- * size-context,surface-context,surface-classes}` rewritten to `../../../lib/*`;
9
- * `@/components/ui/button` → `../../button`.
10
- * - `DialogProps`: every member re-declared with the FF docs API-table text (modo's parser
11
- * lists only members declared in the interface body and needs a description on each);
12
- * same for `DialogSlotProps` and `DialogContentProps`.
13
- * - modo item: TSDoc (from the FF "Dialog" docs page) on the root `Dialog`, the compound
14
- * statics attached as `Dialog.Trigger = …` (expando properties, so TypeScript types
15
- * `<Dialog.Content>` without a cast and modo's check-items sees them), upstream's named
16
- * exports kept, and a default export.
17
- * - FF's "With a sidebar" docs example is not ported: Sidebar is omitted from this port.
18
- * A "Surfaces inside a dialog" example (a Select popover lifting off the dialog's own
19
- * level) stands in for it — it makes the same point the sidebar dialog made about
20
- * composing inside an `xl` panel, using only items this port ships.
21
- * - Styling reads DS tokens (AGENTS.md styling): `text-[Npx]` →
22
- * `text-<role>[-compact]`; inline `fontVariationSettings` and `font-bold`
23
- * → `weight-*`; the `bg-black/40` / `dark:bg-black/80` backdrop → `bg-scrim`.
24
- * - The panel morphs out of its trigger through the shared morph layer
25
- * (`lib/use-morph.ts` + `MorphSurface`, goo by default on `spring.goo`;
26
- * `Dialog.Content` takes `from` / `effect` / `hideSource` / `tier`), and the
27
- * backdrop's opacity follows the morph's progress. The popup is a
28
- * transparent, centered box; its level is painted by the morph's surface
29
- * layers and the padding sits on their content box. `Dialog` holds the open
30
- * state itself (`useControllableState`) to feed the morph, and scopes
31
- * `Morph.Part` pairs to the dialog.
32
- * - The trigger / close slot shape moved to `lib/slot.ts`, shared with the
33
- * other overlays.
34
- * - `onOpenChange(open, details)` hears Base UI's change details (`reason`,
35
- * `event`, `cancel()`), as Popover does: the handler runs before the state
36
- * changes, so `details.cancel()` keeps the dialog as it is (emulates
37
- * Radix's `onEscapeKeyDown` / `onPointerDownOutside` / `onInteractOutside`).
38
- * - `Dialog` takes `disablePointerDismissal`; `Dialog.Content` types and
39
- * forwards `initialFocus` / `finalFocus` to the popup (a custom
40
- * `finalFocus` turns the morph's own focus return off) and takes
41
- * `popupClassName`, merged after the popup's width classes.
42
- * One-argument handlers keep working. `DialogState` reports through it for
43
- * AlertDialog, Sheet and Command too; `createDialogChangeDetails` builds
44
- * the same shape for a change the library makes itself.
45
- */
46
-
47
- import { Dialog as DialogPrimitive } from '@base-ui/react/dialog'
48
- import { motion } from 'motion/react'
49
- import {
50
- type ComponentProps,
51
- createContext,
52
- forwardRef,
53
- type HTMLAttributes,
54
- type ReactNode,
55
- type RefObject,
56
- useContext,
57
- useId,
58
- useImperativeHandle,
59
- useMemo,
60
- } from 'react'
61
- import { useIcon } from '../../../lib/icon-context'
62
- import { MorphSurface } from '../../../lib/morph-layers'
63
- import { MorphPartScope } from '../../../lib/morph-part'
64
- import { useShape } from '../../../lib/shape-context'
65
- import { useSize, useSizeVariant } from '../../../lib/size-context'
66
- import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
67
- import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
68
- import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
69
- import { useControllableState } from '../../../lib/use-controllable-state'
70
- import { type MorphOrigin, useMorph, useMorphOrigin } from '../../../lib/use-morph'
71
- import { cn } from '../../../lib/utils'
72
- import { Button } from '../../button'
73
-
74
- const DIALOG_OFFSET = 4
75
-
76
- type DialogSlotProps = SlotProps
77
-
78
- const DialogContext = createContext<{ open: boolean; origin: RefObject<MorphOrigin> }>({
79
- open: false,
80
- origin: { current: {} },
81
- })
82
-
83
- /** The open state and origin `DialogState` provides, for content built on another Base UI popup (Sheet). */
84
- const useDialogState = () => useContext(DialogContext)
85
-
86
- const DialogTrigger = forwardRef<HTMLButtonElement, DialogSlotProps>(({ render, asChild, children, ...props }, ref) => {
87
- const el = slotRender(render, asChild, children)
88
- return el ? (
89
- <DialogPrimitive.Trigger ref={ref} render={el} {...props} id={slotId(el, props.id)} />
90
- ) : (
91
- <DialogPrimitive.Trigger ref={ref} {...props}>
92
- {children}
93
- </DialogPrimitive.Trigger>
94
- )
95
- })
96
- DialogTrigger.displayName = 'DialogTrigger'
97
-
98
- const DialogClose = forwardRef<HTMLButtonElement, DialogSlotProps>(({ render, asChild, children, ...props }, ref) => {
99
- const el = slotRender(render, asChild, children)
100
- return el ? (
101
- <DialogPrimitive.Close ref={ref} render={el} {...props} />
102
- ) : (
103
- <DialogPrimitive.Close ref={ref} {...props}>
104
- {children}
105
- </DialogPrimitive.Close>
106
- )
107
- })
108
- DialogClose.displayName = 'DialogClose'
109
-
110
- interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {
111
- /** Width: 400, 540, or 880. Compact regions narrow each by 1 notch: 360,
112
- * 480, 800. `xl` is the canvas for composed layouts — a sidebar beside a
113
- * panel — which usually pair it with `className="p-0"` and a fixed
114
- * height. Defaults to `"sm"`. */
115
- size?: 'sm' | 'lg' | 'xl'
116
- /** Portal target. When set, the overlay and panel render inside this element
117
- * (positioned `absolute`) instead of covering the viewport (`fixed`). Pair
118
- * with a `position: relative; overflow: hidden` container — and usually
119
- * `<Dialog modal={false}>` — to scope a dialog to a bounded region, e.g. a
120
- * docs preview. Defaults to the document body / full-viewport behaviour. */
121
- container?: HTMLElement | null
122
- /** The ✕ in the top-right corner. Drop it when the content has its own
123
- * way out, e.g. a command menu that closes on Escape and on a pick.
124
- * Defaults to `true`. */
125
- showCloseButton?: boolean
126
- /** Where the panel sits: centered, or anchored 12dvh from the top so a
127
- * panel whose height follows its content (a command menu) keeps its top
128
- * edge still. Defaults to `"center"`. */
129
- position?: 'center' | 'top'
130
- /** Where the panel grows from (see Morph): the pressed trigger (its center when none), the press point, its own center, a viewport edge, or a ref to any element. Defaults to `'trigger'`. */
131
- from?: 'trigger' | 'pointer' | 'center' | 'top' | 'right' | 'bottom' | 'left' | RefObject<HTMLElement | null>
132
- /** How it grows (see Morph): with the liquid goo neck, a plain morph, a slide or a fade. Defaults to `'goo'`. */
133
- effect?: 'goo' | 'morph' | 'slide' | 'fade'
134
- /** Hide the trigger while open, so it reads as turning into the panel. Defaults to `false`. */
135
- hideSource?: boolean
136
- /** Spring tier of a plain morph, slide or fade; goo runs on its own `spring.goo`. Defaults to `'slow'`. */
137
- tier?: 'moderate' | 'slow'
138
- /** Where focus goes when the dialog opens: a ref, `false` to leave it, `true` for the default, or a function of how it opened (`'mouse'`, `'touch'`, `'pen'`, `'keyboard'`). Defaults to the first tabbable element in the panel. */
139
- initialFocus?: DialogPopupProps['initialFocus']
140
- /** Where focus goes when the dialog closes: a ref, `false` to leave it, `true` for the default, or a function of how it closed. Defaults to the trigger. */
141
- finalFocus?: DialogPopupProps['finalFocus']
142
- /** Classes for the positioned popup box around the surface, merged after its width (`w-[calc(100%-2rem)]` capped by `size`), so `w-max` or `max-w-[60rem]` sizes the panel. `className` styles the surface's content box. */
143
- popupClassName?: string
144
- /** Dialog content. Everything inside reads the dialog's surface level as its substrate. */
145
- children?: ReactNode
146
- }
147
-
148
- type DialogPopupProps = ComponentProps<typeof DialogPrimitive.Popup>
149
-
150
- const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(
151
- (
152
- {
153
- className,
154
- children,
155
- size = 'sm',
156
- container,
157
- showCloseButton = true,
158
- position = 'center',
159
- from,
160
- effect,
161
- hideSource,
162
- tier,
163
- initialFocus,
164
- finalFocus,
165
- popupClassName,
166
- ...props
167
- },
168
- ref,
169
- ) => {
170
- const XIcon = useIcon('x')
171
- const shape = useShape()
172
- const substrate = useSurface()
173
- const dialogLevel = Math.min(substrate + DIALOG_OFFSET, 8)
174
- // The size ladder narrows the dialog one notch in compact regions —
175
- // width only, the padding stays put (see Sizes).
176
- const compact = useSize().variant === 'compact'
177
- const { open, origin } = useDialogState()
178
- const morph = useMorph(open, origin, {
179
- from,
180
- effect,
181
- hideSource,
182
- tier,
183
- // A custom `finalFocus` places focus itself; the morph's own return
184
- // to the trigger would undo it.
185
- returnFocus: typeof finalFocus === 'boolean' ? finalFocus : finalFocus === undefined,
186
- })
187
- useImperativeHandle(ref, () => morph.popup as HTMLDivElement, [morph.popup])
188
-
189
- return (
190
- <DialogPrimitive.Portal container={container ?? undefined}>
191
- <DialogPrimitive.Backdrop
192
- render={<motion.div style={{ opacity: morph.progress }} />}
193
- className={cn(container ? 'absolute' : 'fixed', 'inset-0 z-50 bg-scrim')}
194
- />
195
- <DialogPrimitive.Popup
196
- ref={morph.popupRef}
197
- {...props}
198
- initialFocus={initialFocus}
199
- finalFocus={finalFocus}
200
- className={cn(
201
- container ? 'absolute' : 'fixed',
202
- 'left-1/2 z-50 w-[calc(100%-2rem)] -translate-x-1/2 focus:outline-none',
203
- position === 'top' ? 'top-[12dvh]' : 'top-1/2 -translate-y-1/2',
204
- size === 'sm' && (compact ? 'max-w-[360px]' : 'max-w-[400px]'),
205
- size === 'lg' && (compact ? 'max-w-[480px]' : 'max-w-[540px]'),
206
- size === 'xl' && (compact ? 'max-w-[800px]' : 'max-w-[880px]'),
207
- popupClassName,
208
- )}
209
- >
210
- <SurfaceProvider value={dialogLevel}>
211
- <MorphSurface
212
- morph={morph}
213
- bg={SURFACE_BG[dialogLevel]}
214
- shadow={SURFACE_SHADOW[dialogLevel]}
215
- radius={shape.container}
216
- className={cn('p-6', className)}
217
- >
218
- {children}
219
- {showCloseButton && (
220
- <DialogPrimitive.Close
221
- render={
222
- <Button variant="ghost" size="icon-sm" className="absolute right-3 top-3">
223
- <XIcon />
224
- <span className="sr-only">Close</span>
225
- </Button>
226
- }
227
- />
228
- )}
229
- </MorphSurface>
230
- </SurfaceProvider>
231
- </DialogPrimitive.Popup>
232
- </DialogPrimitive.Portal>
233
- )
234
- },
235
- )
236
- DialogContent.displayName = 'DialogContent'
237
-
238
- function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
239
- return <div className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />
240
- }
241
-
242
- function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
243
- return <div className={cn('flex justify-end gap-2 mt-6', className)} {...props} />
244
- }
245
-
246
- const DialogTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(
247
- ({ className, ...props }, ref) => {
248
- // The title role of the type scale — see Sizes.
249
- const compact = useSizeVariant() === 'compact'
250
- return (
251
- <DialogPrimitive.Title
252
- ref={ref}
253
- className={cn(
254
- compact ? 'text-title-compact' : 'text-title',
255
- 'weight-bold text-foreground leading-tight',
256
- className,
257
- )}
258
- {...props}
259
- />
260
- )
261
- },
262
- )
263
- DialogTitle.displayName = 'DialogTitle'
264
-
265
- const DialogDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(
266
- ({ className, ...props }, ref) => {
267
- const compact = useSizeVariant() === 'compact'
268
- return (
269
- <DialogPrimitive.Description
270
- ref={ref}
271
- className={cn(compact ? 'text-body-compact' : 'text-body', 'text-muted-foreground', className)}
272
- {...props}
273
- />
274
- )
275
- },
276
- )
277
- DialogDescription.displayName = 'DialogDescription'
278
-
279
- /** What `onOpenChange` receives besides the open state: Base UI's Dialog change details. */
280
- type DialogOpenChangeDetails = DialogPrimitive.Root.ChangeEventDetails
281
-
282
- /** The part of Base UI's change details `DialogState` reads; Drawer's and AlertDialog's fit too. */
283
- interface OpenChangeDetailsLike {
284
- isCanceled: boolean
285
- trigger?: Element
286
- event?: Event
287
- }
288
-
289
- /**
290
- * Change details in Base UI's shape for a change the library makes itself (an
291
- * AlertDialog action closing it, Command's hotkey), so `onOpenChange` handlers
292
- * always get `reason`, `event` and a working `cancel()`.
293
- */
294
- function createDialogChangeDetails(
295
- reason: DialogOpenChangeDetails['reason'],
296
- event: Event = new Event('change'),
297
- trigger?: Element,
298
- ): DialogOpenChangeDetails {
299
- const details = {
300
- reason,
301
- event,
302
- trigger,
303
- isCanceled: false,
304
- isPropagationAllowed: false,
305
- cancel: () => {
306
- details.isCanceled = true
307
- },
308
- allowPropagation: () => {
309
- details.isPropagationAllowed = true
310
- },
311
- preventUnmountOnClose: () => {},
312
- }
313
- return details as DialogOpenChangeDetails
314
- }
315
-
316
- interface DialogStateProps<Details extends OpenChangeDetailsLike> {
317
- open?: boolean
318
- defaultOpen?: boolean
319
- onOpenChange?: (open: boolean, details: Details) => void
320
- children: (root: { open: boolean; onOpenChange: (next: boolean, details: Details) => void }) => ReactNode
321
- }
322
-
323
- /**
324
- * A dialog's open state, held here (not in Base UI's Root) because the morph
325
- * reads it, and the open event tells it which trigger was pressed. Also
326
- * scopes `Morph.Part` pairs. AlertDialog, Sheet and Command share it.
327
- */
328
- function DialogState<Details extends OpenChangeDetailsLike>({
329
- open,
330
- defaultOpen = false,
331
- onOpenChange,
332
- children,
333
- }: DialogStateProps<Details>) {
334
- // The change is reported here, not through the state hook, so the handler
335
- // gets Base UI's details and can cancel it.
336
- const [current, setCurrent] = useControllableState(open, defaultOpen)
337
- const { origin, capture } = useMorphOrigin()
338
- const id = useId()
339
- const ctx = useMemo(() => ({ open: current, origin }), [current, origin])
340
- const parts = useMemo(() => ({ id, open: current }), [id, current])
341
-
342
- return (
343
- <DialogContext.Provider value={ctx}>
344
- <MorphPartScope.Provider value={parts}>
345
- {children({
346
- open: current,
347
- onOpenChange: (next, details) => {
348
- if (next === current) return
349
- onOpenChange?.(next, details)
350
- if (details.isCanceled) return
351
- if (next) capture(details)
352
- setCurrent(next)
353
- },
354
- })}
355
- </MorphPartScope.Provider>
356
- </DialogContext.Provider>
357
- )
358
- }
359
-
360
- interface DialogProps {
361
- /** Controlled open state. */
362
- open?: boolean
363
- /** Initial open state, for an uncontrolled dialog. Defaults to `false`. */
364
- defaultOpen?: boolean
365
- /** Called when the dialog opens or closes, with Base UI's change details: `reason` (`'escape-key'`, `'outside-press'`, `'trigger-press'`, `'close-press'`, …), the `event`, and `cancel()` to keep it as it is. */
366
- onOpenChange?: (open: boolean, details: DialogOpenChangeDetails) => void
367
- /** Traps focus and locks page scroll while open. Defaults to `true`. */
368
- modal?: boolean
369
- /** Ignore presses outside the panel: only Escape and the dialog's own closes dismiss it. Defaults to `false`. */
370
- disablePointerDismissal?: boolean
371
- /** The trigger and the content — `Dialog.Trigger` plus a `Dialog.Content`. */
372
- children?: ReactNode
373
- }
374
-
375
- /**
376
- * 3 widths, grown out of whatever opened them.
377
- *
378
- * The panel lifts 4 surface levels off whatever substrate it opens on and
379
- * re-provides that level, so a dropdown or select inside it keeps climbing
380
- * the ladder instead of melting into the dialog. Width comes from
381
- * `Dialog.Content`'s `size` — 400, 540 or 880, each one notch narrower in
382
- * compact regions. The panel grows out of its trigger through the shared
383
- * morph (see Morph): goo by default on `spring.goo`, or from the press
384
- * point, its own center, a viewport edge or any element, and the backdrop
385
- * fades with it. `Morph.Part` pairs an element in the trigger with its twin
386
- * in the panel, so a card's image or title flies into the dialog.
387
- * `position="top"` anchors the panel 12dvh down so a content-sized panel (a
388
- * command menu) keeps its top edge still. Built on Base UI's Dialog: open
389
- * state is controlled with `open` / `onOpenChange` or left to `defaultOpen`.
390
- * `onOpenChange` hears why (`details.reason`) and can `details.cancel()` it,
391
- * e.g. to keep the dialog open on an outside press.
392
- *
393
- * Statics:
394
- * - `Dialog.Trigger` — the control that opens it. `render={<Button/>}` or
395
- * Radix-style `asChild` with a single child both work.
396
- * - `Dialog.Content` — the panel: `size`, `position`, `showCloseButton`,
397
- * `container`, `initialFocus`, `finalFocus`, `popupClassName` (sizes the
398
- * popup box), and the morph options `from`, `effect`, `hideSource`,
399
- * `tier`.
400
- * - `Dialog.Header` / `Dialog.Footer` — the stacked title block, and the
401
- * right-aligned action row.
402
- * - `Dialog.Title` / `Dialog.Description` — the labelled heading and its
403
- * supporting line, wired to the panel for screen readers.
404
- * - `Dialog.Close` — dismisses it; same `render` / `asChild` shape as the
405
- * trigger. `Dialog.Content` renders its own ✕ unless
406
- * `showCloseButton={false}`.
407
- *
408
- * @example {@include ./examples.mdx}
409
- */
410
- function Dialog({ children, open, defaultOpen, onOpenChange, modal, disablePointerDismissal }: DialogProps) {
411
- return (
412
- <DialogState open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
413
- {root => (
414
- <DialogPrimitive.Root {...root} modal={modal} disablePointerDismissal={disablePointerDismissal}>
415
- {children}
416
- </DialogPrimitive.Root>
417
- )}
418
- </DialogState>
419
- )
420
- }
421
-
422
- Dialog.Trigger = DialogTrigger
423
- Dialog.Content = DialogContent
424
- Dialog.Header = DialogHeader
425
- Dialog.Footer = DialogFooter
426
- Dialog.Title = DialogTitle
427
- Dialog.Description = DialogDescription
428
- Dialog.Close = DialogClose
429
-
430
- export type {
431
- DialogContentProps,
432
- DialogOpenChangeDetails,
433
- DialogProps,
434
- DialogSlotProps as DialogTriggerProps,
435
- DialogSlotProps as DialogCloseProps,
436
- }
437
- export {
438
- createDialogChangeDetails,
439
- Dialog,
440
- DialogClose,
441
- DialogContent,
442
- DialogDescription,
443
- DialogFooter,
444
- DialogHeader,
445
- DialogState,
446
- DialogTitle,
447
- DialogTrigger,
448
- useDialogState,
449
- }
450
-
451
- export default Dialog