@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,451 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
3
|
-
* `registry/base/dialog.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
4
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
5
|
-
* Local modifications:
|
|
6
|
-
* - `"use client"` directive dropped (no RSC here).
|
|
7
|
-
* - `framer-motion` → `motion/react`; `@/lib/{utils,icon-context,springs,shape-context,
|
|
8
|
-
* size-context,surface-context,surface-classes}` rewritten to `../../../lib/*`;
|
|
9
|
-
* `@/components/ui/button` → `../../button`.
|
|
10
|
-
* - `DialogProps`: every member re-declared with the FF docs API-table text (modo's parser
|
|
11
|
-
* lists only members declared in the interface body and needs a description on each);
|
|
12
|
-
* same for `DialogSlotProps` and `DialogContentProps`.
|
|
13
|
-
* - modo item: TSDoc (from the FF "Dialog" docs page) on the root `Dialog`, the compound
|
|
14
|
-
* statics attached as `Dialog.Trigger = …` (expando properties, so TypeScript types
|
|
15
|
-
* `<Dialog.Content>` without a cast and modo's check-items sees them), upstream's named
|
|
16
|
-
* exports kept, and a default export.
|
|
17
|
-
* - FF's "With a sidebar" docs example is not ported: Sidebar is omitted from this port.
|
|
18
|
-
* A "Surfaces inside a dialog" example (a Select popover lifting off the dialog's own
|
|
19
|
-
* level) stands in for it — it makes the same point the sidebar dialog made about
|
|
20
|
-
* composing inside an `xl` panel, using only items this port ships.
|
|
21
|
-
* - Styling reads DS tokens (AGENTS.md styling): `text-[Npx]` →
|
|
22
|
-
* `text-<role>[-compact]`; inline `fontVariationSettings` and `font-bold`
|
|
23
|
-
* → `weight-*`; the `bg-black/40` / `dark:bg-black/80` backdrop → `bg-scrim`.
|
|
24
|
-
* - The panel morphs out of its trigger through the shared morph layer
|
|
25
|
-
* (`lib/use-morph.ts` + `MorphSurface`, goo by default on `spring.goo`;
|
|
26
|
-
* `Dialog.Content` takes `from` / `effect` / `hideSource` / `tier`), and the
|
|
27
|
-
* backdrop's opacity follows the morph's progress. The popup is a
|
|
28
|
-
* transparent, centered box; its level is painted by the morph's surface
|
|
29
|
-
* layers and the padding sits on their content box. `Dialog` holds the open
|
|
30
|
-
* state itself (`useControllableState`) to feed the morph, and scopes
|
|
31
|
-
* `Morph.Part` pairs to the dialog.
|
|
32
|
-
* - The trigger / close slot shape moved to `lib/slot.ts`, shared with the
|
|
33
|
-
* other overlays.
|
|
34
|
-
* - `onOpenChange(open, details)` hears Base UI's change details (`reason`,
|
|
35
|
-
* `event`, `cancel()`), as Popover does: the handler runs before the state
|
|
36
|
-
* changes, so `details.cancel()` keeps the dialog as it is (emulates
|
|
37
|
-
* Radix's `onEscapeKeyDown` / `onPointerDownOutside` / `onInteractOutside`).
|
|
38
|
-
* - `Dialog` takes `disablePointerDismissal`; `Dialog.Content` types and
|
|
39
|
-
* forwards `initialFocus` / `finalFocus` to the popup (a custom
|
|
40
|
-
* `finalFocus` turns the morph's own focus return off) and takes
|
|
41
|
-
* `popupClassName`, merged after the popup's width classes.
|
|
42
|
-
* One-argument handlers keep working. `DialogState` reports through it for
|
|
43
|
-
* AlertDialog, Sheet and Command too; `createDialogChangeDetails` builds
|
|
44
|
-
* the same shape for a change the library makes itself.
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
import { Dialog as DialogPrimitive } from '@base-ui/react/dialog'
|
|
48
|
-
import { motion } from 'motion/react'
|
|
49
|
-
import {
|
|
50
|
-
type ComponentProps,
|
|
51
|
-
createContext,
|
|
52
|
-
forwardRef,
|
|
53
|
-
type HTMLAttributes,
|
|
54
|
-
type ReactNode,
|
|
55
|
-
type RefObject,
|
|
56
|
-
useContext,
|
|
57
|
-
useId,
|
|
58
|
-
useImperativeHandle,
|
|
59
|
-
useMemo,
|
|
60
|
-
} from 'react'
|
|
61
|
-
import { useIcon } from '../../../lib/icon-context'
|
|
62
|
-
import { MorphSurface } from '../../../lib/morph-layers'
|
|
63
|
-
import { MorphPartScope } from '../../../lib/morph-part'
|
|
64
|
-
import { useShape } from '../../../lib/shape-context'
|
|
65
|
-
import { useSize, useSizeVariant } from '../../../lib/size-context'
|
|
66
|
-
import { type SlotProps, slotId, slotRender } from '../../../lib/slot'
|
|
67
|
-
import { SURFACE_BG, SURFACE_SHADOW } from '../../../lib/surface-classes'
|
|
68
|
-
import { SurfaceProvider, useSurface } from '../../../lib/surface-context'
|
|
69
|
-
import { useControllableState } from '../../../lib/use-controllable-state'
|
|
70
|
-
import { type MorphOrigin, useMorph, useMorphOrigin } from '../../../lib/use-morph'
|
|
71
|
-
import { cn } from '../../../lib/utils'
|
|
72
|
-
import { Button } from '../../button'
|
|
73
|
-
|
|
74
|
-
const DIALOG_OFFSET = 4
|
|
75
|
-
|
|
76
|
-
type DialogSlotProps = SlotProps
|
|
77
|
-
|
|
78
|
-
const DialogContext = createContext<{ open: boolean; origin: RefObject<MorphOrigin> }>({
|
|
79
|
-
open: false,
|
|
80
|
-
origin: { current: {} },
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
/** The open state and origin `DialogState` provides, for content built on another Base UI popup (Sheet). */
|
|
84
|
-
const useDialogState = () => useContext(DialogContext)
|
|
85
|
-
|
|
86
|
-
const DialogTrigger = forwardRef<HTMLButtonElement, DialogSlotProps>(({ render, asChild, children, ...props }, ref) => {
|
|
87
|
-
const el = slotRender(render, asChild, children)
|
|
88
|
-
return el ? (
|
|
89
|
-
<DialogPrimitive.Trigger ref={ref} render={el} {...props} id={slotId(el, props.id)} />
|
|
90
|
-
) : (
|
|
91
|
-
<DialogPrimitive.Trigger ref={ref} {...props}>
|
|
92
|
-
{children}
|
|
93
|
-
</DialogPrimitive.Trigger>
|
|
94
|
-
)
|
|
95
|
-
})
|
|
96
|
-
DialogTrigger.displayName = 'DialogTrigger'
|
|
97
|
-
|
|
98
|
-
const DialogClose = forwardRef<HTMLButtonElement, DialogSlotProps>(({ render, asChild, children, ...props }, ref) => {
|
|
99
|
-
const el = slotRender(render, asChild, children)
|
|
100
|
-
return el ? (
|
|
101
|
-
<DialogPrimitive.Close ref={ref} render={el} {...props} />
|
|
102
|
-
) : (
|
|
103
|
-
<DialogPrimitive.Close ref={ref} {...props}>
|
|
104
|
-
{children}
|
|
105
|
-
</DialogPrimitive.Close>
|
|
106
|
-
)
|
|
107
|
-
})
|
|
108
|
-
DialogClose.displayName = 'DialogClose'
|
|
109
|
-
|
|
110
|
-
interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {
|
|
111
|
-
/** Width: 400, 540, or 880. Compact regions narrow each by 1 notch: 360,
|
|
112
|
-
* 480, 800. `xl` is the canvas for composed layouts — a sidebar beside a
|
|
113
|
-
* panel — which usually pair it with `className="p-0"` and a fixed
|
|
114
|
-
* height. Defaults to `"sm"`. */
|
|
115
|
-
size?: 'sm' | 'lg' | 'xl'
|
|
116
|
-
/** Portal target. When set, the overlay and panel render inside this element
|
|
117
|
-
* (positioned `absolute`) instead of covering the viewport (`fixed`). Pair
|
|
118
|
-
* with a `position: relative; overflow: hidden` container — and usually
|
|
119
|
-
* `<Dialog modal={false}>` — to scope a dialog to a bounded region, e.g. a
|
|
120
|
-
* docs preview. Defaults to the document body / full-viewport behaviour. */
|
|
121
|
-
container?: HTMLElement | null
|
|
122
|
-
/** The ✕ in the top-right corner. Drop it when the content has its own
|
|
123
|
-
* way out, e.g. a command menu that closes on Escape and on a pick.
|
|
124
|
-
* Defaults to `true`. */
|
|
125
|
-
showCloseButton?: boolean
|
|
126
|
-
/** Where the panel sits: centered, or anchored 12dvh from the top so a
|
|
127
|
-
* panel whose height follows its content (a command menu) keeps its top
|
|
128
|
-
* edge still. Defaults to `"center"`. */
|
|
129
|
-
position?: 'center' | 'top'
|
|
130
|
-
/** Where the panel grows from (see Morph): the pressed trigger (its center when none), the press point, its own center, a viewport edge, or a ref to any element. Defaults to `'trigger'`. */
|
|
131
|
-
from?: 'trigger' | 'pointer' | 'center' | 'top' | 'right' | 'bottom' | 'left' | RefObject<HTMLElement | null>
|
|
132
|
-
/** How it grows (see Morph): with the liquid goo neck, a plain morph, a slide or a fade. Defaults to `'goo'`. */
|
|
133
|
-
effect?: 'goo' | 'morph' | 'slide' | 'fade'
|
|
134
|
-
/** Hide the trigger while open, so it reads as turning into the panel. Defaults to `false`. */
|
|
135
|
-
hideSource?: boolean
|
|
136
|
-
/** Spring tier of a plain morph, slide or fade; goo runs on its own `spring.goo`. Defaults to `'slow'`. */
|
|
137
|
-
tier?: 'moderate' | 'slow'
|
|
138
|
-
/** Where focus goes when the dialog opens: a ref, `false` to leave it, `true` for the default, or a function of how it opened (`'mouse'`, `'touch'`, `'pen'`, `'keyboard'`). Defaults to the first tabbable element in the panel. */
|
|
139
|
-
initialFocus?: DialogPopupProps['initialFocus']
|
|
140
|
-
/** Where focus goes when the dialog closes: a ref, `false` to leave it, `true` for the default, or a function of how it closed. Defaults to the trigger. */
|
|
141
|
-
finalFocus?: DialogPopupProps['finalFocus']
|
|
142
|
-
/** Classes for the positioned popup box around the surface, merged after its width (`w-[calc(100%-2rem)]` capped by `size`), so `w-max` or `max-w-[60rem]` sizes the panel. `className` styles the surface's content box. */
|
|
143
|
-
popupClassName?: string
|
|
144
|
-
/** Dialog content. Everything inside reads the dialog's surface level as its substrate. */
|
|
145
|
-
children?: ReactNode
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
type DialogPopupProps = ComponentProps<typeof DialogPrimitive.Popup>
|
|
149
|
-
|
|
150
|
-
const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(
|
|
151
|
-
(
|
|
152
|
-
{
|
|
153
|
-
className,
|
|
154
|
-
children,
|
|
155
|
-
size = 'sm',
|
|
156
|
-
container,
|
|
157
|
-
showCloseButton = true,
|
|
158
|
-
position = 'center',
|
|
159
|
-
from,
|
|
160
|
-
effect,
|
|
161
|
-
hideSource,
|
|
162
|
-
tier,
|
|
163
|
-
initialFocus,
|
|
164
|
-
finalFocus,
|
|
165
|
-
popupClassName,
|
|
166
|
-
...props
|
|
167
|
-
},
|
|
168
|
-
ref,
|
|
169
|
-
) => {
|
|
170
|
-
const XIcon = useIcon('x')
|
|
171
|
-
const shape = useShape()
|
|
172
|
-
const substrate = useSurface()
|
|
173
|
-
const dialogLevel = Math.min(substrate + DIALOG_OFFSET, 8)
|
|
174
|
-
// The size ladder narrows the dialog one notch in compact regions —
|
|
175
|
-
// width only, the padding stays put (see Sizes).
|
|
176
|
-
const compact = useSize().variant === 'compact'
|
|
177
|
-
const { open, origin } = useDialogState()
|
|
178
|
-
const morph = useMorph(open, origin, {
|
|
179
|
-
from,
|
|
180
|
-
effect,
|
|
181
|
-
hideSource,
|
|
182
|
-
tier,
|
|
183
|
-
// A custom `finalFocus` places focus itself; the morph's own return
|
|
184
|
-
// to the trigger would undo it.
|
|
185
|
-
returnFocus: typeof finalFocus === 'boolean' ? finalFocus : finalFocus === undefined,
|
|
186
|
-
})
|
|
187
|
-
useImperativeHandle(ref, () => morph.popup as HTMLDivElement, [morph.popup])
|
|
188
|
-
|
|
189
|
-
return (
|
|
190
|
-
<DialogPrimitive.Portal container={container ?? undefined}>
|
|
191
|
-
<DialogPrimitive.Backdrop
|
|
192
|
-
render={<motion.div style={{ opacity: morph.progress }} />}
|
|
193
|
-
className={cn(container ? 'absolute' : 'fixed', 'inset-0 z-50 bg-scrim')}
|
|
194
|
-
/>
|
|
195
|
-
<DialogPrimitive.Popup
|
|
196
|
-
ref={morph.popupRef}
|
|
197
|
-
{...props}
|
|
198
|
-
initialFocus={initialFocus}
|
|
199
|
-
finalFocus={finalFocus}
|
|
200
|
-
className={cn(
|
|
201
|
-
container ? 'absolute' : 'fixed',
|
|
202
|
-
'left-1/2 z-50 w-[calc(100%-2rem)] -translate-x-1/2 focus:outline-none',
|
|
203
|
-
position === 'top' ? 'top-[12dvh]' : 'top-1/2 -translate-y-1/2',
|
|
204
|
-
size === 'sm' && (compact ? 'max-w-[360px]' : 'max-w-[400px]'),
|
|
205
|
-
size === 'lg' && (compact ? 'max-w-[480px]' : 'max-w-[540px]'),
|
|
206
|
-
size === 'xl' && (compact ? 'max-w-[800px]' : 'max-w-[880px]'),
|
|
207
|
-
popupClassName,
|
|
208
|
-
)}
|
|
209
|
-
>
|
|
210
|
-
<SurfaceProvider value={dialogLevel}>
|
|
211
|
-
<MorphSurface
|
|
212
|
-
morph={morph}
|
|
213
|
-
bg={SURFACE_BG[dialogLevel]}
|
|
214
|
-
shadow={SURFACE_SHADOW[dialogLevel]}
|
|
215
|
-
radius={shape.container}
|
|
216
|
-
className={cn('p-6', className)}
|
|
217
|
-
>
|
|
218
|
-
{children}
|
|
219
|
-
{showCloseButton && (
|
|
220
|
-
<DialogPrimitive.Close
|
|
221
|
-
render={
|
|
222
|
-
<Button variant="ghost" size="icon-sm" className="absolute right-3 top-3">
|
|
223
|
-
<XIcon />
|
|
224
|
-
<span className="sr-only">Close</span>
|
|
225
|
-
</Button>
|
|
226
|
-
}
|
|
227
|
-
/>
|
|
228
|
-
)}
|
|
229
|
-
</MorphSurface>
|
|
230
|
-
</SurfaceProvider>
|
|
231
|
-
</DialogPrimitive.Popup>
|
|
232
|
-
</DialogPrimitive.Portal>
|
|
233
|
-
)
|
|
234
|
-
},
|
|
235
|
-
)
|
|
236
|
-
DialogContent.displayName = 'DialogContent'
|
|
237
|
-
|
|
238
|
-
function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
|
|
239
|
-
return <div className={cn('flex flex-col gap-1.5 mb-4', className)} {...props} />
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {
|
|
243
|
-
return <div className={cn('flex justify-end gap-2 mt-6', className)} {...props} />
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const DialogTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(
|
|
247
|
-
({ className, ...props }, ref) => {
|
|
248
|
-
// The title role of the type scale — see Sizes.
|
|
249
|
-
const compact = useSizeVariant() === 'compact'
|
|
250
|
-
return (
|
|
251
|
-
<DialogPrimitive.Title
|
|
252
|
-
ref={ref}
|
|
253
|
-
className={cn(
|
|
254
|
-
compact ? 'text-title-compact' : 'text-title',
|
|
255
|
-
'weight-bold text-foreground leading-tight',
|
|
256
|
-
className,
|
|
257
|
-
)}
|
|
258
|
-
{...props}
|
|
259
|
-
/>
|
|
260
|
-
)
|
|
261
|
-
},
|
|
262
|
-
)
|
|
263
|
-
DialogTitle.displayName = 'DialogTitle'
|
|
264
|
-
|
|
265
|
-
const DialogDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(
|
|
266
|
-
({ className, ...props }, ref) => {
|
|
267
|
-
const compact = useSizeVariant() === 'compact'
|
|
268
|
-
return (
|
|
269
|
-
<DialogPrimitive.Description
|
|
270
|
-
ref={ref}
|
|
271
|
-
className={cn(compact ? 'text-body-compact' : 'text-body', 'text-muted-foreground', className)}
|
|
272
|
-
{...props}
|
|
273
|
-
/>
|
|
274
|
-
)
|
|
275
|
-
},
|
|
276
|
-
)
|
|
277
|
-
DialogDescription.displayName = 'DialogDescription'
|
|
278
|
-
|
|
279
|
-
/** What `onOpenChange` receives besides the open state: Base UI's Dialog change details. */
|
|
280
|
-
type DialogOpenChangeDetails = DialogPrimitive.Root.ChangeEventDetails
|
|
281
|
-
|
|
282
|
-
/** The part of Base UI's change details `DialogState` reads; Drawer's and AlertDialog's fit too. */
|
|
283
|
-
interface OpenChangeDetailsLike {
|
|
284
|
-
isCanceled: boolean
|
|
285
|
-
trigger?: Element
|
|
286
|
-
event?: Event
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Change details in Base UI's shape for a change the library makes itself (an
|
|
291
|
-
* AlertDialog action closing it, Command's hotkey), so `onOpenChange` handlers
|
|
292
|
-
* always get `reason`, `event` and a working `cancel()`.
|
|
293
|
-
*/
|
|
294
|
-
function createDialogChangeDetails(
|
|
295
|
-
reason: DialogOpenChangeDetails['reason'],
|
|
296
|
-
event: Event = new Event('change'),
|
|
297
|
-
trigger?: Element,
|
|
298
|
-
): DialogOpenChangeDetails {
|
|
299
|
-
const details = {
|
|
300
|
-
reason,
|
|
301
|
-
event,
|
|
302
|
-
trigger,
|
|
303
|
-
isCanceled: false,
|
|
304
|
-
isPropagationAllowed: false,
|
|
305
|
-
cancel: () => {
|
|
306
|
-
details.isCanceled = true
|
|
307
|
-
},
|
|
308
|
-
allowPropagation: () => {
|
|
309
|
-
details.isPropagationAllowed = true
|
|
310
|
-
},
|
|
311
|
-
preventUnmountOnClose: () => {},
|
|
312
|
-
}
|
|
313
|
-
return details as DialogOpenChangeDetails
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
interface DialogStateProps<Details extends OpenChangeDetailsLike> {
|
|
317
|
-
open?: boolean
|
|
318
|
-
defaultOpen?: boolean
|
|
319
|
-
onOpenChange?: (open: boolean, details: Details) => void
|
|
320
|
-
children: (root: { open: boolean; onOpenChange: (next: boolean, details: Details) => void }) => ReactNode
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* A dialog's open state, held here (not in Base UI's Root) because the morph
|
|
325
|
-
* reads it, and the open event tells it which trigger was pressed. Also
|
|
326
|
-
* scopes `Morph.Part` pairs. AlertDialog, Sheet and Command share it.
|
|
327
|
-
*/
|
|
328
|
-
function DialogState<Details extends OpenChangeDetailsLike>({
|
|
329
|
-
open,
|
|
330
|
-
defaultOpen = false,
|
|
331
|
-
onOpenChange,
|
|
332
|
-
children,
|
|
333
|
-
}: DialogStateProps<Details>) {
|
|
334
|
-
// The change is reported here, not through the state hook, so the handler
|
|
335
|
-
// gets Base UI's details and can cancel it.
|
|
336
|
-
const [current, setCurrent] = useControllableState(open, defaultOpen)
|
|
337
|
-
const { origin, capture } = useMorphOrigin()
|
|
338
|
-
const id = useId()
|
|
339
|
-
const ctx = useMemo(() => ({ open: current, origin }), [current, origin])
|
|
340
|
-
const parts = useMemo(() => ({ id, open: current }), [id, current])
|
|
341
|
-
|
|
342
|
-
return (
|
|
343
|
-
<DialogContext.Provider value={ctx}>
|
|
344
|
-
<MorphPartScope.Provider value={parts}>
|
|
345
|
-
{children({
|
|
346
|
-
open: current,
|
|
347
|
-
onOpenChange: (next, details) => {
|
|
348
|
-
if (next === current) return
|
|
349
|
-
onOpenChange?.(next, details)
|
|
350
|
-
if (details.isCanceled) return
|
|
351
|
-
if (next) capture(details)
|
|
352
|
-
setCurrent(next)
|
|
353
|
-
},
|
|
354
|
-
})}
|
|
355
|
-
</MorphPartScope.Provider>
|
|
356
|
-
</DialogContext.Provider>
|
|
357
|
-
)
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
interface DialogProps {
|
|
361
|
-
/** Controlled open state. */
|
|
362
|
-
open?: boolean
|
|
363
|
-
/** Initial open state, for an uncontrolled dialog. Defaults to `false`. */
|
|
364
|
-
defaultOpen?: boolean
|
|
365
|
-
/** Called when the dialog opens or closes, with Base UI's change details: `reason` (`'escape-key'`, `'outside-press'`, `'trigger-press'`, `'close-press'`, …), the `event`, and `cancel()` to keep it as it is. */
|
|
366
|
-
onOpenChange?: (open: boolean, details: DialogOpenChangeDetails) => void
|
|
367
|
-
/** Traps focus and locks page scroll while open. Defaults to `true`. */
|
|
368
|
-
modal?: boolean
|
|
369
|
-
/** Ignore presses outside the panel: only Escape and the dialog's own closes dismiss it. Defaults to `false`. */
|
|
370
|
-
disablePointerDismissal?: boolean
|
|
371
|
-
/** The trigger and the content — `Dialog.Trigger` plus a `Dialog.Content`. */
|
|
372
|
-
children?: ReactNode
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* 3 widths, grown out of whatever opened them.
|
|
377
|
-
*
|
|
378
|
-
* The panel lifts 4 surface levels off whatever substrate it opens on and
|
|
379
|
-
* re-provides that level, so a dropdown or select inside it keeps climbing
|
|
380
|
-
* the ladder instead of melting into the dialog. Width comes from
|
|
381
|
-
* `Dialog.Content`'s `size` — 400, 540 or 880, each one notch narrower in
|
|
382
|
-
* compact regions. The panel grows out of its trigger through the shared
|
|
383
|
-
* morph (see Morph): goo by default on `spring.goo`, or from the press
|
|
384
|
-
* point, its own center, a viewport edge or any element, and the backdrop
|
|
385
|
-
* fades with it. `Morph.Part` pairs an element in the trigger with its twin
|
|
386
|
-
* in the panel, so a card's image or title flies into the dialog.
|
|
387
|
-
* `position="top"` anchors the panel 12dvh down so a content-sized panel (a
|
|
388
|
-
* command menu) keeps its top edge still. Built on Base UI's Dialog: open
|
|
389
|
-
* state is controlled with `open` / `onOpenChange` or left to `defaultOpen`.
|
|
390
|
-
* `onOpenChange` hears why (`details.reason`) and can `details.cancel()` it,
|
|
391
|
-
* e.g. to keep the dialog open on an outside press.
|
|
392
|
-
*
|
|
393
|
-
* Statics:
|
|
394
|
-
* - `Dialog.Trigger` — the control that opens it. `render={<Button/>}` or
|
|
395
|
-
* Radix-style `asChild` with a single child both work.
|
|
396
|
-
* - `Dialog.Content` — the panel: `size`, `position`, `showCloseButton`,
|
|
397
|
-
* `container`, `initialFocus`, `finalFocus`, `popupClassName` (sizes the
|
|
398
|
-
* popup box), and the morph options `from`, `effect`, `hideSource`,
|
|
399
|
-
* `tier`.
|
|
400
|
-
* - `Dialog.Header` / `Dialog.Footer` — the stacked title block, and the
|
|
401
|
-
* right-aligned action row.
|
|
402
|
-
* - `Dialog.Title` / `Dialog.Description` — the labelled heading and its
|
|
403
|
-
* supporting line, wired to the panel for screen readers.
|
|
404
|
-
* - `Dialog.Close` — dismisses it; same `render` / `asChild` shape as the
|
|
405
|
-
* trigger. `Dialog.Content` renders its own ✕ unless
|
|
406
|
-
* `showCloseButton={false}`.
|
|
407
|
-
*
|
|
408
|
-
* @example {@include ./examples.mdx}
|
|
409
|
-
*/
|
|
410
|
-
function Dialog({ children, open, defaultOpen, onOpenChange, modal, disablePointerDismissal }: DialogProps) {
|
|
411
|
-
return (
|
|
412
|
-
<DialogState open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
|
|
413
|
-
{root => (
|
|
414
|
-
<DialogPrimitive.Root {...root} modal={modal} disablePointerDismissal={disablePointerDismissal}>
|
|
415
|
-
{children}
|
|
416
|
-
</DialogPrimitive.Root>
|
|
417
|
-
)}
|
|
418
|
-
</DialogState>
|
|
419
|
-
)
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
Dialog.Trigger = DialogTrigger
|
|
423
|
-
Dialog.Content = DialogContent
|
|
424
|
-
Dialog.Header = DialogHeader
|
|
425
|
-
Dialog.Footer = DialogFooter
|
|
426
|
-
Dialog.Title = DialogTitle
|
|
427
|
-
Dialog.Description = DialogDescription
|
|
428
|
-
Dialog.Close = DialogClose
|
|
429
|
-
|
|
430
|
-
export type {
|
|
431
|
-
DialogContentProps,
|
|
432
|
-
DialogOpenChangeDetails,
|
|
433
|
-
DialogProps,
|
|
434
|
-
DialogSlotProps as DialogTriggerProps,
|
|
435
|
-
DialogSlotProps as DialogCloseProps,
|
|
436
|
-
}
|
|
437
|
-
export {
|
|
438
|
-
createDialogChangeDetails,
|
|
439
|
-
Dialog,
|
|
440
|
-
DialogClose,
|
|
441
|
-
DialogContent,
|
|
442
|
-
DialogDescription,
|
|
443
|
-
DialogFooter,
|
|
444
|
-
DialogHeader,
|
|
445
|
-
DialogState,
|
|
446
|
-
DialogTitle,
|
|
447
|
-
DialogTrigger,
|
|
448
|
-
useDialogState,
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
export default Dialog
|