@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,74 +0,0 @@
1
- import Search from './index'
2
- import Button from '../../button'
3
- import { AlignLeft, Bell, Bold, FileText, Hash, Heading, Italic, Link, Settings, Underline } from 'lucide-react'
4
-
5
- # Pill
6
-
7
- Press it, or press `/` anywhere on the page: the pill grows into the field in place, over the buttons beside it. Type and the suggestions ooze out below; Escape clears the query, then collapses it.
8
-
9
- <div className="flex w-full max-w-md items-center gap-1">
10
- <Search
11
- placeholder="Search components"
12
- shortcut="/"
13
- items={['Accordion', 'Badge', 'Button', 'Card', 'Checkbox group', 'Combobox', 'Command', 'Dialog', 'Dropdown', 'Popover', 'Radio group', 'Select', 'Sheet', 'Slider', 'Switch', 'Tabs', 'Toast', 'Tooltip']}
14
- />
15
- <Button variant="ghost" size="icon" aria-label="Notifications">
16
- <Bell />
17
- </Button>
18
- <Button variant="ghost" size="icon" aria-label="Settings">
19
- <Settings />
20
- </Button>
21
- </div>
22
-
23
- # Icon
24
-
25
- `variant="icon"` rests as a lone search icon. At the end of a toolbar, `align="end"` grows it leftward over the other tools.
26
-
27
- <div className="flex items-center gap-1">
28
- <Button variant="ghost" size="icon" aria-label="Bold">
29
- <Bold />
30
- </Button>
31
- <Button variant="ghost" size="icon" aria-label="Italic">
32
- <Italic />
33
- </Button>
34
- <Button variant="ghost" size="icon" aria-label="Underline">
35
- <Underline />
36
- </Button>
37
- <Button variant="ghost" size="icon" aria-label="Link">
38
- <Link />
39
- </Button>
40
- <Search
41
- variant="icon"
42
- align="end"
43
- width={240}
44
- placeholder="Find in document"
45
- items={[
46
- { label: 'Introduction', icon: Heading },
47
- { label: 'Getting started', icon: Heading },
48
- { label: 'Installation', icon: Hash, keywords: ['setup', 'npm'] },
49
- { label: 'Usage', icon: AlignLeft },
50
- { label: 'Changelog', icon: FileText, keywords: ['releases'] },
51
- ]}
52
- />
53
- </div>
54
-
55
- # Without suggestions
56
-
57
- Leave out `items` for a plain search field: the same growth, no panel. Enter reports the query to `onSubmit`.
58
-
59
- <Search placeholder="Search the archive" />
60
-
61
- # Expanded
62
-
63
- `defaultExpanded` starts it open; leaving it empty still collapses it.
64
-
65
- <Search defaultExpanded placeholder="Filter" items={['Open', 'In progress', 'In review', 'Done', 'Cancelled']} />
66
-
67
- # Morph effects
68
-
69
- `effect` picks how the suggestions leave the field: a plain morph without the neck, or a fade.
70
-
71
- <div className="flex flex-col items-start gap-3">
72
- <Search effect="morph" defaultExpanded width={220} placeholder="Morph" items={['Apple', 'Apricot', 'Avocado', 'Banana', 'Blueberry']} />
73
- <Search effect="fade" defaultExpanded width={220} placeholder="Fade" items={['Apple', 'Apricot', 'Avocado', 'Banana', 'Blueberry']} />
74
- </div>
@@ -1,333 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): a search that grows out
3
- * of its own button. The idea is beUI's morphing search
4
- * (github.com/starc007/ui-components `components/motion/morphing-search.tsx`
5
- * @ de52f337e520e7ee37749b36eb1c32df86137bcb — MIT © 2026 Saurabh Chauhan,
6
- * notice: LICENSE.beui); none of its code is ported. Where beUI flies a
7
- * shared layout box into a fixed overlay, the field here springs its own
8
- * width in place, over its neighbors, from the box the button keeps in the
9
- * layout. The suggestions are Base UI's Autocomplete popup with Command's
10
- * rows, oozing out of the field through the shared morph (`lib/use-morph.ts`,
11
- * goo by default).
12
- */
13
-
14
- import { Autocomplete } from '@base-ui/react/autocomplete'
15
- import { motion } from 'motion/react'
16
- import { type KeyboardEvent, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
17
- import { flushSync } from 'react-dom'
18
- import { useIcon } from '../../../lib/icon-context'
19
- import { MorphSurface } from '../../../lib/morph-layers'
20
- import { useReduceMotion } from '../../../lib/reduced-motion'
21
- import { shapeMap, useShape } from '../../../lib/shape-context'
22
- import { useSize } from '../../../lib/size-context'
23
- import { spring } from '../../../lib/springs'
24
- import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
25
- import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
26
- import { useControllableState } from '../../../lib/use-controllable-state'
27
- import { type MorphOrigin, useMorph } from '../../../lib/use-morph'
28
- import { cn } from '../../../lib/utils'
29
- import { type CommandItem, CommandList, CommandListRoot, CommandShortcut } from '../../overlays/command'
30
-
31
- // The icon sits where the square button centers it, in both states and both
32
- // variants, so it stays put while the field grows around it.
33
- const INSET = { default: 'pl-2.5', compact: 'pl-[7px]' }
34
- const SQUARE = { default: 'w-9', compact: 'w-7' }
35
- const PILL = { default: 'min-w-[160px]', compact: 'min-w-[128px]' }
36
-
37
- const isEditable = (target: EventTarget | null) =>
38
- target instanceof HTMLElement && (target.isContentEditable || target.closest('input, textarea, select') !== null)
39
-
40
- interface SearchProps {
41
- /** How it rests: a pill showing the placeholder (and the shortcut), or a lone search icon. Defaults to `'pill'`. */
42
- variant?: 'pill' | 'icon'
43
- /** The field's placeholder, the pill's label and the accessible name of both. Defaults to `'Search'`. */
44
- placeholder?: string
45
- /** Suggestions offered below the field and filtered as you type: strings, or Command items (`{ label, icon, keywords }`). Leave out for a plain search field. */
46
- items?: (string | CommandItem)[]
47
- /** Controlled query. */
48
- value?: string
49
- /** Initial query, for an uncontrolled field. Defaults to `''`. */
50
- defaultValue?: string
51
- /** Called on every change of the query. */
52
- onValueChange?: (value: string) => void
53
- /** Called with the query on Enter, and with a suggestion's label when one is picked. */
54
- onSubmit?: (query: string) => void
55
- /** Controlled expanded state. */
56
- expanded?: boolean
57
- /** Initial expanded state, for an uncontrolled field. Defaults to `false`. */
58
- defaultExpanded?: boolean
59
- /** Called when the field expands or collapses. */
60
- onExpandedChange?: (expanded: boolean) => void
61
- /** Width of the expanded field, in px. Defaults to `288`. */
62
- width?: number
63
- /** The edge that stays put: the field grows from it toward the other one, over its neighbors. Defaults to `'start'`. */
64
- align?: 'start' | 'end'
65
- /** A key that expands the field from anywhere on the page outside another field, shown on the pill. */
66
- shortcut?: string
67
- /** Shown in the suggestions when none matches. Defaults to `'No results found.'`. */
68
- emptyMessage?: string
69
- /** How the suggestions grow out of the field (see Morph): with the liquid goo neck, a plain morph, a slide or a fade. Defaults to `'goo'`. */
70
- effect?: 'goo' | 'morph' | 'slide' | 'fade'
71
- /** Spring tier of the suggestions' plain morph, slide or fade; goo runs on its own `spring.goo`. Defaults to `'moderate'`. */
72
- tier?: 'moderate' | 'slow'
73
- /** Classes for the root, the box the resting button keeps in the layout. */
74
- className?: string
75
- }
76
-
77
- /**
78
- * A search button that grows into the field in place, with suggestions that
79
- * ooze out below it.
80
- *
81
- * At rest it is a pill showing the placeholder, or a lone search icon. A
82
- * press (or its `shortcut` key) springs it to `width` and focuses the
83
- * field. It grows over its neighbors rather than pushing them: the resting
84
- * box stays in the layout, so nothing around it moves, and `align="end"`
85
- * grows it leftward, for a toolbar's far end. The search icon never moves.
86
- * Typing opens the suggestions, which melt out of the field through the
87
- * goo neck (see Morph) once it has finished growing; the arrows move one
88
- * fluid highlight through them, and Enter or a press picks one. Escape
89
- * closes the suggestions, then clears the query, then collapses the field
90
- * and hands focus back to the button; leaving an empty field collapses it
91
- * too. The field lifts 2 surface levels while open, the same level as its
92
- * suggestions, so the two read as one liquid.
93
- *
94
- * With `items` the field is a combobox over a listbox of suggestions,
95
- * built on Base UI's Autocomplete (filtering by label and keywords, the
96
- * input keeps focus while the highlight moves); without, it is a plain
97
- * search box. Either way it sits in a `<search>` landmark around a form,
98
- * and Enter reports the query to `onSubmit`.
99
- *
100
- * @example {@include ./examples.mdx}
101
- */
102
- function Search({
103
- variant = 'pill',
104
- placeholder = 'Search',
105
- items,
106
- value,
107
- defaultValue = '',
108
- onValueChange,
109
- onSubmit,
110
- expanded,
111
- defaultExpanded = false,
112
- onExpandedChange,
113
- width = 288,
114
- align = 'start',
115
- shortcut,
116
- emptyMessage = 'No results found.',
117
- effect,
118
- tier = 'moderate',
119
- className,
120
- }: SearchProps) {
121
- const [query, setQuery] = useControllableState(value, defaultValue, onValueChange)
122
- const [isExpanded, setExpanded] = useControllableState(expanded, defaultExpanded, onExpandedChange)
123
- const [suggesting, setSuggesting] = useState(false)
124
- // The state the field last finished springing to: the suggestions wait for
125
- // it, so the goo neck grows from the field's final box.
126
- const [settled, setSettled] = useState(isExpanded)
127
- const [rest, setRest] = useState(0)
128
- const reduced = useReduceMotion()
129
- const shape = useShape()
130
- const size = useSize()
131
- const level = Math.min(useSurface() + 2, 8)
132
- const SearchIcon = useIcon('search')
133
- const XIcon = useIcon('x')
134
- const button = useRef<HTMLButtonElement>(null)
135
- const field = useRef<HTMLDivElement>(null)
136
- const input = useRef<HTMLInputElement>(null)
137
- const origin = useRef<MorphOrigin>({})
138
- const suggestions = useMemo(() => items?.map(item => (typeof item === 'string' ? { label: item } : item)), [items])
139
- const open = suggesting && isExpanded && settled
140
- // Lifted from the moment it starts growing until it has shrunk back, so
141
- // its neighbors never show through and its contents stay on top.
142
- const lifted = isExpanded || settled
143
- const morph = useMorph(open, origin, { from: field, effect, tier })
144
-
145
- // The field springs from and back to the button's own width.
146
- useLayoutEffect(() => {
147
- const el = button.current
148
- if (!el) return
149
- const observer = new ResizeObserver(() => setRest(el.offsetWidth))
150
- observer.observe(el)
151
- return () => observer.disconnect()
152
- }, [])
153
-
154
- // Both commit synchronously so focus moves straight between the button and
155
- // the field: a focused button that hides would blur to nothing, which reads
156
- // as leaving the field.
157
- const expand = () => {
158
- flushSync(() => setExpanded(true))
159
- // No scroll: the field's box is still narrower than its contents.
160
- input.current?.focus({ preventScroll: true })
161
- }
162
-
163
- const collapse = (refocus: boolean) => {
164
- flushSync(() => {
165
- setQuery('')
166
- setSuggesting(false)
167
- setExpanded(false)
168
- })
169
- if (refocus) button.current?.focus()
170
- }
171
-
172
- useEffect(() => {
173
- if (!shortcut || isExpanded) return
174
- const onKey = (event: globalThis.KeyboardEvent) => {
175
- if (event.defaultPrevented || event.key !== shortcut || event.metaKey || event.ctrlKey || event.altKey) return
176
- if (isEditable(event.target)) return
177
- event.preventDefault()
178
- expand()
179
- }
180
- window.addEventListener('keydown', onKey)
181
- return () => window.removeEventListener('keydown', onKey)
182
- }, [shortcut, isExpanded])
183
-
184
- // Base UI's own Escape closes open suggestions; the next ones clear, then collapse.
185
- const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
186
- if (event.key !== 'Escape' || open) return
187
- event.stopPropagation()
188
- if (query) setQuery('')
189
- else collapse(true)
190
- }
191
-
192
- const inputProps = {
193
- ref: input,
194
- placeholder,
195
- 'aria-label': placeholder,
196
- onKeyDown,
197
- className: cn(
198
- 'h-full min-w-0 flex-1 bg-transparent text-foreground outline-none placeholder:text-muted-foreground [&::-webkit-search-cancel-button]:hidden',
199
- size.text,
200
- ),
201
- }
202
-
203
- const root = (
204
- <search
205
- onBlur={event => {
206
- if (!isExpanded || query || event.currentTarget.contains(event.relatedTarget as Node | null)) return
207
- collapse(false)
208
- }}
209
- className={cn('group/search relative inline-flex shrink-0 align-middle', className)}
210
- >
211
- <form
212
- className="contents"
213
- onSubmit={event => {
214
- event.preventDefault()
215
- onSubmit?.(query)
216
- }}
217
- >
218
- <button
219
- ref={button}
220
- type="button"
221
- aria-label={placeholder}
222
- onClick={expand}
223
- className={cn(
224
- 'relative z-[1] flex items-center outline-none focus-visible:ring-1 focus-visible:ring-focus-ring',
225
- size.control,
226
- size.gap,
227
- size.text,
228
- shape.input,
229
- variant === 'icon'
230
- ? cn('cursor-pointer justify-center', SQUARE[size.variant])
231
- : cn('cursor-text pr-2.5', INSET[size.variant], PILL[size.variant]),
232
- isExpanded && 'invisible',
233
- )}
234
- >
235
- <SearchIcon
236
- size={size.icon}
237
- strokeWidth={1.5}
238
- className="shrink-0 text-muted-foreground transition-colors duration-fast group-hover/search:text-foreground"
239
- />
240
- {variant === 'pill' && <span className="text-muted-foreground">{placeholder}</span>}
241
- {variant === 'pill' && shortcut && <CommandShortcut className="pl-4">{shortcut}</CommandShortcut>}
242
- </button>
243
- {rest > 0 && (
244
- <motion.div
245
- ref={field}
246
- className={cn(
247
- 'absolute top-0 h-full overflow-hidden ring-1 transition-[box-shadow] duration-moderate',
248
- align === 'end' ? 'right-0' : 'left-0',
249
- shape.input,
250
- lifted
251
- ? cn('z-10 ring-transparent', SURFACE_BG[level], SURFACE_SHADOW[3])
252
- : 'ring-border group-hover/search:bg-muted/50',
253
- )}
254
- initial={false}
255
- animate={{ width: isExpanded ? width : rest }}
256
- transition={reduced ? { duration: 0 } : isExpanded ? spring.slow : spring.slow.exit}
257
- onAnimationComplete={() => setSettled(isExpanded)}
258
- >
259
- {lifted && (
260
- // A fixed width (structural): the field's contents keep their
261
- // place while the box grows over them, and while it shrinks back
262
- // over the button's identical icon and placeholder.
263
- <div className={cn('flex h-full items-center pr-1.5', size.gap, INSET[size.variant])} style={{ width }}>
264
- <SearchIcon size={size.icon} strokeWidth={1.5} className="shrink-0 text-muted-foreground" />
265
- {suggestions ? (
266
- <Autocomplete.Input {...inputProps} />
267
- ) : (
268
- <input {...inputProps} type="search" value={query} onChange={event => setQuery(event.target.value)} />
269
- )}
270
- {query && (
271
- <button
272
- type="button"
273
- aria-label="Clear"
274
- onMouseDown={event => event.preventDefault()}
275
- onClick={() => {
276
- setQuery('')
277
- input.current?.focus()
278
- }}
279
- className="flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground outline-none transition-[color,background-color] duration-fast hover:bg-hover hover:text-foreground active:bg-active focus-visible:ring-1 focus-visible:ring-focus-ring"
280
- >
281
- <XIcon size={size.icon - 2} strokeWidth={1.5} />
282
- </button>
283
- )}
284
- </div>
285
- )}
286
- </motion.div>
287
- )}
288
- </form>
289
- </search>
290
- )
291
-
292
- if (!suggestions) return root
293
-
294
- return (
295
- <CommandListRoot
296
- items={suggestions}
297
- value={query}
298
- onValueChange={setQuery}
299
- open={open}
300
- onOpenChange={setSuggesting}
301
- >
302
- {root}
303
- <Autocomplete.Portal>
304
- <Autocomplete.Positioner
305
- anchor={field}
306
- side="bottom"
307
- align={align}
308
- sideOffset={8}
309
- className="z-50 outline-none"
310
- >
311
- <Autocomplete.Popup ref={morph.popupRef} className="relative outline-none">
312
- <SurfaceProvider value={level}>
313
- <MorphSurface
314
- morph={morph}
315
- bg={SURFACE_BG[level]}
316
- shadow={SURFACE_SHADOW[3]}
317
- radius={shapeMap.rounded.container}
318
- className="flex max-h-[min(300px,var(--available-height))] w-[var(--anchor-width)] flex-col overflow-hidden"
319
- >
320
- <CommandList emptyMessage={emptyMessage} onPick={item => onSubmit?.(item.label)} />
321
- </MorphSurface>
322
- </SurfaceProvider>
323
- </Autocomplete.Popup>
324
- </Autocomplete.Positioner>
325
- </Autocomplete.Portal>
326
- </CommandListRoot>
327
- )
328
- }
329
-
330
- export type { SearchProps }
331
- export { Search }
332
-
333
- export default Search