@exegia/corpora-ui 3.0.0 → 3.1.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/button-CIRkQXA6.js +152 -0
- package/dist-lib/button.js +3 -0
- package/dist-lib/card.js +150 -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/ui/badge.d.ts +2 -2
- package/dist-lib/components/ui/button.d.ts +2 -2
- package/dist-lib/components/ui/glasscn/lazy-glass-surface.d.ts +6 -0
- package/dist-lib/components/ui/modal.d.ts +10 -0
- package/dist-lib/components/ui/overlays.d.ts +4 -0
- package/dist-lib/components/ui/select.d.ts +1 -1
- package/dist-lib/components/ui/toast.d.ts +2 -0
- package/dist-lib/ease-C9At8rnB.js +120 -0
- package/dist-lib/exegia-provider-DNTuLljX.js +124 -0
- package/dist-lib/index.css +3 -0
- package/dist-lib/index.d.ts +3 -0
- package/dist-lib/index.js +6482 -8894
- 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-BihU6nMl.js +50 -0
- package/dist-lib/modal-DLaOK-s1.js +82 -0
- package/dist-lib/overlays.js +3 -0
- package/dist-lib/rolldown-runtime-Dy4uBu1J.js +11 -0
- package/dist-lib/scaffold-Qv4hs5Pf.js +925 -0
- package/dist-lib/scaffold.js +2 -0
- package/dist-lib/shell-BQ9cjIEu.js +722 -0
- package/dist-lib/shell.js +2 -0
- package/dist-lib/sound-knGH4lj-.js +19 -0
- package/dist-lib/state.js +2 -0
- package/dist-lib/toast-CataVXHN.js +193 -0
- package/dist-lib/utils-BO0qfoA6.js +61 -0
- package/package.json +64 -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,427 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scaffold state — Jotai atom families keyed by a scaffold id.
|
|
3
|
-
*
|
|
4
|
-
* Same layout as the tree (`components/composed/tree/tree-atom.ts`), the
|
|
5
|
-
* shell (`blocks/shell/shell-fit-atom.ts`) and the profile card: in-house
|
|
6
|
-
* `keyed()` families per field, write-only action atoms, a composed
|
|
7
|
-
* read-only state atom, and `removeScaffoldInstance` to drop an id from
|
|
8
|
-
* every family.
|
|
9
|
-
*
|
|
10
|
-
* The visibility bookkeeping (`visibleOrder` / `autoHidden` / `userHidden`)
|
|
11
|
-
* stays one atom on purpose — `reconcileVisibility` always settles the three
|
|
12
|
-
* lists together, so splitting them would only invite half-written states.
|
|
13
|
-
* The reconcile rule itself lives in `utils.ts`, and every action that moves
|
|
14
|
-
* an input (ids, capacity, a toggle) settles the visibility before it
|
|
15
|
-
* returns, so readers never see an interim state — the render-time settling
|
|
16
|
-
* the old `usePanelVisibility` hook needed has no equivalent here.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import type { IScaffoldPanelLayout } from "./type"
|
|
20
|
-
import { atom } from "jotai"
|
|
21
|
-
import type { Atom, Getter, Setter } from "jotai"
|
|
22
|
-
|
|
23
|
-
import { SCAFFOLD_PANEL_CAPACITY } from "./constants"
|
|
24
|
-
import type {
|
|
25
|
-
IScaffoldConfig,
|
|
26
|
-
IScaffoldHandlers,
|
|
27
|
-
TScaffoldInstanceId,
|
|
28
|
-
IScaffoldPanelVisibility,
|
|
29
|
-
IScaffoldState,
|
|
30
|
-
} from "./type"
|
|
31
|
-
import {
|
|
32
|
-
EMPTY_SCAFFOLD_VISIBILITY,
|
|
33
|
-
getPanelCapacity,
|
|
34
|
-
reconcileVisibility,
|
|
35
|
-
} from "./utils"
|
|
36
|
-
|
|
37
|
-
const DEFAULT_CONFIG: IScaffoldConfig = { controlsInspector: false }
|
|
38
|
-
const NO_HANDLERS: IScaffoldHandlers = {}
|
|
39
|
-
const NO_PANEL_IDS: readonly string[] = []
|
|
40
|
-
|
|
41
|
-
// ── families ───────────────────────────────────────────────────────────────
|
|
42
|
-
|
|
43
|
-
type TFamily<AtomType> = ((id: TScaffoldInstanceId) => AtomType) & {
|
|
44
|
-
remove: (id: TScaffoldInstanceId) => void
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const families: { remove: (id: TScaffoldInstanceId) => void }[] = []
|
|
48
|
-
|
|
49
|
-
function keyed<AtomType>(create: (id: TScaffoldInstanceId) => AtomType) {
|
|
50
|
-
const cache = new Map<TScaffoldInstanceId, AtomType>()
|
|
51
|
-
const family = ((id: TScaffoldInstanceId) => {
|
|
52
|
-
let instance = cache.get(id)
|
|
53
|
-
if (instance === undefined) {
|
|
54
|
-
instance = create(id)
|
|
55
|
-
cache.set(id, instance)
|
|
56
|
-
}
|
|
57
|
-
return instance
|
|
58
|
-
}) as TFamily<AtomType>
|
|
59
|
-
family.remove = (id: TScaffoldInstanceId) => {
|
|
60
|
-
cache.delete(id)
|
|
61
|
-
}
|
|
62
|
-
families.push(family)
|
|
63
|
-
return family
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function stateFamily<Value>(name: string, initialValue: Value) {
|
|
67
|
-
return keyed((id) => {
|
|
68
|
-
const instance = atom(initialValue)
|
|
69
|
-
instance.debugLabel = `scaffold/${id}/${name}`
|
|
70
|
-
return instance
|
|
71
|
-
})
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function readFamily<Value>(
|
|
75
|
-
name: string,
|
|
76
|
-
read: (get: Getter, id: TScaffoldInstanceId) => Value
|
|
77
|
-
) {
|
|
78
|
-
return keyed((id) => {
|
|
79
|
-
const instance = atom((get) => read(get, id))
|
|
80
|
-
instance.debugLabel = `scaffold/${id}/${name}`
|
|
81
|
-
return instance
|
|
82
|
-
})
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function actionFamily<Args extends unknown[]>(
|
|
86
|
-
name: string,
|
|
87
|
-
write: (
|
|
88
|
-
get: Getter,
|
|
89
|
-
set: Setter,
|
|
90
|
-
id: TScaffoldInstanceId,
|
|
91
|
-
...args: Args
|
|
92
|
-
) => void
|
|
93
|
-
) {
|
|
94
|
-
return keyed((id) => {
|
|
95
|
-
const instance = atom(null, (get, set, ...args: Args) =>
|
|
96
|
-
write(get, set, id, ...args)
|
|
97
|
-
)
|
|
98
|
-
instance.debugLabel = `scaffold/${id}/${name}`
|
|
99
|
-
return instance
|
|
100
|
-
})
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** A family keyed by scaffold AND panel, so a tab or a panel subscribes to
|
|
104
|
-
* its own boolean and sits still when a sibling's changes — the per-node
|
|
105
|
-
* rule from the tree, at panel scale. Removal drops a whole scaffold. */
|
|
106
|
-
function panelFamily<Value>(
|
|
107
|
-
name: string,
|
|
108
|
-
read: (get: Getter, id: TScaffoldInstanceId, panelId: string) => Value
|
|
109
|
-
) {
|
|
110
|
-
const cache = new Map<TScaffoldInstanceId, Map<string, Atom<Value>>>()
|
|
111
|
-
const family = (id: TScaffoldInstanceId, panelId: string): Atom<Value> => {
|
|
112
|
-
let panels = cache.get(id)
|
|
113
|
-
if (panels === undefined) {
|
|
114
|
-
panels = new Map()
|
|
115
|
-
cache.set(id, panels)
|
|
116
|
-
}
|
|
117
|
-
let instance = panels.get(panelId)
|
|
118
|
-
if (instance === undefined) {
|
|
119
|
-
const created = atom((get) => read(get, id, panelId))
|
|
120
|
-
created.debugLabel = `scaffold/${id}/${panelId}/${name}`
|
|
121
|
-
panels.set(panelId, created)
|
|
122
|
-
instance = created
|
|
123
|
-
}
|
|
124
|
-
return instance
|
|
125
|
-
}
|
|
126
|
-
families.push({
|
|
127
|
-
remove: (id: TScaffoldInstanceId) => {
|
|
128
|
-
cache.delete(id)
|
|
129
|
-
},
|
|
130
|
-
})
|
|
131
|
-
return family
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// ── primitives ─────────────────────────────────────────────────────────────
|
|
135
|
-
|
|
136
|
-
export const scaffoldInspectorOpenAtom = stateFamily<boolean>(
|
|
137
|
-
"inspectorOpen",
|
|
138
|
-
false
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
/** @internal The canvas's ordered panel ids, as registered each render. */
|
|
142
|
-
export const scaffoldPanelIdsAtom = stateFamily<readonly string[]>(
|
|
143
|
-
"panelIds",
|
|
144
|
-
NO_PANEL_IDS
|
|
145
|
-
)
|
|
146
|
-
|
|
147
|
-
/** @internal The capacity derived from the canvas's measured width — the
|
|
148
|
-
* derived number is stored, not the raw width, so resize storms only touch
|
|
149
|
-
* the store when a panel actually gains or loses room. */
|
|
150
|
-
export const scaffoldMeasuredCapacityAtom = stateFamily<number | null>(
|
|
151
|
-
"measuredCapacity",
|
|
152
|
-
null
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
/** @internal The three visibility lists, settled as one value. */
|
|
156
|
-
export const scaffoldVisibilityAtom = stateFamily<IScaffoldPanelVisibility>(
|
|
157
|
-
"visibility",
|
|
158
|
-
EMPTY_SCAFFOLD_VISIBILITY
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
export const scaffoldHoveredPanelIdAtom = stateFamily<string | null>(
|
|
162
|
-
"hoveredPanelId",
|
|
163
|
-
null
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
/** @internal */
|
|
167
|
-
export const scaffoldConfigAtom = stateFamily<IScaffoldConfig>(
|
|
168
|
-
"config",
|
|
169
|
-
DEFAULT_CONFIG
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
/** @internal */
|
|
173
|
-
export const scaffoldHandlersAtom = stateFamily<IScaffoldHandlers>(
|
|
174
|
-
"handlers",
|
|
175
|
-
NO_HANDLERS
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
// ── derived ────────────────────────────────────────────────────────────────
|
|
179
|
-
|
|
180
|
-
/** How many panels fit side by side; the cap while the canvas is unmeasured. */
|
|
181
|
-
export const scaffoldPanelCapacityAtom = readFamily(
|
|
182
|
-
"panelCapacity",
|
|
183
|
-
(get, id) => get(scaffoldMeasuredCapacityAtom(id)) ?? SCAFFOLD_PANEL_CAPACITY
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
/** Ids of panels currently hidden (auto + user), for tabs to reflect. */
|
|
187
|
-
export const scaffoldHiddenPanelIdsAtom = readFamily<readonly string[]>(
|
|
188
|
-
"hiddenPanelIds",
|
|
189
|
-
(get, id) => {
|
|
190
|
-
const visibility = get(scaffoldVisibilityAtom(id))
|
|
191
|
-
return [...visibility.autoHidden, ...visibility.userHidden]
|
|
192
|
-
}
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
/** Whether one panel is hidden. A tab subscribes here and sits still while
|
|
196
|
-
* its siblings toggle. Empty `panelId` (a tab without one) reads false. */
|
|
197
|
-
export const scaffoldPanelHiddenAtom = panelFamily(
|
|
198
|
-
"hidden",
|
|
199
|
-
(get, id, panelId) => {
|
|
200
|
-
if (panelId === "") return false
|
|
201
|
-
const visibility = get(scaffoldVisibilityAtom(id))
|
|
202
|
-
return (
|
|
203
|
-
visibility.autoHidden.includes(panelId) ||
|
|
204
|
-
visibility.userHidden.includes(panelId)
|
|
205
|
-
)
|
|
206
|
-
}
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
/** Whether one panel fades back while another panel's tab holds the
|
|
210
|
-
* spotlight. Moving the hover between two tabs re-renders those panels
|
|
211
|
-
* only — everyone else's boolean holds. */
|
|
212
|
-
export const scaffoldPanelDimmedAtom = panelFamily(
|
|
213
|
-
"dimmed",
|
|
214
|
-
(get, id, panelId) => {
|
|
215
|
-
if (panelId === "") return false
|
|
216
|
-
const hovered = get(scaffoldHoveredPanelIdAtom(id))
|
|
217
|
-
return hovered !== null && hovered !== panelId
|
|
218
|
-
}
|
|
219
|
-
)
|
|
220
|
-
|
|
221
|
-
export const scaffoldPanelLayoutsAtom = stateFamily<
|
|
222
|
-
Record<string, IScaffoldPanelLayout>
|
|
223
|
-
>("panel-layouts", {})
|
|
224
|
-
export const scaffoldActiveResizeAtom = stateFamily<string | null>(
|
|
225
|
-
"active-resize",
|
|
226
|
-
null
|
|
227
|
-
)
|
|
228
|
-
export const scaffoldInspectorWidthAtom = stateFamily<number | null>(
|
|
229
|
-
"inspector-width",
|
|
230
|
-
null
|
|
231
|
-
)
|
|
232
|
-
export const resizeScaffoldInspectorAtom = actionFamily<[number]>(
|
|
233
|
-
"resize-inspector",
|
|
234
|
-
(_get, set, id, width) => {
|
|
235
|
-
if (Number.isFinite(width))
|
|
236
|
-
set(scaffoldInspectorWidthAtom(id), Math.max(180, width))
|
|
237
|
-
}
|
|
238
|
-
)
|
|
239
|
-
export const updateScaffoldPanelLayoutAtom = actionFamily<
|
|
240
|
-
[string, Partial<IScaffoldPanelLayout>]
|
|
241
|
-
>("update-panel-layout", (get, set, id, panelId, patch) => {
|
|
242
|
-
const layouts = get(scaffoldPanelLayoutsAtom(id))
|
|
243
|
-
const safe = { ...patch }
|
|
244
|
-
if (safe.width !== undefined && Number.isFinite(safe.width))
|
|
245
|
-
set(scaffoldActiveResizeAtom(id), panelId)
|
|
246
|
-
if (safe.width !== undefined)
|
|
247
|
-
safe.width = Number.isFinite(safe.width)
|
|
248
|
-
? Math.max(320, safe.width)
|
|
249
|
-
: undefined
|
|
250
|
-
if (safe.secondarySize !== undefined)
|
|
251
|
-
safe.secondarySize = Number.isFinite(safe.secondarySize)
|
|
252
|
-
? Math.max(56, safe.secondarySize)
|
|
253
|
-
: undefined
|
|
254
|
-
set(scaffoldPanelLayoutsAtom(id), {
|
|
255
|
-
...layouts,
|
|
256
|
-
[panelId]: { ...layouts[panelId], ...safe },
|
|
257
|
-
})
|
|
258
|
-
})
|
|
259
|
-
|
|
260
|
-
/** The whole state of one scaffold. This changes on every hover move, so a
|
|
261
|
-
* component that reads one field should subscribe to that field's atom
|
|
262
|
-
* instead: `useAtomValue(scaffoldInspectorOpenAtom("workspace"))`. */
|
|
263
|
-
export const scaffoldStateAtom = readFamily<IScaffoldState>(
|
|
264
|
-
"state",
|
|
265
|
-
(get, id) => ({
|
|
266
|
-
inspectorOpen: get(scaffoldInspectorOpenAtom(id)),
|
|
267
|
-
inspectorWidth: get(scaffoldInspectorWidthAtom(id)),
|
|
268
|
-
panelLayouts: get(scaffoldPanelLayoutsAtom(id)),
|
|
269
|
-
panelCapacity: get(scaffoldPanelCapacityAtom(id)),
|
|
270
|
-
hiddenPanelIds: get(scaffoldHiddenPanelIdsAtom(id)),
|
|
271
|
-
hoveredPanelId: get(scaffoldHoveredPanelIdAtom(id)),
|
|
272
|
-
})
|
|
273
|
-
)
|
|
274
|
-
|
|
275
|
-
// ── visibility settling ────────────────────────────────────────────────────
|
|
276
|
-
|
|
277
|
-
/** Re-settle the lists after any input moved. Inert when nothing changes —
|
|
278
|
-
* `reconcileVisibility` returns `prev` untouched then. */
|
|
279
|
-
function settleVisibility(get: Getter, set: Setter, id: TScaffoldInstanceId) {
|
|
280
|
-
const prev = get(scaffoldVisibilityAtom(id))
|
|
281
|
-
const settled = reconcileVisibility(
|
|
282
|
-
prev,
|
|
283
|
-
get(scaffoldPanelIdsAtom(id)),
|
|
284
|
-
get(scaffoldPanelCapacityAtom(id))
|
|
285
|
-
)
|
|
286
|
-
if (settled !== prev) set(scaffoldVisibilityAtom(id), settled)
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// ── actions: inspector ─────────────────────────────────────────────────────
|
|
290
|
-
|
|
291
|
-
/** Reports through `onInspectorOpenChange` always; writes the store only
|
|
292
|
-
* when no `inspectorOpen` prop controls the root — the prop is truth then. */
|
|
293
|
-
export const setScaffoldInspectorOpenAtom = actionFamily<[open: boolean]>(
|
|
294
|
-
"setInspectorOpen",
|
|
295
|
-
(get, set, id, open) => {
|
|
296
|
-
if (get(scaffoldInspectorOpenAtom(id)) === open) return
|
|
297
|
-
if (!get(scaffoldConfigAtom(id)).controlsInspector)
|
|
298
|
-
set(scaffoldInspectorOpenAtom(id), open)
|
|
299
|
-
get(scaffoldHandlersAtom(id)).onInspectorOpenChange?.(open)
|
|
300
|
-
}
|
|
301
|
-
)
|
|
302
|
-
|
|
303
|
-
export const toggleScaffoldInspectorAtom = actionFamily<[]>(
|
|
304
|
-
"toggleInspector",
|
|
305
|
-
(get, set, id) => {
|
|
306
|
-
set(setScaffoldInspectorOpenAtom(id), !get(scaffoldInspectorOpenAtom(id)))
|
|
307
|
-
}
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
// ── actions: panels ────────────────────────────────────────────────────────
|
|
311
|
-
|
|
312
|
-
/** Show/hide an id'd panel. Showing past capacity auto-hides the
|
|
313
|
-
* least-recently-activated visible panel; the last visible one never hides. */
|
|
314
|
-
export const toggleScaffoldPanelAtom = actionFamily<[panelId: string]>(
|
|
315
|
-
"togglePanel",
|
|
316
|
-
(get, set, id, panelId) => {
|
|
317
|
-
const ids = get(scaffoldPanelIdsAtom(id))
|
|
318
|
-
if (!ids.includes(panelId)) return
|
|
319
|
-
const prev = get(scaffoldVisibilityAtom(id))
|
|
320
|
-
const hidden =
|
|
321
|
-
prev.autoHidden.includes(panelId) || prev.userHidden.includes(panelId)
|
|
322
|
-
if (!hidden && prev.visibleOrder.length <= 1) return
|
|
323
|
-
|
|
324
|
-
const next: IScaffoldPanelVisibility = hidden
|
|
325
|
-
? {
|
|
326
|
-
// Showing: newest activation — reconcile evicts the oldest
|
|
327
|
-
// visible panel if the canvas can't fit one more.
|
|
328
|
-
visibleOrder: [...prev.visibleOrder, panelId],
|
|
329
|
-
autoHidden: prev.autoHidden.filter((other) => other !== panelId),
|
|
330
|
-
userHidden: prev.userHidden.filter((other) => other !== panelId),
|
|
331
|
-
}
|
|
332
|
-
: {
|
|
333
|
-
visibleOrder: prev.visibleOrder.filter((other) => other !== panelId),
|
|
334
|
-
autoHidden: prev.autoHidden,
|
|
335
|
-
userHidden: [...prev.userHidden, panelId],
|
|
336
|
-
}
|
|
337
|
-
set(
|
|
338
|
-
scaffoldVisibilityAtom(id),
|
|
339
|
-
reconcileVisibility(next, ids, get(scaffoldPanelCapacityAtom(id)))
|
|
340
|
-
)
|
|
341
|
-
}
|
|
342
|
-
)
|
|
343
|
-
|
|
344
|
-
/** @internal Tabs report pointer enter/leave on their label. Leaving clears
|
|
345
|
-
* only its own id — a tab that unmounts mid-hover must not wipe out a hover
|
|
346
|
-
* the pointer has already moved on to. */
|
|
347
|
-
export const setScaffoldPanelHoveredAtom = actionFamily<
|
|
348
|
-
[panelId: string, hovered: boolean]
|
|
349
|
-
>("setPanelHovered", (get, set, id, panelId, hovered) => {
|
|
350
|
-
const prev = get(scaffoldHoveredPanelIdAtom(id))
|
|
351
|
-
if (hovered) {
|
|
352
|
-
if (prev !== panelId) set(scaffoldHoveredPanelIdAtom(id), panelId)
|
|
353
|
-
return
|
|
354
|
-
}
|
|
355
|
-
if (prev === panelId) set(scaffoldHoveredPanelIdAtom(id), null)
|
|
356
|
-
})
|
|
357
|
-
|
|
358
|
-
/** @internal Canvas reports its ordered panel ids each render. Inert when
|
|
359
|
-
* the ids did not move; otherwise the visibility settles in the same write. */
|
|
360
|
-
export const registerScaffoldPanelIdsAtom = actionFamily<
|
|
361
|
-
[ids: readonly string[]]
|
|
362
|
-
>("registerPanelIds", (get, set, id, ids) => {
|
|
363
|
-
const prev = get(scaffoldPanelIdsAtom(id))
|
|
364
|
-
if (prev.length === ids.length && prev.every((v, i) => v === ids[i])) return
|
|
365
|
-
set(scaffoldPanelIdsAtom(id), [...ids])
|
|
366
|
-
settleVisibility(get, set, id)
|
|
367
|
-
})
|
|
368
|
-
|
|
369
|
-
/** @internal Canvas reports its measured width. Only the derived capacity is
|
|
370
|
-
* stored, so resize storms settle to at most one visibility change. */
|
|
371
|
-
export const measureScaffoldCanvasAtom = actionFamily<[width: number]>(
|
|
372
|
-
"measureCanvas",
|
|
373
|
-
(get, set, id, width) => {
|
|
374
|
-
const capacity = getPanelCapacity(width)
|
|
375
|
-
if (get(scaffoldMeasuredCapacityAtom(id)) === capacity) return
|
|
376
|
-
set(scaffoldMeasuredCapacityAtom(id), capacity)
|
|
377
|
-
settleVisibility(get, set, id)
|
|
378
|
-
}
|
|
379
|
-
)
|
|
380
|
-
|
|
381
|
-
// ── internal projections ───────────────────────────────────────────────────
|
|
382
|
-
|
|
383
|
-
/** @internal Projection of the mounted root's controlled props. */
|
|
384
|
-
export const projectScaffoldPropsAtom = actionFamily<
|
|
385
|
-
[config: IScaffoldConfig, inspectorOpen: boolean | undefined]
|
|
386
|
-
>("projectProps", (_get, set, id, config, inspectorOpen) => {
|
|
387
|
-
set(scaffoldConfigAtom(id), config)
|
|
388
|
-
if (config.controlsInspector && inspectorOpen !== undefined)
|
|
389
|
-
set(scaffoldInspectorOpenAtom(id), inspectorOpen)
|
|
390
|
-
})
|
|
391
|
-
|
|
392
|
-
/** @internal */
|
|
393
|
-
export const setScaffoldHandlersAtom = actionFamily<
|
|
394
|
-
[handlers: IScaffoldHandlers]
|
|
395
|
-
>("setHandlers", (_get, set, id, handlers) => {
|
|
396
|
-
set(scaffoldHandlersAtom(id), handlers)
|
|
397
|
-
})
|
|
398
|
-
|
|
399
|
-
/** @internal Seed the uncontrolled inspector on mount without firing
|
|
400
|
-
* `onInspectorOpenChange`. */
|
|
401
|
-
export const seedScaffoldInspectorAtom = actionFamily<[open: boolean]>(
|
|
402
|
-
"seedInspector",
|
|
403
|
-
(_get, set, id, open) => {
|
|
404
|
-
set(scaffoldInspectorOpenAtom(id), open)
|
|
405
|
-
}
|
|
406
|
-
)
|
|
407
|
-
|
|
408
|
-
// ── reset ──────────────────────────────────────────────────────────────────
|
|
409
|
-
|
|
410
|
-
export const resetScaffoldAtom = actionFamily<[]>("reset", (_get, set, id) => {
|
|
411
|
-
set(scaffoldInspectorOpenAtom(id), false)
|
|
412
|
-
set(scaffoldInspectorWidthAtom(id), null)
|
|
413
|
-
set(scaffoldPanelLayoutsAtom(id), {})
|
|
414
|
-
set(scaffoldActiveResizeAtom(id), null)
|
|
415
|
-
set(scaffoldPanelIdsAtom(id), NO_PANEL_IDS)
|
|
416
|
-
set(scaffoldMeasuredCapacityAtom(id), null)
|
|
417
|
-
set(scaffoldVisibilityAtom(id), EMPTY_SCAFFOLD_VISIBILITY)
|
|
418
|
-
set(scaffoldHoveredPanelIdAtom(id), null)
|
|
419
|
-
set(scaffoldConfigAtom(id), DEFAULT_CONFIG)
|
|
420
|
-
set(scaffoldHandlersAtom(id), NO_HANDLERS)
|
|
421
|
-
})
|
|
422
|
-
|
|
423
|
-
/** Forget a scaffold entirely — every family drops the key so the store can
|
|
424
|
-
* release its state. Call on teardown of a named instance. */
|
|
425
|
-
export function removeScaffoldInstance(id: TScaffoldInstanceId): void {
|
|
426
|
-
for (const family of families) family.remove(id)
|
|
427
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import { useAtomValue, useSetAtom } from "jotai"
|
|
5
|
-
|
|
6
|
-
import { cn } from "@/lib/utils"
|
|
7
|
-
import {
|
|
8
|
-
measureScaffoldCanvasAtom,
|
|
9
|
-
registerScaffoldPanelIdsAtom,
|
|
10
|
-
scaffoldHiddenPanelIdsAtom,
|
|
11
|
-
scaffoldPanelLayoutsAtom,
|
|
12
|
-
scaffoldActiveResizeAtom,
|
|
13
|
-
} from "./scaffold-atom"
|
|
14
|
-
import { useScaffoldContext } from "./scaffold-context"
|
|
15
|
-
import type { TScaffoldCanvasProps, IScaffoldPanelProps } from "./type"
|
|
16
|
-
|
|
17
|
-
/** A canvas child's panel id when it opted into responsive hiding. */
|
|
18
|
-
function panelIdOf(child: React.ReactNode): string | undefined {
|
|
19
|
-
if (!React.isValidElement<Pick<IScaffoldPanelProps, "id">>(child))
|
|
20
|
-
return undefined
|
|
21
|
-
const id = child.props.id
|
|
22
|
-
return typeof id === "string" ? id : undefined
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* The panel row below the action cluster: 8px gutters, 8px gaps, panels
|
|
27
|
-
* side by side. Key each `Scaffold.Panel` child so closes animate out.
|
|
28
|
-
* Measures its own width and hides id'd panels (oldest activation first)
|
|
29
|
-
* whenever it can't grant each one `SCAFFOLD_PANEL_MIN_WIDTH`.
|
|
30
|
-
*/
|
|
31
|
-
export function ScaffoldCanvas({
|
|
32
|
-
className,
|
|
33
|
-
children,
|
|
34
|
-
...rest
|
|
35
|
-
}: TScaffoldCanvasProps): React.ReactElement {
|
|
36
|
-
const { scaffoldId } = useScaffoldContext()
|
|
37
|
-
const layouts = useAtomValue(scaffoldPanelLayoutsAtom(scaffoldId))
|
|
38
|
-
const activeResize = useAtomValue(scaffoldActiveResizeAtom(scaffoldId))
|
|
39
|
-
const hiddenPanelIds = useAtomValue(scaffoldHiddenPanelIdsAtom(scaffoldId))
|
|
40
|
-
const registerPanelIds = useSetAtom(registerScaffoldPanelIdsAtom(scaffoldId))
|
|
41
|
-
const measureCanvas = useSetAtom(measureScaffoldCanvasAtom(scaffoldId))
|
|
42
|
-
const [width, setWidth] = React.useState(0)
|
|
43
|
-
const ref = React.useRef<HTMLDivElement>(null)
|
|
44
|
-
|
|
45
|
-
React.useLayoutEffect(() => {
|
|
46
|
-
const element = ref.current
|
|
47
|
-
if (!element || typeof ResizeObserver === "undefined") return
|
|
48
|
-
const observer = new ResizeObserver(([entry]) => {
|
|
49
|
-
measureCanvas(entry.contentRect.width)
|
|
50
|
-
setWidth(entry.contentRect.width)
|
|
51
|
-
})
|
|
52
|
-
observer.observe(element)
|
|
53
|
-
return () => observer.disconnect()
|
|
54
|
-
}, [measureCanvas])
|
|
55
|
-
|
|
56
|
-
const childArray = React.Children.toArray(children)
|
|
57
|
-
const panelIds = childArray
|
|
58
|
-
.map(panelIdOf)
|
|
59
|
-
.filter((id): id is string => id !== undefined)
|
|
60
|
-
const idsKey = panelIds.join(" ")
|
|
61
|
-
|
|
62
|
-
// Passive on purpose: jotai (v3) readers subscribe in their own
|
|
63
|
-
// `useEffect`, so a layout-effect write at mount would land before any
|
|
64
|
-
// subscription exists and never notify them.
|
|
65
|
-
React.useEffect(() => {
|
|
66
|
-
registerPanelIds(panelIds)
|
|
67
|
-
// panelIds is rebuilt each render; idsKey carries its identity.
|
|
68
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
|
-
}, [idsKey, registerPanelIds])
|
|
70
|
-
|
|
71
|
-
const visibleChildren = childArray.filter((child) => {
|
|
72
|
-
const id = panelIdOf(child)
|
|
73
|
-
return id === undefined || !hiddenPanelIds.includes(id)
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
// With three columns, the center consumes the flexible space so Motion
|
|
77
|
-
// Panels has at most one sized surface on either side.
|
|
78
|
-
const fillChild =
|
|
79
|
-
visibleChildren.length > 2
|
|
80
|
-
? visibleChildren[Math.floor(visibleChildren.length / 2)]
|
|
81
|
-
: ([...visibleChildren]
|
|
82
|
-
.reverse()
|
|
83
|
-
.find((child) => panelIdOf(child) !== activeResize) ??
|
|
84
|
-
visibleChildren.at(-1))
|
|
85
|
-
const count = visibleChildren.length
|
|
86
|
-
const equalWidth =
|
|
87
|
-
width > 0 ? (width - Math.max(0, count - 1) * 8) / Math.max(1, count) : 320
|
|
88
|
-
const sized = visibleChildren.filter((child) => child !== fillChild)
|
|
89
|
-
const fillRequest =
|
|
90
|
-
panelIdOf(fillChild) === activeResize
|
|
91
|
-
? (layouts[activeResize ?? ""]?.width ?? 320)
|
|
92
|
-
: 320
|
|
93
|
-
const fillReserve = Math.max(
|
|
94
|
-
320,
|
|
95
|
-
Math.min(fillRequest, width - Math.max(0, count - 1) * 328)
|
|
96
|
-
)
|
|
97
|
-
const availableExtra = Math.max(
|
|
98
|
-
0,
|
|
99
|
-
width - Math.max(0, count - 1) * 8 - (count - 1) * 320 - fillReserve
|
|
100
|
-
)
|
|
101
|
-
const requestedExtra = sized.reduce<number>(
|
|
102
|
-
(sum, child) =>
|
|
103
|
-
sum +
|
|
104
|
-
Math.max(0, (layouts[panelIdOf(child) ?? ""]?.width ?? equalWidth) - 320),
|
|
105
|
-
0
|
|
106
|
-
)
|
|
107
|
-
const resizingFill = panelIdOf(fillChild) === activeResize
|
|
108
|
-
const ratio =
|
|
109
|
-
requestedExtra > 0 && (resizingFill || requestedExtra > availableExtra)
|
|
110
|
-
? availableExtra / requestedExtra
|
|
111
|
-
: 1
|
|
112
|
-
const widths = new Map(
|
|
113
|
-
sized.map((child) => [
|
|
114
|
-
child,
|
|
115
|
-
320 +
|
|
116
|
-
(resizingFill && requestedExtra === 0
|
|
117
|
-
? availableExtra / Math.max(1, sized.length)
|
|
118
|
-
: Math.max(
|
|
119
|
-
0,
|
|
120
|
-
(layouts[panelIdOf(child) ?? ""]?.width ?? equalWidth) - 320
|
|
121
|
-
) * ratio),
|
|
122
|
-
])
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
return (
|
|
126
|
-
<div
|
|
127
|
-
className={cn("min-h-0 gap-2 relative flex w-full flex-1", className)}
|
|
128
|
-
data-slot="scaffold-canvas"
|
|
129
|
-
data-motion-panels-fill=""
|
|
130
|
-
ref={ref}
|
|
131
|
-
{...rest}
|
|
132
|
-
>
|
|
133
|
-
{/* Keep folded panels mounted to preserve their content state. */}
|
|
134
|
-
{childArray.map((child) => {
|
|
135
|
-
if (!React.isValidElement(child)) return child
|
|
136
|
-
const hidden = !visibleChildren.includes(child)
|
|
137
|
-
return React.cloneElement(
|
|
138
|
-
child as React.ReactElement<Record<string, unknown>>,
|
|
139
|
-
{
|
|
140
|
-
_panelHidden: hidden,
|
|
141
|
-
_panelFill: child === fillChild,
|
|
142
|
-
_panelEnd:
|
|
143
|
-
childArray.indexOf(child) < childArray.indexOf(fillChild!),
|
|
144
|
-
_panelMax: Math.max(
|
|
145
|
-
320,
|
|
146
|
-
width -
|
|
147
|
-
Math.max(0, count - 1) * 8 -
|
|
148
|
-
320 -
|
|
149
|
-
sized
|
|
150
|
-
.filter((other) => other !== child)
|
|
151
|
-
.reduce<number>(
|
|
152
|
-
(sum, other) => sum + (widths.get(other) ?? 320),
|
|
153
|
-
0
|
|
154
|
-
)
|
|
155
|
-
),
|
|
156
|
-
_panelWidth: widths.get(child) ?? equalWidth,
|
|
157
|
-
}
|
|
158
|
-
)
|
|
159
|
-
})}
|
|
160
|
-
</div>
|
|
161
|
-
)
|
|
162
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
|
|
5
|
-
import type { IScaffoldContextValue } from "./type"
|
|
6
|
-
|
|
7
|
-
export const ScaffoldContext = React.createContext<IScaffoldContextValue | null>(
|
|
8
|
-
null
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
/** Read the scaffold's identity (`scaffoldId`, `inspectorWidth`); must run
|
|
12
|
-
* under `Scaffold.Root`. State itself lives in the store — subscribe to the
|
|
13
|
-
* atoms, or reach them by id through `useScaffoldState` / `useScaffoldActions`. */
|
|
14
|
-
export function useScaffoldContext(): IScaffoldContextValue {
|
|
15
|
-
const context = React.useContext(ScaffoldContext)
|
|
16
|
-
if (!context) {
|
|
17
|
-
throw new Error("useScaffoldContext must be used within <Scaffold.Root>")
|
|
18
|
-
}
|
|
19
|
-
return context
|
|
20
|
-
}
|