@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,233 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
|
|
5
|
-
import { cn } from "@/lib/utils"
|
|
6
|
-
import { TooltipProvider } from "@/components/ui/tooltip"
|
|
7
|
-
import { TreeContext } from "./tree-context"
|
|
8
|
-
import { TreeRow } from "./tree-node"
|
|
9
|
-
import type {
|
|
10
|
-
ITreeContextValue,
|
|
11
|
-
ITreeController,
|
|
12
|
-
TTreeDataProps,
|
|
13
|
-
ITreeNode,
|
|
14
|
-
TTreeProps,
|
|
15
|
-
} from "./type"
|
|
16
|
-
import { useTree } from "./use-tree"
|
|
17
|
-
import { useTreeDndHandlers } from "./use-tree-dnd"
|
|
18
|
-
|
|
19
|
-
const DEFAULT_LABELS: Record<ITreeController["variant"], string> = {
|
|
20
|
-
navigation: "Main",
|
|
21
|
-
toc: "On this page",
|
|
22
|
-
sidebar: "Main",
|
|
23
|
-
files: "Files",
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* A nested item tree with four shapes: `navigation` (app nav — 3-level
|
|
28
|
-
* data promotes the top level to collapsible section names), `toc`
|
|
29
|
-
* (routes on top, in-page `#` anchors at the leaves), `sidebar` (a
|
|
30
|
-
* single-level rail that collapses to icons) and `files` (a compact file
|
|
31
|
-
* explorer with rename, drag-and-drop and trailing row actions).
|
|
32
|
-
*
|
|
33
|
-
* Two ways to drive it. Data-driven like the sidebar block: pass `items`,
|
|
34
|
-
* wire `onNavigate` into your router. Or hold a `useTree` controller and
|
|
35
|
-
* pass it as `tree` — same rendering, but expand, collapse, select, rename
|
|
36
|
-
* and reorder are then callable from anywhere in your app.
|
|
37
|
-
*
|
|
38
|
-
* Branches expand with a soft height morph and row stagger; the rail's
|
|
39
|
-
* labels fold away when `collapsed` flips. Arrow keys walk visible rows,
|
|
40
|
-
* expand and collapse; F2 renames in `files`.
|
|
41
|
-
*/
|
|
42
|
-
export function Tree(props: TTreeProps): React.ReactElement {
|
|
43
|
-
// Two components rather than one: hooks may not be called conditionally,
|
|
44
|
-
// and the controller form has no props to build a fallback controller
|
|
45
|
-
// from. Nobody switches a tree between the two forms at runtime.
|
|
46
|
-
return props.tree ? (
|
|
47
|
-
<TreeView
|
|
48
|
-
ariaLabel={props.ariaLabel}
|
|
49
|
-
className={props.className}
|
|
50
|
-
renderTrailing={props.renderTrailing}
|
|
51
|
-
tree={props.tree}
|
|
52
|
-
/>
|
|
53
|
-
) : (
|
|
54
|
-
<UncontrolledTree {...props} />
|
|
55
|
-
)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/** The props form: builds its own controller and renders through it. */
|
|
59
|
-
function UncontrolledTree(props: TTreeDataProps): React.ReactElement {
|
|
60
|
-
const {
|
|
61
|
-
variant,
|
|
62
|
-
items,
|
|
63
|
-
activeId,
|
|
64
|
-
onNavigate,
|
|
65
|
-
sound = true,
|
|
66
|
-
ariaLabel,
|
|
67
|
-
className,
|
|
68
|
-
} = props
|
|
69
|
-
const tree = useTree({
|
|
70
|
-
treeId: props.treeId,
|
|
71
|
-
variant,
|
|
72
|
-
items,
|
|
73
|
-
activeId,
|
|
74
|
-
onNavigate,
|
|
75
|
-
sound,
|
|
76
|
-
collapsed: variant === "sidebar" ? (props.collapsed ?? false) : undefined,
|
|
77
|
-
onMove: variant === "files" ? props.onMove : undefined,
|
|
78
|
-
onRename: variant === "files" ? props.onRename : undefined,
|
|
79
|
-
})
|
|
80
|
-
return (
|
|
81
|
-
<TreeView
|
|
82
|
-
ariaLabel={ariaLabel}
|
|
83
|
-
className={className}
|
|
84
|
-
renderTrailing={variant === "files" ? props.renderTrailing : undefined}
|
|
85
|
-
tree={tree}
|
|
86
|
-
/>
|
|
87
|
-
)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
interface ITreeViewProps {
|
|
91
|
-
tree: ITreeController
|
|
92
|
-
ariaLabel?: string
|
|
93
|
-
className?: string
|
|
94
|
-
renderTrailing?: (node: ITreeNode) => React.ReactNode
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** Rendering only — every piece of state and behaviour lives on `tree`. */
|
|
98
|
-
function TreeView({
|
|
99
|
-
tree,
|
|
100
|
-
ariaLabel,
|
|
101
|
-
className,
|
|
102
|
-
renderTrailing,
|
|
103
|
-
}: ITreeViewProps): React.ReactElement {
|
|
104
|
-
const { variant, items, sectioned, collapsed } = tree
|
|
105
|
-
const rootRef = React.useRef<HTMLUListElement>(null)
|
|
106
|
-
|
|
107
|
-
// Roving over the DOM rather than a parallel model: collapsed branches
|
|
108
|
-
// unmount, so a row query is exactly the visible set in order.
|
|
109
|
-
function handleKeyDown(event: React.KeyboardEvent) {
|
|
110
|
-
const row = (event.target as HTMLElement).closest<HTMLElement>(
|
|
111
|
-
'[data-slot="tree-row"]'
|
|
112
|
-
)
|
|
113
|
-
const root = rootRef.current
|
|
114
|
-
if (!row || !root) return
|
|
115
|
-
const rows = Array.from(
|
|
116
|
-
root.querySelectorAll<HTMLElement>('[data-slot="tree-row"]')
|
|
117
|
-
)
|
|
118
|
-
const index = rows.indexOf(row)
|
|
119
|
-
if (index < 0) return
|
|
120
|
-
const id = row.getAttribute("data-id")
|
|
121
|
-
const branch = row.hasAttribute("data-branch")
|
|
122
|
-
const open = row.hasAttribute("data-expanded")
|
|
123
|
-
|
|
124
|
-
const focusRow = (target: HTMLElement | undefined) => {
|
|
125
|
-
if (!target) return
|
|
126
|
-
event.preventDefault()
|
|
127
|
-
target.focus()
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
switch (event.key) {
|
|
131
|
-
case "ArrowDown":
|
|
132
|
-
focusRow(rows[index + 1])
|
|
133
|
-
break
|
|
134
|
-
case "ArrowUp":
|
|
135
|
-
focusRow(rows[index - 1])
|
|
136
|
-
break
|
|
137
|
-
case "Home":
|
|
138
|
-
focusRow(rows[0])
|
|
139
|
-
break
|
|
140
|
-
case "End":
|
|
141
|
-
focusRow(rows[rows.length - 1])
|
|
142
|
-
break
|
|
143
|
-
case "ArrowRight":
|
|
144
|
-
if (branch && !open && id) {
|
|
145
|
-
event.preventDefault()
|
|
146
|
-
tree.expand(id)
|
|
147
|
-
} else if (open) {
|
|
148
|
-
focusRow(rows[index + 1])
|
|
149
|
-
}
|
|
150
|
-
break
|
|
151
|
-
case "ArrowLeft":
|
|
152
|
-
if (open && id) {
|
|
153
|
-
event.preventDefault()
|
|
154
|
-
tree.collapse(id)
|
|
155
|
-
} else {
|
|
156
|
-
focusRow(
|
|
157
|
-
row
|
|
158
|
-
.closest("li")
|
|
159
|
-
?.parentElement?.closest("li")
|
|
160
|
-
?.querySelector<HTMLElement>('[data-slot="tree-row"]') ??
|
|
161
|
-
undefined
|
|
162
|
-
)
|
|
163
|
-
}
|
|
164
|
-
break
|
|
165
|
-
case "F2":
|
|
166
|
-
if (id && tree.canRename) {
|
|
167
|
-
event.preventDefault()
|
|
168
|
-
tree.startRename(id)
|
|
169
|
-
}
|
|
170
|
-
break
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Rows take the tree's id and the stable drag handlers, never the
|
|
175
|
-
// controller — so this value keeps its identity and a toggle re-renders only
|
|
176
|
-
// the rows whose own atoms changed.
|
|
177
|
-
const dnd = useTreeDndHandlers(tree.treeId)
|
|
178
|
-
const context = React.useMemo<ITreeContextValue>(
|
|
179
|
-
() => ({ treeId: tree.treeId, renderTrailing, dnd }),
|
|
180
|
-
[tree.treeId, renderTrailing, dnd]
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
const label = ariaLabel ?? DEFAULT_LABELS[variant]
|
|
184
|
-
let rendered = (
|
|
185
|
-
<ul
|
|
186
|
-
aria-label={label}
|
|
187
|
-
className={cn(
|
|
188
|
-
// The list always spans its container — collapsed included. The
|
|
189
|
-
// rail's fold is its container's width change (an icon-collapsed
|
|
190
|
-
// panel) plus the labels folding; rows keep the full width so their
|
|
191
|
-
// hit areas and hover surfaces span the rail edge to edge.
|
|
192
|
-
"flex h-full w-full min-w-0 flex-col",
|
|
193
|
-
collapsed && "gap-y-2!",
|
|
194
|
-
variant === "files" ? "gap-px" : sectioned ? "gap-3" : "gap-0.5"
|
|
195
|
-
)}
|
|
196
|
-
data-collapsed={collapsed ? "" : undefined}
|
|
197
|
-
data-slot="tree"
|
|
198
|
-
data-variant={variant}
|
|
199
|
-
onKeyDown={handleKeyDown}
|
|
200
|
-
ref={rootRef}
|
|
201
|
-
role="tree"
|
|
202
|
-
>
|
|
203
|
-
{items.map((node) => (
|
|
204
|
-
<TreeRow depth={0} key={node.id} node={node} />
|
|
205
|
-
))}
|
|
206
|
-
</ul>
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
// The collapsed rail's rows carry tooltips — one provider groups their
|
|
210
|
-
// open state and drops the hover delay across the rail. Mounted for the
|
|
211
|
-
// expanded rail too: toggling the wrapper with `collapsed` would remount
|
|
212
|
-
// every row and skip the label fold animation.
|
|
213
|
-
if (variant === "sidebar")
|
|
214
|
-
rendered = <TooltipProvider>{rendered}</TooltipProvider>
|
|
215
|
-
|
|
216
|
-
return (
|
|
217
|
-
<TreeContext.Provider value={context}>
|
|
218
|
-
{variant === "files" ? (
|
|
219
|
-
<div className={cn("min-w-0", className)} data-slot="tree-root">
|
|
220
|
-
{rendered}
|
|
221
|
-
</div>
|
|
222
|
-
) : (
|
|
223
|
-
<nav
|
|
224
|
-
aria-label={label}
|
|
225
|
-
className={cn("flex h-full w-full min-w-0", className)}
|
|
226
|
-
data-slot="tree-root"
|
|
227
|
-
>
|
|
228
|
-
{rendered}
|
|
229
|
-
</nav>
|
|
230
|
-
)}
|
|
231
|
-
</TreeContext.Provider>
|
|
232
|
-
)
|
|
233
|
-
}
|
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
import type * as React from "react"
|
|
2
|
-
|
|
3
|
-
/** One node in the tree. Nesting depth carries meaning per variant — see
|
|
4
|
-
* `TreeProps["variant"]`. */
|
|
5
|
-
export interface ITreeNode {
|
|
6
|
-
id: string
|
|
7
|
-
label: string
|
|
8
|
-
/** Leading icon. Required in practice for `sidebar` — it is all that
|
|
9
|
-
* remains of a row while the rail is collapsed. */
|
|
10
|
-
icon?: React.ReactNode
|
|
11
|
-
/** Route metadata for the consumer's `onNavigate` — every row renders as
|
|
12
|
-
* a button, so this is never turned into an anchor element. Read it (with
|
|
13
|
-
* `target`) off the node your handler receives. One native behaviour is
|
|
14
|
-
* kept: `toc` rows below the route level jump to `#{id}` after select
|
|
15
|
-
* (a `#hash` href overrides the id; a non-hash href disables the jump). */
|
|
16
|
-
href?: string
|
|
17
|
-
target?: "_blank" | "_self" | "_parent" | "_top"
|
|
18
|
-
disabled?: boolean
|
|
19
|
-
/** Start expanded. Ancestors of `activeId` expand regardless. */
|
|
20
|
-
defaultOpen?: boolean
|
|
21
|
-
/** Trailing hint — a count, a "New" pill. */
|
|
22
|
-
badge?: React.ReactNode
|
|
23
|
-
/** Fires on selection, before the tree-level `onNavigate`. */
|
|
24
|
-
onSelect?: () => void
|
|
25
|
-
children?: ITreeNode[]
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type TTreeVariant = "navigation" | "toc" | "sidebar" | "files"
|
|
29
|
-
|
|
30
|
-
/** Where a dragged row lands relative to its drop target. */
|
|
31
|
-
export type TTreeDropPosition = "before" | "after" | "inside"
|
|
32
|
-
|
|
33
|
-
/** Key for one tree’s state in the store. Any stable string; `useTree`
|
|
34
|
-
* generates one when you don't pass it. */
|
|
35
|
-
export type TTreeInstanceId = string
|
|
36
|
-
|
|
37
|
-
/** Row a drag hovers, and where the drop would land. */
|
|
38
|
-
export interface ITreeDropTarget {
|
|
39
|
-
id: string
|
|
40
|
-
position: TTreeDropPosition
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface ITreeBaseProps {
|
|
44
|
-
items: ITreeNode[]
|
|
45
|
-
/** Key this tree's state under a name your app can address —
|
|
46
|
-
* `useTreeState("app-nav")` / `useTreeActions("app-nav")` reach it from
|
|
47
|
-
* anywhere under `ExegiaProvider`. Without one the tree generates a key
|
|
48
|
-
* and its state is dropped when it unmounts. */
|
|
49
|
-
treeId?: TTreeInstanceId
|
|
50
|
-
/** Never set on the data form — `tree` selects the controller form. */
|
|
51
|
-
tree?: never
|
|
52
|
-
/** `id` of the current entry — matches any depth. Its ancestors expand. */
|
|
53
|
-
activeId?: string
|
|
54
|
-
/** Fires for every selection (rows and leaves alike), after the node's
|
|
55
|
-
* own `onSelect`. Rows are buttons, so this is the routing path — wire
|
|
56
|
-
* your router's navigate here. `toc` rows below the route level still jump
|
|
57
|
-
* to `#{id}` natively, after this fires. */
|
|
58
|
-
onNavigate?: (node: ITreeNode) => void
|
|
59
|
-
/** Expand/collapse cues. Silent until `bindSounds()`. */
|
|
60
|
-
sound?: boolean
|
|
61
|
-
ariaLabel?: string
|
|
62
|
-
className?: string
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
interface ITreeReadonlyProps {
|
|
66
|
-
collapsed?: never
|
|
67
|
-
onMove?: never
|
|
68
|
-
onRename?: never
|
|
69
|
-
renderTrailing?: never
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Drive the tree from a `useTree` controller instead of raw props. The
|
|
73
|
-
* controller carries the variant, the data and every handler; only the
|
|
74
|
-
* presentational props stay here. */
|
|
75
|
-
export interface ITreeControllerProps {
|
|
76
|
-
tree: ITreeController
|
|
77
|
-
items?: never
|
|
78
|
-
ariaLabel?: string
|
|
79
|
-
className?: string
|
|
80
|
-
/** Row actions revealed on hover/focus (`files` only — ignored by the
|
|
81
|
-
* other variants, which the controller form cannot type-gate). */
|
|
82
|
-
renderTrailing?: (node: ITreeNode) => React.ReactNode
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** Either form: raw props, or a `useTree` controller via `tree`. */
|
|
86
|
-
export type TTreeProps = TTreeDataProps | ITreeControllerProps
|
|
87
|
-
|
|
88
|
-
/** The four shapes a Tree takes. Editing props only exist on `files`;
|
|
89
|
-
* `collapsed` only on `sidebar` — the union is the contract. */
|
|
90
|
-
export type TTreeDataProps = ITreeBaseProps &
|
|
91
|
-
(
|
|
92
|
-
| ({
|
|
93
|
-
/** Nested app navigation. With 3 levels of nodes the top level
|
|
94
|
-
* becomes collapsible section names (styled as headings, not
|
|
95
|
-
* rows); with 2 it renders plain selectable rows. */
|
|
96
|
-
variant: "navigation"
|
|
97
|
-
} & ITreeReadonlyProps)
|
|
98
|
-
| ({
|
|
99
|
-
/** Table of contents: top-level nodes are routes (handled in
|
|
100
|
-
* `onNavigate`); rows below jump to `#{id}` after select, like an
|
|
101
|
-
* anchor would. Parents select on the row and expand from a
|
|
102
|
-
* separate overlay chevron. */
|
|
103
|
-
variant: "toc"
|
|
104
|
-
} & ITreeReadonlyProps)
|
|
105
|
-
| ({
|
|
106
|
-
/** Single-level icon rail. `collapsed` shrinks rows to their
|
|
107
|
-
* leading icon; nested children are ignored. */
|
|
108
|
-
variant: "sidebar"
|
|
109
|
-
collapsed?: boolean
|
|
110
|
-
} & Omit<ITreeReadonlyProps, "collapsed">)
|
|
111
|
-
| {
|
|
112
|
-
/** File explorer: only leaves navigate, folders toggle. Compact
|
|
113
|
-
* spacing; rename, drag-and-drop and trailing actions enabled. */
|
|
114
|
-
variant: "files"
|
|
115
|
-
/** Enables drag-and-drop. Reorder `items` yourself: `parentId`
|
|
116
|
-
* `null` means the root list, `index` is the slot among the new
|
|
117
|
-
* siblings (computed on the list without the dragged node). */
|
|
118
|
-
onMove?: (id: string, parentId: string | null, index: number) => void
|
|
119
|
-
/** Enables inline rename (double-click or F2). */
|
|
120
|
-
onRename?: (id: string, label: string) => void
|
|
121
|
-
/** Row actions revealed on hover/focus — a menu, a delete icon. */
|
|
122
|
-
renderTrailing?: (node: ITreeNode) => React.ReactNode
|
|
123
|
-
collapsed?: never
|
|
124
|
-
}
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
/** Options for `useTree`. Each of `items`, `activeId` and `collapsed` is
|
|
128
|
-
* controlled when passed and hook-owned when its `default*` twin is used
|
|
129
|
-
* instead. */
|
|
130
|
-
export interface IUseTreeOptions {
|
|
131
|
-
/** Key this tree's state under a name your app can address —
|
|
132
|
-
* `useTreeState("app-nav")` / `useTreeActions("app-nav")` reach it from
|
|
133
|
-
* anywhere under `ExegiaProvider`. Without one the hook generates a key
|
|
134
|
-
* and the state is dropped when the component unmounts. */
|
|
135
|
-
treeId?: TTreeInstanceId
|
|
136
|
-
/** Which shape the tree takes — gates rename/reorder (`files`) and the
|
|
137
|
-
* collapsible rail (`sidebar`). */
|
|
138
|
-
variant: TTreeVariant
|
|
139
|
-
/** Controlled data. With it, `rename`/`move` only report the edit unless
|
|
140
|
-
* you also pass `onItemsChange`. */
|
|
141
|
-
items?: ITreeNode[]
|
|
142
|
-
/** Hook-owned data — `rename` and `move` apply the edit themselves. */
|
|
143
|
-
defaultItems?: ITreeNode[]
|
|
144
|
-
/** Next tree after a `rename`/`move`. Also enables self-applying edits
|
|
145
|
-
* on top of controlled `items`. */
|
|
146
|
-
onItemsChange?: (items: ITreeNode[]) => void
|
|
147
|
-
/** Controlled selection. Ancestors of the active node expand. */
|
|
148
|
-
activeId?: string
|
|
149
|
-
defaultActiveId?: string
|
|
150
|
-
/** Fires for every selection (rows and leaves alike), after the node's
|
|
151
|
-
* own `onSelect` — wire your router's navigate here. */
|
|
152
|
-
onNavigate?: (node: ITreeNode) => void
|
|
153
|
-
/** Start with these ids expanded instead of the `defaultOpen` set. */
|
|
154
|
-
defaultExpandedIds?: Iterable<string>
|
|
155
|
-
onExpandedChange?: (ids: string[]) => void
|
|
156
|
-
/** Controlled rail fold (`sidebar` only). */
|
|
157
|
-
collapsed?: boolean
|
|
158
|
-
defaultCollapsed?: boolean
|
|
159
|
-
onCollapsedChange?: (collapsed: boolean) => void
|
|
160
|
-
/** Enables rename (`files`). Not needed when the hook owns the data. */
|
|
161
|
-
onRename?: (id: string, label: string) => void
|
|
162
|
-
/** Enables drag-and-drop (`files`). `parentId` `null` means the root
|
|
163
|
-
* list, `index` is the slot among the new siblings (computed on the list
|
|
164
|
-
* without the moved node). Not needed when the hook owns the data. */
|
|
165
|
-
onMove?: (id: string, parentId: string | null, index: number) => void
|
|
166
|
-
/** Expand/collapse cues. Silent until `bindSounds()`. */
|
|
167
|
-
sound?: boolean
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/** Everything the tree can do, callable from outside the component.
|
|
171
|
-
* Returned by `useTree` and accepted by `<Tree tree={…} />`. */
|
|
172
|
-
export interface ITreeController {
|
|
173
|
-
/** The key this tree's state is stored under. */
|
|
174
|
-
treeId: TTreeInstanceId
|
|
175
|
-
variant: TTreeVariant
|
|
176
|
-
items: ITreeNode[]
|
|
177
|
-
/** `navigation` with 3 levels of nodes — depth 0 renders as sections. */
|
|
178
|
-
sectioned: boolean
|
|
179
|
-
/** Ids of the section headings, empty unless `sectioned`. Pass one to
|
|
180
|
-
* `expand`/`collapse`/`toggleExpanded` to work a whole section. */
|
|
181
|
-
sectionIds: string[]
|
|
182
|
-
sound: boolean
|
|
183
|
-
getNode: (id: string) => ITreeNode | null
|
|
184
|
-
|
|
185
|
-
expandedIds: ReadonlySet<string>
|
|
186
|
-
isExpanded: (id: string) => boolean
|
|
187
|
-
expand: (id: string) => void
|
|
188
|
-
collapse: (id: string) => void
|
|
189
|
-
toggleExpanded: (id: string) => void
|
|
190
|
-
expandAll: () => void
|
|
191
|
-
collapseAll: () => void
|
|
192
|
-
/** Open every ancestor of `id`, leaving the rest of the tree alone. */
|
|
193
|
-
reveal: (id: string) => void
|
|
194
|
-
|
|
195
|
-
/** Rail folded to icons — always `false` outside `sidebar`. */
|
|
196
|
-
collapsed: boolean
|
|
197
|
-
setCollapsed: (collapsed: boolean) => void
|
|
198
|
-
toggleCollapsed: () => void
|
|
199
|
-
|
|
200
|
-
activeId?: string
|
|
201
|
-
/** Select a node: runs its `onSelect`, then `onNavigate`. Inert on
|
|
202
|
-
* disabled and unknown nodes. */
|
|
203
|
-
select: (id: string) => void
|
|
204
|
-
|
|
205
|
-
/** Whether rename is wired up at all (`files` + a handler or owned data). */
|
|
206
|
-
canRename: boolean
|
|
207
|
-
/** Rename target id, `null` while idle. */
|
|
208
|
-
renamingId: string | null
|
|
209
|
-
startRename: (id: string) => void
|
|
210
|
-
cancelRename: () => void
|
|
211
|
-
/** Commit a rename and leave rename mode. Blank or unchanged labels are
|
|
212
|
-
* dropped. */
|
|
213
|
-
rename: (id: string, label: string) => void
|
|
214
|
-
|
|
215
|
-
/** Whether reorder is wired up at all. */
|
|
216
|
-
canMove: boolean
|
|
217
|
-
move: (id: string, parentId: string | null, index: number) => void
|
|
218
|
-
|
|
219
|
-
/** Back to the values the tree mounted with. */
|
|
220
|
-
reset: () => void
|
|
221
|
-
|
|
222
|
-
dnd: ITreeDndContextValue
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** @internal What a row needs from the root, threaded through context so
|
|
226
|
-
* the recursive rows stay prop-light.
|
|
227
|
-
*
|
|
228
|
-
* Deliberately free of tree state. Rows read state from per-node atoms, so
|
|
229
|
-
* this value keeps its identity for the life of the tree and expanding one
|
|
230
|
-
* branch no longer re-renders every row through context. */
|
|
231
|
-
export interface ITreeContextValue {
|
|
232
|
-
treeId: TTreeInstanceId
|
|
233
|
-
renderTrailing?: (node: ITreeNode) => React.ReactNode
|
|
234
|
-
dnd: ITreeDndHandlers
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/** @internal The drag event handlers, stable for the life of the tree —
|
|
238
|
-
* they read drag state out of the store instead of closing over it, so
|
|
239
|
-
* handing them to every row costs no re-renders. */
|
|
240
|
-
export interface ITreeDndHandlers {
|
|
241
|
-
enabled: boolean
|
|
242
|
-
onRowDragStart: (event: React.DragEvent, id: string) => void
|
|
243
|
-
onRowDragOver: (event: React.DragEvent, node: ITreeNode) => void
|
|
244
|
-
onRowDragLeave: (event: React.DragEvent) => void
|
|
245
|
-
onRowDrop: (event: React.DragEvent, node: ITreeNode) => void
|
|
246
|
-
onRowDragEnd: () => void
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/** @internal Handlers plus live drag state — what `TreeController.dnd`
|
|
250
|
-
* exposes (all `null`/no-op outside `files`). */
|
|
251
|
-
export interface ITreeDndContextValue extends ITreeDndHandlers {
|
|
252
|
-
draggedId: string | null
|
|
253
|
-
/** Row the pointer is over and where the drop would land. */
|
|
254
|
-
dropTarget: ITreeDropTarget | null
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/** Everything observable about one tree, for consumers reading it by id. */
|
|
258
|
-
export interface ITreeState {
|
|
259
|
-
variant: TTreeVariant
|
|
260
|
-
items: ITreeNode[]
|
|
261
|
-
activeId?: string
|
|
262
|
-
expandedIds: ReadonlySet<string>
|
|
263
|
-
collapsed: boolean
|
|
264
|
-
renamingId: string | null
|
|
265
|
-
sectioned: boolean
|
|
266
|
-
sectionIds: string[]
|
|
267
|
-
canRename: boolean
|
|
268
|
-
canMove: boolean
|
|
269
|
-
draggedId: string | null
|
|
270
|
-
dropTarget: ITreeDropTarget | null
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/** Everything doable to one tree from outside its component. */
|
|
274
|
-
export interface ITreeActions {
|
|
275
|
-
expand: (id: string) => void
|
|
276
|
-
collapse: (id: string) => void
|
|
277
|
-
toggleExpanded: (id: string) => void
|
|
278
|
-
expandAll: () => void
|
|
279
|
-
collapseAll: () => void
|
|
280
|
-
reveal: (id: string) => void
|
|
281
|
-
setCollapsed: (collapsed: boolean) => void
|
|
282
|
-
toggleCollapsed: () => void
|
|
283
|
-
select: (id: string) => void
|
|
284
|
-
startRename: (id: string) => void
|
|
285
|
-
cancelRename: () => void
|
|
286
|
-
rename: (id: string, label: string) => void
|
|
287
|
-
move: (id: string, parentId: string | null, index: number) => void
|
|
288
|
-
setItems: (items: ITreeNode[]) => void
|
|
289
|
-
reset: () => void
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/** @internal Projection of `useTree`'s options — primitives only, so the
|
|
293
|
-
* store write runs once per real change instead of once per render. */
|
|
294
|
-
export interface ITreeConfig {
|
|
295
|
-
variant: TTreeVariant
|
|
296
|
-
sound: boolean
|
|
297
|
-
controlsItems: boolean
|
|
298
|
-
controlsActiveId: boolean
|
|
299
|
-
controlsCollapsed: boolean
|
|
300
|
-
managesItems: boolean
|
|
301
|
-
hasRenameHandler: boolean
|
|
302
|
-
hasMoveHandler: boolean
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/** @internal Latest option callbacks. Only write atoms read this, so it
|
|
306
|
-
* can be refreshed every commit without re-rendering anything. */
|
|
307
|
-
export interface ITreeHandlers {
|
|
308
|
-
onNavigate?: (node: ITreeNode) => void
|
|
309
|
-
onItemsChange?: (items: ITreeNode[]) => void
|
|
310
|
-
onExpandedChange?: (ids: string[]) => void
|
|
311
|
-
onCollapsedChange?: (collapsed: boolean) => void
|
|
312
|
-
onRename?: (id: string, label: string) => void
|
|
313
|
-
onMove?: (id: string, parentId: string | null, index: number) => void
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/** @internal What an instance starts from, replayed by `resetTreeAtom`. */
|
|
317
|
-
export interface ITreeSeed {
|
|
318
|
-
items: ITreeNode[]
|
|
319
|
-
activeId?: string
|
|
320
|
-
collapsed: boolean
|
|
321
|
-
expandedIds?: string[]
|
|
322
|
-
}
|