@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,444 +0,0 @@
1
- import Dropdown from './index'
2
- import Button from '../../button'
3
- import Dialog from '../dialog'
4
- import Input from '../../inputs/input'
5
- import { Bell, BookOpen, ChevronDown, Clock, Copy, Ellipsis, Lock, LogOut, Mail, Monitor, Palette, Pencil, Settings, Shield, SquareLibrary, Star, Trash2, User, Users } from 'lucide-react'
6
-
7
- # Basics
8
-
9
- ## Basic
10
-
11
- The inline panel, running its own selection: `defaultCheckedIndex` makes
12
- the rows radio options and the panel moves the marker itself.
13
-
14
- <Dropdown defaultCheckedIndex={0}>
15
- <Dropdown.Item index={0} icon={SquareLibrary} label="Teamspaces" />
16
- <Dropdown.Item index={1} icon={Clock} label="Recents" />
17
- <Dropdown.Item index={2} icon={Star} label="Favorites" />
18
- <Dropdown.Item index={3} icon={Users} label="Shared" />
19
- <Dropdown.Item index={4} icon={Lock} label="Private" />
20
- </Dropdown>
21
-
22
- ## Triggered menu
23
-
24
- 3 parts: Dropdown.Menu, Dropdown.Trigger, Dropdown.Content. Any element
25
- goes in `render`, and picking a row closes the menu.
26
-
27
- <Dropdown.Menu>
28
- <Dropdown.Trigger render={<Button variant="ghost">Open menu</Button>} />
29
- <Dropdown.Content defaultCheckedIndex={0}>
30
- <Dropdown.Item index={0} icon={SquareLibrary} label="Teamspaces" />
31
- <Dropdown.Item index={1} icon={Clock} label="Recents" />
32
- <Dropdown.Item index={2} icon={Star} label="Favorites" />
33
- <Dropdown.Item index={3} icon={Users} label="Shared" />
34
- <Dropdown.Item index={4} icon={Lock} label="Private" />
35
- </Dropdown.Content>
36
- </Dropdown.Menu>
37
-
38
- ## Children items
39
-
40
- Rows written shadcn-style: the content as children and no `index` — each row
41
- takes its place in document order, conditional rows included. `shortcut`
42
- adds a muted caption at the end, `inset` lines a text-only row up with the
43
- rows that have an icon, and `onSelect` runs on a pick by pointer or keyboard.
44
-
45
- <Dropdown.Menu>
46
- <Dropdown.Trigger asChild>
47
- <Button variant="ghost" size="icon" aria-label="Row actions"><Ellipsis /></Button>
48
- </Dropdown.Trigger>
49
- <Dropdown.Content align="end">
50
- <Dropdown.Item icon={Pencil} shortcut="⌘E">Edit</Dropdown.Item>
51
- <Dropdown.Item icon={Copy} shortcut="⌘D">Duplicate</Dropdown.Item>
52
- <Dropdown.Item inset>Move to…</Dropdown.Item>
53
- <Dropdown.Item disabled inset>Archive</Dropdown.Item>
54
- <Dropdown.Separator />
55
- <Dropdown.Item icon={Trash2} shortcut="⌫">Delete</Dropdown.Item>
56
- </Dropdown.Content>
57
- </Dropdown.Menu>
58
-
59
- ## Groups
60
-
61
- Without any checked state the rows are plain actions. Dropdown.Label
62
- captions a run of them, Dropdown.Separator rules between the runs, and the
63
- indices keep counting across both.
64
-
65
- <Dropdown>
66
- <Dropdown.Label>Account</Dropdown.Label>
67
- <Dropdown.Item index={0} icon={Mail} label="Email" />
68
- <Dropdown.Item index={1} icon={Bell} label="Notifications" />
69
- <Dropdown.Item index={2} icon={Shield} label="Privacy" />
70
- <Dropdown.Separator />
71
- <Dropdown.Label>Appearance</Dropdown.Label>
72
- <Dropdown.Item index={3} icon={Settings} label="General" />
73
- <Dropdown.Item index={4} icon={Palette} label="Theme" />
74
- <Dropdown.Item index={5} icon={Monitor} label="Display" />
75
- </Dropdown>
76
-
77
- ## Groups and labels
78
-
79
- `Dropdown.Group` holds a run of related rows; a `Dropdown.Label` inside it
80
- names the group for assistive tech. Labels and separators break the row
81
- order, so nothing selected melts across them.
82
-
83
- <Dropdown.Menu>
84
- <Dropdown.Trigger render={<Button variant="secondary" leadingIcon={User}>Account</Button>} />
85
- <Dropdown.Content>
86
- <Dropdown.Group>
87
- <Dropdown.Label>My account</Dropdown.Label>
88
- <Dropdown.Item icon={User}>Profile</Dropdown.Item>
89
- <Dropdown.Item icon={Settings}>Settings</Dropdown.Item>
90
- </Dropdown.Group>
91
- <Dropdown.Separator />
92
- <Dropdown.Group>
93
- <Dropdown.Label inset>Team</Dropdown.Label>
94
- <Dropdown.Item inset>Invite members</Dropdown.Item>
95
- <Dropdown.Item inset>New team</Dropdown.Item>
96
- </Dropdown.Group>
97
- <Dropdown.Separator />
98
- <Dropdown.Item icon={LogOut}>Log out</Dropdown.Item>
99
- </Dropdown.Content>
100
- </Dropdown.Menu>
101
-
102
- ## Shortcut
103
-
104
- `Dropdown.Shortcut` is the trailing caption on its own, for rows that lay
105
- out their own content.
106
-
107
- <Dropdown className="w-64">
108
- <Dropdown.Item>
109
- <Mail />
110
- New message
111
- <Dropdown.Shortcut>⌘N</Dropdown.Shortcut>
112
- </Dropdown.Item>
113
- <Dropdown.Item>
114
- <Bell />
115
- Mute thread
116
- <Dropdown.Shortcut>⇧⌘M</Dropdown.Shortcut>
117
- </Dropdown.Item>
118
- </Dropdown>
119
-
120
- # Selection
121
-
122
- ## Multiple selection
123
-
124
- `defaultCheckedIndices` (or `checkedIndices`): rows become checkboxes, the
125
- menu stays open as you toggle, and touching picks share one background.
126
-
127
- <Dropdown.Menu>
128
- <Dropdown.Trigger render={<Button variant="ghost">Status</Button>} />
129
- <Dropdown.Content defaultCheckedIndices={[0, 1, 2]}>
130
- {['Open', 'In progress', 'In review', 'Blocked', 'Done', 'Archived'].map((status, i) => (
131
- <Dropdown.Item key={status} index={i} label={status} />
132
- ))}
133
- </Dropdown.Content>
134
- </Dropdown.Menu>
135
-
136
- ## Checkbox items
137
-
138
- `Dropdown.CheckboxItem` toggles itself — `defaultChecked`, or `checked` with
139
- `onCheckedChange` — and keeps the menu open. Touching checked rows share one
140
- background, as in a multiple selection. Uncontrolled rows live inside the
141
- popup, so `keepMounted` keeps their state across opens.
142
-
143
- <Dropdown.Menu>
144
- <Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Columns</Button>} />
145
- <Dropdown.Content align="end" keepMounted>
146
- <Dropdown.Label>Visible columns</Dropdown.Label>
147
- <Dropdown.CheckboxItem defaultChecked>Name</Dropdown.CheckboxItem>
148
- <Dropdown.CheckboxItem defaultChecked>Email</Dropdown.CheckboxItem>
149
- <Dropdown.CheckboxItem>Role</Dropdown.CheckboxItem>
150
- <Dropdown.CheckboxItem defaultChecked>Status</Dropdown.CheckboxItem>
151
- <Dropdown.CheckboxItem disabled>Created</Dropdown.CheckboxItem>
152
- </Dropdown.Content>
153
- </Dropdown.Menu>
154
-
155
- ## Radio group
156
-
157
- `Dropdown.RadioGroup` picks one of its `Dropdown.RadioItem` rows by `value`
158
- (`defaultValue`, or `value` with `onValueChange`). Picking one closes the
159
- menu.
160
-
161
- <Dropdown.Menu>
162
- <Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Language</Button>} />
163
- <Dropdown.Content keepMounted>
164
- <Dropdown.RadioGroup defaultValue="sk">
165
- <Dropdown.Label>Language</Dropdown.Label>
166
- <Dropdown.RadioItem value="sk">Slovenčina</Dropdown.RadioItem>
167
- <Dropdown.RadioItem value="cs">Čeština</Dropdown.RadioItem>
168
- <Dropdown.RadioItem value="en">English</Dropdown.RadioItem>
169
- <Dropdown.RadioItem value="de" disabled>Deutsch</Dropdown.RadioItem>
170
- </Dropdown.RadioGroup>
171
- </Dropdown.Content>
172
- </Dropdown.Menu>
173
-
174
- ## Searchable menu
175
-
176
- Put a Dropdown.Search marked `filter` first and the panel filters its own
177
- rows by `label`. Type to filter, press Enter to pick the first match.
178
-
179
- <Dropdown.Menu>
180
- <Dropdown.Trigger render={<Button variant="ghost" trailingIcon={ChevronDown}>Language</Button>} />
181
- <Dropdown.Content defaultCheckedIndex={0}>
182
- <Dropdown.Search filter placeholder="Search languages" />
183
- {['Auto detect', 'Arabic', 'Bengali', 'Chinese (Simplified)', 'Czech', 'Danish', 'Dutch', 'English (UK)', 'English (US)', 'Finnish', 'French', 'German', 'Greek', 'Hebrew', 'Hindi', 'Hungarian', 'Indonesian', 'Italian', 'Japanese', 'Korean', 'Norwegian', 'Polish', 'Portuguese (Brazil)', 'Romanian', 'Russian', 'Spanish', 'Swedish', 'Thai', 'Turkish', 'Ukrainian', 'Vietnamese'].map((language, i) => (
184
- <Dropdown.Item key={language} index={i} label={language} />
185
- ))}
186
- <Dropdown.Empty>No languages found</Dropdown.Empty>
187
- </Dropdown.Content>
188
- </Dropdown.Menu>
189
-
190
- ## Searchable multiple selection
191
-
192
- Both at once. The panel filters the rows and keeps the picks on the rows
193
- themselves, so a filtered-away pick is still checked when it comes back.
194
-
195
- <Dropdown.Menu>
196
- <Dropdown.Trigger render={<Button variant="ghost">Labels</Button>} />
197
- <Dropdown.Content defaultCheckedIndices={[0, 3]}>
198
- <Dropdown.Search filter placeholder="Search labels" />
199
- {['Bug', 'Feature', 'Docs', 'Design', 'Performance', 'Accessibility', 'Refactor', 'Testing', 'Infrastructure', 'Security', 'Good first issue', 'Help wanted'].map((label, i) => (
200
- <Dropdown.Item key={label} index={i} label={label} />
201
- ))}
202
- <Dropdown.Empty>No labels found</Dropdown.Empty>
203
- </Dropdown.Content>
204
- </Dropdown.Menu>
205
-
206
- # Composition
207
-
208
- ## Submenu
209
-
210
- A `Dropdown.Sub` holds a trigger row and its panel. ArrowRight, a press or a
211
- resting pointer opens it, ArrowLeft or Escape closes it; it grows out of its
212
- row, which stays lit while it is open, and nests as deep as you like.
213
-
214
- <Dropdown.Menu>
215
- <Dropdown.Trigger render={<Button variant="secondary">Options</Button>} />
216
- <Dropdown.Content keepMounted>
217
- <Dropdown.Item icon={User}>Profile</Dropdown.Item>
218
- <Dropdown.Sub>
219
- <Dropdown.SubTrigger icon={Palette}>Theme</Dropdown.SubTrigger>
220
- <Dropdown.SubContent keepMounted>
221
- <Dropdown.RadioGroup defaultValue="system">
222
- <Dropdown.RadioItem value="light">Light</Dropdown.RadioItem>
223
- <Dropdown.RadioItem value="dark">Dark</Dropdown.RadioItem>
224
- <Dropdown.RadioItem value="system">System</Dropdown.RadioItem>
225
- </Dropdown.RadioGroup>
226
- </Dropdown.SubContent>
227
- </Dropdown.Sub>
228
- <Dropdown.Sub>
229
- <Dropdown.SubTrigger icon={Users}>Invite users</Dropdown.SubTrigger>
230
- <Dropdown.SubContent>
231
- <Dropdown.Item icon={Mail}>Email</Dropdown.Item>
232
- <Dropdown.Item icon={Copy}>Copy link</Dropdown.Item>
233
- <Dropdown.Separator />
234
- <Dropdown.Sub>
235
- <Dropdown.SubTrigger inset>More</Dropdown.SubTrigger>
236
- <Dropdown.SubContent>
237
- <Dropdown.Item>Slack</Dropdown.Item>
238
- <Dropdown.Item>Teams</Dropdown.Item>
239
- </Dropdown.SubContent>
240
- </Dropdown.Sub>
241
- </Dropdown.SubContent>
242
- </Dropdown.Sub>
243
- <Dropdown.Separator />
244
- <Dropdown.Item icon={LogOut}>Log out</Dropdown.Item>
245
- </Dropdown.Content>
246
- </Dropdown.Menu>
247
-
248
- ## Link rows
249
-
250
- `asChild` turns a row into its single child, which keeps its element type, props and ref, so a row can be a plain link
251
- or a router `Link`; its children are the row's content. `render={<Link href="/docs" />}` does the same. Enter and a
252
- click follow it once.
253
-
254
- <Dropdown.Menu>
255
- <Dropdown.Trigger render={<Button variant="secondary">Help</Button>} />
256
- <Dropdown.Content>
257
- <Dropdown.Item asChild icon={BookOpen} className="no-underline">
258
- <a href="#docs">Documentation</a>
259
- </Dropdown.Item>
260
- <Dropdown.Item asChild icon={Mail} className="no-underline">
261
- <a href="#support">Contact support</a>
262
- </Dropdown.Item>
263
- </Dropdown.Content>
264
- </Dropdown.Menu>
265
-
266
- ## Typeahead for rich rows
267
-
268
- Typing while the menu is open jumps to the row whose text starts with what you typed. A row built from markup has no
269
- string to match, so `textValue` supplies it: here "ad" lands on the first row, "gr" on the second.
270
-
271
- <Dropdown.Menu>
272
- <Dropdown.Trigger render={<Button variant="secondary">Assign to</Button>} />
273
- <Dropdown.Content>
274
- <Dropdown.Item textValue="Ada Lovelace">
275
- <User />
276
- <span className="truncate">Ada Lovelace</span>
277
- <Dropdown.Shortcut>Admin</Dropdown.Shortcut>
278
- </Dropdown.Item>
279
- <Dropdown.Item textValue="Grace Hopper">
280
- <User />
281
- <span className="truncate">Grace Hopper</span>
282
- <Dropdown.Shortcut>Editor</Dropdown.Shortcut>
283
- </Dropdown.Item>
284
- <Dropdown.Item textValue="Linus Torvalds">
285
- <User />
286
- <span className="truncate">Linus Torvalds</span>
287
- <Dropdown.Shortcut>Viewer</Dropdown.Shortcut>
288
- </Dropdown.Item>
289
- </Dropdown.Content>
290
- </Dropdown.Menu>
291
-
292
- ## Inside a dialog
293
-
294
- A menu lifts 2 surface levels above whatever it opens over — a dialog
295
- included — and so does its submenu above the menu.
296
-
297
- <Dialog>
298
- <Dialog.Trigger render={<Button variant="tertiary">Open dialog</Button>} />
299
- <Dialog.Content>
300
- <Dialog.Header>
301
- <Dialog.Title>Share document</Dialog.Title>
302
- <Dialog.Description>Pick who can see it.</Dialog.Description>
303
- </Dialog.Header>
304
- <Dropdown.Menu>
305
- <Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Access</Button>} />
306
- <Dropdown.Content keepMounted>
307
- <Dropdown.RadioGroup defaultValue="team">
308
- <Dropdown.RadioItem value="private" icon={Lock}>Only me</Dropdown.RadioItem>
309
- <Dropdown.RadioItem value="team" icon={Users}>My team</Dropdown.RadioItem>
310
- </Dropdown.RadioGroup>
311
- <Dropdown.Separator />
312
- <Dropdown.Sub>
313
- <Dropdown.SubTrigger icon={Shield}>Advanced</Dropdown.SubTrigger>
314
- <Dropdown.SubContent keepMounted>
315
- <Dropdown.CheckboxItem defaultChecked>Allow comments</Dropdown.CheckboxItem>
316
- <Dropdown.CheckboxItem>Allow downloads</Dropdown.CheckboxItem>
317
- </Dropdown.SubContent>
318
- </Dropdown.Sub>
319
- </Dropdown.Content>
320
- </Dropdown.Menu>
321
- </Dialog.Content>
322
- </Dialog>
323
-
324
- # Behavior
325
-
326
- ## Morph
327
-
328
- The menu oozes out of its trigger by default. `effect="morph"` with `hideSource` turns the trigger itself into the menu and shrinks it back, one continuous surface.
329
-
330
- <div className="flex flex-wrap items-start justify-center gap-3">
331
- <Dropdown.Menu>
332
- <Dropdown.Trigger render={<Button variant="secondary">Goo</Button>} />
333
- <Dropdown.Content defaultCheckedIndex={0}>
334
- <Dropdown.Item index={0} icon={Mail} label="Email" />
335
- <Dropdown.Item index={1} icon={Bell} label="Notifications" />
336
- <Dropdown.Item index={2} icon={Shield} label="Privacy" />
337
- </Dropdown.Content>
338
- </Dropdown.Menu>
339
- <Dropdown.Menu>
340
- <Dropdown.Trigger render={<Button variant="secondary">Morph</Button>} />
341
- <Dropdown.Content effect="morph" hideSource defaultCheckedIndex={0}>
342
- <Dropdown.Item index={0} icon={Settings} label="General" />
343
- <Dropdown.Item index={1} icon={Palette} label="Theme" />
344
- <Dropdown.Item index={2} icon={Monitor} label="Display" />
345
- </Dropdown.Content>
346
- </Dropdown.Menu>
347
- </div>
348
-
349
- ## Open-change details
350
-
351
- `onOpenChange(open, details)` hands over Base UI's event details: `details.reason` says why the menu is closing
352
- (`'escape-key'`, `'outside-press'`, `'focus-out'`, `'item-press'`, `'trigger-press'`) and `details.cancel()` keeps it
353
- open. Here an outside press is refused, so only Escape, a pick or the trigger close it. A callback that takes just
354
- `open` keeps working.
355
-
356
- <Dropdown.Menu onOpenChange={(open, details) => { if (!open && details.reason === 'outside-press') details.cancel() }}>
357
- <Dropdown.Trigger render={<Button variant="secondary">Pinned open</Button>} />
358
- <Dropdown.Content>
359
- <Dropdown.Item icon={Pencil}>Edit</Dropdown.Item>
360
- <Dropdown.Item icon={Copy}>Duplicate</Dropdown.Item>
361
- <Dropdown.Sub>
362
- <Dropdown.SubTrigger icon={Palette}>Theme</Dropdown.SubTrigger>
363
- <Dropdown.SubContent>
364
- <Dropdown.Item>Light</Dropdown.Item>
365
- <Dropdown.Item>Dark</Dropdown.Item>
366
- </Dropdown.SubContent>
367
- </Dropdown.Sub>
368
- </Dropdown.Content>
369
- </Dropdown.Menu>
370
-
371
- ## Modal
372
-
373
- `modal` locks the page scroll while the menu is open and keeps the pointer off everything outside it. Without it
374
- (the default) the page keeps scrolling and the menu follows its trigger.
375
-
376
- <Dropdown.Menu modal>
377
- <Dropdown.Trigger render={<Button variant="secondary">Modal menu</Button>} />
378
- <Dropdown.Content>
379
- <Dropdown.Item icon={Pencil}>Edit</Dropdown.Item>
380
- <Dropdown.Item icon={Trash2}>Delete</Dropdown.Item>
381
- </Dropdown.Content>
382
- </Dropdown.Menu>
383
-
384
- ## Focus return
385
-
386
- `finalFocus` decides where focus lands once the menu has closed: a ref, or a function returning an element, instead of
387
- the trigger. Pick a country and the cursor goes to the phone field, also inside a dialog.
388
-
389
- <Dialog>
390
- <Dialog.Trigger render={<Button variant="tertiary">Add a phone number</Button>} />
391
- <Dialog.Content>
392
- <Dialog.Header>
393
- <Dialog.Title>Phone number</Dialog.Title>
394
- <Dialog.Description>Choose a country code, then type the number.</Dialog.Description>
395
- </Dialog.Header>
396
- <div className="flex items-center gap-2">
397
- <Dropdown.Menu>
398
- <Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Country code</Button>} />
399
- <Dropdown.Content finalFocus={() => document.getElementById('dropdown-phone-field')}>
400
- <Dropdown.Item textValue="Slovakia">Slovakia +421</Dropdown.Item>
401
- <Dropdown.Item textValue="Czechia">Czechia +420</Dropdown.Item>
402
- <Dropdown.Item textValue="Germany">Germany +49</Dropdown.Item>
403
- </Dropdown.Content>
404
- </Dropdown.Menu>
405
- <Input id="dropdown-phone-field" aria-label="Phone number" placeholder="900 000 000" />
406
- </div>
407
- </Dialog.Content>
408
- </Dialog>
409
-
410
- ## Placement and layering
411
-
412
- Everything Base UI's positioner and portal take, plus a lift. `positionerClassName` styles the portalled positioner,
413
- which is `z-50`: a z utility there lifts a menu above other fixed layers. `container` mounts the menu somewhere else,
414
- `alignOffset`, `collisionPadding` and `collisionBoundary` steer where it sits near an edge. `initialFocus` takes a ref
415
- to focus once the menu has opened (read when it opens, so a fresh ref object each render is fine), and extra HTML
416
- attributes (`aria-*`, `data-*`, `id`, `style`) land on the popup.
417
-
418
- `initialFocus={false}` only drops modo's own first-row focus: Base UI still focuses the first row after a keyboard open
419
- and the popup after a pointer open, which cannot be suppressed. A key handler in `onKeyDownCapture` runs first:
420
- `preventDefault` there is harmless, navigation and typeahead still run; `stopPropagation` stops Base UI's key handling
421
- and the panel's arrow navigation.
422
-
423
- ```tsx
424
- <Dropdown.Menu>
425
- <Dropdown.Trigger render={<Button>Open</Button>} />
426
- <Dropdown.Content
427
- positionerClassName="z-[60]"
428
- container={dialogPopupRef}
429
- alignOffset={-4}
430
- collisionPadding={16}
431
- collisionBoundary={boundaryRef.current}
432
- initialFocus={searchRef}
433
- aria-label="Actions"
434
- data-testid="actions-menu"
435
- >
436
- <Dropdown.Sub>
437
- <Dropdown.SubTrigger>More</Dropdown.SubTrigger>
438
- <Dropdown.SubContent positionerClassName="z-[60]" collisionPadding={16}>
439
- <Dropdown.Item>Archive</Dropdown.Item>
440
- </Dropdown.SubContent>
441
- </Dropdown.Sub>
442
- </Dropdown.Content>
443
- </Dropdown.Menu>
444
- ```