@justanarthur/modo-ui 0.5.0 → 0.6.0-canary.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 (461) hide show
  1. package/DESIGN.md +608 -0
  2. package/README.md +61 -39
  3. package/blocks/sidebar-app/examples.mdx +33 -0
  4. package/blocks/sidebar-app/index.tsx +218 -0
  5. package/blocks/sidebar-app/inset-topbar.tsx +25 -0
  6. package/blocks/sidebar-app/menu-grid.ts +26 -0
  7. package/blocks/sidebar-app/nav-data.ts +36 -0
  8. package/blocks/sidebar-app/search-field.tsx +48 -0
  9. package/blocks/sidebar-app/user-footer.tsx +67 -0
  10. package/blocks/sidebar-app/workspace-header.tsx +129 -0
  11. package/components/AI/input-message/examples.mdx +124 -0
  12. package/components/AI/input-message/file-thumbnail.tsx +173 -0
  13. package/components/AI/input-message/index.tsx +1383 -0
  14. package/components/AI/thinking-indicator/examples.mdx +27 -0
  15. package/components/AI/thinking-indicator/index.tsx +210 -0
  16. package/components/accordion/examples.mdx +148 -0
  17. package/components/accordion/index.tsx +1034 -0
  18. package/components/avatar/examples.mdx +95 -0
  19. package/components/avatar/index.tsx +129 -0
  20. package/components/badge/change-demo.tsx +29 -0
  21. package/components/badge/examples.mdx +120 -0
  22. package/components/badge/index.tsx +225 -0
  23. package/components/badge/variants.ts +73 -0
  24. package/components/button/examples.mdx +164 -0
  25. package/components/button/index.tsx +416 -0
  26. package/components/button/loading-demo.tsx +25 -0
  27. package/components/button/variants.ts +166 -0
  28. package/components/card/examples.mdx +212 -0
  29. package/components/card/index.tsx +1037 -0
  30. package/components/copy/examples.mdx +87 -0
  31. package/components/copy/index.tsx +482 -0
  32. package/components/inputs/checkbox/examples.mdx +83 -0
  33. package/components/inputs/checkbox/index.tsx +611 -0
  34. package/components/inputs/checkbox/select-all-demo.tsx +48 -0
  35. package/components/inputs/color-picker/examples.mdx +72 -0
  36. package/components/inputs/color-picker/index.tsx +1955 -0
  37. package/components/inputs/color-picker/variants.ts +401 -0
  38. package/components/inputs/combobox/examples.mdx +273 -0
  39. package/components/inputs/combobox/index.tsx +1436 -0
  40. package/components/inputs/combobox/remote-demo.tsx +101 -0
  41. package/components/inputs/date-time/calendar/examples.mdx +34 -0
  42. package/components/inputs/date-time/calendar/index.tsx +351 -0
  43. package/components/inputs/date-time/calendar/use-month-window.ts +163 -0
  44. package/components/inputs/date-time/date-picker/examples.mdx +166 -0
  45. package/components/inputs/date-time/date-picker/index.tsx +385 -0
  46. package/components/inputs/date-time/date-picker/masked-date-input.tsx +336 -0
  47. package/components/inputs/date-time/date-range-picker/examples.mdx +29 -0
  48. package/components/inputs/date-time/date-range-picker/index.tsx +217 -0
  49. package/components/inputs/date-time/duration-picker/examples.mdx +16 -0
  50. package/components/inputs/date-time/duration-picker/index.tsx +189 -0
  51. package/components/inputs/date-time/month-picker/examples.mdx +16 -0
  52. package/components/inputs/date-time/month-picker/index.tsx +190 -0
  53. package/components/inputs/date-time/picker-shell.tsx +395 -0
  54. package/components/inputs/date-time/time-columns.tsx +91 -0
  55. package/components/inputs/date-time/time-picker/examples.mdx +26 -0
  56. package/components/inputs/date-time/time-picker/index.tsx +166 -0
  57. package/components/inputs/field/examples.mdx +113 -0
  58. package/components/inputs/field/index.tsx +267 -0
  59. package/components/inputs/file-dropzone/examples.mdx +73 -0
  60. package/components/inputs/file-dropzone/file-row.tsx +201 -0
  61. package/components/inputs/file-dropzone/index.tsx +296 -0
  62. package/components/inputs/file-dropzone/upload-demo.tsx +67 -0
  63. package/components/inputs/file-dropzone/variants.ts +94 -0
  64. package/components/inputs/input/examples.mdx +135 -0
  65. package/components/inputs/input/index.tsx +494 -0
  66. package/components/inputs/input/password-demo.tsx +30 -0
  67. package/components/inputs/label/examples.mdx +67 -0
  68. package/components/inputs/label/index.tsx +85 -0
  69. package/components/inputs/number-input/examples.mdx +56 -0
  70. package/components/inputs/number-input/index.tsx +214 -0
  71. package/components/inputs/radio/examples.mdx +77 -0
  72. package/components/inputs/radio/index.tsx +636 -0
  73. package/components/inputs/search/examples.mdx +74 -0
  74. package/components/inputs/search/index.tsx +333 -0
  75. package/components/inputs/select/examples.mdx +218 -0
  76. package/components/inputs/select/index.tsx +862 -0
  77. package/components/inputs/select/variants.ts +32 -0
  78. package/components/inputs/slider/examples.mdx +127 -0
  79. package/components/inputs/slider/index.tsx +1725 -0
  80. package/components/inputs/switch/examples.mdx +94 -0
  81. package/components/inputs/switch/index.tsx +504 -0
  82. package/components/inputs/textarea/examples.mdx +88 -0
  83. package/components/inputs/textarea/index.tsx +161 -0
  84. package/components/navigation/navigation-menu/examples.mdx +109 -0
  85. package/components/navigation/navigation-menu/index.tsx +613 -0
  86. package/components/navigation/pagination/examples.mdx +64 -0
  87. package/components/navigation/pagination/index.tsx +395 -0
  88. package/components/navigation/sidebar/examples.mdx +319 -0
  89. package/components/navigation/sidebar/index.tsx +453 -0
  90. package/components/navigation/sidebar/sidebar-core.tsx +1408 -0
  91. package/components/navigation/sidebar/sidebar-menu.tsx +1495 -0
  92. package/components/navigation/sidebar/sidebar.css +74 -0
  93. package/components/navigation/sidebar/variants.ts +55 -0
  94. package/components/navigation/tabs/examples.mdx +89 -0
  95. package/components/navigation/tabs/index.tsx +494 -0
  96. package/components/navigation/tabs-subtle/examples.mdx +49 -0
  97. package/components/navigation/tabs-subtle/index.tsx +512 -0
  98. package/components/overlays/alert-dialog/examples.mdx +123 -0
  99. package/components/overlays/alert-dialog/index.tsx +258 -0
  100. package/components/overlays/alert-dialog/pending-demo.tsx +36 -0
  101. package/components/overlays/command/examples.mdx +113 -0
  102. package/components/overlays/command/index.tsx +416 -0
  103. package/components/overlays/context-menu/examples.mdx +56 -0
  104. package/components/overlays/context-menu/index.tsx +279 -0
  105. package/components/overlays/dialog/examples.mdx +144 -0
  106. package/components/overlays/dialog/index.tsx +366 -0
  107. package/components/overlays/dropdown/dropdown-search.tsx +395 -0
  108. package/components/overlays/dropdown/examples.mdx +294 -0
  109. package/components/overlays/dropdown/index.tsx +1168 -0
  110. package/components/overlays/dropdown/menu-item.tsx +464 -0
  111. package/components/overlays/dropdown/menu-parts.tsx +660 -0
  112. package/components/overlays/popover/anchored-demo.tsx +59 -0
  113. package/components/overlays/popover/examples.mdx +180 -0
  114. package/components/overlays/popover/index.tsx +315 -0
  115. package/components/overlays/preview-card/examples.mdx +61 -0
  116. package/components/overlays/preview-card/index.tsx +204 -0
  117. package/components/overlays/sheet/examples.mdx +89 -0
  118. package/components/overlays/sheet/index.tsx +247 -0
  119. package/components/overlays/toast/examples.mdx +68 -0
  120. package/components/overlays/toast/global-demo.tsx +72 -0
  121. package/components/overlays/toast/index.tsx +474 -0
  122. package/components/overlays/toast/manager.ts +193 -0
  123. package/components/overlays/tooltip/examples.mdx +106 -0
  124. package/components/overlays/tooltip/index.tsx +519 -0
  125. package/components/progress/examples.mdx +59 -0
  126. package/components/progress/index.tsx +174 -0
  127. package/components/progress/progress.css +49 -0
  128. package/components/progress/step-demo.tsx +27 -0
  129. package/components/table/examples.mdx +184 -0
  130. package/components/table/index.tsx +510 -0
  131. package/components/table/sort-demo.tsx +61 -0
  132. package/dist/base.css +100 -0
  133. package/dist/blocks/sidebar-app/index.js +39 -26
  134. package/dist/components/AI/input-message/index.js +22 -16
  135. package/dist/components/AI/thinking-indicator/index.js +9 -6
  136. package/dist/components/accordion/index.js +16 -13
  137. package/dist/components/avatar/index.d.ts +46 -0
  138. package/dist/components/avatar/index.js +18 -0
  139. package/dist/components/badge/index.d.ts +18 -11
  140. package/dist/components/badge/index.js +11 -7
  141. package/dist/components/badge/variants.d.ts +33 -0
  142. package/dist/components/badge/variants.js +10 -0
  143. package/dist/components/button/index.d.ts +53 -17
  144. package/dist/components/button/index.js +10 -6
  145. package/dist/components/button/variants.d.ts +39 -0
  146. package/dist/components/button/variants.js +8 -0
  147. package/dist/components/card/index.d.ts +16 -3
  148. package/dist/components/card/index.js +16 -11
  149. package/dist/components/copy/index.js +13 -9
  150. package/dist/components/inputs/checkbox/index.d.ts +28 -9
  151. package/dist/components/inputs/checkbox/index.js +17 -13
  152. package/dist/components/inputs/color-picker/index.d.ts +13 -13
  153. package/dist/components/inputs/color-picker/index.js +25 -18
  154. package/dist/components/inputs/color-picker/variants.d.ts +61 -0
  155. package/dist/components/inputs/color-picker/variants.js +28 -0
  156. package/dist/components/inputs/combobox/index.d.ts +60 -17
  157. package/dist/components/inputs/combobox/index.js +26 -18
  158. package/dist/components/inputs/date-time/calendar/index.js +14 -11
  159. package/dist/components/inputs/date-time/date-picker/index.d.ts +53 -11
  160. package/dist/components/inputs/date-time/date-picker/index.js +33 -25
  161. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +3 -3
  162. package/dist/components/inputs/date-time/date-range-picker/index.js +32 -24
  163. package/dist/components/inputs/date-time/duration-picker/index.d.ts +3 -3
  164. package/dist/components/inputs/date-time/duration-picker/index.js +32 -24
  165. package/dist/components/inputs/date-time/month-picker/index.d.ts +3 -3
  166. package/dist/components/inputs/date-time/month-picker/index.js +31 -23
  167. package/dist/components/inputs/date-time/time-picker/index.d.ts +3 -3
  168. package/dist/components/inputs/date-time/time-picker/index.js +32 -24
  169. package/dist/components/inputs/field/index.d.ts +116 -0
  170. package/dist/components/inputs/field/index.js +28 -0
  171. package/dist/components/inputs/file-dropzone/index.d.ts +165 -0
  172. package/dist/components/inputs/file-dropzone/index.js +32 -0
  173. package/dist/components/inputs/file-dropzone/variants.d.ts +35 -0
  174. package/dist/components/inputs/file-dropzone/variants.js +12 -0
  175. package/dist/components/inputs/input/index.d.ts +95 -13
  176. package/dist/components/inputs/input/index.js +17 -9
  177. package/dist/components/inputs/label/index.d.ts +32 -0
  178. package/dist/components/inputs/label/index.js +11 -0
  179. package/dist/components/inputs/number-input/index.d.ts +84 -0
  180. package/dist/components/inputs/number-input/index.js +20 -0
  181. package/dist/components/inputs/radio/index.d.ts +20 -5
  182. package/dist/components/inputs/radio/index.js +15 -12
  183. package/dist/components/inputs/search/index.js +25 -18
  184. package/dist/components/inputs/select/index.d.ts +41 -11
  185. package/dist/components/inputs/select/index.js +27 -14
  186. package/dist/components/inputs/select/variants.d.ts +5 -0
  187. package/dist/components/inputs/select/variants.js +6 -0
  188. package/dist/components/inputs/slider/index.js +7 -5
  189. package/dist/components/inputs/switch/index.d.ts +8 -2
  190. package/dist/components/inputs/switch/index.js +14 -12
  191. package/dist/components/inputs/textarea/index.d.ts +4 -0
  192. package/dist/components/inputs/textarea/index.js +8 -6
  193. package/dist/components/navigation/navigation-menu/index.d.ts +114 -0
  194. package/dist/components/navigation/navigation-menu/index.js +40 -0
  195. package/dist/components/navigation/pagination/index.d.ts +73 -0
  196. package/dist/components/navigation/pagination/index.js +39 -0
  197. package/dist/components/navigation/sidebar/index.d.ts +44 -21
  198. package/dist/components/navigation/sidebar/index.js +41 -31
  199. package/dist/components/navigation/sidebar/variants.d.ts +25 -0
  200. package/dist/components/navigation/sidebar/variants.js +28 -0
  201. package/dist/components/navigation/tabs/index.d.ts +8 -2
  202. package/dist/components/navigation/tabs/index.js +14 -10
  203. package/dist/components/navigation/tabs-subtle/index.js +12 -10
  204. package/dist/components/overlays/alert-dialog/index.d.ts +121 -15
  205. package/dist/components/overlays/alert-dialog/index.js +22 -13
  206. package/dist/components/overlays/command/index.js +24 -17
  207. package/dist/components/overlays/context-menu/index.d.ts +33 -17
  208. package/dist/components/overlays/context-menu/index.js +27 -18
  209. package/dist/components/overlays/dialog/index.js +17 -12
  210. package/dist/components/overlays/dropdown/index.d.ts +257 -31
  211. package/dist/components/overlays/dropdown/index.js +42 -17
  212. package/dist/components/overlays/popover/index.d.ts +31 -9
  213. package/dist/components/overlays/popover/index.js +12 -9
  214. package/dist/components/overlays/preview-card/index.js +11 -8
  215. package/dist/components/overlays/sheet/index.js +18 -13
  216. package/dist/components/overlays/toast/index.d.ts +123 -47
  217. package/dist/components/overlays/toast/index.js +18 -10
  218. package/dist/components/overlays/tooltip/index.d.ts +113 -21
  219. package/dist/components/overlays/tooltip/index.js +15 -6
  220. package/dist/components/progress/index.d.ts +56 -0
  221. package/dist/components/progress/index.js +15 -0
  222. package/dist/components/table/index.d.ts +63 -8
  223. package/dist/components/table/index.js +19 -9
  224. package/dist/index.d.ts +2201 -736
  225. package/dist/index.js +223 -82
  226. package/dist/lib/date-locale.d.ts +14 -0
  227. package/dist/lib/date-locale.js +16 -0
  228. package/dist/lib/field-classes.d.ts +144 -0
  229. package/dist/lib/field-classes.js +40 -0
  230. package/dist/lib/field-variants.d.ts +47 -0
  231. package/dist/lib/field-variants.js +26 -0
  232. package/dist/lib/fluid-hover-highlight.d.ts +112 -0
  233. package/dist/lib/fluid-hover-highlight.js +17 -0
  234. package/dist/lib/focus-ring.d.ts +18 -0
  235. package/dist/lib/focus-ring.js +10 -0
  236. package/dist/lib/goo-indicator.d.ts +46 -0
  237. package/dist/lib/goo-indicator.js +14 -0
  238. package/dist/lib/icon-context.d.ts +30 -0
  239. package/dist/lib/icon-context.js +12 -0
  240. package/dist/lib/inert.d.ts +9 -0
  241. package/dist/lib/inert.js +8 -0
  242. package/dist/lib/morph-layers.d.ts +93 -0
  243. package/dist/lib/morph-layers.js +13 -0
  244. package/dist/lib/morph-part.d.ts +21 -0
  245. package/dist/lib/morph-part.js +12 -0
  246. package/dist/lib/popup.d.ts +20 -0
  247. package/dist/lib/popup.js +12 -0
  248. package/dist/lib/reduced-motion.d.ts +9 -0
  249. package/dist/lib/reduced-motion.js +6 -0
  250. package/dist/lib/row-index.d.ts +10 -0
  251. package/dist/lib/row-index.js +8 -0
  252. package/dist/lib/row-order.d.ts +28 -0
  253. package/dist/lib/row-order.js +10 -0
  254. package/dist/lib/scroll-column.d.ts +27 -0
  255. package/dist/lib/scroll-column.js +18 -0
  256. package/dist/lib/shape-context.d.ts +30 -0
  257. package/dist/lib/shape-context.js +12 -0
  258. package/dist/lib/size-context.d.ts +94 -0
  259. package/dist/lib/size-context.js +20 -0
  260. package/dist/lib/size-scale.d.ts +79 -0
  261. package/dist/lib/size-scale.js +8 -0
  262. package/dist/lib/slot.d.ts +12 -0
  263. package/dist/lib/slot.js +6 -0
  264. package/dist/lib/springs.d.ts +44 -0
  265. package/dist/lib/springs.js +8 -0
  266. package/dist/lib/surface-classes.d.ts +19 -0
  267. package/dist/lib/surface-classes.js +10 -0
  268. package/dist/lib/surface-context.d.ts +9 -0
  269. package/dist/lib/surface-context.js +8 -0
  270. package/dist/lib/use-controllable-state.d.ts +2 -0
  271. package/dist/lib/use-controllable-state.js +6 -0
  272. package/dist/lib/use-fluid-hover.d.ts +138 -0
  273. package/dist/lib/use-fluid-hover.js +14 -0
  274. package/dist/lib/use-is-mobile.d.ts +2 -0
  275. package/dist/lib/use-is-mobile.js +6 -0
  276. package/dist/lib/use-keyboard-nav-gate.d.ts +20 -0
  277. package/dist/lib/use-keyboard-nav-gate.js +7 -0
  278. package/dist/lib/use-merge-split.d.ts +47 -0
  279. package/dist/lib/use-merge-split.js +15 -0
  280. package/dist/lib/use-morph.d.ts +101 -0
  281. package/dist/lib/use-morph.js +20 -0
  282. package/dist/lib/use-touch-primary.d.ts +2 -0
  283. package/dist/lib/use-touch-primary.js +6 -0
  284. package/dist/lib/utils.d.ts +3 -0
  285. package/dist/lib/utils.js +6 -0
  286. package/dist/preset.d.ts +17 -0
  287. package/dist/preset.js +22 -2
  288. package/dist/primitives/code/index.js +7 -5
  289. package/dist/primitives/craft/index.js +9 -6
  290. package/dist/primitives/fluid-hover/index.js +9 -8
  291. package/dist/primitives/morph/index.js +15 -10
  292. package/dist/primitives/motion/index.js +10 -8
  293. package/dist/primitives/scroll-area/index.js +4 -3
  294. package/dist/primitives/separator/index.d.ts +25 -0
  295. package/dist/primitives/separator/index.js +9 -0
  296. package/dist/primitives/sizes/index.js +6 -4
  297. package/dist/primitives/skeleton/index.d.ts +35 -0
  298. package/dist/primitives/skeleton/index.js +12 -0
  299. package/dist/primitives/surface/index.js +6 -4
  300. package/dist/shared/{components-3mkepka5.js → components-0jmqhx2k.js} +28 -25
  301. package/dist/shared/components-124epb7f.js +53 -0
  302. package/dist/shared/{components-gz8zf3ec.js → components-1k0wv53d.js} +15 -43
  303. package/dist/shared/components-26snnbs9.js +322 -0
  304. package/dist/shared/{components-2dxkv6zm.js → components-2c0qcfx4.js} +8 -7
  305. package/dist/shared/{components-473g814w.js → components-2mt9te6d.js} +243 -137
  306. package/dist/shared/{components-hawvy2qz.js → components-2z48g4fp.js} +9 -30
  307. package/dist/shared/components-34txk9rj.js +35 -0
  308. package/dist/shared/components-3h92d94m.js +23 -0
  309. package/dist/shared/{components-zfnmn5d4.js → components-3sp623ae.js} +36 -31
  310. package/dist/shared/{components-jwst3vtj.js → components-3wxkjgqn.js} +186 -76
  311. package/dist/shared/{components-s2bz1xpk.js → components-49bsynbw.js} +8 -5
  312. package/dist/shared/components-4bwsd46w.js +71 -0
  313. package/dist/shared/components-4n4f5m3e.js +297 -0
  314. package/dist/shared/{components-0q0sqfh4.js → components-4y816hwp.js} +27 -49
  315. package/dist/shared/components-52ngsgca.js +399 -0
  316. package/dist/shared/{components-y9y0g8er.js → components-52r5763g.js} +22 -19
  317. package/dist/shared/components-559tf7yb.js +28 -0
  318. package/dist/shared/components-5mkga9hj.js +440 -0
  319. package/dist/shared/{components-kwa6mrf9.js → components-5s0nfqvw.js} +14 -9
  320. package/dist/shared/{components-dk0gjr5a.js → components-60atskhp.js} +19 -18
  321. package/dist/shared/{components-rr7a6ja9.js → components-658b26nb.js} +21 -18
  322. package/dist/shared/{components-xxvdw7k1.js → components-65vwfjs6.js} +37 -34
  323. package/dist/shared/{components-frw34b65.js → components-6j2fh74k.js} +114 -123
  324. package/dist/shared/components-6zg1yft7.js +167 -0
  325. package/dist/shared/components-6zng858q.js +53 -0
  326. package/dist/shared/components-72w4ge68.js +64 -0
  327. package/dist/shared/{components-cv16mryv.js → components-78x40gee.js} +13 -7
  328. package/dist/shared/{components-b2wyq2cq.js → components-7d4r7hh1.js} +39 -57
  329. package/dist/shared/components-7ntvvegr.js +316 -0
  330. package/dist/shared/components-8nwsqjn8.js +34 -0
  331. package/dist/shared/{components-5xc2j8jz.js → components-8tt3xbb5.js} +19 -18
  332. package/dist/shared/{components-vc7vq5nz.js → components-9as3rf68.js} +6 -3
  333. package/dist/shared/components-9mys9jna.js +255 -0
  334. package/dist/shared/components-adkarj8n.js +35 -0
  335. package/dist/shared/{components-b3c5et5b.js → components-ae9fncz4.js} +32 -31
  336. package/dist/shared/{components-hqeq3w9q.js → components-awra5sff.js} +24 -16
  337. package/dist/shared/components-b1e239g3.js +28 -0
  338. package/dist/shared/{components-q5xj5c16.js → components-b1f2bjf1.js} +9 -8
  339. package/dist/shared/{components-qmmjx1qw.js → components-bn42vq6d.js} +71 -72
  340. package/dist/shared/components-c96g82th.js +1444 -0
  341. package/dist/shared/components-c9yr4ed1.js +44 -0
  342. package/dist/shared/components-d3shbwqq.js +95 -0
  343. package/dist/shared/{components-jjw69c4c.js → components-dcc02hs2.js} +7 -4
  344. package/dist/shared/{components-men63rwj.js → components-de99ykt7.js} +3 -2
  345. package/dist/shared/components-dhgk6mbt.js +16 -0
  346. package/dist/shared/components-drxrtnp2.js +25 -0
  347. package/dist/shared/{components-6p8tfcd6.js → components-ds9fqat9.js} +21 -18
  348. package/dist/shared/{components-mjthm1kf.js → components-egy4tyjt.js} +11 -8
  349. package/dist/shared/components-f0xfpkhh.js +82 -0
  350. package/dist/shared/components-f7h57m6t.js +59 -0
  351. package/dist/shared/{components-d6xtjht3.js → components-fjkpbg6n.js} +33 -30
  352. package/dist/shared/{components-gc5vtq2f.js → components-gh0qeey3.js} +63 -29
  353. package/dist/shared/{components-39jq9va1.js → components-gvbapfen.js} +29 -24
  354. package/dist/shared/{components-5vgpnxgy.js → components-gzesg7hy.js} +19 -16
  355. package/dist/shared/components-h6p86be3.js +19 -0
  356. package/dist/shared/components-h83az0bz.js +33 -0
  357. package/dist/shared/components-jjrj6ymn.js +104 -0
  358. package/dist/shared/{components-wvp1m52g.js → components-jp5v0m0f.js} +15 -14
  359. package/dist/shared/{components-zrkzcayz.js → components-jqpefjsn.js} +54 -6
  360. package/dist/shared/{components-1z6tdadk.js → components-k74j4hwh.js} +20 -17
  361. package/dist/shared/components-kswxnm3h.js +24 -0
  362. package/dist/shared/{components-jbbmdr74.js → components-mkkbbgb7.js} +36 -17
  363. package/dist/shared/{components-pbmqctfa.js → components-mpw667rb.js} +169 -65
  364. package/dist/shared/{components-s5ngg32c.js → components-paa08427.js} +121 -47
  365. package/dist/shared/{components-vfbhxf5r.js → components-pd42emw3.js} +6 -5
  366. package/dist/shared/{components-hw9yk32z.js → components-pmfszv7a.js} +35 -23
  367. package/dist/shared/{components-chacnk61.js → components-pw06rbxq.js} +19 -19
  368. package/dist/shared/components-q03cktx8.js +246 -0
  369. package/dist/shared/{components-kvr7f9hy.js → components-qdm3yh26.js} +19 -10
  370. package/dist/shared/{components-27nnvrwe.js → components-qs4rkqsj.js} +15 -14
  371. package/dist/shared/{components-s083f38z.js → components-r6gbmkew.js} +22 -21
  372. package/dist/shared/{components-ta7shw28.js → components-r8eqs7gz.js} +4 -4
  373. package/dist/shared/{components-sn1rxx1d.js → components-rm02h9nt.js} +12 -11
  374. package/dist/shared/{components-c6s6b43g.js → components-rrbpmfx4.js} +3 -2
  375. package/dist/shared/{components-n7mjr357.js → components-tz1fv35x.js} +3 -2
  376. package/dist/shared/components-tz4gaf1v.js +23 -0
  377. package/dist/shared/{components-zx6b6yby.js → components-vf45j12c.js} +4 -18
  378. package/dist/shared/{components-3ky44908.js → components-vfjc9jzz.js} +2 -3
  379. package/dist/shared/{components-39vmfq9s.js → components-vsa625vk.js} +21 -20
  380. package/dist/shared/components-wawnmkph.js +500 -0
  381. package/dist/shared/components-wktrrb4m.js +38 -0
  382. package/dist/shared/{components-8snj490h.js → components-wwd363me.js} +78 -32
  383. package/dist/shared/{components-5pnw8183.js → components-xcwvgcrd.js} +23 -22
  384. package/dist/shared/components-xdqmt6ed.js +20 -0
  385. package/dist/shared/{components-h2ajmhwn.js → components-y1w3a6wx.js} +107 -35
  386. package/dist/shared/{components-ar66gnt0.js → components-y6578b8h.js} +37 -34
  387. package/dist/shared/{components-59efxjd9.js → components-yhgq0qxx.js} +13 -12
  388. package/dist/shared/{components-jthe1pwb.js → components-yz84gpkq.js} +101 -404
  389. package/dist/shared/components-z3v0n0de.js +11 -0
  390. package/dist/shared/{components-7r3etddy.js → components-z9n19fyk.js} +19 -54
  391. package/dist/shared/components-zbvjzh1p.js +141 -0
  392. package/dist/styles.css +241 -16
  393. package/dist/tailwind.css +13 -0
  394. package/dist/tokens.css +34 -0
  395. package/index.ts +60 -0
  396. package/lib/date-locale.ts +50 -0
  397. package/lib/field-classes.ts +115 -0
  398. package/lib/field-variants.ts +117 -0
  399. package/lib/fluid-hover-highlight.tsx +139 -0
  400. package/lib/focus-ring.tsx +46 -0
  401. package/lib/goo-indicator.tsx +261 -0
  402. package/lib/icon-context.tsx +310 -0
  403. package/lib/inert.ts +22 -0
  404. package/lib/morph-layers.tsx +102 -0
  405. package/lib/morph-part.tsx +49 -0
  406. package/lib/popup.ts +52 -0
  407. package/lib/reduced-motion.ts +19 -0
  408. package/lib/row-index.tsx +29 -0
  409. package/lib/row-order.tsx +115 -0
  410. package/lib/scroll-column.tsx +244 -0
  411. package/lib/shape-context.tsx +124 -0
  412. package/lib/size-context.tsx +66 -0
  413. package/lib/size-scale.ts +115 -0
  414. package/lib/slot.ts +25 -0
  415. package/lib/springs.ts +62 -0
  416. package/lib/surface-classes.ts +58 -0
  417. package/lib/surface-context.tsx +21 -0
  418. package/lib/use-controllable-state.ts +44 -0
  419. package/lib/use-fluid-hover.ts +541 -0
  420. package/lib/use-is-mobile.ts +25 -0
  421. package/lib/use-keyboard-nav-gate.ts +45 -0
  422. package/lib/use-merge-split.tsx +209 -0
  423. package/lib/use-morph.ts +557 -0
  424. package/lib/use-touch-primary.tsx +43 -0
  425. package/lib/utils.ts +37 -0
  426. package/package.json +177 -4
  427. package/preset.ts +196 -0
  428. package/primitives/code/examples.mdx +27 -0
  429. package/primitives/code/index.tsx +80 -0
  430. package/primitives/craft/demos.tsx +173 -0
  431. package/primitives/craft/examples.mdx +138 -0
  432. package/primitives/craft/index.tsx +76 -0
  433. package/primitives/fluid-hover/examples.mdx +84 -0
  434. package/primitives/fluid-hover/index.tsx +316 -0
  435. package/primitives/morph/examples.mdx +135 -0
  436. package/primitives/morph/index.tsx +192 -0
  437. package/primitives/motion/examples.mdx +100 -0
  438. package/primitives/motion/index.tsx +160 -0
  439. package/primitives/scroll-area/examples.mdx +58 -0
  440. package/primitives/scroll-area/index.tsx +200 -0
  441. package/primitives/separator/examples.mdx +30 -0
  442. package/primitives/separator/index.tsx +53 -0
  443. package/primitives/sizes/examples.mdx +167 -0
  444. package/primitives/sizes/index.tsx +89 -0
  445. package/primitives/skeleton/examples.mdx +51 -0
  446. package/primitives/skeleton/index.tsx +72 -0
  447. package/primitives/skeleton/skeleton.css +15 -0
  448. package/primitives/surface/examples.mdx +173 -0
  449. package/primitives/surface/index.tsx +109 -0
  450. package/primitives/surface/surface.css +176 -0
  451. package/dist/shared/components-0sn7ypjw.js +0 -61
  452. package/dist/shared/components-1434p1mh.js +0 -123
  453. package/dist/shared/components-a86dytt0.js +0 -986
  454. package/dist/shared/components-gf5s6ap9.js +0 -42
  455. package/dist/shared/components-hyq23phv.js +0 -310
  456. package/dist/shared/components-ng72k97e.js +0 -128
  457. package/dist/shared/components-raknhppb.js +0 -64
  458. package/dist/shared/components-vynjtrk6.js +0 -19
  459. package/dist/shared/components-wy9jpqny.js +0 -146
  460. /package/dist/shared/{components-1v7rxytx.js → components-3ey0hzpb.js} +0 -0
  461. /package/dist/shared/{components-ezxhrmer.js → components-jcnjay5g.js} +0 -0
@@ -0,0 +1,116 @@
1
+ import { ForwardRefExoticComponent, HTMLAttributes, ReactElement, ReactNode, RefAttributes } from "react";
2
+ type SizeVariant = "default" | "compact";
3
+ import { JSX as JSX_1kxb } from "react";
4
+ /** When native validity is checked. */
5
+ type FieldValidationMode = "onSubmit" | "onBlur" | "onChange";
6
+ interface FieldProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
7
+ /** The field's parts: `Field.Label`, a control, `Field.Description`, `Field.Error`. */
8
+ children?: ReactNode;
9
+ /** Marks the value invalid: the label and the control turn destructive and the control sets `aria-invalid`. Set it from your validation (a form library's field state). Defaults to `false`. */
10
+ invalid?: boolean;
11
+ /** Disables the control and dims the field. Defaults to `false`. */
12
+ disabled?: boolean;
13
+ /** Shows the value without letting it change (Input, NumberInput and FileDropzone read it). Defaults to `false`. */
14
+ readOnly?: boolean;
15
+ /** Marks the control required and the label with an asterisk. Defaults to `false`. */
16
+ required?: boolean;
17
+ /** Names the value when the form is submitted; wins over the control's own `name`. */
18
+ name?: string;
19
+ /** Whether the value differs from its initial one, for a form library that tracks it (sets `data-dirty`). */
20
+ dirty?: boolean;
21
+ /** Whether the control has been visited, for a form library that tracks it (sets `data-touched`). */
22
+ touched?: boolean;
23
+ /** When Base UI checks the control's native validity (`required`, `pattern`, `type`): on form submit, on blur, or on every change. A failure turns the field destructive and an empty `Field.Error` shows the browser's message. Defaults to `"onSubmit"`. */
24
+ validationMode?: FieldValidationMode;
25
+ /** Pins the field and its control to one step of the size ladder (36px default, 28px compact). Defaults to the surrounding SizeProvider. */
26
+ size?: SizeVariant;
27
+ /** Classes for the root. */
28
+ className?: string;
29
+ }
30
+ interface FieldLabelProps {
31
+ /** Label text. */
32
+ children: ReactNode;
33
+ /** Keep the label for assistive tech but don't render it, for a field whose placeholder or context carries the meaning. Defaults to `false`. */
34
+ visuallyHidden?: boolean;
35
+ /** Classes for the label. */
36
+ className?: string;
37
+ }
38
+ type Element_12xgc = JSX_1kxb["Element"];
39
+ declare function FieldLabel({ children, visuallyHidden, className }: FieldLabelProps): Element_12xgc;
40
+ interface FieldDescriptionProps {
41
+ /** Help text under the control: a format, a limit, what the value is for. */
42
+ children: ReactNode;
43
+ /** Classes for the description. */
44
+ className?: string;
45
+ }
46
+ declare function FieldDescription({ children, className }: FieldDescriptionProps): Element_12xgc;
47
+ /** Which native validity state shows the message (`"valueMissing"`, `"typeMismatch"`, …). */
48
+ type FieldErrorMatch = boolean | keyof ValidityState;
49
+ interface FieldErrorProps {
50
+ /** The message. While it has one, it shows; empty, it hides. */
51
+ children?: ReactNode;
52
+ /** Overrides when it shows: `true` always, `false` never, or a native validity state such as `"valueMissing"`. Defaults to showing while it has a message. */
53
+ match?: FieldErrorMatch;
54
+ /** Classes for the message. */
55
+ className?: string;
56
+ }
57
+ declare function FieldError({ children, match, className }: FieldErrorProps): Element_12xgc;
58
+ interface FieldControlProps {
59
+ /** The element that becomes the control, e.g. a native `<select>` or a third-party input. */
60
+ render?: ReactElement;
61
+ /** Compose onto the single child instead. Defaults to `false`. */
62
+ asChild?: boolean;
63
+ /** The control, with `asChild`. */
64
+ children?: ReactNode;
65
+ }
66
+ declare function FieldControl({ render, asChild, children }: FieldControlProps): Element_12xgc;
67
+ type FieldComponent = ForwardRefExoticComponent<FieldProps & RefAttributes<HTMLDivElement>> & {
68
+ Label: typeof FieldLabel;
69
+ Description: typeof FieldDescription;
70
+ Error: typeof FieldError;
71
+ Control: typeof FieldControl;
72
+ };
73
+ /**
74
+ * A labelled form field: a label above the control, help text and an error
75
+ * message below it, all linked for assistive tech.
76
+ *
77
+ * Put an Input, Textarea, NumberInput, FileDropzone, Select or any other
78
+ * field control inside and it joins on its own: the label targets it, the
79
+ * description and error are read with it, and the field hands it its
80
+ * `invalid`, `disabled`, `readOnly` and `required` state, so the box turns
81
+ * destructive with the label. The label and messages sit inset to line up
82
+ * with the text in the box. The field holds no validation of its own:
83
+ * `invalid` and the error's message come from yours (a form library's field
84
+ * state, a server response), and `Field.Error` shows while it has a message.
85
+ * A native failure (`required`, `pattern`, `type="email"`) caught by Base UI's
86
+ * validation turns it destructive too, and an empty `Field.Error` then shows
87
+ * the browser's message.
88
+ * Behavior comes from Base UI's Field.
89
+ *
90
+ * `size` pins the field and its control to one step of the size ladder;
91
+ * without it they follow the surrounding SizeProvider, which is how to set a
92
+ * form's density when a control's own props keep the native `<input size>`
93
+ * attribute (a character width, not a height). `Field.Control` passes a
94
+ * native `size` through to the element untouched.
95
+ *
96
+ * InputGroup.Field is the preset for a group of text fields: a label and an
97
+ * error string, and the group's hover gliding from field to field. Reach for
98
+ * Field when a field stands alone, needs a description, or holds a control
99
+ * other than a text input.
100
+ *
101
+ * Statics:
102
+ * - `Field.Label` — the label, weight-stable and muted; destructive while
103
+ * the field is invalid, with an asterisk while it is required:
104
+ * `visuallyHidden`.
105
+ * - `Field.Description` — muted help text under the control.
106
+ * - `Field.Error` — the destructive message; it fades in while it has
107
+ * children: `match` (`true`, `false`, or a native validity state).
108
+ * - `Field.Control` — wires a control that isn't a field control (a native
109
+ * element, a third-party input) with the field's id, `aria-describedby`
110
+ * and `aria-invalid`: `render={<select/>}` or `asChild`. Field controls
111
+ * (Input, NumberInput, …) need no wrapper.
112
+ *
113
+ * @example {@include ./examples.mdx}
114
+ */
115
+ declare const Field: FieldComponent;
116
+ export { Field, FieldControl, FieldControlProps, FieldDescription, FieldDescriptionProps, FieldError, FieldErrorMatch, FieldErrorProps, FieldLabel, FieldLabelProps, FieldProps, FieldValidationMode, Field as default };
@@ -0,0 +1,28 @@
1
+ import {
2
+ FieldLabel2,
3
+ FieldDescription2,
4
+ FieldError2,
5
+ FieldControl2,
6
+ Field2,
7
+ field_default
8
+ } from "../../../shared/components-jjrj6ymn.js";
9
+ import"../../../shared/components-y1w3a6wx.js";
10
+ import"../../../shared/components-adkarj8n.js";
11
+ import"../../../shared/components-6zng858q.js";
12
+ import"../../../shared/components-124epb7f.js";
13
+ import"../../../shared/components-vfjc9jzz.js";
14
+ import"../../../shared/components-yhgq0qxx.js";
15
+ import"../../../shared/components-dcc02hs2.js";
16
+ import"../../../shared/components-tz1fv35x.js";
17
+ import"../../../shared/components-h83az0bz.js";
18
+ import"../../../shared/components-34txk9rj.js";
19
+ import"../../../shared/components-78x40gee.js";
20
+ import"../../../shared/components-jcnjay5g.js";
21
+ export {
22
+ Field2 as Field,
23
+ FieldControl2 as FieldControl,
24
+ FieldDescription2 as FieldDescription,
25
+ FieldError2 as FieldError,
26
+ FieldLabel2 as FieldLabel,
27
+ field_default as default
28
+ };
@@ -0,0 +1,165 @@
1
+ import { ForwardRefExoticComponent, ReactNode as ReactNode3, RefAttributes } from "react";
2
+ import { ComponentType } from "react";
3
+ interface IconComponentProps {
4
+ size?: number | string;
5
+ strokeWidth?: number | string;
6
+ className?: string;
7
+ }
8
+ type IconComponent = ComponentType<IconComponentProps>;
9
+ type SizeVariant = "default" | "compact";
10
+ import { ReactNode as ReactNode2 } from "react";
11
+ import { JSX as JSX_1kxb2 } from "react";
12
+ /** Where a file is in its upload: `idle` (picked), `uploading`, `done` or `error`. */
13
+ type FileRowStatus = "idle" | "uploading" | "done" | "error";
14
+ interface FileRowProps {
15
+ /** The picked file: its name, size and type fill the row. */
16
+ file?: File;
17
+ /** File name, for a file you only know by its metadata (one already uploaded). Wins over `file`. */
18
+ name?: string;
19
+ /** File size in bytes. Wins over `file`. */
20
+ fileSize?: number;
21
+ /** MIME type; an image shows the image glyph. Wins over `file`. */
22
+ type?: string;
23
+ /** Image URL shown in place of the glyph, e.g. an object URL of the file or the server's preview. */
24
+ thumbnail?: string;
25
+ /** Glyph in place of the file or image one. */
26
+ icon?: IconComponent;
27
+ /** Where the file is in its upload; sets the status glyph and the progress bar. Defaults to `"idle"`. */
28
+ status?: FileRowStatus;
29
+ /** Upload progress from 0 to 100, shown as a bar while `status` is `"uploading"` (see Progress). Omitted, the bar sweeps. */
30
+ progress?: number;
31
+ /** Accessible name of the upload's bar. Defaults to `"Uploading"`. */
32
+ uploadingLabel?: string;
33
+ /** The line under the name in place of the size, e.g. "Uploaded 2 min ago". */
34
+ description?: ReactNode2;
35
+ /** An error message in place of the size line; the row reads as failed. */
36
+ error?: ReactNode2;
37
+ /** Shows a remove button and is called when it is pressed. */
38
+ onRemove?: () => void;
39
+ /** Accessible name of the remove button. Defaults to `"Remove file"`. */
40
+ removeLabel?: string;
41
+ /** More controls before the remove button, e.g. a download link or a menu. */
42
+ actions?: ReactNode2;
43
+ /** Locale for the size (`1,5 MB` in `"sk-SK"`). Defaults to the browser's. */
44
+ locale?: Intl.LocalesArgument;
45
+ /** Dims the row and its actions. Defaults to `false`. */
46
+ disabled?: boolean;
47
+ /** Pins the row to one step of the size ladder. Defaults to the surrounding SizeProvider. */
48
+ size?: SizeVariant;
49
+ /** Classes for the row. */
50
+ className?: string;
51
+ }
52
+ type Element_12xgc2 = JSX_1kxb2["Element"];
53
+ /** One file in a list: its glyph or thumbnail, name, size or status, and a remove button. */
54
+ declare function FileRow({ file, name: nameProp, fileSize: fileSizeProp, type: typeProp, thumbnail, icon, status, progress, description, error, onRemove, removeLabel, uploadingLabel, actions, locale, disabled, size: sizeProp, className }: FileRowProps): Element_12xgc2;
55
+ /** A byte count as a short localized size: `512 B`, `1.5 MB` (decimal units, as file managers show them). */
56
+ declare function formatFileSize(bytes: number, locale?: Intl.LocalesArgument): string;
57
+ /** Why a file was turned away: its `type` is not in `accept`, its `size` is over `maxSize`, or it is past the `count` of `maxFiles`. */
58
+ type FileRejectionReason = "type" | "size" | "count";
59
+ /** A file the dropzone turned away, and why. */
60
+ interface FileRejection {
61
+ file: File;
62
+ reason: FileRejectionReason;
63
+ }
64
+ /** Whether a file passes an `accept` list (`.pdf,image/*`), as the native file input reads it. */
65
+ declare function acceptsFile(file: {
66
+ name: string;
67
+ type: string;
68
+ }, accept?: string): boolean;
69
+ /** What a drag over the zone will come to: every file taken, some taken and some turned away, or none taken. */
70
+ type DragVerdict = "accept" | "partial" | "reject";
71
+ /**
72
+ * Judges dragged files while they are still in the air. A drag shows MIME
73
+ * types but no names, so a type the drag leaves empty, or an `accept` list
74
+ * with extensions, counts as passing until the drop sorts the files. `limit`
75
+ * is how many one drop may add.
76
+ */
77
+ declare function dragVerdict(types: string[], accept: string | undefined, limit: number): DragVerdict;
78
+ interface SortOptions {
79
+ accept?: string;
80
+ maxSize?: number;
81
+ maxFiles?: number;
82
+ multiple?: boolean;
83
+ }
84
+ /** Splits picked or dropped files into the ones that pass `accept`, `maxSize` and the count, and the rest with a reason. */
85
+ declare function sortFiles(files: File[], { accept, maxSize, maxFiles, multiple }: SortOptions): {
86
+ accepted: File[];
87
+ rejected: FileRejection[];
88
+ };
89
+ interface FileDropzoneProps {
90
+ /** Called with the files that pass `accept`, `maxSize` and the count, after a pick or a drop. */
91
+ onFilesChange?: (files: File[]) => void;
92
+ /** Called with the files turned away and why (`type`, `size`, `count`), after a pick or a drop. */
93
+ onFilesRejected?: (rejections: FileRejection[]) => void;
94
+ /** File types the zone takes, as the file input reads them: `.pdf,image/*`. Defaults to any. */
95
+ accept?: string;
96
+ /** Takes several files at once. Defaults to `false`. */
97
+ multiple?: boolean;
98
+ /** Most files one pick or drop may add; the rest are rejected as `count`. Pass what is left when you keep a list. */
99
+ maxFiles?: number;
100
+ /** Largest file in bytes; bigger ones are rejected as `size`. */
101
+ maxSize?: number;
102
+ /** The main line. Defaults to `"Drop a file here or click to browse"` (`"files"` with `multiple`). */
103
+ label?: ReactNode3;
104
+ /** The line under it: the types and sizes the zone takes, e.g. "PDF or PNG, up to 10 MB". */
105
+ description?: ReactNode3;
106
+ /** The main line while files the zone takes are dragged over it. Defaults to `"Drop to add"`. */
107
+ activeLabel?: ReactNode3;
108
+ /** The main line while some of the dragged files will be taken and the rest turned away (a wrong type, past `maxFiles`). Defaults to `"Some files will be skipped"`. */
109
+ partialLabel?: ReactNode3;
110
+ /** The main line while none of the dragged files can be taken; the drop is refused. Defaults to `"These files can't be added"`. */
111
+ rejectLabel?: ReactNode3;
112
+ /** Glyph above the labels. Defaults to the `upload` icon. */
113
+ icon?: IconComponent;
114
+ /** Content in place of the glyph and labels. */
115
+ children?: ReactNode3;
116
+ /** Id of the file input, for a `Label`'s `htmlFor`. Inside a Field it is wired for you. */
117
+ id?: string;
118
+ /** Tells assistive tech a file is required (`aria-required`). The zone keeps no files, so native validation never blocks a submit: check your own list. Defaults to the surrounding Field's `required`. */
119
+ required?: boolean;
120
+ /** Turns the zone destructive. Defaults to the surrounding Field's `invalid`. */
121
+ invalid?: boolean;
122
+ /** Dims the zone and turns files away. Defaults to the surrounding Field's `disabled`. */
123
+ disabled?: boolean;
124
+ /** Shows the zone without taking files: no browse, no drop, no hover. Defaults to the surrounding Field's `readOnly`. */
125
+ readOnly?: boolean;
126
+ /** Pins the zone to one step of the size ladder: compact tightens the padding and steps the text down. Defaults to the surrounding SizeProvider. */
127
+ size?: SizeVariant;
128
+ /** Classes for the zone. */
129
+ className?: string;
130
+ }
131
+ type FileDropzoneComponent = ForwardRefExoticComponent<FileDropzoneProps & RefAttributes<HTMLInputElement>> & {
132
+ Row: typeof FileRow;
133
+ };
134
+ /**
135
+ * A zone to drop files on, or click to pick them.
136
+ *
137
+ * Drag files over it and it lights up; the line changes to say whether it
138
+ * will take them, reading their types while they are still in the air: all
139
+ * of them, some (the rest will be skipped), or none, when it turns
140
+ * destructive and refuses the drop. Dropped or picked files are sorted
141
+ * against `accept`, `maxSize` and `maxFiles`: the ones that pass go to
142
+ * `onFilesChange`, the rest to `onFilesRejected` with a reason. The zone
143
+ * keeps none (its input is cleared after every pick, so nothing submits with
144
+ * a native form and `required` is only announced), so the list, the upload
145
+ * and its errors stay yours. Show each
146
+ * file in a `FileDropzone.Row`. Every line is a prop, for translation. The
147
+ * zone is a label around a hidden file input, so a click or Enter opens the
148
+ * picker, and inside a Field it is labelled and takes the field's state. The
149
+ * ref reaches the input: `ref.current.click()` reopens the picker, e.g. to
150
+ * replace a file.
151
+ *
152
+ * Statics:
153
+ * - `FileDropzone.Row` (also `FileRow`) — one file: its glyph or
154
+ * `thumbnail`, name, size, and a remove button with `onRemove`: `file` (or
155
+ * `name` / `fileSize` / `type`), `status` (`idle`, `uploading`, `done`,
156
+ * `error`), `progress` (0–100), `error`, `description`, `actions`,
157
+ * `removeLabel`, `locale`.
158
+ *
159
+ * Also exported from this item: `formatFileSize(bytes, locale)`, `sortFiles`
160
+ * and `acceptsFile`, plain functions a server can call too.
161
+ *
162
+ * @example {@include ./examples.mdx}
163
+ */
164
+ declare const FileDropzone: FileDropzoneComponent;
165
+ export { DragVerdict, FileDropzone, FileDropzoneProps, FileRejection, FileRejectionReason, FileRow, FileRowProps, FileRowStatus, acceptsFile, FileDropzone as default, dragVerdict, formatFileSize, sortFiles };
@@ -0,0 +1,32 @@
1
+ import {
2
+ FileRow2,
3
+ FileDropzone2,
4
+ file_dropzone_default
5
+ } from "../../../shared/components-7ntvvegr.js";
6
+ import {
7
+ formatFileSize2,
8
+ acceptsFile2,
9
+ dragVerdict2,
10
+ sortFiles2
11
+ } from "../../../shared/components-f7h57m6t.js";
12
+ import"../../../shared/components-6zng858q.js";
13
+ import"../../../shared/components-124epb7f.js";
14
+ import"../../../shared/components-d3shbwqq.js";
15
+ import"../../../shared/components-jqpefjsn.js";
16
+ import"../../../shared/components-7d4r7hh1.js";
17
+ import"../../../shared/components-f0xfpkhh.js";
18
+ import"../../../shared/components-de99ykt7.js";
19
+ import"../../../shared/components-3ey0hzpb.js";
20
+ import"../../../shared/components-h83az0bz.js";
21
+ import"../../../shared/components-34txk9rj.js";
22
+ import"../../../shared/components-78x40gee.js";
23
+ import"../../../shared/components-jcnjay5g.js";
24
+ export {
25
+ FileDropzone2 as FileDropzone,
26
+ FileRow2 as FileRow,
27
+ acceptsFile2 as acceptsFile,
28
+ file_dropzone_default as default,
29
+ dragVerdict2 as dragVerdict,
30
+ formatFileSize2 as formatFileSize,
31
+ sortFiles2 as sortFiles
32
+ };
@@ -0,0 +1,35 @@
1
+ /** A byte count as a short localized size: `512 B`, `1.5 MB` (decimal units, as file managers show them). */
2
+ declare function formatFileSize(bytes: number, locale?: Intl.LocalesArgument): string;
3
+ /** Why a file was turned away: its `type` is not in `accept`, its `size` is over `maxSize`, or it is past the `count` of `maxFiles`. */
4
+ type FileRejectionReason = "type" | "size" | "count";
5
+ /** A file the dropzone turned away, and why. */
6
+ interface FileRejection {
7
+ file: File;
8
+ reason: FileRejectionReason;
9
+ }
10
+ /** Whether a file passes an `accept` list (`.pdf,image/*`), as the native file input reads it. */
11
+ declare function acceptsFile(file: {
12
+ name: string;
13
+ type: string;
14
+ }, accept?: string): boolean;
15
+ /** What a drag over the zone will come to: every file taken, some taken and some turned away, or none taken. */
16
+ type DragVerdict = "accept" | "partial" | "reject";
17
+ /**
18
+ * Judges dragged files while they are still in the air. A drag shows MIME
19
+ * types but no names, so a type the drag leaves empty, or an `accept` list
20
+ * with extensions, counts as passing until the drop sorts the files. `limit`
21
+ * is how many one drop may add.
22
+ */
23
+ declare function dragVerdict(types: string[], accept: string | undefined, limit: number): DragVerdict;
24
+ interface SortOptions {
25
+ accept?: string;
26
+ maxSize?: number;
27
+ maxFiles?: number;
28
+ multiple?: boolean;
29
+ }
30
+ /** Splits picked or dropped files into the ones that pass `accept`, `maxSize` and the count, and the rest with a reason. */
31
+ declare function sortFiles(files: File[], { accept, maxSize, maxFiles, multiple }: SortOptions): {
32
+ accepted: File[];
33
+ rejected: FileRejection[];
34
+ };
35
+ export { DragVerdict, FileRejection, FileRejectionReason, acceptsFile, dragVerdict, formatFileSize, sortFiles };
@@ -0,0 +1,12 @@
1
+ import {
2
+ formatFileSize2,
3
+ acceptsFile2,
4
+ dragVerdict2,
5
+ sortFiles2
6
+ } from "../../../shared/components-f7h57m6t.js";
7
+ export {
8
+ acceptsFile2 as acceptsFile,
9
+ dragVerdict2 as dragVerdict,
10
+ formatFileSize2 as formatFileSize,
11
+ sortFiles2 as sortFiles
12
+ };
@@ -1,4 +1,4 @@
1
- import { ForwardRefExoticComponent, HTMLAttributes, InputHTMLAttributes, LabelHTMLAttributes, ReactNode as ReactNode2, RefAttributes } from "react";
1
+ import { ButtonHTMLAttributes, ForwardRefExoticComponent, HTMLAttributes, InputHTMLAttributes, ReactNode as ReactNode4, RefAttributes } from "react";
2
2
  type SizeVariant = "default" | "compact";
3
3
  /** Framed at rest (`bordered`), or invisible until hovered or focused (`borderless`). */
4
4
  type FieldVariant = "bordered" | "borderless";
@@ -9,11 +9,46 @@ interface IconComponentProps {
9
9
  className?: string;
10
10
  }
11
11
  type IconComponent = ComponentType<IconComponentProps>;
12
+ import { LabelHTMLAttributes, ReactNode as ReactNode3 } from "react";
13
+ import { ForwardRefExoticComponent as ForwardRefExoticComponent_tcubfn } from "react";
14
+ import { RefAttributes as RefAttributes_miuf56 } from "react";
15
+ interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
16
+ /** Label text. */
17
+ children: ReactNode3;
18
+ /** The id of the control it names; a click on the label focuses or toggles that control. */
19
+ htmlFor?: string;
20
+ /** Turns the label destructive, matching an invalid Input. Defaults to `false`. */
21
+ invalid?: boolean;
22
+ /** Pins the label to one step of the size ladder (body text at default, compact body at compact). Defaults to the surrounding SizeProvider. */
23
+ size?: SizeVariant;
24
+ /** Classes for the `<label>`. */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * The label above or beside a field control.
29
+ *
30
+ * Muted body text inset to line up with the text inside a field box, so a
31
+ * label over an Input starts where its value does. It reserves the width of
32
+ * its semibold weight, so nothing moves if a wrapper restyles it. Pair it
33
+ * with a control through `htmlFor` and the control's `id`; inside a Field,
34
+ * `Field.Label` renders it for you and links it. `invalid` turns it
35
+ * destructive with the field; a disabled Field dims it. It follows the size
36
+ * ladder (see Sizes): `size` pins it, otherwise it reads the surrounding
37
+ * SizeProvider. Also exported from `inputs/input`.
38
+ *
39
+ * @example {@include ./examples.mdx}
40
+ */
41
+ declare const Label: ForwardRefExoticComponent_tcubfn<LabelProps & RefAttributes_miuf56<HTMLLabelElement>>;
42
+ import { JSX as JSX_1kxb3 } from "react";
12
43
  interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "defaultValue" | "size"> {
13
44
  /** Placeholder text. */
14
45
  placeholder?: string;
15
46
  /** Leading icon inside the input. */
16
47
  icon?: IconComponent;
48
+ /** Content before the text, after `icon`: a prefix (`"https://"`), an icon element, an `InputAction`. Strings read as muted text; icons take the ladder's glyph size. */
49
+ startAdornment?: ReactNode4;
50
+ /** Content after the text: a unit (`"kg"`), a status icon, an `InputAction` such as a password reveal or a clear. */
51
+ endAdornment?: ReactNode4;
17
52
  /** Controlled input value. */
18
53
  value?: string;
19
54
  /** Initial value when uncontrolled. Defaults to `''`. */
@@ -26,6 +61,12 @@ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChan
26
61
  invalid?: boolean;
27
62
  /** Disables the input. Defaults to `false`. */
28
63
  disabled?: boolean;
64
+ /** Shows the value without letting it change: it can be selected and copied, the ring answers hover and focus, the fill never lifts. Defaults to `false`. */
65
+ readOnly?: boolean;
66
+ /** Marks the input required. Defaults to the surrounding Field's `required`. */
67
+ required?: boolean;
68
+ /** The input's type. Swapping it (a password reveal) keeps the caret and the selection where they were. Defaults to `"text"`. */
69
+ type?: string;
29
70
  /** Pins the input to one step of the size ladder (default 36px, compact 28px). Defaults to the surrounding SizeProvider. */
30
71
  size?: SizeVariant;
31
72
  /** Classes for the ringed box around the input. */
@@ -38,11 +79,34 @@ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChan
38
79
  * ground with a hairline ring, focus onto the card ground, and its leading
39
80
  * icon thickens. `invalid` turns it destructive. It is uncontrolled with
40
81
  * `defaultValue`, or controlled with `value` + `onChange`, and fills the width
41
- * of its container. Pair it with a `Label` through `htmlFor` / `id`.
82
+ * of its container. Pair it with a `Label` through `htmlFor` / `id`, or put
83
+ * it in a Field, which labels it and hands it its error, disabled,
84
+ * read-only and required state.
85
+ *
86
+ * `startAdornment` and `endAdornment` hold what sits beside the text: a
87
+ * prefix or a unit, an icon, or an `InputAction` (a password reveal, a
88
+ * clear). They light with the field like its leading icon, and icons in
89
+ * them take the ladder's glyph size. Swapping `type` keeps the caret and the
90
+ * selection where they were, so a password reveal is just an `InputAction`
91
+ * that flips `type` between `"password"` and `"text"`. `readOnly` keeps the
92
+ * value selectable while the fill stays down.
93
+ *
94
+ * Its height is a step of the size ladder (see Sizes). `size` is that step
95
+ * (`"default"` 36px, `"compact"` 28px), not the native `<input size>`
96
+ * character width, which the Input doesn't take: its width comes from its
97
+ * container. With no `size`, the surrounding SizeProvider sets the height,
98
+ * so a host whose props keep the native `size` attribute strips it before
99
+ * spreading them onto the Input and sets density with a SizeProvider (or a
100
+ * Field's `size`) around the form instead.
42
101
  *
43
102
  * Also exported from this item:
103
+ * - `InputAction` — a small icon button inside the field, 4px inside its
104
+ * ring: `label` (its accessible name), `icon`, `size`, plus button props.
105
+ * A press keeps the caret in the field.
106
+ * - `InputAdornment` — the wrapper the adornments render in, for a field of
107
+ * your own built on the field box: `size`.
44
108
  * - `Label` — the field label, weight-stable and inset to line up with the
45
- * input's text: `htmlFor`, `invalid`, `size`.
109
+ * input's text: `htmlFor`, `invalid`, `size` (see Label, its own page).
46
110
  * - `InputGroup` — stacks labelled fields and tracks the pointer across them,
47
111
  * so the hover glides from field to field: `size` pins every field to one
48
112
  * step of the ladder.
@@ -56,18 +120,36 @@ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChan
56
120
  * @example {@include ./examples.mdx}
57
121
  */
58
122
  declare const Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;
59
- interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
60
- /** Label text. */
61
- children: ReactNode2;
62
- /** Turns the label destructive, matching an invalid Input. Defaults to `false`. */
63
- invalid?: boolean;
64
- /** Pins the label to one step of the size ladder. Defaults to the surrounding SizeProvider. */
123
+ interface InputAdornmentProps {
124
+ /** What sits beside the text. Nothing renders when it is empty. */
125
+ children?: ReactNode4;
126
+ /** Pins the adornment, and an `InputAction` inside it, to one step of the size ladder. Defaults to the surrounding SizeProvider. */
127
+ size?: SizeVariant;
128
+ /** Classes for the wrapper. */
129
+ className?: string;
130
+ }
131
+ type Element_12xgc3 = JSX_1kxb3["Element"];
132
+ /** Content beside a field's text, lit with the field: what `startAdornment` / `endAdornment` render in, for a field of your own on `useFieldBox`. */
133
+ declare function InputAdornment({ children, size, className }: InputAdornmentProps): Element_12xgc3 | null;
134
+ interface InputActionProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
135
+ /** Names the action for assistive tech (its `aria-label`), e.g. "Show password". */
136
+ label: string;
137
+ /** The glyph. Pass an icon component, or an icon element as `children`. */
138
+ icon?: IconComponent;
139
+ /** An icon element, in place of `icon`. */
140
+ children?: ReactNode4;
141
+ /** Disables the action. Defaults to `false`. */
142
+ disabled?: boolean;
143
+ /** Pins the action to one step of the size ladder (28px in a default field, 20px in a compact one). Defaults to the surrounding SizeProvider. */
65
144
  size?: SizeVariant;
145
+ /** Classes for the button. */
146
+ className?: string;
66
147
  }
67
- declare const Label: ForwardRefExoticComponent<LabelProps & RefAttributes<HTMLLabelElement>>;
148
+ /** A small icon button inside a field box: a password reveal, a clear, a copy. */
149
+ declare const InputAction: ForwardRefExoticComponent<InputActionProps & RefAttributes<HTMLButtonElement>>;
68
150
  interface InputGroupProps extends HTMLAttributes<HTMLDivElement> {
69
151
  /** One or more InputGroup.Field children. */
70
- children: ReactNode2;
152
+ children: ReactNode4;
71
153
  /** Pins the group's fields to one step of the size ladder (default 36px, compact 28px). Defaults to the surrounding SizeProvider. */
72
154
  size?: SizeVariant;
73
155
  }
@@ -85,8 +167,8 @@ interface InputFieldProps extends Omit<InputProps, "invalid" | "size" | "classNa
85
167
  /** Error message shown below the input. */
86
168
  error?: string;
87
169
  /** A control in place of the built-in Input, e.g. a Textarea: it joins the group's hover and takes the field's error and disabled state. Input's props then go on it, not on the field. */
88
- children?: ReactNode2;
170
+ children?: ReactNode4;
89
171
  className?: string;
90
172
  }
91
173
  declare const InputField: ForwardRefExoticComponent<InputFieldProps & RefAttributes<HTMLDivElement>>;
92
- export { Input, InputFieldProps, InputGroup, InputGroupProps, InputProps, Label, LabelProps, Input as default };
174
+ export { Input, InputAction, InputActionProps, InputAdornment, InputAdornmentProps, InputFieldProps, InputGroup, InputGroupProps, InputProps, Label, LabelProps, Input as default };
@@ -1,18 +1,26 @@
1
1
  import {
2
2
  Input2,
3
- Label2,
3
+ InputAdornment2,
4
+ InputAction2,
4
5
  InputGroup2,
5
6
  input_default
6
- } from "../../../shared/components-h2ajmhwn.js";
7
- import"../../../shared/components-raknhppb.js";
8
- import"../../../shared/components-59efxjd9.js";
9
- import"../../../shared/components-jjw69c4c.js";
10
- import"../../../shared/components-n7mjr357.js";
11
- import"../../../shared/components-0sn7ypjw.js";
12
- import"../../../shared/components-cv16mryv.js";
13
- import"../../../shared/components-ezxhrmer.js";
7
+ } from "../../../shared/components-y1w3a6wx.js";
8
+ import {
9
+ Label2
10
+ } from "../../../shared/components-adkarj8n.js";
11
+ import"../../../shared/components-6zng858q.js";
12
+ import"../../../shared/components-124epb7f.js";
13
+ import"../../../shared/components-yhgq0qxx.js";
14
+ import"../../../shared/components-dcc02hs2.js";
15
+ import"../../../shared/components-tz1fv35x.js";
16
+ import"../../../shared/components-h83az0bz.js";
17
+ import"../../../shared/components-34txk9rj.js";
18
+ import"../../../shared/components-78x40gee.js";
19
+ import"../../../shared/components-jcnjay5g.js";
14
20
  export {
15
21
  Input2 as Input,
22
+ InputAction2 as InputAction,
23
+ InputAdornment2 as InputAdornment,
16
24
  InputGroup2 as InputGroup,
17
25
  Label2 as Label,
18
26
  input_default as default
@@ -0,0 +1,32 @@
1
+ import { LabelHTMLAttributes, ReactNode } from "react";
2
+ type SizeVariant = "default" | "compact";
3
+ import { ForwardRefExoticComponent as ForwardRefExoticComponent_tcubfn } from "react";
4
+ import { RefAttributes as RefAttributes_miuf56 } from "react";
5
+ interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
6
+ /** Label text. */
7
+ children: ReactNode;
8
+ /** The id of the control it names; a click on the label focuses or toggles that control. */
9
+ htmlFor?: string;
10
+ /** Turns the label destructive, matching an invalid Input. Defaults to `false`. */
11
+ invalid?: boolean;
12
+ /** Pins the label to one step of the size ladder (body text at default, compact body at compact). Defaults to the surrounding SizeProvider. */
13
+ size?: SizeVariant;
14
+ /** Classes for the `<label>`. */
15
+ className?: string;
16
+ }
17
+ /**
18
+ * The label above or beside a field control.
19
+ *
20
+ * Muted body text inset to line up with the text inside a field box, so a
21
+ * label over an Input starts where its value does. It reserves the width of
22
+ * its semibold weight, so nothing moves if a wrapper restyles it. Pair it
23
+ * with a control through `htmlFor` and the control's `id`; inside a Field,
24
+ * `Field.Label` renders it for you and links it. `invalid` turns it
25
+ * destructive with the field; a disabled Field dims it. It follows the size
26
+ * ladder (see Sizes): `size` pins it, otherwise it reads the surrounding
27
+ * SizeProvider. Also exported from `inputs/input`.
28
+ *
29
+ * @example {@include ./examples.mdx}
30
+ */
31
+ declare const Label: ForwardRefExoticComponent_tcubfn<LabelProps & RefAttributes_miuf56<HTMLLabelElement>>;
32
+ export { Label, LabelProps, Label as default };
@@ -0,0 +1,11 @@
1
+ import {
2
+ Label2,
3
+ label_default
4
+ } from "../../../shared/components-adkarj8n.js";
5
+ import"../../../shared/components-h83az0bz.js";
6
+ import"../../../shared/components-34txk9rj.js";
7
+ import"../../../shared/components-jcnjay5g.js";
8
+ export {
9
+ Label2 as Label,
10
+ label_default as default
11
+ };