@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,425 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): a ⌘K command palette.
3
- * Base UI's Autocomplete renders inline (the list is always there and filters
4
- * as you type; the input keeps focus while the arrows move a highlight through
5
- * the rows) inside this system's Dialog, so the panel grows out of its trigger
6
- * with the goo neck and keeps its top edge still while the list filters. The
7
- * rows wear Select's fluid hover: one highlight springs between them, following
8
- * Base UI's own highlight (pointer and keyboard alike) over the rects
9
- * `lib/use-fluid-hover.ts` measures. Search's suggestions reuse the list.
10
- */
11
-
12
- import { Autocomplete } from '@base-ui/react/autocomplete'
13
- import { Dialog as DialogPrimitive } from '@base-ui/react/dialog'
14
- import {
15
- createContext,
16
- forwardRef,
17
- type HTMLAttributes,
18
- type ReactNode,
19
- type RefObject,
20
- useContext,
21
- useEffect,
22
- useImperativeHandle,
23
- useMemo,
24
- useRef,
25
- useState,
26
- } from 'react'
27
- import { FluidHoverHighlight } from '../../../lib/fluid-hover-highlight'
28
- import { type IconComponent, useIcon } from '../../../lib/icon-context'
29
- import { isDisabledRow, popupScrollAreaClass, popupViewportClass } from '../../../lib/popup'
30
- import { shapeMap } from '../../../lib/shape-context'
31
- import { useSize } from '../../../lib/size-context'
32
- import type { SlotProps } from '../../../lib/slot'
33
- import { useFluidHover, useRegisterFluidHoverItem } from '../../../lib/use-fluid-hover'
34
- import { cn } from '../../../lib/utils'
35
- import { ScrollArea } from '../../../primitives/scroll-area'
36
- import {
37
- createDialogChangeDetails,
38
- DialogContent,
39
- type DialogOpenChangeDetails,
40
- DialogState,
41
- DialogTrigger,
42
- } from '../dialog'
43
-
44
- /** One command: the label the query matches, plus what the row shows and does. */
45
- interface CommandItem {
46
- label: string
47
- icon?: IconComponent
48
- /** Shown at the end of the row; display only, nothing binds it. */
49
- shortcut?: string
50
- /** More words the query matches. */
51
- keywords?: string[]
52
- disabled?: boolean
53
- onSelect?: () => void
54
- }
55
-
56
- interface CommandGroup {
57
- label: string
58
- items: CommandItem[]
59
- }
60
-
61
- type CommandItems = CommandItem[] | CommandGroup[]
62
-
63
- // Like Select's and Combobox's popups, the rows keep the "rounded" radii
64
- // whatever the global shape, so their highlight sits concentric in the panel.
65
- const listShape = shapeMap.rounded
66
-
67
- const CommandContext = createContext<{ trigger: RefObject<HTMLButtonElement>; close: () => void; session: number }>({
68
- trigger: { current: null },
69
- close: () => {},
70
- session: 0,
71
- })
72
-
73
- /** Base UI's highlighted row, as its index among the rendered rows. */
74
- const CommandHighlight = createContext<number | null>(null)
75
- const CommandRows = createContext<((index: number, element: HTMLElement | null) => void) | undefined>(undefined)
76
-
77
- const isGrouped = (items: CommandItems): items is CommandGroup[] => items[0] !== undefined && 'items' in items[0]
78
-
79
- type CommandListRootProps = Omit<
80
- Autocomplete.Root.Props<CommandItem>,
81
- 'items' | 'filter' | 'itemToStringValue' | 'onItemHighlighted'
82
- > & { items: CommandItems }
83
-
84
- /** Base UI's Autocomplete set up for command rows: it matches labels and keywords and hands its highlight to `CommandList`. */
85
- function CommandListRoot({ items, ...props }: CommandListRootProps) {
86
- const [highlight, setHighlight] = useState<number | null>(null)
87
- const { contains } = Autocomplete.useFilter()
88
-
89
- return (
90
- <CommandHighlight.Provider value={highlight}>
91
- <Autocomplete.Root
92
- {...props}
93
- items={items}
94
- itemToStringValue={item => item.label}
95
- filter={(item, query) => contains([item.label, ...(item.keywords ?? [])].join(' '), query)}
96
- onItemHighlighted={(item, details) => setHighlight(item ? details.index : null)}
97
- />
98
- </CommandHighlight.Provider>
99
- )
100
- }
101
-
102
- function CommandShortcut({ className, ...props }: HTMLAttributes<HTMLElement>) {
103
- return <kbd className={cn('ml-auto shrink-0 font-sans text-caption text-muted-foreground', className)} {...props} />
104
- }
105
-
106
- function CommandRow({
107
- item,
108
- index,
109
- onPick,
110
- }: {
111
- item: CommandItem
112
- index: number
113
- onPick: (item: CommandItem) => void
114
- }) {
115
- const registerItem = useContext(CommandRows)
116
- const active = useContext(CommandHighlight) === index
117
- const ref = useRef<HTMLDivElement>(null)
118
- const size = useSize()
119
- useRegisterFluidHoverItem(registerItem, index, ref)
120
- const Icon = item.icon
121
-
122
- return (
123
- <Autocomplete.Item
124
- ref={ref}
125
- value={item}
126
- disabled={item.disabled}
127
- onClick={() => onPick(item)}
128
- className={cn(
129
- 'relative z-10 flex shrink-0 cursor-pointer select-none items-center outline-none transition-[color] duration-fast',
130
- 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
131
- size.control,
132
- size.gap,
133
- size.itemPx,
134
- size.text,
135
- listShape.item,
136
- active ? 'text-foreground' : 'text-muted-foreground',
137
- )}
138
- >
139
- {Icon && (
140
- <Icon
141
- size={size.icon}
142
- strokeWidth={active ? 2 : 1.5}
143
- className="shrink-0 transition-[color,stroke-width] duration-fast"
144
- />
145
- )}
146
- <span className="min-w-0 flex-1 truncate [text-box:trim-both_cap_alphabetic] py-1 -my-1">{item.label}</span>
147
- {item.shortcut && <CommandShortcut>{item.shortcut}</CommandShortcut>}
148
- </Autocomplete.Item>
149
- )
150
- }
151
-
152
- interface CommandListProps {
153
- onPick: (item: CommandItem) => void
154
- emptyMessage: ReactNode
155
- className?: string
156
- }
157
-
158
- /** The filtered rows (grouped or flat) under one fluid highlight, inside a ScrollArea. Goes inside `CommandListRoot`. */
159
- function CommandList({ onPick, emptyMessage, className }: CommandListProps) {
160
- const filtered = Autocomplete.useFilteredItems<CommandItem | CommandGroup>() as CommandItems
161
- const highlight = useContext(CommandHighlight)
162
- const compact = useSize().variant === 'compact'
163
- const containerRef = useRef<HTMLDivElement>(null)
164
- const { itemRects, isMeasured, registerItem } = useFluidHover(containerRef, { isItemDisabled: isDisabledRow })
165
- const rect = isMeasured && highlight !== null ? (itemRects[highlight] ?? null) : null
166
- const rows = (items: CommandItem[], start: number) =>
167
- items.map((item, i) => <CommandRow key={item.label} item={item} index={start + i} onPick={onPick} />)
168
- let start = 0
169
-
170
- return (
171
- <CommandRows.Provider value={registerItem}>
172
- <ScrollArea
173
- className={cn(popupScrollAreaClass, className)}
174
- viewportClassName={cn(popupViewportClass, 'scroll-fade')}
175
- >
176
- <Autocomplete.Empty className="px-4 py-6 text-center text-body text-muted-foreground empty:hidden">
177
- {emptyMessage}
178
- </Autocomplete.Empty>
179
- <Autocomplete.List ref={containerRef} className="relative flex flex-col p-1 outline-none data-[empty]:p-0">
180
- <FluidHoverHighlight rect={rect} session={0} className={listShape.bg} />
181
- {isGrouped(filtered)
182
- ? filtered.map(group => {
183
- const first = start
184
- start += group.items.length
185
- return (
186
- <Autocomplete.Group key={group.label} className="flex flex-col">
187
- <Autocomplete.GroupLabel
188
- className={cn(
189
- 'shrink-0 px-2 pt-2 pb-1 text-muted-foreground',
190
- compact ? 'text-caption-compact' : 'text-caption',
191
- )}
192
- >
193
- {group.label}
194
- </Autocomplete.GroupLabel>
195
- {rows(group.items, first)}
196
- </Autocomplete.Group>
197
- )
198
- })
199
- : rows(filtered, 0)}
200
- </Autocomplete.List>
201
- </ScrollArea>
202
- </CommandRows.Provider>
203
- )
204
- }
205
-
206
- interface CommandPaletteProps {
207
- /** The commands, flat or in labelled groups. */
208
- items: CommandItems
209
- /** The search field's placeholder. Defaults to `'Type a command or search…'`. */
210
- placeholder?: string
211
- /** Shown when nothing matches the query. Defaults to `'No results found.'`. */
212
- emptyMessage?: ReactNode
213
- /** Classes for the palette's box. */
214
- className?: string
215
- }
216
-
217
- function CommandPalette({
218
- items,
219
- placeholder = 'Type a command or search…',
220
- emptyMessage = 'No results found.',
221
- className,
222
- }: CommandPaletteProps) {
223
- const { close } = useContext(CommandContext)
224
- const SearchIcon = useIcon('search')
225
- const size = useSize()
226
- const [query, setQuery] = useState('')
227
-
228
- return (
229
- <CommandListRoot
230
- items={items}
231
- inline
232
- open
233
- autoHighlight="always"
234
- keepHighlight
235
- value={query}
236
- onValueChange={(next, details) => {
237
- // A pick runs the command and closes; filling the field with it would
238
- // re-filter the closing panel down to one row.
239
- if (details.reason === 'item-press') return
240
- setQuery(next)
241
- }}
242
- >
243
- <div className={cn('flex flex-col', className)}>
244
- <div className="flex h-12 shrink-0 items-center gap-2 border-b border-border px-4">
245
- <SearchIcon size={size.icon} strokeWidth={1.5} className="shrink-0 text-muted-foreground" />
246
- <Autocomplete.Input
247
- placeholder={placeholder}
248
- className={cn(
249
- 'h-full min-w-0 flex-1 bg-transparent text-foreground outline-none placeholder:text-muted-foreground',
250
- size.text,
251
- )}
252
- />
253
- </div>
254
- <CommandList
255
- emptyMessage={emptyMessage}
256
- className="max-h-80"
257
- onPick={item => {
258
- item.onSelect?.()
259
- close()
260
- }}
261
- />
262
- </div>
263
- </CommandListRoot>
264
- )
265
- }
266
-
267
- const CommandTrigger = forwardRef<HTMLButtonElement, SlotProps>((props, ref) => {
268
- const { trigger } = useContext(CommandContext)
269
- useImperativeHandle(ref, () => trigger.current as HTMLButtonElement)
270
- return <DialogTrigger ref={trigger} {...props} />
271
- })
272
- CommandTrigger.displayName = 'CommandTrigger'
273
-
274
- interface CommandContentProps extends CommandPaletteProps {
275
- /** Accessible name of the panel. Defaults to `'Command menu'`. */
276
- label?: string
277
- /** Where the panel grows from (see Morph): the pressed trigger (its center when none), the press point, its own center, a viewport edge, or a ref to any element. Defaults to `'trigger'`. */
278
- from?: 'trigger' | 'pointer' | 'center' | 'top' | 'right' | 'bottom' | 'left' | RefObject<HTMLElement | null>
279
- /** How it grows (see Morph): with the liquid goo neck, a plain morph, a slide or a fade. Defaults to `'goo'`. */
280
- effect?: 'goo' | 'morph' | 'slide' | 'fade'
281
- /** Hide the trigger while open, so it reads as turning into the panel. Defaults to `false`. */
282
- hideSource?: boolean
283
- /** Spring tier of a plain morph, slide or fade; goo runs on its own `spring.goo`. Defaults to `'slow'`. */
284
- tier?: 'moderate' | 'slow'
285
- }
286
-
287
- const CommandContent = forwardRef<HTMLDivElement, CommandContentProps>(
288
- ({ items, placeholder, emptyMessage, className, label = 'Command menu', ...morph }, ref) => {
289
- const { session } = useContext(CommandContext)
290
- return (
291
- <DialogContent
292
- ref={ref}
293
- position="top"
294
- size="lg"
295
- showCloseButton={false}
296
- aria-label={label}
297
- className="p-0"
298
- {...morph}
299
- >
300
- {/* Fresh per open: a palette reopened before it finished closing
301
- would keep the old query and lose the first row's highlight. */}
302
- <CommandPalette
303
- key={session}
304
- items={items}
305
- placeholder={placeholder}
306
- emptyMessage={emptyMessage}
307
- className={className}
308
- />
309
- </DialogContent>
310
- )
311
- },
312
- )
313
- CommandContent.displayName = 'CommandContent'
314
-
315
- interface CommandScopeProps {
316
- open: boolean
317
- onOpenChange: (next: boolean, details: DialogOpenChangeDetails) => void
318
- hotkey: string | false
319
- children?: ReactNode
320
- }
321
-
322
- function CommandScope({ open, onOpenChange, hotkey, children }: CommandScopeProps) {
323
- const trigger = useRef<HTMLButtonElement>(null)
324
- const change = useRef(onOpenChange)
325
- change.current = onOpenChange
326
- const [session, setSession] = useState(0)
327
- const [wasOpen, setWasOpen] = useState(open)
328
- if (open !== wasOpen) {
329
- setWasOpen(open)
330
- if (open) setSession(session + 1)
331
- }
332
-
333
- useEffect(() => {
334
- if (!hotkey) return
335
- const onKey = (event: KeyboardEvent) => {
336
- if (event.defaultPrevented || !(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== hotkey) return
337
- event.preventDefault()
338
- // Opened from the keyboard, it still grows out of its trigger.
339
- change.current(!open, createDialogChangeDetails('none', event, trigger.current ?? undefined))
340
- }
341
- // Only one palette answers a press: an open one listens in the capture
342
- // phase, so it closes before a closed one can open.
343
- window.addEventListener('keydown', onKey, open)
344
- return () => window.removeEventListener('keydown', onKey, open)
345
- }, [hotkey, open])
346
-
347
- const ctx = useMemo(
348
- () => ({ trigger, close: () => change.current(false, createDialogChangeDetails('imperative-action')), session }),
349
- [session],
350
- )
351
-
352
- return (
353
- <CommandContext.Provider value={ctx}>
354
- <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>
355
- {children}
356
- </DialogPrimitive.Root>
357
- </CommandContext.Provider>
358
- )
359
- }
360
-
361
- interface CommandProps {
362
- /** Controlled open state. */
363
- open?: boolean
364
- /** Initial open state, for an uncontrolled palette. Defaults to `false`. */
365
- defaultOpen?: boolean
366
- /** Called when the palette opens or closes, with Base UI's Dialog change details (`reason`, `event`, `cancel()`); the hotkey reports `'none'` and a run command `'imperative-action'`. */
367
- onOpenChange?: (open: boolean, details: DialogOpenChangeDetails) => void
368
- /** The key that toggles the palette with ⌘ (Ctrl elsewhere); `false` leaves the keyboard alone. Defaults to `'k'`. */
369
- hotkey?: string | false
370
- /** The trigger and the panel: `Command.Trigger` plus a `Command.Content`. */
371
- children?: ReactNode
372
- }
373
-
374
- /**
375
- * A ⌘K command menu: a search field over grouped commands, grown out of
376
- * whatever opened it.
377
- *
378
- * Type to filter by label and keywords; the arrows move one highlight
379
- * through the rows, springing between them like the fluid hover, and Enter
380
- * or a press runs the command and closes the panel. The first match is
381
- * always highlighted, so Enter has a target, and an empty result says so.
382
- * The panel is Dialog's: it grows out of its trigger with the goo neck
383
- * (see Morph) and sits near the top of the window, so it keeps its top edge
384
- * still as the list filters. ⌘K (Ctrl+K elsewhere) toggles it from anywhere
385
- * on the page and still grows it out of the trigger; with several palettes
386
- * on one page, one answers each press. Escape and a press outside close it.
387
- * Built on Base UI's Autocomplete, rendered inline: the input keeps focus
388
- * and screen readers follow the highlighted row.
389
- *
390
- * Commands are data: `{ label, icon, shortcut, keywords, disabled, onSelect }`,
391
- * flat or in `{ label, items }` groups. A `shortcut` is only shown.
392
- *
393
- * Statics:
394
- * - `Command.Trigger` — the control that opens it: `render={<Button/>}` or
395
- * `asChild`.
396
- * - `Command.Content` — the panel: `items`, `placeholder`, `emptyMessage`,
397
- * `label`, and the morph options `from`, `effect`, `hideSource`, `tier`.
398
- * - `Command.Palette` — the search field and list on their own, for a
399
- * palette that lives in the page: `items`, `placeholder`, `emptyMessage`.
400
- * - `Command.Shortcut` — a key hint, as the rows show it, e.g. in the
401
- * trigger.
402
- *
403
- * @example {@include ./examples.mdx}
404
- */
405
- function Command({ open, defaultOpen, onOpenChange, hotkey = 'k', children }: CommandProps) {
406
- return (
407
- <DialogState open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
408
- {root => (
409
- <CommandScope {...root} hotkey={hotkey}>
410
- {children}
411
- </CommandScope>
412
- )}
413
- </DialogState>
414
- )
415
- }
416
-
417
- Command.Trigger = CommandTrigger
418
- Command.Content = CommandContent
419
- Command.Palette = CommandPalette
420
- Command.Shortcut = CommandShortcut
421
-
422
- export type { CommandContentProps, CommandGroup, CommandItem, CommandItems, CommandPaletteProps, CommandProps }
423
- export { Command, CommandContent, CommandList, CommandListRoot, CommandPalette, CommandShortcut, CommandTrigger }
424
-
425
- export default Command
@@ -1,56 +0,0 @@
1
- import ContextMenu from './index'
2
- import { ArrowLeft, ArrowRight, Code, Copy, Link, Printer, RotateCw, Save, Scissors, Clipboard, Trash2 } from 'lucide-react'
3
-
4
- # Right click
5
-
6
- Right-click anywhere in the area (long-press on touch): the menu swells out of the exact point you pressed. Rows are Dropdown's, with a shortcut at the end.
7
-
8
- <ContextMenu>
9
- <ContextMenu.Trigger className="flex h-56 w-full max-w-lg items-center justify-center rounded-xl border border-dashed border-border text-caption text-muted-foreground">
10
- Right-click here
11
- </ContextMenu.Trigger>
12
- <ContextMenu.Content>
13
- <ContextMenu.Item index={0} icon={ArrowLeft} label="Back" shortcut="⌘[" />
14
- <ContextMenu.Item index={1} icon={ArrowRight} label="Forward" shortcut="⌘]" disabled />
15
- <ContextMenu.Item index={2} icon={RotateCw} label="Reload" shortcut="⌘R" />
16
- <ContextMenu.Separator />
17
- <ContextMenu.Item index={3} icon={Save} label="Save as…" shortcut="⌘S" />
18
- <ContextMenu.Item index={4} icon={Printer} label="Print…" shortcut="⌘P" />
19
- <ContextMenu.Item index={5} icon={Link} label="Copy link" />
20
- <ContextMenu.Separator />
21
- <ContextMenu.Label>Developer</ContextMenu.Label>
22
- <ContextMenu.Item index={6} icon={Code} label="Inspect" shortcut="⌥⌘I" />
23
- </ContextMenu.Content>
24
- </ContextMenu>
25
-
26
- # Compact
27
-
28
- `size="compact"` pins the rows to the 28px step of the size ladder, for dense surfaces.
29
-
30
- <ContextMenu size="compact">
31
- <ContextMenu.Trigger className="flex h-40 w-full max-w-lg items-center justify-center rounded-xl border border-dashed border-border text-caption text-muted-foreground">
32
- Right-click a file
33
- </ContextMenu.Trigger>
34
- <ContextMenu.Content className="w-48">
35
- <ContextMenu.Item index={0} icon={Scissors} label="Cut" shortcut="⌘X" />
36
- <ContextMenu.Item index={1} icon={Copy} label="Copy" shortcut="⌘C" />
37
- <ContextMenu.Item index={2} icon={Clipboard} label="Paste" shortcut="⌘V" disabled />
38
- <ContextMenu.Separator />
39
- <ContextMenu.Item index={3} icon={Trash2} label="Delete" shortcut="⌫" />
40
- </ContextMenu.Content>
41
- </ContextMenu>
42
-
43
- # Morph
44
-
45
- `effect="morph"` grows the menu out of the point as one clean surface, without the goo.
46
-
47
- <ContextMenu>
48
- <ContextMenu.Trigger className="flex h-40 w-full max-w-lg items-center justify-center rounded-xl border border-dashed border-border text-caption text-muted-foreground">
49
- Right-click for a plain morph
50
- </ContextMenu.Trigger>
51
- <ContextMenu.Content effect="morph">
52
- <ContextMenu.Item index={0} icon={Copy} label="Copy" shortcut="⌘C" />
53
- <ContextMenu.Item index={1} icon={Link} label="Copy link" />
54
- <ContextMenu.Item index={2} icon={Printer} label="Print…" shortcut="⌘P" />
55
- </ContextMenu.Content>
56
- </ContextMenu>