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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +66 -164
  2. package/dist/base.css +4 -141
  3. package/dist/blocks/sidebar-app/index.js +26 -40
  4. package/dist/components/AI/input-message/index.js +16 -23
  5. package/dist/components/AI/thinking-indicator/index.js +6 -9
  6. package/dist/components/accordion/index.d.ts +11 -39
  7. package/dist/components/accordion/index.js +13 -18
  8. package/dist/components/badge/index.d.ts +11 -18
  9. package/dist/components/badge/index.js +7 -12
  10. package/dist/components/button/index.d.ts +17 -53
  11. package/dist/components/button/index.js +6 -11
  12. package/dist/components/card/index.d.ts +9 -32
  13. package/dist/components/card/index.js +11 -17
  14. package/dist/components/copy/index.d.ts +8 -41
  15. package/dist/components/copy/index.js +9 -15
  16. package/dist/components/inputs/checkbox/index.d.ts +9 -28
  17. package/dist/components/inputs/checkbox/index.js +13 -18
  18. package/dist/components/inputs/color-picker/index.d.ts +14 -22
  19. package/dist/components/inputs/color-picker/index.js +18 -26
  20. package/dist/components/inputs/combobox/index.d.ts +20 -85
  21. package/dist/components/inputs/combobox/index.js +18 -27
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
  23. package/dist/components/inputs/date-time/calendar/index.js +11 -15
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
  25. package/dist/components/inputs/date-time/date-picker/index.js +25 -35
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
  29. package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
  31. package/dist/components/inputs/date-time/month-picker/index.js +23 -32
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
  33. package/dist/components/inputs/date-time/time-picker/index.js +24 -33
  34. package/dist/components/inputs/input/index.d.ts +13 -95
  35. package/dist/components/inputs/input/index.js +9 -18
  36. package/dist/components/inputs/radio/index.d.ts +5 -20
  37. package/dist/components/inputs/radio/index.js +12 -16
  38. package/dist/components/inputs/search/index.d.ts +3 -3
  39. package/dist/components/inputs/search/index.js +18 -26
  40. package/dist/components/inputs/select/index.d.ts +23 -99
  41. package/dist/components/inputs/select/index.js +14 -29
  42. package/dist/components/inputs/slider/index.d.ts +0 -9
  43. package/dist/components/inputs/slider/index.js +5 -8
  44. package/dist/components/inputs/switch/index.d.ts +2 -8
  45. package/dist/components/inputs/switch/index.js +12 -15
  46. package/dist/components/inputs/textarea/index.d.ts +1 -20
  47. package/dist/components/inputs/textarea/index.js +6 -9
  48. package/dist/components/navigation/sidebar/index.d.ts +21 -44
  49. package/dist/components/navigation/sidebar/index.js +31 -42
  50. package/dist/components/navigation/tabs/index.d.ts +2 -8
  51. package/dist/components/navigation/tabs/index.js +10 -15
  52. package/dist/components/navigation/tabs-subtle/index.js +10 -13
  53. package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
  54. package/dist/components/overlays/alert-dialog/index.js +13 -23
  55. package/dist/components/overlays/command/index.d.ts +20 -25
  56. package/dist/components/overlays/command/index.js +17 -25
  57. package/dist/components/overlays/context-menu/index.d.ts +17 -39
  58. package/dist/components/overlays/context-menu/index.js +18 -29
  59. package/dist/components/overlays/dialog/index.d.ts +16 -42
  60. package/dist/components/overlays/dialog/index.js +12 -20
  61. package/dist/components/overlays/dropdown/index.d.ts +34 -304
  62. package/dist/components/overlays/dropdown/index.js +17 -44
  63. package/dist/components/overlays/popover/index.d.ts +12 -38
  64. package/dist/components/overlays/popover/index.js +9 -13
  65. package/dist/components/overlays/preview-card/index.js +8 -12
  66. package/dist/components/overlays/sheet/index.d.ts +8 -25
  67. package/dist/components/overlays/sheet/index.js +13 -19
  68. package/dist/components/overlays/toast/index.d.ts +50 -209
  69. package/dist/components/overlays/toast/index.js +10 -23
  70. package/dist/components/overlays/tooltip/index.d.ts +21 -123
  71. package/dist/components/overlays/tooltip/index.js +6 -16
  72. package/dist/components/table/index.d.ts +8 -63
  73. package/dist/components/table/index.js +9 -20
  74. package/dist/index.d.ts +1048 -2999
  75. package/dist/index.js +82 -231
  76. package/dist/preset.d.ts +0 -22
  77. package/dist/preset.js +2 -24
  78. package/dist/primitives/code/index.js +5 -8
  79. package/dist/primitives/craft/index.js +6 -10
  80. package/dist/primitives/fluid-hover/index.js +8 -10
  81. package/dist/primitives/morph/index.js +10 -16
  82. package/dist/primitives/motion/index.js +8 -11
  83. package/dist/primitives/scroll-area/index.js +3 -5
  84. package/dist/primitives/sizes/index.js +4 -6
  85. package/dist/primitives/surface/index.js +4 -6
  86. package/dist/shared/{components-c7rwx0ap.js → components-0q0sqfh4.js} +49 -27
  87. package/dist/shared/components-0sn7ypjw.js +61 -0
  88. package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
  89. package/dist/shared/components-1434p1mh.js +123 -0
  90. package/dist/shared/{components-c74gf16d.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-bae8sbjx.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-qh1cvj6p.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-y0kfy2g4.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-c5w5zk0s.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-4j3t39dd.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-syynwm1r.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-wgtjt2af.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-91zw3d9f.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-kz5q11pp.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-zkk3fmw8.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-svkt577j.js → components-8snj490h.js} +32 -78
  105. package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
  106. package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
  107. package/dist/shared/{components-pv1dyrtn.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pwayrkw9.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-hgv6tygd.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-z8fedth5.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-cet3jpa0.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-cnead5qm.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-0h78g3b5.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-m06yq8wk.js → components-hqeq3w9q.js} +23 -38
  119. package/dist/shared/{components-7qx17na9.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-9jmjnkqd.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-303jf96s.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-dtca4s6b.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-dc5q749x.js → components-kvr7f9hy.js} +10 -19
  126. package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
  127. package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
  128. package/dist/shared/{components-qx27excf.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-1e64t8aj.js → components-n42c79bz.js} +22 -23
  130. package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
  131. package/dist/shared/components-ng72k97e.js +128 -0
  132. package/dist/shared/{components-w2jqa6hx.js → components-pbmqctfa.js} +65 -169
  133. package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
  134. package/dist/shared/components-raknhppb.js +64 -0
  135. package/dist/shared/{components-2a7hcand.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-005jt2nz.js → components-s083f38z.js} +34 -164
  137. package/dist/shared/components-s5ngg32c.js +267 -0
  138. package/dist/shared/components-sn1rxx1d.js +143 -0
  139. package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
  140. package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
  141. package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
  142. package/dist/shared/components-vynjtrk6.js +19 -0
  143. package/dist/shared/{components-p0fm0bab.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-xd3emmy4.js → components-w90endve.js} +72 -71
  145. package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
  146. package/dist/shared/components-wy9jpqny.js +146 -0
  147. package/dist/shared/{components-yxmxn2jp.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-czdvj1a8.js → components-zfnmn5d4.js} +36 -82
  150. package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
  151. package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
  152. package/dist/styles.css +32 -320
  153. package/dist/tailwind.css +0 -16
  154. package/dist/tokens.css +0 -67
  155. package/package.json +4 -227
  156. package/DESIGN.md +0 -623
  157. package/blocks/sidebar-app/examples.mdx +0 -33
  158. package/blocks/sidebar-app/index.tsx +0 -218
  159. package/blocks/sidebar-app/inset-topbar.tsx +0 -25
  160. package/blocks/sidebar-app/menu-grid.ts +0 -26
  161. package/blocks/sidebar-app/nav-data.ts +0 -36
  162. package/blocks/sidebar-app/search-field.tsx +0 -48
  163. package/blocks/sidebar-app/user-footer.tsx +0 -67
  164. package/blocks/sidebar-app/workspace-header.tsx +0 -129
  165. package/components/AI/input-message/examples.mdx +0 -130
  166. package/components/AI/input-message/file-thumbnail.tsx +0 -173
  167. package/components/AI/input-message/index.tsx +0 -1385
  168. package/components/AI/thinking-indicator/examples.mdx +0 -27
  169. package/components/AI/thinking-indicator/index.tsx +0 -210
  170. package/components/accordion/examples.mdx +0 -233
  171. package/components/accordion/index.tsx +0 -1071
  172. package/components/avatar/examples.mdx +0 -95
  173. package/components/avatar/index.tsx +0 -129
  174. package/components/badge/change-demo.tsx +0 -29
  175. package/components/badge/examples.mdx +0 -124
  176. package/components/badge/index.tsx +0 -225
  177. package/components/badge/variants.ts +0 -73
  178. package/components/button/examples.mdx +0 -168
  179. package/components/button/index.tsx +0 -424
  180. package/components/button/loading-demo.tsx +0 -25
  181. package/components/button/variants.ts +0 -168
  182. package/components/card/examples.mdx +0 -251
  183. package/components/card/index.tsx +0 -1070
  184. package/components/copy/examples.mdx +0 -125
  185. package/components/copy/index.tsx +0 -662
  186. package/components/inputs/checkbox/examples.mdx +0 -87
  187. package/components/inputs/checkbox/index.tsx +0 -611
  188. package/components/inputs/checkbox/select-all-demo.tsx +0 -48
  189. package/components/inputs/color-picker/examples.mdx +0 -111
  190. package/components/inputs/color-picker/index.tsx +0 -1981
  191. package/components/inputs/color-picker/variants.ts +0 -401
  192. package/components/inputs/combobox/examples.mdx +0 -366
  193. package/components/inputs/combobox/index.tsx +0 -1527
  194. package/components/inputs/combobox/remote-demo.tsx +0 -105
  195. package/components/inputs/date-time/calendar/examples.mdx +0 -45
  196. package/components/inputs/date-time/calendar/index.tsx +0 -370
  197. package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
  198. package/components/inputs/date-time/date-picker/examples.mdx +0 -243
  199. package/components/inputs/date-time/date-picker/index.tsx +0 -476
  200. package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
  201. package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
  202. package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
  203. package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
  204. package/components/inputs/date-time/duration-picker/index.tsx +0 -253
  205. package/components/inputs/date-time/month-picker/examples.mdx +0 -45
  206. package/components/inputs/date-time/month-picker/index.tsx +0 -254
  207. package/components/inputs/date-time/picker-shell.tsx +0 -581
  208. package/components/inputs/date-time/time-columns.tsx +0 -94
  209. package/components/inputs/date-time/time-picker/examples.mdx +0 -57
  210. package/components/inputs/date-time/time-picker/index.tsx +0 -227
  211. package/components/inputs/field/examples.mdx +0 -117
  212. package/components/inputs/field/index.tsx +0 -268
  213. package/components/inputs/file-dropzone/examples.mdx +0 -83
  214. package/components/inputs/file-dropzone/file-row.tsx +0 -201
  215. package/components/inputs/file-dropzone/index.tsx +0 -316
  216. package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
  217. package/components/inputs/file-dropzone/variants.ts +0 -94
  218. package/components/inputs/input/examples.mdx +0 -166
  219. package/components/inputs/input/index.tsx +0 -494
  220. package/components/inputs/input/password-demo.tsx +0 -30
  221. package/components/inputs/label/examples.mdx +0 -67
  222. package/components/inputs/label/index.tsx +0 -85
  223. package/components/inputs/number-input/examples.mdx +0 -69
  224. package/components/inputs/number-input/index.tsx +0 -221
  225. package/components/inputs/radio/examples.mdx +0 -77
  226. package/components/inputs/radio/index.tsx +0 -636
  227. package/components/inputs/search/examples.mdx +0 -74
  228. package/components/inputs/search/index.tsx +0 -333
  229. package/components/inputs/select/examples.mdx +0 -296
  230. package/components/inputs/select/index.tsx +0 -1044
  231. package/components/inputs/select/variants.ts +0 -32
  232. package/components/inputs/slider/examples.mdx +0 -153
  233. package/components/inputs/slider/index.tsx +0 -1867
  234. package/components/inputs/switch/examples.mdx +0 -96
  235. package/components/inputs/switch/index.tsx +0 -504
  236. package/components/inputs/textarea/examples.mdx +0 -126
  237. package/components/inputs/textarea/index.tsx +0 -207
  238. package/components/navigation/navigation-menu/examples.mdx +0 -136
  239. package/components/navigation/navigation-menu/index.tsx +0 -704
  240. package/components/navigation/pagination/examples.mdx +0 -74
  241. package/components/navigation/pagination/index.tsx +0 -401
  242. package/components/navigation/sidebar/examples.mdx +0 -325
  243. package/components/navigation/sidebar/index.tsx +0 -453
  244. package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
  245. package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
  246. package/components/navigation/sidebar/sidebar.css +0 -74
  247. package/components/navigation/sidebar/variants.ts +0 -55
  248. package/components/navigation/tabs/examples.mdx +0 -89
  249. package/components/navigation/tabs/index.tsx +0 -494
  250. package/components/navigation/tabs-subtle/examples.mdx +0 -49
  251. package/components/navigation/tabs-subtle/index.tsx +0 -512
  252. package/components/overlays/alert-dialog/examples.mdx +0 -123
  253. package/components/overlays/alert-dialog/index.tsx +0 -276
  254. package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
  255. package/components/overlays/command/examples.mdx +0 -113
  256. package/components/overlays/command/index.tsx +0 -425
  257. package/components/overlays/context-menu/examples.mdx +0 -56
  258. package/components/overlays/context-menu/index.tsx +0 -279
  259. package/components/overlays/dialog/examples.mdx +0 -165
  260. package/components/overlays/dialog/index.tsx +0 -451
  261. package/components/overlays/dropdown/dropdown-search.tsx +0 -395
  262. package/components/overlays/dropdown/examples.mdx +0 -444
  263. package/components/overlays/dropdown/index.tsx +0 -1241
  264. package/components/overlays/dropdown/menu-item.tsx +0 -510
  265. package/components/overlays/dropdown/menu-parts.tsx +0 -725
  266. package/components/overlays/popover/anchored-demo.tsx +0 -59
  267. package/components/overlays/popover/examples.mdx +0 -203
  268. package/components/overlays/popover/index.tsx +0 -317
  269. package/components/overlays/preview-card/examples.mdx +0 -61
  270. package/components/overlays/preview-card/index.tsx +0 -204
  271. package/components/overlays/sheet/examples.mdx +0 -101
  272. package/components/overlays/sheet/index.tsx +0 -307
  273. package/components/overlays/toast/examples.mdx +0 -85
  274. package/components/overlays/toast/global-demo.tsx +0 -72
  275. package/components/overlays/toast/index.tsx +0 -544
  276. package/components/overlays/toast/manager.ts +0 -193
  277. package/components/overlays/tooltip/examples.mdx +0 -106
  278. package/components/overlays/tooltip/index.tsx +0 -539
  279. package/components/progress/examples.mdx +0 -59
  280. package/components/progress/index.tsx +0 -174
  281. package/components/progress/progress.css +0 -49
  282. package/components/progress/step-demo.tsx +0 -27
  283. package/components/table/examples.mdx +0 -188
  284. package/components/table/index.tsx +0 -535
  285. package/components/table/sort-demo.tsx +0 -61
  286. package/dist/components/avatar/index.d.ts +0 -46
  287. package/dist/components/avatar/index.js +0 -19
  288. package/dist/components/badge/variants.d.ts +0 -33
  289. package/dist/components/badge/variants.js +0 -10
  290. package/dist/components/button/variants.d.ts +0 -39
  291. package/dist/components/button/variants.js +0 -8
  292. package/dist/components/inputs/color-picker/variants.d.ts +0 -61
  293. package/dist/components/inputs/color-picker/variants.js +0 -28
  294. package/dist/components/inputs/field/index.d.ts +0 -116
  295. package/dist/components/inputs/field/index.js +0 -29
  296. package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
  297. package/dist/components/inputs/file-dropzone/index.js +0 -33
  298. package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
  299. package/dist/components/inputs/file-dropzone/variants.js +0 -12
  300. package/dist/components/inputs/label/index.d.ts +0 -32
  301. package/dist/components/inputs/label/index.js +0 -11
  302. package/dist/components/inputs/number-input/index.d.ts +0 -87
  303. package/dist/components/inputs/number-input/index.js +0 -21
  304. package/dist/components/inputs/select/variants.d.ts +0 -5
  305. package/dist/components/inputs/select/variants.js +0 -6
  306. package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
  307. package/dist/components/navigation/navigation-menu/index.js +0 -41
  308. package/dist/components/navigation/pagination/index.d.ts +0 -75
  309. package/dist/components/navigation/pagination/index.js +0 -41
  310. package/dist/components/navigation/sidebar/variants.d.ts +0 -25
  311. package/dist/components/navigation/sidebar/variants.js +0 -28
  312. package/dist/components/progress/index.d.ts +0 -56
  313. package/dist/components/progress/index.js +0 -15
  314. package/dist/docs/index.d.ts +0 -83
  315. package/dist/docs/index.js +0 -288
  316. package/dist/docs/vite.d.ts +0 -31
  317. package/dist/docs/vite.js +0 -45
  318. package/dist/lib/date-locale.d.ts +0 -26
  319. package/dist/lib/date-locale.js +0 -24
  320. package/dist/lib/field-classes.d.ts +0 -149
  321. package/dist/lib/field-classes.js +0 -41
  322. package/dist/lib/field-variants.d.ts +0 -47
  323. package/dist/lib/field-variants.js +0 -26
  324. package/dist/lib/fluid-hover-highlight.d.ts +0 -112
  325. package/dist/lib/fluid-hover-highlight.js +0 -17
  326. package/dist/lib/focus-ring.d.ts +0 -18
  327. package/dist/lib/focus-ring.js +0 -11
  328. package/dist/lib/goo-indicator.d.ts +0 -46
  329. package/dist/lib/goo-indicator.js +0 -14
  330. package/dist/lib/icon-context.d.ts +0 -30
  331. package/dist/lib/icon-context.js +0 -12
  332. package/dist/lib/inert.d.ts +0 -9
  333. package/dist/lib/inert.js +0 -8
  334. package/dist/lib/morph-layers.d.ts +0 -93
  335. package/dist/lib/morph-layers.js +0 -13
  336. package/dist/lib/morph-part.d.ts +0 -21
  337. package/dist/lib/morph-part.js +0 -12
  338. package/dist/lib/popup.d.ts +0 -20
  339. package/dist/lib/popup.js +0 -12
  340. package/dist/lib/reduced-motion.d.ts +0 -9
  341. package/dist/lib/reduced-motion.js +0 -6
  342. package/dist/lib/row-index.d.ts +0 -10
  343. package/dist/lib/row-index.js +0 -8
  344. package/dist/lib/row-order.d.ts +0 -28
  345. package/dist/lib/row-order.js +0 -10
  346. package/dist/lib/scroll-column.d.ts +0 -31
  347. package/dist/lib/scroll-column.js +0 -19
  348. package/dist/lib/shape-context.d.ts +0 -30
  349. package/dist/lib/shape-context.js +0 -13
  350. package/dist/lib/shape-radius.d.ts +0 -19
  351. package/dist/lib/shape-radius.js +0 -6
  352. package/dist/lib/size-context.d.ts +0 -94
  353. package/dist/lib/size-context.js +0 -20
  354. package/dist/lib/size-scale.d.ts +0 -79
  355. package/dist/lib/size-scale.js +0 -8
  356. package/dist/lib/slot.d.ts +0 -39
  357. package/dist/lib/slot.js +0 -14
  358. package/dist/lib/springs.d.ts +0 -44
  359. package/dist/lib/springs.js +0 -8
  360. package/dist/lib/surface-classes.d.ts +0 -19
  361. package/dist/lib/surface-classes.js +0 -10
  362. package/dist/lib/surface-context.d.ts +0 -9
  363. package/dist/lib/surface-context.js +0 -8
  364. package/dist/lib/use-controllable-state.d.ts +0 -2
  365. package/dist/lib/use-controllable-state.js +0 -6
  366. package/dist/lib/use-fluid-hover.d.ts +0 -138
  367. package/dist/lib/use-fluid-hover.js +0 -14
  368. package/dist/lib/use-is-mobile.d.ts +0 -2
  369. package/dist/lib/use-is-mobile.js +0 -6
  370. package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
  371. package/dist/lib/use-keyboard-nav-gate.js +0 -7
  372. package/dist/lib/use-merge-split.d.ts +0 -47
  373. package/dist/lib/use-merge-split.js +0 -15
  374. package/dist/lib/use-morph.d.ts +0 -101
  375. package/dist/lib/use-morph.js +0 -20
  376. package/dist/lib/use-touch-primary.d.ts +0 -2
  377. package/dist/lib/use-touch-primary.js +0 -6
  378. package/dist/lib/utils.d.ts +0 -3
  379. package/dist/lib/utils.js +0 -6
  380. package/dist/primitives/separator/index.d.ts +0 -25
  381. package/dist/primitives/separator/index.js +0 -9
  382. package/dist/primitives/skeleton/index.d.ts +0 -35
  383. package/dist/primitives/skeleton/index.js +0 -13
  384. package/dist/shared/components-01w9qcfa.js +0 -277
  385. package/dist/shared/components-124epb7f.js +0 -53
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-2krsc300.js +0 -254
  388. package/dist/shared/components-2qbqqpgq.js +0 -1545
  389. package/dist/shared/components-34txk9rj.js +0 -35
  390. package/dist/shared/components-3h92d94m.js +0 -23
  391. package/dist/shared/components-4vfm04wq.js +0 -82
  392. package/dist/shared/components-54nq988h.js +0 -123
  393. package/dist/shared/components-7s7pykk5.js +0 -281
  394. package/dist/shared/components-868v7scv.js +0 -399
  395. package/dist/shared/components-8jrk5eye.js +0 -448
  396. package/dist/shared/components-adkarj8n.js +0 -35
  397. package/dist/shared/components-b1e239g3.js +0 -28
  398. package/dist/shared/components-b94t6qtj.js +0 -143
  399. package/dist/shared/components-bsqynhaj.js +0 -179
  400. package/dist/shared/components-c9yr4ed1.js +0 -44
  401. package/dist/shared/components-d3shbwqq.js +0 -95
  402. package/dist/shared/components-dhgk6mbt.js +0 -16
  403. package/dist/shared/components-drxrtnp2.js +0 -25
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-g3eafs70.js +0 -337
  406. package/dist/shared/components-gx4h5rbb.js +0 -40
  407. package/dist/shared/components-gyt7my41.js +0 -328
  408. package/dist/shared/components-h6p86be3.js +0 -19
  409. package/dist/shared/components-h83az0bz.js +0 -33
  410. package/dist/shared/components-hdzrqqpx.js +0 -55
  411. package/dist/shared/components-krtx3m5b.js +0 -84
  412. package/dist/shared/components-kswxnm3h.js +0 -24
  413. package/dist/shared/components-mhza2wdn.js +0 -482
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rtadhd9j.js +0 -64
  417. package/dist/shared/components-tv7b8tet.js +0 -271
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-wknae3m4.js +0 -298
  421. package/dist/shared/components-xdqmt6ed.js +0 -20
  422. package/dist/shared/components-xjkdvnbg.js +0 -107
  423. package/dist/shared/components-z3v0n0de.js +0 -11
  424. package/dist/tokens/colors.css +0 -230
  425. package/dist/tokens/motion.css +0 -40
  426. package/dist/tokens/radius.css +0 -10
  427. package/dist/tokens/spacing.css +0 -9
  428. package/dist/tokens/typography.css +0 -119
  429. package/docs/chrome.css +0 -120
  430. package/docs/chrome.tsx +0 -283
  431. package/docs/index.ts +0 -9
  432. package/docs/vite.ts +0 -85
  433. package/index.ts +0 -60
  434. package/lib/date-locale.ts +0 -195
  435. package/lib/field-classes.ts +0 -121
  436. package/lib/field-variants.ts +0 -117
  437. package/lib/fluid-hover-highlight.tsx +0 -139
  438. package/lib/focus-ring.tsx +0 -46
  439. package/lib/goo-indicator.tsx +0 -261
  440. package/lib/icon-context.tsx +0 -310
  441. package/lib/inert.ts +0 -22
  442. package/lib/morph-layers.tsx +0 -102
  443. package/lib/morph-part.tsx +0 -49
  444. package/lib/popup.ts +0 -52
  445. package/lib/reduced-motion.ts +0 -19
  446. package/lib/row-index.tsx +0 -29
  447. package/lib/row-order.tsx +0 -126
  448. package/lib/scroll-column.tsx +0 -273
  449. package/lib/shape-context.tsx +0 -138
  450. package/lib/shape-radius.ts +0 -67
  451. package/lib/size-context.tsx +0 -66
  452. package/lib/size-scale.ts +0 -115
  453. package/lib/slot.ts +0 -115
  454. package/lib/springs.ts +0 -62
  455. package/lib/surface-classes.ts +0 -58
  456. package/lib/surface-context.tsx +0 -21
  457. package/lib/use-controllable-state.ts +0 -44
  458. package/lib/use-fluid-hover.ts +0 -541
  459. package/lib/use-is-mobile.ts +0 -25
  460. package/lib/use-keyboard-nav-gate.ts +0 -45
  461. package/lib/use-merge-split.tsx +0 -209
  462. package/lib/use-morph.ts +0 -575
  463. package/lib/use-touch-primary.tsx +0 -43
  464. package/lib/utils.ts +0 -37
  465. package/preset.ts +0 -199
  466. package/primitives/code/examples.mdx +0 -27
  467. package/primitives/code/index.tsx +0 -80
  468. package/primitives/craft/demos.tsx +0 -173
  469. package/primitives/craft/examples.mdx +0 -142
  470. package/primitives/craft/index.tsx +0 -76
  471. package/primitives/fluid-hover/examples.mdx +0 -84
  472. package/primitives/fluid-hover/index.tsx +0 -316
  473. package/primitives/morph/examples.mdx +0 -139
  474. package/primitives/morph/index.tsx +0 -192
  475. package/primitives/motion/examples.mdx +0 -100
  476. package/primitives/motion/index.tsx +0 -160
  477. package/primitives/scroll-area/examples.mdx +0 -58
  478. package/primitives/scroll-area/index.tsx +0 -204
  479. package/primitives/separator/examples.mdx +0 -30
  480. package/primitives/separator/index.tsx +0 -53
  481. package/primitives/sizes/examples.mdx +0 -167
  482. package/primitives/sizes/index.tsx +0 -89
  483. package/primitives/skeleton/examples.mdx +0 -51
  484. package/primitives/skeleton/index.tsx +0 -72
  485. package/primitives/skeleton/skeleton.css +0 -15
  486. package/primitives/surface/examples.mdx +0 -173
  487. package/primitives/surface/index.tsx +0 -109
  488. package/primitives/surface/surface.css +0 -176
  489. /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
  490. /package/dist/shared/{components-jcnjay5g.js → components-ezxhrmer.js} +0 -0
@@ -1,168 +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/base/button.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - The class recipe (`buttonVariants`) and the size aliases, split out of
8
- * `index.tsx` so server code can call them: no JSX, hooks or contexts here.
9
- * `index.tsx` re-exports them.
10
- * - Styling reads DS tokens (see `index.tsx`). The `primary` variant reads the theme hooks
11
- * `--primary*` and `--shadow-button-primary` (`tokens/colors.css`), also on the `surface`
12
- * root (the shadow rides `shadow-[…]`, so it composes with the focus ring).
13
- * - Variants `outline` (an alias of `tertiary`), `destructive`, `success` and
14
- * `link`, and the `xs` size alias (→ `compact`), for hosts with a
15
- * shadcn-style API; see `index.tsx` for the look.
16
- * - `buttonVariants` takes the size aliases too (resolved as the Button
17
- * resolves them), so a host can re-export it as is.
18
- * - `surface: true` (local): the fill, ring, hover, press and disabled look
19
- * as root classes, for an element that is not a Button (`<a>`), which has
20
- * no surface layer of its own. Static: no press shrink, no loading morph.
21
- * The transition list moved into compounds so one element gets exactly one.
22
- */
23
-
24
- import { cva, type VariantProps } from 'class-variance-authority'
25
-
26
- type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'outline' | 'ghost' | 'destructive' | 'success' | 'link'
27
-
28
- type SurfacedVariant = Exclude<ButtonVariant, 'link'>
29
-
30
- const SURFACED: SurfacedVariant[] = ['primary', 'secondary', 'tertiary', 'outline', 'ghost', 'destructive', 'success']
31
-
32
- /* The Button draws its fill on an inner layer 1px inside the root and fills
33
- that pixel back out with a same-color spread. Without the layer the root
34
- is the surface, so the fill sits on the root and the outline ring is an
35
- inset hairline on the same edge. Same tokens and mixes as the layer
36
- (`index.tsx` bgVariants); plain `hover:` / `active:` instead of `group-*`. */
37
- const surfaceVariants: Record<SurfacedVariant, string> = {
38
- primary:
39
- '[--btn-bg:var(--primary)] hover:[--btn-bg:var(--primary-hover)] active:[--btn-bg:var(--primary-active)] bg-[var(--btn-bg)] shadow-[var(--shadow-button-primary)]',
40
- secondary:
41
- '[--btn-bg:var(--accent)] hover:[--btn-bg:color-mix(in_oklab,var(--accent)_80%,var(--background))] active:[--btn-bg:var(--accent)] bg-[var(--btn-bg)]',
42
- tertiary: 'shadow-[inset_0_0_0_1px_var(--border)] hover:bg-hover active:bg-active',
43
- outline: 'shadow-[inset_0_0_0_1px_var(--border)] hover:bg-hover active:bg-active',
44
- ghost: 'hover:bg-hover active:bg-active',
45
- destructive: 'bg-destructive-wash hover:bg-destructive-wash-hover active:bg-destructive-wash-active',
46
- success: 'bg-success-wash hover:bg-success-wash-hover active:bg-success-wash-active',
47
- }
48
-
49
- const buttonRecipe = cva(
50
- [
51
- 'group relative isolate inline-flex items-center justify-center outline-none cursor-pointer',
52
- 'duration-fast',
53
- 'disabled:opacity-50 disabled:pointer-events-none',
54
- 'focus-visible:ring-1 focus-visible:ring-focus-ring',
55
- ],
56
- {
57
- variants: {
58
- variant: {
59
- primary: 'text-primary-foreground',
60
- secondary: 'text-foreground',
61
- tertiary: 'text-foreground',
62
- outline: 'text-foreground',
63
- ghost: 'text-muted-foreground hover:text-foreground',
64
- destructive: 'text-destructive-strong',
65
- success: 'text-success-strong',
66
- // The underline is always drawn and fades its color in, so hovering
67
- // never shifts a pixel of the label.
68
- link: 'text-foreground underline underline-offset-4 decoration-transparent hover:decoration-current',
69
- },
70
- // The two-step size ladder shared by every control — see /docs/sizes.
71
- // default = 36px control height, compact = 28px for dense surfaces.
72
- size: {
73
- default: 'h-9 px-4 text-body gap-1.5',
74
- compact: 'h-7 px-3 text-body-compact gap-1',
75
- icon: 'h-9 w-9 p-0 [&_svg]:h-4 [&_svg]:w-4',
76
- 'icon-compact': 'h-7 w-7 p-0 [&_svg]:h-3.5 [&_svg]:w-3.5',
77
- },
78
- iconLeft: { true: '' },
79
- iconRight: { true: '' },
80
- // The fill and ring as root classes, for a non-Button host (an anchor).
81
- surface: {
82
- true: [
83
- 'rounded-lg',
84
- 'aria-disabled:opacity-50 aria-disabled:pointer-events-none',
85
- '[&_svg]:shrink-0 [&_svg]:stroke-[1.5] [&_svg]:transition-[stroke-width] [&_svg]:duration-fast hover:[&_svg]:stroke-[2]',
86
- ],
87
- false: '',
88
- },
89
- },
90
- // An icon sits 4px closer to its edge than text does: 12px default and
91
- // 8px compact, against the 16px / 12px base padding.
92
- compoundVariants: [
93
- { size: 'compact', iconLeft: true, className: 'pl-2' },
94
- { size: 'default', iconLeft: true, className: 'pl-3' },
95
- { size: 'compact', iconRight: true, className: 'pr-2' },
96
- { size: 'default', iconRight: true, className: 'pr-3' },
97
- // A link is text: no surface to pad, but it keeps the control height so
98
- // it still lines up with the buttons beside it.
99
- { variant: 'link', size: ['default', 'compact'], className: 'px-0' },
100
- // One transition list per element: a link fades its underline, a
101
- // surface its fill and ring.
102
- { variant: 'link', className: 'transition-[color,opacity,text-decoration-color]' },
103
- { variant: SURFACED, surface: false, className: 'transition-[color,opacity]' },
104
- {
105
- variant: SURFACED,
106
- surface: true,
107
- className: 'no-underline transition-[color,opacity,background-color,box-shadow]',
108
- },
109
- ...SURFACED.map(variant => ({ variant, surface: true, className: surfaceVariants[variant] })),
110
- // The Button sizes its icons by prop; children of a surface host are sized here.
111
- { surface: true, size: 'default', className: '[&_svg]:size-4' },
112
- { surface: true, size: 'compact', className: '[&_svg]:size-3.5' },
113
- ],
114
- defaultVariants: {
115
- variant: 'primary',
116
- size: 'default',
117
- surface: false,
118
- },
119
- },
120
- )
121
-
122
- type ButtonSizeCanonical = 'default' | 'compact' | 'icon' | 'icon-compact'
123
-
124
- /** Public size values: the canonical two-size scale plus aliases, kept so
125
- * existing call sites keep compiling. Aliases resolve onto the canonical
126
- * ladder (sm, xs → compact; md/lg → default). The ladder has two steps, so
127
- * `xs` is compact rather than a third height. */
128
- type ButtonSize = ButtonSizeCanonical | 'xs' | 'sm' | 'md' | 'lg' | 'icon-sm' | 'icon-lg'
129
-
130
- const legacySizeAliases: Partial<Record<ButtonSize, ButtonSizeCanonical>> = {
131
- xs: 'compact',
132
- sm: 'compact',
133
- md: 'default',
134
- lg: 'default',
135
- 'icon-sm': 'icon-compact',
136
- 'icon-lg': 'icon',
137
- }
138
-
139
- type ButtonRecipeOptions = NonNullable<Parameters<typeof buttonRecipe>[0]>
140
-
141
- /** Options of `buttonVariants`: the Button's look, picked without rendering one. */
142
- interface ButtonVariantsOptions extends Omit<ButtonRecipeOptions, 'size'> {
143
- /** Visual style. Defaults to `"primary"`. */
144
- variant?: ButtonVariant | null
145
- /** Step on the size ladder; the aliases resolve as on the Button (xs, sm → compact; md, lg → default; icon-sm → icon-compact; icon-lg → icon). Defaults to `"default"`. */
146
- size?: ButtonSize | null
147
- /** Draw the fill, ring, hover, press and disabled (`aria-disabled`) look on the element itself, for a host that is not a Button, such as an `<a>`. Static: no press shrink or loading morph — prefer `<Button asChild>` when you can render a component. Defaults to `false`. */
148
- surface?: boolean | null
149
- }
150
-
151
- /**
152
- * The Button's class recipe, callable from server code (no JSX, hooks or
153
- * context). Without `surface` it returns the root classes the Button builds
154
- * on: layout, label color, size, focus ring — the fill lives on the Button's
155
- * inner layer, so on its own it reads as a bare label. With `surface: true`
156
- * the fill and ring go on the element itself, for an anchor styled as a
157
- * button. Size aliases resolve onto the ladder; the radius is the rounded
158
- * shape's (pass `rounded-[20px]` or read `useShape().button` for pill).
159
- */
160
- function buttonVariants({ size, ...options }: ButtonVariantsOptions = {}): string {
161
- const canonical = size ? (legacySizeAliases[size] ?? (size as ButtonSizeCanonical)) : size
162
- return buttonRecipe({ ...options, size: canonical } as ButtonRecipeOptions)
163
- }
164
-
165
- type ButtonVariantsProps = VariantProps<typeof buttonVariants>
166
-
167
- export type { ButtonSize, ButtonSizeCanonical, ButtonVariant, ButtonVariantsOptions, ButtonVariantsProps }
168
- export { buttonVariants, legacySizeAliases }
@@ -1,251 +0,0 @@
1
- import Card from './index'
2
- import { Circle, Moon, Paintbrush, Palette, Shield, SquareLibrary } from 'lucide-react'
3
-
4
- # Basics
5
-
6
- ## Basic
7
-
8
- Borderless inline list: icon + a ghost action, divided by hairlines.
9
-
10
- <div className="w-full max-w-[520px]">
11
- <Card.Group orientation="inline">
12
- {[
13
- { icon: Circle, title: 'Fluid motion', description: 'Spring-tuned transitions calibrated across three tiers' },
14
- { icon: Shield, title: 'Accessible by default', description: 'Focus-visible rings and ARIA roles in every part' },
15
- { icon: Palette, title: 'Yours to theme', description: 'Swap radius, icons, and primitive at runtime' },
16
- { icon: Moon, title: 'Dark mode ready', description: 'Tokens adapt to light and dark automatically' },
17
- ].map((f) => (
18
- <Card key={f.title} onClick={() => {}}>
19
- <Card.Media icon={f.icon} />
20
- <Card.Header>
21
- <Card.Title>{f.title}</Card.Title>
22
- <Card.Description>{f.description}</Card.Description>
23
- </Card.Header>
24
- <Card.Footer>
25
- <Card.Button>Connect</Card.Button>
26
- </Card.Footer>
27
- </Card>
28
- ))}
29
- </Card.Group>
30
- </div>
31
-
32
- ## Heading level
33
-
34
- `Card.Title` is a `span` by default. `as` renders it as a heading level for the page's outline (`h2`, `h3`, …) or as another tag; the look stays the same. The title below is a third-level heading, since this docs page already has its own `h1` and `h2` sections.
35
-
36
- <div className="w-full max-w-[360px]">
37
- <Card border="outlined">
38
- <Card.Header>
39
- <Card.Title as="h3">Notifications</Card.Title>
40
- <Card.Description>Where we send what you subscribed to.</Card.Description>
41
- </Card.Header>
42
- <Card.Content bodyText className="text-muted-foreground">Email and push, daily digest.</Card.Content>
43
- </Card>
44
- </div>
45
-
46
- ## Body text
47
-
48
- `bodyText` on `Card.Content` sets the size ladder's body size (one step down in a compact region), so plain text inside no longer takes the size of the page around the card. It is off by default because content inherits its size, and a host that has been relying on that would see its text change. Both cards sit in a region set in the title size.
49
-
50
- <div className="flex w-full max-w-[560px] flex-col gap-4 text-title">
51
- <Card border="outlined">
52
- <Card.Header>
53
- <Card.Title>Inherited</Card.Title>
54
- </Card.Header>
55
- <Card.Content className="text-muted-foreground">The content takes the title size of its surroundings.</Card.Content>
56
- </Card>
57
- <Card border="outlined">
58
- <Card.Header>
59
- <Card.Title>Body text</Card.Title>
60
- </Card.Header>
61
- <Card.Content bodyText className="text-muted-foreground">The content takes the ladder's body size.</Card.Content>
62
- </Card>
63
- </div>
64
-
65
- ## Fully yours — compose anything
66
-
67
- A standalone promo card tuned to a narrow 300px column: banner, features,
68
- actions and a dismiss control revealed on hover or focus. (Upstream's demo
69
- hides the card on dismiss; here `onDismiss` is a no-op.)
70
-
71
- <div className="w-full max-w-[300px]">
72
- <Card dismissible onDismiss={() => {}} className="border border-border/60 overflow-hidden rounded-xl">
73
- <Card.Image src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'><radialGradient id='a' cx='.2' cy='.15' r='1'><stop stop-color='%236B97FF' stop-opacity='.9'/><stop offset='1' stop-color='%236B97FF' stop-opacity='.15'/></radialGradient><rect width='1' height='1' fill='white'/><rect width='1' height='1' fill='url(%23a)'/></svg>" />
74
- <Card.Header>
75
- <Card.Title>Meet the new Card component</Card.Title>
76
- </Card.Header>
77
- <Card.Content className="flex flex-col gap-3">
78
- <Card.Feature icon={Paintbrush} title="Always pixel-perfect" description="Renders your design exactly — token-driven and crisp in light and dark, at any radius" />
79
- <Card.Feature icon={SquareLibrary} title="Stacked, inline, or grid" description="One compositional API — borderless by default, with separated tiles or a shared frame" />
80
- </Card.Content>
81
- <Card.Footer>
82
- <Card.Button variant="primary">Get started</Card.Button>
83
- <Card.Button variant="ghost">Learn more</Card.Button>
84
- </Card.Footer>
85
- </Card>
86
- </div>
87
-
88
- # Variants
89
-
90
- ## Outlined
91
-
92
- `border="outlined"` frames a standalone card in a hairline, the same frame an
93
- outlined group gives its tiles. Borderless stays the default.
94
-
95
- <div className="w-full max-w-[360px]">
96
- <Card border="outlined">
97
- <Card.Header>
98
- <Card.Title>Billing</Card.Title>
99
- <Card.Description>Your plan renews on 1 November.</Card.Description>
100
- </Card.Header>
101
- <Card.Content className="text-body text-muted-foreground">Team plan, 12 seats, paid yearly.</Card.Content>
102
- <Card.Footer>
103
- <Card.Button variant="secondary">Change plan</Card.Button>
104
- <Card.Button>View invoices</Card.Button>
105
- </Card.Footer>
106
- </Card>
107
- </div>
108
-
109
- ## Divider
110
-
111
- `Card.Divider` runs a hairline across the card between two parts, edge to
112
- edge and spaced like the parts. In an inline card it stands upright.
113
-
114
- <div className="flex w-full max-w-[520px] flex-col gap-6">
115
- <Card border="outlined" className="max-w-[360px]">
116
- <Card.Header>
117
- <Card.Title>Request #4182</Card.Title>
118
- <Card.Description>Submitted by Ada Lovelace</Card.Description>
119
- </Card.Header>
120
- <Card.Content className="text-body text-muted-foreground">Three items, waiting for approval.</Card.Content>
121
- <Card.Divider />
122
- <Card.Footer>
123
- <Card.Button variant="primary">Approve</Card.Button>
124
- <Card.Button>Decline</Card.Button>
125
- </Card.Footer>
126
- </Card>
127
- <Card.Group orientation="inline" border="outlined">
128
- <Card>
129
- <Card.Media icon={Shield} />
130
- <Card.Header>
131
- <Card.Title>Two-step sign-in</Card.Title>
132
- <Card.Description>On for every member</Card.Description>
133
- </Card.Header>
134
- <Card.Divider />
135
- <Card.Footer>
136
- <Card.Button>Manage</Card.Button>
137
- </Card.Footer>
138
- </Card>
139
- </Card.Group>
140
- </div>
141
-
142
- ## Selected
143
-
144
- Clickable selection — one active card carries the fill, its title bolds,
145
- and the group drops the dividers around it. The selection here is fixed on
146
- the second card; drive `selected` from your own state to follow clicks.
147
-
148
- <div className="w-full max-w-[520px]">
149
- <Card.Group orientation="inline">
150
- {[
151
- { icon: Circle, title: 'Fluid motion', description: 'Spring-tuned transitions calibrated across three tiers' },
152
- { icon: Shield, title: 'Accessible by default', description: 'Focus-visible rings and ARIA roles in every part' },
153
- { icon: Palette, title: 'Yours to theme', description: 'Swap radius, icons, and primitive at runtime' },
154
- { icon: Moon, title: 'Dark mode ready', description: 'Tokens adapt to light and dark automatically' },
155
- ].map((f, i) => (
156
- <Card key={f.title} label={f.title} selected={i === 1} onClick={() => {}}>
157
- <Card.Media icon={f.icon} />
158
- <Card.Header>
159
- <Card.Title>{f.title}</Card.Title>
160
- <Card.Description>{f.description}</Card.Description>
161
- </Card.Header>
162
- </Card>
163
- ))}
164
- </Card.Group>
165
- </div>
166
-
167
- # Layouts
168
-
169
- ## Grid: 2-D fluid hover
170
-
171
- Two-column grid of image tiles — `columns` above 1 turns on 2-D fluid
172
- hover: the highlight springs to the nearest card across rows and columns.
173
-
174
- <div className="w-full max-w-[560px]">
175
- <Card.Group columns={2} border="outlined" separated>
176
- {[
177
- { title: 'Fluid motion', description: 'Spring-tuned transitions calibrated across three tiers' },
178
- { title: 'Accessible by default', description: 'Focus-visible rings and ARIA roles in every part' },
179
- { title: 'Yours to theme', description: 'Swap radius, icons, and primitive at runtime' },
180
- { title: 'Dark mode ready', description: 'Tokens adapt to light and dark automatically' },
181
- ].map((f) => (
182
- <Card key={f.title} onClick={() => {}}>
183
- <Card.Image src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'><radialGradient id='a' cx='.2' cy='.15' r='1'><stop stop-color='%236B97FF' stop-opacity='.9'/><stop offset='1' stop-color='%236B97FF' stop-opacity='.15'/></radialGradient><rect width='1' height='1' fill='white'/><rect width='1' height='1' fill='url(%23a)'/></svg>" />
184
- <Card.Header>
185
- <Card.Title>{f.title}</Card.Title>
186
- <Card.Description>{f.description}</Card.Description>
187
- </Card.Header>
188
- <Card.Footer>
189
- <Card.Button variant="primary">Get started</Card.Button>
190
- <Card.Button variant="secondary">Learn more</Card.Button>
191
- </Card.Footer>
192
- </Card>
193
- ))}
194
- </Card.Group>
195
- </div>
196
-
197
- ## Outlined group
198
-
199
- One shared outlined frame, rows split by dividers: logo + primary.
200
- Card.Media also accepts a [logoA, logoB] tuple for a connected pair.
201
-
202
- <div className="w-full max-w-[520px]">
203
- <Card.Group orientation="inline" border="outlined">
204
- {[
205
- { title: 'Fluid motion', description: 'Spring-tuned transitions calibrated across three tiers' },
206
- { title: 'Accessible by default', description: 'Focus-visible rings and ARIA roles in every part' },
207
- { title: 'Yours to theme', description: 'Swap radius, icons, and primitive at runtime' },
208
- { title: 'Dark mode ready', description: 'Tokens adapt to light and dark automatically' },
209
- ].map((f) => (
210
- <Card key={f.title} onClick={() => {}}>
211
- <Card.Media logo="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'><radialGradient id='a' cx='.2' cy='.15' r='1'><stop stop-color='%236B97FF' stop-opacity='.9'/><stop offset='1' stop-color='%236B97FF' stop-opacity='.15'/></radialGradient><rect width='1' height='1' fill='white'/><rect width='1' height='1' fill='url(%23a)'/></svg>" />
212
- <Card.Header>
213
- <Card.Title>{f.title}</Card.Title>
214
- <Card.Description>{f.description}</Card.Description>
215
- </Card.Header>
216
- <Card.Footer>
217
- <Card.Button variant="primary">Get started</Card.Button>
218
- </Card.Footer>
219
- </Card>
220
- ))}
221
- </Card.Group>
222
- </div>
223
-
224
- ## Separated tiles
225
-
226
- Separated inline tiles with a full-height image; the action row drops
227
- below the text (primary, secondary, ghost).
228
-
229
- <div className="w-full max-w-[560px]">
230
- <Card.Group orientation="inline" separated>
231
- {[
232
- { title: 'Fluid motion', description: 'Spring-tuned transitions calibrated across three tiers' },
233
- { title: 'Accessible by default', description: 'Focus-visible rings and ARIA roles in every part' },
234
- { title: 'Yours to theme', description: 'Swap radius, icons, and primitive at runtime' },
235
- { title: 'Dark mode ready', description: 'Tokens adapt to light and dark automatically' },
236
- ].map((f) => (
237
- <Card key={f.title} onClick={() => {}}>
238
- <Card.Image src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'><radialGradient id='a' cx='.2' cy='.15' r='1'><stop stop-color='%236B97FF' stop-opacity='.9'/><stop offset='1' stop-color='%236B97FF' stop-opacity='.15'/></radialGradient><rect width='1' height='1' fill='white'/><rect width='1' height='1' fill='url(%23a)'/></svg>" />
239
- <Card.Header>
240
- <Card.Title>{f.title}</Card.Title>
241
- <Card.Description>{f.description}</Card.Description>
242
- </Card.Header>
243
- <Card.Footer>
244
- <Card.Button variant="primary">Get started</Card.Button>
245
- <Card.Button variant="secondary">Learn more</Card.Button>
246
- <Card.Button>Connect</Card.Button>
247
- </Card.Footer>
248
- </Card>
249
- ))}
250
- </Card.Group>
251
- </div>