@justanarthur/modo-ui 0.6.0-canary.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-c7rwx0ap.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-c74gf16d.js → components-1z6tdadk.js} +24 -40
- package/dist/shared/{components-bae8sbjx.js → components-27nnvrwe.js} +14 -15
- package/dist/shared/{components-qh1cvj6p.js → components-2dxkv6zm.js} +7 -8
- package/dist/shared/{components-y0kfy2g4.js → components-2ecg8svx.js} +152 -234
- package/dist/shared/{components-c5w5zk0s.js → components-2ph6t61s.js} +34 -37
- package/dist/shared/{components-4j3t39dd.js → components-39jq9va1.js} +24 -29
- package/dist/shared/components-3ky44908.js +9 -0
- package/dist/shared/{components-syynwm1r.js → components-3mkepka5.js} +25 -28
- package/dist/shared/{components-wgtjt2af.js → components-4700p9kz.js} +22 -24
- package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
- package/dist/shared/{components-91zw3d9f.js → components-5vgpnxgy.js} +27 -51
- package/dist/shared/{components-kz5q11pp.js → components-5xc2j8jz.js} +18 -19
- package/dist/shared/{components-zkk3fmw8.js → components-6p8tfcd6.js} +29 -57
- package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
- package/dist/shared/{components-svkt577j.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-pv1dyrtn.js → components-b3c5et5b.js} +38 -49
- package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
- package/dist/shared/{components-pwayrkw9.js → components-chacnk61.js} +19 -19
- package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
- package/dist/shared/{components-hgv6tygd.js → components-d6xtjht3.js} +30 -35
- package/dist/shared/{components-z8fedth5.js → components-dk0gjr5a.js} +18 -19
- package/dist/shared/{components-cet3jpa0.js → components-fzrq6tr3.js} +34 -37
- package/dist/shared/{components-cnead5qm.js → components-gc5vtq2f.js} +30 -66
- package/dist/shared/components-gf5s6ap9.js +42 -0
- package/dist/shared/{components-0h78g3b5.js → components-gz8zf3ec.js} +55 -56
- package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
- package/dist/shared/{components-m06yq8wk.js → components-hqeq3w9q.js} +23 -38
- package/dist/shared/{components-7qx17na9.js → components-hw9yk32z.js} +24 -36
- package/dist/shared/components-hyq23phv.js +310 -0
- package/dist/shared/{components-9jmjnkqd.js → components-jbbmdr74.js} +22 -41
- package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
- package/dist/shared/{components-303jf96s.js → components-jthe1pwb.js} +420 -139
- package/dist/shared/{components-dtca4s6b.js → components-jwst3vtj.js} +76 -224
- package/dist/shared/{components-dc5q749x.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-qx27excf.js → components-mjthm1kf.js} +9 -13
- package/dist/shared/{components-1e64t8aj.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-w2jqa6hx.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-2a7hcand.js → components-rr7a6ja9.js} +27 -59
- package/dist/shared/{components-005jt2nz.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-p0fm0bab.js → components-w1r67ag9.js} +149 -294
- package/dist/shared/{components-xd3emmy4.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-yxmxn2jp.js → components-y9y0g8er.js} +28 -52
- package/dist/shared/components-ypp01w3p.js +986 -0
- package/dist/shared/{components-czdvj1a8.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-01w9qcfa.js +0 -277
- package/dist/shared/components-124epb7f.js +0 -53
- package/dist/shared/components-26snnbs9.js +0 -322
- package/dist/shared/components-2krsc300.js +0 -254
- package/dist/shared/components-2qbqqpgq.js +0 -1545
- 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-868v7scv.js +0 -399
- package/dist/shared/components-8jrk5eye.js +0 -448
- 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-bsqynhaj.js +0 -179
- package/dist/shared/components-c9yr4ed1.js +0 -44
- 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-f7h57m6t.js +0 -59
- package/dist/shared/components-g3eafs70.js +0 -337
- 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-mhza2wdn.js +0 -482
- package/dist/shared/components-mrbaxt8q.js +0 -62
- package/dist/shared/components-pt5ftm4p.js +0 -38
- package/dist/shared/components-rtadhd9j.js +0 -64
- package/dist/shared/components-tv7b8tet.js +0 -271
- package/dist/shared/components-tz4gaf1v.js +0 -23
- package/dist/shared/components-wbbckbw8.js +0 -34
- package/dist/shared/components-wknae3m4.js +0 -298
- 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/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 -575
- 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,444 +0,0 @@
|
|
|
1
|
-
import Dropdown from './index'
|
|
2
|
-
import Button from '../../button'
|
|
3
|
-
import Dialog from '../dialog'
|
|
4
|
-
import Input from '../../inputs/input'
|
|
5
|
-
import { Bell, BookOpen, ChevronDown, Clock, Copy, Ellipsis, Lock, LogOut, Mail, Monitor, Palette, Pencil, Settings, Shield, SquareLibrary, Star, Trash2, User, Users } from 'lucide-react'
|
|
6
|
-
|
|
7
|
-
# Basics
|
|
8
|
-
|
|
9
|
-
## Basic
|
|
10
|
-
|
|
11
|
-
The inline panel, running its own selection: `defaultCheckedIndex` makes
|
|
12
|
-
the rows radio options and the panel moves the marker itself.
|
|
13
|
-
|
|
14
|
-
<Dropdown defaultCheckedIndex={0}>
|
|
15
|
-
<Dropdown.Item index={0} icon={SquareLibrary} label="Teamspaces" />
|
|
16
|
-
<Dropdown.Item index={1} icon={Clock} label="Recents" />
|
|
17
|
-
<Dropdown.Item index={2} icon={Star} label="Favorites" />
|
|
18
|
-
<Dropdown.Item index={3} icon={Users} label="Shared" />
|
|
19
|
-
<Dropdown.Item index={4} icon={Lock} label="Private" />
|
|
20
|
-
</Dropdown>
|
|
21
|
-
|
|
22
|
-
## Triggered menu
|
|
23
|
-
|
|
24
|
-
3 parts: Dropdown.Menu, Dropdown.Trigger, Dropdown.Content. Any element
|
|
25
|
-
goes in `render`, and picking a row closes the menu.
|
|
26
|
-
|
|
27
|
-
<Dropdown.Menu>
|
|
28
|
-
<Dropdown.Trigger render={<Button variant="ghost">Open menu</Button>} />
|
|
29
|
-
<Dropdown.Content defaultCheckedIndex={0}>
|
|
30
|
-
<Dropdown.Item index={0} icon={SquareLibrary} label="Teamspaces" />
|
|
31
|
-
<Dropdown.Item index={1} icon={Clock} label="Recents" />
|
|
32
|
-
<Dropdown.Item index={2} icon={Star} label="Favorites" />
|
|
33
|
-
<Dropdown.Item index={3} icon={Users} label="Shared" />
|
|
34
|
-
<Dropdown.Item index={4} icon={Lock} label="Private" />
|
|
35
|
-
</Dropdown.Content>
|
|
36
|
-
</Dropdown.Menu>
|
|
37
|
-
|
|
38
|
-
## Children items
|
|
39
|
-
|
|
40
|
-
Rows written shadcn-style: the content as children and no `index` — each row
|
|
41
|
-
takes its place in document order, conditional rows included. `shortcut`
|
|
42
|
-
adds a muted caption at the end, `inset` lines a text-only row up with the
|
|
43
|
-
rows that have an icon, and `onSelect` runs on a pick by pointer or keyboard.
|
|
44
|
-
|
|
45
|
-
<Dropdown.Menu>
|
|
46
|
-
<Dropdown.Trigger asChild>
|
|
47
|
-
<Button variant="ghost" size="icon" aria-label="Row actions"><Ellipsis /></Button>
|
|
48
|
-
</Dropdown.Trigger>
|
|
49
|
-
<Dropdown.Content align="end">
|
|
50
|
-
<Dropdown.Item icon={Pencil} shortcut="⌘E">Edit</Dropdown.Item>
|
|
51
|
-
<Dropdown.Item icon={Copy} shortcut="⌘D">Duplicate</Dropdown.Item>
|
|
52
|
-
<Dropdown.Item inset>Move to…</Dropdown.Item>
|
|
53
|
-
<Dropdown.Item disabled inset>Archive</Dropdown.Item>
|
|
54
|
-
<Dropdown.Separator />
|
|
55
|
-
<Dropdown.Item icon={Trash2} shortcut="⌫">Delete</Dropdown.Item>
|
|
56
|
-
</Dropdown.Content>
|
|
57
|
-
</Dropdown.Menu>
|
|
58
|
-
|
|
59
|
-
## Groups
|
|
60
|
-
|
|
61
|
-
Without any checked state the rows are plain actions. Dropdown.Label
|
|
62
|
-
captions a run of them, Dropdown.Separator rules between the runs, and the
|
|
63
|
-
indices keep counting across both.
|
|
64
|
-
|
|
65
|
-
<Dropdown>
|
|
66
|
-
<Dropdown.Label>Account</Dropdown.Label>
|
|
67
|
-
<Dropdown.Item index={0} icon={Mail} label="Email" />
|
|
68
|
-
<Dropdown.Item index={1} icon={Bell} label="Notifications" />
|
|
69
|
-
<Dropdown.Item index={2} icon={Shield} label="Privacy" />
|
|
70
|
-
<Dropdown.Separator />
|
|
71
|
-
<Dropdown.Label>Appearance</Dropdown.Label>
|
|
72
|
-
<Dropdown.Item index={3} icon={Settings} label="General" />
|
|
73
|
-
<Dropdown.Item index={4} icon={Palette} label="Theme" />
|
|
74
|
-
<Dropdown.Item index={5} icon={Monitor} label="Display" />
|
|
75
|
-
</Dropdown>
|
|
76
|
-
|
|
77
|
-
## Groups and labels
|
|
78
|
-
|
|
79
|
-
`Dropdown.Group` holds a run of related rows; a `Dropdown.Label` inside it
|
|
80
|
-
names the group for assistive tech. Labels and separators break the row
|
|
81
|
-
order, so nothing selected melts across them.
|
|
82
|
-
|
|
83
|
-
<Dropdown.Menu>
|
|
84
|
-
<Dropdown.Trigger render={<Button variant="secondary" leadingIcon={User}>Account</Button>} />
|
|
85
|
-
<Dropdown.Content>
|
|
86
|
-
<Dropdown.Group>
|
|
87
|
-
<Dropdown.Label>My account</Dropdown.Label>
|
|
88
|
-
<Dropdown.Item icon={User}>Profile</Dropdown.Item>
|
|
89
|
-
<Dropdown.Item icon={Settings}>Settings</Dropdown.Item>
|
|
90
|
-
</Dropdown.Group>
|
|
91
|
-
<Dropdown.Separator />
|
|
92
|
-
<Dropdown.Group>
|
|
93
|
-
<Dropdown.Label inset>Team</Dropdown.Label>
|
|
94
|
-
<Dropdown.Item inset>Invite members</Dropdown.Item>
|
|
95
|
-
<Dropdown.Item inset>New team</Dropdown.Item>
|
|
96
|
-
</Dropdown.Group>
|
|
97
|
-
<Dropdown.Separator />
|
|
98
|
-
<Dropdown.Item icon={LogOut}>Log out</Dropdown.Item>
|
|
99
|
-
</Dropdown.Content>
|
|
100
|
-
</Dropdown.Menu>
|
|
101
|
-
|
|
102
|
-
## Shortcut
|
|
103
|
-
|
|
104
|
-
`Dropdown.Shortcut` is the trailing caption on its own, for rows that lay
|
|
105
|
-
out their own content.
|
|
106
|
-
|
|
107
|
-
<Dropdown className="w-64">
|
|
108
|
-
<Dropdown.Item>
|
|
109
|
-
<Mail />
|
|
110
|
-
New message
|
|
111
|
-
<Dropdown.Shortcut>⌘N</Dropdown.Shortcut>
|
|
112
|
-
</Dropdown.Item>
|
|
113
|
-
<Dropdown.Item>
|
|
114
|
-
<Bell />
|
|
115
|
-
Mute thread
|
|
116
|
-
<Dropdown.Shortcut>⇧⌘M</Dropdown.Shortcut>
|
|
117
|
-
</Dropdown.Item>
|
|
118
|
-
</Dropdown>
|
|
119
|
-
|
|
120
|
-
# Selection
|
|
121
|
-
|
|
122
|
-
## Multiple selection
|
|
123
|
-
|
|
124
|
-
`defaultCheckedIndices` (or `checkedIndices`): rows become checkboxes, the
|
|
125
|
-
menu stays open as you toggle, and touching picks share one background.
|
|
126
|
-
|
|
127
|
-
<Dropdown.Menu>
|
|
128
|
-
<Dropdown.Trigger render={<Button variant="ghost">Status</Button>} />
|
|
129
|
-
<Dropdown.Content defaultCheckedIndices={[0, 1, 2]}>
|
|
130
|
-
{['Open', 'In progress', 'In review', 'Blocked', 'Done', 'Archived'].map((status, i) => (
|
|
131
|
-
<Dropdown.Item key={status} index={i} label={status} />
|
|
132
|
-
))}
|
|
133
|
-
</Dropdown.Content>
|
|
134
|
-
</Dropdown.Menu>
|
|
135
|
-
|
|
136
|
-
## Checkbox items
|
|
137
|
-
|
|
138
|
-
`Dropdown.CheckboxItem` toggles itself — `defaultChecked`, or `checked` with
|
|
139
|
-
`onCheckedChange` — and keeps the menu open. Touching checked rows share one
|
|
140
|
-
background, as in a multiple selection. Uncontrolled rows live inside the
|
|
141
|
-
popup, so `keepMounted` keeps their state across opens.
|
|
142
|
-
|
|
143
|
-
<Dropdown.Menu>
|
|
144
|
-
<Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Columns</Button>} />
|
|
145
|
-
<Dropdown.Content align="end" keepMounted>
|
|
146
|
-
<Dropdown.Label>Visible columns</Dropdown.Label>
|
|
147
|
-
<Dropdown.CheckboxItem defaultChecked>Name</Dropdown.CheckboxItem>
|
|
148
|
-
<Dropdown.CheckboxItem defaultChecked>Email</Dropdown.CheckboxItem>
|
|
149
|
-
<Dropdown.CheckboxItem>Role</Dropdown.CheckboxItem>
|
|
150
|
-
<Dropdown.CheckboxItem defaultChecked>Status</Dropdown.CheckboxItem>
|
|
151
|
-
<Dropdown.CheckboxItem disabled>Created</Dropdown.CheckboxItem>
|
|
152
|
-
</Dropdown.Content>
|
|
153
|
-
</Dropdown.Menu>
|
|
154
|
-
|
|
155
|
-
## Radio group
|
|
156
|
-
|
|
157
|
-
`Dropdown.RadioGroup` picks one of its `Dropdown.RadioItem` rows by `value`
|
|
158
|
-
(`defaultValue`, or `value` with `onValueChange`). Picking one closes the
|
|
159
|
-
menu.
|
|
160
|
-
|
|
161
|
-
<Dropdown.Menu>
|
|
162
|
-
<Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Language</Button>} />
|
|
163
|
-
<Dropdown.Content keepMounted>
|
|
164
|
-
<Dropdown.RadioGroup defaultValue="sk">
|
|
165
|
-
<Dropdown.Label>Language</Dropdown.Label>
|
|
166
|
-
<Dropdown.RadioItem value="sk">Slovenčina</Dropdown.RadioItem>
|
|
167
|
-
<Dropdown.RadioItem value="cs">Čeština</Dropdown.RadioItem>
|
|
168
|
-
<Dropdown.RadioItem value="en">English</Dropdown.RadioItem>
|
|
169
|
-
<Dropdown.RadioItem value="de" disabled>Deutsch</Dropdown.RadioItem>
|
|
170
|
-
</Dropdown.RadioGroup>
|
|
171
|
-
</Dropdown.Content>
|
|
172
|
-
</Dropdown.Menu>
|
|
173
|
-
|
|
174
|
-
## Searchable menu
|
|
175
|
-
|
|
176
|
-
Put a Dropdown.Search marked `filter` first and the panel filters its own
|
|
177
|
-
rows by `label`. Type to filter, press Enter to pick the first match.
|
|
178
|
-
|
|
179
|
-
<Dropdown.Menu>
|
|
180
|
-
<Dropdown.Trigger render={<Button variant="ghost" trailingIcon={ChevronDown}>Language</Button>} />
|
|
181
|
-
<Dropdown.Content defaultCheckedIndex={0}>
|
|
182
|
-
<Dropdown.Search filter placeholder="Search languages" />
|
|
183
|
-
{['Auto detect', 'Arabic', 'Bengali', 'Chinese (Simplified)', 'Czech', 'Danish', 'Dutch', 'English (UK)', 'English (US)', 'Finnish', 'French', 'German', 'Greek', 'Hebrew', 'Hindi', 'Hungarian', 'Indonesian', 'Italian', 'Japanese', 'Korean', 'Norwegian', 'Polish', 'Portuguese (Brazil)', 'Romanian', 'Russian', 'Spanish', 'Swedish', 'Thai', 'Turkish', 'Ukrainian', 'Vietnamese'].map((language, i) => (
|
|
184
|
-
<Dropdown.Item key={language} index={i} label={language} />
|
|
185
|
-
))}
|
|
186
|
-
<Dropdown.Empty>No languages found</Dropdown.Empty>
|
|
187
|
-
</Dropdown.Content>
|
|
188
|
-
</Dropdown.Menu>
|
|
189
|
-
|
|
190
|
-
## Searchable multiple selection
|
|
191
|
-
|
|
192
|
-
Both at once. The panel filters the rows and keeps the picks on the rows
|
|
193
|
-
themselves, so a filtered-away pick is still checked when it comes back.
|
|
194
|
-
|
|
195
|
-
<Dropdown.Menu>
|
|
196
|
-
<Dropdown.Trigger render={<Button variant="ghost">Labels</Button>} />
|
|
197
|
-
<Dropdown.Content defaultCheckedIndices={[0, 3]}>
|
|
198
|
-
<Dropdown.Search filter placeholder="Search labels" />
|
|
199
|
-
{['Bug', 'Feature', 'Docs', 'Design', 'Performance', 'Accessibility', 'Refactor', 'Testing', 'Infrastructure', 'Security', 'Good first issue', 'Help wanted'].map((label, i) => (
|
|
200
|
-
<Dropdown.Item key={label} index={i} label={label} />
|
|
201
|
-
))}
|
|
202
|
-
<Dropdown.Empty>No labels found</Dropdown.Empty>
|
|
203
|
-
</Dropdown.Content>
|
|
204
|
-
</Dropdown.Menu>
|
|
205
|
-
|
|
206
|
-
# Composition
|
|
207
|
-
|
|
208
|
-
## Submenu
|
|
209
|
-
|
|
210
|
-
A `Dropdown.Sub` holds a trigger row and its panel. ArrowRight, a press or a
|
|
211
|
-
resting pointer opens it, ArrowLeft or Escape closes it; it grows out of its
|
|
212
|
-
row, which stays lit while it is open, and nests as deep as you like.
|
|
213
|
-
|
|
214
|
-
<Dropdown.Menu>
|
|
215
|
-
<Dropdown.Trigger render={<Button variant="secondary">Options</Button>} />
|
|
216
|
-
<Dropdown.Content keepMounted>
|
|
217
|
-
<Dropdown.Item icon={User}>Profile</Dropdown.Item>
|
|
218
|
-
<Dropdown.Sub>
|
|
219
|
-
<Dropdown.SubTrigger icon={Palette}>Theme</Dropdown.SubTrigger>
|
|
220
|
-
<Dropdown.SubContent keepMounted>
|
|
221
|
-
<Dropdown.RadioGroup defaultValue="system">
|
|
222
|
-
<Dropdown.RadioItem value="light">Light</Dropdown.RadioItem>
|
|
223
|
-
<Dropdown.RadioItem value="dark">Dark</Dropdown.RadioItem>
|
|
224
|
-
<Dropdown.RadioItem value="system">System</Dropdown.RadioItem>
|
|
225
|
-
</Dropdown.RadioGroup>
|
|
226
|
-
</Dropdown.SubContent>
|
|
227
|
-
</Dropdown.Sub>
|
|
228
|
-
<Dropdown.Sub>
|
|
229
|
-
<Dropdown.SubTrigger icon={Users}>Invite users</Dropdown.SubTrigger>
|
|
230
|
-
<Dropdown.SubContent>
|
|
231
|
-
<Dropdown.Item icon={Mail}>Email</Dropdown.Item>
|
|
232
|
-
<Dropdown.Item icon={Copy}>Copy link</Dropdown.Item>
|
|
233
|
-
<Dropdown.Separator />
|
|
234
|
-
<Dropdown.Sub>
|
|
235
|
-
<Dropdown.SubTrigger inset>More</Dropdown.SubTrigger>
|
|
236
|
-
<Dropdown.SubContent>
|
|
237
|
-
<Dropdown.Item>Slack</Dropdown.Item>
|
|
238
|
-
<Dropdown.Item>Teams</Dropdown.Item>
|
|
239
|
-
</Dropdown.SubContent>
|
|
240
|
-
</Dropdown.Sub>
|
|
241
|
-
</Dropdown.SubContent>
|
|
242
|
-
</Dropdown.Sub>
|
|
243
|
-
<Dropdown.Separator />
|
|
244
|
-
<Dropdown.Item icon={LogOut}>Log out</Dropdown.Item>
|
|
245
|
-
</Dropdown.Content>
|
|
246
|
-
</Dropdown.Menu>
|
|
247
|
-
|
|
248
|
-
## Link rows
|
|
249
|
-
|
|
250
|
-
`asChild` turns a row into its single child, which keeps its element type, props and ref, so a row can be a plain link
|
|
251
|
-
or a router `Link`; its children are the row's content. `render={<Link href="/docs" />}` does the same. Enter and a
|
|
252
|
-
click follow it once.
|
|
253
|
-
|
|
254
|
-
<Dropdown.Menu>
|
|
255
|
-
<Dropdown.Trigger render={<Button variant="secondary">Help</Button>} />
|
|
256
|
-
<Dropdown.Content>
|
|
257
|
-
<Dropdown.Item asChild icon={BookOpen} className="no-underline">
|
|
258
|
-
<a href="#docs">Documentation</a>
|
|
259
|
-
</Dropdown.Item>
|
|
260
|
-
<Dropdown.Item asChild icon={Mail} className="no-underline">
|
|
261
|
-
<a href="#support">Contact support</a>
|
|
262
|
-
</Dropdown.Item>
|
|
263
|
-
</Dropdown.Content>
|
|
264
|
-
</Dropdown.Menu>
|
|
265
|
-
|
|
266
|
-
## Typeahead for rich rows
|
|
267
|
-
|
|
268
|
-
Typing while the menu is open jumps to the row whose text starts with what you typed. A row built from markup has no
|
|
269
|
-
string to match, so `textValue` supplies it: here "ad" lands on the first row, "gr" on the second.
|
|
270
|
-
|
|
271
|
-
<Dropdown.Menu>
|
|
272
|
-
<Dropdown.Trigger render={<Button variant="secondary">Assign to</Button>} />
|
|
273
|
-
<Dropdown.Content>
|
|
274
|
-
<Dropdown.Item textValue="Ada Lovelace">
|
|
275
|
-
<User />
|
|
276
|
-
<span className="truncate">Ada Lovelace</span>
|
|
277
|
-
<Dropdown.Shortcut>Admin</Dropdown.Shortcut>
|
|
278
|
-
</Dropdown.Item>
|
|
279
|
-
<Dropdown.Item textValue="Grace Hopper">
|
|
280
|
-
<User />
|
|
281
|
-
<span className="truncate">Grace Hopper</span>
|
|
282
|
-
<Dropdown.Shortcut>Editor</Dropdown.Shortcut>
|
|
283
|
-
</Dropdown.Item>
|
|
284
|
-
<Dropdown.Item textValue="Linus Torvalds">
|
|
285
|
-
<User />
|
|
286
|
-
<span className="truncate">Linus Torvalds</span>
|
|
287
|
-
<Dropdown.Shortcut>Viewer</Dropdown.Shortcut>
|
|
288
|
-
</Dropdown.Item>
|
|
289
|
-
</Dropdown.Content>
|
|
290
|
-
</Dropdown.Menu>
|
|
291
|
-
|
|
292
|
-
## Inside a dialog
|
|
293
|
-
|
|
294
|
-
A menu lifts 2 surface levels above whatever it opens over — a dialog
|
|
295
|
-
included — and so does its submenu above the menu.
|
|
296
|
-
|
|
297
|
-
<Dialog>
|
|
298
|
-
<Dialog.Trigger render={<Button variant="tertiary">Open dialog</Button>} />
|
|
299
|
-
<Dialog.Content>
|
|
300
|
-
<Dialog.Header>
|
|
301
|
-
<Dialog.Title>Share document</Dialog.Title>
|
|
302
|
-
<Dialog.Description>Pick who can see it.</Dialog.Description>
|
|
303
|
-
</Dialog.Header>
|
|
304
|
-
<Dropdown.Menu>
|
|
305
|
-
<Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Access</Button>} />
|
|
306
|
-
<Dropdown.Content keepMounted>
|
|
307
|
-
<Dropdown.RadioGroup defaultValue="team">
|
|
308
|
-
<Dropdown.RadioItem value="private" icon={Lock}>Only me</Dropdown.RadioItem>
|
|
309
|
-
<Dropdown.RadioItem value="team" icon={Users}>My team</Dropdown.RadioItem>
|
|
310
|
-
</Dropdown.RadioGroup>
|
|
311
|
-
<Dropdown.Separator />
|
|
312
|
-
<Dropdown.Sub>
|
|
313
|
-
<Dropdown.SubTrigger icon={Shield}>Advanced</Dropdown.SubTrigger>
|
|
314
|
-
<Dropdown.SubContent keepMounted>
|
|
315
|
-
<Dropdown.CheckboxItem defaultChecked>Allow comments</Dropdown.CheckboxItem>
|
|
316
|
-
<Dropdown.CheckboxItem>Allow downloads</Dropdown.CheckboxItem>
|
|
317
|
-
</Dropdown.SubContent>
|
|
318
|
-
</Dropdown.Sub>
|
|
319
|
-
</Dropdown.Content>
|
|
320
|
-
</Dropdown.Menu>
|
|
321
|
-
</Dialog.Content>
|
|
322
|
-
</Dialog>
|
|
323
|
-
|
|
324
|
-
# Behavior
|
|
325
|
-
|
|
326
|
-
## Morph
|
|
327
|
-
|
|
328
|
-
The menu oozes out of its trigger by default. `effect="morph"` with `hideSource` turns the trigger itself into the menu and shrinks it back, one continuous surface.
|
|
329
|
-
|
|
330
|
-
<div className="flex flex-wrap items-start justify-center gap-3">
|
|
331
|
-
<Dropdown.Menu>
|
|
332
|
-
<Dropdown.Trigger render={<Button variant="secondary">Goo</Button>} />
|
|
333
|
-
<Dropdown.Content defaultCheckedIndex={0}>
|
|
334
|
-
<Dropdown.Item index={0} icon={Mail} label="Email" />
|
|
335
|
-
<Dropdown.Item index={1} icon={Bell} label="Notifications" />
|
|
336
|
-
<Dropdown.Item index={2} icon={Shield} label="Privacy" />
|
|
337
|
-
</Dropdown.Content>
|
|
338
|
-
</Dropdown.Menu>
|
|
339
|
-
<Dropdown.Menu>
|
|
340
|
-
<Dropdown.Trigger render={<Button variant="secondary">Morph</Button>} />
|
|
341
|
-
<Dropdown.Content effect="morph" hideSource defaultCheckedIndex={0}>
|
|
342
|
-
<Dropdown.Item index={0} icon={Settings} label="General" />
|
|
343
|
-
<Dropdown.Item index={1} icon={Palette} label="Theme" />
|
|
344
|
-
<Dropdown.Item index={2} icon={Monitor} label="Display" />
|
|
345
|
-
</Dropdown.Content>
|
|
346
|
-
</Dropdown.Menu>
|
|
347
|
-
</div>
|
|
348
|
-
|
|
349
|
-
## Open-change details
|
|
350
|
-
|
|
351
|
-
`onOpenChange(open, details)` hands over Base UI's event details: `details.reason` says why the menu is closing
|
|
352
|
-
(`'escape-key'`, `'outside-press'`, `'focus-out'`, `'item-press'`, `'trigger-press'`) and `details.cancel()` keeps it
|
|
353
|
-
open. Here an outside press is refused, so only Escape, a pick or the trigger close it. A callback that takes just
|
|
354
|
-
`open` keeps working.
|
|
355
|
-
|
|
356
|
-
<Dropdown.Menu onOpenChange={(open, details) => { if (!open && details.reason === 'outside-press') details.cancel() }}>
|
|
357
|
-
<Dropdown.Trigger render={<Button variant="secondary">Pinned open</Button>} />
|
|
358
|
-
<Dropdown.Content>
|
|
359
|
-
<Dropdown.Item icon={Pencil}>Edit</Dropdown.Item>
|
|
360
|
-
<Dropdown.Item icon={Copy}>Duplicate</Dropdown.Item>
|
|
361
|
-
<Dropdown.Sub>
|
|
362
|
-
<Dropdown.SubTrigger icon={Palette}>Theme</Dropdown.SubTrigger>
|
|
363
|
-
<Dropdown.SubContent>
|
|
364
|
-
<Dropdown.Item>Light</Dropdown.Item>
|
|
365
|
-
<Dropdown.Item>Dark</Dropdown.Item>
|
|
366
|
-
</Dropdown.SubContent>
|
|
367
|
-
</Dropdown.Sub>
|
|
368
|
-
</Dropdown.Content>
|
|
369
|
-
</Dropdown.Menu>
|
|
370
|
-
|
|
371
|
-
## Modal
|
|
372
|
-
|
|
373
|
-
`modal` locks the page scroll while the menu is open and keeps the pointer off everything outside it. Without it
|
|
374
|
-
(the default) the page keeps scrolling and the menu follows its trigger.
|
|
375
|
-
|
|
376
|
-
<Dropdown.Menu modal>
|
|
377
|
-
<Dropdown.Trigger render={<Button variant="secondary">Modal menu</Button>} />
|
|
378
|
-
<Dropdown.Content>
|
|
379
|
-
<Dropdown.Item icon={Pencil}>Edit</Dropdown.Item>
|
|
380
|
-
<Dropdown.Item icon={Trash2}>Delete</Dropdown.Item>
|
|
381
|
-
</Dropdown.Content>
|
|
382
|
-
</Dropdown.Menu>
|
|
383
|
-
|
|
384
|
-
## Focus return
|
|
385
|
-
|
|
386
|
-
`finalFocus` decides where focus lands once the menu has closed: a ref, or a function returning an element, instead of
|
|
387
|
-
the trigger. Pick a country and the cursor goes to the phone field, also inside a dialog.
|
|
388
|
-
|
|
389
|
-
<Dialog>
|
|
390
|
-
<Dialog.Trigger render={<Button variant="tertiary">Add a phone number</Button>} />
|
|
391
|
-
<Dialog.Content>
|
|
392
|
-
<Dialog.Header>
|
|
393
|
-
<Dialog.Title>Phone number</Dialog.Title>
|
|
394
|
-
<Dialog.Description>Choose a country code, then type the number.</Dialog.Description>
|
|
395
|
-
</Dialog.Header>
|
|
396
|
-
<div className="flex items-center gap-2">
|
|
397
|
-
<Dropdown.Menu>
|
|
398
|
-
<Dropdown.Trigger render={<Button variant="secondary" trailingIcon={ChevronDown}>Country code</Button>} />
|
|
399
|
-
<Dropdown.Content finalFocus={() => document.getElementById('dropdown-phone-field')}>
|
|
400
|
-
<Dropdown.Item textValue="Slovakia">Slovakia +421</Dropdown.Item>
|
|
401
|
-
<Dropdown.Item textValue="Czechia">Czechia +420</Dropdown.Item>
|
|
402
|
-
<Dropdown.Item textValue="Germany">Germany +49</Dropdown.Item>
|
|
403
|
-
</Dropdown.Content>
|
|
404
|
-
</Dropdown.Menu>
|
|
405
|
-
<Input id="dropdown-phone-field" aria-label="Phone number" placeholder="900 000 000" />
|
|
406
|
-
</div>
|
|
407
|
-
</Dialog.Content>
|
|
408
|
-
</Dialog>
|
|
409
|
-
|
|
410
|
-
## Placement and layering
|
|
411
|
-
|
|
412
|
-
Everything Base UI's positioner and portal take, plus a lift. `positionerClassName` styles the portalled positioner,
|
|
413
|
-
which is `z-50`: a z utility there lifts a menu above other fixed layers. `container` mounts the menu somewhere else,
|
|
414
|
-
`alignOffset`, `collisionPadding` and `collisionBoundary` steer where it sits near an edge. `initialFocus` takes a ref
|
|
415
|
-
to focus once the menu has opened (read when it opens, so a fresh ref object each render is fine), and extra HTML
|
|
416
|
-
attributes (`aria-*`, `data-*`, `id`, `style`) land on the popup.
|
|
417
|
-
|
|
418
|
-
`initialFocus={false}` only drops modo's own first-row focus: Base UI still focuses the first row after a keyboard open
|
|
419
|
-
and the popup after a pointer open, which cannot be suppressed. A key handler in `onKeyDownCapture` runs first:
|
|
420
|
-
`preventDefault` there is harmless, navigation and typeahead still run; `stopPropagation` stops Base UI's key handling
|
|
421
|
-
and the panel's arrow navigation.
|
|
422
|
-
|
|
423
|
-
```tsx
|
|
424
|
-
<Dropdown.Menu>
|
|
425
|
-
<Dropdown.Trigger render={<Button>Open</Button>} />
|
|
426
|
-
<Dropdown.Content
|
|
427
|
-
positionerClassName="z-[60]"
|
|
428
|
-
container={dialogPopupRef}
|
|
429
|
-
alignOffset={-4}
|
|
430
|
-
collisionPadding={16}
|
|
431
|
-
collisionBoundary={boundaryRef.current}
|
|
432
|
-
initialFocus={searchRef}
|
|
433
|
-
aria-label="Actions"
|
|
434
|
-
data-testid="actions-menu"
|
|
435
|
-
>
|
|
436
|
-
<Dropdown.Sub>
|
|
437
|
-
<Dropdown.SubTrigger>More</Dropdown.SubTrigger>
|
|
438
|
-
<Dropdown.SubContent positionerClassName="z-[60]" collisionPadding={16}>
|
|
439
|
-
<Dropdown.Item>Archive</Dropdown.Item>
|
|
440
|
-
</Dropdown.SubContent>
|
|
441
|
-
</Dropdown.Sub>
|
|
442
|
-
</Dropdown.Content>
|
|
443
|
-
</Dropdown.Menu>
|
|
444
|
-
```
|