@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,218 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Fluid Functionalism's sidebar app shell as the preset `sa1FQfCxH6`
|
|
3
|
-
* (fluidfunctionalism.com/docs/sidebar?preset=sa1FQfCxH6) configures it: the
|
|
4
|
-
* inset layout starting collapsed, a workspace switcher, search and a "New"
|
|
5
|
-
* row in the header, two collapsible thread sections, a row menu on every
|
|
6
|
-
* thread and a user row with two buttons in the footer. The composition is
|
|
7
|
-
* the app-sidebar.tsx and page.tsx that FF's preset generator emits for it
|
|
8
|
-
* (github.com/mickadesign/fluid-functionalism `lib/preset/sidebar-install.ts`
|
|
9
|
-
* @ c367a0d066bc10e663b3d269bc40539ea8417b25), over the sidebar-app,
|
|
10
|
-
* sidebar-workspace-header and sidebar-user-footer blocks ported beside it —
|
|
11
|
-
* MIT License © 2026 Micka Touillaud (notice: LICENSE.fluid-functionalism).
|
|
12
|
-
*
|
|
13
|
-
* Local changes: the selected thread rides the Sidebar's `value` (the rows
|
|
14
|
-
* carry `value`s) and the topbar shows it; the switcher keeps its own pick
|
|
15
|
-
* (`defaultCheckedIndex`); the footer's icon buttons are the DS's ghost
|
|
16
|
-
* `Button`; `variant`, `side`, `openOnHover` and `contained` are props.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { useState } from 'react'
|
|
20
|
-
import Button from '../../components/button'
|
|
21
|
-
import Sidebar from '../../components/navigation/sidebar'
|
|
22
|
-
import { DropdownContent, DropdownMenu, DropdownTrigger, MenuItem } from '../../components/overlays/dropdown'
|
|
23
|
-
import Tooltip from '../../components/overlays/tooltip'
|
|
24
|
-
import { useIcon } from '../../lib/icon-context'
|
|
25
|
-
import { cn } from '../../lib/utils'
|
|
26
|
-
import { SidebarInsetTopbar } from './inset-topbar'
|
|
27
|
-
import { NAV_SECTIONS } from './nav-data'
|
|
28
|
-
import { SidebarSearchField } from './search-field'
|
|
29
|
-
import { SidebarUserFooter } from './user-footer'
|
|
30
|
-
import { SidebarWorkspaceHeader, WorkspaceTile } from './workspace-header'
|
|
31
|
-
|
|
32
|
-
interface SidebarAppProps {
|
|
33
|
-
/** Start with the sidebar open; the preset starts it collapsed. Defaults to `false`. */
|
|
34
|
-
defaultOpen?: boolean
|
|
35
|
-
/** The sidebar's layout (see Sidebar). Defaults to `'inset'`. */
|
|
36
|
-
variant?: 'sidebar' | 'floating' | 'inset'
|
|
37
|
-
/** The edge it sits on. Defaults to `'left'`. */
|
|
38
|
-
side?: 'left' | 'right'
|
|
39
|
-
/** Open the collapsed sidebar while the pointer is at its edge or on the topbar's trigger (see Sidebar). Defaults to `false`. */
|
|
40
|
-
openOnHover?: boolean
|
|
41
|
-
/** Fill the parent box instead of the viewport, as the examples do. Defaults to `false`. */
|
|
42
|
-
contained?: boolean
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
interface AppSidebarProps {
|
|
46
|
-
variant: 'sidebar' | 'floating' | 'inset'
|
|
47
|
-
side: 'left' | 'right'
|
|
48
|
-
className?: string
|
|
49
|
-
value: string
|
|
50
|
-
onValueChange: (value: string) => void
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function AppSidebar({ variant, side, className, value, onValueChange }: AppSidebarProps) {
|
|
54
|
-
const PlusIcon = useIcon('plus')
|
|
55
|
-
const PencilIcon = useIcon('pencil')
|
|
56
|
-
const MoreVerticalIcon = useIcon('more-vertical')
|
|
57
|
-
const LinkIcon = useIcon('link')
|
|
58
|
-
const UserIcon = useIcon('user')
|
|
59
|
-
const SettingsIcon = useIcon('settings')
|
|
60
|
-
const ArrowLeftIcon = useIcon('arrow-left')
|
|
61
|
-
const MoonIcon = useIcon('moon')
|
|
62
|
-
|
|
63
|
-
return (
|
|
64
|
-
<Sidebar variant={variant} side={side} className={className} value={value} onValueChange={onValueChange}>
|
|
65
|
-
<Sidebar.Header>
|
|
66
|
-
<SidebarWorkspaceHeader
|
|
67
|
-
name="Acme Inc"
|
|
68
|
-
tile={<WorkspaceTile>A</WorkspaceTile>}
|
|
69
|
-
defaultCheckedIndex={0}
|
|
70
|
-
menu={
|
|
71
|
-
<>
|
|
72
|
-
<MenuItem index={0} label="Acme Inc" />
|
|
73
|
-
<MenuItem index={1} label="Personal" />
|
|
74
|
-
<MenuItem index={2} icon={PlusIcon} label="New workspace" />
|
|
75
|
-
</>
|
|
76
|
-
}
|
|
77
|
-
/>
|
|
78
|
-
{/* Search and the action rows are one block on the menu rows' rhythm. */}
|
|
79
|
-
<div className="flex flex-col gap-0.5">
|
|
80
|
-
<SidebarSearchField />
|
|
81
|
-
<Sidebar.Menu>
|
|
82
|
-
<Sidebar.MenuItem>
|
|
83
|
-
<Sidebar.MenuButton icon={PlusIcon}>
|
|
84
|
-
New
|
|
85
|
-
<span className="ml-auto inline-flex opacity-0 transition-opacity duration-fast group-hover/menu-item:opacity-100 group-focus-within/menu-item:opacity-100">
|
|
86
|
-
<kbd className="font-sans text-micro text-muted-foreground">⇧⌘O</kbd>
|
|
87
|
-
</span>
|
|
88
|
-
</Sidebar.MenuButton>
|
|
89
|
-
</Sidebar.MenuItem>
|
|
90
|
-
</Sidebar.Menu>
|
|
91
|
-
</div>
|
|
92
|
-
</Sidebar.Header>
|
|
93
|
-
|
|
94
|
-
<Sidebar.Content>
|
|
95
|
-
{NAV_SECTIONS.map(section => (
|
|
96
|
-
<Sidebar.Group key={section.label} collapsible>
|
|
97
|
-
<Sidebar.GroupLabel>{section.label}</Sidebar.GroupLabel>
|
|
98
|
-
<Sidebar.GroupActions>
|
|
99
|
-
<Tooltip content="Add item" side="top">
|
|
100
|
-
<Sidebar.GroupAction aria-label="Add item">
|
|
101
|
-
<PlusIcon />
|
|
102
|
-
</Sidebar.GroupAction>
|
|
103
|
-
</Tooltip>
|
|
104
|
-
</Sidebar.GroupActions>
|
|
105
|
-
<Sidebar.Menu>
|
|
106
|
-
{section.items.map(item => (
|
|
107
|
-
<Sidebar.MenuItem key={item.label}>
|
|
108
|
-
{/* The status draws the dot and the screen-reader "unread"; the value selects. */}
|
|
109
|
-
<Sidebar.MenuButton status={item.status} value={item.label}>
|
|
110
|
-
{item.label}
|
|
111
|
-
</Sidebar.MenuButton>
|
|
112
|
-
<DropdownMenu>
|
|
113
|
-
<DropdownTrigger
|
|
114
|
-
render={
|
|
115
|
-
<Sidebar.MenuAction showOnHover aria-label="More options">
|
|
116
|
-
<MoreVerticalIcon />
|
|
117
|
-
</Sidebar.MenuAction>
|
|
118
|
-
}
|
|
119
|
-
/>
|
|
120
|
-
{/* 240px, the header and footer triggers' width. */}
|
|
121
|
-
<DropdownContent className="min-w-0 w-[240px]" align="start" sideOffset={4}>
|
|
122
|
-
<MenuItem index={0} icon={PencilIcon} label="Rename" />
|
|
123
|
-
<MenuItem index={1} icon={LinkIcon} label="Share" />
|
|
124
|
-
</DropdownContent>
|
|
125
|
-
</DropdownMenu>
|
|
126
|
-
</Sidebar.MenuItem>
|
|
127
|
-
))}
|
|
128
|
-
</Sidebar.Menu>
|
|
129
|
-
</Sidebar.Group>
|
|
130
|
-
))}
|
|
131
|
-
</Sidebar.Content>
|
|
132
|
-
|
|
133
|
-
<Sidebar.Footer>
|
|
134
|
-
<div className="flex items-center gap-1 pr-1.5">
|
|
135
|
-
<SidebarUserFooter
|
|
136
|
-
name="Jane Doe"
|
|
137
|
-
avatar={
|
|
138
|
-
<span className="flex size-5 items-center justify-center rounded-full bg-muted-foreground text-micro-compact text-background">
|
|
139
|
-
J
|
|
140
|
-
</span>
|
|
141
|
-
}
|
|
142
|
-
className="min-w-0 flex-1"
|
|
143
|
-
menu={
|
|
144
|
-
<>
|
|
145
|
-
<MenuItem index={0} icon={UserIcon} label="Profile" />
|
|
146
|
-
<MenuItem index={1} icon={SettingsIcon} label="Settings" />
|
|
147
|
-
<MenuItem index={2} icon={ArrowLeftIcon} label="Log out" />
|
|
148
|
-
</>
|
|
149
|
-
}
|
|
150
|
-
/>
|
|
151
|
-
<Tooltip content="Settings" side="top">
|
|
152
|
-
<Button variant="ghost" size="icon-compact" aria-label="Settings" className="size-6 shrink-0">
|
|
153
|
-
<SettingsIcon />
|
|
154
|
-
</Button>
|
|
155
|
-
</Tooltip>
|
|
156
|
-
<Tooltip content="Theme" side="top">
|
|
157
|
-
<Button variant="ghost" size="icon-compact" aria-label="Theme" className="size-6 shrink-0">
|
|
158
|
-
<MoonIcon />
|
|
159
|
-
</Button>
|
|
160
|
-
</Tooltip>
|
|
161
|
-
</div>
|
|
162
|
-
</Sidebar.Footer>
|
|
163
|
-
</Sidebar>
|
|
164
|
-
)
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* An app shell around the Sidebar, as Fluid Functionalism's playground preset
|
|
169
|
-
* `sa1FQfCxH6` builds it: the inset layout, starting collapsed.
|
|
170
|
-
*
|
|
171
|
-
* Press the trigger in the topbar (or `[`) to bring the sidebar in. The
|
|
172
|
-
* header holds a workspace switcher, a search field and a "New" row; two
|
|
173
|
-
* thread sections fold from their labels and carry an "Add item" action;
|
|
174
|
-
* every thread shows its status dot and, on hover, a "More options" menu;
|
|
175
|
-
* the footer anchors the user row and two buttons. Pick a thread and the
|
|
176
|
-
* active row melts over to it while the topbar follows.
|
|
177
|
-
*
|
|
178
|
-
* Every overlay grows out of what opened it: the switcher, the user menu
|
|
179
|
-
* and the row menus are Dropdowns, the labels on the buttons are Tooltips,
|
|
180
|
-
* a collapsed sidebar with `openOnHover` slides open from its edge, and below
|
|
181
|
-
* the `md` breakpoint the sidebar is a Sheet growing out of the left edge.
|
|
182
|
-
*
|
|
183
|
-
* @example {@include ./examples.mdx}
|
|
184
|
-
*/
|
|
185
|
-
export default function SidebarApp({
|
|
186
|
-
defaultOpen = false,
|
|
187
|
-
variant = 'inset',
|
|
188
|
-
side = 'left',
|
|
189
|
-
openOnHover = false,
|
|
190
|
-
contained = false,
|
|
191
|
-
}: SidebarAppProps) {
|
|
192
|
-
const [thread, setThread] = useState(NAV_SECTIONS[0]?.items[0]?.label ?? '')
|
|
193
|
-
|
|
194
|
-
return (
|
|
195
|
-
<Sidebar.Provider
|
|
196
|
-
defaultOpen={defaultOpen}
|
|
197
|
-
openOnHover={openOnHover}
|
|
198
|
-
className={contained ? 'h-full min-h-0' : undefined}
|
|
199
|
-
>
|
|
200
|
-
<AppSidebar
|
|
201
|
-
variant={variant}
|
|
202
|
-
side={side}
|
|
203
|
-
className={contained ? 'h-full' : undefined}
|
|
204
|
-
value={thread}
|
|
205
|
-
onValueChange={setThread}
|
|
206
|
-
/>
|
|
207
|
-
{/* The floating card sits in a p-2 gutter: the topbar drops to line up with it. */}
|
|
208
|
-
<Sidebar.Inset className={cn(contained && 'min-h-0', variant === 'floating' && 'pt-2')}>
|
|
209
|
-
<SidebarInsetTopbar>
|
|
210
|
-
<span className="truncate text-body text-muted-foreground">{thread}</span>
|
|
211
|
-
</SidebarInsetTopbar>
|
|
212
|
-
<main className="flex flex-1 flex-col gap-4 p-4" />
|
|
213
|
-
</Sidebar.Inset>
|
|
214
|
-
</Sidebar.Provider>
|
|
215
|
-
)
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
export type { SidebarAppProps }
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
|
|
2
|
-
/*
|
|
3
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
4
|
-
* `registry/blocks/sidebar-app/inset-topbar.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
5
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
6
|
-
* Local modifications:
|
|
7
|
-
* - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
|
|
8
|
-
* `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
|
|
9
|
-
* - No peek to hide behind: the sidebar opens on hover in flow (the
|
|
10
|
-
* provider's `openOnHover`), so the trigger stays, riding the inset's edge.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { type ReactNode } from 'react'
|
|
14
|
-
import { SidebarTrigger } from '../../components/navigation/sidebar'
|
|
15
|
-
import { cn } from '../../lib/utils'
|
|
16
|
-
|
|
17
|
-
// The main region's topbar, its trigger first.
|
|
18
|
-
export function SidebarInsetTopbar({ children, className }: { children?: ReactNode; className?: string }) {
|
|
19
|
-
return (
|
|
20
|
-
<header className={cn('flex h-12 shrink-0 items-center gap-2 px-1.5', className)}>
|
|
21
|
-
<SidebarTrigger />
|
|
22
|
-
{children}
|
|
23
|
-
</header>
|
|
24
|
-
)
|
|
25
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
3
|
-
* `registry/default/lib/sidebar-menu-grid.ts` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
4
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
5
|
-
* Local modifications:
|
|
6
|
-
* - The width reads Base UI's `--anchor-width` only (the Radix fallback goes).
|
|
7
|
-
* - The `-ml-1` shift is dropped: the class lands on the morph surface's
|
|
8
|
-
* content, which would slide off its own background.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Shared geometry for sidebar-anchored dropdown menus (the workspace switcher
|
|
13
|
-
* in the header, the user menu in the footer).
|
|
14
|
-
*
|
|
15
|
-
* The popup is trigger-width plus 10px, so that:
|
|
16
|
-
* - the leading icon slot's centre lands on the sidebar rows' 16px leading
|
|
17
|
-
* axis (pl-2, with a 20px letter-tile overhanging the 16px slot by 2px a
|
|
18
|
-
* side),
|
|
19
|
-
* - gap-2 lands the label on the rows' 32px text axis, and
|
|
20
|
-
* - pr-1.5 puts a trailing glyph (the check) on the trigger chevron's
|
|
21
|
-
* vertical axis.
|
|
22
|
-
*/
|
|
23
|
-
export const SIDEBAR_MENU_GRID =
|
|
24
|
-
'[&_[role=menuitem]]:pl-2 [&_[role=menuitem]]:pr-1.5 [&_[role=menuitem]]:gap-2 [&_[role=menuitemradio]]:pl-2 [&_[role=menuitemradio]]:pr-1.5 [&_[role=menuitemradio]]:gap-2'
|
|
25
|
-
|
|
26
|
-
export const SIDEBAR_MENU_POPUP = `min-w-[240px] w-[calc(var(--anchor-width)_+_10px)] ${SIDEBAR_MENU_GRID}`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Ported from Fluid Functionalism — the seed navigation that
|
|
3
|
-
* github.com/mickadesign/fluid-functionalism `lib/preset/sidebar-install.ts`
|
|
4
|
-
* (@ c367a0d066bc10e663b3d269bc40539ea8417b25) generates for the sidebar
|
|
5
|
-
* preset `sa1FQfCxH6` (threads, two sections). MIT License © 2026 Micka
|
|
6
|
-
* Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
export interface NavItem {
|
|
10
|
-
label: string
|
|
11
|
-
/** Semantic status: drives the leading dot and screen-reader text. */
|
|
12
|
-
status: 'active' | 'unread' | 'idle'
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface NavSection {
|
|
16
|
-
label: string
|
|
17
|
-
items: NavItem[]
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const NAV_SECTIONS: NavSection[] = [
|
|
21
|
-
{
|
|
22
|
-
label: 'fluid-functionalism',
|
|
23
|
-
items: [
|
|
24
|
-
{ label: 'New pricing page exploration', status: 'active' },
|
|
25
|
-
{ label: 'Component library audit', status: 'idle' },
|
|
26
|
-
{ label: 'Dark mode token pass', status: 'unread' },
|
|
27
|
-
],
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
label: 'portfolio-site',
|
|
31
|
-
items: [
|
|
32
|
-
{ label: 'Scrollbar fade regression', status: 'idle' },
|
|
33
|
-
{ label: 'Registry deploy pipeline', status: 'unread' },
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
]
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
|
|
2
|
-
/*
|
|
3
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
4
|
-
* `registry/blocks/sidebar-app/search-field.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
5
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
6
|
-
* Local modifications:
|
|
7
|
-
* - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
|
|
8
|
-
* `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
|
|
9
|
-
* - Styling reads DS tokens (AGENTS.md styling): `text-[11px]` → `text-micro`;
|
|
10
|
-
* `duration-80` → `duration-fast`.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { type ComponentProps } from 'react'
|
|
14
|
-
import { SidebarInput } from '../../components/navigation/sidebar'
|
|
15
|
-
import { useIcon } from '../../lib/icon-context'
|
|
16
|
-
import { useSize } from '../../lib/size-context'
|
|
17
|
-
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
// The header's search field, on the menu rows' own rhythm. The leading icon
|
|
20
|
-
// sits on the rows' 16px leading axis; pl-8 starts the text on the rows'
|
|
21
|
-
// 32px text axis; and the shortcut chip waits at the trailing edge, revealed
|
|
22
|
-
// on hover/focus — the placeholder owns the field at rest.
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
|
|
25
|
-
export interface SidebarSearchFieldProps extends Omit<ComponentProps<typeof SidebarInput>, 'className'> {
|
|
26
|
-
/** Keystroke shown in the trailing chip. Pass null to drop the chip. */
|
|
27
|
-
shortcut?: string | null
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function SidebarSearchField({ placeholder = 'Search…', shortcut = '⌘K', ...props }: SidebarSearchFieldProps) {
|
|
31
|
-
const iconSize = useSize().icon
|
|
32
|
-
const SearchIcon = useIcon('search')
|
|
33
|
-
return (
|
|
34
|
-
<div className="group/search relative">
|
|
35
|
-
<SearchIcon
|
|
36
|
-
size={iconSize}
|
|
37
|
-
strokeWidth={1.5}
|
|
38
|
-
className="pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground"
|
|
39
|
-
/>
|
|
40
|
-
<SidebarInput placeholder={placeholder} aria-label="Search" className="pl-8 pr-12" {...props} />
|
|
41
|
-
{shortcut && (
|
|
42
|
-
<kbd className="pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 font-sans text-micro text-muted-foreground opacity-0 transition-opacity duration-fast group-hover/search:opacity-100 group-focus-within/search:opacity-100">
|
|
43
|
-
{shortcut}
|
|
44
|
-
</kbd>
|
|
45
|
-
)}
|
|
46
|
-
</div>
|
|
47
|
-
)
|
|
48
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
|
|
2
|
-
/*
|
|
3
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
4
|
-
* `registry/blocks/sidebar-user-footer.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
5
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
6
|
-
* Local modifications:
|
|
7
|
-
* - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
|
|
8
|
-
* `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
|
|
9
|
-
* - Styling reads DS tokens (AGENTS.md styling): `text-[13px]` → `text-body`.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { type ReactNode } from 'react'
|
|
13
|
-
import { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '../../components/navigation/sidebar'
|
|
14
|
-
import { DropdownContent, DropdownMenu, DropdownTrigger } from '../../components/overlays/dropdown'
|
|
15
|
-
import { useIcon } from '../../lib/icon-context'
|
|
16
|
-
import { useSize } from '../../lib/size-context'
|
|
17
|
-
import { cn } from '../../lib/utils'
|
|
18
|
-
import { SIDEBAR_MENU_POPUP } from './menu-grid'
|
|
19
|
-
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// Footer user row: identity anchors the sidebar's outer edge. The 20px
|
|
22
|
-
// avatar pulls -ml-0.5 to centre on the rows' leading icon axis; the
|
|
23
|
-
// chevron rides a 24px slot pulled -mr-0.5 onto the trailing action axis —
|
|
24
|
-
// the same axes every other sidebar row uses. Its menu opens upward on the
|
|
25
|
-
// shared sidebar menu grid, so labels and trailing glyphs line up with the
|
|
26
|
-
// trigger row exactly.
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
|
|
29
|
-
export interface SidebarUserFooterProps {
|
|
30
|
-
/** Display name shown in the row. */
|
|
31
|
-
name: ReactNode
|
|
32
|
-
/** 20px avatar — e.g. <img className="size-5 rounded-full" …/>. The row
|
|
33
|
-
* positions it on the leading icon axis; the element owns its look. */
|
|
34
|
-
avatar: ReactNode
|
|
35
|
-
/** Dropdown content (MenuItem rows). */
|
|
36
|
-
menu: ReactNode
|
|
37
|
-
/** Extra classes for the wrapping SidebarMenu — pass "min-w-0 flex-1" when
|
|
38
|
-
* the row shares a horizontal footer line with icon buttons. */
|
|
39
|
-
className?: string
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function SidebarUserFooter({ name, avatar, menu, className }: SidebarUserFooterProps) {
|
|
43
|
-
const iconSize = useSize().icon
|
|
44
|
-
const ChevronsUpDown = useIcon('chevrons-up-down')
|
|
45
|
-
return (
|
|
46
|
-
<SidebarMenu aria-label="User" className={cn(className)}>
|
|
47
|
-
<SidebarMenuItem>
|
|
48
|
-
<DropdownMenu>
|
|
49
|
-
<DropdownTrigger
|
|
50
|
-
render={
|
|
51
|
-
<SidebarMenuButton aria-label="Open user menu">
|
|
52
|
-
<span className="-ml-0.5 -mr-0.5 flex size-5 shrink-0 items-center justify-center">{avatar}</span>
|
|
53
|
-
<span className="min-w-0 truncate text-body text-foreground">{name}</span>
|
|
54
|
-
<span className="ml-auto -mr-0.5 flex size-6 shrink-0 items-center justify-center">
|
|
55
|
-
<ChevronsUpDown size={iconSize} strokeWidth={1.5} className="text-muted-foreground" />
|
|
56
|
-
</span>
|
|
57
|
-
</SidebarMenuButton>
|
|
58
|
-
}
|
|
59
|
-
/>
|
|
60
|
-
<DropdownContent className={SIDEBAR_MENU_POPUP} side="top" align="start" sideOffset={6}>
|
|
61
|
-
{menu}
|
|
62
|
-
</DropdownContent>
|
|
63
|
-
</DropdownMenu>
|
|
64
|
-
</SidebarMenuItem>
|
|
65
|
-
</SidebarMenu>
|
|
66
|
-
)
|
|
67
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
// biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
|
|
2
|
-
/*
|
|
3
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
4
|
-
* `registry/blocks/sidebar-workspace-header.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
|
|
5
|
-
* MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
|
|
6
|
-
* Local modifications:
|
|
7
|
-
* - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
|
|
8
|
-
* `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
|
|
9
|
-
* - Styling reads DS tokens (AGENTS.md styling): inline
|
|
10
|
-
* `fontVariationSettings` → `weight-semibold`; `text-[13px]` / `text-[10px]`
|
|
11
|
-
* → `text-body` / `text-micro-compact`; `duration-80` → `duration-fast`.
|
|
12
|
-
* - `defaultCheckedIndex` passed through to the menu, so a switcher keeps its
|
|
13
|
-
* own pick (the Dropdown's uncontrolled selection).
|
|
14
|
-
* - No peek trigger: the sidebar opens on hover in flow (the provider's
|
|
15
|
-
* `openOnHover`), the topbar's trigger stays beside it, so the tile no
|
|
16
|
-
* longer cross-fades with a trigger over the row.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { type ReactNode } from 'react'
|
|
20
|
-
import { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '../../components/navigation/sidebar'
|
|
21
|
-
import { DropdownContent, DropdownMenu, DropdownTrigger } from '../../components/overlays/dropdown'
|
|
22
|
-
import { useIcon } from '../../lib/icon-context'
|
|
23
|
-
import { useShape } from '../../lib/shape-context'
|
|
24
|
-
import { useSize } from '../../lib/size-context'
|
|
25
|
-
import { cn } from '../../lib/utils'
|
|
26
|
-
import { SIDEBAR_MENU_POPUP } from './menu-grid'
|
|
27
|
-
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Workspace brand row for a sidebar header. The row's pl-8 keeps the name on
|
|
30
|
-
// the rows' 32px text axis, the tile in the leading slot.
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
|
|
33
|
-
export interface SidebarWorkspaceHeaderProps {
|
|
34
|
-
/** Workspace or product name shown in the row. */
|
|
35
|
-
name: ReactNode
|
|
36
|
-
/** 20px mark for the leading slot — a letter tile (see WorkspaceTile), a
|
|
37
|
-
* logo, an avatar. The header positions and cross-fades it; the mark owns
|
|
38
|
-
* its own colors and rounding. */
|
|
39
|
-
tile: ReactNode
|
|
40
|
-
/** Dropdown content (MenuItem rows). Omit to render a non-interactive logo
|
|
41
|
-
* lockup instead of a workspace switcher. */
|
|
42
|
-
menu?: ReactNode
|
|
43
|
-
/** Index of the checked menu row, forwarded to DropdownContent. */
|
|
44
|
-
checkedIndex?: number
|
|
45
|
-
/** Initially checked menu row, for a switcher that keeps its own pick. */
|
|
46
|
-
defaultCheckedIndex?: number
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function SidebarWorkspaceHeader({
|
|
50
|
-
name,
|
|
51
|
-
tile,
|
|
52
|
-
menu,
|
|
53
|
-
checkedIndex,
|
|
54
|
-
defaultCheckedIndex,
|
|
55
|
-
}: SidebarWorkspaceHeaderProps) {
|
|
56
|
-
const iconSize = useSize().icon
|
|
57
|
-
const ChevronDown = useIcon('chevron-down')
|
|
58
|
-
|
|
59
|
-
// The tile sits absolutely in the row's leading slot — 20px at left-1.5
|
|
60
|
-
// centres it on the rows' 16px leading icon axis.
|
|
61
|
-
const tileSlot = (
|
|
62
|
-
<span aria-hidden className="pointer-events-none absolute left-1.5 top-1/2 -translate-y-1/2">
|
|
63
|
-
{tile}
|
|
64
|
-
</span>
|
|
65
|
-
)
|
|
66
|
-
const nameSpan = <span className="min-w-0 truncate text-body weight-semibold text-foreground">{name}</span>
|
|
67
|
-
|
|
68
|
-
if (!menu) {
|
|
69
|
-
// Not interactive, so it renders outside SidebarMenu — a menu row would
|
|
70
|
-
// track the traveling hover background.
|
|
71
|
-
return (
|
|
72
|
-
<div className="relative flex h-8 items-center pl-8 pr-2">
|
|
73
|
-
{tileSlot}
|
|
74
|
-
{nameSpan}
|
|
75
|
-
</div>
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
return (
|
|
79
|
-
// @container: the row hides its dropdown chevron once it gets too narrow
|
|
80
|
-
// to show a useful slice of the name (squeezed by trailing header actions
|
|
81
|
-
// or a mid-drag width) — the text keeps whatever room is left.
|
|
82
|
-
<SidebarMenu aria-label="Workspace" className="@container">
|
|
83
|
-
<SidebarMenuItem>
|
|
84
|
-
<DropdownMenu>
|
|
85
|
-
<DropdownTrigger
|
|
86
|
-
render={
|
|
87
|
-
<SidebarMenuButton aria-label="Switch workspace" className="pl-8">
|
|
88
|
-
{tileSlot}
|
|
89
|
-
{nameSpan}
|
|
90
|
-
<span className="ml-auto inline-flex @max-[7rem]:hidden">
|
|
91
|
-
<ChevronDown size={iconSize} strokeWidth={1.5} className="text-muted-foreground" />
|
|
92
|
-
</span>
|
|
93
|
-
</SidebarMenuButton>
|
|
94
|
-
}
|
|
95
|
-
/>
|
|
96
|
-
{/* Trigger-width popup on the shared sidebar menu grid: items start
|
|
97
|
-
at the row's edge, icon slots land on the leading axis, and the
|
|
98
|
-
check sits on the chevron's vertical axis. */}
|
|
99
|
-
<DropdownContent
|
|
100
|
-
className={SIDEBAR_MENU_POPUP}
|
|
101
|
-
align="start"
|
|
102
|
-
sideOffset={4}
|
|
103
|
-
checkedIndex={checkedIndex}
|
|
104
|
-
defaultCheckedIndex={defaultCheckedIndex}
|
|
105
|
-
>
|
|
106
|
-
{menu}
|
|
107
|
-
</DropdownContent>
|
|
108
|
-
</DropdownMenu>
|
|
109
|
-
</SidebarMenuItem>
|
|
110
|
-
</SidebarMenu>
|
|
111
|
-
)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/** The 20px letter-tile treatment the switcher's trigger and its menu rows
|
|
115
|
-
* share — squared to the shape system, semibold 10px glyph. */
|
|
116
|
-
export function WorkspaceTile({ children, className }: { children: ReactNode; className?: string }) {
|
|
117
|
-
const shape = useShape()
|
|
118
|
-
return (
|
|
119
|
-
<span
|
|
120
|
-
className={cn(
|
|
121
|
-
'flex size-5 shrink-0 items-center justify-center bg-foreground text-micro-compact weight-semibold text-background',
|
|
122
|
-
shape.bgRadius >= 20 ? 'rounded-full' : 'rounded-md',
|
|
123
|
-
className,
|
|
124
|
-
)}
|
|
125
|
-
>
|
|
126
|
-
{children}
|
|
127
|
-
</span>
|
|
128
|
-
)
|
|
129
|
-
}
|