@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,126 +0,0 @@
|
|
|
1
|
-
import Textarea from './index'
|
|
2
|
-
import Button from '../../button'
|
|
3
|
-
import Input, { InputGroup, Label } from '../input'
|
|
4
|
-
|
|
5
|
-
# Basics
|
|
6
|
-
|
|
7
|
-
## Basic
|
|
8
|
-
|
|
9
|
-
Type past the third line: the box grows with the text, then scrolls at eight rows.
|
|
10
|
-
|
|
11
|
-
<div className="w-72 max-w-full">
|
|
12
|
-
<Textarea placeholder="Write a note..." />
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
## Variants
|
|
16
|
-
|
|
17
|
-
`borderless` is invisible until hovered or focused; `bordered` is framed at rest.
|
|
18
|
-
|
|
19
|
-
<div className="flex flex-col gap-3 w-72 max-w-full">
|
|
20
|
-
<Textarea minRows={2} placeholder="Borderless" />
|
|
21
|
-
<Textarea variant="bordered" minRows={2} placeholder="Bordered" />
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
## With a Label
|
|
25
|
-
|
|
26
|
-
`Label` pairs with the textarea through `htmlFor` and `id`.
|
|
27
|
-
|
|
28
|
-
<div className="flex flex-col gap-1 w-72 max-w-full">
|
|
29
|
-
<Label htmlFor="textarea-bio">Bio</Label>
|
|
30
|
-
<Textarea id="textarea-bio" placeholder="A few words about you" />
|
|
31
|
-
</div>
|
|
32
|
-
|
|
33
|
-
## Rows
|
|
34
|
-
|
|
35
|
-
`minRows` sets the empty height and `maxRows` where growth stops. Equal values give a fixed box.
|
|
36
|
-
|
|
37
|
-
<div className="flex flex-col gap-3 w-72 max-w-full">
|
|
38
|
-
<Textarea minRows={1} maxRows={4} placeholder="Starts at one row, grows to four" />
|
|
39
|
-
<Textarea minRows={4} maxRows={4} placeholder="Fixed at four rows" />
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
|
-
## Compact
|
|
43
|
-
|
|
44
|
-
`size="compact"` steps the text and padding down the size ladder.
|
|
45
|
-
|
|
46
|
-
<div className="w-72 max-w-full">
|
|
47
|
-
<Textarea size="compact" minRows={2} placeholder="Dense note..." />
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
# States
|
|
51
|
-
|
|
52
|
-
## Invalid
|
|
53
|
-
|
|
54
|
-
`invalid` turns the field destructive.
|
|
55
|
-
|
|
56
|
-
<div className="flex flex-col gap-1 w-72 max-w-full">
|
|
57
|
-
<Label htmlFor="textarea-invalid" invalid>
|
|
58
|
-
Message
|
|
59
|
-
</Label>
|
|
60
|
-
<Textarea id="textarea-invalid" defaultValue="Too short" invalid />
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
## Disabled
|
|
64
|
-
|
|
65
|
-
<div className="w-72 max-w-full">
|
|
66
|
-
<Textarea defaultValue="Read only for now" disabled />
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
# Composition
|
|
70
|
-
|
|
71
|
-
## In a form
|
|
72
|
-
|
|
73
|
-
One row lines up with an Input of the same size, so the two stack without a seam.
|
|
74
|
-
|
|
75
|
-
<div className="flex flex-col gap-3 w-72 max-w-full">
|
|
76
|
-
<div className="flex flex-col gap-1">
|
|
77
|
-
<Label htmlFor="textarea-form-title">Title</Label>
|
|
78
|
-
<Input id="textarea-form-title" placeholder="Short summary" />
|
|
79
|
-
</div>
|
|
80
|
-
<div className="flex flex-col gap-1">
|
|
81
|
-
<Label htmlFor="textarea-form-body">Description</Label>
|
|
82
|
-
<Textarea id="textarea-form-body" minRows={1} placeholder="Add details" />
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
## In a group
|
|
87
|
-
|
|
88
|
-
Inside `InputGroup.Field` the textarea joins the group's hover, and the field's `error` turns it destructive.
|
|
89
|
-
|
|
90
|
-
<InputGroup>
|
|
91
|
-
<InputGroup.Field index={0} label="Name" placeholder="Your name" />
|
|
92
|
-
<InputGroup.Field index={1} label="Feedback" error="Tell us a little more.">
|
|
93
|
-
<Textarea defaultValue="Nice" />
|
|
94
|
-
</InputGroup.Field>
|
|
95
|
-
</InputGroup>
|
|
96
|
-
|
|
97
|
-
## Uncontrolled
|
|
98
|
-
|
|
99
|
-
With neither `value` nor `onChange` the DOM holds the text, so `ref` is the real `<textarea>`: `defaultValue`, `ref.current.value = ''` and a native form reset behave as on any textarea. Type, grow the box, then reset: the text goes back to its default and the box re-fits.
|
|
100
|
-
|
|
101
|
-
<form className="flex flex-col items-start gap-2 w-72 max-w-full">
|
|
102
|
-
<Textarea name="note" aria-label="Note" defaultValue={'First line\nSecond line\nThird line\nFourth line'} />
|
|
103
|
-
<Button type="reset" variant="ghost">Reset</Button>
|
|
104
|
-
</form>
|
|
105
|
-
|
|
106
|
-
```tsx
|
|
107
|
-
const ref = useRef<HTMLTextAreaElement>(null)
|
|
108
|
-
|
|
109
|
-
<Textarea ref={ref} name="note" defaultValue="Hello" />
|
|
110
|
-
|
|
111
|
-
ref.current.value // what was typed
|
|
112
|
-
ref.current.value = '' // clears it
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
Choose one mode per instance. A `defaultValue` with an `onChange` that is passed on some renders and not others would flip the textarea between DOM-held and controlled text.
|
|
117
|
-
|
|
118
|
-
## With a form library
|
|
119
|
-
|
|
120
|
-
A `register()`-style form needs the DOM mode, but its `onChange` takes an event where the Textarea's takes a string, so the result can't be spread whole. Only that key clashes: take `onChange` out and pass it as `onInput`, the event handler that fires on every keystroke. `rest` carries `name`, `ref` and `onBlur` straight through.
|
|
121
|
-
|
|
122
|
-
```tsx
|
|
123
|
-
const { onChange, ...rest } = register('note')
|
|
124
|
-
|
|
125
|
-
<Textarea {...rest} onInput={onChange} />
|
|
126
|
-
```
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Local addition (not part of Fluid Functionalism): the multi-line twin of
|
|
3
|
-
* Input, on the same field box (`useFieldBox` in `lib/field-classes.ts`); the box grows with its text from `minRows` to `maxRows`, the way
|
|
4
|
-
* InputMessage's composer does.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { Field } from '@base-ui/react/field'
|
|
8
|
-
import { forwardRef, type TextareaHTMLAttributes, useCallback, useEffect, useLayoutEffect, useRef } from 'react'
|
|
9
|
-
import { type FieldVariant, focusControlOnPress, useFieldBox } from '../../../lib/field-classes'
|
|
10
|
-
import type { SizeVariant } from '../../../lib/size-context'
|
|
11
|
-
import { useControllableState } from '../../../lib/use-controllable-state'
|
|
12
|
-
import { cn } from '../../../lib/utils'
|
|
13
|
-
|
|
14
|
-
interface TextareaProps
|
|
15
|
-
extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange' | 'value' | 'defaultValue' | 'rows'> {
|
|
16
|
-
/** Placeholder text. */
|
|
17
|
-
placeholder?: string
|
|
18
|
-
/** Controlled value. Pair with `onChange`. */
|
|
19
|
-
value?: string
|
|
20
|
-
/** Initial value when uncontrolled. Defaults to `''`. */
|
|
21
|
-
defaultValue?: string
|
|
22
|
-
/** Called with the new value on every change. With neither `value` nor `onChange` the textarea keeps its text in the DOM, for `register()`-style forms that read it through a `ref`; choose one mode per instance, since a `defaultValue` with a conditional `onChange` flips between the two. A form library's event handler goes in `onInput`, not here. */
|
|
23
|
-
onChange?: (value: string) => void
|
|
24
|
-
/** Rows shown when empty; the box never gets shorter. Defaults to `3`. */
|
|
25
|
-
minRows?: number
|
|
26
|
-
/** Rows the box grows to before it scrolls. Set it to `minRows` for a fixed height. Defaults to `8`. */
|
|
27
|
-
maxRows?: number
|
|
28
|
-
/** Framed at rest, or invisible until hovered or focused. Defaults to `"borderless"`. */
|
|
29
|
-
variant?: FieldVariant
|
|
30
|
-
/** Marks the value invalid: the field turns destructive and sets `aria-invalid`. Defaults to `false`. */
|
|
31
|
-
invalid?: boolean
|
|
32
|
-
/** Disables the textarea. Defaults to `false`. */
|
|
33
|
-
disabled?: boolean
|
|
34
|
-
/** Keeps the value selectable but not editable, with the field's read-only look. Defaults to the surrounding Field's `readOnly`. */
|
|
35
|
-
readOnly?: boolean
|
|
36
|
-
/** Marks the textarea required. Defaults to the surrounding Field's `required`. */
|
|
37
|
-
required?: boolean
|
|
38
|
-
/** Pins the textarea to one step of the size ladder (36px default, 28px compact): its text and padding follow, so one row matches an Input. Defaults to the surrounding SizeProvider. */
|
|
39
|
-
size?: SizeVariant
|
|
40
|
-
/** Classes for the ringed box around the textarea. */
|
|
41
|
-
className?: string
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Literal table: one row plus this padding lands on the ladder's control
|
|
45
|
-
// height (20px leading + 8px × 2 = 36px, + 4px × 2 = 28px).
|
|
46
|
-
const PADDING_Y: Record<SizeVariant, string> = {
|
|
47
|
-
default: 'py-2',
|
|
48
|
-
compact: 'py-1',
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Multi-line text field that grows with what you type.
|
|
53
|
-
*
|
|
54
|
-
* It sits on the same ground as Input: bare text at rest (or framed, with
|
|
55
|
-
* `variant="bordered"`), a muted fill with a hairline ring on hover, the
|
|
56
|
-
* card ground on focus, a destructive ring when `invalid`. The box starts at `minRows`, grows line by line as text wraps,
|
|
57
|
-
* and scrolls once it reaches `maxRows`. One row lines up with an Input of
|
|
58
|
-
* the same size, so the two stack in a form without a seam. It is
|
|
59
|
-
* uncontrolled with `defaultValue`, or controlled with `value` + `onChange`,
|
|
60
|
-
* fills the width of its container, and joins a Base UI `Field` when placed
|
|
61
|
-
* inside one. Pair it with a `Label` (see Input) through `htmlFor` / `id`,
|
|
62
|
-
* or put it in an `InputGroup.Field` to label it, join the group's hover and
|
|
63
|
-
* take the field's error.
|
|
64
|
-
*
|
|
65
|
-
* With neither `value` nor `onChange` it is a plain uncontrolled `<textarea>`:
|
|
66
|
-
* the DOM holds the text, `ref` is the real element, and `defaultValue`,
|
|
67
|
-
* `ref.current.value = ''` and a native `form.reset()` all behave as on any
|
|
68
|
-
* textarea (the box re-fits on input and on a form reset), which is what a form
|
|
69
|
-
* library reading fields through refs needs. Choose one mode per instance:
|
|
70
|
-
* a `defaultValue` with an `onChange` that is sometimes passed and sometimes
|
|
71
|
-
* not would flip the textarea between DOM-held and controlled text.
|
|
72
|
-
*
|
|
73
|
-
* `register()`'s result can't be spread whole, because its `onChange` takes an
|
|
74
|
-
* event where this one takes a string, but only that key clashes. Pull it out
|
|
75
|
-
* and hand it to `onInput`, which is the event handler and fires on every
|
|
76
|
-
* keystroke: `const { onChange, ...rest } = register('x')` then
|
|
77
|
-
* `<Textarea {...rest} onInput={onChange} />` (`rest` carries `name`, `ref`
|
|
78
|
-
* and `onBlur`).
|
|
79
|
-
*
|
|
80
|
-
* @example {@include ./examples.mdx}
|
|
81
|
-
*/
|
|
82
|
-
const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
|
|
83
|
-
(
|
|
84
|
-
{
|
|
85
|
-
value: valueProp,
|
|
86
|
-
defaultValue = '',
|
|
87
|
-
onChange: onChangeProp,
|
|
88
|
-
minRows = 3,
|
|
89
|
-
maxRows = 8,
|
|
90
|
-
variant = 'borderless',
|
|
91
|
-
invalid,
|
|
92
|
-
disabled,
|
|
93
|
-
readOnly,
|
|
94
|
-
required,
|
|
95
|
-
size,
|
|
96
|
-
className,
|
|
97
|
-
...props
|
|
98
|
-
},
|
|
99
|
-
ref,
|
|
100
|
-
) => {
|
|
101
|
-
const [value, onChange] = useControllableState(valueProp, defaultValue, onChangeProp)
|
|
102
|
-
const domState = valueProp === undefined && onChangeProp === undefined
|
|
103
|
-
|
|
104
|
-
const textareaRef = useRef<HTMLTextAreaElement | null>(null)
|
|
105
|
-
const box = useFieldBox({ variant, invalid, disabled, readOnly, required, size })
|
|
106
|
-
|
|
107
|
-
const resize = useCallback(() => {
|
|
108
|
-
const el = textareaRef.current
|
|
109
|
-
if (!el) return
|
|
110
|
-
el.style.height = 'auto'
|
|
111
|
-
const lineHeight = Number.parseFloat(getComputedStyle(el).lineHeight)
|
|
112
|
-
const max = lineHeight * Math.max(maxRows, minRows)
|
|
113
|
-
el.style.height = `${Math.min(Math.max(el.scrollHeight, lineHeight * minRows), max)}px`
|
|
114
|
-
el.style.overflowY = el.scrollHeight > max ? 'auto' : 'hidden'
|
|
115
|
-
}, [minRows, maxRows])
|
|
116
|
-
|
|
117
|
-
// Layout effect: the new height lands before paint, so a wrapped line
|
|
118
|
-
// never flashes a scrollbar. `value` and the size step aren't read here,
|
|
119
|
-
// but they change the content height `resize` measures.
|
|
120
|
-
useLayoutEffect(resize, [resize, value, box.size.variant])
|
|
121
|
-
|
|
122
|
-
// DOM-held text changes without a render: re-fit when code assigns `ref.current.value` (the
|
|
123
|
-
// setter is wrapped on the element, over React's own value tracker) and once a native form
|
|
124
|
-
// reset has put the default back.
|
|
125
|
-
useEffect(() => {
|
|
126
|
-
const el = textareaRef.current
|
|
127
|
-
if (!domState || !el) return
|
|
128
|
-
const own = Object.getOwnPropertyDescriptor(el, 'value')
|
|
129
|
-
const inherited = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')
|
|
130
|
-
const base = own ?? inherited
|
|
131
|
-
const set = base?.set
|
|
132
|
-
if (set) {
|
|
133
|
-
Object.defineProperty(el, 'value', {
|
|
134
|
-
configurable: true,
|
|
135
|
-
enumerable: base.enumerable,
|
|
136
|
-
get: base.get,
|
|
137
|
-
set(next: string) {
|
|
138
|
-
set.call(this, next)
|
|
139
|
-
resize()
|
|
140
|
-
},
|
|
141
|
-
})
|
|
142
|
-
}
|
|
143
|
-
const form = el.form
|
|
144
|
-
const onReset = () => setTimeout(resize)
|
|
145
|
-
form?.addEventListener('reset', onReset)
|
|
146
|
-
return () => {
|
|
147
|
-
form?.removeEventListener('reset', onReset)
|
|
148
|
-
if (own) Object.defineProperty(el, 'value', own)
|
|
149
|
-
else if (set) Reflect.deleteProperty(el, 'value')
|
|
150
|
-
}
|
|
151
|
-
}, [domState, resize])
|
|
152
|
-
|
|
153
|
-
// The first measure can run while an ancestor is still at (near-)zero
|
|
154
|
-
// width. Width-gated, so the observer never loops on its own height writes.
|
|
155
|
-
useEffect(() => {
|
|
156
|
-
const el = textareaRef.current
|
|
157
|
-
if (!el) return
|
|
158
|
-
let lastWidth = el.offsetWidth
|
|
159
|
-
const observer = new ResizeObserver(() => {
|
|
160
|
-
if (el.offsetWidth === lastWidth) return
|
|
161
|
-
lastWidth = el.offsetWidth
|
|
162
|
-
resize()
|
|
163
|
-
})
|
|
164
|
-
observer.observe(el)
|
|
165
|
-
return () => observer.disconnect()
|
|
166
|
-
}, [resize])
|
|
167
|
-
|
|
168
|
-
return (
|
|
169
|
-
// biome-ignore lint/a11y/noStaticElementInteractions: the textarea is the focusable control; the box only forwards pointer focus from its padding.
|
|
170
|
-
<div
|
|
171
|
-
onMouseDown={focusControlOnPress(textareaRef)}
|
|
172
|
-
{...box.props}
|
|
173
|
-
className={cn(box.props.className, 'flex', PADDING_Y[box.size.variant], className)}
|
|
174
|
-
>
|
|
175
|
-
{/* Field.Control rendered as a <textarea>: on its own a plain
|
|
176
|
-
textarea, inside a Field.Root it joins the field's wiring. The
|
|
177
|
-
rest props ride on the render element, since Field.Control types
|
|
178
|
-
its own as an <input>'s; Base UI merges the two. */}
|
|
179
|
-
<Field.Control
|
|
180
|
-
ref={(node: HTMLElement | null) => {
|
|
181
|
-
const textarea = node as HTMLTextAreaElement | null
|
|
182
|
-
textareaRef.current = textarea
|
|
183
|
-
if (typeof ref === 'function') ref(textarea)
|
|
184
|
-
else if (ref) ref.current = textarea
|
|
185
|
-
}}
|
|
186
|
-
render={<textarea rows={minRows} {...props} />}
|
|
187
|
-
{...(domState ? { defaultValue, onChange: resize } : { value, onChange: e => onChange(e.target.value) })}
|
|
188
|
-
disabled={box.disabled}
|
|
189
|
-
readOnly={box.readOnly}
|
|
190
|
-
required={box.required}
|
|
191
|
-
aria-invalid={box.invalid || undefined}
|
|
192
|
-
className={cn(
|
|
193
|
-
'block w-full resize-none rounded-none bg-transparent text-foreground placeholder:text-muted-foreground outline-none font-[inherit]',
|
|
194
|
-
box.size.text,
|
|
195
|
-
'weight-normal',
|
|
196
|
-
)}
|
|
197
|
-
/>
|
|
198
|
-
</div>
|
|
199
|
-
)
|
|
200
|
-
},
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
Textarea.displayName = 'Textarea'
|
|
204
|
-
|
|
205
|
-
export type { TextareaProps }
|
|
206
|
-
export { Textarea }
|
|
207
|
-
export default Textarea
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import NavigationMenu from './index'
|
|
2
|
-
import { BookOpen, Boxes, Code, LifeBuoy, Newspaper, Palette, Rocket, Users } from 'lucide-react'
|
|
3
|
-
|
|
4
|
-
# Basic
|
|
5
|
-
|
|
6
|
-
Hover or press a trigger: the panel melts out of it. Move to the next trigger and the one panel springs to the new content, which slides in from that side.
|
|
7
|
-
|
|
8
|
-
<div className="flex min-h-[320px] w-full justify-center">
|
|
9
|
-
<NavigationMenu>
|
|
10
|
-
<NavigationMenu.List>
|
|
11
|
-
<NavigationMenu.Indicator />
|
|
12
|
-
<NavigationMenu.Item value="product">
|
|
13
|
-
<NavigationMenu.Trigger>Product</NavigationMenu.Trigger>
|
|
14
|
-
<NavigationMenu.Content className="grid w-[26rem] grid-cols-2 gap-1">
|
|
15
|
-
<NavigationMenu.Link href="#components" icon={Boxes} description="Every control, on one size ladder.">Components</NavigationMenu.Link>
|
|
16
|
-
<NavigationMenu.Link href="#themes" icon={Palette} description="Tokens for light, dark and your brand.">Themes</NavigationMenu.Link>
|
|
17
|
-
<NavigationMenu.Link href="#motion" icon={Rocket} description="Springs, goo and fluid hover.">Motion</NavigationMenu.Link>
|
|
18
|
-
<NavigationMenu.Link href="#code" icon={Code} description="Typed, documented, tree-shaken.">For developers</NavigationMenu.Link>
|
|
19
|
-
</NavigationMenu.Content>
|
|
20
|
-
</NavigationMenu.Item>
|
|
21
|
-
<NavigationMenu.Item value="resources">
|
|
22
|
-
<NavigationMenu.Trigger>Resources</NavigationMenu.Trigger>
|
|
23
|
-
<NavigationMenu.Content className="flex w-64 flex-col">
|
|
24
|
-
<NavigationMenu.Link href="#docs" icon={BookOpen}>Documentation</NavigationMenu.Link>
|
|
25
|
-
<NavigationMenu.Link href="#blog" icon={Newspaper}>Blog</NavigationMenu.Link>
|
|
26
|
-
<NavigationMenu.Link href="#community" icon={Users}>Community</NavigationMenu.Link>
|
|
27
|
-
<NavigationMenu.Link href="#support" icon={LifeBuoy}>Support</NavigationMenu.Link>
|
|
28
|
-
</NavigationMenu.Content>
|
|
29
|
-
</NavigationMenu.Item>
|
|
30
|
-
<NavigationMenu.Item>
|
|
31
|
-
<NavigationMenu.Link href="#pricing">Pricing</NavigationMenu.Link>
|
|
32
|
-
</NavigationMenu.Item>
|
|
33
|
-
</NavigationMenu.List>
|
|
34
|
-
</NavigationMenu>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
# Current page
|
|
38
|
-
|
|
39
|
-
`active` on a link marks the current page: the indicator rests under it while no panel is open, and travels to whichever item opens.
|
|
40
|
-
|
|
41
|
-
<div className="flex min-h-[240px] w-full justify-center">
|
|
42
|
-
<NavigationMenu>
|
|
43
|
-
<NavigationMenu.List>
|
|
44
|
-
<NavigationMenu.Indicator />
|
|
45
|
-
<NavigationMenu.Item>
|
|
46
|
-
<NavigationMenu.Link href="#home">Home</NavigationMenu.Link>
|
|
47
|
-
</NavigationMenu.Item>
|
|
48
|
-
<NavigationMenu.Item>
|
|
49
|
-
<NavigationMenu.Link href="#projects" active>Projects</NavigationMenu.Link>
|
|
50
|
-
</NavigationMenu.Item>
|
|
51
|
-
<NavigationMenu.Item value="team">
|
|
52
|
-
<NavigationMenu.Trigger>Team</NavigationMenu.Trigger>
|
|
53
|
-
<NavigationMenu.Content className="flex w-56 flex-col">
|
|
54
|
-
<NavigationMenu.Link href="#members">Members</NavigationMenu.Link>
|
|
55
|
-
<NavigationMenu.Link href="#roles">Roles</NavigationMenu.Link>
|
|
56
|
-
<NavigationMenu.Link href="#invites">Invites</NavigationMenu.Link>
|
|
57
|
-
</NavigationMenu.Content>
|
|
58
|
-
</NavigationMenu.Item>
|
|
59
|
-
</NavigationMenu.List>
|
|
60
|
-
</NavigationMenu>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
# Effects
|
|
64
|
-
|
|
65
|
-
The morph options of every overlay: here the panel grows as a plain morph on the moderate tier.
|
|
66
|
-
|
|
67
|
-
<div className="flex min-h-[240px] w-full justify-center">
|
|
68
|
-
<NavigationMenu effect="morph" tier="moderate">
|
|
69
|
-
<NavigationMenu.List>
|
|
70
|
-
<NavigationMenu.Item value="docs">
|
|
71
|
-
<NavigationMenu.Trigger>Docs</NavigationMenu.Trigger>
|
|
72
|
-
<NavigationMenu.Content className="flex w-56 flex-col">
|
|
73
|
-
<NavigationMenu.Link href="#start">Getting started</NavigationMenu.Link>
|
|
74
|
-
<NavigationMenu.Link href="#guides">Guides</NavigationMenu.Link>
|
|
75
|
-
<NavigationMenu.Link href="#api">API reference</NavigationMenu.Link>
|
|
76
|
-
</NavigationMenu.Content>
|
|
77
|
-
</NavigationMenu.Item>
|
|
78
|
-
<NavigationMenu.Item value="company">
|
|
79
|
-
<NavigationMenu.Trigger>Company</NavigationMenu.Trigger>
|
|
80
|
-
<NavigationMenu.Content className="flex w-48 flex-col">
|
|
81
|
-
<NavigationMenu.Link href="#about">About</NavigationMenu.Link>
|
|
82
|
-
<NavigationMenu.Link href="#careers">Careers</NavigationMenu.Link>
|
|
83
|
-
</NavigationMenu.Content>
|
|
84
|
-
</NavigationMenu.Item>
|
|
85
|
-
</NavigationMenu.List>
|
|
86
|
-
</NavigationMenu>
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
# Compact
|
|
90
|
-
|
|
91
|
-
`size="compact"` steps the strip and its panels down the size ladder.
|
|
92
|
-
|
|
93
|
-
<div className="flex min-h-[240px] w-full justify-center">
|
|
94
|
-
<NavigationMenu size="compact">
|
|
95
|
-
<NavigationMenu.List>
|
|
96
|
-
<NavigationMenu.Indicator />
|
|
97
|
-
<NavigationMenu.Item value="product">
|
|
98
|
-
<NavigationMenu.Trigger>Product</NavigationMenu.Trigger>
|
|
99
|
-
<NavigationMenu.Content className="flex w-56 flex-col">
|
|
100
|
-
<NavigationMenu.Link href="#components" icon={Boxes} description="Every control.">Components</NavigationMenu.Link>
|
|
101
|
-
<NavigationMenu.Link href="#themes" icon={Palette} description="Tokens and modes.">Themes</NavigationMenu.Link>
|
|
102
|
-
</NavigationMenu.Content>
|
|
103
|
-
</NavigationMenu.Item>
|
|
104
|
-
<NavigationMenu.Item>
|
|
105
|
-
<NavigationMenu.Link href="#pricing">Pricing</NavigationMenu.Link>
|
|
106
|
-
</NavigationMenu.Item>
|
|
107
|
-
</NavigationMenu.List>
|
|
108
|
-
</NavigationMenu>
|
|
109
|
-
</div>
|
|
110
|
-
|
|
111
|
-
# Landmark and slots
|
|
112
|
-
|
|
113
|
-
The root is the `<nav>`: it takes a ref and HTML attributes, so give it an `aria-label`. `asChild` on `Trigger` and
|
|
114
|
-
`Content` makes them the element you pass, which keeps its type and ref: here the panel is a real `ul` of `li` links.
|
|
115
|
-
|
|
116
|
-
<div className="flex min-h-[240px] w-full justify-center">
|
|
117
|
-
<NavigationMenu aria-label="Main">
|
|
118
|
-
<NavigationMenu.List>
|
|
119
|
-
<NavigationMenu.Item value="docs">
|
|
120
|
-
<NavigationMenu.Trigger asChild>
|
|
121
|
-
<button type="button">Docs</button>
|
|
122
|
-
</NavigationMenu.Trigger>
|
|
123
|
-
<NavigationMenu.Content asChild className="m-0 flex w-56 list-none flex-col">
|
|
124
|
-
<ul>
|
|
125
|
-
<li><NavigationMenu.Link href="#start" icon={BookOpen}>Getting started</NavigationMenu.Link></li>
|
|
126
|
-
<li><NavigationMenu.Link href="#guides" icon={Newspaper}>Guides</NavigationMenu.Link></li>
|
|
127
|
-
<li><NavigationMenu.Link href="#api" icon={Code}>API reference</NavigationMenu.Link></li>
|
|
128
|
-
</ul>
|
|
129
|
-
</NavigationMenu.Content>
|
|
130
|
-
</NavigationMenu.Item>
|
|
131
|
-
<NavigationMenu.Item>
|
|
132
|
-
<NavigationMenu.Link href="#pricing">Pricing</NavigationMenu.Link>
|
|
133
|
-
</NavigationMenu.Item>
|
|
134
|
-
</NavigationMenu.List>
|
|
135
|
-
</NavigationMenu>
|
|
136
|
-
</div>
|