@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,279 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): a context menu that grows
3
- * out of the press point through `lib/use-morph.ts`, goo by default. Behavior
4
- * is Base UI's ContextMenu (right click, long press, positioning at the
5
- * pointer, roving highlight, typeahead, dismissal). The rows are Dropdown's:
6
- * `MenuItem` from `components/overlays/dropdown/menu-item.tsx`, `Dropdown.Label` and
7
- * `Dropdown.Separator`, with the fluid hover highlight gliding between them.
8
- */
9
-
10
- import { ContextMenu as ContextMenuPrimitive } from '@base-ui/react/context-menu'
11
- import {
12
- createContext,
13
- forwardRef,
14
- type ReactNode,
15
- type RefObject,
16
- useContext,
17
- useEffect,
18
- useImperativeHandle,
19
- useMemo,
20
- useRef,
21
- } from 'react'
22
- import { FluidHoverHighlight } from '../../../lib/fluid-hover-highlight'
23
- import { MorphSurface } from '../../../lib/morph-layers'
24
- import { isDisabledRow, popupScrollAreaClass, popupViewportClass } from '../../../lib/popup'
25
- import { shapeMap } from '../../../lib/shape-context'
26
- import { type SizeVariant, useSize } from '../../../lib/size-context'
27
- import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
28
- import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
29
- import { useControllableState } from '../../../lib/use-controllable-state'
30
- import { useFluidHover } from '../../../lib/use-fluid-hover'
31
- import { type MorphOrigin, useMorph, useMorphOrigin } from '../../../lib/use-morph'
32
- import { cn } from '../../../lib/utils'
33
- import { ScrollArea } from '../../../primitives/scroll-area'
34
- import { SizeProvider } from '../../../primitives/sizes'
35
- import { DropdownLabel, DropdownSeparator } from '../dropdown'
36
- import { DropdownContext, MenuItem, type MenuItemProps, type MenuItemRenderOptions } from '../dropdown/menu-item'
37
-
38
- // The rows' radii, as in Dropdown: menus keep the "rounded" shape whatever the
39
- // rest of the UI is shaped.
40
- const shape = shapeMap.rounded
41
-
42
- interface ContextMenuContextValue {
43
- open: boolean
44
- origin: RefObject<MorphOrigin>
45
- }
46
-
47
- const ContextMenuContext = createContext<ContextMenuContextValue>({ open: false, origin: { current: {} } })
48
-
49
- const ShortcutContext = createContext<string | undefined>(undefined)
50
-
51
- function RowShortcut() {
52
- const shortcut = useContext(ShortcutContext)
53
- const compact = useSize().variant === 'compact'
54
- if (!shortcut) return null
55
- return (
56
- <kbd
57
- className={cn('shrink-0 pl-4 font-sans text-muted-foreground', compact ? 'text-caption-compact' : 'text-caption')}
58
- >
59
- {shortcut}
60
- </kbd>
61
- )
62
- }
63
-
64
- // MenuItem's render hook: the styled row goes into Base UI's context-menu item.
65
- function renderMenuItem({
66
- radio,
67
- checkbox,
68
- checked,
69
- disabled,
70
- label,
71
- closeOnClick,
72
- onClick,
73
- element,
74
- children,
75
- }: MenuItemRenderOptions) {
76
- // The row's activation goes on the primitive: Base UI's Enter/Space calls
77
- // only the primitive's own onClick.
78
- return radio || checkbox ? (
79
- <ContextMenuPrimitive.CheckboxItem
80
- checked={checked}
81
- disabled={disabled}
82
- label={label}
83
- closeOnClick={closeOnClick}
84
- onClick={onClick}
85
- render={element}
86
- >
87
- {children}
88
- <RowShortcut />
89
- </ContextMenuPrimitive.CheckboxItem>
90
- ) : (
91
- <ContextMenuPrimitive.Item
92
- disabled={disabled}
93
- label={label}
94
- closeOnClick={closeOnClick}
95
- onClick={onClick}
96
- render={element}
97
- >
98
- {children}
99
- <RowShortcut />
100
- </ContextMenuPrimitive.Item>
101
- )
102
- }
103
-
104
- interface ContextMenuItemProps extends MenuItemProps {
105
- /** Keyboard shortcut shown at the row's end, e.g. `⌘C`. */
106
- shortcut?: string
107
- }
108
-
109
- const ContextMenuItem = forwardRef<HTMLDivElement, ContextMenuItemProps>(({ shortcut, ...props }, ref) => (
110
- <ShortcutContext.Provider value={shortcut}>
111
- <MenuItem ref={ref} {...props} />
112
- </ShortcutContext.Provider>
113
- ))
114
- ContextMenuItem.displayName = 'ContextMenuItem'
115
-
116
- interface ContextMenuContentProps {
117
- /** Where the menu grows from (see Morph): the press point, its own center, a viewport edge, or a ref to any element. Defaults to `'pointer'`. */
118
- from?: 'pointer' | 'center' | 'top' | 'right' | 'bottom' | 'left' | RefObject<HTMLElement | null>
119
- /** How it grows (see Morph): with the liquid goo neck, a plain morph, a slide or a fade. Defaults to `'goo'`. */
120
- effect?: 'goo' | 'morph' | 'slide' | 'fade'
121
- /** Hide the `from` element while open, so it reads as turning into the menu. Defaults to `false`. */
122
- hideSource?: boolean
123
- /** Spring tier of a plain morph, slide or fade; goo runs on its own `spring.goo`. Defaults to `'moderate'`. */
124
- tier?: 'moderate' | 'slow'
125
- /** Portal target. Defaults to the document body. */
126
- container?: HTMLElement | null
127
- /** Extra classes for the menu surface — it is 14rem wide by default. */
128
- className?: string
129
- /** `ContextMenu.Item` rows, plus `ContextMenu.Label` and `ContextMenu.Separator`. */
130
- children?: ReactNode
131
- }
132
-
133
- const ContextMenuContent = forwardRef<HTMLDivElement, ContextMenuContentProps>(
134
- ({ from = 'pointer', effect, hideSource, tier = 'moderate', container, className, children }, ref) => {
135
- const { open, origin } = useContext(ContextMenuContext)
136
- const morph = useMorph(open, origin, { from, effect, hideSource, tier })
137
- useImperativeHandle(ref, () => morph.popup as HTMLDivElement, [morph.popup])
138
- // Fixed shadow, like Dropdown (see Elevated).
139
- const level = Math.min(useSurface() + 2, 8)
140
- const containerRef = useRef<HTMLDivElement>(null)
141
- const hover = useFluidHover(containerRef, { isItemDisabled: isDisabledRow })
142
- const { activeIndex, setActiveIndex, handlers, registerItem, remeasure } = hover
143
-
144
- // Rows stay registered between opens, so their rects are stale until the
145
- // menu is open again; a close drops the highlight so the next open doesn't
146
- // spring it over from the last row.
147
- useEffect(() => {
148
- if (open) remeasure()
149
- else setActiveIndex(null)
150
- }, [open, remeasure, setActiveIndex])
151
-
152
- const rows = useMemo(
153
- () => ({ registerItem, activeIndex, inMenu: true, renderMenuItem }),
154
- [registerItem, activeIndex],
155
- )
156
-
157
- return (
158
- <ContextMenuPrimitive.Portal container={container ?? undefined}>
159
- <ContextMenuPrimitive.Positioner className="z-50 outline-none">
160
- <ContextMenuPrimitive.Popup
161
- ref={morph.popupRef}
162
- onMouseEnter={handlers.onMouseEnter}
163
- onMouseMove={handlers.onMouseMove}
164
- onMouseLeave={handlers.onMouseLeave}
165
- onClick={handlers.onClick}
166
- // Keyboard navigation moves focus between rows; the hover background follows it.
167
- onFocus={e => {
168
- const index = (e.target as HTMLElement)
169
- .closest('[data-fluid-hover-index]')
170
- ?.getAttribute('data-fluid-hover-index')
171
- if (index != null) setActiveIndex(Number(index))
172
- }}
173
- onBlur={e => {
174
- if (!e.currentTarget.contains(e.relatedTarget as Node)) setActiveIndex(null)
175
- }}
176
- className="relative select-none outline-none"
177
- >
178
- <SurfaceProvider value={level}>
179
- <MorphSurface
180
- morph={morph}
181
- bg={SURFACE_BG[level]}
182
- shadow={SURFACE_SHADOW[3]}
183
- radius={shape.container}
184
- className={cn(
185
- 'flex w-56 max-h-[min(480px,var(--available-height))] flex-col overflow-hidden',
186
- shape.container,
187
- className,
188
- )}
189
- >
190
- <ScrollArea className={popupScrollAreaClass} viewportClassName={cn(popupViewportClass, 'scroll-fade')}>
191
- <div ref={containerRef} className="relative flex flex-col p-1">
192
- <FluidHoverHighlight hover={hover} hidden={!open} className={shape.bg} />
193
- <DropdownContext.Provider value={rows}>{children}</DropdownContext.Provider>
194
- </div>
195
- </ScrollArea>
196
- </MorphSurface>
197
- </SurfaceProvider>
198
- </ContextMenuPrimitive.Popup>
199
- </ContextMenuPrimitive.Positioner>
200
- </ContextMenuPrimitive.Portal>
201
- )
202
- },
203
- )
204
- ContextMenuContent.displayName = 'ContextMenuContent'
205
-
206
- interface ContextMenuProps {
207
- /** Controlled open state. Pair with `onOpenChange`. */
208
- open?: boolean
209
- /** Initial open state, for an uncontrolled menu. Defaults to `false`. */
210
- defaultOpen?: boolean
211
- /** Called when the menu opens or closes. */
212
- onOpenChange?: (open: boolean) => void
213
- /** Turns the trigger area back into a plain one: no menu on right click or long press. Defaults to `false`. */
214
- disabled?: boolean
215
- /** Pins the rows to one step of the size ladder (default 36px, compact 28px — see Sizes). Omitted, they follow the surrounding SizeProvider. */
216
- size?: SizeVariant
217
- /** The area and the menu — `ContextMenu.Trigger` plus a `ContextMenu.Content`. */
218
- children?: ReactNode
219
- }
220
-
221
- /**
222
- * A menu that grows out of the pointer on right click, or on a long press on
223
- * touch: the surface swells from the exact point you pressed into the menu.
224
- *
225
- * The morph comes from the shared engine (see Morph): from the press point
226
- * by default, or from its own center, a viewport edge or any element, with
227
- * the goo, a plain morph, a slide or a fade. The rows are Dropdown's — the
228
- * fluid hover background gliding between them, icons that firm up under it,
229
- * dimmed disabled rows the pointer skips — plus a keyboard shortcut at the
230
- * end of a row. The menu lifts 2 surface levels off its substrate. Built on
231
- * Base UI's ContextMenu: it opens at the pointer and flips or shifts to stay
232
- * on screen, arrow keys and typeahead move between rows, and picking a row,
233
- * Escape or an outside press closes it.
234
- *
235
- * Statics:
236
- * - `ContextMenu.Trigger` — the area that opens it (a `div`).
237
- * - `ContextMenu.Content` — the menu: the morph options `from`, `effect`,
238
- * `hideSource`, `tier`.
239
- * - `ContextMenu.Item` — a row: `index`, `label`, `icon`, `shortcut`,
240
- * `onSelect`, `disabled`.
241
- * - `ContextMenu.Label` / `ContextMenu.Separator` — a caption over a run of
242
- * rows and a rule between runs (Dropdown's).
243
- *
244
- * @example {@include ./examples.mdx}
245
- */
246
- function ContextMenu({ open, defaultOpen = false, onOpenChange, disabled = false, size, children }: ContextMenuProps) {
247
- const [current, setCurrent] = useControllableState(open, defaultOpen, onOpenChange)
248
- const { origin, capture } = useMorphOrigin()
249
- const ctx = useMemo(() => ({ open: current, origin }), [current, origin])
250
-
251
- const root = (
252
- <ContextMenuContext.Provider value={ctx}>
253
- <ContextMenuPrimitive.Root
254
- open={current}
255
- disabled={disabled}
256
- onOpenChange={(next, details) => {
257
- if (next) capture(details)
258
- setCurrent(next)
259
- }}
260
- >
261
- {children}
262
- </ContextMenuPrimitive.Root>
263
- </ContextMenuContext.Provider>
264
- )
265
-
266
- // The portalled menu reads the size through React context.
267
- return size ? <SizeProvider size={size}>{root}</SizeProvider> : root
268
- }
269
-
270
- ContextMenu.Trigger = ContextMenuPrimitive.Trigger
271
- ContextMenu.Content = ContextMenuContent
272
- ContextMenu.Item = ContextMenuItem
273
- ContextMenu.Label = DropdownLabel
274
- ContextMenu.Separator = DropdownSeparator
275
-
276
- export type { ContextMenuContentProps, ContextMenuItemProps, ContextMenuProps }
277
- export { ContextMenu, ContextMenuContent, ContextMenuItem }
278
-
279
- export default ContextMenu
@@ -1,165 +0,0 @@
1
- import Dialog from './index'
2
- import Button from '../../button'
3
- import Select from '../../inputs/select'
4
- import Morph from '../../../primitives/morph'
5
-
6
- # Basic
7
-
8
- A trigger, a header, and a footer whose Cancel is a `Dialog.Close`. The ✕
9
- in the corner comes with `Dialog.Content`.
10
-
11
- <Dialog>
12
- <Dialog.Trigger render={<Button variant="tertiary">Open dialog</Button>} />
13
- <Dialog.Content>
14
- <Dialog.Header>
15
- <Dialog.Title>Create teamspace</Dialog.Title>
16
- <Dialog.Description>
17
- Add a new teamspace to organize your projects and collaborate with your team.
18
- </Dialog.Description>
19
- </Dialog.Header>
20
- <Dialog.Footer>
21
- <Dialog.Close render={<Button variant="ghost">Cancel</Button>} />
22
- <Button>Create</Button>
23
- </Dialog.Footer>
24
- </Dialog.Content>
25
- </Dialog>
26
-
27
- # Keep it open
28
-
29
- `onOpenChange` hears why the dialog is closing (`details.reason`) and can keep it open with `details.cancel()`. Here a press outside is ignored; Escape and the buttons still close it.
30
-
31
- <Dialog
32
- onOpenChange={(open, details) => {
33
- if (details.reason === 'outside-press') details.cancel()
34
- }}
35
- >
36
- <Dialog.Trigger render={<Button variant="tertiary">Open sticky dialog</Button>} />
37
- <Dialog.Content size="sm">
38
- <Dialog.Header>
39
- <Dialog.Title>Unsaved changes</Dialog.Title>
40
- <Dialog.Description>A press outside won't close this one.</Dialog.Description>
41
- </Dialog.Header>
42
- <Dialog.Footer>
43
- <Dialog.Close render={<Button variant="ghost">Close</Button>} />
44
- </Dialog.Footer>
45
- </Dialog.Content>
46
- </Dialog>
47
-
48
- # Sizes
49
-
50
- 3 widths: `sm` for a confirmation, `lg` for a short form, `xl` for a
51
- layout of its own. Each is one notch narrower inside a compact region.
52
-
53
- <div className="flex flex-wrap items-center gap-2">
54
- {[
55
- { size: 'sm', label: 'Small', copy: '400px: a confirmation, 1 field, a short message.' },
56
- { size: 'lg', label: 'Large', copy: '540px: a short form, or a longer confirmation.' },
57
- { size: 'xl', label: 'Extra large', copy: '880px: 2 columns, a table, or a sidebar beside a panel.' },
58
- ].map(({ size, label, copy }) => (
59
- <Dialog key={label}>
60
- <Dialog.Trigger render={<Button variant="secondary">{label}</Button>} />
61
- <Dialog.Content size={size}>
62
- <Dialog.Header>
63
- <Dialog.Title>{label} dialog</Dialog.Title>
64
- <Dialog.Description>{copy}</Dialog.Description>
65
- </Dialog.Header>
66
- <Dialog.Footer>
67
- <Dialog.Close render={<Button variant="ghost">Close</Button>} />
68
- </Dialog.Footer>
69
- </Dialog.Content>
70
- </Dialog>
71
- ))}
72
- </div>
73
-
74
- # Surfaces inside a dialog
75
-
76
- Not an FF docs section — a modo addition standing in for FF's "With a
77
- sidebar" example, which this port omits along with Sidebar. The dialog
78
- settles at `substrate + 4` and re-provides that level, so the Select's
79
- popover lifts 2 more from there instead of painting the dialog's own
80
- background. Nothing is passed between them.
81
-
82
- <Dialog>
83
- <Dialog.Trigger render={<Button variant="secondary">Invite people</Button>} />
84
- <Dialog.Content>
85
- <Dialog.Header>
86
- <Dialog.Title>Invite to your workspace</Dialog.Title>
87
- <Dialog.Description>
88
- The panel sits 4 levels above the page; the role menu lifts 2 more from there.
89
- </Dialog.Description>
90
- </Dialog.Header>
91
- <Select defaultValue="member">
92
- <Select.Trigger placeholder="Select role" />
93
- <Select.Content>
94
- <Select.Item index={0} value="owner">Workspace owner</Select.Item>
95
- <Select.Item index={1} value="member">Member</Select.Item>
96
- <Select.Item index={2} value="restricted">Restricted member</Select.Item>
97
- </Select.Content>
98
- </Select>
99
- <Dialog.Footer>
100
- <Dialog.Close render={<Button variant="ghost">Cancel</Button>} />
101
- <Button>Send invites</Button>
102
- </Dialog.Footer>
103
- </Dialog.Content>
104
- </Dialog>
105
-
106
- # Morph sources
107
-
108
- `from` picks where the panel grows from: the pressed trigger (the default), the press point, its own center, or a side of the window. `effect` switches the goo neck for a plain morph, a slide or a fade.
109
-
110
- <div className="flex flex-wrap items-center justify-center gap-3">
111
- <Dialog>
112
- <Dialog.Trigger render={<Button variant="secondary">From the trigger</Button>} />
113
- <Dialog.Content>
114
- <Dialog.Header>
115
- <Dialog.Title>From the trigger</Dialog.Title>
116
- <Dialog.Description>The surface oozes out of the button and travels to the center.</Dialog.Description>
117
- </Dialog.Header>
118
- </Dialog.Content>
119
- </Dialog>
120
- <Dialog>
121
- <Dialog.Trigger render={<Button variant="secondary">From the pointer</Button>} />
122
- <Dialog.Content from="pointer" effect="morph">
123
- <Dialog.Header>
124
- <Dialog.Title>From the pointer</Dialog.Title>
125
- <Dialog.Description>A circle grows from where you pressed.</Dialog.Description>
126
- </Dialog.Header>
127
- </Dialog.Content>
128
- </Dialog>
129
- <Dialog>
130
- <Dialog.Trigger render={<Button variant="secondary">From its center</Button>} />
131
- <Dialog.Content from="center" effect="morph">
132
- <Dialog.Header>
133
- <Dialog.Title>From its center</Dialog.Title>
134
- <Dialog.Description>The panel unfolds in place toward every edge.</Dialog.Description>
135
- </Dialog.Header>
136
- </Dialog.Content>
137
- </Dialog>
138
- <Dialog>
139
- <Dialog.Trigger render={<Button variant="secondary">From the bottom</Button>} />
140
- <Dialog.Content from="bottom" effect="slide">
141
- <Dialog.Header>
142
- <Dialog.Title>From the bottom</Dialog.Title>
143
- <Dialog.Description>The finished panel slides up from the edge of the window.</Dialog.Description>
144
- </Dialog.Header>
145
- </Dialog.Content>
146
- </Dialog>
147
- </div>
148
-
149
- # From a card
150
-
151
- The trigger can be any element. `Morph.Part` pairs the card's cover and title with their twins in the panel, so they fly into the dialog and back.
152
-
153
- <Dialog>
154
- <Dialog.Trigger className="flex w-56 flex-col gap-3 rounded-xl bg-surface-2 p-3 text-left shadow-surface-2 outline-none focus-visible:ring-1 focus-visible:ring-focus-ring">
155
- <Morph.Part id="cover" className="h-28 w-full rounded-lg bg-brand/20" />
156
- <Morph.Part id="title" className="text-subtitle weight-semibold text-foreground">Liquid glass</Morph.Part>
157
- </Dialog.Trigger>
158
- <Dialog.Content size="lg" effect="morph" hideSource>
159
- <div className="flex flex-col gap-4">
160
- <Morph.Part id="cover" className="h-48 w-full rounded-lg bg-brand/20" />
161
- <Morph.Part id="title" className="text-title weight-bold text-foreground">Liquid glass</Morph.Part>
162
- <Dialog.Description>The card grows into the dialog: its cover and title travel with it, and the rest of the panel is revealed around them.</Dialog.Description>
163
- </div>
164
- </Dialog.Content>
165
- </Dialog>