@justanarthur/modo-ui 0.6.0-canary.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +66 -164
  2. package/dist/base.css +4 -141
  3. package/dist/blocks/sidebar-app/index.js +26 -40
  4. package/dist/components/AI/input-message/index.js +16 -23
  5. package/dist/components/AI/thinking-indicator/index.js +6 -9
  6. package/dist/components/accordion/index.d.ts +11 -39
  7. package/dist/components/accordion/index.js +13 -18
  8. package/dist/components/badge/index.d.ts +11 -18
  9. package/dist/components/badge/index.js +7 -12
  10. package/dist/components/button/index.d.ts +17 -53
  11. package/dist/components/button/index.js +6 -11
  12. package/dist/components/card/index.d.ts +9 -32
  13. package/dist/components/card/index.js +11 -17
  14. package/dist/components/copy/index.d.ts +8 -41
  15. package/dist/components/copy/index.js +9 -15
  16. package/dist/components/inputs/checkbox/index.d.ts +9 -28
  17. package/dist/components/inputs/checkbox/index.js +13 -18
  18. package/dist/components/inputs/color-picker/index.d.ts +14 -22
  19. package/dist/components/inputs/color-picker/index.js +18 -26
  20. package/dist/components/inputs/combobox/index.d.ts +20 -85
  21. package/dist/components/inputs/combobox/index.js +18 -27
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
  23. package/dist/components/inputs/date-time/calendar/index.js +11 -15
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
  25. package/dist/components/inputs/date-time/date-picker/index.js +25 -35
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
  29. package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
  31. package/dist/components/inputs/date-time/month-picker/index.js +23 -32
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
  33. package/dist/components/inputs/date-time/time-picker/index.js +24 -33
  34. package/dist/components/inputs/input/index.d.ts +13 -95
  35. package/dist/components/inputs/input/index.js +9 -18
  36. package/dist/components/inputs/radio/index.d.ts +5 -20
  37. package/dist/components/inputs/radio/index.js +12 -16
  38. package/dist/components/inputs/search/index.d.ts +3 -3
  39. package/dist/components/inputs/search/index.js +18 -26
  40. package/dist/components/inputs/select/index.d.ts +23 -99
  41. package/dist/components/inputs/select/index.js +14 -29
  42. package/dist/components/inputs/slider/index.d.ts +0 -9
  43. package/dist/components/inputs/slider/index.js +5 -8
  44. package/dist/components/inputs/switch/index.d.ts +2 -8
  45. package/dist/components/inputs/switch/index.js +12 -15
  46. package/dist/components/inputs/textarea/index.d.ts +1 -20
  47. package/dist/components/inputs/textarea/index.js +6 -9
  48. package/dist/components/navigation/sidebar/index.d.ts +21 -44
  49. package/dist/components/navigation/sidebar/index.js +31 -42
  50. package/dist/components/navigation/tabs/index.d.ts +2 -8
  51. package/dist/components/navigation/tabs/index.js +10 -15
  52. package/dist/components/navigation/tabs-subtle/index.js +10 -13
  53. package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
  54. package/dist/components/overlays/alert-dialog/index.js +13 -23
  55. package/dist/components/overlays/command/index.d.ts +20 -25
  56. package/dist/components/overlays/command/index.js +17 -25
  57. package/dist/components/overlays/context-menu/index.d.ts +17 -39
  58. package/dist/components/overlays/context-menu/index.js +18 -29
  59. package/dist/components/overlays/dialog/index.d.ts +16 -42
  60. package/dist/components/overlays/dialog/index.js +12 -20
  61. package/dist/components/overlays/dropdown/index.d.ts +34 -304
  62. package/dist/components/overlays/dropdown/index.js +17 -44
  63. package/dist/components/overlays/popover/index.d.ts +12 -38
  64. package/dist/components/overlays/popover/index.js +9 -13
  65. package/dist/components/overlays/preview-card/index.js +8 -12
  66. package/dist/components/overlays/sheet/index.d.ts +8 -25
  67. package/dist/components/overlays/sheet/index.js +13 -19
  68. package/dist/components/overlays/toast/index.d.ts +50 -209
  69. package/dist/components/overlays/toast/index.js +10 -23
  70. package/dist/components/overlays/tooltip/index.d.ts +21 -123
  71. package/dist/components/overlays/tooltip/index.js +6 -16
  72. package/dist/components/table/index.d.ts +8 -63
  73. package/dist/components/table/index.js +9 -20
  74. package/dist/index.d.ts +1048 -2999
  75. package/dist/index.js +82 -231
  76. package/dist/preset.d.ts +0 -22
  77. package/dist/preset.js +2 -24
  78. package/dist/primitives/code/index.js +5 -8
  79. package/dist/primitives/craft/index.js +6 -10
  80. package/dist/primitives/fluid-hover/index.js +8 -10
  81. package/dist/primitives/morph/index.js +10 -16
  82. package/dist/primitives/motion/index.js +8 -11
  83. package/dist/primitives/scroll-area/index.js +3 -5
  84. package/dist/primitives/sizes/index.js +4 -6
  85. package/dist/primitives/surface/index.js +4 -6
  86. package/dist/shared/{components-4y816hwp.js → components-0q0sqfh4.js} +49 -27
  87. package/dist/shared/components-0sn7ypjw.js +61 -0
  88. package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
  89. package/dist/shared/components-1434p1mh.js +123 -0
  90. package/dist/shared/{components-t2a3qmy9.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-qs4rkqsj.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-av5t26rc.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-wqrvqq5p.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-3ydr2fqe.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-6gk118w3.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-y1qvbawa.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-xqszvkj4.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-9j9abkct.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-8tt3xbb5.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-jymmaevv.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-skfd7kff.js → components-8snj490h.js} +32 -78
  105. package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
  106. package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
  107. package/dist/shared/{components-vkwq2k96.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pw06rbxq.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-eqze3y30.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-5y5shqfd.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-khspp26b.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-km7fhgbk.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-qqcmtrbv.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-awra5sff.js → components-hqeq3w9q.js} +16 -24
  119. package/dist/shared/{components-5tzhqbcw.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-8mt5bsv6.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-2syq4mwc.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-r7q1zm7r.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-qdm3yh26.js → components-kvr7f9hy.js} +10 -19
  126. package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
  127. package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
  128. package/dist/shared/{components-6b0zb8z3.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-2c64r8c9.js → components-n42c79bz.js} +22 -23
  130. package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
  131. package/dist/shared/components-ng72k97e.js +128 -0
  132. package/dist/shared/{components-dyae0y7h.js → components-pbmqctfa.js} +65 -169
  133. package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
  134. package/dist/shared/components-raknhppb.js +64 -0
  135. package/dist/shared/{components-8rb25gbe.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-5012r6gr.js → components-s083f38z.js} +34 -164
  137. package/dist/shared/components-s5ngg32c.js +267 -0
  138. package/dist/shared/components-sn1rxx1d.js +143 -0
  139. package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
  140. package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
  141. package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
  142. package/dist/shared/components-vynjtrk6.js +19 -0
  143. package/dist/shared/{components-w0xq6q9k.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-z0bqtvcp.js → components-w90endve.js} +72 -71
  145. package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
  146. package/dist/shared/components-wy9jpqny.js +146 -0
  147. package/dist/shared/{components-5sxjeh6h.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-t50hrswb.js → components-zfnmn5d4.js} +36 -82
  150. package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
  151. package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
  152. package/dist/styles.css +32 -320
  153. package/dist/tailwind.css +0 -16
  154. package/dist/tokens.css +0 -67
  155. package/package.json +4 -227
  156. package/DESIGN.md +0 -623
  157. package/blocks/sidebar-app/examples.mdx +0 -33
  158. package/blocks/sidebar-app/index.tsx +0 -218
  159. package/blocks/sidebar-app/inset-topbar.tsx +0 -25
  160. package/blocks/sidebar-app/menu-grid.ts +0 -26
  161. package/blocks/sidebar-app/nav-data.ts +0 -36
  162. package/blocks/sidebar-app/search-field.tsx +0 -48
  163. package/blocks/sidebar-app/user-footer.tsx +0 -67
  164. package/blocks/sidebar-app/workspace-header.tsx +0 -129
  165. package/components/AI/input-message/examples.mdx +0 -130
  166. package/components/AI/input-message/file-thumbnail.tsx +0 -173
  167. package/components/AI/input-message/index.tsx +0 -1385
  168. package/components/AI/thinking-indicator/examples.mdx +0 -27
  169. package/components/AI/thinking-indicator/index.tsx +0 -210
  170. package/components/accordion/examples.mdx +0 -233
  171. package/components/accordion/index.tsx +0 -1071
  172. package/components/avatar/examples.mdx +0 -95
  173. package/components/avatar/index.tsx +0 -129
  174. package/components/badge/change-demo.tsx +0 -29
  175. package/components/badge/examples.mdx +0 -124
  176. package/components/badge/index.tsx +0 -225
  177. package/components/badge/variants.ts +0 -73
  178. package/components/button/examples.mdx +0 -168
  179. package/components/button/index.tsx +0 -424
  180. package/components/button/loading-demo.tsx +0 -25
  181. package/components/button/variants.ts +0 -168
  182. package/components/card/examples.mdx +0 -251
  183. package/components/card/index.tsx +0 -1070
  184. package/components/copy/examples.mdx +0 -125
  185. package/components/copy/index.tsx +0 -662
  186. package/components/inputs/checkbox/examples.mdx +0 -87
  187. package/components/inputs/checkbox/index.tsx +0 -611
  188. package/components/inputs/checkbox/select-all-demo.tsx +0 -48
  189. package/components/inputs/color-picker/examples.mdx +0 -111
  190. package/components/inputs/color-picker/index.tsx +0 -1981
  191. package/components/inputs/color-picker/variants.ts +0 -401
  192. package/components/inputs/combobox/examples.mdx +0 -366
  193. package/components/inputs/combobox/index.tsx +0 -1527
  194. package/components/inputs/combobox/remote-demo.tsx +0 -105
  195. package/components/inputs/date-time/calendar/examples.mdx +0 -45
  196. package/components/inputs/date-time/calendar/index.tsx +0 -370
  197. package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
  198. package/components/inputs/date-time/date-picker/examples.mdx +0 -243
  199. package/components/inputs/date-time/date-picker/index.tsx +0 -476
  200. package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
  201. package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
  202. package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
  203. package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
  204. package/components/inputs/date-time/duration-picker/index.tsx +0 -253
  205. package/components/inputs/date-time/month-picker/examples.mdx +0 -45
  206. package/components/inputs/date-time/month-picker/index.tsx +0 -254
  207. package/components/inputs/date-time/picker-shell.tsx +0 -581
  208. package/components/inputs/date-time/time-columns.tsx +0 -94
  209. package/components/inputs/date-time/time-picker/examples.mdx +0 -57
  210. package/components/inputs/date-time/time-picker/index.tsx +0 -227
  211. package/components/inputs/field/examples.mdx +0 -117
  212. package/components/inputs/field/index.tsx +0 -268
  213. package/components/inputs/file-dropzone/examples.mdx +0 -83
  214. package/components/inputs/file-dropzone/file-row.tsx +0 -201
  215. package/components/inputs/file-dropzone/index.tsx +0 -316
  216. package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
  217. package/components/inputs/file-dropzone/variants.ts +0 -94
  218. package/components/inputs/input/examples.mdx +0 -166
  219. package/components/inputs/input/index.tsx +0 -494
  220. package/components/inputs/input/password-demo.tsx +0 -30
  221. package/components/inputs/label/examples.mdx +0 -67
  222. package/components/inputs/label/index.tsx +0 -85
  223. package/components/inputs/number-input/examples.mdx +0 -69
  224. package/components/inputs/number-input/index.tsx +0 -221
  225. package/components/inputs/radio/examples.mdx +0 -77
  226. package/components/inputs/radio/index.tsx +0 -636
  227. package/components/inputs/search/examples.mdx +0 -74
  228. package/components/inputs/search/index.tsx +0 -333
  229. package/components/inputs/select/examples.mdx +0 -296
  230. package/components/inputs/select/index.tsx +0 -1044
  231. package/components/inputs/select/variants.ts +0 -32
  232. package/components/inputs/slider/examples.mdx +0 -153
  233. package/components/inputs/slider/index.tsx +0 -1867
  234. package/components/inputs/switch/examples.mdx +0 -96
  235. package/components/inputs/switch/index.tsx +0 -504
  236. package/components/inputs/textarea/examples.mdx +0 -126
  237. package/components/inputs/textarea/index.tsx +0 -207
  238. package/components/navigation/navigation-menu/examples.mdx +0 -136
  239. package/components/navigation/navigation-menu/index.tsx +0 -704
  240. package/components/navigation/pagination/examples.mdx +0 -74
  241. package/components/navigation/pagination/index.tsx +0 -401
  242. package/components/navigation/sidebar/examples.mdx +0 -325
  243. package/components/navigation/sidebar/index.tsx +0 -453
  244. package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
  245. package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
  246. package/components/navigation/sidebar/sidebar.css +0 -74
  247. package/components/navigation/sidebar/variants.ts +0 -55
  248. package/components/navigation/tabs/examples.mdx +0 -89
  249. package/components/navigation/tabs/index.tsx +0 -494
  250. package/components/navigation/tabs-subtle/examples.mdx +0 -49
  251. package/components/navigation/tabs-subtle/index.tsx +0 -512
  252. package/components/overlays/alert-dialog/examples.mdx +0 -123
  253. package/components/overlays/alert-dialog/index.tsx +0 -276
  254. package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
  255. package/components/overlays/command/examples.mdx +0 -113
  256. package/components/overlays/command/index.tsx +0 -425
  257. package/components/overlays/context-menu/examples.mdx +0 -56
  258. package/components/overlays/context-menu/index.tsx +0 -279
  259. package/components/overlays/dialog/examples.mdx +0 -165
  260. package/components/overlays/dialog/index.tsx +0 -451
  261. package/components/overlays/dropdown/dropdown-search.tsx +0 -395
  262. package/components/overlays/dropdown/examples.mdx +0 -444
  263. package/components/overlays/dropdown/index.tsx +0 -1241
  264. package/components/overlays/dropdown/menu-item.tsx +0 -510
  265. package/components/overlays/dropdown/menu-parts.tsx +0 -725
  266. package/components/overlays/popover/anchored-demo.tsx +0 -59
  267. package/components/overlays/popover/examples.mdx +0 -203
  268. package/components/overlays/popover/index.tsx +0 -317
  269. package/components/overlays/preview-card/examples.mdx +0 -61
  270. package/components/overlays/preview-card/index.tsx +0 -204
  271. package/components/overlays/sheet/examples.mdx +0 -101
  272. package/components/overlays/sheet/index.tsx +0 -307
  273. package/components/overlays/toast/examples.mdx +0 -85
  274. package/components/overlays/toast/global-demo.tsx +0 -72
  275. package/components/overlays/toast/index.tsx +0 -544
  276. package/components/overlays/toast/manager.ts +0 -193
  277. package/components/overlays/tooltip/examples.mdx +0 -106
  278. package/components/overlays/tooltip/index.tsx +0 -539
  279. package/components/progress/examples.mdx +0 -59
  280. package/components/progress/index.tsx +0 -174
  281. package/components/progress/progress.css +0 -49
  282. package/components/progress/step-demo.tsx +0 -27
  283. package/components/table/examples.mdx +0 -188
  284. package/components/table/index.tsx +0 -535
  285. package/components/table/sort-demo.tsx +0 -61
  286. package/dist/components/avatar/index.d.ts +0 -46
  287. package/dist/components/avatar/index.js +0 -19
  288. package/dist/components/badge/variants.d.ts +0 -33
  289. package/dist/components/badge/variants.js +0 -10
  290. package/dist/components/button/variants.d.ts +0 -39
  291. package/dist/components/button/variants.js +0 -8
  292. package/dist/components/inputs/color-picker/variants.d.ts +0 -61
  293. package/dist/components/inputs/color-picker/variants.js +0 -28
  294. package/dist/components/inputs/field/index.d.ts +0 -116
  295. package/dist/components/inputs/field/index.js +0 -29
  296. package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
  297. package/dist/components/inputs/file-dropzone/index.js +0 -33
  298. package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
  299. package/dist/components/inputs/file-dropzone/variants.js +0 -12
  300. package/dist/components/inputs/label/index.d.ts +0 -32
  301. package/dist/components/inputs/label/index.js +0 -11
  302. package/dist/components/inputs/number-input/index.d.ts +0 -87
  303. package/dist/components/inputs/number-input/index.js +0 -21
  304. package/dist/components/inputs/select/variants.d.ts +0 -5
  305. package/dist/components/inputs/select/variants.js +0 -6
  306. package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
  307. package/dist/components/navigation/navigation-menu/index.js +0 -41
  308. package/dist/components/navigation/pagination/index.d.ts +0 -75
  309. package/dist/components/navigation/pagination/index.js +0 -41
  310. package/dist/components/navigation/sidebar/variants.d.ts +0 -25
  311. package/dist/components/navigation/sidebar/variants.js +0 -28
  312. package/dist/components/progress/index.d.ts +0 -56
  313. package/dist/components/progress/index.js +0 -15
  314. package/dist/docs/index.d.ts +0 -83
  315. package/dist/docs/index.js +0 -288
  316. package/dist/docs/vite.d.ts +0 -31
  317. package/dist/docs/vite.js +0 -45
  318. package/dist/lib/date-locale.d.ts +0 -26
  319. package/dist/lib/date-locale.js +0 -24
  320. package/dist/lib/field-classes.d.ts +0 -149
  321. package/dist/lib/field-classes.js +0 -41
  322. package/dist/lib/field-variants.d.ts +0 -47
  323. package/dist/lib/field-variants.js +0 -26
  324. package/dist/lib/fluid-hover-highlight.d.ts +0 -112
  325. package/dist/lib/fluid-hover-highlight.js +0 -17
  326. package/dist/lib/focus-ring.d.ts +0 -18
  327. package/dist/lib/focus-ring.js +0 -11
  328. package/dist/lib/goo-indicator.d.ts +0 -46
  329. package/dist/lib/goo-indicator.js +0 -14
  330. package/dist/lib/icon-context.d.ts +0 -30
  331. package/dist/lib/icon-context.js +0 -12
  332. package/dist/lib/inert.d.ts +0 -9
  333. package/dist/lib/inert.js +0 -8
  334. package/dist/lib/morph-layers.d.ts +0 -93
  335. package/dist/lib/morph-layers.js +0 -13
  336. package/dist/lib/morph-part.d.ts +0 -21
  337. package/dist/lib/morph-part.js +0 -12
  338. package/dist/lib/popup.d.ts +0 -20
  339. package/dist/lib/popup.js +0 -12
  340. package/dist/lib/reduced-motion.d.ts +0 -9
  341. package/dist/lib/reduced-motion.js +0 -6
  342. package/dist/lib/row-index.d.ts +0 -10
  343. package/dist/lib/row-index.js +0 -8
  344. package/dist/lib/row-order.d.ts +0 -28
  345. package/dist/lib/row-order.js +0 -10
  346. package/dist/lib/scroll-column.d.ts +0 -31
  347. package/dist/lib/scroll-column.js +0 -19
  348. package/dist/lib/shape-context.d.ts +0 -30
  349. package/dist/lib/shape-context.js +0 -13
  350. package/dist/lib/shape-radius.d.ts +0 -19
  351. package/dist/lib/shape-radius.js +0 -6
  352. package/dist/lib/size-context.d.ts +0 -94
  353. package/dist/lib/size-context.js +0 -20
  354. package/dist/lib/size-scale.d.ts +0 -79
  355. package/dist/lib/size-scale.js +0 -8
  356. package/dist/lib/slot.d.ts +0 -39
  357. package/dist/lib/slot.js +0 -14
  358. package/dist/lib/springs.d.ts +0 -44
  359. package/dist/lib/springs.js +0 -8
  360. package/dist/lib/surface-classes.d.ts +0 -19
  361. package/dist/lib/surface-classes.js +0 -10
  362. package/dist/lib/surface-context.d.ts +0 -9
  363. package/dist/lib/surface-context.js +0 -8
  364. package/dist/lib/use-controllable-state.d.ts +0 -2
  365. package/dist/lib/use-controllable-state.js +0 -6
  366. package/dist/lib/use-fluid-hover.d.ts +0 -138
  367. package/dist/lib/use-fluid-hover.js +0 -14
  368. package/dist/lib/use-is-mobile.d.ts +0 -2
  369. package/dist/lib/use-is-mobile.js +0 -6
  370. package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
  371. package/dist/lib/use-keyboard-nav-gate.js +0 -7
  372. package/dist/lib/use-merge-split.d.ts +0 -47
  373. package/dist/lib/use-merge-split.js +0 -15
  374. package/dist/lib/use-morph.d.ts +0 -101
  375. package/dist/lib/use-morph.js +0 -20
  376. package/dist/lib/use-touch-primary.d.ts +0 -2
  377. package/dist/lib/use-touch-primary.js +0 -6
  378. package/dist/lib/utils.d.ts +0 -3
  379. package/dist/lib/utils.js +0 -6
  380. package/dist/primitives/separator/index.d.ts +0 -25
  381. package/dist/primitives/separator/index.js +0 -9
  382. package/dist/primitives/skeleton/index.d.ts +0 -35
  383. package/dist/primitives/skeleton/index.js +0 -13
  384. package/dist/shared/components-124epb7f.js +0 -53
  385. package/dist/shared/components-1kab3j44.js +0 -337
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-34txk9rj.js +0 -35
  388. package/dist/shared/components-3h92d94m.js +0 -23
  389. package/dist/shared/components-4vfm04wq.js +0 -82
  390. package/dist/shared/components-54nq988h.js +0 -123
  391. package/dist/shared/components-7s7pykk5.js +0 -281
  392. package/dist/shared/components-7zkhz3r8.js +0 -399
  393. package/dist/shared/components-8v644a0s.js +0 -298
  394. package/dist/shared/components-a4evvq8h.js +0 -271
  395. package/dist/shared/components-adkarj8n.js +0 -35
  396. package/dist/shared/components-b1e239g3.js +0 -28
  397. package/dist/shared/components-b94t6qtj.js +0 -143
  398. package/dist/shared/components-c9yr4ed1.js +0 -44
  399. package/dist/shared/components-cwg1d0w6.js +0 -254
  400. package/dist/shared/components-d3shbwqq.js +0 -95
  401. package/dist/shared/components-dhgk6mbt.js +0 -16
  402. package/dist/shared/components-drxrtnp2.js +0 -25
  403. package/dist/shared/components-ej4r7wmj.js +0 -482
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-fejdzvqc.js +0 -448
  406. package/dist/shared/components-gx4h5rbb.js +0 -40
  407. package/dist/shared/components-gyt7my41.js +0 -328
  408. package/dist/shared/components-h6p86be3.js +0 -19
  409. package/dist/shared/components-h83az0bz.js +0 -33
  410. package/dist/shared/components-hdzrqqpx.js +0 -55
  411. package/dist/shared/components-krtx3m5b.js +0 -84
  412. package/dist/shared/components-kswxnm3h.js +0 -24
  413. package/dist/shared/components-mpa2y6x8.js +0 -277
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rpw4md2b.js +0 -179
  417. package/dist/shared/components-rtadhd9j.js +0 -64
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-xdqmt6ed.js +0 -20
  421. package/dist/shared/components-xjkdvnbg.js +0 -107
  422. package/dist/shared/components-z3v0n0de.js +0 -11
  423. package/dist/shared/components-z6dfqtyt.js +0 -1545
  424. package/dist/tokens/colors.css +0 -230
  425. package/dist/tokens/motion.css +0 -40
  426. package/dist/tokens/radius.css +0 -10
  427. package/dist/tokens/spacing.css +0 -9
  428. package/dist/tokens/typography.css +0 -119
  429. package/docs/chrome.css +0 -120
  430. package/docs/chrome.tsx +0 -283
  431. package/docs/index.ts +0 -9
  432. package/docs/vite.ts +0 -85
  433. package/index.ts +0 -60
  434. package/lib/date-locale.ts +0 -195
  435. package/lib/field-classes.ts +0 -121
  436. package/lib/field-variants.ts +0 -117
  437. package/lib/fluid-hover-highlight.tsx +0 -139
  438. package/lib/focus-ring.tsx +0 -46
  439. package/lib/goo-indicator.tsx +0 -261
  440. package/lib/icon-context.tsx +0 -310
  441. package/lib/inert.ts +0 -22
  442. package/lib/morph-layers.tsx +0 -102
  443. package/lib/morph-part.tsx +0 -49
  444. package/lib/popup.ts +0 -52
  445. package/lib/reduced-motion.ts +0 -19
  446. package/lib/row-index.tsx +0 -29
  447. package/lib/row-order.tsx +0 -126
  448. package/lib/scroll-column.tsx +0 -273
  449. package/lib/shape-context.tsx +0 -138
  450. package/lib/shape-radius.ts +0 -67
  451. package/lib/size-context.tsx +0 -66
  452. package/lib/size-scale.ts +0 -115
  453. package/lib/slot.ts +0 -115
  454. package/lib/springs.ts +0 -62
  455. package/lib/surface-classes.ts +0 -58
  456. package/lib/surface-context.tsx +0 -21
  457. package/lib/use-controllable-state.ts +0 -44
  458. package/lib/use-fluid-hover.ts +0 -541
  459. package/lib/use-is-mobile.ts +0 -25
  460. package/lib/use-keyboard-nav-gate.ts +0 -45
  461. package/lib/use-merge-split.tsx +0 -209
  462. package/lib/use-morph.ts +0 -557
  463. package/lib/use-touch-primary.tsx +0 -43
  464. package/lib/utils.ts +0 -37
  465. package/preset.ts +0 -199
  466. package/primitives/code/examples.mdx +0 -27
  467. package/primitives/code/index.tsx +0 -80
  468. package/primitives/craft/demos.tsx +0 -173
  469. package/primitives/craft/examples.mdx +0 -142
  470. package/primitives/craft/index.tsx +0 -76
  471. package/primitives/fluid-hover/examples.mdx +0 -84
  472. package/primitives/fluid-hover/index.tsx +0 -316
  473. package/primitives/morph/examples.mdx +0 -139
  474. package/primitives/morph/index.tsx +0 -192
  475. package/primitives/motion/examples.mdx +0 -100
  476. package/primitives/motion/index.tsx +0 -160
  477. package/primitives/scroll-area/examples.mdx +0 -58
  478. package/primitives/scroll-area/index.tsx +0 -204
  479. package/primitives/separator/examples.mdx +0 -30
  480. package/primitives/separator/index.tsx +0 -53
  481. package/primitives/sizes/examples.mdx +0 -167
  482. package/primitives/sizes/index.tsx +0 -89
  483. package/primitives/skeleton/examples.mdx +0 -51
  484. package/primitives/skeleton/index.tsx +0 -72
  485. package/primitives/skeleton/skeleton.css +0 -15
  486. package/primitives/surface/examples.mdx +0 -173
  487. package/primitives/surface/index.tsx +0 -109
  488. package/primitives/surface/surface.css +0 -176
  489. /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
  490. /package/dist/shared/{components-jcnjay5g.js → components-ezxhrmer.js} +0 -0
@@ -1,395 +0,0 @@
1
- // biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
2
- /*
3
- * Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
4
- * `registry/default/dropdown-search.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` dropped; `@/lib/*` imports rewritten to `../../../lib/*`.
8
- * - `filter` mode (local addition): `value` / `onValueChange` become optional
9
- * and, with `filter`, the field reads and writes the query the surrounding
10
- * panel holds (`DropdownFilterContext`), which filters the rows itself. The
11
- * controlled `value` + `onValueChange` API is untouched.
12
- * - Styling reads DS tokens (AGENTS.md styling): `duration-80|120|160` and
13
- * tier-length JS durations → `duration-<tier>` / `spring.*`.
14
- */
15
-
16
- import {
17
- createContext,
18
- forwardRef,
19
- type HTMLAttributes,
20
- type InputHTMLAttributes,
21
- type KeyboardEvent as ReactKeyboardEvent,
22
- type RefObject,
23
- useCallback,
24
- useContext,
25
- useEffect,
26
- useMemo,
27
- useRef,
28
- useState,
29
- } from 'react'
30
- import { useIcon } from '../../../lib/icon-context'
31
- import { useSize } from '../../../lib/size-context'
32
- import { SURFACE_BG } from '../../../lib/surface-classes'
33
- import { useSurface } from '../../../lib/surface-context'
34
- import { cn } from '../../../lib/utils'
35
-
36
- // ---------------------------------------------------------------------------
37
- // Search inside a dropdown menu.
38
- //
39
- // DropdownSearch is a text field pinned to the top of a DropdownContent popup.
40
- // It is controlled: the consumer filters the MenuItems it renders against
41
- // `value`, so the list can be re-indexed freely (fluid hover keys on the
42
- // indices of whatever is currently mounted). Two things make a field inside a
43
- // menu behave:
44
- //
45
- // 1. The menu primitive's typeahead must not steal keystrokes from the
46
- // field — every typing key stops propagating at the input.
47
- // 2. Typing while a ROW is focused must land in the field: the popup
48
- // hosts a capture-phase keydown handler (useDropdownSearchHost) that
49
- // refocuses the input and appends the character.
50
- //
51
- // Arrow keys leave the field for the list (first / last row), Enter picks
52
- // the first row, Escape closes the menu as usual. While the field has focus
53
- // the first row carries the hover background, so what Enter will pick is
54
- // always in view; it follows the query as the rows re-filter.
55
- //
56
- // Local addition — `filter`: the same field, with the query held by the
57
- // surrounding panel instead of the consumer. The panel then drops the rows
58
- // whose `label` doesn't match and re-indexes the survivors, which is exactly
59
- // the work the controlled form asks the consumer to do.
60
- // ---------------------------------------------------------------------------
61
-
62
- interface SearchHandle {
63
- input: HTMLInputElement | null
64
- append: (text: string) => void
65
- deleteBackward: () => void
66
- }
67
-
68
- interface DropdownSearchHostValue {
69
- register: (handle: SearchHandle) => () => void
70
- /** Whether the popup is open. Popups stay mounted through their exit
71
- * animation, so the field watches this rather than its own mount. */
72
- open: boolean
73
- /** Move the hover background to the first enabled row (what Enter picks). */
74
- highlightFirst: () => void
75
- }
76
-
77
- export const DropdownSearchHostContext = createContext<DropdownSearchHostValue | null>(null)
78
-
79
- /** Local addition. The query a filtering panel holds for its `filter` field. */
80
- export interface DropdownFilterContextValue {
81
- query: string
82
- setQuery: (query: string) => void
83
- }
84
-
85
- export const DropdownFilterContext = createContext<DropdownFilterContextValue | null>(null)
86
-
87
- const ROW_SELECTOR = [
88
- '[role="menuitem"]:not([aria-disabled="true"])',
89
- '[role="menuitemradio"]:not([aria-disabled="true"])',
90
- '[role="menuitemcheckbox"]:not([aria-disabled="true"])',
91
- ].join(', ')
92
-
93
- function menuRows(from: HTMLElement | null): HTMLElement[] {
94
- const menu = from?.closest<HTMLElement>('[role="menu"]')
95
- return menu ? Array.from(menu.querySelectorAll<HTMLElement>(ROW_SELECTOR)) : []
96
- }
97
-
98
- interface DropdownSearchHostOptions {
99
- /** The rows' container: where the first enabled row is looked up. */
100
- containerRef: RefObject<HTMLElement | null>
101
- /** The popup's fluid-hover setter, for the first-row highlight. */
102
- setActiveIndex: (index: number | null) => void
103
- }
104
-
105
- /**
106
- * Hosts a DropdownSearch inside a popup. Returns the context value to
107
- * provide, a capture-phase keydown handler for the popup element,
108
- * `hasSearch()` / `searchMounted` for decisions that depend on a field
109
- * being present, and the first-row highlight the field keeps while it has
110
- * focus (`isSearchField` / `highlightFirst`, for the popup's focus and
111
- * mouse-leave handlers).
112
- */
113
- export function useDropdownSearchHost(open: boolean, { containerRef, setActiveIndex }: DropdownSearchHostOptions) {
114
- const handleRef = useRef<SearchHandle | null>(null)
115
- // Reactive twin of the ref, for render-time decisions (the popup drops its
116
- // scroll fade while a field is pinned at the top).
117
- const [searchMounted, setSearchMounted] = useState(false)
118
-
119
- const register = useCallback((handle: SearchHandle) => {
120
- handleRef.current = handle
121
- setSearchMounted(true)
122
- return () => {
123
- if (handleRef.current === handle) {
124
- handleRef.current = null
125
- setSearchMounted(false)
126
- }
127
- }
128
- }, [])
129
-
130
- // The row Enter will pick carries the hover background while the field
131
- // has focus. Rows re-index from 0 on every filter, so this is looked up
132
- // in the DOM each time rather than remembered.
133
- const highlightFirst = useCallback(() => {
134
- const first = containerRef.current?.querySelector<HTMLElement>(ROW_SELECTOR)
135
- const index = first?.getAttribute('data-fluid-hover-index')
136
- setActiveIndex(index != null ? Number(index) : null)
137
- }, [containerRef, setActiveIndex])
138
-
139
- /** Whether `target` is the mounted search field. */
140
- const isSearchField = useCallback(
141
- (target: EventTarget | null) => target !== null && target === handleRef.current?.input,
142
- [],
143
- )
144
-
145
- const host = useMemo(() => ({ register, open, highlightFirst }), [register, open, highlightFirst])
146
-
147
- // Typing on a focused row: redirect the character (or Backspace) into the
148
- // field. Space is left alone — on a row it activates the item, which is
149
- // what a menu user expects once they have arrowed down.
150
- const onKeyDownCapture = useCallback((e: ReactKeyboardEvent<HTMLElement>) => {
151
- const handle = handleRef.current
152
- if (!handle?.input) return
153
- if (e.target === handle.input) return
154
- if (e.metaKey || e.ctrlKey || e.altKey) return
155
- if (e.key.length === 1 && e.key !== ' ') {
156
- e.preventDefault()
157
- e.stopPropagation()
158
- handle.input.focus()
159
- handle.append(e.key)
160
- } else if (e.key === 'Backspace') {
161
- e.preventDefault()
162
- e.stopPropagation()
163
- handle.input.focus()
164
- handle.deleteBackward()
165
- }
166
- }, [])
167
-
168
- /** Whether a search field is mounted in the popup right now. */
169
- const hasSearch = useCallback(() => handleRef.current !== null, [])
170
-
171
- return {
172
- host,
173
- hasSearch,
174
- searchMounted,
175
- onKeyDownCapture,
176
- isSearchField,
177
- highlightFirst,
178
- }
179
- }
180
-
181
- // ---------------------------------------------------------------------------
182
- // DropdownSearch
183
- // ---------------------------------------------------------------------------
184
-
185
- export interface DropdownSearchProps
186
- extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'size' | 'defaultValue'> {
187
- /** The query. Filter the MenuItems you render against it. Optional under `filter`, where the panel holds the query. */
188
- value?: string
189
- /** Called on every keystroke, and with `""` on close (see `clearOnClose`). Optional under `filter`. */
190
- onValueChange?: (value: string) => void
191
- /** Local addition. Let the surrounding panel hold the query and filter its own `Dropdown.Item` rows by `label`, re-indexing the survivors and showing `Dropdown.Empty` when none match. Defaults to `false`. */
192
- filter?: boolean
193
- /** Placeholder text. Defaults to `"Search…"`. */
194
- placeholder?: string
195
- /** Reset the query to "" when the popup closes (the field unmounts with
196
- * it), so the menu reopens unfiltered. @default true */
197
- clearOnClose?: boolean
198
- /** Take focus when the popup opens. @default true */
199
- autoFocus?: boolean
200
- }
201
-
202
- const DropdownSearch = forwardRef<HTMLInputElement, DropdownSearchProps>(
203
- (
204
- {
205
- value,
206
- onValueChange,
207
- filter = false,
208
- placeholder = 'Search…',
209
- clearOnClose = true,
210
- autoFocus = true,
211
- className,
212
- onKeyDown,
213
- ...props
214
- },
215
- ref,
216
- ) => {
217
- const SearchIcon = useIcon('search')
218
- const sizeClasses = useSize()
219
- const compact = sizeClasses.variant === 'compact'
220
- const host = useContext(DropdownSearchHostContext)
221
- // Outside a popup host (an inline panel) the field is simply open.
222
- const open = host?.open ?? true
223
- // `filter`: the panel is the source of truth, and the consumer's own
224
- // `onValueChange` (if any) still hears every keystroke.
225
- const panel = useContext(DropdownFilterContext)
226
- const managed = filter ? panel : null
227
- const query = managed ? managed.query : (value ?? '')
228
- const setQuery = useCallback(
229
- (next: string) => {
230
- managed?.setQuery(next)
231
- onValueChange?.(next)
232
- },
233
- [managed, onValueChange],
234
- )
235
- // The popup surface, painted explicitly: rows scroll underneath the sticky
236
- // field, and the field's parent is often a display:contents group (the
237
- // menu's radio group) that `bg-inherit` would resolve to transparent.
238
- const surface = useSurface()
239
- const inputRef = useRef<HTMLInputElement | null>(null)
240
-
241
- // Latest value / callback for the imperative handle and the unmount
242
- // cleanup, without re-registering on every keystroke.
243
- const valueRef = useRef(query)
244
- valueRef.current = query
245
- const onValueChangeRef = useRef(setQuery)
246
- onValueChangeRef.current = setQuery
247
- const clearOnCloseRef = useRef(clearOnClose)
248
- clearOnCloseRef.current = clearOnClose
249
-
250
- useEffect(() => {
251
- if (!host) return
252
- return host.register({
253
- get input() {
254
- return inputRef.current
255
- },
256
- append: text => onValueChangeRef.current(valueRef.current + text),
257
- deleteBackward: () => onValueChangeRef.current(valueRef.current.slice(0, -1)),
258
- })
259
- }, [host])
260
-
261
- // On every open (mount, or a reopen while the popup was still playing
262
- // its exit): reset the query so the list starts unfiltered, then take
263
- // focus. The popup's own initial focus (first row on a keyboard open,
264
- // the panel on a pointer open) is queued a frame after mount; the field
265
- // takes over one frame later so a menu with a search opens ready to type.
266
- useEffect(() => {
267
- if (!open) return
268
- if (clearOnCloseRef.current && valueRef.current !== '') {
269
- onValueChangeRef.current('')
270
- }
271
- if (!autoFocus) return
272
- let inner: number | undefined
273
- const outer = requestAnimationFrame(() => {
274
- inner = requestAnimationFrame(() => inputRef.current?.focus())
275
- })
276
- return () => {
277
- cancelAnimationFrame(outer)
278
- if (inner !== undefined) cancelAnimationFrame(inner)
279
- }
280
- }, [open, autoFocus])
281
-
282
- // The rows re-filter in the same commit as the query, so after it the
283
- // first enabled row is whatever Enter would pick now: highlight it while
284
- // the field has focus. (Focus arriving at the field is the popup's
285
- // onFocus; this covers the query moving under a focused field.)
286
- useEffect(() => {
287
- if (!host || document.activeElement !== inputRef.current) return
288
- host.highlightFirst()
289
- }, [host, query])
290
-
291
- // Unmount (the popup finished closing): reset the query so the next
292
- // open shows the full list.
293
- useEffect(
294
- () => () => {
295
- if (clearOnCloseRef.current && valueRef.current !== '') {
296
- onValueChangeRef.current('')
297
- }
298
- },
299
- [],
300
- )
301
-
302
- const handleKeyDown = (e: ReactKeyboardEvent<HTMLInputElement>) => {
303
- onKeyDown?.(e)
304
- if (e.defaultPrevented) return
305
- // Escape and Tab belong to the menu (close / leave). Everything else is
306
- // either typing, which the menu's typeahead must not see, or list
307
- // navigation handled right here.
308
- if (e.key === 'Escape' || e.key === 'Tab') return
309
- e.stopPropagation()
310
- if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
311
- const rows = menuRows(e.currentTarget)
312
- if (rows.length === 0) return
313
- e.preventDefault()
314
- ;(e.key === 'ArrowDown' ? rows[0] : rows[rows.length - 1])?.focus()
315
- } else if (e.key === 'Enter') {
316
- e.preventDefault()
317
- menuRows(e.currentTarget)[0]?.click()
318
- }
319
- }
320
-
321
- return (
322
- <div
323
- // Sticky at the top of the scrolling popup, bleeding into its 4px
324
- // padding so the divider runs edge to edge and rows scroll underneath
325
- // it; margin + the list gap put the first row 4px below the divider —
326
- // the same inset as the popup's side padding.
327
- className={cn(
328
- 'group/search sticky top-0 z-20 -mx-1 -mt-1 mb-0.5 flex shrink-0 items-center border-b border-border/60',
329
- SURFACE_BG[surface],
330
- sizeClasses.control,
331
- sizeClasses.gap,
332
- compact ? 'px-2.5' : 'px-3',
333
- className,
334
- )}
335
- >
336
- <SearchIcon
337
- size={sizeClasses.icon}
338
- strokeWidth={1.5}
339
- className="shrink-0 text-muted-foreground transition-[color,stroke-width] duration-fast group-focus-within/search:text-foreground group-focus-within/search:stroke-[2]"
340
- />
341
- <input
342
- ref={node => {
343
- inputRef.current = node
344
- if (typeof ref === 'function') ref(node)
345
- else if (ref) ref.current = node
346
- }}
347
- type="text"
348
- role="searchbox"
349
- autoComplete="off"
350
- autoCorrect="off"
351
- spellCheck={false}
352
- value={query}
353
- onChange={e => setQuery(e.target.value)}
354
- onKeyDown={handleKeyDown}
355
- placeholder={placeholder}
356
- // rounded-none: the site's base :focus-visible rule hands focused
357
- // elements the shape radius, and a text input clips its caret to
358
- // its own corners (pill mode nicks the caret at the left edge).
359
- className={cn(
360
- 'min-w-0 flex-1 rounded-none bg-transparent text-foreground placeholder:text-muted-foreground outline-none font-[inherit]',
361
- sizeClasses.text,
362
- // The line box: Safari runs the caret its full height, so the
363
- // ladder's leading keeps it in proportion to the row. (Chrome
364
- // sizes the caret to the font itself, whatever the leading.)
365
- compact ? 'leading-5' : 'leading-6',
366
- )}
367
- {...props}
368
- />
369
- </div>
370
- )
371
- },
372
- )
373
-
374
- DropdownSearch.displayName = 'DropdownSearch'
375
-
376
- // ---------------------------------------------------------------------------
377
- // DropdownEmpty — the "no results" row a filtered menu shows instead of items.
378
- // ---------------------------------------------------------------------------
379
-
380
- const DropdownEmpty = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => {
381
- const sizeClasses = useSize()
382
- return (
383
- <div
384
- ref={ref}
385
- role="status"
386
- aria-live="polite"
387
- className={cn('px-2 py-6 text-center text-muted-foreground', sizeClasses.text, className)}
388
- {...props}
389
- />
390
- )
391
- })
392
-
393
- DropdownEmpty.displayName = 'DropdownEmpty'
394
-
395
- export { DropdownEmpty, DropdownSearch }