@exegia/corpora-ui 3.0.0 → 4.0.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 +20 -0
- package/dist-lib/autocomplete-DzjspdKa.js +151 -0
- package/dist-lib/base-CiR7nLAD.js +37 -0
- package/dist-lib/breadcrumb-DtFOhTfs.js +83 -0
- package/dist-lib/button-DDBbG_zF.js +143 -0
- package/dist-lib/button.js +3 -0
- package/dist-lib/calendar-Dyut8HPa.js +62 -0
- package/dist-lib/card.js +150 -0
- package/dist-lib/checkbox-group-B0BPFc-K.js +12 -0
- package/dist-lib/combobox-BwfmU1S_.js +267 -0
- package/dist-lib/components/atoms/text/default.d.ts +2 -1143
- package/dist-lib/components/blocks/shell/index.d.ts +1 -0
- package/dist-lib/components/blocks/sidebar-primitives/content.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/context.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/footer.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/group-action.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/group-content.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/group-label.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/group.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/header.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/index.d.ts +26 -0
- package/dist-lib/components/blocks/sidebar-primitives/input.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/inset.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-action.d.ts +5 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-badge.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-button.d.ts +9 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-item.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-skeleton.d.ts +4 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-sub-button.d.ts +6 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-sub-item.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu-sub.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/menu.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/provider.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/rail.d.ts +2 -0
- package/dist-lib/components/blocks/sidebar-primitives/separator.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/sidebar-atom.d.ts +32 -0
- package/dist-lib/components/blocks/sidebar-primitives/sidebar.d.ts +6 -0
- package/dist-lib/components/blocks/sidebar-primitives/trigger.d.ts +3 -0
- package/dist-lib/components/blocks/sidebar-primitives/types.d.ts +26 -0
- package/dist-lib/components/blocks/sidebar-primitives/use-mobile.d.ts +1 -0
- package/dist-lib/components/blocks/sidebar-primitives/use-sidebar.d.ts +4 -0
- package/dist-lib/components/blocks/sidebar-primitives/utils.d.ts +10 -0
- package/dist-lib/components/ui/alert.d.ts +1 -1
- package/dist-lib/components/ui/badge.d.ts +2 -2
- package/dist-lib/components/ui/breadcrumb/base.d.ts +2 -0
- package/dist-lib/components/ui/breadcrumb/ellipsis.d.ts +2 -0
- package/dist-lib/components/ui/breadcrumb/index.d.ts +7 -0
- package/dist-lib/components/ui/breadcrumb/item.d.ts +2 -0
- package/dist-lib/components/ui/breadcrumb/link.d.ts +3 -0
- package/dist-lib/components/ui/breadcrumb/list.d.ts +2 -0
- package/dist-lib/components/ui/breadcrumb/page.d.ts +2 -0
- package/dist-lib/components/ui/breadcrumb/separator.d.ts +2 -0
- package/dist-lib/components/ui/button.d.ts +2 -2
- package/dist-lib/components/ui/calendar/base.d.ts +3 -0
- package/dist-lib/components/ui/calendar/index.d.ts +1 -0
- package/dist-lib/components/ui/calendar/utils.d.ts +1 -0
- package/dist-lib/components/ui/checkbox-group/base.d.ts +3 -0
- package/dist-lib/components/ui/checkbox-group/index.d.ts +2 -0
- package/dist-lib/components/ui/combobox/chip-remove.d.ts +3 -0
- package/dist-lib/components/ui/combobox/chip.d.ts +5 -0
- package/dist-lib/components/ui/combobox/chips-input.d.ts +6 -0
- package/dist-lib/components/ui/combobox/chips.d.ts +5 -0
- package/dist-lib/components/ui/combobox/clear.d.ts +3 -0
- package/dist-lib/components/ui/combobox/collection.d.ts +3 -0
- package/dist-lib/components/ui/combobox/context.d.ts +5 -0
- package/dist-lib/components/ui/combobox/empty.d.ts +3 -0
- package/dist-lib/components/ui/combobox/group-label.d.ts +3 -0
- package/dist-lib/components/ui/combobox/group.d.ts +3 -0
- package/dist-lib/components/ui/combobox/index.d.ts +22 -0
- package/dist-lib/components/ui/combobox/input.d.ts +11 -0
- package/dist-lib/components/ui/combobox/item.d.ts +3 -0
- package/dist-lib/components/ui/combobox/list.d.ts +3 -0
- package/dist-lib/components/ui/combobox/popup.d.ts +10 -0
- package/dist-lib/components/ui/combobox/root.d.ts +3 -0
- package/dist-lib/components/ui/combobox/row.d.ts +3 -0
- package/dist-lib/components/ui/combobox/separator.d.ts +3 -0
- package/dist-lib/components/ui/combobox/status.d.ts +3 -0
- package/dist-lib/components/ui/combobox/trigger.d.ts +3 -0
- package/dist-lib/components/ui/combobox/utils.d.ts +2 -0
- package/dist-lib/components/ui/combobox/value.d.ts +3 -0
- package/dist-lib/components/ui/dialog/backdrop.d.ts +3 -0
- package/dist-lib/components/ui/dialog/close.d.ts +3 -0
- package/dist-lib/components/ui/dialog/description.d.ts +3 -0
- package/dist-lib/components/ui/dialog/footer.d.ts +5 -0
- package/dist-lib/components/ui/dialog/header.d.ts +3 -0
- package/dist-lib/components/ui/dialog/index.d.ts +16 -0
- package/dist-lib/components/ui/dialog/panel.d.ts +5 -0
- package/dist-lib/components/ui/dialog/popup.d.ts +8 -0
- package/dist-lib/components/ui/dialog/title.d.ts +3 -0
- package/dist-lib/components/ui/dialog/trigger.d.ts +3 -0
- package/dist-lib/components/ui/dialog/utils.d.ts +4 -0
- package/dist-lib/components/ui/dialog/viewport.d.ts +3 -0
- package/dist-lib/components/ui/drawer/backdrop.d.ts +3 -0
- package/dist-lib/components/ui/drawer/bar.d.ts +6 -0
- package/dist-lib/components/ui/drawer/close.d.ts +3 -0
- package/dist-lib/components/ui/drawer/content.d.ts +3 -0
- package/dist-lib/components/ui/drawer/context.d.ts +5 -0
- package/dist-lib/components/ui/drawer/description.d.ts +3 -0
- package/dist-lib/components/ui/drawer/footer.d.ts +6 -0
- package/dist-lib/components/ui/drawer/header.d.ts +5 -0
- package/dist-lib/components/ui/drawer/index.d.ts +26 -0
- package/dist-lib/components/ui/drawer/menu-checkbox-item.d.ts +6 -0
- package/dist-lib/components/ui/drawer/menu-group-label.d.ts +3 -0
- package/dist-lib/components/ui/drawer/menu-group.d.ts +3 -0
- package/dist-lib/components/ui/drawer/menu-item.d.ts +5 -0
- package/dist-lib/components/ui/drawer/menu-radio-group.d.ts +3 -0
- package/dist-lib/components/ui/drawer/menu-radio-item.d.ts +6 -0
- package/dist-lib/components/ui/drawer/menu-separator.d.ts +3 -0
- package/dist-lib/components/ui/drawer/menu-trigger.d.ts +3 -0
- package/dist-lib/components/ui/drawer/menu.d.ts +3 -0
- package/dist-lib/components/ui/drawer/panel.d.ts +7 -0
- package/dist-lib/components/ui/drawer/popup.d.ts +10 -0
- package/dist-lib/components/ui/drawer/portal.d.ts +3 -0
- package/dist-lib/components/ui/drawer/root.d.ts +6 -0
- package/dist-lib/components/ui/drawer/swipe-area.d.ts +6 -0
- package/dist-lib/components/ui/drawer/title.d.ts +3 -0
- package/dist-lib/components/ui/drawer/trigger.d.ts +3 -0
- package/dist-lib/components/ui/drawer/types.d.ts +1 -0
- package/dist-lib/components/ui/drawer/utils.d.ts +4 -0
- package/dist-lib/components/ui/drawer/viewport.d.ts +7 -0
- package/dist-lib/components/ui/empty/base.d.ts +2 -0
- package/dist-lib/components/ui/empty/content.d.ts +2 -0
- package/dist-lib/components/ui/empty/description.d.ts +2 -0
- package/dist-lib/components/ui/empty/header.d.ts +2 -0
- package/dist-lib/components/ui/empty/index.d.ts +6 -0
- package/dist-lib/components/ui/empty/media.d.ts +4 -0
- package/dist-lib/components/ui/empty/title.d.ts +2 -0
- package/dist-lib/components/ui/empty/utils.d.ts +3 -0
- package/dist-lib/components/ui/fieldset/base.d.ts +3 -0
- package/dist-lib/components/ui/fieldset/index.d.ts +3 -0
- package/dist-lib/components/ui/fieldset/legend.d.ts +3 -0
- package/dist-lib/components/ui/form/base.d.ts +3 -0
- package/dist-lib/components/ui/form/index.d.ts +2 -0
- package/dist-lib/components/ui/glasscn/lazy-glass-surface.d.ts +6 -0
- package/dist-lib/components/ui/meter/base.d.ts +3 -0
- package/dist-lib/components/ui/meter/index.d.ts +6 -0
- package/dist-lib/components/ui/meter/indicator.d.ts +3 -0
- package/dist-lib/components/ui/meter/label.d.ts +3 -0
- package/dist-lib/components/ui/meter/track.d.ts +3 -0
- package/dist-lib/components/ui/meter/value.d.ts +3 -0
- package/dist-lib/components/ui/modal.d.ts +10 -0
- package/dist-lib/components/ui/number-field/base.d.ts +5 -0
- package/dist-lib/components/ui/number-field/context.d.ts +4 -0
- package/dist-lib/components/ui/number-field/cursor-grow-icon.d.ts +2 -0
- package/dist-lib/components/ui/number-field/decrement.d.ts +3 -0
- package/dist-lib/components/ui/number-field/group.d.ts +3 -0
- package/dist-lib/components/ui/number-field/increment.d.ts +3 -0
- package/dist-lib/components/ui/number-field/index.d.ts +9 -0
- package/dist-lib/components/ui/number-field/input.d.ts +3 -0
- package/dist-lib/components/ui/number-field/scrub-area.d.ts +5 -0
- package/dist-lib/components/ui/overlays.d.ts +4 -0
- package/dist-lib/components/ui/pagination/base.d.ts +2 -0
- package/dist-lib/components/ui/pagination/content.d.ts +2 -0
- package/dist-lib/components/ui/pagination/ellipsis.d.ts +2 -0
- package/dist-lib/components/ui/pagination/index.d.ts +8 -0
- package/dist-lib/components/ui/pagination/item.d.ts +2 -0
- package/dist-lib/components/ui/pagination/link.d.ts +3 -0
- package/dist-lib/components/ui/pagination/next.d.ts +3 -0
- package/dist-lib/components/ui/pagination/previous.d.ts +3 -0
- package/dist-lib/components/ui/pagination/types.d.ts +7 -0
- package/dist-lib/components/ui/preview-card.d.ts +2 -1
- package/dist-lib/components/ui/progress/base.d.ts +3 -0
- package/dist-lib/components/ui/progress/index.d.ts +6 -0
- package/dist-lib/components/ui/progress/indicator.d.ts +3 -0
- package/dist-lib/components/ui/progress/label.d.ts +3 -0
- package/dist-lib/components/ui/progress/track.d.ts +3 -0
- package/dist-lib/components/ui/progress/value.d.ts +3 -0
- package/dist-lib/components/ui/radio-group/base.d.ts +3 -0
- package/dist-lib/components/ui/radio-group/index.d.ts +5 -0
- package/dist-lib/components/ui/radio-group/radio.d.ts +3 -0
- package/dist-lib/components/ui/select.d.ts +1 -1
- package/dist-lib/components/ui/sheet-parts/backdrop.d.ts +2 -0
- package/dist-lib/components/ui/sheet-parts/overlay.d.ts +2 -0
- package/dist-lib/components/ui/sheet-parts/panel.d.ts +5 -0
- package/dist-lib/components/ui/sheet-parts/popup.d.ts +10 -0
- package/dist-lib/components/ui/sheet-parts/portal.d.ts +2 -0
- package/dist-lib/components/ui/sheet-parts/viewport.d.ts +6 -0
- package/dist-lib/components/ui/sheet.d.ts +19 -9
- package/dist-lib/components/ui/slider/base.d.ts +3 -0
- package/dist-lib/components/ui/slider/index.d.ts +3 -0
- package/dist-lib/components/ui/slider/value.d.ts +3 -0
- package/dist-lib/components/ui/table/base.d.ts +3 -0
- package/dist-lib/components/ui/table/body.d.ts +2 -0
- package/dist-lib/components/ui/table/caption.d.ts +2 -0
- package/dist-lib/components/ui/table/cell.d.ts +2 -0
- package/dist-lib/components/ui/table/footer.d.ts +2 -0
- package/dist-lib/components/ui/table/head.d.ts +2 -0
- package/dist-lib/components/ui/table/header.d.ts +2 -0
- package/dist-lib/components/ui/table/index.d.ts +10 -0
- package/dist-lib/components/ui/table/row.d.ts +2 -0
- package/dist-lib/components/ui/table/types.d.ts +7 -0
- package/dist-lib/components/ui/toast.d.ts +2 -0
- package/dist-lib/components/ui/toggle/base.d.ts +5 -0
- package/dist-lib/components/ui/toggle/index.d.ts +3 -0
- package/dist-lib/components/ui/toggle/utils.d.ts +4 -0
- package/dist-lib/components/ui/toggle-group/base.d.ts +5 -0
- package/dist-lib/components/ui/toggle-group/context.d.ts +4 -0
- package/dist-lib/components/ui/toggle-group/index.d.ts +5 -0
- package/dist-lib/components/ui/toggle-group/item.d.ts +5 -0
- package/dist-lib/components/ui/toggle-group/separator.d.ts +5 -0
- package/dist-lib/dialog-BF9rLVsx.js +135 -0
- package/dist-lib/drawer-DuQtc_IN.js +350 -0
- package/dist-lib/ease-C9At8rnB.js +120 -0
- package/dist-lib/empty-CUO4MoHd.js +87 -0
- package/dist-lib/exegia-provider-CDYMDsSW.js +126 -0
- package/dist-lib/fieldset-C3YDowBt.js +22 -0
- package/dist-lib/form-DdxBnCxo.js +12 -0
- package/dist-lib/index.css +3 -0
- package/dist-lib/index.d.ts +4 -0
- package/dist-lib/index.js +6649 -10344
- package/dist-lib/input.js +28 -0
- package/dist-lib/label.js +19 -0
- package/dist-lib/lib/segmented-control.d.ts +1 -1
- package/dist-lib/lib/state/exegia-provider.d.ts +17 -8
- package/dist-lib/lib/state/index.d.ts +2 -0
- package/dist-lib/lib/state/portal-context.d.ts +5 -0
- package/dist-lib/lib/state/sound-loading.d.ts +4 -0
- package/dist-lib/liquid-glass-BrmOha12.js +50 -0
- package/dist-lib/meter-B5i2cf7m.js +49 -0
- package/dist-lib/modal-BSBLNZfo.js +24 -0
- package/dist-lib/number-field-D5p-WTn_.js +97 -0
- package/dist-lib/overlays.js +5 -0
- package/dist-lib/pagination-CPOVfufE.js +94 -0
- package/dist-lib/popover-BKYgU_p3.js +62 -0
- package/dist-lib/portal-context-oIZFl3NP.js +9 -0
- package/dist-lib/progress-ByAk9CV5.js +50 -0
- package/dist-lib/radio-group-CMwDkKFE.js +27 -0
- package/dist-lib/rolldown-runtime-Dy4uBu1J.js +11 -0
- package/dist-lib/scaffold-DjS8eLk9.js +925 -0
- package/dist-lib/scaffold.js +2 -0
- package/dist-lib/scroll-area-BNcHlmRX.js +39 -0
- package/dist-lib/separator-D7T-98IV.js +14 -0
- package/dist-lib/sheet-BAYosIsg.js +148 -0
- package/dist-lib/sheet-D4fmEZW5.js +22 -0
- package/dist-lib/shell-WTIa9_ul.js +722 -0
- package/dist-lib/shell.js +2 -0
- package/dist-lib/sidebar-1j5RYZ2t.js +529 -0
- package/dist-lib/skeleton-CwqQoMiY.js +12 -0
- package/dist-lib/slider-_1H30BMt.js +48 -0
- package/dist-lib/sound-knGH4lj-.js +19 -0
- package/dist-lib/spinner-cwaneGYM.js +14 -0
- package/dist-lib/state.js +2 -0
- package/dist-lib/table-D43_yedE.js +87 -0
- package/dist-lib/tabs-CwWnKxRI.js +66 -0
- package/dist-lib/textarea-CxycYTkF.js +27 -0
- package/dist-lib/toast-BLwJEhKU.js +151 -0
- package/dist-lib/toggle-group-BzDvDKL0.js +55 -0
- package/dist-lib/tooltip-aPB3pyrl.js +39 -0
- package/dist-lib/ui/accordion.d.ts +1 -0
- package/dist-lib/ui/accordion.js +45 -0
- package/dist-lib/ui/alert-dialog.d.ts +1 -0
- package/dist-lib/ui/alert-dialog.js +74 -0
- package/dist-lib/ui/alert.d.ts +1 -0
- package/dist-lib/ui/alert.js +45 -0
- package/dist-lib/ui/autocomplete.d.ts +1 -0
- package/dist-lib/ui/autocomplete.js +2 -0
- package/dist-lib/ui/avatar.d.ts +2 -0
- package/dist-lib/ui/avatar.js +50 -0
- package/dist-lib/ui/badge.d.ts +2 -0
- package/dist-lib/ui/badge.js +72 -0
- package/dist-lib/ui/breadcrumb.d.ts +1 -0
- package/dist-lib/ui/breadcrumb.js +2 -0
- package/dist-lib/ui/button.d.ts +2 -0
- package/dist-lib/ui/button.js +2 -0
- package/dist-lib/ui/calendar.d.ts +1 -0
- package/dist-lib/ui/calendar.js +2 -0
- package/dist-lib/ui/card.d.ts +1 -0
- package/dist-lib/ui/card.js +2 -0
- package/dist-lib/ui/checkbox-group.d.ts +1 -0
- package/dist-lib/ui/checkbox-group.js +2 -0
- package/dist-lib/ui/checkbox.d.ts +1 -0
- package/dist-lib/ui/checkbox.js +51 -0
- package/dist-lib/ui/collapsible.d.ts +1 -0
- package/dist-lib/ui/collapsible.js +26 -0
- package/dist-lib/ui/combobox.d.ts +1 -0
- package/dist-lib/ui/combobox.js +2 -0
- package/dist-lib/ui/command.d.ts +1 -0
- package/dist-lib/ui/command.js +125 -0
- package/dist-lib/ui/context-menu.d.ts +1 -0
- package/dist-lib/ui/context-menu.js +178 -0
- package/dist-lib/ui/dialog.d.ts +1 -0
- package/dist-lib/ui/dialog.js +2 -0
- package/dist-lib/ui/drawer.d.ts +1 -0
- package/dist-lib/ui/drawer.js +2 -0
- package/dist-lib/ui/empty.d.ts +1 -0
- package/dist-lib/ui/empty.js +2 -0
- package/dist-lib/ui/field.d.ts +1 -0
- package/dist-lib/ui/field.js +42 -0
- package/dist-lib/ui/fieldset.d.ts +1 -0
- package/dist-lib/ui/fieldset.js +2 -0
- package/dist-lib/ui/form.d.ts +1 -0
- package/dist-lib/ui/form.js +2 -0
- package/dist-lib/ui/frame.d.ts +1 -0
- package/dist-lib/ui/frame.js +47 -0
- package/dist-lib/ui/group.d.ts +1 -0
- package/dist-lib/ui/group.js +44 -0
- package/dist-lib/ui/index.d.ts +55 -0
- package/dist-lib/ui/index.js +497 -0
- package/dist-lib/ui/input-group.d.ts +1 -0
- package/dist-lib/ui/input-group.js +59 -0
- package/dist-lib/ui/input.d.ts +2 -0
- package/dist-lib/ui/input.js +2 -0
- package/dist-lib/ui/kbd.d.ts +1 -0
- package/dist-lib/ui/kbd.js +19 -0
- package/dist-lib/ui/label.d.ts +1 -0
- package/dist-lib/ui/label.js +2 -0
- package/dist-lib/ui/menu.d.ts +1 -0
- package/dist-lib/ui/menu.js +178 -0
- package/dist-lib/ui/meter.d.ts +1 -0
- package/dist-lib/ui/meter.js +2 -0
- package/dist-lib/ui/number-field.d.ts +1 -0
- package/dist-lib/ui/number-field.js +2 -0
- package/dist-lib/ui/otp-field.d.ts +1 -0
- package/dist-lib/ui/otp-field.js +36 -0
- package/dist-lib/ui/pagination.d.ts +1 -0
- package/dist-lib/ui/pagination.js +2 -0
- package/dist-lib/ui/popover.d.ts +1 -0
- package/dist-lib/ui/popover.js +2 -0
- package/dist-lib/ui/preview-card.d.ts +1 -0
- package/dist-lib/ui/preview-card.js +35 -0
- package/dist-lib/ui/progress.d.ts +1 -0
- package/dist-lib/ui/progress.js +2 -0
- package/dist-lib/ui/radio-group.d.ts +1 -0
- package/dist-lib/ui/radio-group.js +2 -0
- package/dist-lib/ui/scroll-area.d.ts +1 -0
- package/dist-lib/ui/scroll-area.js +2 -0
- package/dist-lib/ui/select.d.ts +2 -0
- package/dist-lib/ui/select.js +145 -0
- package/dist-lib/ui/separator.d.ts +2 -0
- package/dist-lib/ui/separator.js +3 -0
- package/dist-lib/ui/sheet.d.ts +1 -0
- package/dist-lib/ui/sheet.js +3 -0
- package/dist-lib/ui/sidebar.d.ts +1 -0
- package/dist-lib/ui/sidebar.js +2 -0
- package/dist-lib/ui/skeleton.d.ts +1 -0
- package/dist-lib/ui/skeleton.js +2 -0
- package/dist-lib/ui/slider.d.ts +1 -0
- package/dist-lib/ui/slider.js +2 -0
- package/dist-lib/ui/spinner.d.ts +1 -0
- package/dist-lib/ui/spinner.js +2 -0
- package/dist-lib/ui/switch.d.ts +1 -0
- package/dist-lib/ui/switch.js +17 -0
- package/dist-lib/ui/table.d.ts +1 -0
- package/dist-lib/ui/table.js +2 -0
- package/dist-lib/ui/tabs.d.ts +1 -0
- package/dist-lib/ui/tabs.js +2 -0
- package/dist-lib/ui/textarea.d.ts +2 -0
- package/dist-lib/ui/textarea.js +2 -0
- package/dist-lib/ui/toast.d.ts +1 -0
- package/dist-lib/ui/toast.js +2 -0
- package/dist-lib/ui/toggle-group.d.ts +1 -0
- package/dist-lib/ui/toggle-group.js +2 -0
- package/dist-lib/ui/toggle.d.ts +1 -0
- package/dist-lib/ui/toggle.js +3 -0
- package/dist-lib/ui/toolbar.d.ts +1 -0
- package/dist-lib/ui/toolbar.js +48 -0
- package/dist-lib/ui/tooltip.d.ts +1 -0
- package/dist-lib/ui/tooltip.js +2 -0
- package/dist-lib/utils-BO0qfoA6.js +61 -0
- package/package.json +285 -23
- package/dist-lib/components/atoms/_layout.d.ts +0 -4
- package/dist-lib/components/atoms/bubble/__tests__/bubble.test.d.ts +0 -1
- package/dist-lib/components/atoms/bubble/__tests__/reference.test.d.ts +0 -1
- package/dist-lib/components/atoms/text/__tests__/text.test.d.ts +0 -1
- package/dist-lib/components/atoms/text-selection/__tests__/click-popover.test.d.ts +0 -1
- package/dist-lib/components/atoms/text-selection/__tests__/text-selection.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/auth-flow-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/auth-state-atom.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/linked-accounts-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/onboarding-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/passkey-manager-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/passkey-sign-in-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/signup-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/auth/__tests__/update-password-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/chat/__tests__/ai-panel.test.d.ts +0 -1
- package/dist-lib/components/blocks/profile/__tests__/profile-card-block.test.d.ts +0 -1
- package/dist-lib/components/blocks/scaffold/__tests__/scaffold-atom.test.d.ts +0 -1
- package/dist-lib/components/blocks/scaffold/__tests__/scaffold.test.d.ts +0 -1
- package/dist-lib/components/blocks/shell/__tests__/shell-fit-atom.test.d.ts +0 -1
- package/dist-lib/components/blocks/shell/__tests__/shell-layout.test.d.ts +0 -1
- package/dist-lib/components/blocks/shell/__tests__/shell-metrics.test.d.ts +0 -1
- package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.d.ts +0 -1
- package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar.test.d.ts +0 -1
- package/dist-lib/components/blocks/sidebar/__tests__/use-ai-sidebar.test.d.ts +0 -1
- package/dist-lib/components/composed/__tests__/logo.test.d.ts +0 -1
- package/dist-lib/components/composed/action-bar/__tests__/action-bar.test.d.ts +0 -1
- package/dist-lib/components/composed/ai/__tests__/ai.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/attachment.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/beautiful-ui.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/chart.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/code-block.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/composer-attachments.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/composer.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/flowchart.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/glass-material.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/markdown.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/menu-command.test.d.ts +0 -1
- package/dist-lib/components/composed/chat/__tests__/recommendation.test.d.ts +0 -1
- package/dist-lib/components/composed/tree/__tests__/tree-atom.test.d.ts +0 -1
- package/dist-lib/components/composed/tree/__tests__/tree.test.d.ts +0 -1
- package/dist-lib/components/composed/tree/__tests__/use-tree.test.d.ts +0 -1
- package/dist-lib/components/composed/user/__tests__/message.test.d.ts +0 -1
- package/dist-lib/components/composed/verse/__tests__/verse.test.d.ts +0 -1
- package/dist-lib/components/docs/atoms-gallery.d.ts +0 -12
- package/dist-lib/components/docs/block-demo-stage.d.ts +0 -7
- package/dist-lib/components/docs/blocks-gallery.d.ts +0 -2
- package/dist-lib/components/docs/browser.d.ts +0 -10
- package/dist-lib/components/docs/code-block.d.ts +0 -4
- package/dist-lib/components/docs/components-gallery.d.ts +0 -2
- package/dist-lib/components/docs/demo-controls.d.ts +0 -21
- package/dist-lib/components/docs/hero.d.ts +0 -5
- package/dist-lib/components/docs/mermaid.d.ts +0 -3
- package/dist-lib/components/icons/__tests__/icons.test.d.ts +0 -1
- package/dist-lib/components/stories/attachment.story.d.ts +0 -11
- package/dist-lib/components/stories/auth-flow-block.story.d.ts +0 -2
- package/dist-lib/components/stories/avatar.story.d.ts +0 -6
- package/dist-lib/components/stories/base.story.d.ts +0 -6
- package/dist-lib/components/stories/bubble.story.d.ts +0 -6
- package/dist-lib/components/stories/button.story.d.ts +0 -9
- package/dist-lib/components/stories/card.story.d.ts +0 -8
- package/dist-lib/components/stories/chart.story.d.ts +0 -71
- package/dist-lib/components/stories/checkbox.story.d.ts +0 -6
- package/dist-lib/components/stories/code-auth-block.story.d.ts +0 -2
- package/dist-lib/components/stories/code-block.story.d.ts +0 -12
- package/dist-lib/components/stories/composed-password-input.story.d.ts +0 -6
- package/dist-lib/components/stories/context-cards.story.d.ts +0 -3
- package/dist-lib/components/stories/emoji-action-bar.story.d.ts +0 -3
- package/dist-lib/components/stories/field.story.d.ts +0 -6
- package/dist-lib/components/stories/file-icons.story.d.ts +0 -5
- package/dist-lib/components/stories/filter-table.story.d.ts +0 -21
- package/dist-lib/components/stories/flowchart.story.d.ts +0 -3
- package/dist-lib/components/stories/forgot-password-block.story.d.ts +0 -2
- package/dist-lib/components/stories/frame.story.d.ts +0 -8
- package/dist-lib/components/stories/index.d.ts +0 -54
- package/dist-lib/components/stories/input-group.story.d.ts +0 -6
- package/dist-lib/components/stories/input.story.d.ts +0 -8
- package/dist-lib/components/stories/insight-cards.story.d.ts +0 -74
- package/dist-lib/components/stories/label.story.d.ts +0 -8
- package/dist-lib/components/stories/linked-accounts-block.story.d.ts +0 -2
- package/dist-lib/components/stories/login-block.story.d.ts +0 -2
- package/dist-lib/components/stories/logo.story.d.ts +0 -3
- package/dist-lib/components/stories/markdown.story.d.ts +0 -7
- package/dist-lib/components/stories/menu-command.story.d.ts +0 -13
- package/dist-lib/components/stories/onboarding-block.story.d.ts +0 -2
- package/dist-lib/components/stories/otp-field.story.d.ts +0 -8
- package/dist-lib/components/stories/passkey-manager-block.story.d.ts +0 -2
- package/dist-lib/components/stories/passkey-sign-in-block.story.d.ts +0 -2
- package/dist-lib/components/stories/password-input.story.d.ts +0 -9
- package/dist-lib/components/stories/profile-card-block.story.d.ts +0 -6
- package/dist-lib/components/stories/recommendation-card.story.d.ts +0 -3
- package/dist-lib/components/stories/records-table.story.d.ts +0 -23
- package/dist-lib/components/stories/reference.story.d.ts +0 -9
- package/dist-lib/components/stories/research-answer.story.d.ts +0 -10
- package/dist-lib/components/stories/scaffold-root.story.d.ts +0 -6
- package/dist-lib/components/stories/separator.story.d.ts +0 -6
- package/dist-lib/components/stories/shell-layout.story.d.ts +0 -2
- package/dist-lib/components/stories/signup-block.story.d.ts +0 -2
- package/dist-lib/components/stories/social-providers.story.d.ts +0 -3
- package/dist-lib/components/stories/streaming-text.story.d.ts +0 -3
- package/dist-lib/components/stories/text.story.d.ts +0 -8
- package/dist-lib/components/stories/textarea.story.d.ts +0 -6
- package/dist-lib/components/stories/tree.story.d.ts +0 -4
- package/dist-lib/components/stories/update-password-block.story.d.ts +0 -2
- package/dist-lib/components/stories/user.story.d.ts +0 -8
- package/dist-lib/components/stories/verse.story.d.ts +0 -6
- package/dist-lib/components/ui/chat/__tests__/segmented-toggle.test.d.ts +0 -1
- package/dist-lib/index.js.map +0 -1
- package/dist-lib/lib/state/__tests__/sound.test.d.ts +0 -1
- package/dist-lib/lib/utils.test.d.ts +0 -1
- package/src/assets/css/base.css +0 -62
- package/src/assets/css/chat.css +0 -229
- package/src/assets/css/shadows.css +0 -157
- package/src/assets/css/theme.css +0 -321
- package/src/components/AGENTS.md +0 -0
- package/src/components/atoms/_layout.tsx +0 -9
- package/src/components/atoms/avatar/base.tsx +0 -70
- package/src/components/atoms/avatar/index.ts +0 -10
- package/src/components/atoms/avatar/types.ts +0 -24
- package/src/components/atoms/avatar/utils.ts +0 -54
- package/src/components/atoms/avatar/verified.tsx +0 -16
- package/src/components/atoms/background/index.ts +0 -8
- package/src/components/atoms/background/texture.tsx +0 -29
- package/src/components/atoms/background/type.ts +0 -10
- package/src/components/atoms/background/utils.ts +0 -13
- package/src/components/atoms/bubble/__tests__/bubble.test.tsx +0 -193
- package/src/components/atoms/bubble/__tests__/reference.test.tsx +0 -25
- package/src/components/atoms/bubble/actions.tsx +0 -28
- package/src/components/atoms/bubble/context.ts +0 -11
- package/src/components/atoms/bubble/default.tsx +0 -46
- package/src/components/atoms/bubble/header.tsx +0 -36
- package/src/components/atoms/bubble/index.ts +0 -37
- package/src/components/atoms/bubble/message.tsx +0 -32
- package/src/components/atoms/bubble/reactions.tsx +0 -191
- package/src/components/atoms/bubble/types.ts +0 -82
- package/src/components/atoms/bubble/utils.ts +0 -46
- package/src/components/atoms/chip.tsx +0 -61
- package/src/components/atoms/field.tsx +0 -43
- package/src/components/atoms/index.ts +0 -26
- package/src/components/atoms/loader.tsx +0 -33
- package/src/components/atoms/reference.tsx +0 -41
- package/src/components/atoms/text/__tests__/text.test.tsx +0 -47
- package/src/components/atoms/text/default.tsx +0 -59
- package/src/components/atoms/text/heading.tsx +0 -58
- package/src/components/atoms/text/index.ts +0 -28
- package/src/components/atoms/text/label.tsx +0 -16
- package/src/components/atoms/text/paragraph.tsx +0 -55
- package/src/components/atoms/text/span.tsx +0 -14
- package/src/components/atoms/text/types.ts +0 -41
- package/src/components/atoms/text/utils.ts +0 -16
- package/src/components/atoms/text-selection/__tests__/click-popover.test.tsx +0 -61
- package/src/components/atoms/text-selection/__tests__/text-selection.test.tsx +0 -90
- package/src/components/atoms/text-selection/click-popover.tsx +0 -62
- package/src/components/atoms/text-selection/index.ts +0 -30
- package/src/components/atoms/text-selection/popover.tsx +0 -103
- package/src/components/atoms/text-selection/selection-atom.ts +0 -51
- package/src/components/atoms/text-selection/selection.tsx +0 -56
- package/src/components/atoms/text-selection/types.ts +0 -125
- package/src/components/atoms/text-selection/use-selection.ts +0 -84
- package/src/components/atoms/types.ts +0 -46
- package/src/components/blocks/.gitkeep +0 -0
- package/src/components/blocks/auth/__tests__/auth-flow-block.test.tsx +0 -183
- package/src/components/blocks/auth/__tests__/auth-state-atom.test.tsx +0 -247
- package/src/components/blocks/auth/__tests__/linked-accounts-block.test.tsx +0 -128
- package/src/components/blocks/auth/__tests__/onboarding-block.test.tsx +0 -183
- package/src/components/blocks/auth/__tests__/passkey-manager-block.test.tsx +0 -131
- package/src/components/blocks/auth/__tests__/passkey-sign-in-block.test.tsx +0 -59
- package/src/components/blocks/auth/__tests__/signup-block.test.tsx +0 -176
- package/src/components/blocks/auth/__tests__/update-password-block.test.tsx +0 -95
- package/src/components/blocks/auth/auth-flow-atom.ts +0 -238
- package/src/components/blocks/auth/auth-flow-block.tsx +0 -211
- package/src/components/blocks/auth/auth-session-atom.ts +0 -82
- package/src/components/blocks/auth/auth-shell.tsx +0 -265
- package/src/components/blocks/auth/auth-state.ts +0 -40
- package/src/components/blocks/auth/code-auth-block.tsx +0 -176
- package/src/components/blocks/auth/forgot-password-block.tsx +0 -112
- package/src/components/blocks/auth/linked-accounts-block.tsx +0 -203
- package/src/components/blocks/auth/login-block.tsx +0 -217
- package/src/components/blocks/auth/onboarding/profile-step.tsx +0 -216
- package/src/components/blocks/auth/onboarding-block.tsx +0 -183
- package/src/components/blocks/auth/passkey-manager-block.tsx +0 -316
- package/src/components/blocks/auth/passkey-sign-in-block.tsx +0 -67
- package/src/components/blocks/auth/signup-block.tsx +0 -256
- package/src/components/blocks/auth/type.ts +0 -436
- package/src/components/blocks/auth/update-password-block.tsx +0 -139
- package/src/components/blocks/auth/use-auth-state.ts +0 -127
- package/src/components/blocks/chat/__tests__/ai-panel.test.tsx +0 -65
- package/src/components/blocks/chat/banners.tsx +0 -61
- package/src/components/blocks/chat/base.tsx +0 -84
- package/src/components/blocks/chat/header.tsx +0 -60
- package/src/components/blocks/chat/index.ts +0 -37
- package/src/components/blocks/chat/recommendation-stack.tsx +0 -41
- package/src/components/blocks/chat/shared.tsx +0 -27
- package/src/components/blocks/chat/suggested-prompts.tsx +0 -45
- package/src/components/blocks/chat/type.ts +0 -96
- package/src/components/blocks/chat/version-history-record.tsx +0 -37
- package/src/components/blocks/layout.ts +0 -35
- package/src/components/blocks/profile/__tests__/profile-card-block.test.tsx +0 -362
- package/src/components/blocks/profile/index.ts +0 -28
- package/src/components/blocks/profile/profile-card-atom.ts +0 -247
- package/src/components/blocks/profile/profile-card-block.tsx +0 -369
- package/src/components/blocks/profile/type.ts +0 -93
- package/src/components/blocks/profile/use-profile-card-state.ts +0 -67
- package/src/components/blocks/profile/use-profile-card.ts +0 -132
- package/src/components/blocks/scaffold/__tests__/scaffold-atom.test.tsx +0 -236
- package/src/components/blocks/scaffold/__tests__/scaffold.test.tsx +0 -524
- package/src/components/blocks/scaffold/constants.ts +0 -39
- package/src/components/blocks/scaffold/index.ts +0 -60
- package/src/components/blocks/scaffold/panel-close-button.tsx +0 -36
- package/src/components/blocks/scaffold/panel-menu-button.tsx +0 -221
- package/src/components/blocks/scaffold/scaffold-actions.tsx +0 -92
- package/src/components/blocks/scaffold/scaffold-atom.ts +0 -427
- package/src/components/blocks/scaffold/scaffold-canvas.tsx +0 -162
- package/src/components/blocks/scaffold/scaffold-context.ts +0 -20
- package/src/components/blocks/scaffold/scaffold-inspector.tsx +0 -137
- package/src/components/blocks/scaffold/scaffold-main.tsx +0 -28
- package/src/components/blocks/scaffold/scaffold-panel.tsx +0 -186
- package/src/components/blocks/scaffold/scaffold-root.tsx +0 -120
- package/src/components/blocks/scaffold/scaffold-sidebar.tsx +0 -31
- package/src/components/blocks/scaffold/scaffold-sub-panel.tsx +0 -122
- package/src/components/blocks/scaffold/scaffold-tab.tsx +0 -108
- package/src/components/blocks/scaffold/type.ts +0 -264
- package/src/components/blocks/scaffold/use-scaffold-state.ts +0 -85
- package/src/components/blocks/scaffold/use-scaffold.ts +0 -59
- package/src/components/blocks/scaffold/utils.ts +0 -112
- package/src/components/blocks/shell/__tests__/shell-fit-atom.test.tsx +0 -362
- package/src/components/blocks/shell/__tests__/shell-layout.test.tsx +0 -596
- package/src/components/blocks/shell/__tests__/shell-metrics.test.ts +0 -154
- package/src/components/blocks/shell/animated-panel-inset.tsx +0 -27
- package/src/components/blocks/shell/animated-panel-provider.tsx +0 -269
- package/src/components/blocks/shell/animated-panel-trigger.tsx +0 -51
- package/src/components/blocks/shell/animated-panel.tsx +0 -180
- package/src/components/blocks/shell/index.ts +0 -30
- package/src/components/blocks/shell/shell-fit-atom.ts +0 -246
- package/src/components/blocks/shell/shell-layout.tsx +0 -139
- package/src/components/blocks/shell/shell-metrics.ts +0 -133
- package/src/components/blocks/shell/shell-panel-atom.ts +0 -74
- package/src/components/blocks/shell/type.ts +0 -361
- package/src/components/blocks/shell/use-shell-fit-state.ts +0 -49
- package/src/components/blocks/shell/use-shell-fit.ts +0 -153
- package/src/components/blocks/shell/use-shell-panels.ts +0 -126
- package/src/components/blocks/shell/utils.ts +0 -187
- package/src/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.tsx +0 -325
- package/src/components/blocks/sidebar/__tests__/ai-sidebar.test.tsx +0 -93
- package/src/components/blocks/sidebar/__tests__/use-ai-sidebar.test.tsx +0 -310
- package/src/components/blocks/sidebar/ai-sidebar-atom.ts +0 -698
- package/src/components/blocks/sidebar/ai-sidebar.tsx +0 -150
- package/src/components/blocks/sidebar/index.ts +0 -67
- package/src/components/blocks/sidebar/marquee-label.tsx +0 -59
- package/src/components/blocks/sidebar/sidebar-context.ts +0 -15
- package/src/components/blocks/sidebar/sidebar-icon.tsx +0 -14
- package/src/components/blocks/sidebar/sidebar-row.tsx +0 -378
- package/src/components/blocks/sidebar/type.ts +0 -294
- package/src/components/blocks/sidebar/use-ai-sidebar-state.ts +0 -123
- package/src/components/blocks/sidebar/use-ai-sidebar.ts +0 -619
- package/src/components/blocks/sidebar/utils.ts +0 -170
- package/src/components/blocks/types.ts +0 -6
- package/src/components/composed/.gitkeep +0 -0
- package/src/components/composed/__tests__/logo.test.tsx +0 -60
- package/src/components/composed/action-bar/__tests__/action-bar.test.tsx +0 -125
- package/src/components/composed/action-bar/action.tsx +0 -77
- package/src/components/composed/action-bar/emojis.tsx +0 -97
- package/src/components/composed/action-bar/index.ts +0 -24
- package/src/components/composed/action-bar/toolbar.tsx +0 -66
- package/src/components/composed/action-bar/types.ts +0 -58
- package/src/components/composed/action-bar/utils.ts +0 -140
- package/src/components/composed/ai/__tests__/ai.test.tsx +0 -66
- package/src/components/composed/ai/avatar.tsx +0 -19
- package/src/components/composed/ai/index.ts +0 -36
- package/src/components/composed/ai/message.tsx +0 -49
- package/src/components/composed/ai/research-answer.tsx +0 -157
- package/src/components/composed/ai/shared.tsx +0 -94
- package/src/components/composed/ai/streaming-text.tsx +0 -94
- package/src/components/composed/ai/suggested-prompt.tsx +0 -183
- package/src/components/composed/ai/types.ts +0 -81
- package/src/components/composed/chat/__tests__/attachment.test.tsx +0 -218
- package/src/components/composed/chat/__tests__/beautiful-ui.test.tsx +0 -57
- package/src/components/composed/chat/__tests__/chart.test.tsx +0 -316
- package/src/components/composed/chat/__tests__/code-block.test.tsx +0 -12
- package/src/components/composed/chat/__tests__/composer-attachments.test.tsx +0 -101
- package/src/components/composed/chat/__tests__/composer.test.tsx +0 -248
- package/src/components/composed/chat/__tests__/flowchart.test.tsx +0 -145
- package/src/components/composed/chat/__tests__/glass-material.test.tsx +0 -54
- package/src/components/composed/chat/__tests__/markdown.test.tsx +0 -25
- package/src/components/composed/chat/__tests__/menu-command.test.tsx +0 -35
- package/src/components/composed/chat/__tests__/recommendation.test.tsx +0 -43
- package/src/components/composed/chat/actions.tsx +0 -81
- package/src/components/composed/chat/attachment-file.ts +0 -82
- package/src/components/composed/chat/attachment.tsx +0 -498
- package/src/components/composed/chat/chart/chart-atom.ts +0 -55
- package/src/components/composed/chat/chart/chart-context.ts +0 -9
- package/src/components/composed/chat/chart/chart-legend.tsx +0 -75
- package/src/components/composed/chat/chart/chart-plot.tsx +0 -233
- package/src/components/composed/chat/chart/chart-root.tsx +0 -229
- package/src/components/composed/chat/chart/chart-tooltip.tsx +0 -74
- package/src/components/composed/chat/chart/constants.ts +0 -8
- package/src/components/composed/chat/chart/evilcharts/README.md +0 -8
- package/src/components/composed/chat/chart/evilcharts/echarts-area-chart.tsx +0 -2358
- package/src/components/composed/chat/chart/evilcharts/echarts-bar-chart.tsx +0 -2261
- package/src/components/composed/chat/chart/evilcharts/echarts-brush.tsx +0 -233
- package/src/components/composed/chat/chart/evilcharts/echarts-chart.tsx +0 -214
- package/src/components/composed/chat/chart/evilcharts/echarts-dot.tsx +0 -111
- package/src/components/composed/chat/chart/evilcharts/echarts-legend.tsx +0 -131
- package/src/components/composed/chat/chart/evilcharts/echarts-line-chart.tsx +0 -2112
- package/src/components/composed/chat/chart/evilcharts/echarts-pie-chart.tsx +0 -1235
- package/src/components/composed/chat/chart/evilcharts/echarts-tooltip.tsx +0 -125
- package/src/components/composed/chat/chart/index.ts +0 -13
- package/src/components/composed/chat/chart/type.ts +0 -88
- package/src/components/composed/chat/chart/use-chart-state.ts +0 -22
- package/src/components/composed/chat/chart/use-chart.ts +0 -70
- package/src/components/composed/chat/chart/utils.ts +0 -47
- package/src/components/composed/chat/chart.tsx +0 -3
- package/src/components/composed/chat/code-block.tsx +0 -123
- package/src/components/composed/chat/composer/add-button.tsx +0 -29
- package/src/components/composed/chat/composer/base.tsx +0 -573
- package/src/components/composed/chat/composer/command-menu.tsx +0 -47
- package/src/components/composed/chat/composer/hooks.ts +0 -29
- package/src/components/composed/chat/composer/index.ts +0 -19
- package/src/components/composed/chat/composer/send-button.tsx +0 -36
- package/src/components/composed/chat/composer/suggestions.tsx +0 -115
- package/src/components/composed/chat/composer/use-dictation.ts +0 -123
- package/src/components/composed/chat/composer/utils.ts +0 -74
- package/src/components/composed/chat/context-cards.tsx +0 -63
- package/src/components/composed/chat/filter-table.tsx +0 -119
- package/src/components/composed/chat/flowchart/chart-node.tsx +0 -162
- package/src/components/composed/chat/flowchart/connector.tsx +0 -32
- package/src/components/composed/chat/flowchart/constant.ts +0 -26
- package/src/components/composed/chat/flowchart/default.tsx +0 -230
- package/src/components/composed/chat/flowchart/edge-toolbar.tsx +0 -73
- package/src/components/composed/chat/flowchart/hooks.tsx +0 -347
- package/src/components/composed/chat/flowchart/index.ts +0 -14
- package/src/components/composed/chat/flowchart/step-body.tsx +0 -82
- package/src/components/composed/chat/flowchart/types.ts +0 -89
- package/src/components/composed/chat/flowchart/utils.ts +0 -78
- package/src/components/composed/chat/hint.tsx +0 -59
- package/src/components/composed/chat/index.ts +0 -92
- package/src/components/composed/chat/insight-cards.tsx +0 -199
- package/src/components/composed/chat/markdown-atom.ts +0 -15
- package/src/components/composed/chat/markdown.tsx +0 -213
- package/src/components/composed/chat/recommendation/checkbox.tsx +0 -122
- package/src/components/composed/chat/recommendation/constant.ts +0 -54
- package/src/components/composed/chat/recommendation/default.tsx +0 -25
- package/src/components/composed/chat/recommendation/group.tsx +0 -36
- package/src/components/composed/chat/recommendation/index.ts +0 -17
- package/src/components/composed/chat/recommendation/item.tsx +0 -215
- package/src/components/composed/chat/recommendation/types.ts +0 -76
- package/src/components/composed/chat/records-table.tsx +0 -130
- package/src/components/composed/chat/type.ts +0 -157
- package/src/components/composed/logo.tsx +0 -171
- package/src/components/composed/password-input.tsx +0 -179
- package/src/components/composed/reader/applied-mark.tsx +0 -32
- package/src/components/composed/reader/apply-toast.tsx +0 -49
- package/src/components/composed/reader/index.ts +0 -10
- package/src/components/composed/reader/selection-highlight.tsx +0 -26
- package/src/components/composed/reader/selection-popover.tsx +0 -149
- package/src/components/composed/reader/type.ts +0 -48
- package/src/components/composed/social-providers.tsx +0 -154
- package/src/components/composed/tree/CLAUDE.md +0 -145
- package/src/components/composed/tree/__tests__/tree-atom.test.tsx +0 -217
- package/src/components/composed/tree/__tests__/tree.test.tsx +0 -522
- package/src/components/composed/tree/__tests__/use-tree.test.tsx +0 -333
- package/src/components/composed/tree/constants.ts +0 -55
- package/src/components/composed/tree/index.ts +0 -51
- package/src/components/composed/tree/tree-atom.ts +0 -590
- package/src/components/composed/tree/tree-context.ts +0 -13
- package/src/components/composed/tree/tree-node.tsx +0 -496
- package/src/components/composed/tree/tree.tsx +0 -233
- package/src/components/composed/tree/type.ts +0 -322
- package/src/components/composed/tree/use-tree-dnd.ts +0 -179
- package/src/components/composed/tree/use-tree-state.ts +0 -105
- package/src/components/composed/tree/use-tree.ts +0 -311
- package/src/components/composed/tree/utils.ts +0 -172
- package/src/components/composed/types.ts +0 -9
- package/src/components/composed/user/__tests__/message.test.tsx +0 -79
- package/src/components/composed/user/index.ts +0 -14
- package/src/components/composed/user/info.tsx +0 -56
- package/src/components/composed/user/message.tsx +0 -36
- package/src/components/composed/user/pill.tsx +0 -20
- package/src/components/composed/user/types.ts +0 -47
- package/src/components/composed/user/utils.ts +0 -0
- package/src/components/composed/verse/__tests__/verse.test.tsx +0 -57
- package/src/components/composed/verse/index.ts +0 -2
- package/src/components/composed/verse/types.ts +0 -24
- package/src/components/composed/verse/verse.tsx +0 -100
- package/src/components/docs/atoms-gallery.tsx +0 -286
- package/src/components/docs/block-demo-stage.tsx +0 -38
- package/src/components/docs/blocks-gallery.tsx +0 -224
- package/src/components/docs/browser.tsx +0 -87
- package/src/components/docs/code-block.tsx +0 -10
- package/src/components/docs/components-gallery.tsx +0 -182
- package/src/components/docs/demo-controls.tsx +0 -142
- package/src/components/docs/hero.tsx +0 -197
- package/src/components/docs/mermaid.tsx +0 -55
- package/src/components/icons/README.md +0 -91
- package/src/components/icons/__tests__/icons.test.tsx +0 -58
- package/src/components/icons/file-badge-cfm.tsx +0 -615
- package/src/components/icons/file-badge-corpus.tsx +0 -604
- package/src/components/icons/file-badge-pdf.tsx +0 -570
- package/src/components/icons/file-badge-tei.tsx +0 -524
- package/src/components/icons/file-badge-tf.tsx +0 -620
- package/src/components/icons/file-badge-txt.tsx +0 -607
- package/src/components/icons/file-badge-xml.tsx +0 -576
- package/src/components/icons/file-wordmark-cfm.tsx +0 -424
- package/src/components/icons/file-wordmark-corpus.tsx +0 -454
- package/src/components/icons/file-wordmark-pdf.tsx +0 -470
- package/src/components/icons/file-wordmark-tei.tsx +0 -424
- package/src/components/icons/file-wordmark-tf.tsx +0 -406
- package/src/components/icons/file-wordmark-txt.tsx +0 -421
- package/src/components/icons/file-wordmark-xml.tsx +0 -424
- package/src/components/icons/index.ts +0 -16
- package/src/components/icons/types.ts +0 -8
- package/src/components/motion/index.ts +0 -0
- package/src/components/motion/overflow-actions.tsx +0 -376
- package/src/components/motion/popover-morph.tsx +0 -292
- package/src/components/motion/popover-position.ts +0 -86
- package/src/components/motion/shared-layout-bg.tsx +0 -151
- package/src/components/stories/attachment.story.tsx +0 -40
- package/src/components/stories/auth-flow-block.story.tsx +0 -17
- package/src/components/stories/avatar.story.tsx +0 -33
- package/src/components/stories/base.story.tsx +0 -70
- package/src/components/stories/bubble.story.tsx +0 -61
- package/src/components/stories/button.story.tsx +0 -32
- package/src/components/stories/card.story.tsx +0 -36
- package/src/components/stories/chart.story.tsx +0 -69
- package/src/components/stories/checkbox.story.tsx +0 -30
- package/src/components/stories/code-auth-block.story.tsx +0 -20
- package/src/components/stories/code-block.story.tsx +0 -35
- package/src/components/stories/composed-password-input.story.tsx +0 -41
- package/src/components/stories/context-cards.story.tsx +0 -30
- package/src/components/stories/emoji-action-bar.story.tsx +0 -20
- package/src/components/stories/field.story.tsx +0 -32
- package/src/components/stories/file-icons.story.tsx +0 -20
- package/src/components/stories/filter-table.story.tsx +0 -63
- package/src/components/stories/flowchart.story.tsx +0 -25
- package/src/components/stories/forgot-password-block.story.tsx +0 -14
- package/src/components/stories/frame.story.tsx +0 -32
- package/src/components/stories/index.ts +0 -57
- package/src/components/stories/input-group.story.tsx +0 -27
- package/src/components/stories/input.story.tsx +0 -42
- package/src/components/stories/insight-cards.story.tsx +0 -67
- package/src/components/stories/label.story.tsx +0 -32
- package/src/components/stories/linked-accounts-block.story.tsx +0 -23
- package/src/components/stories/login-block.story.tsx +0 -18
- package/src/components/stories/logo.story.tsx +0 -21
- package/src/components/stories/markdown.story.tsx +0 -31
- package/src/components/stories/menu-command.story.tsx +0 -43
- package/src/components/stories/onboarding-block.story.tsx +0 -14
- package/src/components/stories/otp-field.story.tsx +0 -35
- package/src/components/stories/passkey-manager-block.story.tsx +0 -18
- package/src/components/stories/passkey-sign-in-block.story.tsx +0 -15
- package/src/components/stories/password-input.story.tsx +0 -35
- package/src/components/stories/profile-card-block.story.tsx +0 -29
- package/src/components/stories/recommendation-card.story.tsx +0 -37
- package/src/components/stories/records-table.story.tsx +0 -52
- package/src/components/stories/reference.story.tsx +0 -33
- package/src/components/stories/research-answer.story.tsx +0 -32
- package/src/components/stories/scaffold-root.story.tsx +0 -47
- package/src/components/stories/separator.story.tsx +0 -37
- package/src/components/stories/shell-layout.story.tsx +0 -19
- package/src/components/stories/signup-block.story.tsx +0 -18
- package/src/components/stories/social-providers.story.tsx +0 -26
- package/src/components/stories/streaming-text.story.tsx +0 -25
- package/src/components/stories/text.story.tsx +0 -31
- package/src/components/stories/textarea.story.tsx +0 -34
- package/src/components/stories/tree.story.tsx +0 -31
- package/src/components/stories/update-password-block.story.tsx +0 -14
- package/src/components/stories/user.story.tsx +0 -32
- package/src/components/stories/verse.story.tsx +0 -42
- package/src/components/theme-provider.tsx +0 -230
- package/src/components/types.ts +0 -106
- package/src/components/ui/accordion.tsx +0 -68
- package/src/components/ui/alert-dialog.tsx +0 -167
- package/src/components/ui/alert.tsx +0 -84
- package/src/components/ui/autocomplete.tsx +0 -303
- package/src/components/ui/avatar.tsx +0 -109
- package/src/components/ui/badge.tsx +0 -101
- package/src/components/ui/button-group.tsx +0 -88
- package/src/components/ui/button.tsx +0 -192
- package/src/components/ui/card.tsx +0 -253
- package/src/components/ui/chat/__tests__/segmented-toggle.test.tsx +0 -27
- package/src/components/ui/chat/avatar-handle.tsx +0 -30
- package/src/components/ui/chat/badges.tsx +0 -85
- package/src/components/ui/chat/buttons.tsx +0 -94
- package/src/components/ui/chat/chips.tsx +0 -106
- package/src/components/ui/chat/dot.tsx +0 -81
- package/src/components/ui/chat/icon-button.tsx +0 -43
- package/src/components/ui/chat/icon-tile.tsx +0 -33
- package/src/components/ui/chat/index.ts +0 -12
- package/src/components/ui/chat/inline-source.tsx +0 -94
- package/src/components/ui/chat/segmented-toggle.tsx +0 -99
- package/src/components/ui/chat/tag.tsx +0 -61
- package/src/components/ui/chat/thumbnail.tsx +0 -31
- package/src/components/ui/chat/waveform.tsx +0 -30
- package/src/components/ui/checkbox.tsx +0 -83
- package/src/components/ui/collapsible.tsx +0 -42
- package/src/components/ui/command.tsx +0 -263
- package/src/components/ui/context-menu.tsx +0 -342
- package/src/components/ui/emoji-picker.tsx +0 -161
- package/src/components/ui/field.tsx +0 -89
- package/src/components/ui/frame.tsx +0 -87
- package/src/components/ui/glasscn/glass-button-group.tsx +0 -34
- package/src/components/ui/glasscn/glass-button.tsx +0 -25
- package/src/components/ui/glasscn/glass-container.tsx +0 -94
- package/src/components/ui/glasscn/glass-separator.tsx +0 -39
- package/src/components/ui/glasscn/liquid-glass.tsx +0 -59
- package/src/components/ui/group.tsx +0 -92
- package/src/components/ui/input-group.tsx +0 -105
- package/src/components/ui/input.tsx +0 -70
- package/src/components/ui/kbd.tsx +0 -32
- package/src/components/ui/label.tsx +0 -36
- package/src/components/ui/menu-command.tsx +0 -156
- package/src/components/ui/menu.tsx +0 -352
- package/src/components/ui/otp-field.tsx +0 -88
- package/src/components/ui/popover-glass.tsx +0 -158
- package/src/components/ui/popover.tsx +0 -120
- package/src/components/ui/preview-card.tsx +0 -61
- package/src/components/ui/scroll-area.tsx +0 -80
- package/src/components/ui/select.tsx +0 -257
- package/src/components/ui/separator.tsx +0 -23
- package/src/components/ui/sheet.tsx +0 -135
- package/src/components/ui/skeleton.tsx +0 -18
- package/src/components/ui/spinner.tsx +0 -17
- package/src/components/ui/switch.tsx +0 -30
- package/src/components/ui/tabs.tsx +0 -120
- package/src/components/ui/textarea.tsx +0 -58
- package/src/components/ui/toast.tsx +0 -325
- package/src/components/ui/toolbar.tsx +0 -92
- package/src/components/ui/tooltip.tsx +0 -67
- package/src/index.css +0 -10
- package/src/index.ts +0 -102
- package/src/lib/attachment-content.ts +0 -28
- package/src/lib/auth-accent.ts +0 -49
- package/src/lib/ease.ts +0 -90
- package/src/lib/glass-variants.ts +0 -22
- package/src/lib/hooks/use-hover-capable.ts +0 -23
- package/src/lib/hooks/use-mobile.ts +0 -21
- package/src/lib/keyed-atom.ts +0 -60
- package/src/lib/segmented-control.ts +0 -42
- package/src/lib/sound.ts +0 -39
- package/src/lib/specular.ts +0 -10
- package/src/lib/state/__tests__/sound.test.tsx +0 -53
- package/src/lib/state/exegia-provider.tsx +0 -83
- package/src/lib/state/index.ts +0 -4
- package/src/lib/state/store.ts +0 -19
- package/src/lib/use-motion-panel.ts +0 -78
- package/src/lib/utils.test.ts +0 -22
- package/src/lib/utils.ts +0 -100
- package/src/specular.js +0 -4
- /package/{src/components/composed/chat/composer → dist-lib}/BEAUTIFUL-UI-LICENSE.txt +0 -0
- /package/{src/components/composed/chat/chart/evilcharts/LICENSE → dist-lib/EVILCHARTS-LICENSE.txt} +0 -0
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
import type { ReactNode, RefObject } from "react"
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
type ButtonHTMLAttributes,
|
|
5
|
-
type CSSProperties,
|
|
6
|
-
type HTMLAttributes,
|
|
7
|
-
} from "react"
|
|
8
|
-
import type { HTMLMotionProps } from "motion/react"
|
|
9
|
-
|
|
10
|
-
import type { IShellMetrics, IShellSidebarFit } from "./shell-metrics"
|
|
11
|
-
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// Shell fit — the shell's measurement of itself, kept in Jotai atoms keyed by
|
|
14
|
-
// `shellId` (see `shell-fit-atom.ts`). No atom imports here: this file stays
|
|
15
|
-
// dependency-free so the types can travel without the store.
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
|
|
18
|
-
/** The key a shell's fit state is filed under. Pass your own to reach it from
|
|
19
|
-
* anywhere (`useShellFitState("app-shell")`); leave it out and the provider
|
|
20
|
-
* generates one that dies with it. */
|
|
21
|
-
export type TShellFitInstanceId = string
|
|
22
|
-
|
|
23
|
-
/** The range a secondary-panel resize may land in, in px. */
|
|
24
|
-
export interface IShellFitPanelBounds {
|
|
25
|
-
min: number
|
|
26
|
-
max: number
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** What the shell measured of itself — readable by id through
|
|
30
|
-
* `useShellFitState`. */
|
|
31
|
-
export interface IShellFitState {
|
|
32
|
-
/** Actual rail layout after applying container constraints. */
|
|
33
|
-
sidebar: IShellSidebarFit | null
|
|
34
|
-
/** The px the shell last measured, or null before its first measurement
|
|
35
|
-
* (a server render, a host with no layout). */
|
|
36
|
-
metrics: IShellMetrics | null
|
|
37
|
-
/** Whether the shell can hold a secondary panel. True while unmeasured, so
|
|
38
|
-
* a panel never flickers out over a reading that has not happened yet. */
|
|
39
|
-
fits: boolean
|
|
40
|
-
/** The secondary panel's width in px, already clamped to `bounds` — null
|
|
41
|
-
* before the first measurement, where the panel falls back to
|
|
42
|
-
* `--panel-width`. */
|
|
43
|
-
panelWidth: number | null
|
|
44
|
-
/** The range a resize may land in. */
|
|
45
|
-
bounds: IShellFitPanelBounds
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Writes only — drive a shell's secondary panel by id through
|
|
49
|
-
* `useShellFitActions` without re-rendering when it moves. */
|
|
50
|
-
export interface IShellFitActions {
|
|
51
|
-
/** Resize the secondary panel. Clamped on the way in, so a drag past the
|
|
52
|
-
* gutter parks at the bound instead of banking travel it has to give back. */
|
|
53
|
-
resizePanel: (width: number) => void
|
|
54
|
-
/** Back to the width the shell mounted with — `defaultPanelWidth`, or
|
|
55
|
-
* `--panel-width` when there was none. */
|
|
56
|
-
resetPanelWidth: () => void
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/** What `useShellFit` hands the provider: the state, the actions and the id
|
|
60
|
-
* they are filed under. */
|
|
61
|
-
export interface IShellFitController extends IShellFitState, IShellFitActions {
|
|
62
|
-
defaultPanelWidth: number | null
|
|
63
|
-
shellId: TShellFitInstanceId
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export interface IUseShellFitOptions {
|
|
67
|
-
/** File the fit under this id so it can be read elsewhere and outlive the
|
|
68
|
-
* shell. Generated (and dropped on unmount) when omitted. */
|
|
69
|
-
shellId?: TShellFitInstanceId
|
|
70
|
-
/** The element the shell's CSS variables live on (the provider wrapper). */
|
|
71
|
-
hostRef: RefObject<HTMLElement | null>
|
|
72
|
-
/** Whether the left rail is expanded right now — a render input, so a fold
|
|
73
|
-
* counts the moment React commits it rather than a frame later when the
|
|
74
|
-
* width animation has moved. */
|
|
75
|
-
railOpen: boolean
|
|
76
|
-
/** The width the secondary panel opens at, in px, instead of
|
|
77
|
-
* `--panel-width`. Read once, on mount. */
|
|
78
|
-
defaultPanelWidth?: number
|
|
79
|
-
/** Fired whenever a measurement lands on "no room": the shell uses it to
|
|
80
|
-
* retire the panel's open state instead of parking it. */
|
|
81
|
-
onUnfit?: () => void
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/** @internal What an instance starts from, restored by `resetShellPanelWidthAtom`. */
|
|
85
|
-
export interface IShellFitSeed {
|
|
86
|
-
/** The requested panel width at mount — null for `--panel-width`. */
|
|
87
|
-
panelWidth: number | null
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface IShellAction {
|
|
91
|
-
id: string
|
|
92
|
-
label: string
|
|
93
|
-
icon: ReactNode
|
|
94
|
-
badge?: ReactNode
|
|
95
|
-
onSelect?: () => void
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export interface IShellWorkspace {
|
|
99
|
-
name: string
|
|
100
|
-
logo?: ReactNode
|
|
101
|
-
meta?: ReactNode
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export interface IPanel {
|
|
105
|
-
id: string
|
|
106
|
-
name: string
|
|
107
|
-
component: ReactNode
|
|
108
|
-
/** Replaces the default icon inside the panel's header trigger. The shell
|
|
109
|
-
* keeps the trigger button itself (toggle wiring, aria-label) — this only
|
|
110
|
-
* swaps what renders inside it. */
|
|
111
|
-
trigger?: ReactNode
|
|
112
|
-
open: boolean
|
|
113
|
-
defaultOpen?: boolean
|
|
114
|
-
side: "left" | "bottom" | "right" | "sidebar"
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** The side a panel docks to, as a value union (`IPanel["side"]`).
|
|
118
|
-
* `Pick<IPanel, "side">` would be the object type `{ side: ... }`, which can
|
|
119
|
-
* neither key a Record nor travel as a plain callback argument. */
|
|
120
|
-
export type TPanelSide = IPanel["side"]
|
|
121
|
-
|
|
122
|
-
/** Panel content keyed by the side it docks to. `Side` narrows the map to
|
|
123
|
-
* the sides a surface actually renders (the shell renders left and right).
|
|
124
|
-
* Entries are optional — a shell with no bottom dock simply has no `bottom`
|
|
125
|
-
* key. Where an entry's own `side` field disagrees with its key, the key
|
|
126
|
-
* wins. */
|
|
127
|
-
export type TPanelMap<Side extends TPanelSide = TPanelSide> = Partial<
|
|
128
|
-
Record<Side, IPanel>
|
|
129
|
-
>
|
|
130
|
-
|
|
131
|
-
/** Dynamic panel content keyed by side — filled by
|
|
132
|
-
* `useShellPanels().openPanel(side, component)` and read by ShellLayout,
|
|
133
|
-
* where a side's entry wins over the static `panels` map's `component`. */
|
|
134
|
-
export type TSidebarComponentMap = Partial<Record<TSidebarSide, ReactNode>>
|
|
135
|
-
|
|
136
|
-
/** The open/close surface of the shell's panels, lifted straight from
|
|
137
|
-
* AnimatedPanelProvider — every prop is keyed by side, there are no
|
|
138
|
-
* explicit per-side props. `useShellPanels` produces the controlled subset
|
|
139
|
-
* of these as `providerProps`. */
|
|
140
|
-
export type TShellPanelControlProps = Pick<
|
|
141
|
-
IAnimatedSidebarProviderProps,
|
|
142
|
-
| "open"
|
|
143
|
-
| "defaultOpen"
|
|
144
|
-
| "onOpenChange"
|
|
145
|
-
| "openMobile"
|
|
146
|
-
| "defaultOpenMobile"
|
|
147
|
-
| "onOpenMobileChange"
|
|
148
|
-
| "shellId"
|
|
149
|
-
| "defaultPanelWidth"
|
|
150
|
-
| "panelComponents"
|
|
151
|
-
>
|
|
152
|
-
|
|
153
|
-
export interface IUseShellPanelsOptions {
|
|
154
|
-
/** The id the shell's fit state is filed under. Name it to read the same
|
|
155
|
-
* shell from elsewhere (`useShellFitState("app-shell")`) and to keep a
|
|
156
|
-
* dragged panel width across a route change; otherwise the hook generates
|
|
157
|
-
* one that dies with it. */
|
|
158
|
-
shellId?: TShellFitInstanceId
|
|
159
|
-
/** Initial desktop open state per side, merged over
|
|
160
|
-
* `{ left: true, right: false }`. */
|
|
161
|
-
defaultOpen?: IAnimatedSidebarProviderProps["defaultOpen"]
|
|
162
|
-
/** Initial mobile overlay state per side — every side starts closed. */
|
|
163
|
-
defaultOpenMobile?: IAnimatedSidebarProviderProps["defaultOpenMobile"]
|
|
164
|
-
/** The width the secondary panel opens at, in px, instead of
|
|
165
|
-
* `--panel-width`. */
|
|
166
|
-
defaultPanelWidth?: number
|
|
167
|
-
/** Panel change event returning both the next open state and the side of
|
|
168
|
-
* the panel the change comes from. Mobile overlay changes report the same
|
|
169
|
-
* side as their desktop counterpart. */
|
|
170
|
-
onPanelChange?: (open: boolean, side: TPanelSide) => void
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export interface IShellPanelControls {
|
|
174
|
-
/** Rendered rail width and whether it can expand in the current container. */
|
|
175
|
-
sidebar: IShellSidebarFit | null
|
|
176
|
-
sidebarWidth: number | null
|
|
177
|
-
resizeSidebar: (width: number) => void
|
|
178
|
-
/** The id the shell's fit state is filed under — hand it to
|
|
179
|
-
* `useShellFitState` / `useShellFitActions` anywhere below `ExegiaProvider`. */
|
|
180
|
-
shellId: TShellFitInstanceId
|
|
181
|
-
/** The viewport cannot hold the secondary panel beside the rail and the
|
|
182
|
-
* body at their floors, so the shell has dropped the right panel and its
|
|
183
|
-
* trigger — UI outside the shell should stand down with them. Read straight
|
|
184
|
-
* out of the shell's fit atoms; it is only ever `true` once the shell is
|
|
185
|
-
* mounted and measured. */
|
|
186
|
-
isNarrow: boolean
|
|
187
|
-
/** The secondary panel's current width in px, or null until the shell has
|
|
188
|
-
* measured itself (the panel then sits at `--panel-width`). */
|
|
189
|
-
panelWidth: number | null
|
|
190
|
-
/** Resize the secondary panel from outside the shell — clamped to the room
|
|
191
|
-
* the shell has. */
|
|
192
|
-
resizePanel: (width: number) => void
|
|
193
|
-
/** Requested open state. `sidebar` reports the responsive rail layout. */
|
|
194
|
-
open: Record<TSidebarSide, boolean>
|
|
195
|
-
/** Live mobile overlay state, keyed by side. */
|
|
196
|
-
openMobile: Record<TSidebarSide, boolean>
|
|
197
|
-
/** Refuses to OPEN the right panel while `isNarrow` — there is nothing on
|
|
198
|
-
* screen to open. Closing it always goes through. */
|
|
199
|
-
setOpen: (open: boolean, side: TSidebarSide) => void
|
|
200
|
-
setOpenMobile: (open: boolean, side: TSidebarSide) => void
|
|
201
|
-
/** Desktop-only convenience — the in-shell triggers already pick the
|
|
202
|
-
* mobile state themselves when the viewport is narrow. Carries the same
|
|
203
|
-
* `isNarrow` refusal as `setOpen`. */
|
|
204
|
-
toggle: (side: TSidebarSide) => void
|
|
205
|
-
/** Open a side's panel and, when given, swap in the content it shows.
|
|
206
|
-
* The component travels through `providerProps.panelComponents` into
|
|
207
|
-
* ShellLayout, where it wins over the static `panels` entry for that
|
|
208
|
-
* side, and sticks until the next `openPanel(side, component)` replaces
|
|
209
|
-
* it — closing the panel leaves it in place for the exit animation and
|
|
210
|
-
* the next open. Carries the same `isNarrow` refusal as `setOpen`. */
|
|
211
|
-
openPanel: (side: TSidebarSide, component?: ReactNode) => void
|
|
212
|
-
/** Spread onto ShellLayout (or AnimatedPanelProvider directly). */
|
|
213
|
-
providerProps: TShellPanelControlProps
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
export interface IShellLayoutProps extends TShellPanelControlProps {
|
|
217
|
-
children?: ReactNode
|
|
218
|
-
/** Content for the shell's panels, keyed by the side. The shell renders
|
|
219
|
-
* the `left` rail and the `right` drawer; other sides are reserved. */
|
|
220
|
-
panels?: TPanelMap
|
|
221
|
-
header?: ReactNode
|
|
222
|
-
/** Actions pinned to the header's right edge, rendered just before the
|
|
223
|
-
* right panel's trigger. The cluster hugs the trailing edge no matter
|
|
224
|
-
* which of `header` / the left rail / the right panel are present. */
|
|
225
|
-
trailing?: ReactNode
|
|
226
|
-
className?: string
|
|
227
|
-
variant?: "web" | "desktop"
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export type TSidebarSide = "left" | "right"
|
|
231
|
-
/** Open flags keyed by the side. Sides left out stay uncontrolled / at their
|
|
232
|
-
* default — there is no per-side prop, the record IS the API. */
|
|
233
|
-
export type TSidebarOpenState = Partial<Record<TSidebarSide, boolean>>
|
|
234
|
-
export type TSidebarVariant = "sidebar" | "floating" | "inset"
|
|
235
|
-
export type TSidebarCollapsible = "offcanvas" | "icon" | "none"
|
|
236
|
-
|
|
237
|
-
export interface IAnimatedSidebarContextValue {
|
|
238
|
-
isMobile: boolean
|
|
239
|
-
/** What the shell measured of itself: whether it can hold a secondary panel
|
|
240
|
-
* at all, how wide that panel is, and the range a resize may land in. The
|
|
241
|
-
* right panel and its trigger stand down when `fit.fits` is false. */
|
|
242
|
-
fit: IShellFitController
|
|
243
|
-
layoutId: string
|
|
244
|
-
/** Desktop open state, keyed by side. */
|
|
245
|
-
open: Record<TSidebarSide, boolean>
|
|
246
|
-
/** Mobile overlay open state, keyed by side. */
|
|
247
|
-
openMobile: Record<TSidebarSide, boolean>
|
|
248
|
-
reduce: boolean
|
|
249
|
-
setOpen: (open: boolean, side: TSidebarSide) => void
|
|
250
|
-
setOpenMobile: (open: boolean, side: TSidebarSide) => void
|
|
251
|
-
/** Toggle the docked panel when the container can accommodate it. */
|
|
252
|
-
toggleSidebar: (side: TSidebarSide) => void
|
|
253
|
-
triggerRefs: Record<TSidebarSide, React.RefObject<HTMLButtonElement | null>>
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
export interface IAnimatedSidebarProviderProps extends HTMLAttributes<HTMLDivElement> {
|
|
257
|
-
/** The id this shell's fit state (whether a secondary panel fits, how wide
|
|
258
|
-
* it is) is filed under in the store. Name it to read or drive the shell
|
|
259
|
-
* from elsewhere and to keep a dragged width across a route change; omit it
|
|
260
|
-
* and the provider generates one that is dropped on unmount. */
|
|
261
|
-
shellId?: TShellFitInstanceId
|
|
262
|
-
/** The width the secondary panel opens at, in px, instead of
|
|
263
|
-
* `--panel-width`. Read once, on mount. */
|
|
264
|
-
defaultPanelWidth?: number
|
|
265
|
-
/** Controlled desktop open state, keyed by the side. A side left undefined
|
|
266
|
-
* stays uncontrolled. */
|
|
267
|
-
open?: TSidebarOpenState
|
|
268
|
-
/** Initial desktop open state, merged over `{ left: true, right: false }`. */
|
|
269
|
-
defaultOpen?: TSidebarOpenState
|
|
270
|
-
onOpenChange?: (open: boolean, side: TSidebarSide) => void
|
|
271
|
-
/** Controlled mobile overlay state, keyed by side. */
|
|
272
|
-
openMobile?: TSidebarOpenState
|
|
273
|
-
/** Initial mobile overlay state — every side starts closed. */
|
|
274
|
-
defaultOpenMobile?: TSidebarOpenState
|
|
275
|
-
onOpenMobileChange?: (open: boolean, side: TSidebarSide) => void
|
|
276
|
-
/** Content pushed into a side's panel by `useShellPanels().openPanel`. It
|
|
277
|
-
* rides along in `providerProps` so the record can be spread on either
|
|
278
|
-
* surface: ShellLayout renders it in that side's panel; the bare provider
|
|
279
|
-
* renders no panels, so it only swallows the prop to keep it off the DOM. */
|
|
280
|
-
panelComponents?: TSidebarComponentMap
|
|
281
|
-
/** Fires when the shell crosses the width a secondary panel needs (rail +
|
|
282
|
-
* body + panel at their floors). An imperative escape hatch for a consumer
|
|
283
|
-
* that mounts the provider on its own; anything under `ExegiaProvider` can
|
|
284
|
-
* subscribe by id instead with `useShellFitState(shellId).fits`. */
|
|
285
|
-
onNarrowChange?: (isNarrow: boolean) => void
|
|
286
|
-
style?: TSidebarProviderStyle
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
export type TSidebarProviderStyle = CSSProperties & {
|
|
290
|
-
/** Left rail, expanded. */
|
|
291
|
-
"--sidebar-width"?: string
|
|
292
|
-
/** Minimum expanded rail width before it folds to icons. Default 180px. */
|
|
293
|
-
"--sidebar-min-width"?: string
|
|
294
|
-
/** Left rail, folded to icons. */
|
|
295
|
-
"--sidebar-width-icon"?: string
|
|
296
|
-
"--sidebar-width-mobile"?: string
|
|
297
|
-
/** The secondary panel's floor, and the width it opens at. */
|
|
298
|
-
"--panel-width"?: string
|
|
299
|
-
/** The body's floor — the secondary panel may never squeeze it past this. */
|
|
300
|
-
"--inset-min-width"?: string
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export type TAnimatedSidebarInsetProps = HTMLMotionProps<"main">
|
|
304
|
-
|
|
305
|
-
export interface IAnimatedSidebarTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
306
|
-
side?: TSidebarSide
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
export interface IAnimatedSidebarPanelContextValue {
|
|
310
|
-
collapsed: boolean
|
|
311
|
-
collapsible: TSidebarCollapsible
|
|
312
|
-
side: TSidebarSide
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
export interface IAnimatedSidebarProps extends Omit<
|
|
316
|
-
HTMLMotionProps<"aside">,
|
|
317
|
-
"children"
|
|
318
|
-
> {
|
|
319
|
-
children?: ReactNode
|
|
320
|
-
side?: TSidebarSide
|
|
321
|
-
variant?: TSidebarVariant
|
|
322
|
-
collapsible?: TSidebarCollapsible
|
|
323
|
-
ariaLabel?: string
|
|
324
|
-
panelClassName?: string
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
export interface IAnimatedSidebarMenuSubProps extends Omit<
|
|
328
|
-
HTMLMotionProps<"ul">,
|
|
329
|
-
"children"
|
|
330
|
-
> {
|
|
331
|
-
open: boolean
|
|
332
|
-
children?: ReactNode
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
export interface IAnimatedSidebarMenuSubButtonProps {
|
|
336
|
-
children: ReactNode
|
|
337
|
-
icon?: ReactNode
|
|
338
|
-
href?: string
|
|
339
|
-
isActive?: boolean
|
|
340
|
-
disabled?: boolean
|
|
341
|
-
closeOnSelect?: boolean
|
|
342
|
-
target?: "_blank" | "_self" | "_parent" | "_top"
|
|
343
|
-
rel?: string
|
|
344
|
-
onSelect?: () => void
|
|
345
|
-
className?: string
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
export interface IAnimatedSidebarMenuButtonProps {
|
|
349
|
-
children: ReactNode
|
|
350
|
-
icon?: ReactNode
|
|
351
|
-
badge?: ReactNode
|
|
352
|
-
href?: string
|
|
353
|
-
isActive?: boolean
|
|
354
|
-
ariaExpanded?: boolean
|
|
355
|
-
disabled?: boolean
|
|
356
|
-
closeOnSelect?: boolean
|
|
357
|
-
target?: "_blank" | "_self" | "_parent" | "_top"
|
|
358
|
-
rel?: string
|
|
359
|
-
onSelect?: () => void
|
|
360
|
-
className?: string
|
|
361
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { useMemo } from "react"
|
|
4
|
-
import { useAtomValueRawSync, useSetAtom } from "jotai"
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
resetShellPanelWidthAtom,
|
|
8
|
-
resizeShellPanelAtom,
|
|
9
|
-
shellFitStateAtom,
|
|
10
|
-
} from "./shell-fit-atom"
|
|
11
|
-
import type { IShellFitActions, TShellFitInstanceId, IShellFitState } from "./type"
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Read the fit of the shell registered under `shellId` from anywhere below
|
|
15
|
-
* `ExegiaProvider` — no controller, no props, no provider of its own.
|
|
16
|
-
*
|
|
17
|
-
* ```tsx
|
|
18
|
-
* const { fits, panelWidth } = useShellFitState("app-shell")
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* This returns the whole state object, so the caller re-renders on every
|
|
22
|
-
* measurement. A component that reads one field should subscribe to that
|
|
23
|
-
* field's atom instead: `useAtomValue(shellFitFitsAtom("app-shell"))`.
|
|
24
|
-
*/
|
|
25
|
-
export function useShellFitState(shellId: TShellFitInstanceId): IShellFitState {
|
|
26
|
-
return useAtomValueRawSync(shellFitStateAtom(shellId))
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Drive the secondary panel of the shell registered under `shellId` from
|
|
31
|
-
* anywhere. Writes only — the caller never re-renders when the shell moves,
|
|
32
|
-
* so this is what a command palette or a keyboard shortcut should reach for.
|
|
33
|
-
*
|
|
34
|
-
* ```tsx
|
|
35
|
-
* const shell = useShellFitActions("app-shell")
|
|
36
|
-
* <Button onClick={() => shell.resizePanel(480)}>Wide inspector</Button>
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export function useShellFitActions(
|
|
40
|
-
shellId: TShellFitInstanceId
|
|
41
|
-
): IShellFitActions {
|
|
42
|
-
const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
|
|
43
|
-
const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))
|
|
44
|
-
|
|
45
|
-
return useMemo(
|
|
46
|
-
() => ({ resizePanel, resetPanelWidth }),
|
|
47
|
-
[resizePanel, resetPanelWidth]
|
|
48
|
-
)
|
|
49
|
-
}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { useEffect, useId, useMemo, useRef, useState } from "react"
|
|
4
|
-
import { useAtomValueRawSync, useSetAtom } from "jotai"
|
|
5
|
-
import { useIsomorphicLayoutEffect } from "motion/react"
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
measureShellFitAtom,
|
|
9
|
-
mountShellFitAtom,
|
|
10
|
-
removeShellFitInstance,
|
|
11
|
-
resetShellPanelWidthAtom,
|
|
12
|
-
resizeShellPanelAtom,
|
|
13
|
-
shellFitStateAtom,
|
|
14
|
-
} from "./shell-fit-atom"
|
|
15
|
-
import { fitsPanel, fitSidebar, type IShellMetrics } from "./shell-metrics"
|
|
16
|
-
import type {
|
|
17
|
-
IShellFitController,
|
|
18
|
-
IShellFitSeed,
|
|
19
|
-
IUseShellFitOptions,
|
|
20
|
-
} from "./type"
|
|
21
|
-
import { shellPanelAtoms } from "./shell-panel-atom"
|
|
22
|
-
import { resolveLength } from "./utils"
|
|
23
|
-
|
|
24
|
-
/** Read the shell's columns out of the DOM. The widths come from CSS
|
|
25
|
-
* variables; the rail's share comes from its own state, not its box, so a
|
|
26
|
-
* fold counts the moment React commits it rather than a frame later when the
|
|
27
|
-
* width animation has moved. */
|
|
28
|
-
function readMetrics(host: HTMLElement, railOpen: boolean): IShellMetrics {
|
|
29
|
-
// Whether a shell has a rail at all is the caller's composition, so it is
|
|
30
|
-
// read off the DOM rather than tracked in state.
|
|
31
|
-
const rail = host.querySelector<HTMLElement>(
|
|
32
|
-
'[data-slot="sidebar"][data-side="left"]'
|
|
33
|
-
)
|
|
34
|
-
const frame = getComputedStyle(host)
|
|
35
|
-
const gap = Number.parseFloat(frame.columnGap) || 0
|
|
36
|
-
const padding =
|
|
37
|
-
(Number.parseFloat(frame.paddingLeft) || 0) +
|
|
38
|
-
(Number.parseFloat(frame.paddingRight) || 0)
|
|
39
|
-
const width = host.clientWidth || host.getBoundingClientRect().width
|
|
40
|
-
const insetMin = resolveLength(host, "var(--inset-min-width)")
|
|
41
|
-
const sidebar = fitSidebar({
|
|
42
|
-
width,
|
|
43
|
-
padding,
|
|
44
|
-
gap,
|
|
45
|
-
insetMin,
|
|
46
|
-
expanded: resolveLength(host, "var(--sidebar-width)") || 256,
|
|
47
|
-
icon: resolveLength(host, "var(--sidebar-width-icon)") || 56,
|
|
48
|
-
minimum: resolveLength(host, "var(--sidebar-min-width)") || 180,
|
|
49
|
-
open: railOpen,
|
|
50
|
-
collapsible: rail?.dataset.collapsible ?? "icon",
|
|
51
|
-
present: Boolean(rail),
|
|
52
|
-
})
|
|
53
|
-
return {
|
|
54
|
-
rail: sidebar.width,
|
|
55
|
-
sidebar,
|
|
56
|
-
insetMin,
|
|
57
|
-
panelMin: resolveLength(host, "var(--panel-width)"),
|
|
58
|
-
viewport: width,
|
|
59
|
-
// Measure the space a prospective inspector needs, even while absent.
|
|
60
|
-
chrome: padding + gap * (sidebar.width > 0 ? 2 : 1),
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Measures the shell and decides what the secondary panel may do: whether it
|
|
66
|
-
* exists at all, and how wide it may be dragged.
|
|
67
|
-
*
|
|
68
|
-
* Container resizing, rail folding, and user resizing are observed here,
|
|
69
|
-
* so embedded shells obey the same bounds as full-page layouts. The measurement is
|
|
70
|
-
* the only thing this hook keeps to itself: the numbers land in the shell-fit
|
|
71
|
-
* atoms keyed by `shellId`, so anything under `ExegiaProvider` can read the
|
|
72
|
-
* verdict (`useShellFitState`) or move the panel (`useShellFitActions`)
|
|
73
|
-
* without holding this controller.
|
|
74
|
-
*/
|
|
75
|
-
export function useShellFit({
|
|
76
|
-
shellId: explicitId,
|
|
77
|
-
hostRef,
|
|
78
|
-
railOpen,
|
|
79
|
-
defaultPanelWidth,
|
|
80
|
-
onUnfit,
|
|
81
|
-
}: IUseShellFitOptions): IShellFitController {
|
|
82
|
-
// A generated key isolates unnamed shells from each other; an explicit
|
|
83
|
-
// `shellId` is the app's handle on this one.
|
|
84
|
-
const generatedId = useId()
|
|
85
|
-
const shellId = explicitId ?? generatedId
|
|
86
|
-
const railWidth = useAtomValueRawSync(shellPanelAtoms(shellId).railWidth)
|
|
87
|
-
|
|
88
|
-
// Read once: `defaultPanelWidth` describes the mount, not every render.
|
|
89
|
-
const [seed] = useState<IShellFitSeed>(() => ({
|
|
90
|
-
panelWidth: defaultPanelWidth ?? null,
|
|
91
|
-
}))
|
|
92
|
-
|
|
93
|
-
const mount = useSetAtom(mountShellFitAtom(shellId))
|
|
94
|
-
const measure = useSetAtom(measureShellFitAtom(shellId))
|
|
95
|
-
const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
|
|
96
|
-
const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))
|
|
97
|
-
|
|
98
|
-
// Before paint, and before the first measurement below, so a seeded width
|
|
99
|
-
// is in the store by the time the panel first reads its width.
|
|
100
|
-
useIsomorphicLayoutEffect(() => {
|
|
101
|
-
mount(seed)
|
|
102
|
-
}, [mount, seed])
|
|
103
|
-
|
|
104
|
-
// The listener below is bound once per fold, so the callback rides a ref
|
|
105
|
-
// rather than rebinding it whenever a consumer passes a fresh arrow.
|
|
106
|
-
const onUnfitRef = useRef(onUnfit)
|
|
107
|
-
useIsomorphicLayoutEffect(() => {
|
|
108
|
-
onUnfitRef.current = onUnfit
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
useIsomorphicLayoutEffect(() => {
|
|
112
|
-
const host = hostRef.current
|
|
113
|
-
if (!host) return
|
|
114
|
-
|
|
115
|
-
const takeMeasurement = () => {
|
|
116
|
-
const next = readMetrics(host, railOpen)
|
|
117
|
-
measure(next)
|
|
118
|
-
if (!fitsPanel(next)) onUnfitRef.current?.()
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Observe the host, including changes from a split view or surrounding
|
|
122
|
-
// navigation that never trigger a window resize.
|
|
123
|
-
takeMeasurement()
|
|
124
|
-
const observer = new ResizeObserver(takeMeasurement)
|
|
125
|
-
observer.observe(host)
|
|
126
|
-
window.addEventListener("resize", takeMeasurement)
|
|
127
|
-
return () => {
|
|
128
|
-
observer.disconnect()
|
|
129
|
-
window.removeEventListener("resize", takeMeasurement)
|
|
130
|
-
}
|
|
131
|
-
}, [hostRef, railOpen, railWidth, measure])
|
|
132
|
-
|
|
133
|
-
// A shell the hook keyed is scrap once its component goes. An explicit
|
|
134
|
-
// `shellId` is the app's key and outlives the mount — that is what lets a
|
|
135
|
-
// dragged width survive a route change.
|
|
136
|
-
useEffect(() => {
|
|
137
|
-
if (explicitId !== undefined) return
|
|
138
|
-
return () => removeShellFitInstance(shellId)
|
|
139
|
-
}, [shellId, explicitId])
|
|
140
|
-
|
|
141
|
-
const state = useAtomValueRawSync(shellFitStateAtom(shellId))
|
|
142
|
-
|
|
143
|
-
return useMemo<IShellFitController>(
|
|
144
|
-
() => ({
|
|
145
|
-
shellId,
|
|
146
|
-
...state,
|
|
147
|
-
defaultPanelWidth: seed.panelWidth,
|
|
148
|
-
resizePanel,
|
|
149
|
-
resetPanelWidth,
|
|
150
|
-
}),
|
|
151
|
-
[shellId, state, seed.panelWidth, resizePanel, resetPanelWidth]
|
|
152
|
-
)
|
|
153
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useId, useMemo } from "react"
|
|
4
|
-
import type { ReactNode } from "react"
|
|
5
|
-
import { shellPanelAtoms } from "./shell-panel-atom"
|
|
6
|
-
import { useAtomValueRawSync, useSetAtom } from "jotai"
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
removeShellFitInstance,
|
|
10
|
-
resizeShellPanelAtom,
|
|
11
|
-
shellFitFitsAtom,
|
|
12
|
-
shellFitStateAtom,
|
|
13
|
-
shellFitPanelWidthAtom,
|
|
14
|
-
} from "./shell-fit-atom"
|
|
15
|
-
import type {
|
|
16
|
-
TShellPanelControlProps,
|
|
17
|
-
IShellPanelControls,
|
|
18
|
-
TSidebarSide,
|
|
19
|
-
IUseShellPanelsOptions,
|
|
20
|
-
} from "./type"
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Owns the open/close state of the shell's panels, keyed by side, and
|
|
24
|
-
* reports every change through a single `onPanelChange(open, side)`
|
|
25
|
-
* callback. Spread the returned `providerProps` onto ShellLayout; the
|
|
26
|
-
* setters and `toggle` are for UI that lives outside the shell (title-bar
|
|
27
|
-
* buttons, command palette, shortcuts).
|
|
28
|
-
*
|
|
29
|
-
* The way back down is the store: `providerProps` carries a `shellId`, the
|
|
30
|
-
* shell files its measurement under it, and this hook reads `isNarrow` and
|
|
31
|
-
* `panelWidth` straight out of those atoms — so outside UI stands down with
|
|
32
|
-
* the panel instead of measuring `--sidebar-width` a second time. Name the
|
|
33
|
-
* `shellId` and any component below `ExegiaProvider` can do the same with
|
|
34
|
-
* `useShellFitState(shellId)`.
|
|
35
|
-
*
|
|
36
|
-
* Call it under the same `ExegiaProvider` as the shell it drives (or under
|
|
37
|
-
* none at all, on both sides): mounted above the provider it would read
|
|
38
|
-
* Jotai's default store while the shell writes to the provider's.
|
|
39
|
-
*/
|
|
40
|
-
export function useShellPanels({
|
|
41
|
-
shellId: explicitId,
|
|
42
|
-
defaultOpen,
|
|
43
|
-
defaultOpenMobile,
|
|
44
|
-
defaultPanelWidth,
|
|
45
|
-
onPanelChange,
|
|
46
|
-
}: IUseShellPanelsOptions = {}): IShellPanelControls {
|
|
47
|
-
// The hook, not the provider, keys the shell: it renders above the provider
|
|
48
|
-
// and has to read the same atoms the provider writes. Whoever generates the
|
|
49
|
-
// key drops it — the provider treats a passed-in id as the app's and leaves
|
|
50
|
-
// it alone on unmount.
|
|
51
|
-
const generatedId = useId()
|
|
52
|
-
const shellId = explicitId ?? generatedId
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (explicitId !== undefined) return
|
|
55
|
-
return () => removeShellFitInstance(shellId)
|
|
56
|
-
}, [shellId, explicitId])
|
|
57
|
-
|
|
58
|
-
const atoms = shellPanelAtoms(shellId)
|
|
59
|
-
const sidebarWidth = useAtomValueRawSync(atoms.railWidth)
|
|
60
|
-
const resizeSidebar = useSetAtom(atoms.resizeSidebar)
|
|
61
|
-
const open = useAtomValueRawSync(atoms.open)
|
|
62
|
-
const openMobile = useAtomValueRawSync(atoms.mobile)
|
|
63
|
-
const setOpen = useSetAtom(atoms.setOpen)
|
|
64
|
-
const setOpenMobile = useSetAtom(atoms.setOpenMobile)
|
|
65
|
-
const toggle = useSetAtom(atoms.toggle)
|
|
66
|
-
const panelComponents = useAtomValueRawSync(atoms.components)
|
|
67
|
-
const setPanelComponents = useSetAtom(atoms.components)
|
|
68
|
-
|
|
69
|
-
// Reads false until the shell has measured itself — an unmeasured shell
|
|
70
|
-
// fails open, so nothing out here stands down over a reading that has not
|
|
71
|
-
// happened yet.
|
|
72
|
-
const fits = useAtomValueRawSync(shellFitFitsAtom(shellId))
|
|
73
|
-
const isNarrow = !fits
|
|
74
|
-
const { sidebar } = useAtomValueRawSync(shellFitStateAtom(shellId))
|
|
75
|
-
const panelWidth = useAtomValueRawSync(shellFitPanelWidthAtom(shellId))
|
|
76
|
-
const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
|
|
77
|
-
|
|
78
|
-
const openPanel = useCallback(
|
|
79
|
-
(side: TSidebarSide, component?: ReactNode) => {
|
|
80
|
-
if (component !== undefined) {
|
|
81
|
-
setPanelComponents((prev) =>
|
|
82
|
-
prev[side] === component ? prev : { ...prev, [side]: component }
|
|
83
|
-
)
|
|
84
|
-
}
|
|
85
|
-
setOpen(true, side)
|
|
86
|
-
},
|
|
87
|
-
[setOpen, setPanelComponents]
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
const providerProps = useMemo<TShellPanelControlProps>(
|
|
91
|
-
() => ({
|
|
92
|
-
shellId,
|
|
93
|
-
defaultPanelWidth,
|
|
94
|
-
defaultOpen,
|
|
95
|
-
defaultOpenMobile,
|
|
96
|
-
onOpenChange: onPanelChange,
|
|
97
|
-
onOpenMobileChange: onPanelChange,
|
|
98
|
-
panelComponents,
|
|
99
|
-
}),
|
|
100
|
-
[
|
|
101
|
-
shellId,
|
|
102
|
-
defaultPanelWidth,
|
|
103
|
-
defaultOpen,
|
|
104
|
-
defaultOpenMobile,
|
|
105
|
-
onPanelChange,
|
|
106
|
-
panelComponents,
|
|
107
|
-
]
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
shellId,
|
|
112
|
-
sidebar,
|
|
113
|
-
sidebarWidth,
|
|
114
|
-
resizeSidebar,
|
|
115
|
-
isNarrow,
|
|
116
|
-
panelWidth,
|
|
117
|
-
resizePanel,
|
|
118
|
-
open,
|
|
119
|
-
openMobile,
|
|
120
|
-
setOpen,
|
|
121
|
-
setOpenMobile,
|
|
122
|
-
toggle,
|
|
123
|
-
openPanel,
|
|
124
|
-
providerProps,
|
|
125
|
-
}
|
|
126
|
-
}
|