@justanarthur/modo-ui 0.6.0-canary.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -164
- package/dist/base.css +4 -141
- package/dist/blocks/sidebar-app/index.js +26 -40
- package/dist/components/AI/input-message/index.js +16 -23
- package/dist/components/AI/thinking-indicator/index.js +6 -9
- package/dist/components/accordion/index.d.ts +11 -39
- package/dist/components/accordion/index.js +13 -18
- package/dist/components/badge/index.d.ts +11 -18
- package/dist/components/badge/index.js +7 -12
- package/dist/components/button/index.d.ts +17 -53
- package/dist/components/button/index.js +6 -11
- package/dist/components/card/index.d.ts +9 -32
- package/dist/components/card/index.js +11 -17
- package/dist/components/copy/index.d.ts +8 -41
- package/dist/components/copy/index.js +9 -15
- package/dist/components/inputs/checkbox/index.d.ts +9 -28
- package/dist/components/inputs/checkbox/index.js +13 -18
- package/dist/components/inputs/color-picker/index.d.ts +14 -22
- package/dist/components/inputs/color-picker/index.js +18 -26
- package/dist/components/inputs/combobox/index.d.ts +20 -85
- package/dist/components/inputs/combobox/index.js +18 -27
- package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
- package/dist/components/inputs/date-time/calendar/index.js +11 -15
- package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
- package/dist/components/inputs/date-time/date-picker/index.js +25 -35
- package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
- package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
- package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
- package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
- package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
- package/dist/components/inputs/date-time/month-picker/index.js +23 -32
- package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
- package/dist/components/inputs/date-time/time-picker/index.js +24 -33
- package/dist/components/inputs/input/index.d.ts +13 -95
- package/dist/components/inputs/input/index.js +9 -18
- package/dist/components/inputs/radio/index.d.ts +5 -20
- package/dist/components/inputs/radio/index.js +12 -16
- package/dist/components/inputs/search/index.d.ts +3 -3
- package/dist/components/inputs/search/index.js +18 -26
- package/dist/components/inputs/select/index.d.ts +23 -99
- package/dist/components/inputs/select/index.js +14 -29
- package/dist/components/inputs/slider/index.d.ts +0 -9
- package/dist/components/inputs/slider/index.js +5 -8
- package/dist/components/inputs/switch/index.d.ts +2 -8
- package/dist/components/inputs/switch/index.js +12 -15
- package/dist/components/inputs/textarea/index.d.ts +1 -20
- package/dist/components/inputs/textarea/index.js +6 -9
- package/dist/components/navigation/sidebar/index.d.ts +21 -44
- package/dist/components/navigation/sidebar/index.js +31 -42
- package/dist/components/navigation/tabs/index.d.ts +2 -8
- package/dist/components/navigation/tabs/index.js +10 -15
- package/dist/components/navigation/tabs-subtle/index.js +10 -13
- package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
- package/dist/components/overlays/alert-dialog/index.js +13 -23
- package/dist/components/overlays/command/index.d.ts +20 -25
- package/dist/components/overlays/command/index.js +17 -25
- package/dist/components/overlays/context-menu/index.d.ts +17 -39
- package/dist/components/overlays/context-menu/index.js +18 -29
- package/dist/components/overlays/dialog/index.d.ts +16 -42
- package/dist/components/overlays/dialog/index.js +12 -20
- package/dist/components/overlays/dropdown/index.d.ts +34 -304
- package/dist/components/overlays/dropdown/index.js +17 -44
- package/dist/components/overlays/popover/index.d.ts +12 -38
- package/dist/components/overlays/popover/index.js +9 -13
- package/dist/components/overlays/preview-card/index.js +8 -12
- package/dist/components/overlays/sheet/index.d.ts +8 -25
- package/dist/components/overlays/sheet/index.js +13 -19
- package/dist/components/overlays/toast/index.d.ts +50 -209
- package/dist/components/overlays/toast/index.js +10 -23
- package/dist/components/overlays/tooltip/index.d.ts +21 -123
- package/dist/components/overlays/tooltip/index.js +6 -16
- package/dist/components/table/index.d.ts +8 -63
- package/dist/components/table/index.js +9 -20
- package/dist/index.d.ts +1048 -2999
- package/dist/index.js +82 -231
- package/dist/preset.d.ts +0 -22
- package/dist/preset.js +2 -24
- package/dist/primitives/code/index.js +5 -8
- package/dist/primitives/craft/index.js +6 -10
- package/dist/primitives/fluid-hover/index.js +8 -10
- package/dist/primitives/morph/index.js +10 -16
- package/dist/primitives/motion/index.js +8 -11
- package/dist/primitives/scroll-area/index.js +3 -5
- package/dist/primitives/sizes/index.js +4 -6
- package/dist/primitives/surface/index.js +4 -6
- package/dist/shared/{components-4y816hwp.js → components-0q0sqfh4.js} +49 -27
- package/dist/shared/components-0sn7ypjw.js +61 -0
- package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
- package/dist/shared/components-1434p1mh.js +123 -0
- package/dist/shared/{components-t2a3qmy9.js → components-1z6tdadk.js} +24 -40
- package/dist/shared/{components-qs4rkqsj.js → components-27nnvrwe.js} +14 -15
- package/dist/shared/{components-av5t26rc.js → components-2dxkv6zm.js} +7 -8
- package/dist/shared/{components-wqrvqq5p.js → components-2ecg8svx.js} +152 -234
- package/dist/shared/{components-3ydr2fqe.js → components-2ph6t61s.js} +34 -37
- package/dist/shared/{components-6gk118w3.js → components-39jq9va1.js} +24 -29
- package/dist/shared/components-3ky44908.js +9 -0
- package/dist/shared/{components-y1qvbawa.js → components-3mkepka5.js} +25 -28
- package/dist/shared/{components-xqszvkj4.js → components-4700p9kz.js} +22 -24
- package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
- package/dist/shared/{components-9j9abkct.js → components-5vgpnxgy.js} +27 -51
- package/dist/shared/{components-8tt3xbb5.js → components-5xc2j8jz.js} +18 -19
- package/dist/shared/{components-jymmaevv.js → components-6p8tfcd6.js} +29 -57
- package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
- package/dist/shared/{components-skfd7kff.js → components-8snj490h.js} +32 -78
- package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
- package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
- package/dist/shared/{components-vkwq2k96.js → components-b3c5et5b.js} +38 -49
- package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
- package/dist/shared/{components-pw06rbxq.js → components-chacnk61.js} +19 -19
- package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
- package/dist/shared/{components-eqze3y30.js → components-d6xtjht3.js} +30 -35
- package/dist/shared/{components-5y5shqfd.js → components-dk0gjr5a.js} +18 -19
- package/dist/shared/{components-khspp26b.js → components-fzrq6tr3.js} +34 -37
- package/dist/shared/{components-km7fhgbk.js → components-gc5vtq2f.js} +30 -66
- package/dist/shared/components-gf5s6ap9.js +42 -0
- package/dist/shared/{components-qqcmtrbv.js → components-gz8zf3ec.js} +55 -56
- package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
- package/dist/shared/{components-awra5sff.js → components-hqeq3w9q.js} +16 -24
- package/dist/shared/{components-5tzhqbcw.js → components-hw9yk32z.js} +24 -36
- package/dist/shared/components-hyq23phv.js +310 -0
- package/dist/shared/{components-8mt5bsv6.js → components-jbbmdr74.js} +22 -41
- package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
- package/dist/shared/{components-2syq4mwc.js → components-jthe1pwb.js} +420 -139
- package/dist/shared/{components-r7q1zm7r.js → components-jwst3vtj.js} +76 -224
- package/dist/shared/{components-qdm3yh26.js → components-kvr7f9hy.js} +10 -19
- package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
- package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
- package/dist/shared/{components-6b0zb8z3.js → components-mjthm1kf.js} +9 -13
- package/dist/shared/{components-2c64r8c9.js → components-n42c79bz.js} +22 -23
- package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
- package/dist/shared/components-ng72k97e.js +128 -0
- package/dist/shared/{components-dyae0y7h.js → components-pbmqctfa.js} +65 -169
- package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
- package/dist/shared/components-raknhppb.js +64 -0
- package/dist/shared/{components-8rb25gbe.js → components-rr7a6ja9.js} +27 -59
- package/dist/shared/{components-5012r6gr.js → components-s083f38z.js} +34 -164
- package/dist/shared/components-s5ngg32c.js +267 -0
- package/dist/shared/components-sn1rxx1d.js +143 -0
- package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
- package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
- package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
- package/dist/shared/components-vynjtrk6.js +19 -0
- package/dist/shared/{components-w0xq6q9k.js → components-w1r67ag9.js} +149 -294
- package/dist/shared/{components-z0bqtvcp.js → components-w90endve.js} +72 -71
- package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
- package/dist/shared/components-wy9jpqny.js +146 -0
- package/dist/shared/{components-5sxjeh6h.js → components-y9y0g8er.js} +28 -52
- package/dist/shared/components-ypp01w3p.js +986 -0
- package/dist/shared/{components-t50hrswb.js → components-zfnmn5d4.js} +36 -82
- package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
- package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
- package/dist/styles.css +32 -320
- package/dist/tailwind.css +0 -16
- package/dist/tokens.css +0 -67
- package/package.json +4 -227
- package/DESIGN.md +0 -623
- package/blocks/sidebar-app/examples.mdx +0 -33
- package/blocks/sidebar-app/index.tsx +0 -218
- package/blocks/sidebar-app/inset-topbar.tsx +0 -25
- package/blocks/sidebar-app/menu-grid.ts +0 -26
- package/blocks/sidebar-app/nav-data.ts +0 -36
- package/blocks/sidebar-app/search-field.tsx +0 -48
- package/blocks/sidebar-app/user-footer.tsx +0 -67
- package/blocks/sidebar-app/workspace-header.tsx +0 -129
- package/components/AI/input-message/examples.mdx +0 -130
- package/components/AI/input-message/file-thumbnail.tsx +0 -173
- package/components/AI/input-message/index.tsx +0 -1385
- package/components/AI/thinking-indicator/examples.mdx +0 -27
- package/components/AI/thinking-indicator/index.tsx +0 -210
- package/components/accordion/examples.mdx +0 -233
- package/components/accordion/index.tsx +0 -1071
- package/components/avatar/examples.mdx +0 -95
- package/components/avatar/index.tsx +0 -129
- package/components/badge/change-demo.tsx +0 -29
- package/components/badge/examples.mdx +0 -124
- package/components/badge/index.tsx +0 -225
- package/components/badge/variants.ts +0 -73
- package/components/button/examples.mdx +0 -168
- package/components/button/index.tsx +0 -424
- package/components/button/loading-demo.tsx +0 -25
- package/components/button/variants.ts +0 -168
- package/components/card/examples.mdx +0 -251
- package/components/card/index.tsx +0 -1070
- package/components/copy/examples.mdx +0 -125
- package/components/copy/index.tsx +0 -662
- package/components/inputs/checkbox/examples.mdx +0 -87
- package/components/inputs/checkbox/index.tsx +0 -611
- package/components/inputs/checkbox/select-all-demo.tsx +0 -48
- package/components/inputs/color-picker/examples.mdx +0 -111
- package/components/inputs/color-picker/index.tsx +0 -1981
- package/components/inputs/color-picker/variants.ts +0 -401
- package/components/inputs/combobox/examples.mdx +0 -366
- package/components/inputs/combobox/index.tsx +0 -1527
- package/components/inputs/combobox/remote-demo.tsx +0 -105
- package/components/inputs/date-time/calendar/examples.mdx +0 -45
- package/components/inputs/date-time/calendar/index.tsx +0 -370
- package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
- package/components/inputs/date-time/date-picker/examples.mdx +0 -243
- package/components/inputs/date-time/date-picker/index.tsx +0 -476
- package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
- package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
- package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
- package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
- package/components/inputs/date-time/duration-picker/index.tsx +0 -253
- package/components/inputs/date-time/month-picker/examples.mdx +0 -45
- package/components/inputs/date-time/month-picker/index.tsx +0 -254
- package/components/inputs/date-time/picker-shell.tsx +0 -581
- package/components/inputs/date-time/time-columns.tsx +0 -94
- package/components/inputs/date-time/time-picker/examples.mdx +0 -57
- package/components/inputs/date-time/time-picker/index.tsx +0 -227
- package/components/inputs/field/examples.mdx +0 -117
- package/components/inputs/field/index.tsx +0 -268
- package/components/inputs/file-dropzone/examples.mdx +0 -83
- package/components/inputs/file-dropzone/file-row.tsx +0 -201
- package/components/inputs/file-dropzone/index.tsx +0 -316
- package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
- package/components/inputs/file-dropzone/variants.ts +0 -94
- package/components/inputs/input/examples.mdx +0 -166
- package/components/inputs/input/index.tsx +0 -494
- package/components/inputs/input/password-demo.tsx +0 -30
- package/components/inputs/label/examples.mdx +0 -67
- package/components/inputs/label/index.tsx +0 -85
- package/components/inputs/number-input/examples.mdx +0 -69
- package/components/inputs/number-input/index.tsx +0 -221
- package/components/inputs/radio/examples.mdx +0 -77
- package/components/inputs/radio/index.tsx +0 -636
- package/components/inputs/search/examples.mdx +0 -74
- package/components/inputs/search/index.tsx +0 -333
- package/components/inputs/select/examples.mdx +0 -296
- package/components/inputs/select/index.tsx +0 -1044
- package/components/inputs/select/variants.ts +0 -32
- package/components/inputs/slider/examples.mdx +0 -153
- package/components/inputs/slider/index.tsx +0 -1867
- package/components/inputs/switch/examples.mdx +0 -96
- package/components/inputs/switch/index.tsx +0 -504
- package/components/inputs/textarea/examples.mdx +0 -126
- package/components/inputs/textarea/index.tsx +0 -207
- package/components/navigation/navigation-menu/examples.mdx +0 -136
- package/components/navigation/navigation-menu/index.tsx +0 -704
- package/components/navigation/pagination/examples.mdx +0 -74
- package/components/navigation/pagination/index.tsx +0 -401
- package/components/navigation/sidebar/examples.mdx +0 -325
- package/components/navigation/sidebar/index.tsx +0 -453
- package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
- package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
- package/components/navigation/sidebar/sidebar.css +0 -74
- package/components/navigation/sidebar/variants.ts +0 -55
- package/components/navigation/tabs/examples.mdx +0 -89
- package/components/navigation/tabs/index.tsx +0 -494
- package/components/navigation/tabs-subtle/examples.mdx +0 -49
- package/components/navigation/tabs-subtle/index.tsx +0 -512
- package/components/overlays/alert-dialog/examples.mdx +0 -123
- package/components/overlays/alert-dialog/index.tsx +0 -276
- package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
- package/components/overlays/command/examples.mdx +0 -113
- package/components/overlays/command/index.tsx +0 -425
- package/components/overlays/context-menu/examples.mdx +0 -56
- package/components/overlays/context-menu/index.tsx +0 -279
- package/components/overlays/dialog/examples.mdx +0 -165
- package/components/overlays/dialog/index.tsx +0 -451
- package/components/overlays/dropdown/dropdown-search.tsx +0 -395
- package/components/overlays/dropdown/examples.mdx +0 -444
- package/components/overlays/dropdown/index.tsx +0 -1241
- package/components/overlays/dropdown/menu-item.tsx +0 -510
- package/components/overlays/dropdown/menu-parts.tsx +0 -725
- package/components/overlays/popover/anchored-demo.tsx +0 -59
- package/components/overlays/popover/examples.mdx +0 -203
- package/components/overlays/popover/index.tsx +0 -317
- package/components/overlays/preview-card/examples.mdx +0 -61
- package/components/overlays/preview-card/index.tsx +0 -204
- package/components/overlays/sheet/examples.mdx +0 -101
- package/components/overlays/sheet/index.tsx +0 -307
- package/components/overlays/toast/examples.mdx +0 -85
- package/components/overlays/toast/global-demo.tsx +0 -72
- package/components/overlays/toast/index.tsx +0 -544
- package/components/overlays/toast/manager.ts +0 -193
- package/components/overlays/tooltip/examples.mdx +0 -106
- package/components/overlays/tooltip/index.tsx +0 -539
- package/components/progress/examples.mdx +0 -59
- package/components/progress/index.tsx +0 -174
- package/components/progress/progress.css +0 -49
- package/components/progress/step-demo.tsx +0 -27
- package/components/table/examples.mdx +0 -188
- package/components/table/index.tsx +0 -535
- package/components/table/sort-demo.tsx +0 -61
- package/dist/components/avatar/index.d.ts +0 -46
- package/dist/components/avatar/index.js +0 -19
- package/dist/components/badge/variants.d.ts +0 -33
- package/dist/components/badge/variants.js +0 -10
- package/dist/components/button/variants.d.ts +0 -39
- package/dist/components/button/variants.js +0 -8
- package/dist/components/inputs/color-picker/variants.d.ts +0 -61
- package/dist/components/inputs/color-picker/variants.js +0 -28
- package/dist/components/inputs/field/index.d.ts +0 -116
- package/dist/components/inputs/field/index.js +0 -29
- package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
- package/dist/components/inputs/file-dropzone/index.js +0 -33
- package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
- package/dist/components/inputs/file-dropzone/variants.js +0 -12
- package/dist/components/inputs/label/index.d.ts +0 -32
- package/dist/components/inputs/label/index.js +0 -11
- package/dist/components/inputs/number-input/index.d.ts +0 -87
- package/dist/components/inputs/number-input/index.js +0 -21
- package/dist/components/inputs/select/variants.d.ts +0 -5
- package/dist/components/inputs/select/variants.js +0 -6
- package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
- package/dist/components/navigation/navigation-menu/index.js +0 -41
- package/dist/components/navigation/pagination/index.d.ts +0 -75
- package/dist/components/navigation/pagination/index.js +0 -41
- package/dist/components/navigation/sidebar/variants.d.ts +0 -25
- package/dist/components/navigation/sidebar/variants.js +0 -28
- package/dist/components/progress/index.d.ts +0 -56
- package/dist/components/progress/index.js +0 -15
- package/dist/docs/index.d.ts +0 -83
- package/dist/docs/index.js +0 -288
- package/dist/docs/vite.d.ts +0 -31
- package/dist/docs/vite.js +0 -45
- package/dist/lib/date-locale.d.ts +0 -26
- package/dist/lib/date-locale.js +0 -24
- package/dist/lib/field-classes.d.ts +0 -149
- package/dist/lib/field-classes.js +0 -41
- package/dist/lib/field-variants.d.ts +0 -47
- package/dist/lib/field-variants.js +0 -26
- package/dist/lib/fluid-hover-highlight.d.ts +0 -112
- package/dist/lib/fluid-hover-highlight.js +0 -17
- package/dist/lib/focus-ring.d.ts +0 -18
- package/dist/lib/focus-ring.js +0 -11
- package/dist/lib/goo-indicator.d.ts +0 -46
- package/dist/lib/goo-indicator.js +0 -14
- package/dist/lib/icon-context.d.ts +0 -30
- package/dist/lib/icon-context.js +0 -12
- package/dist/lib/inert.d.ts +0 -9
- package/dist/lib/inert.js +0 -8
- package/dist/lib/morph-layers.d.ts +0 -93
- package/dist/lib/morph-layers.js +0 -13
- package/dist/lib/morph-part.d.ts +0 -21
- package/dist/lib/morph-part.js +0 -12
- package/dist/lib/popup.d.ts +0 -20
- package/dist/lib/popup.js +0 -12
- package/dist/lib/reduced-motion.d.ts +0 -9
- package/dist/lib/reduced-motion.js +0 -6
- package/dist/lib/row-index.d.ts +0 -10
- package/dist/lib/row-index.js +0 -8
- package/dist/lib/row-order.d.ts +0 -28
- package/dist/lib/row-order.js +0 -10
- package/dist/lib/scroll-column.d.ts +0 -31
- package/dist/lib/scroll-column.js +0 -19
- package/dist/lib/shape-context.d.ts +0 -30
- package/dist/lib/shape-context.js +0 -13
- package/dist/lib/shape-radius.d.ts +0 -19
- package/dist/lib/shape-radius.js +0 -6
- package/dist/lib/size-context.d.ts +0 -94
- package/dist/lib/size-context.js +0 -20
- package/dist/lib/size-scale.d.ts +0 -79
- package/dist/lib/size-scale.js +0 -8
- package/dist/lib/slot.d.ts +0 -39
- package/dist/lib/slot.js +0 -14
- package/dist/lib/springs.d.ts +0 -44
- package/dist/lib/springs.js +0 -8
- package/dist/lib/surface-classes.d.ts +0 -19
- package/dist/lib/surface-classes.js +0 -10
- package/dist/lib/surface-context.d.ts +0 -9
- package/dist/lib/surface-context.js +0 -8
- package/dist/lib/use-controllable-state.d.ts +0 -2
- package/dist/lib/use-controllable-state.js +0 -6
- package/dist/lib/use-fluid-hover.d.ts +0 -138
- package/dist/lib/use-fluid-hover.js +0 -14
- package/dist/lib/use-is-mobile.d.ts +0 -2
- package/dist/lib/use-is-mobile.js +0 -6
- package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
- package/dist/lib/use-keyboard-nav-gate.js +0 -7
- package/dist/lib/use-merge-split.d.ts +0 -47
- package/dist/lib/use-merge-split.js +0 -15
- package/dist/lib/use-morph.d.ts +0 -101
- package/dist/lib/use-morph.js +0 -20
- package/dist/lib/use-touch-primary.d.ts +0 -2
- package/dist/lib/use-touch-primary.js +0 -6
- package/dist/lib/utils.d.ts +0 -3
- package/dist/lib/utils.js +0 -6
- package/dist/primitives/separator/index.d.ts +0 -25
- package/dist/primitives/separator/index.js +0 -9
- package/dist/primitives/skeleton/index.d.ts +0 -35
- package/dist/primitives/skeleton/index.js +0 -13
- package/dist/shared/components-124epb7f.js +0 -53
- package/dist/shared/components-1kab3j44.js +0 -337
- package/dist/shared/components-26snnbs9.js +0 -322
- package/dist/shared/components-34txk9rj.js +0 -35
- package/dist/shared/components-3h92d94m.js +0 -23
- package/dist/shared/components-4vfm04wq.js +0 -82
- package/dist/shared/components-54nq988h.js +0 -123
- package/dist/shared/components-7s7pykk5.js +0 -281
- package/dist/shared/components-7zkhz3r8.js +0 -399
- package/dist/shared/components-8v644a0s.js +0 -298
- package/dist/shared/components-a4evvq8h.js +0 -271
- package/dist/shared/components-adkarj8n.js +0 -35
- package/dist/shared/components-b1e239g3.js +0 -28
- package/dist/shared/components-b94t6qtj.js +0 -143
- package/dist/shared/components-c9yr4ed1.js +0 -44
- package/dist/shared/components-cwg1d0w6.js +0 -254
- package/dist/shared/components-d3shbwqq.js +0 -95
- package/dist/shared/components-dhgk6mbt.js +0 -16
- package/dist/shared/components-drxrtnp2.js +0 -25
- package/dist/shared/components-ej4r7wmj.js +0 -482
- package/dist/shared/components-f7h57m6t.js +0 -59
- package/dist/shared/components-fejdzvqc.js +0 -448
- package/dist/shared/components-gx4h5rbb.js +0 -40
- package/dist/shared/components-gyt7my41.js +0 -328
- package/dist/shared/components-h6p86be3.js +0 -19
- package/dist/shared/components-h83az0bz.js +0 -33
- package/dist/shared/components-hdzrqqpx.js +0 -55
- package/dist/shared/components-krtx3m5b.js +0 -84
- package/dist/shared/components-kswxnm3h.js +0 -24
- package/dist/shared/components-mpa2y6x8.js +0 -277
- package/dist/shared/components-mrbaxt8q.js +0 -62
- package/dist/shared/components-pt5ftm4p.js +0 -38
- package/dist/shared/components-rpw4md2b.js +0 -179
- package/dist/shared/components-rtadhd9j.js +0 -64
- package/dist/shared/components-tz4gaf1v.js +0 -23
- package/dist/shared/components-wbbckbw8.js +0 -34
- package/dist/shared/components-xdqmt6ed.js +0 -20
- package/dist/shared/components-xjkdvnbg.js +0 -107
- package/dist/shared/components-z3v0n0de.js +0 -11
- package/dist/shared/components-z6dfqtyt.js +0 -1545
- package/dist/tokens/colors.css +0 -230
- package/dist/tokens/motion.css +0 -40
- package/dist/tokens/radius.css +0 -10
- package/dist/tokens/spacing.css +0 -9
- package/dist/tokens/typography.css +0 -119
- package/docs/chrome.css +0 -120
- package/docs/chrome.tsx +0 -283
- package/docs/index.ts +0 -9
- package/docs/vite.ts +0 -85
- package/index.ts +0 -60
- package/lib/date-locale.ts +0 -195
- package/lib/field-classes.ts +0 -121
- package/lib/field-variants.ts +0 -117
- package/lib/fluid-hover-highlight.tsx +0 -139
- package/lib/focus-ring.tsx +0 -46
- package/lib/goo-indicator.tsx +0 -261
- package/lib/icon-context.tsx +0 -310
- package/lib/inert.ts +0 -22
- package/lib/morph-layers.tsx +0 -102
- package/lib/morph-part.tsx +0 -49
- package/lib/popup.ts +0 -52
- package/lib/reduced-motion.ts +0 -19
- package/lib/row-index.tsx +0 -29
- package/lib/row-order.tsx +0 -126
- package/lib/scroll-column.tsx +0 -273
- package/lib/shape-context.tsx +0 -138
- package/lib/shape-radius.ts +0 -67
- package/lib/size-context.tsx +0 -66
- package/lib/size-scale.ts +0 -115
- package/lib/slot.ts +0 -115
- package/lib/springs.ts +0 -62
- package/lib/surface-classes.ts +0 -58
- package/lib/surface-context.tsx +0 -21
- package/lib/use-controllable-state.ts +0 -44
- package/lib/use-fluid-hover.ts +0 -541
- package/lib/use-is-mobile.ts +0 -25
- package/lib/use-keyboard-nav-gate.ts +0 -45
- package/lib/use-merge-split.tsx +0 -209
- package/lib/use-morph.ts +0 -557
- package/lib/use-touch-primary.tsx +0 -43
- package/lib/utils.ts +0 -37
- package/preset.ts +0 -199
- package/primitives/code/examples.mdx +0 -27
- package/primitives/code/index.tsx +0 -80
- package/primitives/craft/demos.tsx +0 -173
- package/primitives/craft/examples.mdx +0 -142
- package/primitives/craft/index.tsx +0 -76
- package/primitives/fluid-hover/examples.mdx +0 -84
- package/primitives/fluid-hover/index.tsx +0 -316
- package/primitives/morph/examples.mdx +0 -139
- package/primitives/morph/index.tsx +0 -192
- package/primitives/motion/examples.mdx +0 -100
- package/primitives/motion/index.tsx +0 -160
- package/primitives/scroll-area/examples.mdx +0 -58
- package/primitives/scroll-area/index.tsx +0 -204
- package/primitives/separator/examples.mdx +0 -30
- package/primitives/separator/index.tsx +0 -53
- package/primitives/sizes/examples.mdx +0 -167
- package/primitives/sizes/index.tsx +0 -89
- package/primitives/skeleton/examples.mdx +0 -51
- package/primitives/skeleton/index.tsx +0 -72
- package/primitives/skeleton/skeleton.css +0 -15
- package/primitives/surface/examples.mdx +0 -173
- package/primitives/surface/index.tsx +0 -109
- package/primitives/surface/surface.css +0 -176
- /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
- /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>
|