@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,130 +0,0 @@
|
|
|
1
|
-
import InputMessage from './index'
|
|
2
|
-
import Button from '../../button'
|
|
3
|
-
import { ChevronDown, Plus } from 'lucide-react'
|
|
4
|
-
|
|
5
|
-
# Basics
|
|
6
|
-
|
|
7
|
-
## Basic
|
|
8
|
-
|
|
9
|
-
No props at all: the composer keeps its own draft, grows as you type and
|
|
10
|
-
clears itself on Enter.
|
|
11
|
-
|
|
12
|
-
<div className="w-full max-w-xl">
|
|
13
|
-
<InputMessage />
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
## Send Handler
|
|
17
|
-
|
|
18
|
-
`onSend` receives the trimmed text and the attached files; an uncontrolled
|
|
19
|
-
composer clears its own draft afterwards. The handler here is an empty
|
|
20
|
-
arrow — in an app it is where the message joins the transcript.
|
|
21
|
-
|
|
22
|
-
<div className="w-full max-w-xl">
|
|
23
|
-
<InputMessage
|
|
24
|
-
onSend={() => {}}
|
|
25
|
-
placeholder="Press Enter to send. Shift+Enter for newline."
|
|
26
|
-
/>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
## Disabled
|
|
30
|
-
|
|
31
|
-
Dims the panel to 50% and drops pointer events — textarea, send button and
|
|
32
|
-
drag-and-drop all go inert.
|
|
33
|
-
|
|
34
|
-
<div className="w-full max-w-xl">
|
|
35
|
-
<InputMessage defaultValue="This composer is disabled" disabled />
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
# Content
|
|
39
|
-
|
|
40
|
-
## Suggestions
|
|
41
|
-
|
|
42
|
-
The ghost placeholder renders with a Tab keycap — Tab fills it into the
|
|
43
|
-
composer. ArrowDown/ArrowUp walk the list below (focus stays in the
|
|
44
|
-
textarea) and Enter or click fills the highlighted prompt; the first row
|
|
45
|
-
shows a ↓ hint until a row is highlighted. Typing collapses the list.
|
|
46
|
-
|
|
47
|
-
<div className="w-full max-w-xl">
|
|
48
|
-
<InputMessage
|
|
49
|
-
placeholderSuggestion="Why is every other input box so stiff?"
|
|
50
|
-
suggestions={[
|
|
51
|
-
'What is Fluid Functionalism about?',
|
|
52
|
-
'How does Micka tune the springs behind these animations?',
|
|
53
|
-
'Install the InputMessage component in my project',
|
|
54
|
-
'Draft a short thank-you note to Micka for the library',
|
|
55
|
-
]}
|
|
56
|
-
/>
|
|
57
|
-
</div>
|
|
58
|
-
|
|
59
|
-
## Attachments
|
|
60
|
-
|
|
61
|
-
`defaultFiles` seeds the composer and turns attachment behavior on: drop a
|
|
62
|
-
PNG, JPEG or PDF anywhere on the panel, or use the render-fn slot's
|
|
63
|
-
`openFilePicker`. Images preview with object-cover, PDFs render their
|
|
64
|
-
first page, anything else falls back to a document glyph — hover a tile
|
|
65
|
-
for its × button.
|
|
66
|
-
|
|
67
|
-
<div className="w-full max-w-xl">
|
|
68
|
-
<InputMessage
|
|
69
|
-
defaultFiles={[
|
|
70
|
-
new File(['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80"><rect width="80" height="80" fill="#6B97FF" /></svg>'], 'swatch.svg', { type: 'image/svg+xml' }),
|
|
71
|
-
new File(['Quarterly notes'], 'notes.txt', { type: 'text/plain' }),
|
|
72
|
-
]}
|
|
73
|
-
leftSlot={({ openFilePicker }) => (
|
|
74
|
-
<Button variant="ghost" size="icon-compact" aria-label="Attach" onClick={() => openFilePicker()}>
|
|
75
|
-
<Plus />
|
|
76
|
-
</Button>
|
|
77
|
-
)}
|
|
78
|
-
/>
|
|
79
|
-
</div>
|
|
80
|
-
|
|
81
|
-
## Queued messages
|
|
82
|
-
|
|
83
|
-
`defaultStatus="streaming"` plus `defaultQueue` runs the composer as if a
|
|
84
|
-
response were in flight: the send button is a Queue action, so a typed
|
|
85
|
-
message joins the rows above instead of sending. Drag a row (or Alt+↑/↓)
|
|
86
|
-
to reorder, double-click to pull it back into the composer, × to drop it.
|
|
87
|
-
Clear the draft and the button becomes Stop — pressing it ends the
|
|
88
|
-
response, and that streaming→idle edge dispatches the row at the top.
|
|
89
|
-
|
|
90
|
-
<div className="w-full max-w-xl">
|
|
91
|
-
<InputMessage
|
|
92
|
-
defaultStatus="streaming"
|
|
93
|
-
defaultQueue={[
|
|
94
|
-
{ id: 'q1', text: 'Also add a dark-mode screenshot', files: [] },
|
|
95
|
-
{ id: 'q2', text: 'And link the changelog entry', files: [] },
|
|
96
|
-
]}
|
|
97
|
-
/>
|
|
98
|
-
</div>
|
|
99
|
-
|
|
100
|
-
# Slots
|
|
101
|
-
|
|
102
|
-
## Left Slot Only
|
|
103
|
-
|
|
104
|
-
`leftSlot` takes the bottom-left action area — an attach button, a model
|
|
105
|
-
switcher, a mode toggle.
|
|
106
|
-
|
|
107
|
-
<div className="w-full max-w-xl">
|
|
108
|
-
<InputMessage
|
|
109
|
-
leftSlot={
|
|
110
|
-
<Button variant="ghost" size="icon-compact" aria-label="Attach">
|
|
111
|
-
<Plus />
|
|
112
|
-
</Button>
|
|
113
|
-
}
|
|
114
|
-
/>
|
|
115
|
-
</div>
|
|
116
|
-
|
|
117
|
-
## Right Slot Only
|
|
118
|
-
|
|
119
|
-
`rightSlot` sits in the bottom-right, just before the built-in send
|
|
120
|
-
button.
|
|
121
|
-
|
|
122
|
-
<div className="w-full max-w-xl">
|
|
123
|
-
<InputMessage
|
|
124
|
-
rightSlot={
|
|
125
|
-
<Button variant="ghost" size="compact" trailingIcon={ChevronDown}>
|
|
126
|
-
Sonnet 4.6
|
|
127
|
-
</Button>
|
|
128
|
-
}
|
|
129
|
-
/>
|
|
130
|
-
</div>
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
|
|
3
|
-
* `registry/default/file-thumbnail.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); the `@next/next/no-img-element`
|
|
7
|
-
* eslint-disable comment dropped (no Next.js).
|
|
8
|
-
* - `@/lib/{utils,shape-context}` rewritten to `../../../lib/*`.
|
|
9
|
-
* - The lazy `import("pdfjs-dist")` is kept as-is: verified against modo's own
|
|
10
|
-
* esbuild settings (bundle, `platform: "browser"`, `target: "es2022"`, both
|
|
11
|
-
* with and without `splitting: true`) — it resolves cleanly and lands in a
|
|
12
|
-
* ~790kB chunk that is only fetched when a PDF is actually attached. No CDN
|
|
13
|
-
* fallback was needed. The worker still comes from jsDelivr, so no
|
|
14
|
-
* bundler-side worker config is required.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { useEffect, useState } from 'react'
|
|
18
|
-
import { useShape } from '../../../lib/shape-context'
|
|
19
|
-
import { cn } from '../../../lib/utils'
|
|
20
|
-
|
|
21
|
-
// ─── Lazy pdfjs loader ────────────────────────────────────────────────────
|
|
22
|
-
// Imports pdfjs-dist on first PDF, caches the module, and points the worker
|
|
23
|
-
// at the matching CDN build. Consumers don't need bundler-side worker config.
|
|
24
|
-
type PdfjsModule = typeof import('pdfjs-dist')
|
|
25
|
-
let pdfjsPromise: Promise<PdfjsModule> | null = null
|
|
26
|
-
|
|
27
|
-
async function loadPdfjs(): Promise<PdfjsModule> {
|
|
28
|
-
if (!pdfjsPromise) {
|
|
29
|
-
pdfjsPromise = import('pdfjs-dist').then(mod => {
|
|
30
|
-
if (!mod.GlobalWorkerOptions.workerSrc) {
|
|
31
|
-
mod.GlobalWorkerOptions.workerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${mod.version}/build/pdf.worker.min.mjs`
|
|
32
|
-
}
|
|
33
|
-
return mod
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
return pdfjsPromise
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function renderPdfFirstPage(file: File, targetWidth: number): Promise<string> {
|
|
40
|
-
const pdfjs = await loadPdfjs()
|
|
41
|
-
const buffer = await file.arrayBuffer()
|
|
42
|
-
const pdf = await pdfjs.getDocument({ data: buffer }).promise
|
|
43
|
-
const page = await pdf.getPage(1)
|
|
44
|
-
const baseViewport = page.getViewport({ scale: 1 })
|
|
45
|
-
const scale = (targetWidth * 2) / baseViewport.width // 2× for retina
|
|
46
|
-
const viewport = page.getViewport({ scale })
|
|
47
|
-
const canvas = document.createElement('canvas')
|
|
48
|
-
canvas.width = viewport.width
|
|
49
|
-
canvas.height = viewport.height
|
|
50
|
-
await page.render({ canvas, viewport }).promise
|
|
51
|
-
return canvas.toDataURL('image/png')
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// ─── File thumbnail ───────────────────────────────────────────────────────
|
|
55
|
-
// Read-only square preview of a File. Images use object-cover via
|
|
56
|
-
// `URL.createObjectURL`; PDFs render the first page via pdfjs; while either is
|
|
57
|
-
// resolving a spinner is shown. Self-contained (border + surface + sizing) so
|
|
58
|
-
// it can be reused both inside the composer's preview row and to render
|
|
59
|
-
// already-sent attachments in a chat transcript.
|
|
60
|
-
interface FileThumbnailProps {
|
|
61
|
-
file: File
|
|
62
|
-
/** Side length of the square thumbnail in pixels. */
|
|
63
|
-
size: number
|
|
64
|
-
className?: string
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function FileThumbnail({ file, size, className }: FileThumbnailProps) {
|
|
68
|
-
const shape = useShape()
|
|
69
|
-
const isImage = file.type.startsWith('image/')
|
|
70
|
-
const isPdf = file.type === 'application/pdf'
|
|
71
|
-
|
|
72
|
-
// Create blob URL inside an effect (NOT useMemo) so the cleanup-revoke
|
|
73
|
-
// and the URL-creation stay in sync. In React 18 StrictMode dev, a
|
|
74
|
-
// useMemo-created URL gets revoked by the simulated effect-cleanup but
|
|
75
|
-
// useMemo doesn't re-run on the simulated re-mount (no re-render happens),
|
|
76
|
-
// leaving the DOM with a stale, revoked `blob:` URL — broken image.
|
|
77
|
-
// Putting both in the same effect means the simulated re-mount creates a
|
|
78
|
-
// fresh URL and updates state. The one-frame "before URL" state is
|
|
79
|
-
// covered by the bg-accent (no fallback icon shown for images), so the
|
|
80
|
-
// transition is visually clean.
|
|
81
|
-
const [imageUrl, setImageUrl] = useState<string | null>(null)
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
if (!isImage) {
|
|
84
|
-
// Clear stale state if the `file` prop swaps type on the same mount —
|
|
85
|
-
// otherwise a revoked blob URL would keep winning over the new preview.
|
|
86
|
-
setImageUrl(null)
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
const url = URL.createObjectURL(file)
|
|
90
|
-
setImageUrl(url)
|
|
91
|
-
return () => URL.revokeObjectURL(url)
|
|
92
|
-
}, [isImage, file])
|
|
93
|
-
|
|
94
|
-
// PDFs need async rendering — loading flash is unavoidable for the first
|
|
95
|
-
// ~100–300ms while pdfjs loads. Falls back to the generic icon on error
|
|
96
|
-
// (corrupt/password-protected file, CDN worker blocked).
|
|
97
|
-
const [pdfUrl, setPdfUrl] = useState<string | null>(null)
|
|
98
|
-
const [pdfError, setPdfError] = useState(false)
|
|
99
|
-
useEffect(() => {
|
|
100
|
-
setPdfError(false)
|
|
101
|
-
if (!isPdf) {
|
|
102
|
-
setPdfUrl(null)
|
|
103
|
-
return
|
|
104
|
-
}
|
|
105
|
-
let cancelled = false
|
|
106
|
-
renderPdfFirstPage(file, size)
|
|
107
|
-
.then(url => {
|
|
108
|
-
if (!cancelled) setPdfUrl(url)
|
|
109
|
-
})
|
|
110
|
-
.catch(() => {
|
|
111
|
-
if (!cancelled) setPdfError(true)
|
|
112
|
-
})
|
|
113
|
-
return () => {
|
|
114
|
-
cancelled = true
|
|
115
|
-
}
|
|
116
|
-
}, [file, isPdf, size])
|
|
117
|
-
|
|
118
|
-
const previewUrl = imageUrl ?? pdfUrl
|
|
119
|
-
// Spinner only while a preview is genuinely pending; anything that can't
|
|
120
|
-
// produce one (failed PDF, unsupported type) gets the generic icon instead.
|
|
121
|
-
const isPending = (isImage && !imageUrl) || (isPdf && !pdfUrl && !pdfError)
|
|
122
|
-
|
|
123
|
-
return (
|
|
124
|
-
<div
|
|
125
|
-
className={cn('relative shrink-0 overflow-hidden bg-accent border border-border', shape.bg, className)}
|
|
126
|
-
style={{ width: size, height: size }}
|
|
127
|
-
>
|
|
128
|
-
{previewUrl ? (
|
|
129
|
-
<img src={previewUrl} alt={file.name} className="absolute inset-0 w-full h-full object-cover" />
|
|
130
|
-
) : isPending ? (
|
|
131
|
-
// Circular spinner while we wait for the preview to be ready.
|
|
132
|
-
// Used for both images (brief URL-creation gap) and PDFs (longer
|
|
133
|
-
// pdfjs render). The thin ring is mostly subtle (border-border)
|
|
134
|
-
// with one quadrant accented (border-t-muted-foreground) so the
|
|
135
|
-
// `animate-spin` rotation reads as a moving arc.
|
|
136
|
-
<div className="absolute inset-0 flex items-center justify-center">
|
|
137
|
-
<div
|
|
138
|
-
className="w-6 h-6 rounded-full border-2 border-border border-t-muted-foreground animate-spin"
|
|
139
|
-
aria-label="Loading preview"
|
|
140
|
-
role="status"
|
|
141
|
-
/>
|
|
142
|
-
</div>
|
|
143
|
-
) : (
|
|
144
|
-
// Generic document glyph for files with no renderable preview.
|
|
145
|
-
// Inline SVG (not the icon system) so the thumbnail stays
|
|
146
|
-
// self-contained for registry consumers.
|
|
147
|
-
<div
|
|
148
|
-
className="absolute inset-0 flex items-center justify-center text-muted-foreground"
|
|
149
|
-
role="img"
|
|
150
|
-
aria-label={file.name}
|
|
151
|
-
>
|
|
152
|
-
<svg
|
|
153
|
-
width={Math.max(16, size * 0.35)}
|
|
154
|
-
height={Math.max(16, size * 0.35)}
|
|
155
|
-
viewBox="0 0 24 24"
|
|
156
|
-
fill="none"
|
|
157
|
-
stroke="currentColor"
|
|
158
|
-
strokeWidth="1.5"
|
|
159
|
-
strokeLinecap="round"
|
|
160
|
-
strokeLinejoin="round"
|
|
161
|
-
aria-hidden="true"
|
|
162
|
-
>
|
|
163
|
-
<path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z" />
|
|
164
|
-
<path d="M14 3v5h5" />
|
|
165
|
-
</svg>
|
|
166
|
-
</div>
|
|
167
|
-
)}
|
|
168
|
-
</div>
|
|
169
|
-
)
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export type { FileThumbnailProps }
|
|
173
|
-
export { FileThumbnail, loadPdfjs, renderPdfFirstPage }
|