@justanarthur/modo-ui 0.5.0 → 0.6.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +608 -0
- package/README.md +61 -39
- package/blocks/sidebar-app/examples.mdx +33 -0
- package/blocks/sidebar-app/index.tsx +218 -0
- package/blocks/sidebar-app/inset-topbar.tsx +25 -0
- package/blocks/sidebar-app/menu-grid.ts +26 -0
- package/blocks/sidebar-app/nav-data.ts +36 -0
- package/blocks/sidebar-app/search-field.tsx +48 -0
- package/blocks/sidebar-app/user-footer.tsx +67 -0
- package/blocks/sidebar-app/workspace-header.tsx +129 -0
- package/components/AI/input-message/examples.mdx +124 -0
- package/components/AI/input-message/file-thumbnail.tsx +173 -0
- package/components/AI/input-message/index.tsx +1383 -0
- package/components/AI/thinking-indicator/examples.mdx +27 -0
- package/components/AI/thinking-indicator/index.tsx +210 -0
- package/components/accordion/examples.mdx +148 -0
- package/components/accordion/index.tsx +1034 -0
- package/components/avatar/examples.mdx +95 -0
- package/components/avatar/index.tsx +129 -0
- package/components/badge/change-demo.tsx +29 -0
- package/components/badge/examples.mdx +120 -0
- package/components/badge/index.tsx +225 -0
- package/components/badge/variants.ts +73 -0
- package/components/button/examples.mdx +164 -0
- package/components/button/index.tsx +416 -0
- package/components/button/loading-demo.tsx +25 -0
- package/components/button/variants.ts +166 -0
- package/components/card/examples.mdx +212 -0
- package/components/card/index.tsx +1037 -0
- package/components/copy/examples.mdx +87 -0
- package/components/copy/index.tsx +482 -0
- package/components/inputs/checkbox/examples.mdx +83 -0
- package/components/inputs/checkbox/index.tsx +611 -0
- package/components/inputs/checkbox/select-all-demo.tsx +48 -0
- package/components/inputs/color-picker/examples.mdx +72 -0
- package/components/inputs/color-picker/index.tsx +1955 -0
- package/components/inputs/color-picker/variants.ts +401 -0
- package/components/inputs/combobox/examples.mdx +273 -0
- package/components/inputs/combobox/index.tsx +1436 -0
- package/components/inputs/combobox/remote-demo.tsx +101 -0
- package/components/inputs/date-time/calendar/examples.mdx +34 -0
- package/components/inputs/date-time/calendar/index.tsx +351 -0
- package/components/inputs/date-time/calendar/use-month-window.ts +163 -0
- package/components/inputs/date-time/date-picker/examples.mdx +166 -0
- package/components/inputs/date-time/date-picker/index.tsx +385 -0
- package/components/inputs/date-time/date-picker/masked-date-input.tsx +336 -0
- package/components/inputs/date-time/date-range-picker/examples.mdx +29 -0
- package/components/inputs/date-time/date-range-picker/index.tsx +217 -0
- package/components/inputs/date-time/duration-picker/examples.mdx +16 -0
- package/components/inputs/date-time/duration-picker/index.tsx +189 -0
- package/components/inputs/date-time/month-picker/examples.mdx +16 -0
- package/components/inputs/date-time/month-picker/index.tsx +190 -0
- package/components/inputs/date-time/picker-shell.tsx +395 -0
- package/components/inputs/date-time/time-columns.tsx +91 -0
- package/components/inputs/date-time/time-picker/examples.mdx +26 -0
- package/components/inputs/date-time/time-picker/index.tsx +166 -0
- package/components/inputs/field/examples.mdx +113 -0
- package/components/inputs/field/index.tsx +267 -0
- package/components/inputs/file-dropzone/examples.mdx +73 -0
- package/components/inputs/file-dropzone/file-row.tsx +201 -0
- package/components/inputs/file-dropzone/index.tsx +296 -0
- package/components/inputs/file-dropzone/upload-demo.tsx +67 -0
- package/components/inputs/file-dropzone/variants.ts +94 -0
- package/components/inputs/input/examples.mdx +135 -0
- package/components/inputs/input/index.tsx +494 -0
- package/components/inputs/input/password-demo.tsx +30 -0
- package/components/inputs/label/examples.mdx +67 -0
- package/components/inputs/label/index.tsx +85 -0
- package/components/inputs/number-input/examples.mdx +56 -0
- package/components/inputs/number-input/index.tsx +214 -0
- package/components/inputs/radio/examples.mdx +77 -0
- package/components/inputs/radio/index.tsx +636 -0
- package/components/inputs/search/examples.mdx +74 -0
- package/components/inputs/search/index.tsx +333 -0
- package/components/inputs/select/examples.mdx +218 -0
- package/components/inputs/select/index.tsx +862 -0
- package/components/inputs/select/variants.ts +32 -0
- package/components/inputs/slider/examples.mdx +127 -0
- package/components/inputs/slider/index.tsx +1725 -0
- package/components/inputs/switch/examples.mdx +94 -0
- package/components/inputs/switch/index.tsx +504 -0
- package/components/inputs/textarea/examples.mdx +88 -0
- package/components/inputs/textarea/index.tsx +161 -0
- package/components/navigation/navigation-menu/examples.mdx +109 -0
- package/components/navigation/navigation-menu/index.tsx +613 -0
- package/components/navigation/pagination/examples.mdx +64 -0
- package/components/navigation/pagination/index.tsx +395 -0
- package/components/navigation/sidebar/examples.mdx +319 -0
- package/components/navigation/sidebar/index.tsx +453 -0
- package/components/navigation/sidebar/sidebar-core.tsx +1408 -0
- package/components/navigation/sidebar/sidebar-menu.tsx +1495 -0
- package/components/navigation/sidebar/sidebar.css +74 -0
- package/components/navigation/sidebar/variants.ts +55 -0
- package/components/navigation/tabs/examples.mdx +89 -0
- package/components/navigation/tabs/index.tsx +494 -0
- package/components/navigation/tabs-subtle/examples.mdx +49 -0
- package/components/navigation/tabs-subtle/index.tsx +512 -0
- package/components/overlays/alert-dialog/examples.mdx +123 -0
- package/components/overlays/alert-dialog/index.tsx +258 -0
- package/components/overlays/alert-dialog/pending-demo.tsx +36 -0
- package/components/overlays/command/examples.mdx +113 -0
- package/components/overlays/command/index.tsx +416 -0
- package/components/overlays/context-menu/examples.mdx +56 -0
- package/components/overlays/context-menu/index.tsx +279 -0
- package/components/overlays/dialog/examples.mdx +144 -0
- package/components/overlays/dialog/index.tsx +366 -0
- package/components/overlays/dropdown/dropdown-search.tsx +395 -0
- package/components/overlays/dropdown/examples.mdx +294 -0
- package/components/overlays/dropdown/index.tsx +1168 -0
- package/components/overlays/dropdown/menu-item.tsx +464 -0
- package/components/overlays/dropdown/menu-parts.tsx +660 -0
- package/components/overlays/popover/anchored-demo.tsx +59 -0
- package/components/overlays/popover/examples.mdx +180 -0
- package/components/overlays/popover/index.tsx +315 -0
- package/components/overlays/preview-card/examples.mdx +61 -0
- package/components/overlays/preview-card/index.tsx +204 -0
- package/components/overlays/sheet/examples.mdx +89 -0
- package/components/overlays/sheet/index.tsx +247 -0
- package/components/overlays/toast/examples.mdx +68 -0
- package/components/overlays/toast/global-demo.tsx +72 -0
- package/components/overlays/toast/index.tsx +474 -0
- package/components/overlays/toast/manager.ts +193 -0
- package/components/overlays/tooltip/examples.mdx +106 -0
- package/components/overlays/tooltip/index.tsx +519 -0
- package/components/progress/examples.mdx +59 -0
- package/components/progress/index.tsx +174 -0
- package/components/progress/progress.css +49 -0
- package/components/progress/step-demo.tsx +27 -0
- package/components/table/examples.mdx +184 -0
- package/components/table/index.tsx +510 -0
- package/components/table/sort-demo.tsx +61 -0
- package/dist/base.css +100 -0
- package/dist/blocks/sidebar-app/index.js +39 -26
- package/dist/components/AI/input-message/index.js +22 -16
- package/dist/components/AI/thinking-indicator/index.js +9 -6
- package/dist/components/accordion/index.js +16 -13
- package/dist/components/avatar/index.d.ts +46 -0
- package/dist/components/avatar/index.js +18 -0
- package/dist/components/badge/index.d.ts +18 -11
- package/dist/components/badge/index.js +11 -7
- package/dist/components/badge/variants.d.ts +33 -0
- package/dist/components/badge/variants.js +10 -0
- package/dist/components/button/index.d.ts +53 -17
- package/dist/components/button/index.js +10 -6
- package/dist/components/button/variants.d.ts +39 -0
- package/dist/components/button/variants.js +8 -0
- package/dist/components/card/index.d.ts +16 -3
- package/dist/components/card/index.js +16 -11
- package/dist/components/copy/index.js +13 -9
- package/dist/components/inputs/checkbox/index.d.ts +28 -9
- package/dist/components/inputs/checkbox/index.js +17 -13
- package/dist/components/inputs/color-picker/index.d.ts +13 -13
- package/dist/components/inputs/color-picker/index.js +25 -18
- package/dist/components/inputs/color-picker/variants.d.ts +61 -0
- package/dist/components/inputs/color-picker/variants.js +28 -0
- package/dist/components/inputs/combobox/index.d.ts +60 -17
- package/dist/components/inputs/combobox/index.js +26 -18
- package/dist/components/inputs/date-time/calendar/index.js +14 -11
- package/dist/components/inputs/date-time/date-picker/index.d.ts +53 -11
- package/dist/components/inputs/date-time/date-picker/index.js +33 -25
- package/dist/components/inputs/date-time/date-range-picker/index.d.ts +3 -3
- package/dist/components/inputs/date-time/date-range-picker/index.js +32 -24
- package/dist/components/inputs/date-time/duration-picker/index.d.ts +3 -3
- package/dist/components/inputs/date-time/duration-picker/index.js +32 -24
- package/dist/components/inputs/date-time/month-picker/index.d.ts +3 -3
- package/dist/components/inputs/date-time/month-picker/index.js +31 -23
- package/dist/components/inputs/date-time/time-picker/index.d.ts +3 -3
- package/dist/components/inputs/date-time/time-picker/index.js +32 -24
- package/dist/components/inputs/field/index.d.ts +116 -0
- package/dist/components/inputs/field/index.js +28 -0
- package/dist/components/inputs/file-dropzone/index.d.ts +165 -0
- package/dist/components/inputs/file-dropzone/index.js +32 -0
- package/dist/components/inputs/file-dropzone/variants.d.ts +35 -0
- package/dist/components/inputs/file-dropzone/variants.js +12 -0
- package/dist/components/inputs/input/index.d.ts +95 -13
- package/dist/components/inputs/input/index.js +17 -9
- package/dist/components/inputs/label/index.d.ts +32 -0
- package/dist/components/inputs/label/index.js +11 -0
- package/dist/components/inputs/number-input/index.d.ts +84 -0
- package/dist/components/inputs/number-input/index.js +20 -0
- package/dist/components/inputs/radio/index.d.ts +20 -5
- package/dist/components/inputs/radio/index.js +15 -12
- package/dist/components/inputs/search/index.js +25 -18
- package/dist/components/inputs/select/index.d.ts +41 -11
- package/dist/components/inputs/select/index.js +27 -14
- package/dist/components/inputs/select/variants.d.ts +5 -0
- package/dist/components/inputs/select/variants.js +6 -0
- package/dist/components/inputs/slider/index.js +7 -5
- package/dist/components/inputs/switch/index.d.ts +8 -2
- package/dist/components/inputs/switch/index.js +14 -12
- package/dist/components/inputs/textarea/index.d.ts +4 -0
- package/dist/components/inputs/textarea/index.js +8 -6
- package/dist/components/navigation/navigation-menu/index.d.ts +114 -0
- package/dist/components/navigation/navigation-menu/index.js +40 -0
- package/dist/components/navigation/pagination/index.d.ts +73 -0
- package/dist/components/navigation/pagination/index.js +39 -0
- package/dist/components/navigation/sidebar/index.d.ts +44 -21
- package/dist/components/navigation/sidebar/index.js +41 -31
- package/dist/components/navigation/sidebar/variants.d.ts +25 -0
- package/dist/components/navigation/sidebar/variants.js +28 -0
- package/dist/components/navigation/tabs/index.d.ts +8 -2
- package/dist/components/navigation/tabs/index.js +14 -10
- package/dist/components/navigation/tabs-subtle/index.js +12 -10
- package/dist/components/overlays/alert-dialog/index.d.ts +121 -15
- package/dist/components/overlays/alert-dialog/index.js +22 -13
- package/dist/components/overlays/command/index.js +24 -17
- package/dist/components/overlays/context-menu/index.d.ts +33 -17
- package/dist/components/overlays/context-menu/index.js +27 -18
- package/dist/components/overlays/dialog/index.js +17 -12
- package/dist/components/overlays/dropdown/index.d.ts +257 -31
- package/dist/components/overlays/dropdown/index.js +42 -17
- package/dist/components/overlays/popover/index.d.ts +31 -9
- package/dist/components/overlays/popover/index.js +12 -9
- package/dist/components/overlays/preview-card/index.js +11 -8
- package/dist/components/overlays/sheet/index.js +18 -13
- package/dist/components/overlays/toast/index.d.ts +123 -47
- package/dist/components/overlays/toast/index.js +18 -10
- package/dist/components/overlays/tooltip/index.d.ts +113 -21
- package/dist/components/overlays/tooltip/index.js +15 -6
- package/dist/components/progress/index.d.ts +56 -0
- package/dist/components/progress/index.js +15 -0
- package/dist/components/table/index.d.ts +63 -8
- package/dist/components/table/index.js +19 -9
- package/dist/index.d.ts +2201 -736
- package/dist/index.js +223 -82
- package/dist/lib/date-locale.d.ts +14 -0
- package/dist/lib/date-locale.js +16 -0
- package/dist/lib/field-classes.d.ts +144 -0
- package/dist/lib/field-classes.js +40 -0
- package/dist/lib/field-variants.d.ts +47 -0
- package/dist/lib/field-variants.js +26 -0
- package/dist/lib/fluid-hover-highlight.d.ts +112 -0
- package/dist/lib/fluid-hover-highlight.js +17 -0
- package/dist/lib/focus-ring.d.ts +18 -0
- package/dist/lib/focus-ring.js +10 -0
- package/dist/lib/goo-indicator.d.ts +46 -0
- package/dist/lib/goo-indicator.js +14 -0
- package/dist/lib/icon-context.d.ts +30 -0
- package/dist/lib/icon-context.js +12 -0
- package/dist/lib/inert.d.ts +9 -0
- package/dist/lib/inert.js +8 -0
- package/dist/lib/morph-layers.d.ts +93 -0
- package/dist/lib/morph-layers.js +13 -0
- package/dist/lib/morph-part.d.ts +21 -0
- package/dist/lib/morph-part.js +12 -0
- package/dist/lib/popup.d.ts +20 -0
- package/dist/lib/popup.js +12 -0
- package/dist/lib/reduced-motion.d.ts +9 -0
- package/dist/lib/reduced-motion.js +6 -0
- package/dist/lib/row-index.d.ts +10 -0
- package/dist/lib/row-index.js +8 -0
- package/dist/lib/row-order.d.ts +28 -0
- package/dist/lib/row-order.js +10 -0
- package/dist/lib/scroll-column.d.ts +27 -0
- package/dist/lib/scroll-column.js +18 -0
- package/dist/lib/shape-context.d.ts +30 -0
- package/dist/lib/shape-context.js +12 -0
- package/dist/lib/size-context.d.ts +94 -0
- package/dist/lib/size-context.js +20 -0
- package/dist/lib/size-scale.d.ts +79 -0
- package/dist/lib/size-scale.js +8 -0
- package/dist/lib/slot.d.ts +12 -0
- package/dist/lib/slot.js +6 -0
- package/dist/lib/springs.d.ts +44 -0
- package/dist/lib/springs.js +8 -0
- package/dist/lib/surface-classes.d.ts +19 -0
- package/dist/lib/surface-classes.js +10 -0
- package/dist/lib/surface-context.d.ts +9 -0
- package/dist/lib/surface-context.js +8 -0
- package/dist/lib/use-controllable-state.d.ts +2 -0
- package/dist/lib/use-controllable-state.js +6 -0
- package/dist/lib/use-fluid-hover.d.ts +138 -0
- package/dist/lib/use-fluid-hover.js +14 -0
- package/dist/lib/use-is-mobile.d.ts +2 -0
- package/dist/lib/use-is-mobile.js +6 -0
- package/dist/lib/use-keyboard-nav-gate.d.ts +20 -0
- package/dist/lib/use-keyboard-nav-gate.js +7 -0
- package/dist/lib/use-merge-split.d.ts +47 -0
- package/dist/lib/use-merge-split.js +15 -0
- package/dist/lib/use-morph.d.ts +101 -0
- package/dist/lib/use-morph.js +20 -0
- package/dist/lib/use-touch-primary.d.ts +2 -0
- package/dist/lib/use-touch-primary.js +6 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.js +6 -0
- package/dist/preset.d.ts +17 -0
- package/dist/preset.js +22 -2
- package/dist/primitives/code/index.js +7 -5
- package/dist/primitives/craft/index.js +9 -6
- package/dist/primitives/fluid-hover/index.js +9 -8
- package/dist/primitives/morph/index.js +15 -10
- package/dist/primitives/motion/index.js +10 -8
- package/dist/primitives/scroll-area/index.js +4 -3
- package/dist/primitives/separator/index.d.ts +25 -0
- package/dist/primitives/separator/index.js +9 -0
- package/dist/primitives/sizes/index.js +6 -4
- package/dist/primitives/skeleton/index.d.ts +35 -0
- package/dist/primitives/skeleton/index.js +12 -0
- package/dist/primitives/surface/index.js +6 -4
- package/dist/shared/{components-3mkepka5.js → components-0jmqhx2k.js} +28 -25
- package/dist/shared/components-124epb7f.js +53 -0
- package/dist/shared/{components-gz8zf3ec.js → components-1k0wv53d.js} +15 -43
- package/dist/shared/components-26snnbs9.js +322 -0
- package/dist/shared/{components-2dxkv6zm.js → components-2c0qcfx4.js} +8 -7
- package/dist/shared/{components-473g814w.js → components-2mt9te6d.js} +243 -137
- package/dist/shared/{components-hawvy2qz.js → components-2z48g4fp.js} +9 -30
- package/dist/shared/components-34txk9rj.js +35 -0
- package/dist/shared/components-3h92d94m.js +23 -0
- package/dist/shared/{components-zfnmn5d4.js → components-3sp623ae.js} +36 -31
- package/dist/shared/{components-jwst3vtj.js → components-3wxkjgqn.js} +186 -76
- package/dist/shared/{components-s2bz1xpk.js → components-49bsynbw.js} +8 -5
- package/dist/shared/components-4bwsd46w.js +71 -0
- package/dist/shared/components-4n4f5m3e.js +297 -0
- package/dist/shared/{components-0q0sqfh4.js → components-4y816hwp.js} +27 -49
- package/dist/shared/components-52ngsgca.js +399 -0
- package/dist/shared/{components-y9y0g8er.js → components-52r5763g.js} +22 -19
- package/dist/shared/components-559tf7yb.js +28 -0
- package/dist/shared/components-5mkga9hj.js +440 -0
- package/dist/shared/{components-kwa6mrf9.js → components-5s0nfqvw.js} +14 -9
- package/dist/shared/{components-dk0gjr5a.js → components-60atskhp.js} +19 -18
- package/dist/shared/{components-rr7a6ja9.js → components-658b26nb.js} +21 -18
- package/dist/shared/{components-xxvdw7k1.js → components-65vwfjs6.js} +37 -34
- package/dist/shared/{components-frw34b65.js → components-6j2fh74k.js} +114 -123
- package/dist/shared/components-6zg1yft7.js +167 -0
- package/dist/shared/components-6zng858q.js +53 -0
- package/dist/shared/components-72w4ge68.js +64 -0
- package/dist/shared/{components-cv16mryv.js → components-78x40gee.js} +13 -7
- package/dist/shared/{components-b2wyq2cq.js → components-7d4r7hh1.js} +39 -57
- package/dist/shared/components-7ntvvegr.js +316 -0
- package/dist/shared/components-8nwsqjn8.js +34 -0
- package/dist/shared/{components-5xc2j8jz.js → components-8tt3xbb5.js} +19 -18
- package/dist/shared/{components-vc7vq5nz.js → components-9as3rf68.js} +6 -3
- package/dist/shared/components-9mys9jna.js +255 -0
- package/dist/shared/components-adkarj8n.js +35 -0
- package/dist/shared/{components-b3c5et5b.js → components-ae9fncz4.js} +32 -31
- package/dist/shared/{components-hqeq3w9q.js → components-awra5sff.js} +24 -16
- package/dist/shared/components-b1e239g3.js +28 -0
- package/dist/shared/{components-q5xj5c16.js → components-b1f2bjf1.js} +9 -8
- package/dist/shared/{components-qmmjx1qw.js → components-bn42vq6d.js} +71 -72
- package/dist/shared/components-c96g82th.js +1444 -0
- package/dist/shared/components-c9yr4ed1.js +44 -0
- package/dist/shared/components-d3shbwqq.js +95 -0
- package/dist/shared/{components-jjw69c4c.js → components-dcc02hs2.js} +7 -4
- package/dist/shared/{components-men63rwj.js → components-de99ykt7.js} +3 -2
- package/dist/shared/components-dhgk6mbt.js +16 -0
- package/dist/shared/components-drxrtnp2.js +25 -0
- package/dist/shared/{components-6p8tfcd6.js → components-ds9fqat9.js} +21 -18
- package/dist/shared/{components-mjthm1kf.js → components-egy4tyjt.js} +11 -8
- package/dist/shared/components-f0xfpkhh.js +82 -0
- package/dist/shared/components-f7h57m6t.js +59 -0
- package/dist/shared/{components-d6xtjht3.js → components-fjkpbg6n.js} +33 -30
- package/dist/shared/{components-gc5vtq2f.js → components-gh0qeey3.js} +63 -29
- package/dist/shared/{components-39jq9va1.js → components-gvbapfen.js} +29 -24
- package/dist/shared/{components-5vgpnxgy.js → components-gzesg7hy.js} +19 -16
- package/dist/shared/components-h6p86be3.js +19 -0
- package/dist/shared/components-h83az0bz.js +33 -0
- package/dist/shared/components-jjrj6ymn.js +104 -0
- package/dist/shared/{components-wvp1m52g.js → components-jp5v0m0f.js} +15 -14
- package/dist/shared/{components-zrkzcayz.js → components-jqpefjsn.js} +54 -6
- package/dist/shared/{components-1z6tdadk.js → components-k74j4hwh.js} +20 -17
- package/dist/shared/components-kswxnm3h.js +24 -0
- package/dist/shared/{components-jbbmdr74.js → components-mkkbbgb7.js} +36 -17
- package/dist/shared/{components-pbmqctfa.js → components-mpw667rb.js} +169 -65
- package/dist/shared/{components-s5ngg32c.js → components-paa08427.js} +121 -47
- package/dist/shared/{components-vfbhxf5r.js → components-pd42emw3.js} +6 -5
- package/dist/shared/{components-hw9yk32z.js → components-pmfszv7a.js} +35 -23
- package/dist/shared/{components-chacnk61.js → components-pw06rbxq.js} +19 -19
- package/dist/shared/components-q03cktx8.js +246 -0
- package/dist/shared/{components-kvr7f9hy.js → components-qdm3yh26.js} +19 -10
- package/dist/shared/{components-27nnvrwe.js → components-qs4rkqsj.js} +15 -14
- package/dist/shared/{components-s083f38z.js → components-r6gbmkew.js} +22 -21
- package/dist/shared/{components-ta7shw28.js → components-r8eqs7gz.js} +4 -4
- package/dist/shared/{components-sn1rxx1d.js → components-rm02h9nt.js} +12 -11
- package/dist/shared/{components-c6s6b43g.js → components-rrbpmfx4.js} +3 -2
- package/dist/shared/{components-n7mjr357.js → components-tz1fv35x.js} +3 -2
- package/dist/shared/components-tz4gaf1v.js +23 -0
- package/dist/shared/{components-zx6b6yby.js → components-vf45j12c.js} +4 -18
- package/dist/shared/{components-3ky44908.js → components-vfjc9jzz.js} +2 -3
- package/dist/shared/{components-39vmfq9s.js → components-vsa625vk.js} +21 -20
- package/dist/shared/components-wawnmkph.js +500 -0
- package/dist/shared/components-wktrrb4m.js +38 -0
- package/dist/shared/{components-8snj490h.js → components-wwd363me.js} +78 -32
- package/dist/shared/{components-5pnw8183.js → components-xcwvgcrd.js} +23 -22
- package/dist/shared/components-xdqmt6ed.js +20 -0
- package/dist/shared/{components-h2ajmhwn.js → components-y1w3a6wx.js} +107 -35
- package/dist/shared/{components-ar66gnt0.js → components-y6578b8h.js} +37 -34
- package/dist/shared/{components-59efxjd9.js → components-yhgq0qxx.js} +13 -12
- package/dist/shared/{components-jthe1pwb.js → components-yz84gpkq.js} +101 -404
- package/dist/shared/components-z3v0n0de.js +11 -0
- package/dist/shared/{components-7r3etddy.js → components-z9n19fyk.js} +19 -54
- package/dist/shared/components-zbvjzh1p.js +141 -0
- package/dist/styles.css +241 -16
- package/dist/tailwind.css +13 -0
- package/dist/tokens.css +34 -0
- package/index.ts +60 -0
- package/lib/date-locale.ts +50 -0
- package/lib/field-classes.ts +115 -0
- package/lib/field-variants.ts +117 -0
- package/lib/fluid-hover-highlight.tsx +139 -0
- package/lib/focus-ring.tsx +46 -0
- package/lib/goo-indicator.tsx +261 -0
- package/lib/icon-context.tsx +310 -0
- package/lib/inert.ts +22 -0
- package/lib/morph-layers.tsx +102 -0
- package/lib/morph-part.tsx +49 -0
- package/lib/popup.ts +52 -0
- package/lib/reduced-motion.ts +19 -0
- package/lib/row-index.tsx +29 -0
- package/lib/row-order.tsx +115 -0
- package/lib/scroll-column.tsx +244 -0
- package/lib/shape-context.tsx +124 -0
- package/lib/size-context.tsx +66 -0
- package/lib/size-scale.ts +115 -0
- package/lib/slot.ts +25 -0
- package/lib/springs.ts +62 -0
- package/lib/surface-classes.ts +58 -0
- package/lib/surface-context.tsx +21 -0
- package/lib/use-controllable-state.ts +44 -0
- package/lib/use-fluid-hover.ts +541 -0
- package/lib/use-is-mobile.ts +25 -0
- package/lib/use-keyboard-nav-gate.ts +45 -0
- package/lib/use-merge-split.tsx +209 -0
- package/lib/use-morph.ts +557 -0
- package/lib/use-touch-primary.tsx +43 -0
- package/lib/utils.ts +37 -0
- package/package.json +177 -4
- package/preset.ts +196 -0
- package/primitives/code/examples.mdx +27 -0
- package/primitives/code/index.tsx +80 -0
- package/primitives/craft/demos.tsx +173 -0
- package/primitives/craft/examples.mdx +138 -0
- package/primitives/craft/index.tsx +76 -0
- package/primitives/fluid-hover/examples.mdx +84 -0
- package/primitives/fluid-hover/index.tsx +316 -0
- package/primitives/morph/examples.mdx +135 -0
- package/primitives/morph/index.tsx +192 -0
- package/primitives/motion/examples.mdx +100 -0
- package/primitives/motion/index.tsx +160 -0
- package/primitives/scroll-area/examples.mdx +58 -0
- package/primitives/scroll-area/index.tsx +200 -0
- package/primitives/separator/examples.mdx +30 -0
- package/primitives/separator/index.tsx +53 -0
- package/primitives/sizes/examples.mdx +167 -0
- package/primitives/sizes/index.tsx +89 -0
- package/primitives/skeleton/examples.mdx +51 -0
- package/primitives/skeleton/index.tsx +72 -0
- package/primitives/skeleton/skeleton.css +15 -0
- package/primitives/surface/examples.mdx +173 -0
- package/primitives/surface/index.tsx +109 -0
- package/primitives/surface/surface.css +176 -0
- package/dist/shared/components-0sn7ypjw.js +0 -61
- package/dist/shared/components-1434p1mh.js +0 -123
- package/dist/shared/components-a86dytt0.js +0 -986
- package/dist/shared/components-gf5s6ap9.js +0 -42
- package/dist/shared/components-hyq23phv.js +0 -310
- package/dist/shared/components-ng72k97e.js +0 -128
- package/dist/shared/components-raknhppb.js +0 -64
- package/dist/shared/components-vynjtrk6.js +0 -19
- package/dist/shared/components-wy9jpqny.js +0 -146
- /package/dist/shared/{components-1v7rxytx.js → components-3ey0hzpb.js} +0 -0
- /package/dist/shared/{components-ezxhrmer.js → components-jcnjay5g.js} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import ThinkingIndicator from './index'
|
|
2
|
+
|
|
3
|
+
# Basic
|
|
4
|
+
|
|
5
|
+
<ThinkingIndicator />
|
|
6
|
+
|
|
7
|
+
# Text only
|
|
8
|
+
|
|
9
|
+
Drop the glyph for an inline indicator, e.g. before a streamed reply.
|
|
10
|
+
|
|
11
|
+
<ThinkingIndicator showIcon={false} />
|
|
12
|
+
|
|
13
|
+
# Compact
|
|
14
|
+
|
|
15
|
+
The compact step of the size ladder, for dense transcripts.
|
|
16
|
+
|
|
17
|
+
<ThinkingIndicator size="compact" />
|
|
18
|
+
|
|
19
|
+
# Goo
|
|
20
|
+
|
|
21
|
+
Three dots melt into one blob and split again through the goo filter (see Morph), beside a plain label.
|
|
22
|
+
|
|
23
|
+
<ThinkingIndicator variant="goo" />
|
|
24
|
+
|
|
25
|
+
# Goo, compact
|
|
26
|
+
|
|
27
|
+
<ThinkingIndicator variant="goo" size="compact" />
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
3
|
+
* `registry/default/thinking-indicator.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
4
|
+
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
5
|
+
* Local modifications:
|
|
6
|
+
* - `"use client"` dropped; `framer-motion` → `motion/react`; `@/lib/*` →
|
|
7
|
+
* `../../../lib/*`.
|
|
8
|
+
* - Prop JSDoc kept from upstream (it matches the FF docs API table);
|
|
9
|
+
* modo TSDoc and examples on `ThinkingIndicator`. The `.shimmer-text` rule
|
|
10
|
+
* the label rides lives in base.css.
|
|
11
|
+
* - Styling reads DS tokens (AGENTS.md styling): `text-[Npx]` →
|
|
12
|
+
* `text-<role>[-compact]`; inline `fontVariationSettings` → `weight-*`;
|
|
13
|
+
* `duration-80|120|160` and tier-length JS durations → `duration-<tier>` /
|
|
14
|
+
* `spring.*`.
|
|
15
|
+
* - A `variant="goo"` look (local, the morph style's goo): three
|
|
16
|
+
* `muted-foreground` dots that melt into one blob (swelling to hold their
|
|
17
|
+
* area) and split again through the shared `GooFilter`, one loop every
|
|
18
|
+
* eight slow-tier lengths, beside a plain cycling label. Reduced motion
|
|
19
|
+
* (`useReduceMotion`: the OS setting or MotionConfig's, which now also
|
|
20
|
+
* counts for the shimmer look) holds them split and still. The default stays upstream's
|
|
21
|
+
* `shimmer` look.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { AnimatePresence, motion } from 'motion/react'
|
|
25
|
+
import { forwardRef, type HTMLAttributes, useEffect, useId, useState } from 'react'
|
|
26
|
+
import { GooFilter } from '../../../lib/morph-layers'
|
|
27
|
+
import { useReduceMotion } from '../../../lib/reduced-motion'
|
|
28
|
+
import { type SizeVariant, useSize } from '../../../lib/size-context'
|
|
29
|
+
import { spring } from '../../../lib/springs'
|
|
30
|
+
import { GOO_BLUR_RATIO } from '../../../lib/use-morph'
|
|
31
|
+
import { cn } from '../../../lib/utils'
|
|
32
|
+
|
|
33
|
+
const circleA = 'M 12 8 C 14.21 8 16 9.79 16 12 C 16 14.21 14.21 16 12 16 C 9.79 16 8 14.21 8 12 C 8 9.79 9.79 8 12 8 Z'
|
|
34
|
+
|
|
35
|
+
const infinity = 'M 12 12 C 14 8.5 19 8.5 19 12 C 19 15.5 14 15.5 12 12 C 10 8.5 5 8.5 5 12 C 5 15.5 10 15.5 12 12 Z'
|
|
36
|
+
|
|
37
|
+
const circleB =
|
|
38
|
+
'M 12 16 C 14.21 16 16 14.21 16 12 C 16 9.79 14.21 8 12 8 C 9.79 8 8 9.79 8 12 C 8 14.21 9.79 16 12 16 Z'
|
|
39
|
+
|
|
40
|
+
const words = ['Thinking', 'Moonwalking', 'Planning', 'Refining']
|
|
41
|
+
|
|
42
|
+
// Per ladder step, as literal classes for the extractor: the dot, the box of
|
|
43
|
+
// the three split dots, and the spacing between dot centers, wide enough that
|
|
44
|
+
// split dots let go of each other through the goo.
|
|
45
|
+
const DOTS: Record<SizeVariant, { box: string; dot: string; radius: number; gap: number }> = {
|
|
46
|
+
default: { box: 'h-5 w-[26px]', dot: 'size-1.5', radius: 3, gap: 10 },
|
|
47
|
+
compact: { box: 'h-[18px] w-[23px]', dot: 'size-[5px]', radius: 2.5, gap: 9 },
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// The merged blob holds the three dots' area, so it swells as they melt in.
|
|
51
|
+
const MERGED = Math.sqrt(3)
|
|
52
|
+
|
|
53
|
+
/** Three dots that melt into one blob and split again, through the shared goo filter. */
|
|
54
|
+
function GooDots({ step, still }: { step: SizeVariant; still: boolean }) {
|
|
55
|
+
const gooId = `thinking-goo-${useId().replace(/:/g, '')}`
|
|
56
|
+
const { box, dot, radius, gap } = DOTS[step]
|
|
57
|
+
// Split → merged → split over eight slow-tier lengths. A spring per move
|
|
58
|
+
// is over in a frame or two at this size, too quick to see a neck form;
|
|
59
|
+
// eased all the way, the necks stretch and snap in view.
|
|
60
|
+
const loop = { duration: spring.slow.duration * 8, ease: 'easeInOut' as const, repeat: Infinity }
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<span aria-hidden className={cn('relative shrink-0', box)}>
|
|
64
|
+
<GooFilter id={gooId} blur={radius * GOO_BLUR_RATIO} />
|
|
65
|
+
{/* The filter is the effect itself: it melts the token-colored dots into one shape. */}
|
|
66
|
+
<span className="absolute inset-0 flex items-center justify-center" style={{ filter: `url(#${gooId})` }}>
|
|
67
|
+
{[-1, 0, 1].map(side => (
|
|
68
|
+
<motion.span
|
|
69
|
+
key={side}
|
|
70
|
+
className={cn('absolute rounded-full bg-muted-foreground', dot)}
|
|
71
|
+
animate={still ? { x: side * gap } : side ? { x: [side * gap, 0, side * gap] } : { scale: [1, MERGED, 1] }}
|
|
72
|
+
transition={still ? { duration: 0 } : loop}
|
|
73
|
+
/>
|
|
74
|
+
))}
|
|
75
|
+
</span>
|
|
76
|
+
</span>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface ThinkingIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
81
|
+
/** The look: `shimmer` morphs a circle⇄infinity glyph beside a shimmering label (Fluid Functionalism's), `goo` melts three dots into one blob and splits them again beside a plain label. Defaults to `"shimmer"`. */
|
|
82
|
+
variant?: 'shimmer' | 'goo'
|
|
83
|
+
/** Show the glyph (or, for `goo`, the dots) before the label. Set to `false` for a text-only indicator (e.g. inline before a streamed reply). Defaults to `true`. */
|
|
84
|
+
showIcon?: boolean
|
|
85
|
+
/** Step on the size ladder. Wins over the surrounding SizeProvider. Defaults to the provider's step, else `"default"`. */
|
|
86
|
+
size?: SizeVariant
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Animated status indicator with morphing SVG and cycling text — the
|
|
91
|
+
* assistant's working state.
|
|
92
|
+
*
|
|
93
|
+
* A glyph that morphs circle to infinity and back sits next to a shimmering
|
|
94
|
+
* label that cycles Thinking, Moonwalking, Planning, Refining, each word
|
|
95
|
+
* swapped on a spring. The row reserves the width of the longest word, so
|
|
96
|
+
* nothing around it shifts while the words change. One static "Thinking…" is
|
|
97
|
+
* announced to screen readers instead of a re-announcement every four
|
|
98
|
+
* seconds, and reduced motion drops both the morph and the cycling for a
|
|
99
|
+
* still glyph and label.
|
|
100
|
+
*
|
|
101
|
+
* `variant="goo"` swaps the glyph for three dots that melt into one blob and
|
|
102
|
+
* split again through the goo filter (see Morph), beside a plain label;
|
|
103
|
+
* reduced motion holds them split.
|
|
104
|
+
*
|
|
105
|
+
* @example {@include ./examples.mdx}
|
|
106
|
+
*/
|
|
107
|
+
const ThinkingIndicator = forwardRef<HTMLDivElement, ThinkingIndicatorProps>(
|
|
108
|
+
({ className, variant = 'shimmer', showIcon = true, size, ...props }, ref) => {
|
|
109
|
+
const step = useSize(size).variant
|
|
110
|
+
const compactStep = step === 'compact'
|
|
111
|
+
const [index, setIndex] = useState(0)
|
|
112
|
+
// Reduced motion drops the infinite glyph morph and the word cycling — a
|
|
113
|
+
// static glyph and label carry the same meaning without the movement.
|
|
114
|
+
const reduceMotion = useReduceMotion()
|
|
115
|
+
const label = variant === 'goo' ? 'text-muted-foreground' : 'shimmer-text'
|
|
116
|
+
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
if (reduceMotion) return
|
|
119
|
+
const interval = setInterval(() => {
|
|
120
|
+
setIndex(i => (i + 1) % words.length)
|
|
121
|
+
}, 4000)
|
|
122
|
+
return () => clearInterval(interval)
|
|
123
|
+
}, [reduceMotion])
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<div ref={ref} role="status" className={cn('flex items-center gap-2 px-3 py-2', className)} {...props}>
|
|
127
|
+
{/* Static announcement — the cycling word display below is aria-hidden
|
|
128
|
+
so screen readers hear one "Thinking…" instead of a re-announcement
|
|
129
|
+
every 4 seconds. */}
|
|
130
|
+
<span className="sr-only">Thinking…</span>
|
|
131
|
+
{showIcon && variant === 'goo' && <GooDots step={step} still={reduceMotion} />}
|
|
132
|
+
{showIcon && variant === 'shimmer' && (
|
|
133
|
+
<motion.svg
|
|
134
|
+
aria-hidden
|
|
135
|
+
width={compactStep ? 18 : 20}
|
|
136
|
+
height={compactStep ? 18 : 20}
|
|
137
|
+
viewBox="0 0 24 24"
|
|
138
|
+
fill="none"
|
|
139
|
+
stroke="currentColor"
|
|
140
|
+
strokeWidth={1.5}
|
|
141
|
+
strokeLinecap="round"
|
|
142
|
+
strokeLinejoin="round"
|
|
143
|
+
className="text-muted-foreground shrink-0"
|
|
144
|
+
>
|
|
145
|
+
{reduceMotion ? (
|
|
146
|
+
<path d={infinity} />
|
|
147
|
+
) : (
|
|
148
|
+
<motion.path
|
|
149
|
+
d={circleA}
|
|
150
|
+
initial={{ d: circleA }}
|
|
151
|
+
animate={{
|
|
152
|
+
d: [circleA, infinity, circleB, infinity, circleA],
|
|
153
|
+
}}
|
|
154
|
+
transition={{
|
|
155
|
+
d: {
|
|
156
|
+
duration: 6,
|
|
157
|
+
ease: 'easeInOut',
|
|
158
|
+
repeat: Infinity,
|
|
159
|
+
times: [0, 0.25, 0.5, 0.75, 1.0],
|
|
160
|
+
},
|
|
161
|
+
}}
|
|
162
|
+
/>
|
|
163
|
+
)}
|
|
164
|
+
</motion.svg>
|
|
165
|
+
)}
|
|
166
|
+
<span
|
|
167
|
+
aria-hidden="true"
|
|
168
|
+
className={cn(
|
|
169
|
+
'inline-grid overflow-hidden',
|
|
170
|
+
compactStep ? 'text-body-compact' : 'text-body',
|
|
171
|
+
'weight-medium',
|
|
172
|
+
)}
|
|
173
|
+
>
|
|
174
|
+
<span className={cn('col-start-1 row-start-1 invisible', label)}>
|
|
175
|
+
{words.reduce((a, b) => (a.length >= b.length ? a : b))}
|
|
176
|
+
</span>
|
|
177
|
+
{reduceMotion ? (
|
|
178
|
+
<span className={cn('col-start-1 row-start-1', label)}>{words[0]}</span>
|
|
179
|
+
) : (
|
|
180
|
+
<AnimatePresence mode="popLayout" initial={false}>
|
|
181
|
+
<motion.span
|
|
182
|
+
key={words[index]}
|
|
183
|
+
className={cn('col-start-1 row-start-1', label)}
|
|
184
|
+
initial={{ y: '80%', opacity: 0 }}
|
|
185
|
+
animate={{
|
|
186
|
+
y: 0,
|
|
187
|
+
opacity: 1,
|
|
188
|
+
transition: { duration: spring.slow.duration, ease: [0.4, 0, 0.2, 1] },
|
|
189
|
+
}}
|
|
190
|
+
exit={{
|
|
191
|
+
y: '-80%',
|
|
192
|
+
opacity: 0,
|
|
193
|
+
transition: { duration: spring.slow.exit.duration, ease: [0.4, 0, 0.2, 1] },
|
|
194
|
+
}}
|
|
195
|
+
>
|
|
196
|
+
{words[index]}
|
|
197
|
+
</motion.span>
|
|
198
|
+
</AnimatePresence>
|
|
199
|
+
)}
|
|
200
|
+
</span>
|
|
201
|
+
</div>
|
|
202
|
+
)
|
|
203
|
+
},
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
ThinkingIndicator.displayName = 'ThinkingIndicator'
|
|
207
|
+
|
|
208
|
+
export type { ThinkingIndicatorProps }
|
|
209
|
+
export { ThinkingIndicator }
|
|
210
|
+
export default ThinkingIndicator
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import Accordion from './index'
|
|
2
|
+
|
|
3
|
+
# Standalone
|
|
4
|
+
|
|
5
|
+
A single collapsible item with its own hover state.
|
|
6
|
+
|
|
7
|
+
<Accordion type="single" collapsible defaultValue="item-1">
|
|
8
|
+
<Accordion.Item value="item-1">
|
|
9
|
+
<Accordion.Trigger>What is this component?</Accordion.Trigger>
|
|
10
|
+
<Accordion.Content>
|
|
11
|
+
A collapsible accordion with animated expand/collapse and spring-animated chevron.
|
|
12
|
+
</Accordion.Content>
|
|
13
|
+
</Accordion.Item>
|
|
14
|
+
</Accordion>
|
|
15
|
+
|
|
16
|
+
# Single Expand
|
|
17
|
+
|
|
18
|
+
Multiple items with fluid hover — only one can be expanded at a time.
|
|
19
|
+
|
|
20
|
+
<Accordion.Group type="single" collapsible defaultValue="item-1">
|
|
21
|
+
<Accordion.Item value="item-1" index={0}>
|
|
22
|
+
<Accordion.Trigger>Getting Started</Accordion.Trigger>
|
|
23
|
+
<Accordion.Content>
|
|
24
|
+
Install the component and import it into your project. The accordion
|
|
25
|
+
supports both single and multiple expand modes.
|
|
26
|
+
</Accordion.Content>
|
|
27
|
+
</Accordion.Item>
|
|
28
|
+
<Accordion.Item value="item-2" index={1}>
|
|
29
|
+
<Accordion.Trigger>Styling</Accordion.Trigger>
|
|
30
|
+
<Accordion.Content>
|
|
31
|
+
The component integrates with the shape system for pill or rounded
|
|
32
|
+
border-radius variants. All animations use spring physics.
|
|
33
|
+
</Accordion.Content>
|
|
34
|
+
</Accordion.Item>
|
|
35
|
+
<Accordion.Item value="item-3" index={2}>
|
|
36
|
+
<Accordion.Trigger>Accessibility</Accordion.Trigger>
|
|
37
|
+
<Accordion.Content>
|
|
38
|
+
Built on Base UI Accordion with WAI-ARIA attributes, keyboard
|
|
39
|
+
navigation, and focus management.
|
|
40
|
+
</Accordion.Content>
|
|
41
|
+
</Accordion.Item>
|
|
42
|
+
<Accordion.Item value="item-4" index={3}>
|
|
43
|
+
<Accordion.Trigger>Animation</Accordion.Trigger>
|
|
44
|
+
<Accordion.Content>
|
|
45
|
+
The panel morphs out of its row and the chevron rotates on a spring.
|
|
46
|
+
The fluid hover background tracks your cursor.
|
|
47
|
+
</Accordion.Content>
|
|
48
|
+
</Accordion.Item>
|
|
49
|
+
</Accordion.Group>
|
|
50
|
+
|
|
51
|
+
# Multi Expand
|
|
52
|
+
|
|
53
|
+
Multiple items with fluid hover — several can be expanded at once.
|
|
54
|
+
|
|
55
|
+
<Accordion.Group type="multiple" defaultValue={['item-1', 'item-3']}>
|
|
56
|
+
<Accordion.Item value="item-1" index={0}>
|
|
57
|
+
<Accordion.Trigger>First Section</Accordion.Trigger>
|
|
58
|
+
<Accordion.Content>
|
|
59
|
+
Multiple items can be expanded at the same time.
|
|
60
|
+
</Accordion.Content>
|
|
61
|
+
</Accordion.Item>
|
|
62
|
+
<Accordion.Item value="item-2" index={1}>
|
|
63
|
+
<Accordion.Trigger>Second Section</Accordion.Trigger>
|
|
64
|
+
<Accordion.Content>
|
|
65
|
+
Click any trigger to expand or collapse independently.
|
|
66
|
+
</Accordion.Content>
|
|
67
|
+
</Accordion.Item>
|
|
68
|
+
<Accordion.Item value="item-3" index={2}>
|
|
69
|
+
<Accordion.Trigger>Third Section</Accordion.Trigger>
|
|
70
|
+
<Accordion.Content>
|
|
71
|
+
Each item operates independently in multiple mode.
|
|
72
|
+
</Accordion.Content>
|
|
73
|
+
</Accordion.Item>
|
|
74
|
+
</Accordion.Group>
|
|
75
|
+
|
|
76
|
+
# Row highlight
|
|
77
|
+
|
|
78
|
+
With `highlight="trigger"` an expanded item holds no tint — the fill
|
|
79
|
+
scopes to the row and waits for hover. Suits dense panels, where a block
|
|
80
|
+
per open item reads as a second layer.
|
|
81
|
+
|
|
82
|
+
<Accordion.Group type="single" collapsible defaultValue="item-1" highlight="trigger">
|
|
83
|
+
<Accordion.Item value="item-1" index={0}>
|
|
84
|
+
<Accordion.Trigger>Expanded, but not tinted</Accordion.Trigger>
|
|
85
|
+
<Accordion.Content>
|
|
86
|
+
The panel reads as part of the page rather than a filled block.
|
|
87
|
+
</Accordion.Content>
|
|
88
|
+
</Accordion.Item>
|
|
89
|
+
<Accordion.Item value="item-2" index={1}>
|
|
90
|
+
<Accordion.Trigger>Hover any row</Accordion.Trigger>
|
|
91
|
+
<Accordion.Content>
|
|
92
|
+
The fill follows your cursor instead of marking a state.
|
|
93
|
+
</Accordion.Content>
|
|
94
|
+
</Accordion.Item>
|
|
95
|
+
<Accordion.Item value="item-3" index={2}>
|
|
96
|
+
<Accordion.Trigger>Compare with the sections above</Accordion.Trigger>
|
|
97
|
+
<Accordion.Content>
|
|
98
|
+
Those hold a block across the row and its panel while open.
|
|
99
|
+
</Accordion.Content>
|
|
100
|
+
</Accordion.Item>
|
|
101
|
+
</Accordion.Group>
|
|
102
|
+
|
|
103
|
+
# Morph
|
|
104
|
+
|
|
105
|
+
Each panel drips out of the row where it was pressed (its middle, from the keyboard) and widens into the item, its content revealed by the same shape; closing folds it back into the row. The rows below ride its bottom edge.
|
|
106
|
+
|
|
107
|
+
<Accordion.Group type="single" collapsible defaultValue="shipping">
|
|
108
|
+
<Accordion.Item value="shipping" index={0}>
|
|
109
|
+
<Accordion.Trigger>When does my order ship?</Accordion.Trigger>
|
|
110
|
+
<Accordion.Content>
|
|
111
|
+
Orders placed before noon leave the same day. You get a tracking
|
|
112
|
+
link by email as soon as the parcel is scanned.
|
|
113
|
+
</Accordion.Content>
|
|
114
|
+
</Accordion.Item>
|
|
115
|
+
<Accordion.Item value="returns" index={1}>
|
|
116
|
+
<Accordion.Trigger>Can I return it?</Accordion.Trigger>
|
|
117
|
+
<Accordion.Content>
|
|
118
|
+
Anything unused comes back free within 30 days. Start a return from
|
|
119
|
+
your order page and print the label.
|
|
120
|
+
</Accordion.Content>
|
|
121
|
+
</Accordion.Item>
|
|
122
|
+
<Accordion.Item value="warranty" index={2}>
|
|
123
|
+
<Accordion.Trigger>What does the warranty cover?</Accordion.Trigger>
|
|
124
|
+
<Accordion.Content>
|
|
125
|
+
Two years on parts and labour. Accidental damage is covered once,
|
|
126
|
+
on top of that.
|
|
127
|
+
</Accordion.Content>
|
|
128
|
+
</Accordion.Item>
|
|
129
|
+
</Accordion.Group>
|
|
130
|
+
|
|
131
|
+
# Without the goo
|
|
132
|
+
|
|
133
|
+
`effect="morph"` grows the same shape with no liquid neck to its row; `tier="moderate"` runs the goo on the quicker, critically damped spring.
|
|
134
|
+
|
|
135
|
+
<Accordion.Group type="single" collapsible>
|
|
136
|
+
<Accordion.Item value="morph" index={0}>
|
|
137
|
+
<Accordion.Trigger>Plain morph</Accordion.Trigger>
|
|
138
|
+
<Accordion.Content effect="morph">
|
|
139
|
+
The tint grows from the press point into the item, with no neck.
|
|
140
|
+
</Accordion.Content>
|
|
141
|
+
</Accordion.Item>
|
|
142
|
+
<Accordion.Item value="moderate" index={1}>
|
|
143
|
+
<Accordion.Trigger>Moderate tier</Accordion.Trigger>
|
|
144
|
+
<Accordion.Content tier="moderate">
|
|
145
|
+
The goo again, on the moderate spring.
|
|
146
|
+
</Accordion.Content>
|
|
147
|
+
</Accordion.Item>
|
|
148
|
+
</Accordion.Group>
|