@exegia/corpora-ui 2.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/EVILCHARTS-LICENSE.txt +21 -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/composed/chat/chart/chart-atom.d.ts +30 -0
- package/dist-lib/components/composed/chat/chart/chart-context.d.ts +2 -0
- package/dist-lib/components/composed/chat/chart/chart-legend.d.ts +4 -0
- package/dist-lib/components/composed/chat/chart/chart-plot.d.ts +3 -0
- package/dist-lib/components/composed/chat/chart/chart-root.d.ts +3 -0
- package/dist-lib/components/composed/chat/chart/chart-tooltip.d.ts +4 -0
- package/dist-lib/components/composed/chat/chart/constants.d.ts +3 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-area-chart.d.ts +93 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-bar-chart.d.ts +86 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-brush.d.ts +65 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-chart.d.ts +44 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-dot.d.ts +16 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-legend.d.ts +24 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-line-chart.d.ts +90 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-pie-chart.d.ts +73 -0
- package/dist-lib/components/composed/chat/chart/evilcharts/echarts-tooltip.d.ts +29 -0
- package/dist-lib/components/composed/chat/chart/index.d.ts +6 -0
- package/dist-lib/components/composed/chat/chart/type.d.ts +80 -0
- package/dist-lib/components/composed/chat/chart/use-chart-state.d.ts +3 -0
- package/dist-lib/components/composed/chat/chart/use-chart.d.ts +6 -0
- package/dist-lib/components/composed/chat/chart/utils.d.ts +5 -0
- package/dist-lib/components/composed/chat/chart.d.ts +1 -44
- package/dist-lib/components/composed/chat/index.d.ts +1 -1
- 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 +10283 -8224
- 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 +65 -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 -34
- 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 -45
- 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 -62
- 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.tsx +0 -401
- 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 -98
- 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 -54
- 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/dist-lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/lib/specular.ts","../src/lib/utils.ts","../src/components/atoms/bubble/context.ts","../src/components/atoms/bubble/utils.ts","../src/components/atoms/bubble/default.tsx","../src/components/atoms/bubble/actions.tsx","../src/components/atoms/bubble/header.tsx","../src/lib/attachment-content.ts","../src/components/atoms/bubble/message.tsx","../src/components/ui/spinner.tsx","../src/lib/glass-variants.ts","../src/components/ui/glasscn/liquid-glass.tsx","../src/components/ui/button.tsx","../src/components/ui/preview-card.tsx","../src/components/atoms/reference.tsx","../src/lib/ease.ts","../src/components/ui/glasscn/glass-container.tsx","../src/components/ui/popover-glass.tsx","../src/components/ui/toolbar.tsx","../src/components/ui/tooltip.tsx","../src/components/composed/action-bar/utils.ts","../src/components/composed/action-bar/action.tsx","../src/components/composed/action-bar/toolbar.tsx","../src/components/ui/emoji-picker.tsx","../src/components/composed/action-bar/emojis.tsx","../src/components/composed/action-bar/index.ts","../src/components/atoms/bubble/reactions.tsx","../src/components/atoms/bubble/index.ts","../src/components/composed/chat/flowchart/constant.ts","../src/components/atoms/chip.tsx","../src/components/atoms/text/default.tsx","../src/components/ui/popover.tsx","../src/components/atoms/text-selection/click-popover.tsx","../src/components/ui/card.tsx","../src/components/atoms/text-selection/selection-atom.ts","../src/components/atoms/text-selection/use-selection.ts","../src/components/atoms/text-selection/popover.tsx","../src/components/atoms/text-selection/selection.tsx","../src/components/atoms/text/utils.ts","../src/components/atoms/text/heading.tsx","../src/components/atoms/text/paragraph.tsx","../src/components/atoms/text/span.tsx","../src/components/atoms/text/label.tsx","../src/components/atoms/text/index.ts","../src/assets/fabric.png","../src/assets/paper.png","../src/components/atoms/background/utils.ts","../src/components/atoms/background/texture.tsx","../src/components/atoms/background/index.ts","../src/components/ui/avatar.tsx","../src/components/atoms/avatar/utils.ts","../src/components/atoms/avatar/verified.tsx","../src/components/ui/skeleton.tsx","../src/components/atoms/loader.tsx","../src/components/atoms/avatar/base.tsx","../src/lib/sound.ts","../src/components/ui/checkbox.tsx","../src/components/ui/field.tsx","../src/components/ui/frame.tsx","../src/components/ui/input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-group.tsx","../src/components/ui/label.tsx","../src/components/ui/menu.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/autocomplete.tsx","../src/components/ui/command.tsx","../src/components/ui/menu-command.tsx","../src/components/ui/context-menu.tsx","../src/components/ui/toast.tsx","../src/components/ui/separator.tsx","../src/components/ui/otp-field.tsx","../src/components/icons/file-badge-cfm.tsx","../src/components/icons/file-badge-corpus.tsx","../src/components/icons/file-badge-pdf.tsx","../src/components/icons/file-badge-tei.tsx","../src/components/icons/file-badge-tf.tsx","../src/components/icons/file-badge-txt.tsx","../src/components/icons/file-badge-xml.tsx","../src/components/icons/file-wordmark-cfm.tsx","../src/components/icons/file-wordmark-corpus.tsx","../src/components/icons/file-wordmark-pdf.tsx","../src/components/icons/file-wordmark-tei.tsx","../src/components/icons/file-wordmark-tf.tsx","../src/components/icons/file-wordmark-txt.tsx","../src/components/icons/file-wordmark-xml.tsx","../src/components/ui/badge.tsx","../src/components/ui/chat/icon-tile.tsx","../src/components/ui/chat/thumbnail.tsx","../src/components/ui/chat/avatar-handle.tsx","../src/components/ui/chat/buttons.tsx","../src/components/ui/chat/badges.tsx","../src/components/ui/chat/waveform.tsx","../src/components/ui/chat/dot.tsx","../src/components/ui/chat/segmented-toggle.tsx","../src/components/ui/chat/icon-button.tsx","../src/components/ui/chat/tag.tsx","../src/components/ui/chat/chips.tsx","../src/components/ui/chat/inline-source.tsx","../src/components/composed/ai/shared.tsx","../src/components/composed/logo.tsx","../src/components/composed/password-input.tsx","../src/components/composed/social-providers.tsx","../src/components/composed/reader/selection-popover.tsx","../src/components/composed/reader/selection-highlight.tsx","../src/components/composed/reader/applied-mark.tsx","../src/components/composed/reader/apply-toast.tsx","../src/components/composed/tree/tree-context.ts","../src/components/composed/tree/constants.ts","../src/components/composed/tree/utils.ts","../src/components/composed/tree/tree-atom.ts","../src/components/composed/tree/tree-node.tsx","../src/components/composed/tree/use-tree-dnd.ts","../src/components/composed/tree/use-tree.ts","../src/components/composed/tree/tree.tsx","../src/components/composed/tree/use-tree-state.ts","../src/components/composed/user/info.tsx","../src/components/composed/user/message.tsx","../src/components/composed/user/pill.tsx","../src/components/composed/user/index.ts","../src/components/composed/verse/verse.tsx","../src/lib/auth-accent.ts","../src/components/blocks/auth/auth-shell.tsx","../src/components/blocks/auth/code-auth-block.tsx","../src/components/blocks/auth/forgot-password-block.tsx","../src/components/blocks/auth/login-block.tsx","../src/components/ui/select.tsx","../src/components/blocks/auth/onboarding/profile-step.tsx","../src/components/blocks/auth/onboarding-block.tsx","../src/components/blocks/auth/signup-block.tsx","../src/components/blocks/auth/update-password-block.tsx","../src/components/blocks/auth/auth-session-atom.ts","../src/components/blocks/auth/auth-flow-atom.ts","../src/components/blocks/auth/use-auth-state.ts","../src/components/blocks/auth/auth-flow-block.tsx","../src/components/blocks/auth/linked-accounts-block.tsx","../src/components/blocks/auth/passkey-manager-block.tsx","../src/components/blocks/auth/passkey-sign-in-block.tsx","../src/components/blocks/sidebar/utils.ts","../src/components/blocks/sidebar/ai-sidebar-atom.ts","../src/components/blocks/sidebar/use-ai-sidebar.ts","../src/components/blocks/sidebar/sidebar-context.ts","../src/components/blocks/sidebar/sidebar-icon.tsx","../src/components/blocks/sidebar/marquee-label.tsx","../src/components/motion/popover-position.ts","../src/components/motion/popover-morph.tsx","../src/components/blocks/sidebar/sidebar-row.tsx","../src/components/blocks/sidebar/ai-sidebar.tsx","../src/components/blocks/sidebar/use-ai-sidebar-state.ts","../src/components/blocks/sidebar/index.ts","../src/components/blocks/shell/shell-panel-atom.ts","../src/components/blocks/shell/shell-metrics.ts","../src/components/blocks/shell/shell-fit-atom.ts","../src/lib/use-motion-panel.ts","../src/components/blocks/shell/utils.ts","../src/components/blocks/shell/animated-panel.tsx","../src/components/blocks/shell/use-shell-fit.ts","../src/components/blocks/shell/animated-panel-provider.tsx","../src/components/blocks/shell/animated-panel-trigger.tsx","../src/components/blocks/shell/animated-panel-inset.tsx","../src/components/blocks/shell/shell-layout.tsx","../src/components/blocks/shell/use-shell-panels.ts","../src/components/blocks/shell/use-shell-fit-state.ts","../src/components/blocks/scaffold/constants.ts","../src/components/blocks/scaffold/utils.ts","../src/components/blocks/scaffold/panel-close-button.tsx","../src/components/ui/button-group.tsx","../src/components/ui/glasscn/glass-button-group.tsx","../src/lib/hooks/use-hover-capable.ts","../src/components/blocks/scaffold/panel-menu-button.tsx","../src/components/blocks/scaffold/scaffold-atom.ts","../src/components/blocks/scaffold/scaffold-context.ts","../src/components/blocks/scaffold/scaffold-actions.tsx","../src/components/blocks/scaffold/scaffold-canvas.tsx","../src/components/blocks/scaffold/scaffold-inspector.tsx","../src/components/blocks/scaffold/scaffold-main.tsx","../src/components/blocks/scaffold/scaffold-sub-panel.tsx","../src/components/blocks/scaffold/scaffold-panel.tsx","../src/components/blocks/scaffold/scaffold-root.tsx","../src/components/blocks/scaffold/scaffold-sidebar.tsx","../src/components/blocks/scaffold/scaffold-tab.tsx","../src/components/blocks/scaffold/use-scaffold.ts","../src/components/blocks/scaffold/use-scaffold-state.ts","../src/components/blocks/scaffold/index.ts","../src/components/blocks/layout.ts","../src/components/blocks/profile/profile-card-atom.ts","../src/components/blocks/profile/use-profile-card.ts","../src/components/blocks/profile/profile-card-block.tsx","../src/components/blocks/profile/use-profile-card-state.ts","../src/components/motion/shared-layout-bg.tsx","../src/components/theme-provider.tsx","../src/lib/state/store.ts","../src/lib/state/exegia-provider.tsx","../src/components/composed/chat/attachment-file.ts","../src/components/composed/chat/attachment.tsx","../src/components/composed/chat/chart.tsx","../src/lib/segmented-control.ts","../src/components/ui/tabs.tsx","../src/lib/keyed-atom.ts","../src/components/composed/chat/markdown-atom.ts","../src/components/composed/chat/markdown.tsx","../src/components/composed/chat/composer/utils.ts","../src/components/composed/chat/composer/send-button.tsx","../src/components/composed/chat/composer/use-dictation.ts","../src/components/composed/chat/composer/base.tsx","../src/components/composed/chat/composer/add-button.tsx","../src/components/composed/chat/composer/command-menu.tsx","../src/components/composed/chat/composer/hooks.ts","../src/components/composed/chat/recommendation/constant.ts","../src/components/composed/chat/recommendation/checkbox.tsx","../src/components/ui/accordion.tsx","../src/components/composed/chat/recommendation/group.tsx","../src/components/composed/chat/recommendation/item.tsx","../src/components/composed/chat/recommendation/default.tsx","../src/components/composed/chat/recommendation/index.ts","../src/components/composed/chat/context-cards.tsx","../src/components/composed/chat/code-block.tsx","../src/components/composed/chat/filter-table.tsx","../src/components/composed/chat/records-table.tsx","../src/components/composed/chat/flowchart/utils.ts","../src/components/composed/chat/flowchart/hooks.tsx","../src/components/composed/chat/flowchart/connector.tsx","../src/components/composed/chat/flowchart/step-body.tsx","../src/components/composed/chat/flowchart/chart-node.tsx","../src/components/composed/chat/flowchart/edge-toolbar.tsx","../src/components/ui/alert-dialog.tsx","../src/components/composed/chat/flowchart/default.tsx","../src/components/composed/chat/flowchart/index.ts","../src/components/composed/chat/insight-cards.tsx","../src/components/ui/kbd.tsx","../src/components/composed/chat/hint.tsx","../src/components/blocks/chat/header.tsx","../src/components/blocks/chat/suggested-prompts.tsx","../src/components/blocks/chat/base.tsx","../src/components/ui/group.tsx","../src/components/blocks/chat/recommendation-stack.tsx","../src/components/ui/alert.tsx","../src/components/blocks/chat/banners.tsx","../src/components/blocks/chat/version-history-record.tsx"],"sourcesContent":["import { defineSurfaces } from \"@exegia/specular\"\n\nexport const surfaces = defineSurfaces({\n bezel: {\n layers: {\n lit: { color: \"#fff\" },\n dim: { color: \"#000\" },\n },\n },\n})\n","import { mergeConfig } from \"@exegia/specular/merge\"\nimport { surfaces } from \"./specular\"\nimport { clsx, type ClassValue } from \"clsx\"\nimport { extendTailwindMerge, mergeConfigs, validators } from \"tailwind-merge\"\n\n/**\n * The `inset-shadow-{lit,dim}-*` bezel family (exported by `index.css`) is\n * ours, not Tailwind's. Left to itself tailwind-merge files every one of them\n * under its built-in `inset-shadow` group — which holds a single `box-shadow`\n * — and keeps only the last, so a bezel written as\n * `inset-shadow-lit-t-2 inset-shadow-dim-b-1` arrives as the dim class alone.\n *\n * Each utility writes exactly one custom property, so the conflict groups\n * mirror those properties: a layer's two axes, its blur and its alpha are\n * independent of each other and of the other layer. `-l-`/`-r-` are the two\n * ends of one axis and `-t-`/`-b-` of the other, so those do collide. Only\n * `inset-shadow-blur-*` spans layers — it writes both blurs — so it alone\n * conflicts across them.\n */\ntype TInsetShadowGroupId =\n | \"inset-shadow-bezel\"\n | \"inset-shadow-lit-x\"\n | \"inset-shadow-lit-y\"\n | \"inset-shadow-lit-blur\"\n | \"inset-shadow-lit-alpha\"\n | \"inset-shadow-dim-x\"\n | \"inset-shadow-dim-y\"\n | \"inset-shadow-dim-blur\"\n | \"inset-shadow-dim-alpha\"\n | \"inset-shadow-blur\"\n\nconst { isAny } = validators\n\n/**\n * Every group in the family writes the whole `box-shadow`, so each one both\n * displaces and is displaced by Tailwind's own shadow utilities. Without\n * this, `shadow-md inset-shadow-lit-t-2` survives `cn` intact and whichever\n * rule the stylesheet happens to sort last silently wins.\n */\nconst INSET_SHADOW_GROUPS = [\n \"inset-shadow-bezel\",\n \"inset-shadow-lit-x\",\n \"inset-shadow-lit-y\",\n \"inset-shadow-lit-blur\",\n \"inset-shadow-lit-alpha\",\n \"inset-shadow-dim-x\",\n \"inset-shadow-dim-y\",\n \"inset-shadow-dim-blur\",\n \"inset-shadow-dim-alpha\",\n \"inset-shadow-blur\",\n] as const satisfies readonly TInsetShadowGroupId[]\n\nconst displacesTailwindShadows = Object.fromEntries(\n INSET_SHADOW_GROUPS.map((id) => [id, [\"shadow\", \"inset-shadow\"]])\n)\n\nconst twMerge = extendTailwindMerge<TInsetShadowGroupId | import(\"@exegia/specular/merge\").BezelGroupId<typeof surfaces>>({\n extend: {\n classGroups: {\n // The shared base every other utility in the family `@apply`s. Grouped\n // so it collapses against Tailwind's shadows like the rest of them.\n \"inset-shadow-bezel\": [\"inset-shadow-bezel\"],\n \"inset-shadow-lit-x\": [\n { \"inset-shadow-lit\": [{ l: [isAny], r: [isAny] }] },\n ],\n \"inset-shadow-lit-y\": [\n { \"inset-shadow-lit\": [{ t: [isAny], b: [isAny] }] },\n ],\n \"inset-shadow-lit-blur\": [{ \"inset-shadow-lit\": [{ blur: [isAny] }] }],\n \"inset-shadow-dim-x\": [\n { \"inset-shadow-dim\": [{ l: [isAny], r: [isAny] }] },\n ],\n \"inset-shadow-dim-y\": [\n { \"inset-shadow-dim\": [{ t: [isAny], b: [isAny] }] },\n ],\n \"inset-shadow-dim-blur\": [{ \"inset-shadow-dim\": [{ blur: [isAny] }] }],\n // The bare classes, which carry the layer opacity as a `/40` modifier.\n \"inset-shadow-lit-alpha\": [\"inset-shadow-lit\"],\n \"inset-shadow-dim-alpha\": [\"inset-shadow-dim\"],\n \"inset-shadow-blur\": [{ \"inset-shadow\": [{ blur: [isAny] }] }],\n },\n conflictingClassGroups: {\n ...displacesTailwindShadows,\n // …and the other way round, so the last one written wins either way.\n shadow: INSET_SHADOW_GROUPS,\n \"inset-shadow\": INSET_SHADOW_GROUPS,\n // Blurs both layers at once, so it supersedes either single-layer blur.\n \"inset-shadow-blur\": [\n \"inset-shadow-lit-blur\",\n \"inset-shadow-dim-blur\",\n \"shadow\",\n \"inset-shadow\",\n ],\n },\n },\n}, (config) => mergeConfigs(config, mergeConfig(surfaces)))\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport { createContext, useContext } from \"react\"\nimport type { TBubbleVariant } from \"./types\"\n\nexport const BubbleContext = createContext<TBubbleVariant>(\"recipient\")\n\n/** Variant of the closest `Bubble` ancestor; used by the sub-components. */\nexport function useBubbleVariant(): TBubbleVariant {\n return useContext(BubbleContext)\n}\n","import type { ClassValue } from \"clsx\"\nimport type { IBubbleReaction, TBubbleVariant } from \"./types\"\nimport { cn } from \"@/lib/utils\"\n\n/** Returns a stable key for a reaction, falling back to the emoji label if no ID is provided. */\nexport function reactionKey(reaction: IBubbleReaction, index: number): string {\n return reaction.id ?? `${reaction.label ?? String(reaction.emoji)}-${index}`\n}\n\n/** Root alignment: outgoing hugs the right edge, everything else the left. */\nexport const twBubbleAlignClasses: Record<TBubbleVariant, ClassValue> = {\n sender: \"items-end\",\n recipient: \"items-start\",\n ai: \"items-start\",\n}\n\n/**\n * The inner column shrink-wraps the message, reactions and actions.\n * Headers offset this inset to reach the thread edge. Generated output\n * stays full-bleed.\n */\nexport const twBubbleColumnClasses: Record<TBubbleVariant, ClassValue> = {\n sender: \"items-end max-w-[80%] min-w-0 mr-4\",\n recipient: \"items-start max-w-[80%] min-w-0 ml-4\",\n ai: \"w-full items-stretch min-w-0\",\n}\n\n/**\n * Message surface per variant. The two people's bubbles are inverted\n * mirrors — a lit surface (top highlight, shaded base) for the sender and\n * a dim one for the recipient — with the tail corner pinched only on the\n * last bubble of a run (a following `continued` bubble un-pinches it) and\n * both bottom corners squared to `lg` when an attachment sits inside; the ai\n * variant renders as plain prose so generated output never masquerades as\n * a person's message.\n */\n\nconst defaultClasses = \"w-fit rounded-full text-xs leading-4 font-medium relative\"\nexport const twBubbleMessageClasses: Record<TBubbleVariant, ClassValue> = {\n sender: cn(defaultClasses,\n \"bezel-lit-t-2 bezel-lit-blur-3 bezel-lit/14 bezel-dim-b-2 bezel-dim-blur-3 bezel-dim/78 dark:bezel-lit-blur-2 dark:bezel-lit/57 dark:bezel-dim/11 rounded-br-[8px] group-has-[+[data-continued]]/bubble:rounded-br-full has-[[data-slot=attachment]]:rounded-b-md has-[[data-slot=attachment]]:rounded-t-md bg-indigo-700 dark:bg-neutral-100 text-background chat-bubble bubble-sender text-left pl-6 pr-4 py-3\"),\n recipient: cn(defaultClasses,\n \"bezel-lit-t-2 bezel-lit-blur-2 bezel-lit/57 bezel-dim-b-2 bezel-dim-blur-3 bezel-dim/11 dark:bezel-lit-blur-3 dark:bezel-lit/14 dark:bezel-dim/78 rounded-bl-[8px] group-has-[+[data-continued]]/bubble:rounded-bl-full has-[[data-slot=attachment]]:rounded-b-md has-[[data-slot=attachment]]:rounded-t-md bg-neutral-100 dark:bg-neutral-800 text-foreground chat-bubble bubble-recipient text-right pl-4 pr-6 py-3\"),\n ai: cn(defaultClasses,\n \"text-sm leading-5 my-1 text-foreground w-full\"),\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { BubbleContext } from \"./context\"\nimport type { IBubbleProps } from \"./types\"\nimport { twBubbleAlignClasses, twBubbleColumnClasses } from \"./utils\"\n\nexport function Bubble({\n variant = \"sender\",\n continued = false,\n className,\n children,\n ...props\n}: IBubbleProps): React.ReactElement {\n return (\n <BubbleContext.Provider value={variant}>\n <div\n className={cn(\n // Full width, not `w-fit`: a fit-content root anchors left, so a\n // short sender message would sit mid-thread with its column\n // right-aligned inside its own box instead of hugging the edge.\n \"group/bubble relative my-3 flex w-full flex-col gap-y-3\",\n // 12px bottom margin above minus 10px: a 2px seam between run bubbles.\n continued && \"-mt-2.5\",\n twBubbleAlignClasses[variant],\n className\n )}\n data-continued={continued ? \"\" : undefined}\n data-slot=\"bubble\"\n data-variant={variant}\n {...props}\n >\n <div\n className={cn(\n \"relative flex flex-col gap-y-2 select-none\",\n twBubbleColumnClasses[variant]\n )}\n data-slot=\"bubble-column\"\n >\n {children}\n </div>\n </div>\n </BubbleContext.Provider>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { TBubbleActionsProps } from \"./types\"\n\n/**\n * Row of per-message actions (copy, retry, …). Hidden until the bubble is\n * hovered or an action has focus; compose with `Button size=\"icon-xs\"`.\n */\nexport function BubbleActions({\n className,\n \"aria-label\": ariaLabel = \"Message actions\",\n ...props\n}: TBubbleActionsProps): React.ReactElement {\n return (\n <div\n aria-label={ariaLabel}\n className={cn(\n \"flex items-center gap-0.5 opacity-0 transition-opacity duration-150 group-hover/bubble:opacity-100 focus-within:opacity-100 motion-reduce:transition-none relative\",\n className\n )}\n data-slot=\"bubble-actions\"\n role=\"toolbar\"\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { useBubbleVariant } from \"./context\"\nimport type { TBubbleHeaderProps } from \"./types\"\n\n/**\n * Author row above a message: avatar, name, time and an optional role badge.\n * The sender variant mirrors the order so the row reads inward from the\n * thread's edge, the same way its bubble does.\n */\nexport function BubbleHeader({\n className,\n children,\n ...props\n}: TBubbleHeaderProps): React.ReactElement {\n const variant = useBubbleVariant()\n const reversed = variant === \"sender\"\n\n return (\n <div\n className={cn(\n \"gap-2 flex items-center\",\n // The message column keeps its inset; only the identity reaches the thread edge.\n reversed && \"translate-x-4 flex-row-reverse\",\n variant === \"recipient\" && \"-translate-x-4\",\n className\n )}\n data-slot=\"bubble-header\"\n {...props}\n >\n {children}\n </div>\n )\n}\n","import { Children, Fragment, isValidElement, type ReactNode } from \"react\"\n\n/** Shared marker keeps the bubble atom independent of the composed attachment. */\nexport const ATTACHMENT_CONTENT = Symbol.for(\"corpora-ui.attachment\")\n\nfunction contentNodes(children: ReactNode): ReactNode[] {\n return Children.toArray(children).flatMap((child) =>\n isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment\n ? contentNodes(child.props.children)\n : typeof child === \"string\" && !child.trim()\n ? []\n : [child]\n )\n}\n\nexport function containsOnlyAttachments(children: ReactNode): boolean {\n const nodes = contentNodes(children)\n return (\n nodes.length > 0 &&\n nodes.every(\n (child) =>\n isValidElement(child) &&\n Boolean(\n (child.type as { [ATTACHMENT_CONTENT]?: boolean })[ATTACHMENT_CONTENT]\n )\n )\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { useBubbleVariant } from \"./context\"\nimport type { TBubbleMessageProps } from \"./types\"\nimport { twBubbleMessageClasses } from \"./utils\"\nimport { containsOnlyAttachments } from \"@/lib/attachment-content\"\n\nexport function BubbleMessage({\n className,\n unstyled,\n children,\n ...props\n}: TBubbleMessageProps): React.ReactElement {\n const variant = useBubbleVariant()\n const bare = unstyled ?? containsOnlyAttachments(children)\n return (\n <div\n className={cn(\n \"gap-y-2 relative flex-col select-none\",\n bare ? \"min-w-0 flex max-w-full\" : twBubbleMessageClasses[variant],\n className\n )}\n data-slot=\"bubble-message\"\n data-unstyled={bare ? \"\" : undefined}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import { Loader2Icon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Spinner({\n className,\n ...props\n}: React.ComponentProps<typeof Loader2Icon>): React.ReactElement {\n return (\n <Loader2Icon\n aria-label=\"Loading\"\n className={cn(\"animate-spin\", className)}\n role=\"status\"\n {...props}\n />\n );\n}\n","import type { GlassOptics } from \"@samasante/liquid-glass\"\n\nexport type TFrostGlassVariant = \"clear\" | \"frosted\" | \"subtle\" | \"liquid\" | \"liquid-refract\"\nexport type TFrostGlassVariantProp = { glassVariant?: TFrostGlassVariant }\nexport const liquidRefractStyles = \"bg-transparent border-0 shadow-none\"\n\n/** Tints only; refraction, frost, and edge lighting belong to the library. */\nexport const glassVariantStyles: Record<TFrostGlassVariant, string> = {\n clear: \"bg-white/25 dark:bg-black/25\",\n frosted: \"bg-white/55 dark:bg-black/35\",\n subtle: \"bg-white/30 dark:bg-white/6\",\n liquid: \"bg-white/10 dark:bg-white/4\",\n \"liquid-refract\": \"bg-white/8 dark:bg-white/4\",\n}\n\nexport const glassVariantOptics: Record<TFrostGlassVariant, Partial<GlassOptics>> = {\n clear: { frost: 2, saturate: 1.9, strength: 0.08 },\n frosted: { frost: 16, saturate: 1.6, strength: 0.08 },\n subtle: { frost: 4, saturate: 1.5, strength: 0.04 },\n liquid: { frost: 4, saturate: 1.8, strength: 0.14 },\n \"liquid-refract\": { frost: 2, saturate: 1.5, strength: 0.14 },\n}\n","\"use client\"\n\nimport { Glass, type GlassOptics } from \"@samasante/liquid-glass\"\nimport { forwardRef, type HTMLAttributes } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { glassVariantOptics, glassVariantStyles, type TFrostGlassVariant } from \"@/lib/glass-variants\"\n\n/** A non-interactive material layer: the host keeps its semantics and layout. */\nexport function GlassSurface({\n glassVariant = \"liquid-refract\",\n optics,\n}: {\n glassVariant?: TFrostGlassVariant\n optics?: Partial<GlassOptics>\n}) {\n return (\n <Glass\n aria-hidden=\"true\"\n data-glass-material=\"samasante\"\n className={cn(\"pointer-events-none\", glassVariantStyles[glassVariant])}\n style={{ position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\", borderRadius: \"inherit\", zIndex: -1 }}\n optics={{ ...glassVariantOptics[glassVariant], ...optics }}\n >\n <span />\n </Glass>\n )\n}\n\nexport type TLiquidGlassProps = HTMLAttributes<HTMLDivElement> & {\n glassVariant?: TFrostGlassVariant\n optics?: Partial<GlassOptics>\n blur?: number\n refraction?: number\n /** @deprecated The library manages displacement map resolution. */\n mapSize?: number\n bezel?: number\n saturation?: number\n}\n\n/** Compatibility adapter for existing consumers; all optics run in the library. */\nexport const LiquidGlass = forwardRef<HTMLDivElement, TLiquidGlassProps>(\n function LiquidGlass({\n glassVariant = \"liquid-refract\", optics, blur, refraction,\n mapSize: _mapSize, bezel, saturation, className, children, ...props\n }, ref) {\n return (\n <div ref={ref} className={cn(\"relative isolate rounded-full\", className)} {...props}>\n <GlassSurface glassVariant={glassVariant} optics={{\n ...(blur !== undefined && { frost: Math.max(0, blur) }),\n ...(refraction !== undefined && { strength: Math.min(1, Math.max(0, refraction / 100)) }),\n ...(bezel !== undefined && { bendWidth: Math.min(1, Math.max(0, bezel / 100)) }),\n ...(saturation !== undefined && { saturate: Math.max(0, saturation) }),\n ...optics,\n }} />\n {children}\n </div>\n )\n }\n)\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Spinner } from \"@/components/ui/spinner\";\nimport { GlassSurface } from \"@/components/ui/glasscn/liquid-glass\";\nimport {\n type TFrostGlassVariant,\n liquidRefractStyles,\n} from \"@/lib/glass-variants\";\n\nexport const buttonVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md border font-medium text-base outline-none transition-[scale,box-shadow,width,height,background-color,border-color] [transition-duration:150ms,150ms,300ms,300ms,150ms,150ms] ease-smooth-out active:scale-99 data-pressed:scale-99 motion-reduce:transition-none motion-reduce:active:scale-100 motion-reduce:data-pressed:scale-100 [&_svg]:transition-transform [&_svg]:duration-150 [&_svg]:ease-smooth-out motion-reduce:[&_svg]:transition-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 data-loading:select-none sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0\",\n {\n compoundVariants: [\n {\n // `link` is inline text, not a control surface: drop the button box so\n // it sits with the surrounding copy instead of riding high in a 32/36px\n // flex box. Both the bare and `sm:` heights have to be reset —\n // tailwind-merge keeps modifier-prefixed classes in a separate group,\n // so a call-site `h-auto` alone still loses to `sm:h-8`. border-0 makes\n // the inline box exactly one line-height so it doesn't grow the line.\n //\n // align-middle is the alignment that holds: an inline-flex box exposes\n // the baseline of its *first* flex item, which here is the always-\n // mounted loading indicator rather than the label, so plain baseline\n // alignment leaves the text ~3px high. `items-baseline` fixes that but\n // then hangs icons 3px above the label. Centering the box lands within\n // ~1px in every state without touching the loading-morph machinery.\n //\n // Icon sizes are excluded; they keep their square hit area.\n class: \"h-auto border-0 px-0 align-middle sm:h-auto\",\n size: [\"xs\", \"sm\", \"default\", \"lg\", \"xl\"],\n variant: \"link\",\n },\n ],\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n variants: {\n size: {\n default: \"h-9 px-[calc(--spacing(3)-1px)] sm:h-8\",\n icon: \"size-9 sm:size-8\",\n \"icon-lg\": \"size-8 sm:size-8\",\n \"icon-sm\": \"size-7 sm:size-6\",\n \"icon-xl\":\n \"size-10 sm:size-9 [&_svg:not([class*='size-'])]:size-5 sm:[&_svg:not([class*='size-'])]:size-4.5\",\n \"icon-xs\":\n \"size-7 rounded-md before:rounded-[calc(var(--radius-md)-1px)] sm:size-6 not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-4 sm:not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 px-[calc(--spacing(3.5)-1px)] sm:h-9\",\n sm: \"h-8 gap-1.5 px-[calc(--spacing(2.5)-1px)] sm:h-7\",\n xl: \"h-11 px-[calc(--spacing(4)-1px)] text-lg sm:h-10 sm:text-base [&_svg:not([class*='size-'])]:size-5 sm:[&_svg:not([class*='size-'])]:size-4.5\",\n xs: \"h-7 gap-1 rounded-md px-[calc(--spacing(2)-1px)] text-sm before:rounded-[calc(var(--radius-md)-1px)] sm:h-6 sm:text-xs [&_svg:not([class*='size-'])]:size-4 sm:[&_svg:not([class*='size-'])]:size-3.5\",\n },\n variant: {\n default:\n \"inset-shadow-[0_1px_--theme(--color-white/16%)] border-primary bg-primary text-primary-foreground shadow-primary/24 shadow-xs hover:bg-primary/90 data-pressed:bg-primary/90 *:data-[slot=button-loading-indicator]:text-primary-foreground [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none disabled:opacity-50!\",\n destructive:\n \"inset-shadow-[0_1px_--theme(--color-white/16%)] border-destructive bg-destructive text-white shadow-destructive/24 shadow-xs hover:bg-destructive/90 data-pressed:bg-destructive/90 *:data-[slot=button-loading-indicator]:text-white [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n \"destructive-outline\":\n \"border-input bg-popover not-dark:bg-clip-padding text-destructive-foreground shadow-xs/5 not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] hover:border-destructive/32 hover:bg-destructive/4 data-pressed:border-destructive/32 data-pressed:bg-destructive/4 *:data-[slot=button-loading-indicator]:text-foreground dark:bg-input/32 dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n ghost:\n \"border-transparent text-foreground hover:bg-accent data-pressed:bg-accent *:data-[slot=button-loading-indicator]:text-foreground\",\n // Base for the glass treatment. The finish itself (blur, tint, bevel)\n // comes from glassVariantStyles keyed by the `glassVariant` prop,\n // which is only accepted when variant is \"glass\".\n glass:\n \"border-transparent text-foreground *:data-[slot=button-loading-indicator]:text-foreground\",\n link: \"border-transparent text-foreground underline-offset-4 hover:underline data-pressed:underline *:data-[slot=button-loading-indicator]:text-foreground\",\n outline:\n \"border-input bg-popover not-dark:bg-clip-padding text-foreground shadow-xs/5 not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] hover:bg-accent/50 data-pressed:bg-accent/50 *:data-[slot=button-loading-indicator]:text-foreground dark:bg-input/32 dark:data-pressed:bg-input/64 dark:hover:bg-input/64 dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/90 data-pressed:bg-secondary/90 *:data-[slot=button-loading-indicator]:text-secondary-foreground [:active,[data-pressed]]:bg-secondary/80\",\n },\n },\n },\n);\n\ntype TButtonVariant = VariantProps<typeof buttonVariants>[\"variant\"];\n\ninterface IButtonBaseProps extends useRender.ComponentProps<\"button\"> {\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n loading?: boolean;\n /**\n * Emit cuelume press/release attributes. Inert unless the app opts into\n * interaction sound by calling `bindSounds()` once.\n */\n sound?: boolean;\n}\n\nexport type TButtonProps = IButtonBaseProps &\n (\n | {\n variant: \"glass\";\n /** Glass finish. Only available when `variant` is \"glass\". */\n glassVariant?: TFrostGlassVariant;\n }\n | {\n variant?: Exclude<TButtonVariant, \"glass\">;\n glassVariant?: never;\n }\n );\n\nexport function Button({\n className,\n variant,\n size,\n render,\n children,\n loading = false,\n disabled: disabledProp,\n glassVariant,\n sound = true,\n ...props\n}: TButtonProps): React.ReactElement {\n const isDisabled: boolean = Boolean(loading || disabledProp);\n const typeValue: React.ButtonHTMLAttributes<HTMLButtonElement>[\"type\"] =\n render ? undefined : \"button\";\n\n const resolvedGlassVariant: TFrostGlassVariant | undefined =\n variant === \"glass\" ? (glassVariant ?? \"liquid-refract\") : undefined;\n\n\n // Icon-only sizes overlay the spinner on top of the (hidden) icon; text\n // sizes keep the label visible and show the spinner inline before it.\n const isIconSize = (size ?? \"default\").startsWith(\"icon\");\n\n const defaultProps = {\n children: (\n <>\n {resolvedGlassVariant && <GlassSurface glassVariant={resolvedGlassVariant} />}\n {!isIconSize && (\n // Always mounted so the button width morphs as the slot collapses\n // and expands; the closed state cancels the flex gap (which varies\n // per size) with a matching negative margin.\n <span\n aria-hidden={loading ? undefined : true}\n data-slot=\"button-loading-indicator\"\n className={cn(\n \"pointer-events-none inline-flex shrink-0 items-center overflow-hidden transition-[max-width,margin-inline-start,opacity,filter] duration-300 ease-smooth-out motion-reduce:transition-none\",\n loading\n ? \"max-w-6\"\n : cn(\n \"max-w-0 opacity-0 blur-small\",\n size === \"xs\" ? \"-ms-1\" : size === \"sm\" ? \"-ms-1.5\" : \"-ms-2\",\n ),\n )}\n >\n <Spinner className={loading ? undefined : \"animate-none\"} />\n </span>\n )}\n {children}\n {loading && isIconSize && (\n <Spinner\n className=\"pointer-events-none absolute\"\n data-slot=\"button-loading-indicator\"\n />\n )}\n </>\n ),\n className: cn(\n buttonVariants({ size, variant }),\n // Label + icon buttons: icons do a gentle scale bump on hover. The\n // class-based :not() skips the spinner (animate-spin / animate-none).\n !isIconSize &&\n \"hover:[&_svg:not([class*='animate-'])]:scale-101 motion-reduce:hover:[&_svg]:scale-100\",\n loading && isIconSize && \"data-loading:text-transparent\",\n resolvedGlassVariant && cn(\"isolate\", liquidRefractStyles),\n className,\n ),\n \"aria-disabled\": loading || undefined,\n \"data-cuelume-press\": sound ? \"\" : undefined,\n \"data-cuelume-release\": sound ? \"\" : undefined,\n \"data-loading\": loading ? \"\" : undefined,\n \"data-glass-variant\": resolvedGlassVariant,\n \"data-slot\": \"button\",\n disabled: isDisabled,\n type: typeValue,\n };\n\n const element = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(defaultProps, props),\n render,\n });\n\n return element;\n}\n","\"use client\";\n\nimport { PreviewCard as PreviewCardPrimitive } from \"@base-ui/react/preview-card\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const PreviewCard: typeof PreviewCardPrimitive.Root =\n PreviewCardPrimitive.Root;\n\nexport function PreviewCardTrigger({\n ...props\n}: PreviewCardPrimitive.Trigger.Props): React.ReactElement {\n return (\n <PreviewCardPrimitive.Trigger data-slot=\"preview-card-trigger\" {...props} />\n );\n}\n\nexport function PreviewCardPopup({\n className,\n children,\n align = \"center\",\n sideOffset = 4,\n anchor,\n portalProps,\n ...props\n}: PreviewCardPrimitive.Popup.Props & {\n align?: PreviewCardPrimitive.Positioner.Props[\"align\"];\n sideOffset?: PreviewCardPrimitive.Positioner.Props[\"sideOffset\"];\n anchor?: PreviewCardPrimitive.Positioner.Props[\"anchor\"];\n portalProps?: PreviewCardPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <PreviewCardPrimitive.Portal {...portalProps}>\n <PreviewCardPrimitive.Positioner\n align={align}\n anchor={anchor}\n className=\"z-50\"\n data-slot=\"preview-card-positioner\"\n sideOffset={sideOffset}\n >\n <PreviewCardPrimitive.Popup\n className={cn(\n \"relative flex w-64 origin-(--transform-origin) text-balance rounded-lg border bg-popover not-dark:bg-clip-padding p-4 text-popover-foreground text-sm shadow-lg/5 transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"preview-card-content\"\n {...props}\n >\n {children}\n </PreviewCardPrimitive.Popup>\n </PreviewCardPrimitive.Positioner>\n </PreviewCardPrimitive.Portal>\n );\n}\n\nexport {\n PreviewCardPrimitive,\n PreviewCard as HoverCard,\n PreviewCardTrigger as HoverCardTrigger,\n PreviewCardPopup as HoverCardContent,\n};\n","\"use client\"\n\nimport { Link2 } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { IReferenceProps } from \"./types\";\nimport { Button } from \"@/components/ui/button\";\nimport { PreviewCard, PreviewCardPopup, PreviewCardTrigger } from \"@/components/ui/preview-card\"\n\n/**\n * \"Reference 1 ↗\" — a translucent tag pointing at the node, passage or\n * source a suggestion is grounded in. Follows the card it sits in.\n */\nexport function Reference({\n href,\n onClick,\n className,\n children,\n preview,\n ...props\n}: IReferenceProps): React.ReactElement {\n\n // The rest is forwarded: `ReferenceProps` is anchor props, so `target`,\n // `rel`, `aria-label` and friends type-check and have to land somewhere.\n const chip = (\n <Button {...props} variant=\"glass\" glassVariant=\"liquid\" data-slot=\"reference-chip\" className={cn(\"inline-flex border border-foreground/10 shadow-none! bg-input/30 h-6.5! pl-2 group\", className)} onClick={onClick} render={href ? <a href={href} /> : undefined}>\n <Link2 size={14} className=\"-rotate-45 stroke-amber-600 dark:stroke-amber-400\" />\n <span className=\"truncate text-xs text-foreground/90 group-hover:underline\">{children}</span>\n </Button>\n )\n if (preview === undefined || preview === null) return chip\n return (\n <PreviewCard>\n <PreviewCardTrigger delay={300} render={chip} />\n <PreviewCardPopup className=\"w-72 flex-col gap-1.5 p-3\" data-slot=\"reference-preview\">\n <span className=\"truncate text-[11px] font-semibold leading-4 text-muted-foreground\">{children}</span>\n <div className=\"border-l-2 border-amber-500/70 pl-2.5 text-xs leading-4 text-foreground/90\">{preview}</div>\n </PreviewCardPopup>\n </PreviewCard>\n )\n}\n","import type { Transition, Variants } from \"motion/react\"\n\nexport const EASE_OUT = [0.16, 1, 0.3, 1] as const;\nexport const EASE_IN_OUT = [0.77, 0, 0.175, 1] as const;\nexport const EASE_DRAWER = [0.32, 0.72, 0, 1] as const;\n\n/** CSS string form of EASE_OUT for inline style transitions. */\nexport const EASE_OUT_CSS = \"cubic-bezier(0.16, 1, 0.3, 1)\";\nexport const EASE_IN_OUT_MOTION = { type: \"spring\", stiffness: 300, damping: 30, mass: 0.6 } as const;\n\n/** Press feedback on buttons and other tappable surfaces. */\nexport const SPRING_PRESS = {\n type: \"spring\",\n stiffness: 500,\n damping: 30,\n mass: 0.6,\n} as const;\n\n/** Content swaps — label/icon slots trading places inside a control. */\nexport const SPRING_SWAP = {\n type: \"spring\",\n stiffness: 460,\n damping: 30,\n mass: 0.55,\n} as const;\n\n/** Overlay panel entrances — modals and sheets summoned by pointer. */\nexport const SPRING_PANEL = {\n type: \"spring\",\n stiffness: 420,\n damping: 40,\n mass: 0.5,\n} as const;\n\n/** Shared-layout glides — pills, indicators and panels morphing between positions. */\nexport const SPRING_LAYOUT = {\n type: \"spring\",\n stiffness: 360,\n damping: 32,\n mass: 0.6,\n} as const;\n\n/** Cursor-follow physics for decorative mouse tracking (magnetic, tilt, dock). */\nexport const SPRING_MOUSE = {\n stiffness: 200,\n damping: 15,\n mass: 0.3,\n} as const;\n\n/** Dragged handles and fills (sliders) — critically damped `useSpring` config,\n * so the value follows the pointer butterily and never rebounds off an end. */\nexport const SPRING_GLIDE = {\n stiffness: 700,\n damping: 50,\n mass: 0.5,\n} as const;\n\n\n// This needs a softer layout spring than the app defaults, so the overflow group\n// stays visually attached to the toggle while entering and leaving.\nexport const SHELL_TRANSITION: Transition = {\n type: \"spring\",\n stiffness: 220,\n damping: 17,\n mass: 0.85,\n};\n\nexport const BOUNCE_IN_OUT: Transition = {\n type: \"spring\",\n stiffness: 300,\n damping: 20,\n mass: 0.50,\n} as const;\n\nexport const ICON_VARIANTS: Variants = {\n hidden: { opacity: 0, filter: \"blur(3px)\" },\n visible: {\n opacity: 1,\n filter: \"blur(0px)\",\n transition: { duration: 0.18, ease: EASE_OUT },\n },\n exit: {\n opacity: 0,\n filter: \"blur(3px)\",\n transition: { duration: 0.18, ease: EASE_OUT },\n },\n};\n\n/** Strong ease-out for pop-ins, row entrances and panel expands. Matches `--ease-out-strong`. */\nexport const EASE_OUT_STRONG = [0.23, 1, 0.32, 1] as const;\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n type TFrostGlassVariant,\n} from \"@/lib/glass-variants\"\nimport { cn } from \"@/lib/utils\"\nimport { LiquidGlass } from \"./liquid-glass\"\n\nconst glassSidebarVariableStyles: Record<TFrostGlassVariant, string> = {\n clear: [\n \"[--sidebar:rgba(255,255,255,0.18)]\",\n \"[--sidebar-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-accent:rgba(255,255,255,0.48)]\",\n \"[--sidebar-accent-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-border:rgba(255,255,255,0.34)]\",\n \"[--sidebar-ring:rgba(255,255,255,0.38)]\",\n \"dark:[--sidebar:rgba(0,0,0,0.28)]\",\n \"dark:[--sidebar-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-accent:rgba(255,255,255,0.1)]\",\n \"dark:[--sidebar-accent-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-border:rgba(255,255,255,0.12)]\",\n \"dark:[--sidebar-ring:rgba(255,255,255,0.16)]\",\n ].join(\" \"),\n frosted: [\n \"[--sidebar:rgba(255,255,255,0.4)]\",\n \"[--sidebar-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-accent:rgba(255,255,255,0.62)]\",\n \"[--sidebar-accent-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-border:rgba(255,255,255,0.3)]\",\n \"[--sidebar-ring:rgba(255,255,255,0.32)]\",\n \"dark:[--sidebar:rgba(0,0,0,0.38)]\",\n \"dark:[--sidebar-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-accent:rgba(255,255,255,0.14)]\",\n \"dark:[--sidebar-accent-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-border:rgba(255,255,255,0.1)]\",\n \"dark:[--sidebar-ring:rgba(255,255,255,0.14)]\",\n ].join(\" \"),\n subtle: [\n \"[--sidebar:rgba(255,255,255,0.14)]\",\n \"[--sidebar-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-accent:rgba(255,255,255,0.28)]\",\n \"[--sidebar-accent-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-border:rgba(0,0,0,0.05)]\",\n \"[--sidebar-ring:rgba(255,255,255,0.28)]\",\n \"dark:[--sidebar:rgba(255,255,255,0.05)]\",\n \"dark:[--sidebar-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-accent:rgba(255,255,255,0.08)]\",\n \"dark:[--sidebar-accent-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-border:rgba(255,255,255,0.08)]\",\n \"dark:[--sidebar-ring:rgba(255,255,255,0.12)]\",\n ].join(\" \"),\n liquid: [\n \"[--sidebar:rgba(255,255,255,0.22)]\",\n \"[--sidebar-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-accent:rgba(255,255,255,0.55)]\",\n \"[--sidebar-accent-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-border:rgba(255,255,255,0.42)]\",\n \"[--sidebar-ring:rgba(255,255,255,0.45)]\",\n \"dark:[--sidebar:rgba(255,255,255,0.06)]\",\n \"dark:[--sidebar-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-accent:rgba(255,255,255,0.12)]\",\n \"dark:[--sidebar-accent-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-border:rgba(255,255,255,0.16)]\",\n \"dark:[--sidebar-ring:rgba(255,255,255,0.20)]\",\n ].join(\" \"),\n \"liquid-refract\": [\n \"[--sidebar:rgba(255,255,255,0.18)]\",\n \"[--sidebar-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-accent:rgba(255,255,255,0.48)]\",\n \"[--sidebar-accent-foreground:oklch(0.145_0_0)]\",\n \"[--sidebar-border:rgba(255,255,255,0.34)]\",\n \"[--sidebar-ring:rgba(255,255,255,0.38)]\",\n \"dark:[--sidebar-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-accent:rgba(255,255,255,0.12)]\",\n \"dark:[--sidebar-accent-foreground:oklch(0.985_0_0)]\",\n \"dark:[--sidebar-border:rgba(255,255,255,0.15)]\",\n \"dark:[--sidebar-ring:rgba(255,255,255,0.18)]\",\n ].join(\" \"),\n}\n\ntype TGlassSidebarProps = React.ComponentProps<typeof LiquidGlass>\n\nfunction GlassContainer({ glassVariant = \"liquid-refract\", className, ...props }: TGlassSidebarProps) {\n return <LiquidGlass\n glassVariant={glassVariant}\n className={cn(\"rounded-[1.75rem]\", glassSidebarVariableStyles[glassVariant], className)}\n {...props}\n />\n}\n\nexport { GlassContainer, glassSidebarVariableStyles }\nexport type { TFrostGlassVariant } from \"@/lib/glass-variants\"\n","\"use client\"\n\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport type React from \"react\"\nimport { type TFrostGlassVariant } from \"@/lib/glass-variants\"\nimport { cn } from \"@/lib/utils\"\nimport { GlassContainer } from \"@/components/ui/glasscn/glass-container\"\n\n/** Layout, sizing and transition — shared by every popup variant. */\nconst popupStructuralClasses =\n \"relative flex h-(--popup-height,auto) w-(--popup-width,auto) origin-(--transform-origin) outline-none transition-[width,height,scale,opacity] has-data-[slot=calendar]:rounded-xl data-starting-style:scale-98 data-starting-style:opacity-0\"\n\n/**\n * Neutral base for the glass treatment — the finish itself (blur, tint,\n * bevel) comes from the library material keyed by `glassVariant`, which is\n * only accepted when `variant` is \"glass\".\n */\nconst popupGlassBaseClasses =\n \"border-transparent! text-foreground bg-transparent!\"\n\n/**\n * Every finish except \"liquid-refract\". That one delegates its look to the\n * `LiquidGlass` wrapper, whose `overflow-hidden` box measures 0px tall around\n * an absolutely-sized popup and clips it away entirely — so a popup offers the\n * four pure-class finishes only, and defaults to \"frosted\" rather than to\n * Button's \"liquid-refract\".\n */\ntype TPopoverGlassVariant = Exclude<TFrostGlassVariant, \"liquid-refract\">\n\nexport const PopoverCreateHandle: typeof PopoverPrimitive.createHandle =\n PopoverPrimitive.createHandle\n\nexport const Popover: typeof PopoverPrimitive.Root = PopoverPrimitive.Root\n\nexport function PopoverTrigger({\n className,\n children,\n ...props\n}: PopoverPrimitive.Trigger.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Trigger\n className={className}\n data-slot=\"popover-trigger\"\n {...props}\n >\n {children}\n </PopoverPrimitive.Trigger>\n )\n}\n\ntype TPopoverPopupBaseProps = PopoverPrimitive.Popup.Props & {\n portalProps?: PopoverPrimitive.Portal.Props\n side?: PopoverPrimitive.Positioner.Props[\"side\"]\n align?: PopoverPrimitive.Positioner.Props[\"align\"]\n sideOffset?: PopoverPrimitive.Positioner.Props[\"sideOffset\"]\n alignOffset?: PopoverPrimitive.Positioner.Props[\"alignOffset\"]\n tooltipStyle?: boolean\n anchor?: PopoverPrimitive.Positioner.Props[\"anchor\"]\n}\n\nexport type TPopoverGlassProps = TPopoverPopupBaseProps & {\n /** Glass finish. Either \"frosted\" or \"glass\". Defaults to \"frosted\". */\n glassVariant?: TPopoverGlassVariant\n}\n\nexport function PopoverGlass({\n children,\n className,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 0,\n alignOffset = 0,\n anchor,\n portalProps,\n glassVariant,\n ...props\n}: TPopoverGlassProps): React.ReactElement {\n const resolvedGlassVariant: TPopoverGlassVariant = glassVariant ?? \"frosted\"\n\n return (\n <PopoverPrimitive.Portal {...portalProps} keepMounted>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom,transform] animate-bezier-sine-in-out animate-duration-fast data-instant:transition-none\"\n data-slot=\"popover-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <PopoverPrimitive.Popup\n className={cn(\n popupStructuralClasses,\n popupGlassBaseClasses,\n className\n )}\n\n data-glass-variant={resolvedGlassVariant}\n data-slot=\"popover-popup\"\n {...props}\n >\n <PopoverPrimitive.Arrow className=\"relative block w-2.5 h-2 overflow-clip transition-[left] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:top-[-6px] data-[side=left]:right-[-9px] data-[side=left]:rotate-90 data-[side=right]:left-[-9px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 before:content-[''] before:absolute before:bottom-0 before:left-1/2 before:w-[calc(6px*sqrt(2))] before:h-[calc(6px*sqrt(2))] before:bg-background/80 before:[transform:translate(-50%,50%)_rotate(45deg)]\" />\n \n <PopoverPrimitive.Viewport\n className={cn(\n \"relative size-full max-h-(--available-height) px-(--viewport-inline-padding) [--viewport-inline-padding:--spacing(4)] has-data-[slot=calendar]:p-2 **:data-current:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-current:opacity-100 **:data-current:transition-opacity **:data-current:data-ending-style:opacity-0 data-instant:transition-none **:data-previous:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:opacity-100 **:data-previous:transition-opacity **:data-previous:data-ending-style:opacity-0 **:data-current:data-starting-style:opacity-0 **:data-previous:data-starting-style:opacity-0\",\n \"px-0\"\n )}\n data-slot=\"popover-viewport\"\n render={\n <GlassContainer\n optics={{ strength: 0.08, bendWidth: 0.5, frost: 10, saturate: 1 }}\n className={cn(\"shadow-md shadow-black/10 rounded-lg\")}\n glassVariant={resolvedGlassVariant}\n />\n }\n >\n {children}\n </PopoverPrimitive.Viewport>\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n )\n}\n\nexport function PopoverClose({\n ...props\n}: PopoverPrimitive.Close.Props): React.ReactElement {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />\n}\n\nexport function PopoverTitle({\n className,\n ...props\n}: PopoverPrimitive.Title.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Title\n className={cn(\"text-lg leading-none font-semibold\", className)}\n data-slot=\"popover-title\"\n {...props}\n />\n )\n}\n\nexport function PopoverDescription({\n className,\n ...props\n}: PopoverPrimitive.Description.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Description\n className={cn(\"text-sm text-muted-foreground\", className)}\n data-slot=\"popover-description\"\n {...props}\n />\n )\n}\n\nexport { PopoverPrimitive, PopoverGlass as PopoverContent }\n","\"use client\";\n\nimport { Toolbar as ToolbarPrimitive } from \"@base-ui/react/toolbar\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Toolbar({\n className,\n ...props\n}: ToolbarPrimitive.Root.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Root\n className={cn(\n \"relative flex gap-2 rounded-xl border bg-card not-dark:bg-clip-padding p-1 text-card-foreground\",\n className,\n )}\n data-slot=\"toolbar\"\n {...props}\n />\n );\n}\n\nexport function ToolbarButton({\n className,\n ...props\n}: ToolbarPrimitive.Button.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Button\n className={cn(className)}\n \n data-slot=\"toolbar-button\"\n {...props}\n />\n );\n}\n\nexport function ToolbarLink({\n className,\n ...props\n}: ToolbarPrimitive.Link.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Link\n className={cn(className)}\n data-slot=\"toolbar-link\"\n {...props}\n />\n );\n}\n\nexport function ToolbarInput({\n className,\n ...props\n}: ToolbarPrimitive.Input.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Input\n className={cn(className)}\n data-slot=\"toolbar-input\"\n {...props}\n />\n );\n}\n\nexport function ToolbarGroup({\n className,\n ...props\n}: ToolbarPrimitive.Group.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Group\n className={cn(\"flex items-center gap-1\", className)}\n data-slot=\"toolbar-group\"\n {...props}\n />\n );\n}\n\nexport function ToolbarSeparator({\n className,\n ...props\n}: ToolbarPrimitive.Separator.Props): React.ReactElement {\n return (\n <ToolbarPrimitive.Separator\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:my-0.5 data-[orientation=vertical]:my-1.5 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:not-[[class^='h-']]:not-[[class*='_h-']]:self-stretch\",\n className,\n )}\n data-slot=\"toolbar-separator\"\n {...props}\n />\n );\n}\n\nexport { ToolbarPrimitive };\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const TooltipCreateHandle: typeof TooltipPrimitive.createHandle =\n TooltipPrimitive.createHandle;\n\nexport const TooltipProvider: typeof TooltipPrimitive.Provider =\n TooltipPrimitive.Provider;\n\nexport const Tooltip: typeof TooltipPrimitive.Root = TooltipPrimitive.Root;\n\nexport function TooltipTrigger(\n props: TooltipPrimitive.Trigger.Props,\n): React.ReactElement {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nexport function TooltipPopup({\n className,\n align = \"center\",\n sideOffset = 4,\n side = \"top\",\n anchor,\n children,\n portalProps,\n ...props\n}: TooltipPrimitive.Popup.Props & {\n align?: TooltipPrimitive.Positioner.Props[\"align\"];\n side?: TooltipPrimitive.Positioner.Props[\"side\"];\n sideOffset?: TooltipPrimitive.Positioner.Props[\"sideOffset\"];\n anchor?: TooltipPrimitive.Positioner.Props[\"anchor\"];\n portalProps?: TooltipPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <TooltipPrimitive.Portal {...portalProps}>\n <TooltipPrimitive.Positioner\n align={align}\n anchor={anchor}\n className=\"z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom,transform] data-instant:transition-none\"\n data-slot=\"tooltip-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n className={cn(\n \"relative flex h-(--popup-height,auto) w-(--popup-width,auto) origin-(--transform-origin) text-balance rounded-md border bg-popover not-dark:bg-clip-padding text-popover-foreground text-xs shadow-md/5 transition-[width,height,scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 data-instant:duration-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"tooltip-popup\"\n {...props}\n >\n <TooltipPrimitive.Viewport\n className=\"relative size-full overflow-clip px-(--viewport-inline-padding) py-1 [--viewport-inline-padding:--spacing(2)] data-instant:transition-none **:data-current:data-ending-style:opacity-0 **:data-current:data-starting-style:opacity-0 **:data-previous:data-ending-style:opacity-0 **:data-previous:data-starting-style:opacity-0 **:data-current:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:truncate **:data-current:opacity-100 **:data-previous:opacity-100 **:data-current:transition-opacity **:data-previous:transition-opacity\"\n data-slot=\"tooltip-viewport\"\n >\n {children}\n </TooltipPrimitive.Viewport>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { TooltipPrimitive, TooltipPopup as TooltipContent };\n","import { createContext, useMemo, useState } from \"react\"\nimport { Tooltip } from \"@base-ui/react/tooltip\"\nimport type {\n TActionBarSegment,\n TActionEntry,\n TActionItemsByGroup,\n TActionKey,\n TActionMap,\n IEmojiActionBarProps,\n} from \"./types\"\nimport type { Emoji } from \"frimousse\"\n\n// Each toolbar owns its handle; a shared handle cannot control multiple roots.\nexport const ActionTooltipContext = createContext<\n Tooltip.Handle<string> | undefined\n>(undefined)\n\nexport const isSeparator = (key: string): boolean => key.includes(\"separator\")\n\n/**\n * Splits `actions` into render-ready segments at every `separator-*` key.\n *\n * Order comes from the map's insertion order (see `ActionMap`) — the grouping\n * is positional, so actions written before a separator group ahead of it.\n * Empty groups are dropped, which is what keeps a leading, trailing or\n * doubled separator from rendering a `ToolbarGroup` with nothing in it.\n */\nexport const useActionBar = ({\n actions,\n}: {\n actions: TActionMap<TActionKey>\n}) => {\n return useMemo(() => {\n const entries = Object.entries(actions) as TActionEntry[]\n const segments: TActionBarSegment[] = []\n let open: TActionEntry[] = []\n\n const closeGroup = (): void => {\n if (open.length === 0) return\n segments.push({ type: \"group\", key: `group-${open[0][0]}`, items: open })\n open = []\n }\n\n for (const entry of entries) {\n const [key, Item] = entry\n if (isSeparator(key)) {\n closeGroup()\n segments.push({ type: \"separator\", key, Separator: Item })\n continue\n }\n open.push(entry)\n }\n closeGroup()\n\n const groups = segments.filter((s) => s.type === \"group\")\n\n // A bar with no separators renders flat — `ToolbarGroup` is only added\n // once the caller has actually asked for grouping.\n const hasGroups = segments.some((s) => s.type === \"separator\")\n\n const actionItemsByGroup: TActionItemsByGroup = Object.fromEntries(\n groups.map((group) => [group.key, group.items])\n )\n\n return {\n segments,\n entries,\n hasGroups,\n groupsCount: groups.length,\n separatorCount: segments.length - groups.length,\n actionItemsByGroup,\n }\n }, [actions])\n}\n\n/**\n * The quick row. frimousse has no way to render a subset — `EmojiPicker.Root`\n * takes `columns`/`skinTone`/`locale`/`emojiVersion`/`emojibaseUrl`/`sticky`\n * and nothing else, and its list is virtualized on fixed-height rows, so a\n * custom `Emoji` component that returns null leaves holes rather than a short\n * row. A fixed list is the only way to show just these, and it costs no\n * network request — the CDN fetch only happens if \"More\" is opened.\n */\nexport const QUICK_REACTIONS: readonly Emoji[] = [\n { emoji: \"❤️\", label: \"heart\" },\n { emoji: \"👍\", label: \"thumbs up\" },\n { emoji: \"😊\", label: \"smiling face\" },\n { emoji: \"😂\", label: \"face with tears of joy\" },\n { emoji: \"🎉\", label: \"party popper\" },\n { emoji: \"🙏\", label: \"folded hands\" },\n]\n\n/**\n * Hook for managing the emoji picker state and actions.\n *\n * @param props - The emoji picker props.\n * @returns The emoji picker state and actions.\n *\n * @example\n * ```tsx\n * const { isFullPicker, quickReactions, actions, togglePicker, selectEmoji } = useEmojiPicker({ onEmojiSelect });\n * ```\n */\nexport const useEmojiPicker = ({\n onEmojiSelect,\n reactions,\n hideMore,\n}: IEmojiActionBarProps) => {\n const [isFullPicker, setShowAll] = useState(false)\n\n // Toggles the picker between quick reactions and the full picker.\n const togglePicker = () => setShowAll((previous) => !previous)\n /**\n * Reports the pick and folds the full picker back to the quick row. The bar\n * lives inside a `keepMounted` popover, so it is never unmounted on close —\n * without this reset the next open would still show the full picker.\n */\n const selectEmoji = (emoji: Emoji): void => {\n setShowAll(false)\n onEmojiSelect?.(emoji)\n }\n // The quick reactions to display.\n const quickReactions = reactions ?? QUICK_REACTIONS\n const actions = useMemo(() => {\n if (hideMore) return quickReactions\n return [\n ...quickReactions,\n { emoji: \"Separator\", label: \"separator\" },\n { emoji: \"More\", label: \"More emoji\" },\n ]\n }, [quickReactions, hideMore])\n\n return {\n isFullPicker,\n quickReactions,\n actions,\n togglePicker,\n selectEmoji,\n }\n}\n","import { ToolbarButton, ToolbarSeparator } from \"@/components/ui/toolbar\"\nimport type { IActionButtonProps } from \"./types\"\nimport { TooltipTrigger } from \"@/components/ui/tooltip\"\nimport { useContext } from \"react\"\nimport { ActionTooltipContext } from \"./utils\"\nimport type { ToolbarSeparatorProps } from \"@base-ui/react\"\n\nexport function Action({\n tooltip,\n action,\n Icon,\n}: Omit<IActionButtonProps<string>, \"children\">) {\n const tooltipHandle = useContext(ActionTooltipContext)\n return (\n <TooltipTrigger\n handle={tooltipHandle}\n payload={tooltip}\n // The icon is aria-hidden, so without this the button has no accessible\n // name at all — `data-tooltip` is not exposed to assistive tech.\n render={\n <ToolbarButton\n aria-label={tooltip}\n data-tooltip={tooltip}\n onClick={action}\n />\n }\n >\n {\"emoji\" in Icon ? (\n <span>{Icon.emoji}</span>\n ) : (\n <Icon size={18} aria-hidden=\"true\" />\n )}\n </TooltipTrigger>\n )\n}\n\n/**\n * Group boundary. Pass it under a `separator-*` key in `actions` and the bar\n * wraps the runs of actions either side of it in their own `ToolbarGroup`.\n */\nexport function Separator(props: ToolbarSeparatorProps) {\n return <ToolbarSeparator orientation=\"vertical\" {...props} />\n}\n\n/**\n * An action labelled by an emoji glyph rather than a Lucide icon. The glyph is\n * `aria-hidden` — `label` is the accessible name, so a screen reader reads\n * \"thumbs up\" rather than announcing the character.\n */\nexport function EmojiAction({\n emoji,\n label,\n action,\n}: {\n emoji: string\n label: string\n action: () => void\n}) {\n const tooltipHandle = useContext(ActionTooltipContext)\n return (\n <TooltipTrigger\n handle={tooltipHandle}\n payload={label}\n render={\n <ToolbarButton\n aria-label={label}\n className=\"size-8 text-base hover:bg-black/6 dark:hover:bg-white/10 cursor-pointer rounded-full leading-none outline-0! transition-[background-color,scale] duration-150 ease-smooth-out focus-visible:bg-transparent active:scale-90 motion-reduce:transition-none motion-reduce:active:scale-100\"\n data-emoji={emoji}\n data-tooltip={label}\n onClick={action}\n />\n }\n >\n <span aria-hidden=\"true\">{emoji}</span>\n </TooltipTrigger>\n )\n}\n","\"use client\"\n\nimport {\n Toolbar as ToolbarPrimitive,\n ToolbarGroup,\n} from \"@/components/ui/toolbar\"\nimport { useState } from \"react\"\nimport {\n Tooltip,\n TooltipCreateHandle,\n TooltipPopup,\n} from \"@/components/ui/tooltip\"\nimport { cn } from \"@/lib/utils\"\nimport { ActionTooltipContext, useActionBar } from \"./utils\"\nimport type { IActionBarProps } from \"./types\"\n\n/**\n * Toolbar chrome. \"default\" keeps the bordered card surface; \"ghost\" and\n * \"glass\" drop it so the bar can sit inside a surface that already paints one\n * — a `PopoverGlass variant=\"glass\"`, for instance.\n */\nconst toolbarVariants = {\n default: \"border-none bg-transparent backdrop-blur-none!\",\n ghost: \"border-0 bg-transparent! shadow-none\",\n glass: \"border-0 bg-transparent! shadow-sm shadow-black\",\n} as const\n\nexport default function Toolbar({\n id,\n actions,\n variant = \"default\",\n className,\n}: IActionBarProps) {\n const { segments, entries, hasGroups } = useActionBar({ actions })\n const [tooltipHandle] = useState(() => TooltipCreateHandle<string>())\n\n return (\n <ActionTooltipContext value={tooltipHandle}>\n <ToolbarPrimitive\n className={cn(toolbarVariants[variant], className)}\n data-slot=\"action-bar\"\n data-variant={variant}\n id={id}\n >\n {hasGroups\n ? segments.map((segment) =>\n segment.type === \"separator\" ? (\n <segment.Separator key={segment.key} />\n ) : (\n <ToolbarGroup key={segment.key}>\n {segment.items.map(([key, Action]) => (\n <Action key={key} />\n ))}\n </ToolbarGroup>\n )\n )\n : entries.map(([key, Action]) => <Action key={key} />)}\n <Tooltip handle={tooltipHandle}>\n {({ payload, ...props }) => (\n <TooltipPopup {...props}>{payload}</TooltipPopup>\n )}\n </Tooltip>\n </ToolbarPrimitive>\n </ActionTooltipContext>\n )\n}\n","\"use client\"\n\nimport {\n type EmojiPickerListCategoryHeaderProps,\n type EmojiPickerListEmojiProps,\n type EmojiPickerListRowProps,\n EmojiPicker as EmojiPickerPrimitive,\n} from \"frimousse\"\nimport { LoaderIcon, SearchIcon } from \"lucide-react\"\nimport type * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction EmojiPicker({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Root>) {\n return (\n <EmojiPickerPrimitive.Root\n className={cn(\n \"isolate flex h-full w-fit flex-col text-popover-foreground\",\n className\n )}\n data-slot=\"emoji-picker\"\n {...props}\n />\n )\n}\n\nfunction EmojiPickerSearch({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Search>) {\n return (\n <div\n className={cn(\"flex h-10 items-center gap-2 p-4\", className)}\n data-slot=\"emoji-picker-search-wrapper\"\n >\n <EmojiPickerPrimitive.Search\n className=\"flex h-10 w-full rounded-md bg-transparent px-1.5 py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n data-slot=\"emoji-picker-search\"\n {...props}\n />\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </div>\n )\n}\n\nfunction EmojiPickerRow({ children, ...props }: EmojiPickerListRowProps) {\n return (\n <div {...props} className=\"scroll-py-3 px-1\" data-slot=\"emoji-picker-row\">\n {children}\n </div>\n )\n}\n\nfunction EmojiPickerEmoji({\n emoji,\n className,\n ...props\n}: EmojiPickerListEmojiProps) {\n return (\n <button\n {...props}\n className={cn(\n \"flex size-8 items-center justify-center rounded-full text-xl data-[active]:bg-accent\",\n className\n )}\n data-slot=\"emoji-picker-emoji\"\n >\n {emoji.emoji}\n </button>\n )\n}\n\nfunction EmojiPickerCategoryHeader({\n category,\n ...props\n}: EmojiPickerListCategoryHeaderProps) {\n return (\n <div\n {...props}\n className=\"block rounded-md border border-border font-medium bg-background/60 px-2.5 py-1.5 text-xs text-center leading-none text-secondary-foreground shadow-md shadow-black/10 backdrop-blur-md backdrop-brightness-80\"\n data-slot=\"emoji-picker-category-header\"\n >\n {category.label}\n </div>\n )\n}\n\nfunction EmojiPickerContent({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Viewport>) {\n return (\n <EmojiPickerPrimitive.Viewport\n className={cn(\"relative flex-1 outline-hidden\", className)}\n data-slot=\"emoji-picker-viewport\"\n {...props}\n >\n <EmojiPickerPrimitive.Loading\n className=\"absolute inset-0 flex items-center justify-center text-muted-foreground\"\n data-slot=\"emoji-picker-loading\"\n >\n <LoaderIcon className=\"size-4 animate-spin\" />\n </EmojiPickerPrimitive.Loading>\n <EmojiPickerPrimitive.Empty\n className=\"absolute inset-0 flex items-center justify-center text-sm text-muted-foreground\"\n data-slot=\"emoji-picker-empty\"\n >\n No emoji found.\n </EmojiPickerPrimitive.Empty>\n <EmojiPickerPrimitive.List\n className=\"px-2 select-none\"\n components={{\n Row: EmojiPickerRow,\n Emoji: EmojiPickerEmoji,\n CategoryHeader: EmojiPickerCategoryHeader,\n }}\n data-slot=\"emoji-picker-list\"\n />\n </EmojiPickerPrimitive.Viewport>\n )\n}\n\nfunction EmojiPickerFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"flex w-full max-w-(--frimousse-viewport-width) min-w-0 items-center gap-1 border-t p-2\",\n className\n )}\n data-slot=\"emoji-picker-footer\"\n {...props}\n >\n <EmojiPickerPrimitive.ActiveEmoji>\n {({ emoji }) =>\n emoji ? (\n <>\n <div className=\"flex size-7 flex-none items-center justify-center text-lg\">\n {emoji.emoji}\n </div>\n <span className=\"truncate text-xs text-secondary-foreground\">\n {emoji.label}\n </span>\n </>\n ) : (\n <span className=\"ml-1.5 flex h-7 items-center truncate text-xs text-muted-foreground\">\n Select an emoji…\n </span>\n )\n }\n </EmojiPickerPrimitive.ActiveEmoji>\n </div>\n )\n}\n\nexport { EmojiPicker, EmojiPickerSearch, EmojiPickerContent, EmojiPickerFooter }\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport type * as React from \"react\"\nimport { MoreHorizontal, X } from \"lucide-react\"\nimport { Action, EmojiAction, Separator } from \"./action\"\nimport { motion } from \"motion/react\"\nimport ActionBar from \"./toolbar\"\nimport { BOUNCE_IN_OUT } from \"@/lib/ease\"\n\nimport type { TActionKey, TActionMap, IEmojiActionBarProps } from \"./types\"\nimport {\n EmojiPicker,\n EmojiPickerContent,\n EmojiPickerFooter,\n EmojiPickerSearch,\n} from \"@/components/ui/emoji-picker\"\nimport { isSeparator, QUICK_REACTIONS, useEmojiPicker } from \"./utils\"\nimport { Button } from \"@/components/ui/button\";\n\n/**\n * Compact reaction picker: a toolbar of quick emoji, then a \"More\" action that\n * swaps the surface for the full frimousse picker. Meant to sit inside a\n * `PopoverGlass variant=\"glass\"` — swapping the two surfaces resizes the popup,\n * which is why the popup's viewport padding variable has to be zeroed rather\n * than only its padding (see `BubbleReactionsButton`).\n */\nexport function EmojiActionBar({\n onEmojiSelect,\n reactions = QUICK_REACTIONS,\n hideMore = false,\n}: IEmojiActionBarProps): React.ReactElement {\n const {\n actions: quickReactions,\n isFullPicker,\n togglePicker,\n selectEmoji,\n } = useEmojiPicker({ onEmojiSelect, reactions, hideMore })\n\n const actions = useMemo(() => {\n return quickReactions.reduce<TActionMap<TActionKey>>((acc, item) => {\n // Replace spaces with hyphens and convert to lowercase for the action key\n const label = item.label.replace(/\\s+/g, \"-\").toLowerCase()\n const key: TActionKey = `action-${label}` as const\n // Create the action component, using the more action if the label includes \"more\"\n const moreAction = (\n <Action\n Icon={MoreHorizontal}\n action={togglePicker}\n id={label}\n tooltip={item.label}\n />\n )\n const action = label.includes(\"more\") ? (\n moreAction\n ) : (\n <EmojiAction\n emoji={item.emoji}\n label={item.label}\n action={() => selectEmoji(item)}\n />\n )\n // Store the action in the acc, using a separator if the key starts with \"separator-\"\n acc[key] = () => (isSeparator(key) ? <Separator /> : action)\n return acc\n }, {})\n }, [quickReactions, selectEmoji, togglePicker])\n\n return (\n <motion.div className=\"relative\" initial={{ height: \"auto\" }} exit={{ height: \"auto\" }} animate={{ height: isFullPicker ? 326 : \"auto\" }} transition={BOUNCE_IN_OUT}>\n \n {isFullPicker ? (\n <EmojiPicker\n className=\"h-full relative\"\n onEmojiSelect={selectEmoji}\n >\n <div className=\"flex items-center\">\n <EmojiPickerSearch />\n <Button variant=\"secondary\" size=\"icon-xs\" onClick={togglePicker}>\n <X className=\"size-3 stroke-3\" />\n </Button>\n </div>\n \n <EmojiPickerContent />\n <EmojiPickerFooter />\n </EmojiPicker>\n ) : (\n <ActionBar\n actions={actions}\n id=\"emoji-action-bar\"\n variant=\"default\"\n className=\"pr-3 pl-1.5\"\n />\n )}\n </motion.div>\n )\n}\n","import { EmojiActionBar } from \"./emojis\"\nimport { Action, EmojiAction, Separator } from \"./action\"\n\nimport Toolbar from \"./toolbar\"\n\nexport { useActionBar, useEmojiPicker, QUICK_REACTIONS } from \"./utils\"\nexport type {\n IActionBarProps,\n TActionBarSegment,\n IActionButtonProps,\n IEmojiActionBarProps,\n TActionEntry,\n TActionItemsByGroup,\n TActionKey,\n TActionMap,\n} from \"./types\"\n\nexport const ActionBar = {\n Emoji: EmojiActionBar,\n Separator,\n EmojiAction,\n Action,\n}\nexport default Toolbar\n","\"use client\"\n\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { EASE_IN_OUT, SPRING_PRESS, SPRING_SWAP } from \"@/lib/ease\"\nimport { useBubbleVariant } from \"./context\"\nimport { MorphIcon } from \"morphicons/react\";\nimport type {\n IBubbleReactionsProps,\n IBubbleReactionChipProps,\n TBubbleReactionsButtonProps,\n} from \"./types\"\nimport { reactionKey } from \"./utils\"\nimport { GlassContainer } from \"@/components/ui/glasscn/glass-container\"\nimport {\n Popover,\n PopoverGlass,\n PopoverTrigger,\n} from \"@/components/ui/popover-glass\"\nimport { ActionBar } from \"@/components/composed/action-bar\"\nimport { useState } from \"react\"\nimport { FaceSlightlySmilingPlus, X } from \"lucide\"\n\n/**\n * One emoji + count inside the pill. Pressing it springs the emoji, and a\n * count change slides the old number out as the new one drops in.\n */\nexport function BubbleReactionChip({\n reaction,\n index,\n onToggle,\n className,\n ...props\n}: IBubbleReactionChipProps): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const showCount = reaction.count != null && reaction.count > 0\n\n return (\n <motion.button\n aria-label={reaction.label}\n aria-pressed={reaction.reacted ?? false}\n className={cn(\n \"inline-flex cursor-pointer items-center gap-1 rounded-lg px-1 py-1.5 font-bold text-neutral-600 transition-[colors,scale] duration-150 ease-smooth-out outline-none hover:scale-105 focus-visible:ring-0 focus-visible:ring-ring dark:text-neutral-300\",\n reaction.reacted && \"text-foreground\",\n className\n )}\n data-reacted={reaction.reacted ? \"\" : undefined}\n data-slot=\"bubble-reaction\"\n onClick={() => onToggle?.(reaction, index)}\n transition={SPRING_PRESS}\n type=\"button\"\n whileTap={reduceMotion ? undefined : { scale: 0.88 }}\n {...props}\n >\n <motion.span\n animate={\n reduceMotion\n ? { scale: 1 }\n : { scale: reaction.reacted ? [1, 1.35, 1] : 1 }\n }\n aria-hidden={reaction.label ? true : undefined}\n className=\"block text-xs/snug select-none\"\n transition={\n reduceMotion\n ? { duration: 0 }\n : { duration: 0.36, ease: EASE_IN_OUT, times: [0, 0.45, 1] }\n }\n >\n {reaction.emoji}\n </motion.span>\n {showCount ? (\n <span className=\"relative inline-grid overflow-hidden tabular-nums\">\n <AnimatePresence initial={false} mode=\"popLayout\">\n <motion.span\n animate={{ y: 0, opacity: 1 }}\n className=\"text-xs/snug select-none\"\n exit={{ y: reduceMotion ? 0 : -10, opacity: 0 }}\n initial={{ y: reduceMotion ? 0 : 10, opacity: 0 }}\n key={reaction.count}\n transition={reduceMotion ? { duration: 0 } : SPRING_SWAP}\n >\n {reaction.count}\n </motion.span>\n </AnimatePresence>\n </span>\n ) : null}\n </motion.button>\n )\n}\n\nexport function BubbleReactionsButton({\n className,\n onClick,\n onEmojiSelect\n}: TBubbleReactionsButtonProps): React.ReactElement {\n\n const [open, setOpen] = useState(false)\n return (\n <Popover onOpenChange={setOpen} open={open}>\n <PopoverTrigger\n render={(_props, state) => (\n <button\n aria-label=\"Add reaction\"\n className={cn(\n \"inline-flex cursor-pointer items-center gap-1 rounded-lg px-1 py-2 font-bold text-neutral-600 duration-150 ease-smooth-out outline-none hover:scale-105 focus-visible:ring-0 dark:text-neutral-300\",\n className\n )}\n data-slot=\"bubble-reaction-button\"\n type=\"button\"\n {..._props}\n // After the spread, and composed: base-ui's own onClick is what\n // opens the popover, so overwriting it would wedge the trigger and\n // letting it win would swallow the caller's handler.\n onClick={(event) => {\n _props.onClick?.(event)\n onClick?.(event)\n }}\n >\n <MorphIcon icon={state.open ? X : FaceSlightlySmilingPlus} size={16} />\n </button>\n )}\n />\n \n <PopoverGlass\n align=\"center\"\n alignOffset={-25}\n \n glassVariant=\"frosted\"\n sideOffset={5}\n side=\"top\"\n >\n <ActionBar.Emoji\n onEmojiSelect={(picked) => {\n onEmojiSelect?.(picked)\n setOpen(false)\n }}\n />\n </PopoverGlass>\n </Popover>\n )\n}\n\n/**\n * Glass reaction pill that hangs off the bubble's bottom trailing corner.\n * Pass `reactions` for the standard chips, or children for a custom row —\n * both share the pill.\n */\nexport function BubbleReactions({\n reactions = [],\n onToggle,\n onEmojiSelect,\n className,\n children,\n ...props\n}: IBubbleReactionsProps): React.ReactElement {\n const variant = useBubbleVariant()\n return (\n <div\n className={cn(\n \"absolute -bottom-5 z-1 flex max-h-8 w-fit flex-1 items-center\",\n variant === \"sender\" ? \"left-4\" : \"right-4\",\n className\n )}\n >\n <GlassContainer\n glassVariant=\"liquid\"\n optics={{ strength: 0.5, depth: 0.5, bendWidth: 0.4, frost: 1.5 }}\n className={cn(\n \"inline-flex h-full w-fit items-center rounded-xl\",\n className\n )}\n data-slot=\"bubble-reactions\"\n {...props}\n >\n <div className={cn(\"mx-1.5 inline-flex h-full items-center\")}>\n {reactions.map((reaction, index) => (\n <BubbleReactionChip\n index={index}\n key={reactionKey(reaction, index)}\n onToggle={onToggle}\n reaction={reaction}\n />\n ))}\n <BubbleReactionsButton onEmojiSelect={onEmojiSelect} />\n {children}\n </div>\n </GlassContainer>\n </div>\n )\n}\n","import { Bubble as BubbleRoot } from \"./default\"\nimport { useBubbleVariant } from \"./context\"\nimport { BubbleActions } from \"./actions\"\nimport { BubbleHeader } from \"./header\"\nimport { BubbleMessage } from \"./message\"\nimport { Reference } from \"../reference\"\nimport { BubbleReactionChip, BubbleReactions } from \"./reactions\"\n\nexport const Bubble = Object.assign(BubbleRoot, {\n Header: BubbleHeader,\n Message: BubbleMessage,\n Reactions: BubbleReactions,\n Reaction: BubbleReactionChip,\n Actions: BubbleActions,\n})\n\nexport {\n BubbleActions,\n BubbleHeader,\n BubbleMessage,\n BubbleReactionChip,\n BubbleReactions,\n Reference,\n useBubbleVariant,\n}\n\nexport type {\n TBubbleActionsProps,\n IBubblePickedEmoji,\n TBubbleHeaderProps,\n TBubbleMessageProps,\n IBubbleReactionChipProps,\n IBubbleProps,\n IBubbleReaction,\n IBubbleReactionsProps,\n TBubbleVariant\n} from \"./types\"\n","/* ── layout constants ── */\nexport const PAD_Y = 24;\nexport const ROW_GAP = 64;\nexport const PILL_OFFSET = 30; // kind pill + gap above a card\n/* a dragged connector end snaps to an anchor inside this radius (canvas px) */\nexport const SNAP_RADIUS = 40;\n\nexport const PURPLE = \"#9a5cff\";\nexport const AMBER = \"#f09a2f\";\n\n/* estimated heights for the first paint; measured immediately after */\nexport const EST_H: Record<string, number> = { trigger: 92, cond: 134 };\n\nexport const PROPERTIES = [\"flavor\", \"topping\", \"size\", \"scoops\"];\nexport const FLAVORS = [\n { name: \"Rocky Road\", tag: \"Classic\" },\n { name: \"Mint Chip\", tag: \"Classic\" },\n { name: \"Pistachio\", tag: \"Seasonal\" },\n { name: \"Bubblegum\", tag: \"Retro\" },\n];\nexport const TOPPINGS = [\n { name: \"Brown butter bourbon brittle crunch\" },\n { name: \"Rainbow sprinkles\" },\n { name: \"Hot fudge\" },\n { name: \"Candied pecans\" },\n];","import { ChevronDown, ConeIcon } from \"lucide-react\";\nimport { AMBER } from \"../composed/chat/flowchart/constant\";\n\n/* ── chips used inside the condition card ── */\nexport function SourceChip() {\n return (\n <span\n data-ui\n className=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-[6px] bg-surface px-1.5 text-[12px] font-medium text-ink shadow-btn\"\n >\n <span className=\"text-ink-2\">\n <ConeIcon size={12} />\n </span>\n order\n </span>\n );\n}\n\nexport function SelectChip({\n id,\n value,\n dot,\n open,\n onToggle\n}: {\n id: string;\n value: string;\n dot?: boolean;\n items: { name: string; tag?: string }[];\n width: string;\n align?: \"left\" | \"right\";\n open: boolean;\n onToggle: (id: string) => void;\n onPick: (id: string, name: string) => void;\n}) {\n return (\n <span data-ui className=\"relative inline-flex min-w-0\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => onToggle(id)}\n className={`inline-flex h-6 min-w-0 cursor-pointer items-center gap-1 rounded-[6px] px-1.5\n text-[12px] font-medium text-ink transition-colors duration-100\n ${open ? \"bg-hover-2\" : \"bg-field hover:bg-hover-2\"}`}\n >\n {dot && <span className=\"size-1.5 shrink-0 rounded-full\" style={{ background: AMBER }} />}\n <span className=\"min-w-0 truncate\">{value}</span>\n <ChevronDown />\n </button>\n {/*{open && (\n <Menu\n items={items}\n value={value}\n width={width}\n align={align}\n onPick={(name) => onPick(id, name)}\n />\n )}*/}\n </span>\n );\n}\n","import { createElement } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { TTextProps, TTextSize, TTextVariant } from \"./types\"\n\nconst variantClasses: Record<TTextVariant, string> = {\n default: \"text-foreground\",\n heading: \"font-heading text-2xl font-semibold tracking-tight text-foreground\",\n paragraph: \"leading-7 text-foreground\",\n link: \"text-primary underline underline-offset-4 hover:text-primary/80\",\n subscript: \"align-sub text-xs text-muted-foreground\",\n}\n\nconst sizeClasses: Record<Exclude<TTextSize, number>, string> = {\n small: \"text-sm\",\n medium: \"text-base\",\n large: \"text-lg\",\n}\n\nconst defaultTags: Record<TTextVariant, keyof HTMLElementTagNameMap> = {\n default: \"span\",\n heading: \"h2\",\n paragraph: \"p\",\n link: \"a\",\n subscript: \"sub\",\n}\n\nexport function Text({\n children,\n className,\n id,\n selection,\n size = \"medium\",\n style,\n type = \"default\",\n ...props\n}: TTextProps) {\n const tag = defaultTags[type]\n const fontSize = typeof size === \"number\" ? `${size}px` : undefined\n const selectionValue =\n typeof selection === \"string\" ? selection : selection ? \"\" : undefined\n\n return createElement(\n tag,\n {\n ...props,\n className: cn(\n variantClasses[type],\n typeof size === \"number\" ? undefined : sizeClasses[size],\n selectionValue !== undefined &&\n \"rounded-xs outline-1 outline-offset-2 outline-accent/45\",\n className\n ),\n \"data-selection\": selectionValue,\n id,\n style: { ...style, ...(fontSize ? { fontSize } : {}) },\n },\n children\n )\n}\n","\"use client\";\n\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const PopoverCreateHandle: typeof PopoverPrimitive.createHandle =\n PopoverPrimitive.createHandle;\n\nexport const Popover: typeof PopoverPrimitive.Root = PopoverPrimitive.Root;\n\nexport function PopoverTrigger({\n className,\n children,\n ...props\n}: PopoverPrimitive.Trigger.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Trigger\n className={className}\n data-slot=\"popover-trigger\"\n {...props}\n >\n {children}\n </PopoverPrimitive.Trigger>\n );\n}\n\nexport function PopoverPopup({\n children,\n className,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n alignOffset = 0,\n tooltipStyle = false,\n anchor,\n portalProps,\n ...props\n}: PopoverPrimitive.Popup.Props & {\n portalProps?: PopoverPrimitive.Portal.Props;\n side?: PopoverPrimitive.Positioner.Props[\"side\"];\n align?: PopoverPrimitive.Positioner.Props[\"align\"];\n sideOffset?: PopoverPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: PopoverPrimitive.Positioner.Props[\"alignOffset\"];\n tooltipStyle?: boolean;\n anchor?: PopoverPrimitive.Positioner.Props[\"anchor\"];\n }): React.ReactElement {\n\n return (\n <PopoverPrimitive.Portal {...portalProps}>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom,transform] data-instant:transition-none\"\n data-slot=\"popover-positioner\"\n side={side}\n sideOffset={sideOffset}\n \n >\n <PopoverPrimitive.Popup\n className={cn(\n \"relative flex h-(--popup-height,auto) w-(--popup-width,auto) origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding text-popover-foreground shadow-lg/5 outline-none transition-[width,height,scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] has-data-[slot=calendar]:rounded-xl has-data-[slot=calendar]:before:rounded-[calc(var(--radius-xl)-1px)] data-starting-style:scale-98 data-starting-style:opacity-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n tooltipStyle &&\n \"w-fit text-balance rounded-md text-xs shadow-md/5 before:rounded-[calc(var(--radius-md)-1px)]\",\n className,\n )}\n data-slot=\"popover-popup\"\n {...props}\n >\n <PopoverPrimitive.Viewport\n className={cn(\n \"relative size-full max-h-(--available-height) overflow-clip px-(--viewport-inline-padding) py-4 [--viewport-inline-padding:--spacing(4)] has-data-[slot=calendar]:p-2 data-instant:transition-none **:data-current:data-ending-style:opacity-0 **:data-current:data-starting-style:opacity-0 **:data-previous:data-ending-style:opacity-0 **:data-previous:data-starting-style:opacity-0 **:data-current:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-current:opacity-100 **:data-previous:opacity-100 **:data-current:transition-opacity **:data-previous:transition-opacity\",\n tooltipStyle\n ? \"py-1 [--viewport-inline-padding:--spacing(2)]\"\n : \"not-data-transitioning:overflow-y-auto\",\n )}\n data-slot=\"popover-viewport\"\n >\n {children}\n </PopoverPrimitive.Viewport>\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nexport function PopoverClose({\n ...props\n}: PopoverPrimitive.Close.Props): React.ReactElement {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />;\n}\n\nexport function PopoverTitle({\n className,\n ...props\n}: PopoverPrimitive.Title.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Title\n className={cn(\"font-semibold text-lg leading-none\", className)}\n data-slot=\"popover-title\"\n {...props}\n />\n );\n}\n\nexport function PopoverDescription({\n className,\n ...props\n}: PopoverPrimitive.Description.Props): React.ReactElement {\n return (\n <PopoverPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"popover-description\"\n {...props}\n />\n );\n}\n\nexport { PopoverPrimitive, PopoverPopup as PopoverContent };\n","\"use client\"\n\nimport { useState } from \"react\"\nimport type { ReactElement } from \"react\"\nimport { Popover, PopoverPopup, PopoverTrigger } from \"@/components/ui/popover\"\nimport { cn } from \"@/lib/utils\"\nimport { Text } from \"../text/default\"\nimport type { ITextClickPopoverProps, ITextPopoverRenderProps } from \"./types\"\n\nexport function TextClickPopover({\n children,\n popover,\n renderPopover,\n popoverProps,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n className,\n ...textProps\n}: ITextClickPopoverProps): ReactElement {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen)\n const open = controlledOpen ?? uncontrolledOpen\n const setOpen = (next: boolean) => {\n setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n const renderProps: ITextPopoverRenderProps = {\n open,\n setOpen,\n close: () => setOpen(false),\n }\n const content = renderPopover ? renderPopover(renderProps) : popover\n\n return (\n <Popover onOpenChange={(next) => setOpen(next)} open={open}>\n <PopoverTrigger\n nativeButton={false}\n render={\n <Text\n {...textProps}\n className={cn(\n \"w-fit cursor-pointer data-popup-open:opacity-80\",\n className\n )}\n />\n }\n >\n {children}\n </PopoverTrigger>\n {content !== undefined && content !== null ? (\n <PopoverPopup\n {...popoverProps}\n className={cn(\"max-w-64\", popoverProps?.className)}\n data-selection-popover=\"\"\n >\n {content}\n </PopoverPopup>\n ) : null}\n </Popover>\n )\n}\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Card({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"relative flex flex-col rounded-md border bg-card not-dark:bg-clip-padding text-card-foreground shadow-xs/5 before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n ),\n \"data-slot\": \"card\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrame({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"relative flex flex-col rounded-(--frame-radius) border bg-card not-dark:bg-clip-padding text-card-foreground shadow-xs/5 [--clip-bottom:-1rem] [--clip-top:-1rem] [--frame-radius:var(--radius-md)] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--frame-radius)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] has-data-[slot=table-container]:overflow-hidden *:data-[slot=card]:-m-px *:data-[slot=card]:rounded-(--frame-radius) *:data-[slot=table-container]:-m-px *:data-[slot=table-container]:w-[calc(100%+2px)] *:not-first:data-[slot=card]:rounded-t-[calc(var(--frame-radius)-1px)] *:not-last:data-[slot=card]:rounded-b-[calc(var(--frame-radius)-1px)] *:data-[slot=card]:bg-clip-padding *:data-[slot=card]:shadow-none *:data-[slot=card]:before:hidden *:not-first:data-[slot=card]:before:rounded-t-[calc(var(--frame-radius)-2px)] *:not-last:data-[slot=card]:before:rounded-b-[calc(var(--frame-radius)-2px)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)] *:data-[slot=card]:[clip-path:inset(var(--clip-top)_1px_var(--clip-bottom)_1px_round_calc(var(--frame-radius)-1px))] *:data-[slot=card]:last:[--clip-bottom:1px] *:data-[slot=card]:first:[--clip-top:1px]\",\n className,\n ),\n \"data-slot\": \"card-frame\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrameHeader({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"relative flex grid auto-rows-min grid-rows-[auto_auto] flex-col items-start gap-x-4 px-6 py-4 has-data-[slot=card-frame-action]:grid-cols-[1fr_auto]\",\n className,\n ),\n \"data-slot\": \"card-frame-header\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrameTitle({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\"self-center font-semibold text-sm\", className),\n \"data-slot\": \"card-frame-title\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrameDescription({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\"self-center text-muted-foreground text-sm\", className),\n \"data-slot\": \"card-frame-description\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrameAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"col-start-2 nth-3:row-span-2 nth-3:row-start-1 inline-flex self-center justify-self-end\",\n className,\n ),\n \"data-slot\": \"card-frame-action\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFrameFooter({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\"px-6 py-4\", className),\n \"data-slot\": \"card-frame-footer\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardHeader({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-6 in-[[data-slot=card]:has(>[data-slot=card-panel])]:pb-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]\",\n className,\n ),\n \"data-slot\": \"card-header\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardTitle({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\"font-heading font-semibold text-lg leading-none\", className),\n \"data-slot\": \"card-title\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardDescription({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\"text-muted-foreground text-sm\", className),\n \"data-slot\": \"card-description\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"col-start-2 row-span-2 row-start-1 inline-flex self-start justify-self-end\",\n className,\n ),\n \"data-slot\": \"card-action\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardPanel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"flex-1 p-6 in-[[data-slot=card]:has(>[data-slot=card-header]:not(.border-b))]:pt-0 in-[[data-slot=card]:has(>[data-slot=card-footer]:not(.border-t))]:pb-0\",\n className,\n ),\n \"data-slot\": \"card-panel\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function CardFooter({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"flex items-center p-6 in-[[data-slot=card]:has(>[data-slot=card-panel])]:pt-4\",\n className,\n ),\n \"data-slot\": \"card-footer\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport { CardPanel as CardContent };\n","import { atom } from \"jotai\"\nimport type {\n ISelectionPosition,\n ISelectionState,\n TSelectionStateUpdate,\n} from \"./types\"\n\nexport const initialSelectionState: ISelectionState = {\n selected: false,\n currentSelection: \"\",\n showPopover: false,\n popoverPosition: null,\n}\n\nexport const selectionAtom = atom<ISelectionState>(initialSelectionState)\n\n/** Update only the fields that changed, keeping selection state atomic. */\nexport const updateSelectionAtom = atom(\n null,\n (get, set, update: TSelectionStateUpdate) => {\n const next =\n typeof update === \"function\" ? update(get(selectionAtom)) : update\n set(selectionAtom, { ...get(selectionAtom), ...next })\n }\n)\n\nexport const setSelectionAtom = atom(null, (_get, set, selection: string) => {\n set(updateSelectionAtom, { currentSelection: selection, selected: true })\n})\n\nexport const setSelectionPositionAtom = atom(\n null,\n (_get, set, popoverPosition: ISelectionPosition) => {\n set(updateSelectionAtom, { popoverPosition })\n }\n)\n\nexport const setSelectionPopoverAtom = atom(\n null,\n (_get, set, showPopover: boolean) => {\n set(updateSelectionAtom, { showPopover })\n }\n)\n\nexport const setCurrentSelectionAtom = setSelectionAtom\nexport const setPopoverPositionAtom = setSelectionPositionAtom\nexport const setShowPopoverAtom = setSelectionPopoverAtom\n\nexport const resetSelectionAtom = atom(null, (_get, set) => {\n set(selectionAtom, initialSelectionState)\n})\n","\"use client\"\n\nimport { useCallback, useMemo } from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\nimport {\n resetSelectionAtom,\n selectionAtom,\n setSelectionAtom,\n setSelectionPopoverAtom,\n setSelectionPositionAtom,\n updateSelectionAtom,\n} from \"./selection-atom\"\nimport type { IUseSelectionOptions, IUseSelectionResult } from \"./types\"\n\n/**\n * Coordinates the third-party highlight popover callbacks with the shared\n * selection atom. The returned `selectionProps` can be spread directly onto\n * `@omsimos/react-highlight-popover`.\n */\nexport function useSelection(\n options: IUseSelectionOptions = {}\n): IUseSelectionResult {\n const {\n selected: selectedProp,\n onSelectionStart: onSelectionStartProp,\n onSelectionEnd: onSelectionEndProp,\n onPopoverShow: onPopoverShowProp,\n onPopoverHide: onPopoverHideProp,\n } = options\n const state = useAtomValue(selectionAtom)\n const setSelection = useSetAtom(setSelectionAtom)\n const setPosition = useSetAtom(setSelectionPositionAtom)\n const setShowPopover = useSetAtom(setSelectionPopoverAtom)\n const update = useSetAtom(updateSelectionAtom)\n const reset = useSetAtom(resetSelectionAtom)\n\n const onSelectionStart = useCallback(() => {\n update({ selected: false, showPopover: false })\n onSelectionStartProp?.()\n }, [onSelectionStartProp, update])\n\n const onSelectionEnd = useCallback(\n (selection: string) => {\n setSelection(selection)\n onSelectionEndProp?.(selection)\n },\n [onSelectionEndProp, setSelection]\n )\n\n const onPopoverShow = useCallback(() => {\n setShowPopover(true)\n onPopoverShowProp?.()\n }, [onPopoverShowProp, setShowPopover])\n\n const onPopoverHide = useCallback(() => {\n setShowPopover(false)\n onPopoverHideProp?.()\n }, [onPopoverHideProp, setShowPopover])\n\n const selectionProps = useMemo(\n () => ({\n onSelectionStart,\n onSelectionEnd,\n onPopoverShow,\n onPopoverHide,\n }),\n [onPopoverHide, onPopoverShow, onSelectionEnd, onSelectionStart]\n )\n\n return {\n state:\n selectedProp === undefined ? state : { ...state, selected: selectedProp },\n selected: selectedProp ?? state.selected,\n currentSelection: state.currentSelection,\n showPopover: state.showPopover,\n popoverPosition: state.popoverPosition,\n setSelection,\n setPosition,\n setShowPopover,\n update,\n reset,\n selectionProps,\n }\n}\n","\"use client\"\n\nimport { GlassSurface } from \"@/components/ui/glasscn/liquid-glass\"\n\nimport { useEffect } from \"react\"\nimport type * as React from \"react\"\nimport { useHighlightPopover } from \"@omsimos/react-highlight-popover\"\nimport { Card, CardPanel } from \"@/components/ui/card\"\nimport { cn } from \"@/lib/utils\"\nimport { useSelection } from \"./use-selection\"\nimport type { IHighlightPopoverProps, ISelectionRenderProps } from \"./types\"\n\nexport function HighlightPopover({\n children,\n component: Component = Card,\n componentProps,\n render,\n className,\n ...props\n}: IHighlightPopoverProps): React.ReactElement {\n const primitive = useHighlightPopover()\n const selection = useSelection()\n const currentSelection =\n primitive.currentSelection || selection.currentSelection\n const position = selection.popoverPosition ?? primitive.popoverPosition\n const {\n currentSelection: stateSelection,\n popoverPosition: statePosition,\n selected,\n setPosition,\n setSelection,\n setShowPopover,\n showPopover,\n } = selection\n\n useEffect(() => {\n if (stateSelection !== currentSelection) {\n setSelection(currentSelection)\n }\n if (\n statePosition?.top !== primitive.popoverPosition.top ||\n statePosition?.left !== primitive.popoverPosition.left\n ) {\n setPosition(primitive.popoverPosition)\n }\n if (showPopover !== primitive.showPopover) {\n setShowPopover(primitive.showPopover)\n }\n }, [\n currentSelection,\n primitive.popoverPosition,\n primitive.showPopover,\n setPosition,\n setSelection,\n setShowPopover,\n showPopover,\n statePosition,\n stateSelection,\n ])\n\n const renderProps: ISelectionRenderProps = {\n position,\n selection: currentSelection,\n selected,\n showPopover: primitive.showPopover,\n setCurrentSelection: (value) => {\n primitive.setCurrentSelection(value)\n setSelection(value)\n },\n setShowPopover: (show) => {\n primitive.setShowPopover(show)\n setShowPopover(show)\n },\n close: () => {\n primitive.setShowPopover(false)\n setShowPopover(false)\n },\n }\n\n const content = render ? render(renderProps) : children\n const forwardedClassName =\n typeof componentProps?.className === \"string\"\n ? componentProps.className\n : undefined\n const componentContextProps =\n typeof Component === \"string\" || Component === Card ? {} : renderProps\n return (\n <Component\n {...componentProps}\n {...props}\n {...componentContextProps}\n className={cn(\n \"relative isolate max-w-52 rounded-md bg-transparent dark:bg-transparent\",\n forwardedClassName,\n className\n )}\n data-selection-popover=\"\"\n >\n <GlassSurface glassVariant=\"frosted\" />\n <CardPanel className=\"p-3\">{content}</CardPanel>\n </Component>\n )\n}\n","\"use client\"\n\nimport type { ReactElement } from \"react\"\nimport { HighlightPopover as HighlightPopoverPrimitive } from \"@omsimos/react-highlight-popover\"\nimport { HighlightPopover } from \"./popover\"\nimport { useSelection } from \"./use-selection\"\nimport type { ITextSelectionProps } from \"./types\"\n\nexport function TextSelection({\n children,\n selected,\n popover,\n component,\n componentProps,\n popoverComponent,\n popoverProps,\n renderPopover,\n onSelectionStart,\n onSelectionEnd,\n onPopoverShow,\n onPopoverHide,\n ...props\n}: ITextSelectionProps): ReactElement {\n const selection = useSelection({\n selected,\n onSelectionStart,\n onSelectionEnd,\n onPopoverShow,\n onPopoverHide,\n })\n const hasPopover =\n renderPopover !== undefined ||\n component !== undefined ||\n popoverComponent !== undefined ||\n (popover !== undefined && popover !== null)\n\n return (\n <HighlightPopoverPrimitive\n {...props}\n {...selection.selectionProps}\n renderPopover={() =>\n hasPopover ? (\n <HighlightPopover\n component={component ?? popoverComponent}\n componentProps={componentProps ?? popoverProps}\n render={renderPopover}\n >\n {popover}\n </HighlightPopover>\n ) : null\n }\n >\n {children}\n </HighlightPopoverPrimitive>\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport type { TLabelProps } from \"./types\"\n\nexport const twClasses: Record<string, ClassValue> = {\n default: \"selection:text-amber-500 dark:selection:text-amber-400\",\n}\n\nexport const twLabelClasses: Record<\n NonNullable<TLabelProps[\"level\"]>,\n Element[\"className\"]\n> = {\n title: \"text-lg text-neutral-500\",\n subtitle: \"text-md text-neutral-500\",\n caption: \"text-xs text-neutral-400 dark:text-neutral-700\",\n heading: \"text-sm text-neutral-500\"\n}\n","import { cn } from \"@/lib/utils\"\nimport { TextSelection } from \"../text-selection\"\nimport { Text } from \"./default\"\nimport type { THeadingProps } from \"./types\"\nimport { twClasses } from \"./utils\";\n\n\nexport function Heading({\n children,\n selected,\n popover,\n component,\n componentProps,\n popoverComponent,\n popoverProps,\n renderPopover,\n onSelectionStart,\n onSelectionEnd,\n onPopoverShow,\n onPopoverHide,\n offset,\n zIndex,\n className,\n alignment,\n minSelectionLength,\n ...textProps\n}: THeadingProps) {\n return (\n <TextSelection\n alignment={alignment}\n component={component}\n componentProps={componentProps}\n minSelectionLength={minSelectionLength}\n offset={offset}\n onPopoverHide={onPopoverHide}\n onPopoverShow={onPopoverShow}\n onSelectionEnd={onSelectionEnd}\n onSelectionStart={onSelectionStart}\n popover={popover}\n popoverComponent={popoverComponent}\n popoverProps={popoverProps}\n renderPopover={renderPopover}\n selected={selected}\n zIndex={zIndex}\n >\n <Text\n {...textProps}\n className={cn(\n twClasses[\"default\"],\n className\n )}\n type=\"heading\"\n >\n {children}\n </Text>\n </TextSelection>\n )\n}\n","import { TextSelection } from \"../text-selection\"\nimport { Text } from \"./default\"\nimport type { TParagraphProps } from \"./types\"\nimport { cn } from \"@/lib/utils\"\nimport { twClasses } from \"./utils\"\n\n\nexport function Paragraph({\n children,\n selected,\n popover,\n component,\n componentProps,\n popoverComponent,\n popoverProps,\n renderPopover,\n onSelectionStart,\n onSelectionEnd,\n onPopoverShow,\n onPopoverHide,\n offset,\n zIndex,\n alignment,\n className,\n minSelectionLength,\n ...textProps\n}: TParagraphProps) {\n return (\n <TextSelection\n alignment={alignment}\n component={component}\n componentProps={componentProps}\n minSelectionLength={minSelectionLength}\n offset={offset}\n onPopoverHide={onPopoverHide}\n onPopoverShow={onPopoverShow}\n onSelectionEnd={onSelectionEnd}\n onSelectionStart={onSelectionStart}\n popover={popover}\n popoverComponent={popoverComponent}\n popoverProps={popoverProps}\n renderPopover={renderPopover}\n selected={selected}\n zIndex={zIndex}\n >\n <Text\n {...textProps}\n className={cn(twClasses[\"default\"], className)}\n type=\"paragraph\"\n >\n {children}\n </Text>\n </TextSelection>\n )\n}\n","import type { TSpanProps } from \"./types\"\nimport { Text } from \"./default\"\nimport { cn } from \"@/lib/utils\"\n\n\nexport function Span(props: TSpanProps) {\n return (\n <Text\n {...props}\n className={cn(\"select-text selection:bg-transparent\", props.className)}\n type=\"default\"\n />\n )\n}\n","import type { TLabelProps } from \"./types\"\nimport { cn } from \"@/lib/utils\"\nimport { twLabelClasses } from \"./utils\"\nexport function Label({ children, level = \"title\", className }: TLabelProps) {\n return (\n <div\n className={cn(\n \"leading-1 select-none\",\n level && twLabelClasses[level],\n className\n )}\n >\n {children}\n </div>\n )\n}\n","import { Text as TextDefault } from \"./default\"\nimport { Heading } from \"./heading\"\nimport { Paragraph } from \"./paragraph\"\nimport { Span } from \"./span\"\nimport { Label } from \"./label\"\nexport type {\n THeadingProps,\n TParagraphProps,\n TSpanProps,\n TTextProps,\n TTextSize,\n TTextVariant,\n} from \"./types\"\n\nexport const Text = {\n /** The polymorphic base the presets below are built on — the only member\n * that takes `type`, so it is what reaches `link` and `subscript`. The\n * presets are reachable through the atoms barrel, and without this it\n * would not be: `export *` does not carry a default export. */\n Root: TextDefault,\n Heading,\n Paragraph,\n Span,\n Label,\n}\n\nexport { TextDefault as default }\n\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import type { TTextureVariant } from \"./type\";\nimport fabricBackground from \"@/assets/fabric.png\";\nimport paperBackground from \"@/assets/paper.png\";\n\nexport const textureMap: Record<Exclude<TTextureVariant, \"none\">, string> = {\n fabric: fabricBackground,\n paper: paperBackground,\n}\n\nexport const linearGradient = \"bg-linear-to-t from-background from-10% to-transparent to-40% dark:from-10% dark:to-background/30 dark:to-50%\";\n\nexport const verticalFadeGradient = (color: string, spread: number = 50) =>\n `linear-gradient(to top, ${color} 0%, ${color} ${spread}%, transparent 100%)`\n","import { cn } from \"@/lib/utils\"\nimport type { ITextureProps } from \"./type\";\nimport { linearGradient, textureMap } from \"./utils\";\n\n\nexport function Texture({\n variant = \"fabric\",\n opacity = 1,\n className,\n children,\n}: ITextureProps) {\n const textureUrl = variant !== \"none\" ? textureMap[variant] : null\n return (\n <div className=\"relative h-full w-full flex flex-col flex-1\">\n {textureUrl && (\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0\"\n style={{\n backgroundImage: `url(${textureUrl})`,\n backgroundRepeat: \"repeat\",\n opacity,\n }}\n />\n )}\n {children && <div className={cn(\"h-full w-full flex flex-col flex-1\", linearGradient, className)}>{children}</div>}\n </div>\n )\n}","import { Texture } from \"./texture\"\n\nconst Background = {\n Texture\n}\n\nexport * from \"./type\"\nexport default Background\n","import * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"@base-ui/react/avatar\"\nimport { cn } from \"cn\"\n\nfunction Avatar({\n className,\n size = \"md\",\n ...props\n}: AvatarPrimitive.Root.Props & {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=xl]:size-12 data-[size=xxl]:size-16 data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\n \"aspect-square size-full rounded-full object-cover\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: AvatarPrimitive.Fallback.Props) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=md]/avatar:size-2.5 group-data-[size=md]/avatar:[&>svg]:size-1.5\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n \"group-data-[size=xl]/avatar:size-3 group-data-[size=xl]/avatar:-right-0.5 group-data-[size=xl]/avatar:-bottom-0.5 group-data-[size=xl]/avatar:[&>svg]:size-2\",\n \"group-data-[size=xxl]/avatar:size-4 group-data-[size=xxl]/avatar:right-0.5 group-data-[size=xxl]/avatar:bottom-0.5 group-data-[size=xxl]/avatar:[&>svg]:size-3\",\n className\n\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-xs/relaxed text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarBadge,\n}\n","import type { ClassValue } from \"class-variance-authority/types\"\nimport type { TAvatarAudio, TAvatarSize, TUserType } from \"./types\"\nimport type { TAtomSize } from \"../types\";\n\nexport function initialsFrom(user: string | TUserType | undefined): string | undefined {\n // If the user is a string, use it directly to generate initials.\n if (user && typeof user === \"string\") {\n const parts = user.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return \"\"\n const first = parts[0]?.[0] ?? \"\"\n const last = parts.length > 1 ? (parts.at(-1)?.[0] ?? \"\") : \"\"\n return (first + last).toUpperCase()\n }\n // If the user is not a string, use firstName and lastName to generate initials.\n if (user && typeof user !== \"string\" && user.firstName && user.lastName)\n return user.firstName.charAt(0) + user.lastName.charAt(0)\n // If the user does not have a firstName or lastName, return undefined.\n return undefined\n}\n\nexport const avatarIsSpeakingClass =\n \"ring-background size-10 ring-2 transition-transform duration-500 group-hover/avatar:scale-95\"\n\nexport const ringClasses: Record<NonNullable<TAvatarAudio>, ClassValue> = {\n muted: \"group-hover/avatar:opacity-0 group-hover/avatar:blur-none opacity-0\",\n unmuted:\n \"animate-none group-hover/avatar:opacity-70 group-hover/avatar:blur-sm opacity-30\",\n speaking:\n \"animate-[spin_3s_linear_infinite] group-hover/avatar:opacity-100 group-hover/avatar:blur-sm opacity-75\",\n}\n\nexport const sizeClasses: Record<TAvatarSize, string> = {\n sm: \"size-6\",\n default: \"size-8\",\n lg: \"size-10\",\n xl: \"size-14\",\n xxl: \"size-16\",\n}\n\n// Dot trio ≈ 45-55% of the disc: 3×dot + 2×4px gap.\n// 24px disc → 14px trio (xs), 40px → 20px (sm), 64px → 32px (md).\nexport const loaderSizes: Record<TAvatarSize, TAtomSize> = {\n sm: \"xs\",\n default: \"xs\",\n lg: \"sm\",\n xl: \"sm\",\n xxl: \"default\",\n}\n\nexport const statusClasses = {\n online: \"bg-success\",\n idle: \"bg-warning\",\n offline: \"bg-text-secondary\",\n}\n","\n\nexport const VerifiedBadge = () => {\n return (\n <svg viewBox=\"0 0 15 16\" className=\"size-4\">\n <path\n className=\"fill-blue-500\"\n d=\"M14.5425 6.8973L13.5 5.8398C13.4273 5.76858 13.3699 5.68331 13.3312 5.58919C13.2925 5.49507 13.2734 5.39405 13.275 5.2923V3.7923C13.274 3.58681 13.2324 3.38353 13.1527 3.19414C13.0729 3.00476 12.9565 2.833 12.8101 2.68874C12.6638 2.54448 12.4904 2.43055 12.2998 2.35351C12.1093 2.27647 11.9055 2.23783 11.7 2.2398H10.2C10.0982 2.24141 9.99722 2.22228 9.9031 2.1836C9.80898 2.14492 9.72371 2.08749 9.65249 2.0148L8.60249 0.957304C8.30998 0.665106 7.91344 0.500977 7.49999 0.500977C7.08654 0.500977 6.68999 0.665106 6.39749 0.957304L5.33999 1.9998C5.26876 2.07249 5.1835 2.12992 5.08937 2.1686C4.99525 2.20728 4.89424 2.22641 4.79249 2.2248H3.29249C3.08699 2.22578 2.88371 2.26735 2.69432 2.34713C2.50494 2.4269 2.33318 2.54331 2.18892 2.68966C2.04466 2.83602 1.93073 3.00943 1.85369 3.19994C1.77665 3.39046 1.73801 3.59431 1.73999 3.7998V5.2998C1.74159 5.40155 1.72247 5.50256 1.68378 5.59669C1.6451 5.69081 1.58767 5.77608 1.51499 5.8473L0.457487 6.8973C0.165289 7.18981 0.00115967 7.58635 0.00115967 7.9998C0.00115967 8.41325 0.165289 8.80979 0.457487 9.1023L1.49999 10.1598C1.57267 10.231 1.6301 10.3163 1.66878 10.4104C1.70747 10.5045 1.72659 10.6056 1.72499 10.7073V12.2073C1.72597 12.4128 1.76754 12.6161 1.84731 12.8055C1.92709 12.9949 2.04349 13.1666 2.18985 13.3109C2.3362 13.4551 2.50961 13.5691 2.70013 13.6461C2.89064 13.7231 3.0945 13.7618 3.29999 13.7598H4.79999C4.90174 13.7582 5.00275 13.7773 5.09687 13.816C5.191 13.8547 5.27627 13.9121 5.34749 13.9848L6.40499 15.0423C6.69749 15.3345 7.09404 15.4986 7.50749 15.4986C7.92094 15.4986 8.31748 15.3345 8.60999 15.0423L9.65999 13.9998C9.73121 13.9271 9.81647 13.8697 9.9106 13.831C10.0047 13.7923 10.1057 13.7732 10.2075 13.7748H11.7075C12.1212 13.7748 12.518 13.6104 12.8106 13.3179C13.1031 13.0253 13.2675 12.6285 13.2675 12.2148V10.7148C13.2659 10.6131 13.285 10.512 13.3237 10.4179C13.3624 10.3238 13.4198 10.2385 13.4925 10.1673L14.55 9.1098C14.6953 8.96434 14.8104 8.79157 14.8887 8.60146C14.9671 8.41134 15.007 8.20761 15.0063 8.00199C15.0056 7.79638 14.9643 7.59293 14.8847 7.40334C14.8051 7.21376 14.6888 7.04178 14.5425 6.8973Z\"\n />\n <path\n className=\"fill-white\"\n d=\"M10.635 6.6498L6.95249 10.2498C6.90055 10.3024 6.83864 10.3441 6.77038 10.3724C6.70212 10.4007 6.62889 10.4152 6.55499 10.4148C6.48062 10.4138 6.40719 10.398 6.33896 10.3684C6.27073 10.3388 6.20905 10.2959 6.15749 10.2423L4.37999 8.4423C4.32532 8.39026 4.28169 8.32775 4.25169 8.25849C4.22169 8.18923 4.20593 8.11464 4.20536 8.03916C4.20479 7.96369 4.21941 7.88887 4.24836 7.81916C4.27731 7.74946 4.31999 7.68629 4.37387 7.63342C4.42774 7.58056 4.4917 7.53908 4.56194 7.51145C4.63218 7.48382 4.70726 7.47061 4.78271 7.4726C4.85816 7.4746 4.93244 7.49176 5.00112 7.52306C5.0698 7.55436 5.13148 7.59917 5.18249 7.6548L6.56249 9.0573L9.84749 5.8473C9.95296 5.74197 10.0959 5.6828 10.245 5.6828C10.394 5.6828 10.537 5.74197 10.6425 5.8473C10.6953 5.90016 10.737 5.963 10.7653 6.03216C10.7935 6.10132 10.8077 6.17542 10.807 6.25013C10.8063 6.32483 10.7908 6.39865 10.7612 6.46728C10.7317 6.5359 10.6888 6.59795 10.635 6.6498Z\"\n />\n </svg>\n )\n}","import type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Skeleton({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"animate-skeleton rounded-sm [--skeleton-highlight:--alpha(var(--color-white)/64%)] [background:linear-gradient(120deg,transparent_40%,var(--skeleton-highlight),transparent_60%)_var(--color-muted)_0_0/200%_100%_fixed] dark:[--skeleton-highlight:--alpha(var(--color-white)/4%)]\",\n className,\n )}\n data-slot=\"skeleton\"\n {...props}\n />\n );\n}\n","import { cn } from \"@/lib/utils\";\nimport { Spinner } from \"@/components/ui/spinner\";\nimport type { TAtomSize, ILoaderProps } from \"./types\";\n\nconst sizeMap: Record<TAtomSize, string> = {\n xs: 'w-0.5 h-0.5',\n sm: 'w-1 h-1',\n default: 'w-2 h-2',\n lg: 'w-3 h-3',\n xl: 'w-4 h-4',\n xxl: 'w-5 h-5',\n} as const;\n\nexport function Loader({ type = \"spinner\", className, size }: ILoaderProps) {\n\n if (type === \"dots\") {\n return (\n <div className={cn('flex gap-1 justify-center items-center', className)}>\n {[0, 1, 2].map((i) => (\n <span \n key={i}\n className={cn(\"bg-foreground animate-bounce rounded-full\", sizeMap[size ?? 'default'])}\n style={{ animationDelay: `${i * 0.15}s` }}\n />\n ))}\n </div>\n );\n }\n \n return (\n <Spinner className={cn('text-foreground', className)} size={size} />\n );\n}\n","import {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport type { IAvatarProps, TUserType } from \"./types\"\nimport { cn } from \"@/lib/utils\"\nimport {\n initialsFrom,\n loaderSizes,\n ringClasses,\n sizeClasses,\n statusClasses,\n} from \"./utils\"\nimport { User } from \"lucide-react\"\nimport { VerifiedBadge } from \"./verified\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Loader } from \"../loader\"\n\nexport default function Base<T extends TUserType>({\n user,\n size = \"sm\",\n className,\n loading,\n audio,\n}: IAvatarProps<T>) {\n return (\n <div\n className={cn(\n \"relative\",\n audio && \"group/avatar flex items-center justify-center\"\n )}\n >\n {\n /* Animated Story Ring — suppressed while loading; identity first */\n audio && !loading && (\n <div\n className={cn(\n \"absolute -inset-1 rounded-full bg-linear-to-tr from-yellow-400 via-fuchsia-500 to-violet-600 blur-xs transition-all duration-500\",\n ringClasses[audio]\n )}\n />\n )\n }\n <Avatar className={cn(sizeClasses[size], className)}>\n <AvatarImage src={user?.avatarUrl} alt={user?.firstName} />\n <AvatarFallback>\n {initialsFrom(user) ?? <User className=\"size-4\" aria-hidden=\"true\" />}\n </AvatarFallback>\n {loading && (\n <Skeleton className=\"absolute inset-0 rounded-full ring-1 ring-border/50 dark:[--skeleton-highlight:--alpha(var(--color-white)/14%)]\" />\n )}\n {user && user.status && !loading && size !== \"sm\" && (\n <AvatarBadge className={statusClasses[user.status]} />\n )}\n {user && user.verified && !loading && size !== \"sm\" && (\n <span className=\"absolute -top-0.5 -right-0.5\">\n <VerifiedBadge />\n </span>\n )}\n </Avatar>\n {loading && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <Loader type=\"dots\" size={loaderSizes[size]} />\n </div>\n )}\n </div>\n )\n}\n","/**\n * Interaction sound for the library, powered by cuelume (Web Audio synthesis,\n * zero runtime deps, SSR-safe).\n *\n * Components only emit inert `data-cuelume-*` attributes — nothing plays\n * until the consuming app opts in once:\n *\n * import { bindSounds } from \"@corpora/ui\"\n * bindSounds()\n *\n * The app owns preferences via setSoundEnabled / setSoundVolume.\n */\nimport { bind, play } from \"cuelume\";\nimport type { SoundName } from \"cuelume\";\n\nlet bound = false;\n\n/** Opt into interaction sound. Delegated and idempotent (see cuelume bind). */\nexport function bindSounds(root?: ParentNode): void {\n bound = true;\n bind(root);\n}\n\n/**\n * Imperative cue used by library components for keyboard-driven interactions\n * the data attributes can't cover (OTP typing, visibility toggles, …).\n * No-op until the app has opted in via bindSounds().\n */\nexport function playCue(name: SoundName, options?: { volume?: number }): void {\n if (bound) play(name, options);\n}\n\nexport {\n play as playSound,\n setEnabled as setSoundEnabled,\n setVolume as setSoundVolume,\n sounds,\n} from \"cuelume\";\nexport type { SoundName };\n","\"use client\";\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\";\nimport type React from \"react\";\nimport { playCue } from \"@/lib/sound\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Checkbox({\n className,\n sound = true,\n onCheckedChange,\n ...props\n}: CheckboxPrimitive.Root.Props & {\n /** Play the cuelume toggle cue on check/uncheck. Silent until bindSounds(). */\n sound?: boolean;\n}): React.ReactElement {\n return (\n <CheckboxPrimitive.Root\n // Cued off the state change rather than data-cuelume-toggle: Base UI\n // renders the native input as a *sibling* of this root, so a click on an\n // associated <label> never bubbles through an element carrying the\n // attribute and would toggle silently. This fires once for box clicks,\n // label clicks and keyboard Space alike, and not for programmatic changes.\n onCheckedChange={(checked, eventDetails) => {\n if (sound) playCue(\"toggle\");\n onCheckedChange?.(checked, eventDetails);\n }}\n className={cn(\n \"relative inline-flex size-4.5 shrink-0 cursor-pointer items-center justify-center rounded-[.25rem] border border-input bg-background not-dark:bg-clip-padding shadow-xs/5 outline-none ring-ring transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[3px] not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-invalid:border-destructive/36 focus-visible:aria-invalid:border-destructive/64 focus-visible:aria-invalid:ring-destructive/48 data-disabled:cursor-not-allowed data-disabled:opacity-64 sm:size-4 dark:not-data-checked:bg-input/32 dark:aria-invalid:ring-destructive/24 dark:not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)] [[data-disabled],[data-checked],[aria-invalid]]:shadow-none\",\n className,\n )}\n data-slot=\"checkbox\"\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className=\"absolute -inset-px flex items-center justify-center rounded-[.25rem] text-primary-foreground data-unchecked:hidden data-checked:bg-primary data-indeterminate:text-foreground\"\n data-slot=\"checkbox-indicator\"\n render={(\n props: React.ComponentProps<\"span\">,\n state: CheckboxPrimitive.Indicator.State,\n ) => (\n <span {...props}>\n {state.indeterminate ? (\n <svg\n aria-hidden=\"true\"\n className=\"size-3.5 sm:size-3\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12h13.496\" />\n </svg>\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"size-3.5 sm:size-3\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n )}\n </span>\n )}\n />\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { CheckboxPrimitive };\n","\"use client\";\n\nimport { Field as FieldPrimitive } from \"@base-ui/react/field\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Field({\n className,\n ...props\n}: FieldPrimitive.Root.Props): React.ReactElement {\n return (\n <FieldPrimitive.Root\n className={cn(\"flex flex-col items-start gap-1.5\", className)}\n data-slot=\"field\"\n {...props}\n />\n );\n}\n\nexport function FieldLabel({\n className,\n ...props\n}: FieldPrimitive.Label.Props): React.ReactElement {\n return (\n <FieldPrimitive.Label\n className={cn(\n \"inline-flex cursor-pointer items-center gap-2 font-medium text-base/4 text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-64 sm:text-xs/3.5 ml-3\",\n className,\n )}\n data-slot=\"field-label\"\n {...props}\n />\n );\n}\n\nexport function FieldItem({\n className,\n ...props\n}: FieldPrimitive.Item.Props): React.ReactElement {\n return (\n <FieldPrimitive.Item\n className={cn(\"flex\", className)}\n data-slot=\"field-item\"\n {...props}\n />\n );\n}\n\nexport function FieldDescription({\n className,\n ...props\n}: FieldPrimitive.Description.Props): React.ReactElement {\n return (\n <FieldPrimitive.Description\n // Entrance morph when conditionally shown: height tweens from 0 via\n // interpolate-size (set on :root) plus a fade/blur rise. Removal is\n // unmount-instant; wrap in AnimatePresence when an exit is needed.\n className={cn(\n \"overflow-hidden text-muted-foreground text-xs ml-3 transition-[height,opacity,filter,translate] duration-300 ease-smooth-out starting:h-0 starting:translate-y-1 starting:opacity-0 starting:blur-small motion-reduce:transition-none\",\n className,\n )}\n data-slot=\"field-description\"\n {...props}\n />\n );\n}\n\nexport function FieldError({\n className,\n ...props\n}: FieldPrimitive.Error.Props): React.ReactElement {\n return (\n <FieldPrimitive.Error\n className={cn(\n \"overflow-hidden text-destructive-foreground text-xs ml-3 transition-[height,opacity,filter,translate] duration-300 ease-smooth-out starting:h-0 starting:translate-y-1 starting:opacity-0 starting:blur-small motion-reduce:transition-none\",\n className,\n )}\n data-slot=\"field-error\"\n {...props}\n />\n );\n}\n\nexport const FieldControl: typeof FieldPrimitive.Control =\n FieldPrimitive.Control;\nexport const FieldValidity: typeof FieldPrimitive.Validity =\n FieldPrimitive.Validity;\n\nexport { FieldPrimitive };\n","import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Frame({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative flex flex-col rounded-md bg-muted/72 p-1\",\n \"*:[[data-slot=frame-panel]+[data-slot=frame-panel]]:mt-1\",\n className,\n )}\n data-slot=\"frame\"\n {...props}\n />\n );\n}\n\nexport function FramePanel({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative rounded-md border bg-background bg-clip-padding p-5 shadow-xs/5 before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"frame-panel\"\n {...props}\n />\n );\n}\n\nexport function FrameHeader({\n className,\n ...props\n}: React.ComponentProps<\"header\">): React.ReactElement {\n return (\n <header\n className={cn(\"flex flex-col px-5 py-4\", className)}\n data-slot=\"frame-panel-header\"\n {...props}\n />\n );\n}\n\nexport function FrameTitle({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\"font-semibold text-sm\", className)}\n data-slot=\"frame-panel-title\"\n {...props}\n />\n );\n}\n\nexport function FrameDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"frame-panel-description\"\n {...props}\n />\n );\n}\n\nexport function FrameFooter({\n className,\n ...props\n}: React.ComponentProps<\"footer\">): React.ReactElement {\n return (\n <footer\n className={cn(\"px-5 py-4\", className)}\n data-slot=\"frame-panel-footer\"\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport type TInputProps = Omit<\n InputPrimitive.Props & React.RefAttributes<HTMLInputElement>,\n \"size\"\n> & {\n size?: \"sm\" | \"default\" | \"lg\" | number;\n unstyled?: boolean;\n nativeInput?: boolean;\n};\n\nexport function Input({\n className,\n size = \"default\",\n unstyled = false,\n nativeInput = false,\n style,\n ...props\n}: TInputProps): React.ReactElement {\n const inputClassName = cn(\n // The 5000000s background-color entry is the autofill-flash suppression\n // hack; height/line-height/padding tween size-prop changes.\n \"h-8.5 w-full min-w-0 rounded-[inherit] px-[calc(--spacing(3)-1px)] leading-8.5 outline-none [transition:background-color_5000000s_ease-in-out_0s,height_300ms_var(--ease-smooth-out),line-height_300ms_var(--ease-smooth-out),padding_300ms_var(--ease-smooth-out),font-size_300ms_var(--ease-smooth-out)] placeholder:text-muted-foreground/72 motion-reduce:[transition:background-color_5000000s_ease-in-out_0s] sm:h-7.5 sm:leading-7.5\",\n size === \"sm\" &&\n \"h-7.5 px-[calc(--spacing(2.5)-1px)] leading-7.5 sm:h-6.5 sm:leading-6.5\",\n size === \"lg\" && \"h-9.5 leading-9.5 sm:h-8.5 sm:leading-8.5\",\n props.type === \"search\" &&\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none\",\n props.type === \"file\" &&\n \"text-muted-foreground file:me-3 file:bg-transparent file:font-medium file:text-foreground file:text-sm\",\n );\n\n return (\n <span\n className={\n cn(\n !unstyled &&\n \"relative inline-flex w-full rounded-md border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-[box-shadow,border-color] duration-150 ease-smooth-out has-aria-invalid:animate-input-shake motion-reduce:animate-none motion-reduce:transition-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] has-focus-visible:has-aria-invalid:border-destructive/64 has-focus-visible:has-aria-invalid:ring-destructive/16 has-aria-invalid:border-destructive/36 has-focus-visible:border-ring has-autofill:bg-foreground/4 has-disabled:opacity-64 has-[:disabled,:focus-visible,[aria-invalid]]:shadow-none has-focus-visible:ring-[3px] sm:text-sm dark:bg-input/32 dark:has-autofill:bg-foreground/8 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n ) || undefined\n }\n data-size={size}\n data-slot=\"input-control\"\n >\n {nativeInput ? (\n <input\n className={inputClassName}\n data-slot=\"input\"\n size={typeof size === \"number\" ? size : undefined}\n style={typeof style === \"function\" ? undefined : style}\n {...props}\n />\n ) : (\n <InputPrimitive\n className={inputClassName}\n data-slot=\"input\"\n size={typeof size === \"number\" ? size : undefined}\n style={style}\n {...props}\n />\n )}\n </span>\n );\n}\n\nexport { InputPrimitive };\n","\"use client\";\n\nimport { Field as FieldPrimitive } from \"@base-ui/react/field\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport type TTextareaProps = React.ComponentPropsWithoutRef<\"textarea\"> &\n React.RefAttributes<HTMLTextAreaElement> & {\n size?: \"sm\" | \"default\" | \"lg\" | number;\n unstyled?: boolean;\n };\n\nexport function Textarea({\n className,\n size = \"default\",\n unstyled = false,\n ref,\n ...props\n}: TTextareaProps): React.ReactElement {\n return (\n <span\n className={\n cn(\n !unstyled &&\n \"relative inline-flex w-full rounded-md border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] has-focus-visible:has-aria-invalid:border-destructive/64 has-focus-visible:has-aria-invalid:ring-destructive/16 has-aria-invalid:border-destructive/36 has-focus-visible:border-ring has-disabled:opacity-64 has-[:disabled,:focus-visible,[aria-invalid]]:shadow-none has-focus-visible:ring-[3px] not-has-disabled:has-not-focus-visible:not-has-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] sm:text-sm dark:bg-input/32 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:has-not-focus-visible:not-has-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n ) || undefined\n }\n data-size={size}\n data-slot=\"textarea-control\"\n >\n <FieldPrimitive.Control\n ref={ref}\n value={props.value}\n defaultValue={props.defaultValue}\n disabled={props.disabled}\n id={props.id}\n name={props.name}\n render={(defaultProps: React.ComponentProps<\"textarea\">) => (\n <textarea\n className={cn(\n \"field-sizing-content min-h-17.5 w-full rounded-[inherit] px-[calc(--spacing(3)-1px)] py-[calc(--spacing(1.5)-1px)] outline-none max-sm:min-h-20.5\",\n size === \"sm\" &&\n \"min-h-16.5 px-[calc(--spacing(2.5)-1px)] py-[calc(--spacing(1)-1px)] max-sm:min-h-19.5\",\n size === \"lg\" &&\n \"min-h-18.5 py-[calc(--spacing(2)-1px)] max-sm:min-h-21.5\",\n )}\n data-slot=\"textarea\"\n {...mergeProps(defaultProps, props)}\n />\n )}\n />\n </span>\n );\n}\n\nexport { FieldPrimitive };\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Input, type TInputProps } from \"@/components/ui/input\";\nimport { Textarea, type TTextareaProps } from \"@/components/ui/textarea\";\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text select-none items-center justify-center gap-2 leading-none [&>kbd]:rounded-[calc(var(--radius)-5px)] in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4.5 sm:in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4 [&_svg]:-mx-0.5 not-has-[button]:**:[svg:not([class*='opacity-'])]:opacity-80\",\n {\n defaultVariants: {\n align: \"inline-start\",\n },\n variants: {\n align: {\n \"block-end\":\n \"order-last w-full justify-start px-[calc(--spacing(3)-1px)] pb-[calc(--spacing(3)-1px)] [.border-t]:pt-[calc(--spacing(3)-1px)] [[data-size=sm]+&]:px-[calc(--spacing(2.5)-1px)]\",\n \"block-start\":\n \"order-first w-full justify-start px-[calc(--spacing(3)-1px)] pt-[calc(--spacing(3)-1px)] [.border-b]:pb-[calc(--spacing(3)-1px)] [[data-size=sm]+&]:px-[calc(--spacing(2.5)-1px)]\",\n \"inline-end\":\n \"order-last pe-[calc(--spacing(3)-1px)] has-[>:last-child[data-slot=badge]]:-me-1.5 has-[>button]:-me-2 has-[>kbd:last-child]:me-[-0.35rem] [[data-size=sm]+&]:pe-[calc(--spacing(2.5)-1px)]\",\n \"inline-start\":\n \"order-first ps-[calc(--spacing(3)-1px)] has-[>:last-child[data-slot=badge]]:-ms-1.5 has-[>button]:-ms-2 has-[>kbd:last-child]:ms-[-0.35rem] [[data-size=sm]+&]:ps-[calc(--spacing(2.5)-1px)]\",\n },\n },\n },\n);\n\nexport function InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative inline-flex w-full min-w-0 items-center rounded-md border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] not-has-[input:disabled,textarea:disabled]:not-has-[input:focus-visible,textarea:focus-visible]:not-has-[input[aria-invalid],textarea[aria-invalid]]:before:shadow-[0_1px_--theme(--color-black/4%)] has-[input:focus-visible,textarea:focus-visible]:has-[input[aria-invalid],textarea[aria-invalid]]:border-destructive/64 has-[input:focus-visible,textarea:focus-visible]:has-[input[aria-invalid],textarea[aria-invalid]]:ring-destructive/16 has-[textarea]:h-auto has-data-[align=block-end]:h-auto has-data-[align=block-start]:h-auto has-data-[align=block-end]:flex-col has-data-[align=block-start]:flex-col has-[input:focus-visible,textarea:focus-visible]:border-ring has-[input[aria-invalid],textarea[aria-invalid]]:border-destructive/36 has-autofill:bg-foreground/4 has-[input:disabled,textarea:disabled]:opacity-64 has-[input:disabled,textarea:disabled,input:focus-visible,textarea:focus-visible,input[aria-invalid],textarea[aria-invalid]]:shadow-none has-[input:focus-visible,textarea:focus-visible]:ring-[3px] sm:text-sm dark:bg-input/32 dark:has-autofill:bg-foreground/8 dark:has-[input[aria-invalid],textarea[aria-invalid]]:ring-destructive/24 dark:not-has-[input:disabled,textarea:disabled]:not-has-[input:focus-visible,textarea:focus-visible]:not-has-[input[aria-invalid],textarea[aria-invalid]]:before:shadow-[0_-1px_--theme(--color-white/6%)] has-data-[align=inline-start]:**:[[data-size=sm]_input]:ps-1.5 has-data-[align=inline-end]:**:[[data-size=sm]_input]:pe-1.5 *:[[data-slot=input-control],[data-slot=textarea-control]]:contents *:[[data-slot=input-control],[data-slot=textarea-control]]:before:hidden has-[[data-align=block-start],[data-align=block-end]]:**:[input]:h-auto has-data-[align=inline-start]:**:[input]:ps-2 has-data-[align=inline-end]:**:[input]:pe-2 has-data-[align=block-end]:**:[input]:pt-1.5 has-data-[align=block-start]:**:[input]:pb-1.5 **:[textarea]:min-h-20.5 **:[textarea]:resize-none **:[textarea]:py-[calc(--spacing(3)-1px)] **:[textarea]:max-sm:min-h-23.5 **:[textarea_button]:rounded-[calc(var(--radius-md)-1px)]\",\n className,\n )}\n data-slot=\"input-group\"\n role=\"group\"\n {...props}\n />\n );\n}\n\nexport function InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof inputGroupAddonVariants>): React.ReactElement {\n return (\n <div\n className={cn(inputGroupAddonVariants({ align }), className)}\n data-align={align}\n data-slot=\"input-group-addon\"\n onMouseDown={(e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n const isInteractive = target.closest(\n \"button, a, input, select, textarea, [role='button'], [role='combobox'], [role='listbox'], [data-slot='select-trigger']\",\n );\n if (isInteractive) return;\n e.preventDefault();\n const parent = e.currentTarget.parentElement;\n const input = parent?.querySelector<\n HTMLInputElement | HTMLTextAreaElement\n >(\"input, textarea\");\n if (input && !parent?.querySelector(\"input:focus, textarea:focus\")) {\n input.focus();\n }\n }}\n {...props}\n />\n );\n}\n\nexport function InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">): React.ReactElement {\n return (\n <span\n className={cn(\n \"line-clamp-1 flex items-center gap-2 whitespace-nowrap text-muted-foreground leading-none in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4.5 sm:in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function InputGroupInput({\n className,\n ...props\n}: TInputProps): React.ReactElement {\n return <Input className={className} unstyled {...props} />;\n}\n\nexport function InputGroupTextarea({\n className,\n ...props\n}: TTextareaProps): React.ReactElement {\n return <Textarea className={className} unstyled {...props} />;\n}\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Label({\n className,\n render,\n sound = false,\n ...props\n}: useRender.ComponentProps<\"label\"> & {\n /**\n * Emit the cuelume hover tick. Opt-in: a label is a click target for its\n * control, and that control already owns the interaction cue (Checkbox\n * plays `toggle` on check/uncheck), so hover-ticking here double-sounds.\n * Inert until the app calls bindSounds().\n */\n sound?: boolean;\n}): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"inline-flex cursor-pointer items-center gap-2 font-medium text-base/4.5 text-foreground sm:text-sm/4\",\n className,\n ),\n \"data-cuelume-hover\": sound ? \"tick\" : undefined,\n \"data-slot\": \"label\",\n };\n\n return useRender({\n defaultTagName: \"label\",\n props: mergeProps<\"label\">(defaultProps, props),\n render,\n });\n}\n","\"use client\";\n\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const MenuCreateHandle: typeof MenuPrimitive.createHandle =\n MenuPrimitive.createHandle;\n\nexport const Menu: typeof MenuPrimitive.Root = MenuPrimitive.Root;\n\nexport const MenuPortal: typeof MenuPrimitive.Portal = MenuPrimitive.Portal;\n\nexport function MenuTrigger({\n className,\n children,\n ...props\n}: MenuPrimitive.Trigger.Props): React.ReactElement {\n return (\n <MenuPrimitive.Trigger\n className={className}\n data-slot=\"menu-trigger\"\n {...props}\n >\n {children}\n </MenuPrimitive.Trigger>\n );\n}\n\nexport function MenuPopup({\n children,\n className,\n sideOffset = 4,\n align = \"center\",\n alignOffset,\n side = \"bottom\",\n anchor,\n portalProps,\n ...props\n}: MenuPrimitive.Popup.Props & {\n align?: MenuPrimitive.Positioner.Props[\"align\"];\n sideOffset?: MenuPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: MenuPrimitive.Positioner.Props[\"alignOffset\"];\n side?: MenuPrimitive.Positioner.Props[\"side\"];\n anchor?: MenuPrimitive.Positioner.Props[\"anchor\"];\n portalProps?: MenuPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <MenuPortal {...portalProps}>\n <MenuPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50\"\n data-slot=\"menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n className={cn(\n \"relative flex not-[class*='w-']:min-w-32 origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"menu-popup\"\n {...props}\n >\n <div className=\"max-h-(--available-height) w-full overflow-y-auto p-1\">\n {children}\n </div>\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPortal>\n );\n}\n\nexport function MenuGroup(\n props: MenuPrimitive.Group.Props,\n): React.ReactElement {\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />;\n}\n\nexport function MenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}): React.ReactElement {\n return (\n <MenuPrimitive.Item\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-inset:ps-8 data-[variant=destructive]:text-destructive-foreground data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\",\n className,\n )}\n data-inset={inset}\n data-slot=\"menu-item\"\n data-variant={variant}\n {...props}\n />\n );\n}\n\nexport function MenuLinkItem({\n className,\n inset,\n variant = \"default\",\n closeOnClick = true,\n ...props\n}: MenuPrimitive.LinkItem.Props & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}): React.ReactElement {\n return (\n <MenuPrimitive.LinkItem\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-inset:ps-8 data-[variant=destructive]:text-destructive-foreground data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\",\n className,\n )}\n closeOnClick={closeOnClick}\n data-inset={inset}\n data-slot=\"menu-link-item\"\n data-variant={variant}\n {...props}\n />\n );\n}\n\nexport function MenuCheckboxItem({\n className,\n children,\n checked,\n variant = \"default\",\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n variant?: \"default\" | \"switch\";\n}): React.ReactElement {\n return (\n <MenuPrimitive.CheckboxItem\n checked={checked}\n className={cn(\n \"grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default items-center gap-2 rounded-sm py-1 ps-2 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n variant === \"switch\"\n ? \"grid-cols-[1fr_auto] gap-4 pe-1.5\"\n : \"grid-cols-[.75rem_1fr] pe-4\",\n className,\n )}\n data-slot=\"menu-checkbox-item\"\n {...props}\n >\n {variant === \"switch\" ? (\n <>\n <span className=\"col-start-1\">{children}</span>\n <MenuPrimitive.CheckboxItemIndicator\n className=\"inset-shadow-[0_1px_--theme(--color-black/4%)] inline-flex h-[calc(var(--thumb-size)+2px)] w-[calc(var(--thumb-size)*2-2px)] shrink-0 items-center rounded-full p-px outline-none transition-[background-color,box-shadow] duration-200 [--thumb-size:--spacing(4)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input data-disabled:opacity-64 sm:[--thumb-size:--spacing(3)]\"\n keepMounted\n >\n <span className=\"pointer-events-none block aspect-square h-full in-[[data-slot=menu-checkbox-item][data-checked]]:origin-[var(--thumb-size)_50%] origin-left in-[[data-slot=menu-checkbox-item][data-checked]]:translate-x-[calc(var(--thumb-size)-4px)] in-[[data-slot=menu-checkbox-item]:active]:not-data-disabled:scale-x-110 in-[[data-slot=menu-checkbox-item]:active]:rounded-[var(--thumb-size)/calc(var(--thumb-size)*1.10)] rounded-(--thumb-size) bg-background shadow-sm/5 will-change-transform [transition:translate_.15s,border-radius_.15s,scale_.1s_.1s,transform-origin_.15s]\" />\n </MenuPrimitive.CheckboxItemIndicator>\n </>\n ) : (\n <>\n <MenuPrimitive.CheckboxItemIndicator className=\"col-start-1 -ms-0.5\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </MenuPrimitive.CheckboxItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </>\n )}\n </MenuPrimitive.CheckboxItem>\n );\n}\n\nexport function MenuRadioGroup(\n props: MenuPrimitive.RadioGroup.Props,\n): React.ReactElement {\n return <MenuPrimitive.RadioGroup data-slot=\"menu-radio-group\" {...props} />;\n}\n\nexport function MenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props): React.ReactElement {\n return (\n <MenuPrimitive.RadioItem\n className={cn(\n \"grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default grid-cols-[.75rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"menu-radio-item\"\n {...props}\n >\n <MenuPrimitive.RadioItemIndicator className=\"col-start-1 -ms-0.5\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </MenuPrimitive.RadioItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </MenuPrimitive.RadioItem>\n );\n}\n\nexport function MenuGroupLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}): React.ReactElement {\n return (\n <MenuPrimitive.GroupLabel\n className={cn(\n \"px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:ps-9 sm:data-inset:ps-8\",\n className,\n )}\n data-inset={inset}\n data-slot=\"menu-label\"\n {...props}\n />\n );\n}\n\nexport function MenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props): React.ReactElement {\n return (\n <MenuPrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border\", className)}\n data-slot=\"menu-separator\"\n {...props}\n />\n );\n}\n\nexport function MenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\n \"ms-auto font-medium font-sans text-muted-foreground/72 text-xs tracking-widest\",\n className,\n )}\n data-slot=\"menu-shortcut\"\n {...props}\n />\n );\n}\n\nexport function MenuSub(\n props: MenuPrimitive.SubmenuRoot.Props,\n): React.ReactElement {\n return <MenuPrimitive.SubmenuRoot data-slot=\"menu-sub\" {...props} />;\n}\n\nexport function MenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}): React.ReactElement {\n return (\n <MenuPrimitive.SubmenuTrigger\n className={cn(\n \"flex min-h-8 items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-popup-open:bg-accent data-inset:ps-8 data-highlighted:text-accent-foreground data-popup-open:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not(:last-child)]:-mx-0.5 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className,\n )}\n data-inset={inset}\n data-slot=\"menu-sub-trigger\"\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto -me-0.5 opacity-80\" />\n </MenuPrimitive.SubmenuTrigger>\n );\n}\n\nexport function MenuSubPopup({\n className,\n sideOffset = 0,\n alignOffset,\n align = \"start\",\n ...props\n}: MenuPrimitive.Popup.Props & {\n align?: MenuPrimitive.Positioner.Props[\"align\"];\n sideOffset?: MenuPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: MenuPrimitive.Positioner.Props[\"alignOffset\"];\n}): React.ReactElement {\n const defaultAlignOffset = align !== \"center\" ? -5 : undefined;\n\n return (\n <MenuPopup\n align={align}\n alignOffset={alignOffset ?? defaultAlignOffset}\n className={className}\n data-slot=\"menu-sub-content\"\n side=\"inline-end\"\n sideOffset={sideOffset}\n {...props}\n />\n );\n}\n\nexport {\n MenuPrimitive,\n MenuCreateHandle as DropdownMenuCreateHandle,\n Menu as DropdownMenu,\n MenuPortal as DropdownMenuPortal,\n MenuTrigger as DropdownMenuTrigger,\n MenuPopup as DropdownMenuContent,\n MenuGroup as DropdownMenuGroup,\n MenuItem as DropdownMenuItem,\n MenuCheckboxItem as DropdownMenuCheckboxItem,\n MenuRadioGroup as DropdownMenuRadioGroup,\n MenuRadioItem as DropdownMenuRadioItem,\n MenuGroupLabel as DropdownMenuLabel,\n MenuSeparator as DropdownMenuSeparator,\n MenuShortcut as DropdownMenuShortcut,\n MenuSub as DropdownMenuSub,\n MenuSubTrigger as DropdownMenuSubTrigger,\n MenuSubPopup as DropdownMenuSubContent,\n};\n","\"use client\";\n\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function ScrollArea({\n className,\n children,\n scrollFade = false,\n scrollbarGutter = false,\n fill = false,\n clampContentMinWidth = true,\n overscrollContain = false,\n ...props\n}: ScrollAreaPrimitive.Root.Props & {\n scrollFade?: boolean | \"top\" | \"bottom\";\n scrollbarGutter?: boolean;\n fill?: boolean;\n clampContentMinWidth?: boolean;\n overscrollContain?: boolean;\n}): React.ReactElement {\n return (\n <ScrollAreaPrimitive.Root\n className={cn(\"size-full min-h-0\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n className={cn(\n \"h-full rounded-[inherit] outline-none transition-shadow focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background\",\n overscrollContain &&\n \"data-has-overflow-y:overscroll-y-contain data-has-overflow-x:overscroll-x-contain\",\n scrollFade === \"top\" && \"mask-t-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-start)))] mask-l-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-start)))]\",\n scrollFade === \"bottom\" && \"mask-b-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-end)))] mask-r-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-end)))]\",\n scrollFade &&\n \"mask-t-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-start)))] mask-b-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-end)))] mask-l-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-start)))] mask-r-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-end)))] [--fade-size:1.5rem]\",\n scrollbarGutter &&\n \"data-has-overflow-y:pe-2.5 data-has-overflow-x:pb-2.5\",\n )}\n data-slot=\"scroll-area-viewport\"\n >\n <ScrollAreaPrimitive.Content\n className={cn(fill && \"size-full\")}\n data-slot=\"scroll-area-content\"\n style={clampContentMinWidth ? { minWidth: 0 } : undefined}\n >\n {children}\n </ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar orientation=\"vertical\" />\n <ScrollBar orientation=\"horizontal\" />\n <ScrollAreaPrimitive.Corner data-slot=\"scroll-area-corner\" />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nexport function ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props): React.ReactElement {\n return (\n <ScrollAreaPrimitive.Scrollbar\n className={cn(\n \"m-1 flex opacity-0 transition-opacity delay-300 data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5 data-[orientation=horizontal]:flex-col data-hovering:opacity-100 data-scrolling:opacity-100 data-hovering:delay-0 data-scrolling:delay-0 data-hovering:duration-100 data-scrolling:duration-100\",\n className,\n )}\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n className=\"relative flex-1 rounded-full bg-foreground/0\"\n data-slot=\"scroll-area-thumb\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollAreaPrimitive };\n","\"use client\";\n\nimport { Autocomplete as AutocompletePrimitive } from \"@base-ui/react/autocomplete\";\nimport { ChevronsUpDownIcon, XIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"@/components/ui/input\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\n\nexport const Autocomplete: typeof AutocompletePrimitive.Root =\n AutocompletePrimitive.Root;\n\nexport function AutocompleteInput({\n className,\n showTrigger = false,\n showClear = false,\n startAddon,\n size,\n triggerProps,\n clearProps,\n ...props\n}: Omit<AutocompletePrimitive.Input.Props, \"size\"> & {\n showTrigger?: boolean;\n showClear?: boolean;\n startAddon?: React.ReactNode;\n size?: \"sm\" | \"default\" | \"lg\" | number;\n ref?: React.Ref<HTMLInputElement>;\n triggerProps?: AutocompletePrimitive.Trigger.Props;\n clearProps?: AutocompletePrimitive.Clear.Props;\n}): React.ReactElement {\n const sizeValue = (size ?? \"default\") as \"sm\" | \"default\" | \"lg\" | number;\n\n return (\n <AutocompletePrimitive.InputGroup\n className=\"relative not-has-[>*.w-full]:w-fit w-full text-foreground has-disabled:opacity-64\"\n data-slot=\"autocomplete-input-group\"\n >\n {startAddon && (\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-y-0 start-px z-10 flex items-center ps-[calc(--spacing(3)-1px)] opacity-80 has-[+[data-size=sm]]:ps-[calc(--spacing(2.5)-1px)] [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:-mx-0.5\"\n data-slot=\"autocomplete-start-addon\"\n >\n {startAddon}\n </div>\n )}\n <AutocompletePrimitive.Input\n className={cn(\n startAddon &&\n \"data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7.5)-1px)] *:data-[slot=autocomplete-input]:ps-[calc(--spacing(8.5)-1px)] sm:data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7)-1px)] sm:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(8)-1px)]\",\n sizeValue === \"sm\"\n ? \"has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-6.5\"\n : \"has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-7\",\n className,\n )}\n data-slot=\"autocomplete-input\"\n render={<Input nativeInput size={sizeValue} />}\n {...props}\n />\n {showTrigger && (\n <AutocompleteTrigger\n className={cn(\n \"absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-colors pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sizeValue === \"sm\" ? \"end-0\" : \"end-0.5\",\n )}\n {...triggerProps}\n >\n <AutocompletePrimitive.Icon data-slot=\"autocomplete-icon\">\n <ChevronsUpDownIcon />\n </AutocompletePrimitive.Icon>\n </AutocompleteTrigger>\n )}\n {showClear && (\n <AutocompleteClear\n className={cn(\n \"absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-colors pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sizeValue === \"sm\" ? \"end-0\" : \"end-0.5\",\n )}\n {...clearProps}\n >\n <XIcon />\n </AutocompleteClear>\n )}\n </AutocompletePrimitive.InputGroup>\n );\n}\n\nexport function AutocompletePopup({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n alignOffset,\n align = \"start\",\n anchor,\n portalProps,\n ...props\n}: AutocompletePrimitive.Popup.Props & {\n align?: AutocompletePrimitive.Positioner.Props[\"align\"];\n sideOffset?: AutocompletePrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: AutocompletePrimitive.Positioner.Props[\"alignOffset\"];\n side?: AutocompletePrimitive.Positioner.Props[\"side\"];\n anchor?: AutocompletePrimitive.Positioner.Props[\"anchor\"];\n portalProps?: AutocompletePrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <AutocompletePrimitive.Portal {...portalProps}>\n <AutocompletePrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50 select-none\"\n data-slot=\"autocomplete-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <span\n className={cn(\n \"relative flex max-h-full min-w-(--anchor-width) max-w-(--available-width) origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n >\n <AutocompletePrimitive.Popup\n className=\"flex max-h-[min(var(--available-height),23rem)] flex-1 flex-col text-foreground\"\n data-slot=\"autocomplete-popup\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Popup>\n </span>\n </AutocompletePrimitive.Positioner>\n </AutocompletePrimitive.Portal>\n );\n}\n\nexport function AutocompleteItem({\n className,\n children,\n ...props\n}: AutocompletePrimitive.Item.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Item\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center rounded-sm px-2 py-1 text-base outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm\",\n className,\n )}\n data-slot=\"autocomplete-item\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Item>\n );\n}\n\nexport function AutocompleteSeparator({\n className,\n ...props\n}: AutocompletePrimitive.Separator.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border last:hidden\", className)}\n data-slot=\"autocomplete-separator\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteGroup({\n className,\n ...props\n}: AutocompletePrimitive.Group.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Group\n className={cn(\"[[role=group]+&]:mt-1.5\", className)}\n data-slot=\"autocomplete-group\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteGroupLabel({\n className,\n ...props\n}: AutocompletePrimitive.GroupLabel.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.GroupLabel\n className={cn(\n \"px-2 py-1.5 font-medium text-muted-foreground text-xs\",\n className,\n )}\n data-slot=\"autocomplete-group-label\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteEmpty({\n className,\n ...props\n}: AutocompletePrimitive.Empty.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Empty\n className={cn(\n \"not-empty:p-2 text-center text-base text-muted-foreground sm:text-sm\",\n className,\n )}\n data-slot=\"autocomplete-empty\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteRow({\n className,\n ...props\n}: AutocompletePrimitive.Row.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Row\n className={className}\n data-slot=\"autocomplete-row\"\n {...props}\n />\n );\n}\n\nexport const AutocompleteValue: typeof AutocompletePrimitive.Value =\n AutocompletePrimitive.Value;\n\nexport function AutocompleteList({\n className,\n ...props\n}: AutocompletePrimitive.List.Props): React.ReactElement {\n return (\n <ScrollArea overscrollContain scrollbarGutter scrollFade>\n <AutocompletePrimitive.List\n className={cn(\n \"not-empty:scroll-py-1 not-empty:p-1 in-data-has-overflow-y:pe-3\",\n className,\n )}\n data-slot=\"autocomplete-list\"\n {...props}\n />\n </ScrollArea>\n );\n}\n\nexport function AutocompleteClear({\n className,\n ...props\n}: AutocompletePrimitive.Clear.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Clear\n className={cn(\n \"absolute end-0.5 top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-[color,background-color,box-shadow,opacity] pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"autocomplete-clear\"\n {...props}\n >\n <XIcon />\n </AutocompletePrimitive.Clear>\n );\n}\n\nexport function AutocompleteStatus({\n className,\n ...props\n}: AutocompletePrimitive.Status.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Status\n className={cn(\n \"px-3 py-2 font-medium text-muted-foreground text-xs empty:m-0 empty:p-0\",\n className,\n )}\n data-slot=\"autocomplete-status\"\n {...props}\n />\n );\n}\n\nexport const AutocompleteCollection: typeof AutocompletePrimitive.Collection =\n AutocompletePrimitive.Collection;\n\nexport function AutocompleteTrigger({\n className,\n children,\n ...props\n}: AutocompletePrimitive.Trigger.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Trigger\n className={className}\n data-slot=\"autocomplete-trigger\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Trigger>\n );\n}\n\nexport const useAutocompleteFilter: typeof AutocompletePrimitive.useFilter =\n AutocompletePrimitive.useFilter;\n\nexport { AutocompletePrimitive };\n","\"use client\";\n\nimport { Dialog as CommandDialogPrimitive } from \"@base-ui/react/dialog\";\nimport { SearchIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n Autocomplete,\n AutocompleteCollection,\n AutocompleteEmpty,\n AutocompleteGroup,\n AutocompleteGroupLabel,\n AutocompleteInput,\n AutocompleteItem,\n AutocompleteList,\n AutocompleteSeparator,\n} from \"@/components/ui/autocomplete\";\n\nexport const CommandDialog: typeof CommandDialogPrimitive.Root =\n CommandDialogPrimitive.Root;\n\nexport const CommandDialogPortal: typeof CommandDialogPrimitive.Portal =\n CommandDialogPrimitive.Portal;\n\nexport const CommandCreateHandle: typeof CommandDialogPrimitive.createHandle =\n CommandDialogPrimitive.createHandle;\n\nexport function CommandDialogTrigger(\n props: CommandDialogPrimitive.Trigger.Props,\n): React.ReactElement {\n return (\n <CommandDialogPrimitive.Trigger\n data-slot=\"command-dialog-trigger\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogBackdrop({\n className,\n ...props\n}: CommandDialogPrimitive.Backdrop.Props): React.ReactElement {\n return (\n <CommandDialogPrimitive.Backdrop\n className={cn(\n \"fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className,\n )}\n data-slot=\"command-dialog-backdrop\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogViewport({\n className,\n ...props\n}: CommandDialogPrimitive.Viewport.Props): React.ReactElement {\n return (\n <CommandDialogPrimitive.Viewport\n className={cn(\n \"fixed inset-0 z-50 flex flex-col items-center px-4 py-[max(--spacing(4),4vh)] sm:py-[10vh]\",\n className,\n )}\n data-slot=\"command-dialog-viewport\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogPopup({\n className,\n children,\n portalProps,\n ...props\n}: CommandDialogPrimitive.Popup.Props & {\n portalProps?: CommandDialogPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <CommandDialogPortal {...portalProps}>\n <CommandDialogBackdrop />\n <CommandDialogViewport>\n <CommandDialogPrimitive.Popup\n className={cn(\n \"relative row-start-2 flex max-h-105 min-h-0 w-full min-w-0 max-w-xl -translate-y-[calc(1.25rem*var(--nested-dialogs))] scale-[calc(1-0.1*var(--nested-dialogs))] flex-col rounded-2xl border bg-popover not-dark:bg-clip-padding text-popover-foreground opacity-[calc(1-0.1*var(--nested-dialogs))] shadow-lg/5 outline-none transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] data-nested:data-ending-style:translate-y-8 data-nested:data-starting-style:translate-y-8 data-nested-dialog-open:origin-top data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 **:data-[slot=scroll-area-viewport]:data-has-overflow-y:pe-1 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"command-dialog-popup\"\n {...props}\n >\n {children}\n </CommandDialogPrimitive.Popup>\n </CommandDialogViewport>\n </CommandDialogPortal>\n );\n}\n\nexport function Command({\n autoHighlight = \"always\",\n keepHighlight = true,\n ...props\n}: React.ComponentProps<typeof Autocomplete>): React.ReactElement {\n return (\n <Autocomplete\n autoHighlight={autoHighlight}\n inline\n keepHighlight={keepHighlight}\n open\n {...props}\n />\n );\n}\n\nexport function CommandInput({\n className,\n placeholder = undefined,\n ...props\n}: React.ComponentProps<typeof AutocompleteInput>): React.ReactElement {\n return (\n <div className=\"px-2.5 py-1.5\">\n <AutocompleteInput\n autoFocus\n className={cn(\n \"border-transparent! bg-transparent! shadow-none before:hidden has-focus-visible:ring-0\",\n className,\n )}\n placeholder={placeholder}\n size=\"lg\"\n startAddon={<SearchIcon />}\n {...props}\n />\n </div>\n );\n}\n\nexport function CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteList>): React.ReactElement {\n return (\n <AutocompleteList\n className={cn(\"not-empty:scroll-py-2 not-empty:p-2\", className)}\n data-slot=\"command-list\"\n {...props}\n />\n );\n}\n\nexport function CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteEmpty>): React.ReactElement {\n return (\n <AutocompleteEmpty\n className={cn(\"not-empty:py-6\", className)}\n data-slot=\"command-empty\"\n {...props}\n />\n );\n}\n\nexport function CommandPanel({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative -mx-px not-has-[+[data-slot=command-footer]]:-mb-px min-h-0 rounded-t-xl not-has-[+[data-slot=command-footer]]:rounded-b-2xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] not-has-[+[data-slot=command-footer]]:[clip-path:inset(0_1px_1px_1px_round_0_0_calc(var(--radius-2xl)-1px)_calc(var(--radius-2xl)-1px))] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)] **:data-[slot=scroll-area-scrollbar]:mt-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteGroup>): React.ReactElement {\n return (\n <AutocompleteGroup\n className={className}\n data-slot=\"command-group\"\n {...props}\n />\n );\n}\n\nexport function CommandGroupLabel({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteGroupLabel>): React.ReactElement {\n return (\n <AutocompleteGroupLabel\n className={className}\n data-slot=\"command-group-label\"\n {...props}\n />\n );\n}\n\nexport const CommandCollection = AutocompleteCollection;\n\nexport function CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteItem>): React.ReactElement {\n return (\n <AutocompleteItem\n className={cn(\"py-1.5\", className)}\n data-slot=\"command-item\"\n {...props}\n />\n );\n}\n\nexport function CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteSeparator>): React.ReactElement {\n return (\n <AutocompleteSeparator\n className={cn(\"my-2\", className)}\n data-slot=\"command-separator\"\n {...props}\n />\n );\n}\n\nexport function CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\n \"ms-auto font-medium font-sans text-muted-foreground/72 text-xs tracking-widest\",\n className,\n )}\n data-slot=\"command-shortcut\"\n {...props}\n />\n );\n}\n\nexport function CommandFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-5 py-3 text-muted-foreground text-xs\",\n className,\n )}\n data-slot=\"command-footer\"\n {...props}\n />\n );\n}\n\nexport { CommandDialogPrimitive };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover, PopoverPopup, PopoverTrigger } from \"@/components/ui/popover\"\nimport {\n Command,\n CommandInput,\n CommandList,\n CommandItem,\n CommandPanel,\n CommandEmpty,\n} from \"@/components/ui/command\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface IMenuCommandItem {\n id: string\n label: React.ReactNode\n /** Muted copy after the label (\"Upload from your computer\"). */\n description?: React.ReactNode\n icon?: React.ReactNode\n /** Right-aligned status (\"Connected\"). */\n trailing?: React.ReactNode\n /** Renders the row as a link instead of a button. */\n href?: string\n disabled?: boolean\n onSelect?: () => void\n}\n\nexport interface IMenuCommandListProps {\n items: IMenuCommandItem[]\n onSelect?: (item: IMenuCommandItem) => void\n className?: string\n}\n\n/**\n * Searchable command rows: icon · label · description · trailing status.\n * Uses the shared Command components; MenuCommand adds a popover trigger.\n *\n * @sketch \"Atom / Menu Command\"\n */\nexport function MenuCommandList({\n items,\n onSelect,\n className,\n}: IMenuCommandListProps): React.ReactElement {\n return (\n <Command\n items={items}\n autoHighlight\n \n itemToStringValue={(value) => {\n const item = value as IMenuCommandItem\n return typeof item.label === \"string\" ? item.label : item.id\n }}\n >\n <CommandPanel className={className} data-slot=\"menu-command-list\">\n <CommandInput\n aria-label=\"Search commands\"\n placeholder=\"Search commands…\"\n />\n <CommandEmpty>No commands found.</CommandEmpty>\n <CommandList className=\"\">\n {(item: IMenuCommandItem) => {\n const body = (\n <>\n {item.icon ? (\n <span className=\"size-4 [&>svg]:size-4 flex shrink-0 items-center justify-center text-text-secondary\">\n {item.icon}\n </span>\n ) : null}\n <span className=\"font-medium shrink-0 text-text-primary\">\n {item.label}\n </span>\n {item.description ? (\n <span className=\"truncate text-text-secondary\">\n {item.description}\n </span>\n ) : null}\n {item.trailing ? (\n <span className=\"pl-3 ml-auto shrink-0 text-semantic-success\">\n {item.trailing}\n </span>\n ) : null}\n </>\n )\n const rowClass = \"h-9 gap-2.5 rounded-md px-2 text-[13px]\"\n const select = () => {\n item.onSelect?.()\n onSelect?.(item)\n }\n return (\n <CommandItem\n key={item.id}\n value={item}\n className={rowClass}\n data-command={item.id}\n disabled={item.disabled}\n render={\n item.href && !item.disabled ? (\n <a href={item.href} />\n ) : undefined\n }\n onClick={() => {\n if (!item.disabled) select()\n }}\n >\n {body}\n </CommandItem>\n )\n }}\n </CommandList>\n </CommandPanel>\n </Command>\n )\n}\n\nexport interface IMenuCommandProps extends IMenuCommandListProps {\n /** The trigger element; receives the menu's trigger props. */\n children: React.ReactElement\n side?: React.ComponentProps<typeof PopoverPopup>[\"side\"]\n align?: React.ComponentProps<typeof PopoverPopup>[\"align\"]\n popupClassName?: string\n}\n\n/** A trigger and a popup of command rows, wired together. */\nexport function MenuCommand({\n children,\n items,\n onSelect,\n side = \"top\",\n align = \"center\",\n className,\n popupClassName,\n}: IMenuCommandProps): React.ReactElement {\n const [open, setOpen] = React.useState(false)\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger render={children} />\n <PopoverPopup\n align={align}\n className={cn(\"w-[28rem] max-w-[calc(100vw-2rem)] bg-transparent border-none\", popupClassName)}\n side={side}\n sideOffset={8}\n >\n <MenuCommandList\n className={className}\n items={items}\n onSelect={(item) => {\n setOpen(false)\n onSelect?.(item)\n }}\n />\n </PopoverPopup>\n </Popover>\n )\n}\n","\"use client\";\n\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const ContextMenu: typeof ContextMenuPrimitive.Root =\n ContextMenuPrimitive.Root;\n\nexport const ContextMenuPortal: typeof ContextMenuPrimitive.Portal =\n ContextMenuPrimitive.Portal;\n\nexport function ContextMenuTrigger({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.Trigger.Props): React.ReactElement {\n return (\n <ContextMenuPrimitive.Trigger\n className={className}\n data-slot=\"context-menu-trigger\"\n {...props}\n >\n {children}\n </ContextMenuPrimitive.Trigger>\n );\n}\n\nexport function ContextMenuPopup({\n children,\n className,\n sideOffset = 4,\n align = \"center\",\n alignOffset,\n side = \"bottom\",\n anchor,\n portalProps,\n ...props\n}: ContextMenuPrimitive.Popup.Props & {\n align?: ContextMenuPrimitive.Positioner.Props[\"align\"];\n sideOffset?: ContextMenuPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: ContextMenuPrimitive.Positioner.Props[\"alignOffset\"];\n side?: ContextMenuPrimitive.Positioner.Props[\"side\"];\n anchor?: ContextMenuPrimitive.Positioner.Props[\"anchor\"];\n portalProps?: ContextMenuPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <ContextMenuPortal {...portalProps}>\n <ContextMenuPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50\"\n data-slot=\"context-menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <ContextMenuPrimitive.Popup\n className={cn(\n \"relative flex not-[class*='w-']:min-w-32 origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"context-menu-popup\"\n {...props}\n >\n <div className=\"max-h-(--available-height) w-full overflow-y-auto p-1\">\n {children}\n </div>\n </ContextMenuPrimitive.Popup>\n </ContextMenuPrimitive.Positioner>\n </ContextMenuPortal>\n );\n}\n\nexport function ContextMenuGroup(\n props: ContextMenuPrimitive.Group.Props,\n): React.ReactElement {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n );\n}\n\nexport function ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}): React.ReactElement {\n return (\n <ContextMenuPrimitive.Item\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-inset:ps-8 data-[variant=destructive]:text-destructive-foreground data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\",\n className,\n )}\n data-inset={inset}\n data-slot=\"context-menu-item\"\n data-variant={variant}\n {...props}\n />\n );\n}\n\nexport function ContextMenuLinkItem({\n className,\n inset,\n variant = \"default\",\n closeOnClick = true,\n ...props\n}: ContextMenuPrimitive.LinkItem.Props & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}): React.ReactElement {\n return (\n <ContextMenuPrimitive.LinkItem\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-inset:ps-8 data-[variant=destructive]:text-destructive-foreground data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\",\n className,\n )}\n closeOnClick={closeOnClick}\n data-inset={inset}\n data-slot=\"context-menu-link-item\"\n data-variant={variant}\n {...props}\n />\n );\n}\n\nexport function ContextMenuCheckboxItem({\n className,\n children,\n checked,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props & {\n variant?: \"default\" | \"switch\";\n}): React.ReactElement {\n return (\n <ContextMenuPrimitive.CheckboxItem\n checked={checked}\n className={cn(\n \"grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default items-center gap-2 rounded-sm py-1 ps-2 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n variant === \"switch\"\n ? \"grid-cols-[1fr_auto] gap-4 pe-1.5\"\n : \"grid-cols-[.75rem_1fr] pe-4\",\n className,\n )}\n data-slot=\"context-menu-checkbox-item\"\n {...props}\n >\n {variant === \"switch\" ? (\n <>\n <span className=\"col-start-1\">{children}</span>\n <ContextMenuPrimitive.CheckboxItemIndicator\n className=\"inset-shadow-[0_1px_--theme(--color-black/4%)] inline-flex h-[calc(var(--thumb-size)+2px)] w-[calc(var(--thumb-size)*2-2px)] shrink-0 items-center rounded-full p-px outline-none transition-[background-color,box-shadow] duration-200 [--thumb-size:--spacing(4)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input data-disabled:opacity-64 sm:[--thumb-size:--spacing(3)]\"\n keepMounted\n >\n <span className=\"pointer-events-none block aspect-square h-full in-[[data-slot=context-menu-checkbox-item][data-checked]]:origin-[var(--thumb-size)_50%] origin-left in-[[data-slot=context-menu-checkbox-item][data-checked]]:translate-x-[calc(var(--thumb-size)-4px)] in-[[data-slot=context-menu-checkbox-item]:active]:not-data-disabled:scale-x-110 in-[[data-slot=context-menu-checkbox-item]:active]:rounded-[var(--thumb-size)/calc(var(--thumb-size)*1.10)] rounded-(--thumb-size) bg-background shadow-sm/5 will-change-transform [transition:translate_.15s,border-radius_.15s,scale_.1s_.1s,transform-origin_.15s]\" />\n </ContextMenuPrimitive.CheckboxItemIndicator>\n </>\n ) : (\n <>\n <ContextMenuPrimitive.CheckboxItemIndicator className=\"col-start-1 -ms-0.5\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </ContextMenuPrimitive.CheckboxItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </>\n )}\n </ContextMenuPrimitive.CheckboxItem>\n );\n}\n\nexport function ContextMenuRadioGroup(\n props: ContextMenuPrimitive.RadioGroup.Props,\n): React.ReactElement {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n );\n}\n\nexport function ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props): React.ReactElement {\n return (\n <ContextMenuPrimitive.RadioItem\n className={cn(\n \"grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default grid-cols-[.75rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"context-menu-radio-item\"\n {...props}\n >\n <ContextMenuPrimitive.RadioItemIndicator className=\"col-start-1 -ms-0.5\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </ContextMenuPrimitive.RadioItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </ContextMenuPrimitive.RadioItem>\n );\n}\n\nexport function ContextMenuGroupLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}): React.ReactElement {\n return (\n <ContextMenuPrimitive.GroupLabel\n className={cn(\n \"px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:ps-9 sm:data-inset:ps-8\",\n className,\n )}\n data-inset={inset}\n data-slot=\"context-menu-label\"\n {...props}\n />\n );\n}\n\nexport function ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.Separator.Props): React.ReactElement {\n return (\n <ContextMenuPrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border\", className)}\n data-slot=\"context-menu-separator\"\n {...props}\n />\n );\n}\n\nexport function ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\n \"ms-auto font-medium font-sans text-muted-foreground/72 text-xs tracking-widest\",\n className,\n )}\n data-slot=\"context-menu-shortcut\"\n {...props}\n />\n );\n}\n\nexport function ContextMenuSub(\n props: ContextMenuPrimitive.SubmenuRoot.Props,\n): React.ReactElement {\n return (\n <ContextMenuPrimitive.SubmenuRoot data-slot=\"context-menu-sub\" {...props} />\n );\n}\n\nexport function ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}): React.ReactElement {\n return (\n <ContextMenuPrimitive.SubmenuTrigger\n className={cn(\n \"flex min-h-8 items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-popup-open:bg-accent data-inset:ps-8 data-highlighted:text-accent-foreground data-popup-open:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&>svg:not(:last-child)]:-mx-0.5 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className,\n )}\n data-inset={inset}\n data-slot=\"context-menu-sub-trigger\"\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ms-auto -me-0.5 opacity-80\" />\n </ContextMenuPrimitive.SubmenuTrigger>\n );\n}\n\nexport function ContextMenuSubPopup({\n className,\n sideOffset = 0,\n alignOffset,\n align = \"start\",\n ...props\n}: ContextMenuPrimitive.Popup.Props & {\n align?: ContextMenuPrimitive.Positioner.Props[\"align\"];\n sideOffset?: ContextMenuPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: ContextMenuPrimitive.Positioner.Props[\"alignOffset\"];\n}): React.ReactElement {\n const defaultAlignOffset = align !== \"center\" ? -5 : undefined;\n\n return (\n <ContextMenuPopup\n align={align}\n alignOffset={alignOffset ?? defaultAlignOffset}\n className={className}\n data-slot=\"context-menu-sub-content\"\n side=\"inline-end\"\n sideOffset={sideOffset}\n {...props}\n />\n );\n}\n\nexport { ContextMenuPrimitive };\n","\"use client\";\n\nimport { Toast } from \"@base-ui/react/toast\";\nimport {\n CircleAlertIcon,\n CircleCheckIcon,\n InfoIcon,\n LoaderCircleIcon,\n TriangleAlertIcon,\n} from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { buttonVariants } from \"@/components/ui/button\";\n\nconst TOAST_ICONS = {\n error: CircleAlertIcon,\n info: InfoIcon,\n loading: LoaderCircleIcon,\n success: CircleCheckIcon,\n warning: TriangleAlertIcon,\n} as const;\n\ntype TSwipeDirection = \"up\" | \"down\" | \"left\" | \"right\";\n\ntype TToastData = {\n rootProps?: Omit<\n React.ComponentProps<typeof Toast.Root>,\n \"children\" | \"className\" | \"swipeDirection\" | \"toast\"\n >;\n tooltipStyle?: boolean;\n};\n\nfunction getSwipeDirection(position: TToastPosition): TSwipeDirection[] {\n const verticalDirection: TSwipeDirection = position.startsWith(\"top\")\n ? \"up\"\n : \"down\";\n\n if (position.includes(\"center\")) {\n return [verticalDirection];\n }\n\n if (position.includes(\"left\")) {\n return [\"left\", verticalDirection];\n }\n\n return [\"right\", verticalDirection];\n}\n\nfunction upsertReplayClassName(toast: {\n type?: string;\n updateKey?: number;\n}): string | undefined {\n const k = toast.updateKey ?? 0;\n if (k <= 0) return undefined;\n const isEven = k % 2 === 0;\n if (toast.type === \"error\") {\n return isEven ? \"animate-toast-error-even\" : \"animate-toast-error-odd\";\n }\n return isEven ? \"animate-toast-success-even\" : \"animate-toast-success-odd\";\n}\n\nfunction Toasts({\n position,\n portalProps,\n}: {\n position: TToastPosition;\n portalProps?: React.ComponentProps<typeof Toast.Portal>;\n}): React.ReactElement {\n const { toasts } = Toast.useToastManager();\n const swipeDirection = getSwipeDirection(position);\n\n return (\n <Toast.Portal data-slot=\"toast-portal\" {...portalProps}>\n <Toast.Viewport\n className={cn(\n \"fixed z-60 mx-auto flex w-[calc(100%-var(--toast-inset)*2)] max-w-90 [--toast-inset:--spacing(4)] sm:[--toast-inset:--spacing(8)]\",\n // Vertical positioning\n \"data-[position*=top]:top-(--toast-inset)\",\n \"data-[position*=bottom]:bottom-(--toast-inset)\",\n // Horizontal positioning\n \"data-[position*=left]:left-(--toast-inset)\",\n \"data-[position*=right]:right-(--toast-inset)\",\n \"data-[position*=center]:left-1/2 data-[position*=center]:-translate-x-1/2\",\n )}\n data-position={position}\n data-slot=\"toast-viewport\"\n >\n {toasts.map((toast) => {\n const Icon = toast.type\n ? TOAST_ICONS[toast.type as keyof typeof TOAST_ICONS]\n : null;\n const toastData = toast.data as TToastData | undefined;\n\n return (\n <Toast.Root\n key={toast.id}\n className={cn(\n \"absolute z-[calc(9999-var(--toast-index))] h-(--toast-calc-height) w-full select-none rounded-lg border bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(1%*max(0,var(--toast-index,0))))] not-dark:bg-clip-padding text-popover-foreground shadow-lg/5 [transition:transform_.5s_cubic-bezier(.22,1,.36,1),opacity_.5s,height_.15s,background-color_.5s] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-expanded:bg-popover dark:bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(6%*max(0,var(--toast-index,0))))] dark:data-expanded:bg-popover dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n // Base positioning using data-position\n \"data-[position*=right]:right-0 data-[position*=right]:left-auto\",\n \"data-[position*=left]:right-auto data-[position*=left]:left-0\",\n \"data-[position*=center]:right-0 data-[position*=center]:left-0\",\n \"data-[position*=top]:top-0 data-[position*=top]:bottom-auto data-[position*=top]:origin-[50%_calc(50%-50%*min(var(--toast-index,0),1))]\",\n \"data-[position*=bottom]:top-auto data-[position*=bottom]:bottom-0 data-[position*=bottom]:origin-[50%_calc(50%+50%*min(var(--toast-index,0),1))]\",\n // Gap fill for hover\n \"after:absolute after:left-0 after:h-[calc(var(--toast-gap)+1px)] after:w-full\",\n \"data-[position*=top]:after:top-full\",\n \"data-[position*=bottom]:after:bottom-full\",\n // Define some variables\n \"[--toast-calc-height:var(--toast-frontmost-height,var(--toast-height))] [--toast-gap:--spacing(3)] [--toast-peek:--spacing(3)] [--toast-scale:calc(max(0,1-(var(--toast-index)*.1)))] [--toast-shrink:calc(1-var(--toast-scale))]\",\n // Define offset-y variable\n \"data-[position*=top]:[--toast-calc-offset-y:calc(var(--toast-offset-y)+var(--toast-index)*var(--toast-gap)+var(--toast-swipe-movement-y))]\",\n \"data-[position*=bottom]:[--toast-calc-offset-y:calc(var(--toast-offset-y)*-1+var(--toast-index)*var(--toast-gap)*-1+var(--toast-swipe-movement-y))]\",\n // Default state transform\n \"data-[position*=top]:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--toast-peek))+(var(--toast-shrink)*var(--toast-calc-height))))_scale(var(--toast-scale))]\",\n \"data-[position*=bottom]:transform-[translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--toast-peek))-(var(--toast-shrink)*var(--toast-calc-height))))_scale(var(--toast-scale))]\",\n // Limited state\n \"data-limited:opacity-0\",\n // Expanded state\n \"data-expanded:h-(--toast-height)\",\n \"data-position:data-expanded:transform-[translateX(var(--toast-swipe-movement-x))_translateY(var(--toast-calc-offset-y))]\",\n // Starting and ending animations\n \"data-[position*=top]:data-starting-style:transform-[translateY(calc(-100%-var(--toast-inset)))]\",\n \"data-[position*=bottom]:data-starting-style:transform-[translateY(calc(100%+var(--toast-inset)))]\",\n \"data-ending-style:opacity-0\",\n // Ending animations (direction-aware)\n \"data-[position*=top]:data-ending-style:not-data-limited:not-data-swipe-direction:transform-[translateY(calc(-100%-var(--toast-inset)))]\",\n \"data-[position*=bottom]:data-ending-style:not-data-limited:not-data-swipe-direction:transform-[translateY(calc(100%+var(--toast-inset)))]\",\n \"data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-100%-var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]\",\n \"data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+100%+var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]\",\n \"data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-100%-var(--toast-inset)))]\",\n \"data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+100%+var(--toast-inset)))]\",\n // Ending animations (expanded)\n \"data-expanded:data-ending-style:data-[swipe-direction=left]:transform-[translateX(calc(var(--toast-swipe-movement-x)-100%-var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=right]:transform-[translateX(calc(var(--toast-swipe-movement-x)+100%+var(--toast-inset)))_translateY(var(--toast-calc-offset-y))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=up]:transform-[translateY(calc(var(--toast-swipe-movement-y)-100%-var(--toast-inset)))]\",\n \"data-expanded:data-ending-style:data-[swipe-direction=down]:transform-[translateY(calc(var(--toast-swipe-movement-y)+100%+var(--toast-inset)))]\",\n upsertReplayClassName(toast),\n )}\n {...toastData?.rootProps}\n data-position={position}\n swipeDirection={swipeDirection}\n toast={toast}\n >\n <Toast.Content className=\"pointer-events-auto flex items-center justify-between gap-1.5 overflow-hidden px-3.5 py-3 text-sm transition-opacity duration-250 data-behind:not-data-expanded:pointer-events-none data-behind:opacity-0 data-expanded:opacity-100\">\n <div className=\"flex gap-2\">\n {Icon && (\n <div\n className=\"[&>svg]:h-lh [&>svg]:w-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n data-slot=\"toast-icon\"\n >\n <Icon className=\"in-data-[type=loading]:animate-spin in-data-[type=error]:text-destructive in-data-[type=info]:text-info in-data-[type=success]:text-success in-data-[type=warning]:text-warning in-data-[type=loading]:opacity-80\" />\n </div>\n )}\n\n <div className=\"flex flex-col gap-0.5\">\n <Toast.Title\n className=\"font-medium\"\n data-slot=\"toast-title\"\n />\n <Toast.Description\n className=\"text-muted-foreground\"\n data-slot=\"toast-description\"\n />\n </div>\n </div>\n {toast.actionProps && (\n <Toast.Action\n className={buttonVariants({ size: \"xs\" })}\n data-slot=\"toast-action\"\n >\n {toast.actionProps.children}\n </Toast.Action>\n )}\n </Toast.Content>\n </Toast.Root>\n );\n })}\n </Toast.Viewport>\n </Toast.Portal>\n );\n}\n\nfunction AnchoredToasts({\n portalProps,\n}: {\n portalProps?: React.ComponentProps<typeof Toast.Portal>;\n}): React.ReactElement {\n const { toasts } = Toast.useToastManager();\n\n return (\n <Toast.Portal data-slot=\"toast-portal-anchored\" {...portalProps}>\n <Toast.Viewport\n className=\"outline-none\"\n data-slot=\"toast-viewport-anchored\"\n >\n {toasts.map((toast) => {\n const Icon = toast.type\n ? TOAST_ICONS[toast.type as keyof typeof TOAST_ICONS]\n : null;\n const toastData = toast.data as TToastData | undefined;\n const tooltipStyle = toastData?.tooltipStyle ?? false;\n const positionerProps = toast.positionerProps;\n\n if (!positionerProps?.anchor) {\n return null;\n }\n\n return (\n <Toast.Positioner\n key={toast.id}\n className=\"z-60 max-w-[min(--spacing(64),var(--available-width))]\"\n data-slot=\"toast-positioner\"\n sideOffset={positionerProps.sideOffset ?? 4}\n toast={toast}\n >\n <Toast.Root\n className={cn(\n \"relative text-balance border bg-popover not-dark:bg-clip-padding text-popover-foreground text-xs transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n tooltipStyle\n ? \"rounded-md shadow-md/5 before:rounded-[calc(var(--radius-md)-1px)]\"\n : \"rounded-lg shadow-lg/5 before:rounded-[calc(var(--radius-lg)-1px)]\",\n upsertReplayClassName(toast),\n )}\n {...toastData?.rootProps}\n data-slot=\"toast-popup\"\n toast={toast}\n >\n {tooltipStyle ? (\n <Toast.Content className=\"pointer-events-auto px-2 py-1\">\n <Toast.Title data-slot=\"toast-title\" />\n </Toast.Content>\n ) : (\n <Toast.Content className=\"pointer-events-auto flex items-center justify-between gap-1.5 overflow-hidden px-3.5 py-3 text-sm\">\n <div className=\"flex gap-2\">\n {Icon && (\n <div\n className=\"[&>svg]:h-lh [&>svg]:w-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n data-slot=\"toast-icon\"\n >\n <Icon className=\"in-data-[type=loading]:animate-spin in-data-[type=error]:text-destructive in-data-[type=info]:text-info in-data-[type=success]:text-success in-data-[type=warning]:text-warning in-data-[type=loading]:opacity-80\" />\n </div>\n )}\n\n <div className=\"flex flex-col gap-0.5\">\n <Toast.Title\n className=\"font-medium\"\n data-slot=\"toast-title\"\n />\n <Toast.Description\n className=\"text-muted-foreground\"\n data-slot=\"toast-description\"\n />\n </div>\n </div>\n {toast.actionProps && (\n <Toast.Action\n className={buttonVariants({ size: \"xs\" })}\n data-slot=\"toast-action\"\n >\n {toast.actionProps.children}\n </Toast.Action>\n )}\n </Toast.Content>\n )}\n </Toast.Root>\n </Toast.Positioner>\n );\n })}\n </Toast.Viewport>\n </Toast.Portal>\n );\n}\n\nexport const toastManager: ReturnType<typeof Toast.createToastManager> =\n Toast.createToastManager();\n\nexport const anchoredToastManager: ReturnType<typeof Toast.createToastManager> =\n Toast.createToastManager();\n\nexport type TToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport interface IToastProviderProps extends Toast.Provider.Props {\n position?: TToastPosition;\n portalProps?: React.ComponentProps<typeof Toast.Portal>;\n}\n\nexport function ToastProvider({\n children,\n position = \"bottom-right\",\n portalProps,\n ...props\n}: IToastProviderProps): React.ReactElement {\n return (\n <Toast.Provider toastManager={toastManager} {...props}>\n {children}\n <Toasts portalProps={portalProps} position={position} />\n </Toast.Provider>\n );\n}\n\nexport interface IAnchoredToastProviderProps extends Toast.Provider.Props {\n portalProps?: React.ComponentProps<typeof Toast.Portal>;\n}\n\nexport function AnchoredToastProvider({\n children,\n portalProps,\n ...props\n}: IAnchoredToastProviderProps): React.ReactElement {\n return (\n <Toast.Provider toastManager={anchoredToastManager} {...props}>\n {children}\n <AnchoredToasts portalProps={portalProps} />\n </Toast.Provider>\n );\n}\n\nexport { Toast as ToastPrimitive };\n","import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\";\n\nimport { OTPField as OTPFieldPrimitive } from \"@base-ui/react/otp-field\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { playCue } from \"@/lib/sound\";\nimport { Separator } from \"@/components/ui/separator\";\n\nexport function OTPField({\n className,\n size = \"default\",\n sound = true,\n onValueChange,\n ...props\n}: React.ComponentProps<typeof OTPFieldPrimitive.Root> & {\n size?: \"default\" | \"lg\";\n /** Play a tick cue per entered character. Inert until bindSounds(). */\n sound?: boolean;\n}): React.ReactElement {\n // Typing is keyboard-driven, so the cue is imperative (playCue is gated on\n // the app having called bindSounds). Tick only when characters are added.\n const lastLength = React.useRef(\n String(props.value ?? props.defaultValue ?? \"\").length,\n );\n\n const handleValueChange: NonNullable<typeof onValueChange> = (\n value,\n ...rest\n ) => {\n if (sound && value.length > lastLength.current) {\n playCue(\"tick\");\n }\n lastLength.current = value.length;\n onValueChange?.(value, ...rest);\n };\n\n return (\n <OTPFieldPrimitive.Root\n className={cn(\n \"flex items-center gap-2 has-disabled:opacity-64 has-disabled:**:data-[slot=otp-field-input]:shadow-none has-disabled:**:data-[slot=otp-field-input]:before:shadow-none!\",\n className,\n )}\n data-size={size}\n data-slot=\"otp-field\"\n onValueChange={handleValueChange}\n {...props}\n />\n );\n}\n\nexport function OTPFieldInput({\n className,\n ...props\n}: React.ComponentProps<typeof OTPFieldPrimitive.Input>): React.ReactElement {\n return (\n <OTPFieldPrimitive.Input\n className={cn(\n \"relative in-[[data-slot=otp-field][data-size=lg]]:size-10 size-9 min-w-0 rounded-md border border-input bg-background not-dark:bg-clip-padding text-center in-[[data-slot=otp-field][data-size=lg]]:text-lg text-base text-foreground in-[[data-slot=otp-field][data-size=lg]]:leading-10 leading-9 shadow-xs/5 outline-none ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] not-focus-visible:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] focus-visible:z-10 focus-visible:border-ring focus-visible:shadow-none focus-visible:ring-[3px] focus-visible:ring-ring/24 aria-invalid:border-destructive/36 aria-invalid:shadow-none aria-invalid:focus-visible:border-destructive/64 aria-invalid:focus-visible:ring-destructive/16 sm:in-[[data-slot=otp-field][data-size=lg]]:size-9 sm:size-8 sm:in-[[data-slot=otp-field][data-size=lg]]:text-base sm:text-sm sm:in-[[data-slot=otp-field][data-size=lg]]:leading-9 sm:leading-8 dark:bg-input/32 dark:aria-invalid:focus-visible:ring-destructive/24 dark:not-focus-visible:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"otp-field-input\"\n spellCheck={false}\n {...props}\n />\n );\n}\n\nexport function OTPFieldSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>): React.ReactElement {\n return (\n <OTPFieldPrimitive.Separator\n render={\n <Separator\n className={cn(\n \"rounded-full bg-input data-[orientation=horizontal]:h-0.5 data-[orientation=horizontal]:w-3\",\n className,\n )}\n orientation=\"horizontal\"\n {...props}\n />\n }\n />\n );\n}\n\nexport { OTPFieldPrimitive };\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * CFM file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeCfm({\n size = 64,\n title = \"CFM file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-36 -48 1060 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"cfm-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"cfm-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"cfm-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <path\n d=\"M190,0 L380,0 C469.566859,0 514.350288,0 542.175144,27.8248558 C549.969778,35.6194896 556.348349,44.7112465 561.025334,54.6931524 C570,73.8474329 570,98.5649553 570,148 C570,197.435045 570,222.152567 561.025334,241.306848 C556.348349,251.288754 549.969778,260.38051 542.175144,268.175144 C514.350288,296 469.566859,296 380,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"cfm-badge-l-path-9\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-10\"\n >\n <feOffset\n dx=\"15\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-11\"\n >\n <feGaussianBlur\n stdDeviation=\"7.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-12\"\n dy=\"-9\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.572021293 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <g id=\"cfm-badge-l-text-12\">\n <g transform=\"translate(51, 36)\">\n <defs>\n <g>\n <g id=\"cfm-badge-l-lbl-glyph0-1\">\n <path d=\"M 141.40625 -41.203125 L 111.40625 -50.203125 C 106.40625 -33.59375 94.59375 -24.796875 77.40625 -24.796875 C 54 -24.796875 39.59375 -42.203125 39.59375 -70.40625 C 39.59375 -98.796875 54 -116 77.203125 -116 C 94.59375 -116 106.40625 -107.203125 111.40625 -90.59375 L 141.796875 -99.796875 C 134.203125 -128.59375 112 -144 77.40625 -144 C 35.203125 -144 6.40625 -114.796875 6.40625 -70.40625 C 6.40625 -26.203125 35.203125 3.203125 77.59375 3.203125 C 112 3.203125 133.796875 -12.40625 141.40625 -41.203125 Z M 141.40625 -41.203125 \" />\n </g>\n <g id=\"cfm-badge-l-lbl-glyph0-2\">\n <path d=\"M 11.59375 0 L 42.796875 0 L 42.796875 -60 L 88.40625 -60 L 88.40625 -86.59375 L 42.796875 -86.59375 L 42.796875 -114.40625 L 99.796875 -114.40625 L 99.796875 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n <g id=\"cfm-badge-l-lbl-glyph0-3\">\n <path d=\"M 11.59375 0 L 41.40625 0 L 41.40625 -125.59375 L 67.40625 0 L 111.59375 0 L 137.796875 -125.59375 L 137.796875 0 L 167.40625 0 L 167.40625 -141 L 113 -141 L 89.59375 -14.40625 L 66 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#cfm-badge-l-lbl-glyph0-1\" x=\"0.172602\" y=\"182\" />\n <use\n href=\"#cfm-badge-l-lbl-glyph0-2\"\n x=\"151.332602\"\n y=\"182\"\n />\n <use\n href=\"#cfm-badge-l-lbl-glyph0-3\"\n x=\"259.292602\"\n y=\"182\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-l-filter-13\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"11\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.24543391 0 0 0 0 0.172711707 0 0 0 0 0 0 0 0 0.93 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-l-filter-4)\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#cfm-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-l-filter-5)\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#cfm-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#cfm-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#cfm-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#cfm-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g opacity=\"0.98\">\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-l-filter-10)\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n <use\n fill=\"#F7B500\"\n fillRule=\"evenodd\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-l-filter-11)\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#cfm-badge-l-filter-13)\"\n href=\"#cfm-badge-l-text-12\"\n ></use>\n <use href=\"#cfm-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"cfm-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-d-filter-8\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-d-filter-9\"\n >\n <feGaussianBlur\n stdDeviation=\"7\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-14\"\n dy=\"-3\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.44 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-badge-d-filter-11\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"11.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.652951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-d-filter-4)\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#cfm-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-d-filter-5)\"\n href=\"#cfm-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#cfm-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-d-filter-8)\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n <use\n fill=\"#F7B500\"\n fillRule=\"evenodd\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-badge-d-filter-9)\"\n href=\"#cfm-badge-l-path-9\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#cfm-badge-d-filter-11)\"\n href=\"#cfm-badge-l-text-12\"\n ></use>\n <use href=\"#cfm-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeCfm\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * Corpus file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeCorpus({\n size = 64,\n title = \"Corpus file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-44 -48 1068 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"corpus-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"corpus-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"corpus-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-9\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.655695735 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <path\n d=\"M190,0 L688,0 C777.566859,0 822.350288,0 850.175144,27.8248558 C857.969778,35.6194896 864.348349,44.7112465 869.025334,54.6931524 C878,73.8474329 878,98.5649553 878,148 C878,197.435045 878,222.152567 869.025334,241.306848 C864.348349,251.288754 857.969778,260.38051 850.175144,268.175144 C822.350288,296 777.566859,296 688,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"corpus-badge-l-path-10\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-11\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-12\"\n >\n <feGaussianBlur\n stdDeviation=\"6\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-16\"\n dy=\"0\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.577441023 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <g id=\"corpus-badge-l-text-13\">\n <g transform=\"translate(60, 48)\">\n <defs>\n <g>\n <g id=\"corpus-badge-l-lbl-glyph0-1\">\n <path d=\"M 125.84375 -36.671875 L 99.140625 -44.671875 C 94.703125 -29.90625 84.1875 -22.078125 68.890625 -22.078125 C 48.0625 -22.078125 35.25 -37.5625 35.25 -62.65625 C 35.25 -87.9375 48.0625 -103.234375 68.703125 -103.234375 C 84.1875 -103.234375 94.703125 -95.40625 99.140625 -80.640625 L 126.203125 -88.828125 C 119.4375 -114.453125 99.6875 -128.15625 68.890625 -128.15625 C 31.328125 -128.15625 5.703125 -102.171875 5.703125 -62.65625 C 5.703125 -23.3125 31.328125 2.84375 69.0625 2.84375 C 99.6875 2.84375 119.078125 -11.03125 125.84375 -36.671875 Z M 125.84375 -36.671875 \" />\n </g>\n <g id=\"corpus-badge-l-lbl-glyph0-2\">\n <path d=\"M 71.5625 3.03125 C 111.25 3.03125 137.59375 -23.140625 137.59375 -62.65625 C 137.59375 -102.34375 111.25 -128.515625 71.5625 -128.515625 C 31.859375 -128.515625 5.703125 -102.34375 5.703125 -62.65625 C 5.703125 -23.140625 31.859375 3.03125 71.5625 3.03125 Z M 71.5625 -22.078125 C 49.65625 -22.078125 35.25 -38.09375 35.25 -62.65625 C 35.25 -87.390625 49.65625 -103.421875 71.5625 -103.421875 C 93.453125 -103.421875 108.046875 -87.390625 108.046875 -62.65625 C 108.046875 -38.09375 93.453125 -22.078125 71.5625 -22.078125 Z M 71.5625 -22.078125 \" />\n </g>\n <g id=\"corpus-badge-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -58.390625 L 83.84375 0 L 117.84375 0 L 72.796875 -54.109375 C 96.125 -56.609375 109.109375 -69.78125 109.109375 -89.53125 C 109.109375 -111.78125 92.921875 -125.484375 64.265625 -125.484375 L 10.328125 -125.484375 Z M 63.1875 -103.421875 C 74.9375 -103.421875 81.875 -98.796875 81.875 -89.53125 C 81.875 -80.453125 74.9375 -76 63.1875 -76 L 38.09375 -76 L 38.09375 -103.421875 Z M 63.1875 -103.421875 \" />\n </g>\n <g id=\"corpus-badge-l-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -50.734375 L 64.265625 -50.734375 C 92.921875 -50.734375 109.109375 -65.140625 109.109375 -88.109375 C 109.109375 -111.25 92.921875 -125.484375 64.265625 -125.484375 L 10.328125 -125.484375 Z M 63.1875 -103.0625 C 74.9375 -103.0625 81.875 -98.078125 81.875 -88.109375 C 81.875 -78.140625 74.9375 -73.15625 63.1875 -73.15625 L 38.09375 -73.15625 L 38.09375 -103.0625 Z M 63.1875 -103.0625 \" />\n </g>\n <g id=\"corpus-badge-l-lbl-glyph0-5\">\n <path d=\"M 62.125 3.03125 C 94.515625 3.03125 113.921875 -16.375 113.921875 -45.390625 L 113.921875 -125.484375 L 85.265625 -125.484375 L 85.265625 -50.015625 C 85.265625 -33.8125 76.890625 -23.859375 62.125 -23.859375 C 47.171875 -23.859375 38.625 -33.8125 38.625 -50.015625 L 38.625 -125.484375 L 9.96875 -125.484375 L 9.96875 -45.390625 C 9.96875 -16.375 29.546875 3.03125 62.125 3.03125 Z M 62.125 3.03125 \" />\n </g>\n <g id=\"corpus-badge-l-lbl-glyph0-6\">\n <path d=\"M 104.484375 -37.375 C 104.484375 -55.890625 93.984375 -67.8125 75.46875 -73.6875 L 53.046875 -80.640625 C 44.328125 -83.484375 40.046875 -88.109375 40.046875 -94.515625 C 40.046875 -102.53125 46.28125 -107.328125 55.53125 -107.328125 C 65.859375 -107.328125 72.984375 -102 75.65625 -90.953125 L 102.171875 -95.046875 C 98.609375 -115.875 81.34375 -128.515625 55.359375 -128.515625 C 28.296875 -128.515625 11.21875 -113.734375 11.21875 -92.203125 C 11.21875 -75.65625 22.609375 -63.1875 39.875 -58.03125 L 59.984375 -51.796875 C 71.5625 -48.234375 75.65625 -43.25 75.65625 -34.890625 C 75.65625 -25.09375 69.0625 -19.046875 57.140625 -19.046875 C 43.96875 -19.046875 33.8125 -27.40625 31.5 -45.21875 L 3.921875 -39.6875 C 8.015625 -10.140625 27.953125 3.03125 57.140625 3.03125 C 87.21875 3.03125 104.484375 -13.171875 104.484375 -37.375 Z M 104.484375 -37.375 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#corpus-badge-l-lbl-glyph0-1\"\n x=\"0.162793\"\n y=\"162\"\n />\n <use\n href=\"#corpus-badge-l-lbl-glyph0-2\"\n x=\"134.374792\"\n y=\"162\"\n />\n <use\n href=\"#corpus-badge-l-lbl-glyph0-3\"\n x=\"280.512792\"\n y=\"162\"\n />\n <use\n href=\"#corpus-badge-l-lbl-glyph0-4\"\n x=\"402.976792\"\n y=\"162\"\n />\n <use\n href=\"#corpus-badge-l-lbl-glyph0-5\"\n x=\"518.854793\"\n y=\"162\"\n />\n <use\n href=\"#corpus-badge-l-lbl-glyph0-6\"\n x=\"645.768793\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-l-filter-14\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0161792652 0 0 0 0 0 0 0 0 0 0 0 0 0 0.462951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-4)\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#corpus-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-5)\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#corpus-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#corpus-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#corpus-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#corpus-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g\n filter=\"url(#corpus-badge-l-filter-9)\"\n fillRule=\"evenodd\"\n transform=\"translate(0, 266)\"\n >\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-11)\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n <use\n fill=\"#F7B500\"\n fillRule=\"evenodd\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-12)\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#corpus-badge-l-filter-14)\"\n href=\"#corpus-badge-l-text-13\"\n ></use>\n <use href=\"#corpus-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"corpus-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-d-filter-4)\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#corpus-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-d-filter-5)\"\n href=\"#corpus-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#corpus-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g\n filter=\"url(#corpus-badge-l-filter-9)\"\n fillRule=\"evenodd\"\n transform=\"translate(0, 266)\"\n >\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-11)\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n <use\n fill=\"#F7B500\"\n fillRule=\"evenodd\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-badge-l-filter-12)\"\n href=\"#corpus-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#corpus-badge-l-filter-14)\"\n href=\"#corpus-badge-l-text-13\"\n ></use>\n <use href=\"#corpus-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeCorpus\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * PDF file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgePdf({\n size = 64,\n title = \"PDF file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-44 -48 1068 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"pdf-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"pdf-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"pdf-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-9\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.655695735 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"pdf-badge-l-linearGradient-10\"\n >\n <stop stopColor=\"#A70000\" offset=\"0%\"></stop>\n <stop stopColor=\"#E80000\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M190,0 L328,0 C417.566859,0 462.350288,0 490.175144,27.8248558 C497.969778,35.6194896 504.348349,44.7112465 509.025334,54.6931524 C518,73.8474329 518,98.5649553 518,148 C518,197.435045 518,222.152567 509.025334,241.306848 C504.348349,251.288754 497.969778,260.38051 490.175144,268.175144 C462.350288,296 417.566859,296 328,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"pdf-badge-l-path-11\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-12\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <g id=\"pdf-badge-l-text-13\">\n <g transform=\"translate(68, 36)\">\n <defs>\n <g>\n <g id=\"pdf-badge-l-lbl-glyph0-1\">\n <path d=\"M 11.59375 0 L 42.796875 0 L 42.796875 -57 L 72.203125 -57 C 104.40625 -57 122.59375 -73.203125 122.59375 -99 C 122.59375 -125 104.40625 -141 72.203125 -141 L 11.59375 -141 Z M 71 -115.796875 C 84.203125 -115.796875 92 -110.203125 92 -99 C 92 -87.796875 84.203125 -82.203125 71 -82.203125 L 42.796875 -82.203125 L 42.796875 -115.796875 Z M 71 -115.796875 \" />\n </g>\n <g id=\"pdf-badge-l-lbl-glyph0-2\">\n <path d=\"M 11.59375 0 L 59.203125 0 C 104.59375 0 132.796875 -26 132.796875 -70.40625 C 132.796875 -114.796875 104.796875 -141 59.40625 -141 L 11.59375 -141 Z M 57.40625 -114.203125 C 85.203125 -114.203125 99.40625 -98.203125 99.40625 -70.40625 C 99.40625 -42.59375 85.40625 -26.796875 57.40625 -26.796875 L 42.796875 -26.796875 L 42.796875 -114.203125 Z M 57.40625 -114.203125 \" />\n </g>\n <g id=\"pdf-badge-l-lbl-glyph0-3\">\n <path d=\"M 11.59375 0 L 42.796875 0 L 42.796875 -60 L 88.40625 -60 L 88.40625 -86.59375 L 42.796875 -86.59375 L 42.796875 -114.40625 L 99.796875 -114.40625 L 99.796875 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#pdf-badge-l-lbl-glyph0-1\" x=\"0.372602\" y=\"182\" />\n <use\n href=\"#pdf-badge-l-lbl-glyph0-2\"\n x=\"130.932602\"\n y=\"182\"\n />\n <use\n href=\"#pdf-badge-l-lbl-glyph0-3\"\n x=\"273.692602\"\n y=\"182\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-l-filter-14\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-l-filter-4)\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#pdf-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-l-filter-5)\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#pdf-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#pdf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#pdf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#pdf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g\n filter=\"url(#pdf-badge-l-filter-9)\"\n fillRule=\"evenodd\"\n transform=\"translate(0, 266)\"\n >\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-l-filter-12)\"\n href=\"#pdf-badge-l-path-11\"\n ></use>\n <use\n fillOpacity=\"0.76\"\n fill=\"url(#pdf-badge-l-linearGradient-10)\"\n fillRule=\"evenodd\"\n href=\"#pdf-badge-l-path-11\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#pdf-badge-l-filter-14)\"\n href=\"#pdf-badge-l-text-13\"\n ></use>\n <use href=\"#pdf-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"pdf-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-badge-d-filter-12\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"17\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-d-filter-4)\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#pdf-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-d-filter-5)\"\n href=\"#pdf-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#pdf-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g\n filter=\"url(#pdf-badge-l-filter-9)\"\n fillRule=\"evenodd\"\n transform=\"translate(0, 266)\"\n >\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-badge-l-filter-12)\"\n href=\"#pdf-badge-l-path-11\"\n ></use>\n <use\n fillOpacity=\"0.88\"\n fill=\"url(#pdf-badge-l-linearGradient-10)\"\n fillRule=\"evenodd\"\n href=\"#pdf-badge-l-path-11\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#pdf-badge-d-filter-12)\"\n href=\"#pdf-badge-l-text-13\"\n ></use>\n <use href=\"#pdf-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgePdf\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TEI file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeTei({\n size = 64,\n title = \"TEI file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-36 -48 1060 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"tei-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"tei-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"tei-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"tei-badge-l-linearGradient-9\"\n >\n <stop stopColor=\"#009F08\" offset=\"0%\"></stop>\n <stop stopColor=\"#00E004\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M190,0 L237,0 C326.566859,0 371.350288,0 399.175144,27.8248558 C406.969778,35.6194896 413.348349,44.7112465 418.025334,54.6931524 C427,73.8474329 427,98.5649553 427,148 C427,197.435045 427,222.152567 418.025334,241.306848 C413.348349,251.288754 406.969778,260.38051 399.175144,268.175144 C371.350288,296 326.566859,296 237,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"tei-badge-l-path-10\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-l-filter-11\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <g id=\"tei-badge-l-text-12\">\n <g transform=\"translate(69, 42)\">\n <defs>\n <g>\n <g id=\"tei-badge-l-lbl-glyph0-1\">\n <path d=\"M 41.796875 0 L 73 0 L 73 -112.796875 L 110.796875 -112.796875 L 110.796875 -141 L 4 -141 L 4 -112.796875 L 41.796875 -112.796875 Z M 41.796875 0 \" />\n </g>\n <g id=\"tei-badge-l-lbl-glyph0-2\">\n <path d=\"M 11.59375 0 L 103 0 L 103 -26.59375 L 42.796875 -26.59375 L 42.796875 -62 L 89.40625 -62 L 89.40625 -88.59375 L 42.796875 -88.59375 L 42.796875 -114.40625 L 102.59375 -114.40625 L 102.59375 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n <g id=\"tei-badge-l-lbl-glyph0-3\">\n <path d=\"M 11.59375 0 L 42.796875 0 L 42.796875 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#tei-badge-l-lbl-glyph0-1\" x=\"0\" y=\"182\" />\n <use href=\"#tei-badge-l-lbl-glyph0-2\" x=\"118.36\" y=\"182\" />\n <use href=\"#tei-badge-l-lbl-glyph0-3\" x=\"230.72\" y=\"182\" />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-l-filter-13\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"16\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0539556118 0 0 0 0 0.212309966 0 0 0 0 0 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-l-filter-4)\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#tei-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-l-filter-5)\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tei-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#tei-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#tei-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#tei-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-l-filter-11)\"\n href=\"#tei-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.8\"\n fill=\"url(#tei-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#tei-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#tei-badge-l-filter-13)\"\n href=\"#tei-badge-l-text-12\"\n ></use>\n <use href=\"#tei-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"tei-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-badge-d-filter-11\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0.124023438 0 0 0 0 0.0202621011 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-d-filter-4)\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#tei-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-d-filter-5)\"\n href=\"#tei-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tei-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-badge-l-filter-11)\"\n href=\"#tei-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.81\"\n fill=\"url(#tei-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#tei-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#tei-badge-d-filter-11)\"\n href=\"#tei-badge-l-text-12\"\n ></use>\n <use href=\"#tei-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeTei\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TF file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeTf({\n size = 64,\n title = \"TF file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-36 -48 1060 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"tf-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"tf-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"tf-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"tf-badge-l-linearGradient-9\"\n >\n <stop stopColor=\"#006B7A\" offset=\"0%\"></stop>\n <stop stopColor=\"#00C8DC\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M186,0 C271.681559,0 314.522339,0 341.91738,25.6405467 C350.73639,33.8947499 357.900344,43.7550864 363.025334,54.6931524 C372,73.8474329 372,98.5649553 372,148 C372,197.435045 372,222.152567 363.025334,241.306848 C357.900344,252.244914 350.73639,262.10525 341.91738,270.359453 C314.522339,296 271.681559,296 186,296 C100.318441,296 57.4776611,296 30.0826199,270.359453 C21.2636099,262.10525 14.0996561,252.244914 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C14.0996561,43.7550864 21.2636099,33.8947499 30.0826199,25.6405467 C57.4776611,0 100.318441,0 186,0 Z\"\n id=\"tf-badge-l-path-10\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-11\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-12\"\n >\n <feGaussianBlur\n stdDeviation=\"2.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-14\"\n dy=\"-3\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.867266681 0 0 0 0 0.867266681 0 0 0 0 0.867266681 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <g id=\"tf-badge-l-text-13\">\n <g transform=\"translate(72.5, 36)\">\n <defs>\n <g>\n <g id=\"tf-badge-l-lbl-glyph0-1\">\n <path d=\"M 41.796875 0 L 73 0 L 73 -112.796875 L 110.796875 -112.796875 L 110.796875 -141 L 4 -141 L 4 -112.796875 L 41.796875 -112.796875 Z M 41.796875 0 \" />\n </g>\n <g id=\"tf-badge-l-lbl-glyph0-2\">\n <path d=\"M 11.59375 0 L 42.796875 0 L 42.796875 -60 L 88.40625 -60 L 88.40625 -86.59375 L 42.796875 -86.59375 L 42.796875 -114.40625 L 99.796875 -114.40625 L 99.796875 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#tf-badge-l-lbl-glyph0-1\" x=\"0.348401\" y=\"182\" />\n <use href=\"#tf-badge-l-lbl-glyph0-2\" x=\"118.708401\" y=\"182\" />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-l-filter-14\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"14\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.462951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-l-filter-4)\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#tf-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-l-filter-5)\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tf-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#tf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#tf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#tf-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-l-filter-11)\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.91\"\n fill=\"url(#tf-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-l-filter-12)\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#tf-badge-l-filter-14)\"\n href=\"#tf-badge-l-text-13\"\n ></use>\n <use href=\"#tf-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"tf-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-d-filter-9\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-d-filter-10\"\n >\n <feGaussianBlur\n stdDeviation=\"2\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-14\"\n dy=\"-2\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.950881546 0 0 0 0 0.950881546 0 0 0 0 0.950881546 0 0 0 0.19 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-badge-d-filter-12\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"25.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.782951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-d-filter-4)\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#tf-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-d-filter-5)\"\n href=\"#tf-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tf-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(1, 256)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-d-filter-9)\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n <use\n fill=\"url(#tf-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-badge-d-filter-10)\"\n href=\"#tf-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#tf-badge-d-filter-12)\"\n href=\"#tf-badge-l-text-13\"\n ></use>\n <use href=\"#tf-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeTf\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TXT file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeTxt({\n size = 64,\n title = \"TXT file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-36 -48 1060 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"txt-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"txt-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"txt-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"txt-badge-l-linearGradient-9\"\n >\n <stop stopColor=\"#000108\" offset=\"0%\"></stop>\n <stop stopColor=\"#000000\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M190,0 L332,0 C421.566859,0 466.350288,0 494.175144,27.8248558 C501.969778,35.6194896 508.348349,44.7112465 513.025334,54.6931524 C522,73.8474329 522,98.5649553 522,148 C522,197.435045 522,222.152567 513.025334,241.306848 C508.348349,251.288754 501.969778,260.38051 494.175144,268.175144 C466.350288,296 421.566859,296 332,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"txt-badge-l-path-10\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-11\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-12\"\n >\n <feGaussianBlur\n stdDeviation=\"7.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-18\"\n dy=\"-7\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.738677154 0 0 0 0 0.738677154 0 0 0 0 0.738677154 0 0 0 0.45 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <g id=\"txt-badge-l-text-13\">\n <g transform=\"translate(76, 36)\">\n <defs>\n <g>\n <g id=\"txt-badge-l-lbl-glyph0-1\">\n <path d=\"M 41.796875 0 L 73 0 L 73 -112.796875 L 110.796875 -112.796875 L 110.796875 -141 L 4 -141 L 4 -112.796875 L 41.796875 -112.796875 Z M 41.796875 0 \" />\n </g>\n <g id=\"txt-badge-l-lbl-glyph0-2\">\n <path d=\"M 107.59375 0 L 142.203125 0 L 97.203125 -74.59375 L 136.40625 -141 L 100.796875 -141 L 72.203125 -91 L 43.40625 -141 L 7.796875 -141 L 47.203125 -74.59375 L 2 0 L 36.796875 0 L 72.203125 -59.796875 Z M 107.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#txt-badge-l-lbl-glyph0-1\" x=\"0\" y=\"182\" />\n <use href=\"#txt-badge-l-lbl-glyph0-2\" x=\"118.36\" y=\"182\" />\n <use href=\"#txt-badge-l-lbl-glyph0-1\" x=\"266.12\" y=\"182\" />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-l-filter-14\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-l-filter-4)\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#txt-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-l-filter-5)\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#txt-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#txt-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#txt-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#txt-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-l-filter-11)\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.8\"\n fill=\"url(#txt-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-l-filter-12)\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#txt-badge-l-filter-14)\"\n href=\"#txt-badge-l-text-13\"\n ></use>\n <use href=\"#txt-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"txt-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"txt-badge-d-linearGradient-7\"\n >\n <stop stopColor=\"#D3D3D3\" offset=\"0%\"></stop>\n <stop stopColor=\"#FFFFFF\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-d-filter-10\"\n >\n <feGaussianBlur\n stdDeviation=\"3\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"2\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.664827914 0 0 0 0 0.664827914 0 0 0 0 0.664827914 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-badge-d-filter-12\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-d-filter-4)\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#txt-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-d-filter-5)\"\n href=\"#txt-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#txt-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-l-filter-11)\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.9\"\n fill=\"url(#txt-badge-d-linearGradient-7)\"\n fillRule=\"evenodd\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-badge-d-filter-10)\"\n href=\"#txt-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#txt-badge-d-filter-12)\"\n href=\"#txt-badge-l-text-13\"\n ></use>\n <use href=\"#txt-badge-l-text-13\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeTxt\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * XML file icon — badge variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileBadgeXml({\n size = 64,\n title = \"XML file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"-36 -48 1060 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"xml-badge-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"xml-badge-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"19.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.825750613 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 0 0.989073057 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"5.5\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"xml-badge-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <linearGradient\n x1=\"50%\"\n y1=\"8.3581851%\"\n x2=\"50%\"\n y2=\"83.7772412%\"\n id=\"xml-badge-l-linearGradient-9\"\n >\n <stop stopColor=\"#000FA7\" offset=\"0%\"></stop>\n <stop stopColor=\"#5000E8\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M190,0 L374,0 C463.566859,0 508.350288,0 536.175144,27.8248558 C543.969778,35.6194896 550.348349,44.7112465 555.025334,54.6931524 C564,73.8474329 564,98.5649553 564,148 C564,197.435045 564,222.152567 555.025334,241.306848 C550.348349,251.288754 543.969778,260.38051 536.175144,268.175144 C508.350288,296 463.566859,296 374,296 L190,296 C100.433141,296 55.6497116,296 27.8248558,268.175144 C20.030222,260.38051 13.6516509,251.288754 8.9746663,241.306848 C0,222.152567 0,197.435045 0,148 C0,98.5649553 0,73.8474329 8.9746663,54.6931524 C13.6516509,44.7112465 20.030222,35.6194896 27.8248558,27.8248558 C55.6497116,0 100.433141,0 190,0 Z\"\n id=\"xml-badge-l-path-10\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-l-filter-11\"\n >\n <feOffset\n dx=\"-9\"\n dy=\"-18\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"13.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feComposite\n in=\"shadowBlurOuter1\"\n in2=\"SourceAlpha\"\n operator=\"out\"\n result=\"shadowBlurOuter1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.0196078431 0 0 0 0 0 0 0 0 0 0.309803922 0 0 0 0.121568627 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <g id=\"xml-badge-l-text-12\">\n <g transform=\"translate(69, 36)\">\n <defs>\n <g>\n <g id=\"xml-badge-l-lbl-glyph0-1\">\n <path d=\"M 107.59375 0 L 142.203125 0 L 97.203125 -74.59375 L 136.40625 -141 L 100.796875 -141 L 72.203125 -91 L 43.40625 -141 L 7.796875 -141 L 47.203125 -74.59375 L 2 0 L 36.796875 0 L 72.203125 -59.796875 Z M 107.59375 0 \" />\n </g>\n <g id=\"xml-badge-l-lbl-glyph0-2\">\n <path d=\"M 11.59375 0 L 41.40625 0 L 41.40625 -125.59375 L 67.40625 0 L 111.59375 0 L 137.796875 -125.59375 L 137.796875 0 L 167.40625 0 L 167.40625 -141 L 113 -141 L 89.59375 -14.40625 L 66 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n <g id=\"xml-badge-l-lbl-glyph0-3\">\n <path d=\"M 11.59375 0 L 100 0 L 100 -28.203125 L 42.796875 -28.203125 L 42.796875 -141 L 11.59375 -141 Z M 11.59375 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#xml-badge-l-lbl-glyph0-1\" x=\"0\" y=\"182\" />\n <use href=\"#xml-badge-l-lbl-glyph0-2\" x=\"147.76\" y=\"182\" />\n <use href=\"#xml-badge-l-lbl-glyph0-3\" x=\"330.32\" y=\"182\" />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-l-filter-13\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.872951134 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-l-filter-4)\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#xml-badge-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-l-filter-5)\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#xml-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#xml-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#xml-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#xml-badge-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-l-filter-11)\"\n href=\"#xml-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.8\"\n fill=\"url(#xml-badge-l-linearGradient-9)\"\n fillRule=\"evenodd\"\n href=\"#xml-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#xml-badge-l-filter-13)\"\n href=\"#xml-badge-l-text-12\"\n ></use>\n <use href=\"#xml-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"xml-badge-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-d-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"5.87430251%\"\n y1=\"50%\"\n x2=\"94.2856529%\"\n y2=\"55.0848143%\"\n id=\"xml-badge-d-linearGradient-7\"\n >\n <stop\n stopColor=\"#3A0FFA\"\n stopOpacity=\"0.892348346\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#0E1FFE\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-d-filter-10\"\n >\n <feGaussianBlur\n stdDeviation=\"8\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-11\"\n dy=\"0\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.367072374 0 0 0 0 0.357100939 0 0 0 0 1 0 0 0 0.5 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-badge-d-filter-12\"\n >\n <feOffset\n dx=\"0\"\n dy=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"22.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0113775451 0 0 0 0 0.00367444652 0 0 0 0 0.16369299 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-d-filter-4)\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n <use\n fill=\"url(#xml-badge-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-d-filter-5)\"\n href=\"#xml-badge-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#xml-badge-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(266.5027, 355.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fillRule=\"evenodd\" transform=\"translate(0, 266)\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-l-filter-11)\"\n href=\"#xml-badge-l-path-10\"\n ></use>\n <use\n fillOpacity=\"0.85\"\n fill=\"url(#xml-badge-d-linearGradient-7)\"\n fillRule=\"evenodd\"\n href=\"#xml-badge-l-path-10\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#xml-badge-d-filter-10)\"\n href=\"#xml-badge-l-path-10\"\n ></use>\n </g>\n <g fill=\"#EDEBF1\">\n <use\n filter=\"url(#xml-badge-d-filter-12)\"\n href=\"#xml-badge-l-text-12\"\n ></use>\n <use href=\"#xml-badge-l-text-12\"></use>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileBadgeXml\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * CFM file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkCfm({\n size = 64,\n title = \"CFM file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"cfm-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"cfm-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"cfm-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"cfm-wordmark-l-text-9\">\n <g transform=\"translate(309, 721.762)\">\n <defs>\n <g>\n <g id=\"cfm-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"cfm-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 125.84375 -36.671875 L 99.140625 -44.671875 C 94.703125 -29.90625 84.1875 -22.078125 68.890625 -22.078125 C 48.0625 -22.078125 35.25 -37.5625 35.25 -62.65625 C 35.25 -87.9375 48.0625 -103.234375 68.703125 -103.234375 C 84.1875 -103.234375 94.703125 -95.40625 99.140625 -80.640625 L 126.203125 -88.828125 C 119.4375 -114.453125 99.6875 -128.15625 68.890625 -128.15625 C 31.328125 -128.15625 5.703125 -102.171875 5.703125 -62.65625 C 5.703125 -23.3125 31.328125 2.84375 69.0625 2.84375 C 99.6875 2.84375 119.078125 -11.03125 125.84375 -36.671875 Z M 125.84375 -36.671875 \" />\n </g>\n <g id=\"cfm-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -53.40625 L 78.671875 -53.40625 L 78.671875 -77.078125 L 38.09375 -77.078125 L 38.09375 -101.8125 L 88.828125 -101.8125 L 88.828125 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n <g id=\"cfm-wordmark-l-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 36.84375 0 L 36.84375 -111.78125 L 59.984375 0 L 99.328125 0 L 122.640625 -111.78125 L 122.640625 0 L 148.984375 0 L 148.984375 -125.484375 L 100.5625 -125.484375 L 79.75 -12.8125 L 58.734375 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#cfm-wordmark-l-lbl-glyph0-1\"\n x=\"0.0300664\"\n y=\"162\"\n />\n <use\n href=\"#cfm-wordmark-l-lbl-glyph0-2\"\n x=\"36.591266\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#cfm-wordmark-l-lbl-glyph0-3\"\n x=\"163.220466\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#cfm-wordmark-l-lbl-glyph0-4\"\n x=\"251.401666\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#cfm-wordmark-l-filter-4)\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#cfm-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-wordmark-l-filter-5)\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#cfm-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#cfm-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#cfm-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#cfm-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#D9A300\">\n <use\n filter=\"url(#cfm-wordmark-l-filter-10)\"\n href=\"#cfm-wordmark-l-text-9\"\n ></use>\n <use href=\"#cfm-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"cfm-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"cfm-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#cfm-wordmark-l-filter-4)\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#cfm-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#cfm-wordmark-d-filter-5)\"\n href=\"#cfm-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#cfm-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#F5C400\">\n <use\n filter=\"url(#cfm-wordmark-l-filter-10)\"\n href=\"#cfm-wordmark-l-text-9\"\n ></use>\n <use href=\"#cfm-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkCfm\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * Corpus file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkCorpus({\n size = 64,\n title = \"Corpus file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"corpus-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"corpus-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"corpus-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"corpus-wordmark-l-text-9\">\n <g transform=\"translate(196.5, 746.762)\">\n <defs>\n <g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 21.453125 0.75 C 29.40625 0.75 34.953125 -5.25 34.953125 -12.75 C 34.953125 -20.09375 29.40625 -26.09375 21.453125 -26.09375 C 13.34375 -26.09375 7.796875 -20.09375 7.796875 -12.75 C 7.796875 -5.25 13.34375 0.75 21.453125 0.75 Z M 21.453125 0.75 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 106.046875 -30.90625 L 83.546875 -37.65625 C 79.796875 -25.203125 70.953125 -18.59375 58.046875 -18.59375 C 40.5 -18.59375 29.703125 -31.65625 29.703125 -52.796875 C 29.703125 -74.09375 40.5 -87 57.90625 -87 C 70.953125 -87 79.796875 -80.40625 83.546875 -67.953125 L 106.34375 -74.84375 C 100.65625 -96.453125 84 -108 58.046875 -108 C 26.40625 -108 4.796875 -86.09375 4.796875 -52.796875 C 4.796875 -19.65625 26.40625 2.40625 58.203125 2.40625 C 84 2.40625 100.34375 -9.296875 106.046875 -30.90625 Z M 106.046875 -30.90625 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 60.296875 2.546875 C 93.75 2.546875 115.953125 -19.5 115.953125 -52.796875 C 115.953125 -86.25 93.75 -108.296875 60.296875 -108.296875 C 26.84375 -108.296875 4.796875 -86.25 4.796875 -52.796875 C 4.796875 -19.5 26.84375 2.546875 60.296875 2.546875 Z M 60.296875 -18.59375 C 41.84375 -18.59375 29.703125 -32.09375 29.703125 -52.796875 C 29.703125 -73.65625 41.84375 -87.15625 60.296875 -87.15625 C 78.75 -87.15625 91.046875 -73.65625 91.046875 -52.796875 C 91.046875 -32.09375 78.75 -18.59375 60.296875 -18.59375 Z M 60.296875 -18.59375 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-4\">\n <path d=\"M 8.703125 0 L 32.09375 0 L 32.09375 -49.203125 L 70.65625 0 L 99.296875 0 L 61.34375 -45.59375 C 81 -47.703125 91.953125 -58.796875 91.953125 -75.453125 C 91.953125 -94.203125 78.296875 -105.75 54.15625 -105.75 L 8.703125 -105.75 Z M 53.25 -87.15625 C 63.15625 -87.15625 69 -83.25 69 -75.453125 C 69 -67.796875 63.15625 -64.046875 53.25 -64.046875 L 32.09375 -64.046875 L 32.09375 -87.15625 Z M 53.25 -87.15625 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-5\">\n <path d=\"M 8.703125 0 L 32.09375 0 L 32.09375 -42.75 L 54.15625 -42.75 C 78.296875 -42.75 91.953125 -54.90625 91.953125 -74.25 C 91.953125 -93.75 78.296875 -105.75 54.15625 -105.75 L 8.703125 -105.75 Z M 53.25 -86.84375 C 63.15625 -86.84375 69 -82.65625 69 -74.25 C 69 -65.84375 63.15625 -61.65625 53.25 -61.65625 L 32.09375 -61.65625 L 32.09375 -86.84375 Z M 53.25 -86.84375 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-6\">\n <path d=\"M 52.34375 2.546875 C 79.65625 2.546875 96 -13.796875 96 -38.25 L 96 -105.75 L 71.84375 -105.75 L 71.84375 -42.15625 C 71.84375 -28.5 64.796875 -20.09375 52.34375 -20.09375 C 39.75 -20.09375 32.546875 -28.5 32.546875 -42.15625 L 32.546875 -105.75 L 8.40625 -105.75 L 8.40625 -38.25 C 8.40625 -13.796875 24.90625 2.546875 52.34375 2.546875 Z M 52.34375 2.546875 \" />\n </g>\n <g id=\"corpus-wordmark-l-lbl-glyph0-7\">\n <path d=\"M 88.046875 -31.5 C 88.046875 -47.09375 79.203125 -57.15625 63.59375 -62.09375 L 44.703125 -67.953125 C 37.34375 -70.34375 33.75 -74.25 33.75 -79.65625 C 33.75 -86.40625 39 -90.453125 46.796875 -90.453125 C 55.5 -90.453125 61.5 -85.953125 63.75 -76.65625 L 86.09375 -80.09375 C 83.09375 -97.65625 68.546875 -108.296875 46.65625 -108.296875 C 23.84375 -108.296875 9.453125 -95.84375 9.453125 -77.703125 C 9.453125 -63.75 19.046875 -53.25 33.59375 -48.90625 L 50.546875 -43.65625 C 60.296875 -40.65625 63.75 -36.453125 63.75 -29.40625 C 63.75 -21.15625 58.203125 -16.046875 48.15625 -16.046875 C 37.046875 -16.046875 28.5 -23.09375 26.546875 -38.09375 L 3.296875 -33.453125 C 6.75 -8.546875 23.546875 2.546875 48.15625 2.546875 C 73.5 2.546875 88.046875 -11.09375 88.046875 -31.5 Z M 88.046875 -31.5 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-1\"\n x=\"0.445112\"\n y=\"137\"\n />\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-2\"\n x=\"31.255112\"\n y=\"137\"\n />\n </g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-3\"\n x=\"137.965112\"\n y=\"137\"\n />\n </g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-4\"\n x=\"254.725112\"\n y=\"137\"\n />\n </g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-5\"\n x=\"351.535112\"\n y=\"137\"\n />\n </g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-6\"\n x=\"442.795112\"\n y=\"137\"\n />\n </g>\n <g>\n <use\n href=\"#corpus-wordmark-l-lbl-glyph0-7\"\n x=\"543.355112\"\n y=\"137\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-wordmark-l-filter-4)\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#corpus-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-wordmark-l-filter-5)\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#corpus-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#corpus-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#corpus-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#corpus-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#D9A300\">\n <use\n filter=\"url(#corpus-wordmark-l-filter-10)\"\n href=\"#corpus-wordmark-l-text-9\"\n ></use>\n <use href=\"#corpus-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"corpus-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"corpus-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#corpus-wordmark-l-filter-4)\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#corpus-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#corpus-wordmark-d-filter-5)\"\n href=\"#corpus-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#corpus-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#F5C400\">\n <use\n filter=\"url(#corpus-wordmark-l-filter-10)\"\n href=\"#corpus-wordmark-l-text-9\"\n ></use>\n <use href=\"#corpus-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkCorpus\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * PDF file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkPdf({\n size = 64,\n title = \"PDF file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"pdf-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"pdf-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"pdf-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"pdf-wordmark-l-text-9\">\n <g transform=\"translate(333, 721.762)\">\n <defs>\n <g>\n <g id=\"pdf-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"pdf-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -50.734375 L 64.265625 -50.734375 C 92.921875 -50.734375 109.109375 -65.140625 109.109375 -88.109375 C 109.109375 -111.25 92.921875 -125.484375 64.265625 -125.484375 L 10.328125 -125.484375 Z M 63.1875 -103.0625 C 74.9375 -103.0625 81.875 -98.078125 81.875 -88.109375 C 81.875 -78.140625 74.9375 -73.15625 63.1875 -73.15625 L 38.09375 -73.15625 L 38.09375 -103.0625 Z M 63.1875 -103.0625 \" />\n </g>\n <g id=\"pdf-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 52.6875 0 C 93.09375 0 118.1875 -23.140625 118.1875 -62.65625 C 118.1875 -102.171875 93.265625 -125.484375 52.859375 -125.484375 L 10.328125 -125.484375 Z M 51.09375 -101.640625 C 75.828125 -101.640625 88.46875 -87.390625 88.46875 -62.65625 C 88.46875 -37.90625 76 -23.859375 51.09375 -23.859375 L 38.09375 -23.859375 L 38.09375 -101.640625 Z M 51.09375 -101.640625 \" />\n </g>\n <g id=\"pdf-wordmark-l-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -53.40625 L 78.671875 -53.40625 L 78.671875 -77.078125 L 38.09375 -77.078125 L 38.09375 -101.8125 L 88.828125 -101.8125 L 88.828125 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#pdf-wordmark-l-lbl-glyph0-1\"\n x=\"0.238066\"\n y=\"162\"\n />\n <use\n href=\"#pdf-wordmark-l-lbl-glyph0-2\"\n x=\"42.139266\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#pdf-wordmark-l-lbl-glyph0-3\"\n x=\"150.434466\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#pdf-wordmark-l-lbl-glyph0-4\"\n x=\"269.587666\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-wordmark-l-filter-4)\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#pdf-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#pdf-wordmark-l-filter-5)\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#pdf-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#pdf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#pdf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#pdf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#C41010\">\n <use\n filter=\"url(#pdf-wordmark-l-filter-10)\"\n href=\"#pdf-wordmark-l-text-9\"\n ></use>\n <use href=\"#pdf-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"pdf-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"pdf-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <g id=\"pdf-wordmark-d-text-7\">\n <g transform=\"translate(328.523, 733.762)\">\n <defs>\n <g>\n <g id=\"pdf-wordmark-d-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"pdf-wordmark-d-lbl-glyph0-2\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -50.734375 L 64.265625 -50.734375 C 92.921875 -50.734375 109.109375 -65.140625 109.109375 -88.109375 C 109.109375 -111.25 92.921875 -125.484375 64.265625 -125.484375 L 10.328125 -125.484375 Z M 63.1875 -103.0625 C 74.9375 -103.0625 81.875 -98.078125 81.875 -88.109375 C 81.875 -78.140625 74.9375 -73.15625 63.1875 -73.15625 L 38.09375 -73.15625 L 38.09375 -103.0625 Z M 63.1875 -103.0625 \" />\n </g>\n <g id=\"pdf-wordmark-d-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 52.6875 0 C 93.09375 0 118.1875 -23.140625 118.1875 -62.65625 C 118.1875 -102.171875 93.265625 -125.484375 52.859375 -125.484375 L 10.328125 -125.484375 Z M 51.09375 -101.640625 C 75.828125 -101.640625 88.46875 -87.390625 88.46875 -62.65625 C 88.46875 -37.90625 76 -23.859375 51.09375 -23.859375 L 38.09375 -23.859375 L 38.09375 -101.640625 Z M 51.09375 -101.640625 \" />\n </g>\n <g id=\"pdf-wordmark-d-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -53.40625 L 78.671875 -53.40625 L 78.671875 -77.078125 L 38.09375 -77.078125 L 38.09375 -101.8125 L 88.828125 -101.8125 L 88.828125 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#pdf-wordmark-d-lbl-glyph0-1\"\n x=\"0.219134\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#pdf-wordmark-d-lbl-glyph0-2\"\n x=\"42.1186\"\n y=\"162\"\n />\n <use\n href=\"#pdf-wordmark-d-lbl-glyph0-3\"\n x=\"161.432\"\n y=\"162\"\n />\n <use\n href=\"#pdf-wordmark-d-lbl-glyph0-4\"\n x=\"291.6034\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#pdf-wordmark-l-filter-4)\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#pdf-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#pdf-wordmark-d-filter-5)\"\n href=\"#pdf-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#pdf-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#FF5656\">\n <use\n filter=\"url(#pdf-wordmark-l-filter-10)\"\n href=\"#pdf-wordmark-d-text-7\"\n ></use>\n <use href=\"#pdf-wordmark-d-text-7\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkPdf\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TEI file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkTei({\n size = 64,\n title = \"TEI file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"tei-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"tei-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"tei-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"tei-wordmark-l-text-9\">\n <g transform=\"translate(383, 721.762)\">\n <defs>\n <g>\n <g id=\"tei-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"tei-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 37.203125 0 L 64.96875 0 L 64.96875 -100.390625 L 98.609375 -100.390625 L 98.609375 -125.484375 L 3.5625 -125.484375 L 3.5625 -100.390625 L 37.203125 -100.390625 Z M 37.203125 0 \" />\n </g>\n <g id=\"tei-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 91.671875 0 L 91.671875 -23.671875 L 38.09375 -23.671875 L 38.09375 -55.1875 L 79.5625 -55.1875 L 79.5625 -78.859375 L 38.09375 -78.859375 L 38.09375 -101.8125 L 91.3125 -101.8125 L 91.3125 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n <g id=\"tei-wordmark-l-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#tei-wordmark-l-lbl-glyph0-1\"\n x=\"0.434066\"\n y=\"162\"\n />\n <use\n href=\"#tei-wordmark-l-lbl-glyph0-2\"\n x=\"24.357266\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#tei-wordmark-l-lbl-glyph0-3\"\n x=\"121.794466\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#tei-wordmark-l-lbl-glyph0-4\"\n x=\"213.891666\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-wordmark-l-filter-4)\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#tei-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tei-wordmark-l-filter-5)\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tei-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#tei-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#tei-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#tei-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#009F08\">\n <use\n filter=\"url(#tei-wordmark-l-filter-10)\"\n href=\"#tei-wordmark-l-text-9\"\n ></use>\n <use href=\"#tei-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"tei-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tei-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tei-wordmark-l-filter-4)\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#tei-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tei-wordmark-d-filter-5)\"\n href=\"#tei-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tei-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#2EE85C\">\n <use\n filter=\"url(#tei-wordmark-l-filter-10)\"\n href=\"#tei-wordmark-l-text-9\"\n ></use>\n <use href=\"#tei-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkTei\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TF file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkTf({\n size = 64,\n title = \"TF file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"tf-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"tf-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"tf-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"tf-wordmark-l-text-9\">\n <g transform=\"translate(407, 721.762)\">\n <defs>\n <g>\n <g id=\"tf-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"tf-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 37.203125 0 L 64.96875 0 L 64.96875 -100.390625 L 98.609375 -100.390625 L 98.609375 -125.484375 L 3.5625 -125.484375 L 3.5625 -100.390625 L 37.203125 -100.390625 Z M 37.203125 0 \" />\n </g>\n <g id=\"tf-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 38.09375 0 L 38.09375 -53.40625 L 78.671875 -53.40625 L 78.671875 -77.078125 L 38.09375 -77.078125 L 38.09375 -101.8125 L 88.828125 -101.8125 L 88.828125 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use href=\"#tf-wordmark-l-lbl-glyph0-1\" x=\"0.2318\" y=\"162\" />\n <use href=\"#tf-wordmark-l-lbl-glyph0-2\" x=\"24.155\" y=\"162\" />\n </g>\n <g>\n <use\n href=\"#tf-wordmark-l-lbl-glyph0-3\"\n x=\"121.5922\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-wordmark-l-filter-4)\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#tf-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-wordmark-l-filter-5)\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tf-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#tf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#tf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#tf-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#00707F\">\n <use\n filter=\"url(#tf-wordmark-l-filter-10)\"\n href=\"#tf-wordmark-l-text-9\"\n ></use>\n <use href=\"#tf-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"tf-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"tf-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#tf-wordmark-l-filter-4)\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#tf-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#tf-wordmark-d-filter-5)\"\n href=\"#tf-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#tf-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#22D3E0\">\n <use\n filter=\"url(#tf-wordmark-l-filter-10)\"\n href=\"#tf-wordmark-l-text-9\"\n ></use>\n <use href=\"#tf-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkTf\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * TXT file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkTxt({\n size = 64,\n title = \"TXT file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"txt-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"txt-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"txt-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"txt-wordmark-l-text-9\">\n <g transform=\"translate(340.5, 721.762)\">\n <defs>\n <g>\n <g id=\"txt-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"txt-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 37.203125 0 L 64.96875 0 L 64.96875 -100.390625 L 98.609375 -100.390625 L 98.609375 -125.484375 L 3.5625 -125.484375 L 3.5625 -100.390625 L 37.203125 -100.390625 Z M 37.203125 0 \" />\n </g>\n <g id=\"txt-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 95.765625 0 L 126.5625 0 L 86.515625 -66.390625 L 121.390625 -125.484375 L 89.71875 -125.484375 L 64.265625 -80.984375 L 38.625 -125.484375 L 6.9375 -125.484375 L 42.015625 -66.390625 L 1.78125 0 L 32.75 0 L 64.265625 -53.21875 Z M 95.765625 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#txt-wordmark-l-lbl-glyph0-1\"\n x=\"0.303066\"\n y=\"162\"\n />\n <use\n href=\"#txt-wordmark-l-lbl-glyph0-2\"\n x=\"24.226266\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#txt-wordmark-l-lbl-glyph0-3\"\n x=\"121.663466\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#txt-wordmark-l-lbl-glyph0-2\"\n x=\"245.266666\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-wordmark-l-filter-4)\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#txt-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-wordmark-l-filter-5)\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#txt-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#txt-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#txt-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#txt-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#1A1A1A\">\n <use\n filter=\"url(#txt-wordmark-l-filter-10)\"\n href=\"#txt-wordmark-l-text-9\"\n ></use>\n <use href=\"#txt-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"txt-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"txt-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#txt-wordmark-l-filter-4)\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#txt-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#txt-wordmark-d-filter-5)\"\n href=\"#txt-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#txt-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#E8E8E8\">\n <use\n filter=\"url(#txt-wordmark-l-filter-10)\"\n href=\"#txt-wordmark-l-text-9\"\n ></use>\n <use href=\"#txt-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkTxt\n","import type { IFileIconProps } from \"./types\"\n\n/**\n * XML file icon — wordmark variant.\n * Light/dark artwork layers switch on Tailwind's `dark` variant.\n */\nexport function FileWordmarkXml({\n size = 64,\n title = \"XML file\",\n className,\n ...props\n}: IFileIconProps) {\n return (\n <svg\n viewBox=\"0 -48 1024 1114\"\n width={size}\n height={size}\n role={title ? \"img\" : \"presentation\"}\n aria-label={title ?? undefined}\n aria-hidden={title ? undefined : true}\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g data-theme-layer=\"light\" className=\"dark:hidden\">\n <defs>\n <linearGradient\n x1=\"17.6604798%\"\n y1=\"0%\"\n x2=\"49.177195%\"\n y2=\"97.4557292%\"\n id=\"xml-wordmark-l-linearGradient-2\"\n >\n <stop stopColor=\"#FBFAFF\" offset=\"0%\"></stop>\n <stop stopColor=\"#E8E7F0\" offset=\"100%\"></stop>\n </linearGradient>\n <path\n d=\"M332,12 L557.393952,12 C613.901876,12 642.155838,12 664.135334,22.0470049 C686.11483,32.0940098 704.602278,53.4598851 741.577175,96.1916357 L853.580372,225.633315 C884.253388,261.082006 899.589896,278.806351 906.574274,297.524519 C913.558651,316.242686 913.581362,339.681124 913.626783,386.558 L914.017631,789.931634 C914.119069,894.620332 914.169788,946.964682 881.683622,979.482341 C849.197455,1012 796.853082,1012 692.164334,1012 L332,1012 C227.348196,1012 175.022295,1012 142.511147,979.488853 C110,946.977705 110,894.651804 110,790 L110,234 C110,129.348196 110,77.0222946 142.511147,44.5111473 C175.022295,12 227.348196,12 332,12 Z\"\n id=\"xml-wordmark-l-path-3\"\n ></path>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-wordmark-l-filter-4\"\n >\n <feOffset\n dx=\"12\"\n dy=\"-3\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"28.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n ></feColorMatrix>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-wordmark-l-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-wordmark-l-filter-6\"\n >\n <feOffset\n dx=\"0\"\n dy=\"5\"\n in=\"SourceAlpha\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feGaussianBlur\n stdDeviation=\"3.5\"\n in=\"shadowOffsetOuter1\"\n result=\"shadowBlurOuter1\"\n ></feGaussianBlur>\n <feColorMatrix\n values=\"0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0 0.0889199747 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\"></feMergeNode>\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\n </feMerge>\n </filter>\n <linearGradient\n x1=\"50%\"\n y1=\"0%\"\n x2=\"50%\"\n y2=\"100%\"\n id=\"xml-wordmark-l-linearGradient-7\"\n >\n <stop stopColor=\"#4B008F\" offset=\"0%\"></stop>\n <stop stopColor=\"#080043\" offset=\"61.8567708%\"></stop>\n </linearGradient>\n <g id=\"xml-wordmark-l-text-9\">\n <g transform=\"translate(307.5, 721.762)\">\n <defs>\n <g>\n <g id=\"xml-wordmark-l-lbl-glyph0-1\">\n <path d=\"M 25.453125 0.890625 C 34.890625 0.890625 41.46875 -6.234375 41.46875 -15.125 C 41.46875 -23.859375 34.890625 -30.96875 25.453125 -30.96875 C 15.84375 -30.96875 9.25 -23.859375 9.25 -15.125 C 9.25 -6.234375 15.84375 0.890625 25.453125 0.890625 Z M 25.453125 0.890625 \" />\n </g>\n <g id=\"xml-wordmark-l-lbl-glyph0-2\">\n <path d=\"M 95.765625 0 L 126.5625 0 L 86.515625 -66.390625 L 121.390625 -125.484375 L 89.71875 -125.484375 L 64.265625 -80.984375 L 38.625 -125.484375 L 6.9375 -125.484375 L 42.015625 -66.390625 L 1.78125 0 L 32.75 0 L 64.265625 -53.21875 Z M 95.765625 0 \" />\n </g>\n <g id=\"xml-wordmark-l-lbl-glyph0-3\">\n <path d=\"M 10.328125 0 L 36.84375 0 L 36.84375 -111.78125 L 59.984375 0 L 99.328125 0 L 122.640625 -111.78125 L 122.640625 0 L 148.984375 0 L 148.984375 -125.484375 L 100.5625 -125.484375 L 79.75 -12.8125 L 58.734375 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n <g id=\"xml-wordmark-l-lbl-glyph0-4\">\n <path d=\"M 10.328125 0 L 89 0 L 89 -25.09375 L 38.09375 -25.09375 L 38.09375 -125.484375 L 10.328125 -125.484375 Z M 10.328125 0 \" />\n </g>\n </g>\n </defs>\n <g>\n <g>\n <use\n href=\"#xml-wordmark-l-lbl-glyph0-1\"\n x=\"0.462066\"\n y=\"162\"\n />\n <use\n href=\"#xml-wordmark-l-lbl-glyph0-2\"\n x=\"41.651266\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#xml-wordmark-l-lbl-glyph0-3\"\n x=\"165.254466\"\n y=\"162\"\n />\n </g>\n <g>\n <use\n href=\"#xml-wordmark-l-lbl-glyph0-4\"\n x=\"319.829666\"\n y=\"162\"\n />\n </g>\n </g>\n </g>\n </g>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-wordmark-l-filter-10\"\n >\n <feMorphology\n radius=\"0.5\"\n operator=\"dilate\"\n in=\"SourceAlpha\"\n result=\"shadowSpreadOuter1\"\n ></feMorphology>\n <feOffset\n dx=\"-3\"\n dy=\"3\"\n in=\"shadowSpreadOuter1\"\n result=\"shadowOffsetOuter1\"\n ></feOffset>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0501685049 0\"\n type=\"matrix\"\n in=\"shadowOffsetOuter1\"\n ></feColorMatrix>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-wordmark-l-filter-4)\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#xml-wordmark-l-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#xml-wordmark-l-filter-5)\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#xml-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fill=\"url(#xml-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fill=\"url(#xml-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fill=\"url(#xml-wordmark-l-linearGradient-7)\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#2515C7\">\n <use\n filter=\"url(#xml-wordmark-l-filter-10)\"\n href=\"#xml-wordmark-l-text-9\"\n ></use>\n <use href=\"#xml-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n <g data-theme-layer=\"dark\" className=\"hidden dark:inline\">\n <defs>\n <linearGradient\n x1=\"25.9355099%\"\n y1=\"0%\"\n x2=\"63.5613444%\"\n y2=\"91.834983%\"\n id=\"xml-wordmark-d-linearGradient-2\"\n >\n <stop\n stopColor=\"#2A2A2A\"\n stopOpacity=\"0.980392157\"\n offset=\"0%\"\n ></stop>\n <stop stopColor=\"#050505\" offset=\"100%\"></stop>\n </linearGradient>\n <filter\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n filterUnits=\"objectBoundingBox\"\n id=\"xml-wordmark-d-filter-5\"\n >\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner1\"\n ></feGaussianBlur>\n <feOffset\n dx=\"-10\"\n dy=\"14\"\n in=\"shadowBlurInner1\"\n result=\"shadowOffsetInner1\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner1\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner1\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 0 0.194256757 0 0 0 1 0\"\n type=\"matrix\"\n in=\"shadowInnerInner1\"\n result=\"shadowMatrixInner1\"\n ></feColorMatrix>\n <feGaussianBlur\n stdDeviation=\"4\"\n in=\"SourceAlpha\"\n result=\"shadowBlurInner2\"\n ></feGaussianBlur>\n <feOffset\n dx=\"4\"\n dy=\"-10\"\n in=\"shadowBlurInner2\"\n result=\"shadowOffsetInner2\"\n ></feOffset>\n <feComposite\n in=\"shadowOffsetInner2\"\n in2=\"SourceAlpha\"\n operator=\"arithmetic\"\n k2=\"-1\"\n k3=\"1\"\n result=\"shadowInnerInner2\"\n ></feComposite>\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0\"\n type=\"matrix\"\n in=\"shadowInnerInner2\"\n result=\"shadowMatrixInner2\"\n ></feColorMatrix>\n <feMerge>\n <feMergeNode in=\"shadowMatrixInner1\"></feMergeNode>\n <feMergeNode in=\"shadowMatrixInner2\"></feMergeNode>\n </feMerge>\n </filter>\n </defs>\n <g stroke=\"none\" fill=\"none\">\n <g>\n <use\n fill=\"black\"\n filter=\"url(#xml-wordmark-l-filter-4)\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"url(#xml-wordmark-d-linearGradient-2)\"\n fillRule=\"evenodd\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n <use\n fill=\"black\"\n filter=\"url(#xml-wordmark-d-filter-5)\"\n href=\"#xml-wordmark-l-path-3\"\n ></use>\n </g>\n <g\n filter=\"url(#xml-wordmark-l-filter-6)\"\n opacity=\"0.13\"\n fillRule=\"evenodd\"\n transform=\"translate(256.5027, 305.518)\"\n fill=\"#B2B2B2\"\n >\n <path\n d=\"M304.544551,0.447520067 C319.125735,0.47109626 330.927008,12.3105936 330.903467,26.8917774 C330.879856,41.4729613 319.040358,53.2742341 304.459175,53.2506931 L27.7029447,52.8031731 C13.1217608,52.7795969 1.32048809,40.9400996 1.34402902,26.3589157 C1.36764048,11.7777318 13.2071378,-0.0235409293 27.7883217,1.01746264e-13 L304.544551,0.447520067 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M509,164.674408 C509,179.255611 497.1796,191.076012 482.598397,191.076012 L27.296573,191.076012 C12.7153701,191.076012 0.894969607,179.255611 0.894969607,164.674408 C0.894969607,150.093206 12.7153701,138.272805 27.296573,138.272805 L482.598397,138.272805 C497.1796,138.272805 509,150.093206 509,164.674408 Z\"\n fillRule=\"nonzero\"\n ></path>\n <path\n d=\"M508.552515,304.737062 C508.552515,319.318265 496.732115,331.138666 482.150912,331.138666 L26.8490882,331.138666 C12.2678853,331.138666 0.447484804,319.318265 0.447484804,304.737062 C0.447484804,290.15586 12.2678853,278.335459 26.8490882,278.335459 L482.150912,278.335459 C496.732115,278.335459 508.552515,290.15586 508.552515,304.737062 Z\"\n fillRule=\"nonzero\"\n ></path>\n </g>\n <g fill=\"#7B5CFF\">\n <use\n filter=\"url(#xml-wordmark-l-filter-10)\"\n href=\"#xml-wordmark-l-text-9\"\n ></use>\n <use href=\"#xml-wordmark-l-text-9\"></use>\n </g>\n </g>\n </g>\n </svg>\n )\n}\n\nexport default FileWordmarkXml\n","import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n [\n \"relative inline-flex w-fit shrink-0 items-center justify-center border border-transparent font-medium whitespace-nowrap transition-shadow outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-3\",\n ],\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground\",\n outline: \"border-border bg-transparent dark:bg-input/32\",\n secondary: \"bg-secondary text-secondary-foreground\",\n info: \"bg-info text-white\",\n success: \"bg-success text-white\",\n warning: \"bg-warning text-white\",\n destructive: \"bg-destructive text-white\",\n focus: \"bg-focus text-focus-foreground\",\n invert: \"bg-invert text-invert-foreground\",\n \"primary-light\":\n \"border-primary/10 bg-primary/10 text-primary dark:border-primary/25 dark:bg-primary/15 dark:text-primary\",\n \"warning-light\":\n \"border-warning/15 bg-warning/10 text-warning-foreground dark:border-warning/25 dark:bg-warning/15 dark:text-warning\",\n \"success-light\":\n \"border-success/15 bg-success/10 text-success-foreground dark:border-success/25 dark:bg-success/15 dark:text-success\",\n \"info-light\":\n \"border-info/15 bg-info/10 text-info-foreground dark:border-info/25 dark:bg-info/15 dark:text-info\",\n \"destructive-light\":\n \"border-destructive/15 bg-destructive/10 text-destructive-foreground dark:border-destructive/25 dark:bg-destructive/15 dark:text-destructive\",\n \"invert-light\":\n \"border-invert/15 bg-invert/10 text-foreground dark:border-invert/45 dark:bg-invert/35 dark:text-invert-foreground\",\n \"focus-light\":\n \"border-focus/15 bg-focus/10 text-focus-foreground dark:border-focus/25 dark:bg-focus/15 dark:text-focus\",\n \"primary-outline\":\n \"border-border bg-background text-primary dark:bg-input/30\",\n \"warning-outline\":\n \"border-border bg-background text-warning-foreground dark:bg-input/30\",\n \"success-outline\":\n \"border-border bg-background text-success-foreground dark:bg-input/30\",\n \"info-outline\":\n \"border-border bg-background text-info-foreground dark:bg-input/30\",\n \"destructive-outline\":\n \"border-border bg-background text-destructive-foreground dark:bg-input/30\",\n \"invert-outline\":\n \"border-border bg-background text-invert-foreground dark:bg-input/30\",\n \"focus-outline\":\n \"text-focus-foreground border-border bg-background dark:bg-input/30\",\n },\n size: {\n xs: \"h-4 min-w-4 gap-1 px-1 py-0.25 text-[0.6rem] leading-none\",\n sm: \"h-4.5 min-w-4.5 gap-1 px-1 py-0.25 text-[0.625rem] leading-none\",\n default: \"h-5 min-w-5 gap-1 px-1.25 py-0.5 text-xs\",\n lg: \"h-5.5 min-w-5.5 gap-1 px-1.5 py-0.5 text-xs\",\n xl: \"h-6 min-w-6 gap-1.5 px-2 py-0.75 text-sm\",\n },\n /** `default`: active style radius. `full`: pill radius. */\n radius: {\n default: \"rounded-sm\",\n full: \"rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n radius: \"default\",\n },\n }\n)\n\ninterface IBadgeProps extends useRender.ComponentProps<\"span\"> {\n variant?: VariantProps<typeof badgeVariants>[\"variant\"]\n size?: VariantProps<typeof badgeVariants>[\"size\"]\n radius?: VariantProps<typeof badgeVariants>[\"radius\"]\n}\n\nfunction Badge({\n className,\n variant,\n size,\n radius,\n render,\n ...props\n}: IBadgeProps) {\n const defaultProps = {\n \"data-slot\": \"badge\",\n className: cn(badgeVariants({ variant, size, radius, className })),\n }\n\n return useRender({\n defaultTagName: \"span\",\n render,\n props: mergeProps<\"span\">(defaultProps, props),\n })\n}\n\nexport { Badge, badgeVariants, type IBadgeProps }\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nconst SIZES = { 28: \"size-7 rounded-md\", 32: \"size-8 rounded-[10px]\", 36: \"size-9 rounded-[10px]\", 40: \"size-10 rounded-[10px]\" } as const\n\nexport interface IIconTileProps extends React.ComponentPropsWithoutRef<\"span\"> {\n /** Tile edge in px. The design uses 40 (attachments), 32 (agent avatar), 28 (research kicker), 36 (flowchart node). */\n size?: keyof typeof SIZES\n /** Fill the tile with the accent-subtle tint instead of the neutral surface. */\n tone?: \"neutral\" | \"accent\"\n}\n\n/**\n * Square tile that frames a 16px lucide icon.\n *\n * @sketch \"Atom / Icon Tile\"\n */\nexport function IconTile({ size = 40, tone = \"neutral\", className, children, ...props }: IIconTileProps): React.ReactElement {\n return (\n <span\n data-slot=\"icon-tile\"\n className={cn(\n \"inline-flex shrink-0 items-center justify-center [&_svg]:size-4 [&_svg]:shrink-0\",\n SIZES[size],\n tone === \"accent\" ? \"bg-accent-subtle text-accent-text\" : \"bg-surface-subtle text-icon\",\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n}\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface IThumbnailProps extends React.ComponentPropsWithoutRef<\"span\"> {\n src?: string\n alt?: string\n /** `sm` is the 40px chip tile (radius 10); `lg` the 240×160 preview (radius 14). */\n size?: \"sm\" | \"lg\"\n}\n\n/**\n * Image slot with a gradient placeholder when `src` is missing.\n *\n * @sketch \"Atom / Thumbnail / Small\", \"Atom / Thumbnail / Large\"\n */\nexport function Thumbnail({ src, alt = \"\", size = \"sm\", className, children, ...props }: IThumbnailProps): React.ReactElement {\n return (\n <span\n data-slot=\"thumbnail\"\n className={cn(\n \"relative block shrink-0 overflow-hidden bg-[linear-gradient(135deg,#8b7bd8_0%,#c9b3ff_45%,#f2b48a_100%)]\",\n size === \"sm\" ? \"size-10 rounded-[10px]\" : \"aspect-[3/2] w-60 rounded-[14px]\",\n className\n )}\n {...props}\n >\n {src ? <img alt={alt} className=\"size-full object-cover\" src={src} /> : null}\n {children}\n </span>\n )\n}\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface IAvatarHandleProps extends React.ComponentPropsWithoutRef<\"span\"> {\n src?: string\n /** Initials shown when no image loads; two characters at most. */\n initials?: string\n size?: 16 | 20\n}\n\n/**\n * 20px avatar for @-handle chips and reply headers.\n *\n * @sketch \"Atom / Avatar / Handle 20\"\n */\nexport function AvatarHandle({ src, initials, size = 20, className, ...props }: IAvatarHandleProps): React.ReactElement {\n return (\n <span\n data-slot=\"avatar-handle\"\n className={cn(\n \"inline-flex shrink-0 select-none items-center justify-center overflow-hidden rounded-full bg-accent-subtle font-semibold text-accent-text\",\n size === 20 ? \"size-5 text-[8px]\" : \"size-4 text-[7px]\",\n className\n )}\n {...props}\n >\n {src ? <img alt=\"\" className=\"size-full object-cover\" src={src} /> : initials?.slice(0, 2).toUpperCase()}\n </span>\n )\n}\n","\"use client\"\n\nimport { Play, Plus, X } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button, type TButtonProps } from \"@/components/ui/button\"\n\ntype TIconButtonProps = Omit<TButtonProps, \"variant\" | \"size\" | \"glassVariant\" | \"children\">\n\n/**\n * 18px filled circle with an inverse ✕, used on composer chips.\n *\n * @sketch \"Atom / Button / Remove\"\n */\nexport function RemoveButton({ className, ...props }: TIconButtonProps): React.ReactElement {\n return (\n <Button\n aria-label=\"Remove\"\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\n \"size-[18px] rounded-full border-0 bg-text-primary text-text-inverse hover:bg-text-primary/85 sm:size-[18px] [&_svg]:size-2.5! [&_svg]:opacity-100\",\n className\n )}\n {...props}\n >\n <X strokeWidth={3} />\n </Button>\n )\n}\n\n/**\n * 36px scrim circle with a white play glyph, centred on media previews.\n *\n * @sketch \"Atom / Button / Play\"\n */\nexport function PlayButton({ className, ...props }: TIconButtonProps): React.ReactElement {\n return (\n <Button\n aria-label=\"Play\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"size-9 rounded-full border-0 bg-overlay-scrim text-overlay-on-media hover:bg-overlay-scrim/80 sm:size-9 [&_svg]:size-3.5! [&_svg]:translate-x-px [&_svg]:fill-current [&_svg]:opacity-100\",\n className\n )}\n {...props}\n >\n <Play />\n </Button>\n )\n}\n\n/**\n * 26px ghost \"+\" for the composer's attach action.\n *\n * @sketch \"Atom / Button / Add\"\n */\nexport function AddButton({ className, ...props }: TIconButtonProps): React.ReactElement {\n return (\n <Button\n aria-label=\"Add attachment\"\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\"size-[26px] rounded-md text-icon sm:size-[26px] [&_svg]:size-4!\", className)}\n {...props}\n >\n <Plus />\n </Button>\n )\n}\n\nexport type TSendButtonProps = Omit<TButtonProps, \"variant\" | \"glassVariant\">\n\n/**\n * Brand-yellow 61×31 pill, radius 8, dark label.\n *\n * @sketch \"Atom / Button / Send\"\n */\nexport function SendButton({ className, children = \"Send\", ...props }: TSendButtonProps): React.ReactElement {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-[31px] rounded-md border-0 bg-brand px-4 text-[13px] font-semibold text-[#1a1a1a] shadow-none hover:bg-brand/90 data-pressed:bg-brand/90 sm:h-[31px] *:data-[slot=button-loading-indicator]:text-[#1a1a1a]\",\n className\n )}\n {...props}\n >\n {children}\n </Button>\n )\n}\n","import { Globe } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * 28×14 uppercase file-format badge (\"PDF\", \"CSV\").\n *\n * @sketch \"Atom / Badge / File Type\"\n */\nexport function FileTypeBadge({ className, children, ...props }: React.ComponentPropsWithoutRef<\"span\">): React.ReactElement {\n return (\n <span\n data-slot=\"file-type-badge\"\n className={cn(\n \"inline-flex h-3.5 min-w-7 shrink-0 items-center justify-center rounded-[4px] bg-surface-subtle px-1 text-[8px] font-bold uppercase leading-none tracking-wide text-text-secondary\",\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n}\n\nexport interface IFaviconProps extends React.ComponentPropsWithoutRef<\"span\"> {\n src?: string\n size?: 14 | 16\n}\n\n/**\n * 16px site icon tile with a globe fallback.\n *\n * @sketch \"Atom / Favicon\"\n */\nexport function Favicon({ src, size = 16, className, ...props }: IFaviconProps): React.ReactElement {\n return (\n <span\n data-slot=\"favicon\"\n className={cn(\n \"inline-flex shrink-0 items-center justify-center overflow-hidden rounded-[4px] bg-surface-subtle text-icon\",\n size === 16 ? \"size-4 [&_svg]:size-2.5\" : \"size-3.5 [&_svg]:size-2\",\n className\n )}\n {...props}\n >\n {src ? <img alt=\"\" className=\"size-full object-cover\" src={src} /> : <Globe />}\n </span>\n )\n}\n\n/**\n * Scrim pill with a mono duration (\"0:42\"), bottom-right of media previews.\n *\n * @sketch \"Atom / Duration Pill\"\n */\nexport function DurationPill({ className, children, ...props }: React.ComponentPropsWithoutRef<\"span\">): React.ReactElement {\n return (\n <span\n data-slot=\"duration-pill\"\n className={cn(\n \"inline-flex h-4 shrink-0 items-center rounded-[4px] bg-overlay-scrim px-1.5 font-mono text-[10px] font-medium leading-none text-overlay-on-media\",\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n}\n\n/**\n * 3px accent bar that rails a quote or reply.\n *\n * @sketch \"Atom / Quote Rail\"\n */\nexport function QuoteRail({ className, ...props }: React.ComponentPropsWithoutRef<\"span\">): React.ReactElement {\n return (\n <span\n aria-hidden=\"true\"\n data-slot=\"quote-rail\"\n className={cn(\"block w-[3px] shrink-0 self-stretch rounded-full bg-accent-default\", className)}\n {...props}\n />\n )\n}\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nconst DEFAULT_BARS = [0.3, 0.6, 1, 0.75, 0.45, 0.9, 0.55, 0.35, 0.8, 1, 0.6, 0.4, 0.7, 0.5, 0.85, 0.3, 0.65, 0.95, 0.5, 0.35]\n\nexport interface IWaveformProps extends React.ComponentPropsWithoutRef<\"span\"> {\n /** Bar heights in 0…1. Defaults to a 20-bar sample. */\n bars?: number[]\n /** Bars up to this index render in the accent colour (playback progress). */\n progress?: number\n}\n\n/**\n * Static 20px-tall bar waveform for audio attachments.\n *\n * @sketch \"Atom / Waveform\"\n */\nexport function Waveform({ bars = DEFAULT_BARS, progress = 0, className, ...props }: IWaveformProps): React.ReactElement {\n return (\n <span aria-hidden=\"true\" data-slot=\"waveform\" className={cn(\"inline-flex h-5 items-center gap-[2.5px]\", className)} {...props}>\n {bars.map((h, i) => (\n <span\n key={i}\n className={cn(\"w-0.5 rounded-full\", i < progress ? \"bg-accent-default\" : \"bg-text-primary\")}\n style={{ height: `${Math.max(0.15, Math.min(1, h)) * 100}%` }}\n />\n ))}\n </span>\n )\n}\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport type TDotTone =\n | \"success\" | \"warning\" | \"info\" | \"danger\" | \"neutral\" | \"accent\" | \"brand\"\n | \"series-1\" | \"series-2\" | \"series-3\" | \"series-4\" | \"series-5\"\n\nexport const DOT_TONE_CLASSES: Record<TDotTone, string> = {\n success: \"bg-semantic-success\",\n warning: \"bg-semantic-warning\",\n info: \"bg-semantic-info\",\n danger: \"bg-semantic-danger\",\n neutral: \"bg-text-muted\",\n accent: \"bg-accent-default\",\n brand: \"bg-brand\",\n \"series-1\": \"bg-chart-series-1\",\n \"series-2\": \"bg-chart-series-2\",\n \"series-3\": \"bg-chart-series-3\",\n \"series-4\": \"bg-chart-series-4\",\n \"series-5\": \"bg-chart-series-5\",\n}\n\nexport interface IDotProps extends React.ComponentPropsWithoutRef<\"span\"> {\n tone?: TDotTone\n size?: 6 | 8\n}\n\n/**\n * Status / series marker.\n *\n * @sketch \"Atom / Dot / {Success, Warning, Info, Danger, Neutral, Accent, Brand, Series 3, Series 4}\"\n */\nexport function Dot({ tone = \"neutral\", size = 8, className, ...props }: IDotProps): React.ReactElement {\n return (\n <span\n aria-hidden=\"true\"\n data-slot=\"dot\"\n data-tone={tone}\n className={cn(\"inline-block shrink-0 rounded-full\", size === 8 ? \"size-2\" : \"size-1.5\", DOT_TONE_CLASSES[tone], className)}\n {...props}\n />\n )\n}\n\nexport interface ILegendItemProps extends React.ComponentPropsWithoutRef<\"span\"> {\n tone?: TDotTone\n /** Optional trailing value (\"42%\"). */\n value?: React.ReactNode\n}\n\n/**\n * Dot + label (+ value) row for chart legends.\n *\n * @sketch \"Atom / Legend Item\"\n */\nexport function LegendItem({ tone = \"series-1\", value, className, children, ...props }: ILegendItemProps): React.ReactElement {\n return (\n <span data-slot=\"legend-item\" className={cn(\"inline-flex h-4 items-center gap-2 text-[11px] leading-none text-text-secondary\", className)} {...props}>\n <Dot tone={tone} />\n <span className=\"truncate\">{children}</span>\n {value !== undefined ? <span className=\"ml-auto pl-3 font-medium text-text-primary\">{value}</span> : null}\n </span>\n )\n}\n\n/**\n * 20px neutral pill for chart-type badges and counts.\n *\n * @sketch \"Atom / Pill\"\n */\nexport function Pill({ className, children, ...props }: React.ComponentPropsWithoutRef<\"span\">): React.ReactElement {\n return (\n <span\n data-slot=\"pill\"\n className={cn(\"inline-flex h-5 shrink-0 items-center rounded-full bg-surface-subtle px-2.5 text-[11px] font-medium leading-none text-text-secondary\", className)}\n {...props}\n >\n {children}\n </span>\n )\n}\n","\"use client\"\n\nimport { motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { SPRING_LAYOUT } from \"@/lib/ease\"\nimport { playCue } from \"@/lib/sound\"\n\nexport interface ISegmentedToggleOption<T extends string> {\n value: T\n label: React.ReactNode\n}\n\nexport interface ISegmentedToggleProps<T extends string> extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"onChange\" | \"defaultValue\"> {\n options: readonly ISegmentedToggleOption<T>[]\n value?: T\n defaultValue?: T\n onValueChange?: (value: T) => void\n /** Accessible group name. */\n label?: string\n sound?: boolean\n}\n\n/**\n * Two-or-more segment switch with a sliding active pill.\n *\n * @sketch \"Atom / Segmented Toggle\", \"Atom / Segmented Toggle / Right\"\n */\nexport function SegmentedToggle<T extends string>({\n options,\n value,\n defaultValue,\n onValueChange,\n label,\n sound = true,\n className,\n ...props\n}: ISegmentedToggleProps<T>): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const layoutId = React.useId()\n const [internal, setInternal] = React.useState<T>(defaultValue ?? options[0].value)\n const current = value ?? internal\n\n const select = (next: T) => {\n if (next === current) return\n if (value === undefined) setInternal(next)\n onValueChange?.(next)\n if (sound) playCue(\"toggle\")\n }\n\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\n const delta = e.key === \"ArrowRight\" || e.key === \"ArrowDown\" ? 1 : e.key === \"ArrowLeft\" || e.key === \"ArrowUp\" ? -1 : 0\n if (!delta) return\n e.preventDefault()\n const next = options[(index + delta + options.length) % options.length]\n select(next.value)\n ;(e.currentTarget.parentElement?.querySelector(`[data-value=\"${next.value}\"]`) as HTMLElement | null)?.focus()\n }\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n data-slot=\"segmented-toggle\"\n className={cn(\"inline-flex h-6 items-center rounded-md bg-surface-subtle p-0.5\", className)}\n {...props}\n >\n {options.map((option, index) => {\n const active = option.value === current\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n data-value={option.value}\n tabIndex={active ? 0 : -1}\n onClick={() => select(option.value)}\n onKeyDown={(e) => onKeyDown(e, index)}\n className={cn(\n \"relative h-5 rounded-[5px] px-2 text-[11px] font-medium leading-none outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring\",\n active ? \"text-text-primary\" : \"text-text-secondary hover:text-text-primary\"\n )}\n >\n {active ? (\n <motion.span\n aria-hidden=\"true\"\n layoutId={layoutId}\n transition={reduceMotion ? { duration: 0 } : SPRING_LAYOUT}\n className=\"absolute inset-0 rounded-[5px] bg-surface-card shadow-[0_1px_2px_rgb(0_0_0/0.12)] dark:shadow-[0_1px_2px_rgb(0_0_0/0.5)]\"\n />\n ) : null}\n <span className=\"relative\">{option.label}</span>\n </button>\n )\n })}\n </div>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button, type TButtonProps } from \"@/components/ui/button\"\n\nexport type TIconButtonProps = Omit<TButtonProps, \"variant\" | \"size\" | \"glassVariant\" | \"aria-label\"> & {\n /** Required: icon-only controls need a name. */\n \"aria-label\": string\n}\n\n/**\n * 24px ghost control framing a 16px icon.\n *\n * @sketch \"Atom / Icon Button\"\n */\nexport function IconButton({ className, ...props }: TIconButtonProps): React.ReactElement {\n return (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\"size-6 rounded-md text-icon hover:bg-surface-subtle hover:text-text-primary sm:size-6 [&_svg]:size-4! [&_svg]:opacity-100\", className)}\n {...props}\n />\n )\n}\n\n/**\n * Violet \"Agent\" chip beside the assistant's name.\n *\n * @sketch \"Atom / Badge / Agent\"\n */\nexport function AgentBadge({ className, children = \"Agent\", ...props }: React.ComponentPropsWithoutRef<\"span\">): React.ReactElement {\n return (\n <span\n data-slot=\"agent-badge\"\n className={cn(\"inline-flex h-5 shrink-0 items-center rounded-[4px] bg-accent-subtle px-2 text-[11px] font-medium leading-none text-accent-text\", className)}\n {...props}\n >\n {children}\n </span>\n )\n}\n","import type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport type TTagTone = \"amber\" | \"purple\" | \"blue\" | \"green\"\n\nconst TONE: Record<TTagTone, string> = {\n amber: \"border-tag-amber-border bg-tag-amber-fill text-tag-amber-text\",\n purple: \"border-tag-purple-border bg-tag-purple-fill text-tag-purple-text\",\n blue: \"border-tag-blue-border bg-tag-blue-fill text-tag-blue-text\",\n green: \"border-tag-green-border bg-tag-green-fill text-tag-green-text\",\n}\n\nexport interface ITagProps extends React.ComponentPropsWithoutRef<\"span\"> {\n tone?: TTagTone\n}\n\n/**\n * 22px tinted label with a hairline border.\n *\n * @sketch \"Atom / Tag / {Amber, Purple, Blue, Green}\"\n */\nexport function Tag({ tone = \"blue\", className, children, ...props }: ITagProps): React.ReactElement {\n return (\n <span\n data-slot=\"tag\"\n data-tone={tone}\n className={cn(\"inline-flex h-[22px] shrink-0 items-center rounded-lg border px-2 text-[11px] font-medium leading-none\", TONE[tone], className)}\n {...props}\n >\n {children}\n </span>\n )\n}\n\nexport type TSignalLevel = \"high\" | \"medium\" | \"low\"\n\nconst SIGNAL: Record<TSignalLevel, { lit: number; color: string }> = {\n high: { lit: 3, color: \"bg-semantic-success\" },\n medium: { lit: 2, color: \"bg-semantic-warning\" },\n low: { lit: 1, color: \"bg-text-muted\" },\n}\n\nexport interface ISignalProps extends React.ComponentPropsWithoutRef<\"span\"> {\n level?: TSignalLevel\n}\n\n/**\n * Three-bar confidence meter.\n *\n * @sketch \"Atom / Signal / {High, Medium, Low}\"\n */\nexport function Signal({ level = \"high\", className, ...props }: ISignalProps): React.ReactElement {\n const { lit, color } = SIGNAL[level]\n return (\n <span role=\"img\" aria-label={`${level} signal`} data-slot=\"signal\" data-level={level} className={cn(\"inline-flex h-2.5 items-end gap-0.5\", className)} {...props}>\n {[0, 1, 2].map((i) => (\n <span key={i} className={cn(\"w-1 rounded-[1px]\", i < lit ? color : \"bg-surface-subtle\", i === 0 ? \"h-1.5\" : i === 1 ? \"h-2\" : \"h-2.5\")} />\n ))}\n </span>\n )\n}\n","import { CornerDownLeft } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Favicon } from \"./badges\"\nimport { Dot, type TDotTone } from \"./dot\"\n\nexport interface ISourceChipProps extends React.ComponentPropsWithoutRef<\"span\"> {\n favicon?: string\n /** Domain in mono (\"scoopdata.io\"). */\n children: React.ReactNode\n}\n\n/**\n * 18px pill with a favicon and a mono domain, inline in streamed text.\n *\n * @sketch \"Atom / Source Chip\"\n */\nexport function SourceChip({ favicon, className, children, ...props }: ISourceChipProps): React.ReactElement {\n return (\n <span\n data-slot=\"source-chip\"\n className={cn(\"inline-flex h-[18px] items-center gap-1.5 rounded-full bg-surface-subtle py-0.5 pl-0.5 pr-2 align-middle font-mono text-[10.5px] leading-none text-text-secondary\", className)}\n {...props}\n >\n <Favicon src={favicon} size={14} />\n {children}\n </span>\n )\n}\n\nexport interface IAvatarStackProps extends React.ComponentPropsWithoutRef<\"span\"> {\n /** Up to three tones or image urls, rendered overlapping. */\n items?: (TDotTone | { src: string })[]\n}\n\n/**\n * Three overlapping 14px circles.\n *\n * @sketch \"Atom / Avatar Stack\"\n */\nexport function AvatarStack({ items = [\"series-1\", \"series-3\", \"series-4\"], className, ...props }: IAvatarStackProps): React.ReactElement {\n return (\n <span aria-hidden=\"true\" data-slot=\"avatar-stack\" className={cn(\"inline-flex items-center\", className)} {...props}>\n {items.slice(0, 3).map((item, i) => (\n <span key={i} className={cn(\"inline-flex size-3.5 overflow-hidden rounded-full ring-2 ring-surface-card\", i > 0 && \"-ml-1.5\")}>\n {typeof item === \"string\" ? <Dot tone={item} className=\"size-full rounded-full\" /> : <img alt=\"\" className=\"size-full object-cover\" src={item.src} />}\n </span>\n ))}\n </span>\n )\n}\n\nexport interface IStatProps extends React.ComponentPropsWithoutRef<\"div\"> {\n tone?: TDotTone\n label: React.ReactNode\n value: React.ReactNode\n /** Secondary mono line (\"−$2,377.66\"). */\n delta?: React.ReactNode\n trend?: \"positive\" | \"negative\"\n}\n\n/**\n * 152×64 stat: dot + label, big coloured value, mono delta.\n *\n * @sketch \"Atom / Stat / {Positive, Negative}\"\n */\nexport function Stat({ tone = \"series-1\", label, value, delta, trend = \"positive\", className, ...props }: IStatProps): React.ReactElement {\n const color = trend === \"positive\" ? \"text-semantic-success\" : \"text-semantic-danger\"\n return (\n <div data-slot=\"stat\" data-trend={trend} className={cn(\"flex w-[152px] flex-col gap-1\", className)} {...props}>\n <span className=\"flex items-center gap-2 text-[11px] leading-none text-text-secondary\">\n <Dot tone={tone} />\n <span className=\"truncate\">{label}</span>\n </span>\n <span className={cn(\"text-[17px] font-semibold leading-5\", color)}>{value}</span>\n {delta !== undefined ? <span className={cn(\"font-mono text-[11px] leading-none\", color)}>{delta}</span> : null}\n </div>\n )\n}\n\nexport interface IFollowUpRowProps extends Omit<React.ComponentPropsWithoutRef<\"button\">, \"onSelect\"> {\n onSelect?: () => void\n}\n\n/**\n * Full-width follow-up prompt with a return-arrow icon and a hairline base.\n *\n * @sketch \"Atom / Follow-up Row\"\n */\nexport function FollowUpRow({ onSelect, className, children, ...props }: IFollowUpRowProps): React.ReactElement {\n return (\n <button\n type=\"button\"\n data-slot=\"follow-up-row\"\n onClick={onSelect}\n className={cn(\n \"flex h-8 w-full items-center gap-2.5 border-b border-border-default px-1 text-left text-[12.5px] leading-none text-text-primary outline-none transition-colors hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-ring [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-text-muted\",\n className\n )}\n {...props}\n >\n <CornerDownLeft />\n <span className=\"truncate\">{children}</span>\n </button>\n )\n}\n","\"use client\"\n\nimport { ArrowUpRight } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n PreviewCard,\n PreviewCardPopup,\n PreviewCardTrigger,\n} from \"@/components/ui/preview-card\"\nimport { cn } from \"@/lib/utils\"\nimport { Favicon } from \"./badges\"\nimport { SourceChip } from \"./chips\"\n\nexport interface IInlineSourceProps\n extends Omit<React.ComponentPropsWithoutRef<\"span\">, \"title\"> {\n /** Domain shown in the chip (\"scoopdata.io\"). */\n domain: React.ReactNode\n favicon?: string\n /** Source title in the popover. */\n title?: React.ReactNode\n /** Excerpt or summary in the popover. */\n description?: React.ReactNode\n /** Opens the source in a new tab from the popover. */\n href?: string\n openLabel?: React.ReactNode\n}\n\n/**\n * Inline citation: a SourceChip that, when it carries a title, description\n * or href, opens a hover preview with an \"Open source\" button.\n *\n * @sketch \"Atom / Inline Source\"\n */\nexport function InlineSource({\n domain,\n favicon,\n title,\n description,\n href,\n openLabel = \"Open source\",\n className,\n ...props\n}: IInlineSourceProps): React.ReactElement {\n const chip = (\n <SourceChip\n className={cn(href || title || description ? \"cursor-default\" : null, className)}\n data-slot=\"inline-source\"\n favicon={favicon}\n {...props}\n >\n {domain}\n </SourceChip>\n )\n if (!href && !title && !description) return chip\n\n return (\n <PreviewCard>\n <PreviewCardTrigger delay={250} render={chip} />\n <PreviewCardPopup\n className=\"w-72 flex-col gap-2 p-3\"\n data-slot=\"inline-source-preview\"\n >\n <span className=\"flex items-center gap-2\">\n <Favicon src={favicon} />\n <span className=\"flex min-w-0 flex-col\">\n {title ? (\n <span className=\"truncate text-xs font-semibold leading-4 text-foreground\">\n {title}\n </span>\n ) : null}\n <span className=\"truncate font-mono text-[11px] leading-4 text-muted-foreground\">\n {domain}\n </span>\n </span>\n </span>\n {description ? (\n <p className=\"text-xs leading-4 text-foreground/90\">{description}</p>\n ) : null}\n {href ? (\n <Button\n className=\"self-start\"\n render={<a href={href} rel=\"noreferrer\" target=\"_blank\" />}\n size=\"xs\"\n variant=\"outline\"\n >\n {openLabel}\n <ArrowUpRight className=\"size-3\" />\n </Button>\n ) : null}\n </PreviewCardPopup>\n </PreviewCard>\n )\n}\n","import { Children, Fragment, isValidElement } from \"react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { EASE_IN_OUT, SPRING_PANEL } from \"@/lib/ease\"\nimport type { Variants } from \"motion\"\n\n// The AI accent is a muted amber used sparingly — the ✦ icon, small labels\n// and the primary Apply action. Everything else reads from theme tokens so\n// these components inherit whatever surface hosts them (e.g. the shell\n// right panel).\nexport const accentText = \"text-amber-600 dark:text-amber-300/90\"\n\nexport const accentRing = \"ring-offset-0 focus-visible:ring-amber-400/40\"\n\nexport const accentSolid = cn(\n \"border-amber-500/60 bg-amber-400/90 text-amber-950 shadow-none hover:bg-amber-400 disabled:opacity-35 data-pressed:bg-amber-400 *:data-[slot=button-loading-indicator]:text-amber-950\",\n accentRing\n)\n\n// The agent's own voice is violet: its badge, the suggestions disclosure and\n// the accepted mark on a suggestion card.\nexport const agentText = \"text-violet-600 dark:text-violet-400\"\n\nexport const ghostMuted = cn(\n \"text-muted-foreground hover:text-foreground\",\n accentRing\n)\n\nexport const mutedText = \"text-[13px] leading-5 text-muted-foreground\"\n\n// Floating surfaces (scope picker list, selection popover) — theme tokens,\n// not a hard-coded dark panel.\nexport const surface = \"border bg-popover text-popover-foreground shadow-lg\"\n\n/** The AI spark — the accent-coloured ✦ that marks every AI affordance. */\nexport function AiIcon({\n className,\n}: {\n className?: string\n}): React.ReactElement {\n return (\n <span aria-hidden=\"true\" className={cn(accentText, className)}>\n ✦\n </span>\n )\n}\n\nexport function CloseIcon(): React.ReactElement {\n return (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n >\n <path d=\"m6 6 12 12M18 6 6 18\" />\n </svg>\n )\n}\n\n// Frosted card used by suggestion cards: a translucent field with a lit top\n// edge and a light backdrop blur so the thread reads through it.\nexport const glassCard =\n \"rounded-md border-0 border-t-2 border-t-white/70 bg-neutral-200/45 shadow-none backdrop-blur-[3px] backdrop-saturate-125 before:hidden dark:border-t-neutral-700 dark:bg-neutral-800/50\"\n\n// The suggestions fan-out: the list holds the stagger, each item springs up\n// into place. Shared by `AiMessage`'s disclosure and `SuggestedPrompts`, so\n// both fan out with the same rhythm.\nexport const LIST_VARIANTS: Variants = {\n hidden: { transition: { staggerChildren: 0.04, staggerDirection: -1 } },\n visible: { transition: { staggerChildren: 0.07, delayChildren: 0.05 } },\n}\n\nexport const ITEM_VARIANTS: Variants = {\n hidden: {\n opacity: 0,\n y: 14,\n scale: 0.97,\n transition: { duration: 0.18, ease: EASE_IN_OUT },\n },\n visible: { opacity: 1, y: 0, scale: 1, transition: SPRING_PANEL },\n}\n\n/** Children.toArray, but looking through fragments so `<>{a}{b}</>` counts two. */\nexport function flattenChildren(children: React.ReactNode): React.ReactNode[] {\n return Children.toArray(children).flatMap((child) =>\n isValidElement<{ children?: React.ReactNode }>(child) &&\n child.type === Fragment\n ? flattenChildren(child.props.children)\n : [child]\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { motion, useReducedMotion } from \"motion/react\"\nimport type { Variants } from \"motion/react\"\n\nimport { EASE_OUT } from \"@/lib/ease.ts\"\nimport { cn } from \"@/lib/utils\"\nimport { initialsFrom } from \"@/components/atoms/avatar/utils\"\n\n/** `full` shows mark + wordmark; `mark` folds the wordmark away — an icon\n * rail, a favicon-sized corner. */\nexport type TLogoVariant = \"full\" | \"mark\"\n\nexport interface ILogoProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"children\"\n> {\n /**\n * Brand name. Labels the logo for AT (and the link, when `href` renders\n * one), drives the default wordmark, and the monogram tile when no mark\n * is given.\n */\n name: string\n /** Custom mark — an inline SVG sized to fill its box. Wins over `src`. */\n mark?: React.ReactNode\n /** Image URL for the mark. Decorative — `name` labels the logo. */\n src?: string\n /** Wordmark content. Defaults to `name`. */\n wordmark?: React.ReactNode\n /** `full` (default) or `mark` — the wordmark folds away, animated. */\n variant?: TLogoVariant\n /** Renders the logo as a link — the usual \"mark goes home\" affordance. */\n href?: string\n}\n\n/** Wordmark fold/unfold — the same envelope the profile card's identity\n * lines use, so a logo and a profile card folding in the same rail move as\n * one. Kept local: composed components do not reach into blocks. Expressed\n * as named variants for consistency with the profile card's fold envelope —\n * house style for multi-property fold states, not a motion requirement. */\nconst WORDMARK_VARIANTS: Variants = {\n open: {\n width: \"auto\",\n opacity: 1,\n x: 0,\n transition: { duration: 0.2, delay: 0.08, ease: EASE_OUT },\n },\n folded: {\n width: 0,\n opacity: 0,\n x: -4,\n transition: { duration: 0.12, ease: EASE_OUT },\n },\n}\n\nconst WORDMARK_VARIANTS_REDUCED: Variants = {\n open: {\n width: \"auto\",\n opacity: 1,\n x: 0,\n transition: { duration: 0.16, ease: EASE_OUT },\n },\n folded: {\n width: 0,\n opacity: 0,\n x: 0,\n transition: { duration: 0.16, ease: EASE_OUT },\n },\n}\n\n/**\n * Brand lockup: a mark beside a wordmark. The mark is whatever the brand\n * has — an SVG (`mark`), an image (`src`), or, given neither, a monogram\n * tile derived from `name`. `variant=\"mark\"` folds the wordmark away with\n * the same motion a collapsing rail uses, so the lockup can sit in one and\n * follow its fold. With `href` the whole lockup is a link named by `name`.\n *\n * Sizing rides on the mark: it defaults to `size-8`; restyle via\n * `[&_[data-slot=logo-mark]]:size-*` or wrap in a text-size context for the\n * wordmark, which inherits.\n */\nexport function Logo({\n name,\n mark,\n src,\n wordmark,\n variant = \"full\",\n href,\n className,\n ...props\n}: ILogoProps): React.ReactElement {\n const reduce = useReducedMotion()\n const folded = variant === \"mark\"\n\n const markNode =\n mark ??\n (src !== undefined ? (\n // Decorative: the root's `name` (visible wordmark or aria-label)\n // already names the brand.\n <img alt=\"\" className=\"size-full object-contain\" src={src} />\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"flex size-full items-center justify-center rounded-lg bg-foreground text-[45cqw] font-semibold text-background\"\n data-slot=\"logo-monogram\"\n >\n {initialsFrom(name)}\n </span>\n ))\n\n const content = (\n <>\n <span\n className=\"@container size-8 shrink-0 [&_svg]:size-full\"\n data-slot=\"logo-mark\"\n >\n {markNode}\n </span>\n <motion.span\n animate={folded ? \"folded\" : \"open\"}\n variants={reduce ? WORDMARK_VARIANTS_REDUCED : WORDMARK_VARIANTS}\n // Folded, the wordmark is gone for AT too — the root's label names\n // the brand on its own.\n aria-hidden={folded || undefined}\n className={cn(\n \"min-w-0 overflow-hidden font-semibold tracking-tight whitespace-nowrap\",\n folded && \"pointer-events-none\",\n // 0px wide while folded, but the flex gap before it would still\n // offset the mark — pull it back by that gap.\n folded && \"-ml-2\"\n )}\n data-slot=\"logo-wordmark\"\n initial={false}\n >\n {wordmark ?? name}\n </motion.span>\n </>\n )\n\n const rootClassName = cn(\n \"inline-flex shrink-0 items-center gap-2 text-foreground\",\n className\n )\n\n return href !== undefined ? (\n <a\n // Always labelled: the folded state hides the wordmark, and a link\n // must not lose its name mid-animation.\n aria-label={name}\n className={rootClassName}\n data-slot=\"logo\"\n data-variant={variant}\n href={href}\n {...props}\n >\n {content}\n </a>\n ) : (\n <span\n aria-label={folded ? name : undefined}\n className={rootClassName}\n data-slot=\"logo\"\n data-variant={variant}\n role={folded ? \"img\" : undefined}\n {...props}\n >\n {content}\n </span>\n )\n}\n","\"use client\";\n\nimport { CheckIcon, EyeIcon, EyeOffIcon, XIcon } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/components/ui/input-group\";\nimport { playCue } from \"@/lib/sound\";\nimport { cn } from \"@/lib/utils\";\n\n// transitions.dev motion scale\nconst EASE = [0.22, 1, 0.36, 1] as const;\n\nexport const passwordRequirements = [\n { regex: /.{8,}/, text: \"At least 8 characters\" },\n { regex: /[0-9]/, text: \"At least 1 number\" },\n { regex: /[a-z]/, text: \"At least 1 lowercase letter\" },\n { regex: /[A-Z]/, text: \"At least 1 uppercase letter\" },\n] as const;\n\nexport function getPasswordStrength(password: string): number {\n return passwordRequirements.filter((req) => req.regex.test(password)).length;\n}\n\nconst STRENGTH_COLORS = [\n \"bg-border\",\n \"bg-red-500\",\n \"bg-orange-500\",\n \"bg-amber-500\",\n \"bg-emerald-500\",\n] as const;\n\nexport interface IPasswordInputProps\n extends Omit<React.ComponentProps<typeof InputGroupInput>, \"type\" | \"size\"> {\n /** Render the eye toggle button. */\n visibilityToggle?: boolean;\n /** Render the animated strength meter and requirement checklist. */\n showStrength?: boolean;\n /** Play reveal/hide cues on the visibility toggle. Inert until bindSounds(). */\n sound?: boolean;\n}\n\n/**\n * Password field with visibility toggle and optional strength meter.\n * Composition of InputGroup + Button (coss particles p-input-9 and\n * p-input-group-26).\n */\nexport function PasswordInput({\n visibilityToggle = true,\n showStrength = false,\n sound = true,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n ...props\n}: IPasswordInputProps) {\n const [visible, setVisible] = React.useState(false);\n const [uncontrolled, setUncontrolled] = React.useState(\n String(defaultValue ?? \"\"),\n );\n const value = valueProp !== undefined ? String(valueProp) : uncontrolled;\n const score = getPasswordStrength(value);\n\n return (\n <div className={cn(\"flex w-full flex-col gap-3\", className)}>\n <InputGroup>\n <InputGroupInput\n placeholder=\"Enter your password\"\n {...props}\n type={visible ? \"text\" : \"password\"}\n value={value}\n onChange={(event) => {\n setUncontrolled(event.target.value);\n onChange?.(event);\n }}\n />\n {visibilityToggle && (\n <InputGroupAddon align=\"inline-end\">\n <Button\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n onClick={() => {\n // Semantic cues from the cuelume palette: bloom = reveal,\n // droplet = dismiss. Press/release stays off to avoid layering.\n if (sound) playCue(visible ? \"droplet\" : \"bloom\");\n setVisible((v) => !v);\n }}\n size=\"icon-xs\"\n variant=\"ghost\"\n sound={false}\n >\n <AnimatePresence mode=\"wait\" initial={false}>\n <motion.span\n key={visible ? \"off\" : \"on\"}\n className=\"inline-flex\"\n initial={{ opacity: 0, scale: 0.8, filter: \"blur(2px)\" }}\n animate={{ opacity: 1, scale: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, scale: 0.8, filter: \"blur(2px)\" }}\n transition={{ duration: 0.15, ease: EASE }}\n >\n {visible ? (\n <EyeOffIcon aria-hidden=\"true\" />\n ) : (\n <EyeIcon aria-hidden=\"true\" />\n )}\n </motion.span>\n </AnimatePresence>\n </Button>\n </InputGroupAddon>\n )}\n </InputGroup>\n\n <AnimatePresence initial={false}>\n {showStrength && (\n <motion.div\n className=\"flex flex-col gap-2 overflow-hidden\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.25, ease: EASE }}\n >\n <div\n aria-label=\"Password strength\"\n aria-valuemax={4}\n aria-valuemin={0}\n aria-valuenow={score}\n className=\"h-1 w-full overflow-hidden rounded-full bg-border\"\n role=\"progressbar\"\n >\n <motion.div\n className={cn(\"h-full rounded-full\", STRENGTH_COLORS[score])}\n animate={{ width: `${(score / 4) * 100}%` }}\n transition={{ duration: 0.4, ease: EASE }}\n />\n </div>\n <ul\n aria-label=\"Password requirements\"\n className=\"flex flex-col gap-1\"\n >\n {passwordRequirements.map((req) => {\n const met = req.regex.test(value);\n return (\n <li className=\"flex items-center gap-2 text-xs\" key={req.text}>\n {met ? (\n <CheckIcon\n aria-hidden=\"true\"\n className=\"size-3.5 text-emerald-500\"\n />\n ) : (\n <XIcon\n aria-hidden=\"true\"\n className=\"size-3.5 text-muted-foreground/80\"\n />\n )}\n <span\n className={\n met ? \"text-emerald-600\" : \"text-muted-foreground\"\n }\n >\n {req.text}\n <span className=\"sr-only\">\n {met ? \" - met\" : \" - not met\"}\n </span>\n </span>\n </li>\n );\n })}\n </ul>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","\"use client\"\n\nimport {\n RiAppleFill,\n RiGithubFill,\n RiGoogleFill,\n RiTwitterXFill,\n} from \"@remixicon/react\"\nimport type * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { cn } from \"@/lib/utils\"\nimport type { TSocialProvider } from \"./types\"\n\n\n/** Google's four-color \"G\" — the only provider whose mark isn't monochrome. */\nfunction GoogleColorIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" {...props}>\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.76h3.56c2.09-1.92 3.28-4.74 3.28-8.09Z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.56-2.76c-.99.66-2.25 1.05-3.72 1.05-2.86 0-5.28-1.93-6.15-4.53H2.18v2.85A11 11 0 0 0 12 23Z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.85 14.1A6.6 6.6 0 0 1 5.5 12c0-.73.13-1.44.35-2.1V7.05H2.18a11 11 0 0 0 0 9.9l3.67-2.85Z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15A11 11 0 0 0 2.18 7.05L5.85 9.9C6.72 7.3 9.14 5.38 12 5.38Z\"\n />\n </svg>\n )\n}\n\n/**\n * Label + brand mark per provider, shared with the auth blocks. `Icon` is the\n * monochrome mark that inherits the current text color; `BrandIcon` +\n * `brandClassName` render it in the provider's own colors.\n */\nexport const SOCIAL_PROVIDERS: Record<\n TSocialProvider,\n {\n label: string\n Icon: React.ComponentType<{ className?: string }>\n BrandIcon: React.ComponentType<{ className?: string }>\n brandClassName?: string\n buttonClassName?: string\n labelClassName?: string\n }\n> = {\n google: {\n label: \"Google\",\n Icon: RiGoogleFill,\n BrandIcon: GoogleColorIcon,\n brandClassName: \"fill-black dark:fill-white\"\n },\n apple: {\n label: \"Apple\",\n Icon: RiAppleFill,\n BrandIcon: RiAppleFill,\n brandClassName: \"fill-white! dark:fill-black!\",\n buttonClassName: \"bg-neutral-950 hover:bg-black dark:bg-white dark:hover:bg-neutral-100 shadow-bezel dark:shadow-bubble-dim border-border dark:border-muted\",\n labelClassName: \"text-white dark:text-black\"\n },\n github: {\n label: \"GitHub\",\n Icon: RiGithubFill,\n BrandIcon: RiGithubFill\n },\n x: {\n label: \"X\",\n Icon: RiTwitterXFill,\n BrandIcon: RiTwitterXFill\n },\n}\n\nconst ACTION_LABELS = {\n login: \"Login with\",\n signup: \"Sign up with\",\n continue: \"Continue with\",\n} as const\n\nexport interface ISocialProvidersProps {\n providers?: TSocialProvider[]\n /** Verb used in the stacked layout labels. */\n action?: keyof typeof ACTION_LABELS\n /** \"stack\" = full-width labeled buttons; \"row\" = icon-only buttons. */\n layout?: \"stack\" | \"row\"\n /** Shows the matching button in its loading state and disables the rest. */\n loadingProvider?: TSocialProvider | null\n disabled?: boolean\n onSelect?: (provider: TSocialProvider) => void\n className?: string\n}\n\n/** Social auth buttons (coss particle p-button-38). UI only — wire onSelect. */\nexport function SocialProviders({\n providers = [\"google\", \"apple\", \"github\"],\n action = \"continue\",\n layout = \"stack\",\n loadingProvider = null,\n disabled = false,\n onSelect,\n className,\n}: ISocialProvidersProps) {\n const row = layout === \"row\"\n\n return (\n <div\n className={cn(\n \"flex w-full gap-2\",\n row ? \"flex-row justify-center\" : \"flex-col\",\n className\n )}\n >\n {providers.map((provider) => {\n const {\n label,\n BrandIcon,\n brandClassName,\n buttonClassName,\n labelClassName,\n } = SOCIAL_PROVIDERS[provider]\n return (\n <Button\n key={provider}\n variant=\"outline\"\n size={row ? \"icon\" : \"default\"}\n className={cn(buttonClassName, row ? undefined : \"w-full\")}\n aria-label={`${ACTION_LABELS[action]} ${label}`}\n loading={loadingProvider === provider}\n disabled={\n disabled ||\n (loadingProvider !== null && loadingProvider !== provider)\n }\n onClick={() => onSelect?.(provider)}\n >\n <BrandIcon aria-hidden=\"true\" className={brandClassName} />\n {!row && (\n <span className={cn(\"flex-1\", labelClassName)}>\n {ACTION_LABELS[action]} {label}\n </span>\n )}\n </Button>\n )\n })}\n </div>\n )\n}\n","\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n PreviewCard,\n PreviewCardPopup,\n PreviewCardTrigger,\n} from \"@/components/ui/preview-card\"\nimport {\n accentRing,\n AiIcon,\n CloseIcon,\n ghostMuted,\n mutedText,\n surface,\n} from \"@/components/composed/ai/shared\"\nimport type { ISelectionPopoverProps } from \"./type\"\n\n/**\n * The reader entry point, built on the preview-card atom: hovering or\n * focusing the selection reveals the card. The word and node variants\n * deliberately share one shell so there is one, and only one, AI action for\n * every kind of selection.\n */\nexport function SelectionPopover({\n open,\n defaultOpen = false,\n onOpenChange,\n variant,\n word,\n node,\n onAddToChat,\n onClose,\n children,\n className,\n}: ISelectionPopoverProps): React.ReactElement {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = open ?? internalOpen\n\n const handleOpenChange = (next: boolean) => {\n if (open === undefined) setInternalOpen(next)\n onOpenChange?.(next)\n if (!next) onClose?.()\n }\n\n useEffect(() => {\n if (!isOpen) return\n const handleShortcut = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"j\") {\n event.preventDefault()\n onAddToChat?.()\n }\n }\n document.addEventListener(\"keydown\", handleShortcut)\n return () => document.removeEventListener(\"keydown\", handleShortcut)\n }, [isOpen, onAddToChat])\n\n return (\n <PreviewCard onOpenChange={handleOpenChange} open={isOpen}>\n {children ? (\n <PreviewCardTrigger render={<span />}>{children}</PreviewCardTrigger>\n ) : null}\n <PreviewCardPopup\n align=\"start\"\n aria-label=\"Selection actions\"\n className={cn(\n \"w-64 flex-col overflow-hidden rounded-sm p-0\",\n surface,\n className\n )}\n >\n <div className=\"flex items-start justify-between gap-3 px-3.5 py-3\">\n <div className=\"min-w-0\">\n {variant === \"word\" && word ? (\n <>\n <p className=\"truncate font-medium text-foreground\">{word.lemma}</p>\n <p className={mutedText}>\n {[\n word.partOfSpeech ?? word.pos,\n word.frequency !== undefined && `${word.frequency}×`,\n ]\n .filter(Boolean)\n .join(\" · \")}\n </p>\n </>\n ) : node ? (\n <>\n <p className=\"font-medium text-foreground\">{node.range}</p>\n <p className={mutedText}>\n {node.nodeIds.length} node\n {node.nodeIds.length === 1 ? \"\" : \"s\"} · {node.wordCount}{\" \"}\n words\n </p>\n <p className=\"mt-1 truncate text-[11px] text-muted-foreground/70\">\n {node.nodeIds.join(\" · \")}\n </p>\n </>\n ) : null}\n </div>\n {onClose ? (\n <Button\n aria-label=\"Close selection actions\"\n className={ghostMuted}\n onClick={() => handleOpenChange(false)}\n size=\"icon-xs\"\n variant=\"ghost\"\n >\n <CloseIcon />\n </Button>\n ) : null}\n </div>\n {variant === \"word\" && word ? (\n <>\n <Separator />\n <Button\n className={cn(\n \"h-auto w-full justify-start rounded-none px-3.5 py-2.5 font-normal text-muted-foreground hover:text-foreground sm:h-auto\",\n accentRing\n )}\n onClick={word.onViewDetails}\n variant=\"ghost\"\n >\n View details\n </Button>\n </>\n ) : null}\n <Separator className=\"mx-3.5 data-[orientation=horizontal]:w-auto\" />\n <Button\n className={cn(\n \"h-auto min-h-11 w-full justify-start gap-2 rounded-none px-3.5 text-amber-700 hover:bg-amber-400/8 hover:text-amber-700 dark:text-amber-300/90 dark:hover:text-amber-300/90 sm:h-auto\",\n accentRing\n )}\n onClick={onAddToChat}\n variant=\"ghost\"\n >\n <AiIcon />\n <span>Add to chat</span>\n <kbd className=\"ml-auto rounded-sm border border-amber-500/25 px-1.5 py-0.5 text-[10px] font-normal opacity-75\">\n ⌘J\n </kbd>\n </Button>\n </PreviewCardPopup>\n </PreviewCard>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { ISelectionHighlightProps } from \"./type\"\n\nexport function SelectionHighlight({\n range,\n className,\n children,\n ...props\n}: ISelectionHighlightProps): React.ReactElement {\n return (\n <span\n aria-label={range ? `Selected ${range}` : \"Selected text\"}\n className={cn(\n \"rounded-xs bg-accent/25 outline-1 outline-accent/45\",\n className\n )}\n data-selection-highlight=\"true\"\n {...props}\n >\n {children}\n </span>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { IAppliedMarkProps } from \"./type\"\n\nexport function AppliedMark({\n nodeId,\n className,\n children,\n ...props\n}: IAppliedMarkProps): React.ReactElement {\n return (\n <span\n className={cn(\n \"relative border-b-2 border-amber-400/70 text-inherit\",\n className\n )}\n data-applied-mark=\"true\"\n data-node-id={nodeId}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"absolute -start-4 top-1/2 text-xs text-amber-600 dark:text-amber-300/90\"\n >\n ◆\n </span>\n {children}\n </span>\n )\n}\n","\"use client\"\n\nimport { motion, useReducedMotion } from \"motion/react\"\nimport type * as React from \"react\"\nimport { EASE_OUT_STRONG } from \"@/lib/ease\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport type { IApplyToastProps } from \"./type\"\n\nexport function ApplyToast({\n open = true,\n message = \"Change applied and recorded in version history.\",\n onUndo,\n className,\n}: IApplyToastProps): React.ReactElement | null {\n const reduceMotion = useReducedMotion()\n if (!open) return null\n return (\n <motion.div\n animate={{ opacity: 1, y: 0 }}\n aria-live=\"assertive\"\n className={cn(\n \"flex w-full items-center gap-3 rounded-sm border border-success/32 bg-popover px-3 py-2.5 text-xs text-popover-foreground shadow-lg\",\n className\n )}\n data-slot=\"apply-toast\"\n initial={reduceMotion ? false : { opacity: 0, y: 24 }}\n role=\"status\"\n transition={\n reduceMotion\n ? { duration: 0 }\n : { duration: 0.35, ease: EASE_OUT_STRONG }\n }\n >\n <span className=\"text-success\">✓</span>\n <span className=\"flex-1\">{message}</span>\n {onUndo ? (\n <Button\n className=\"text-success underline underline-offset-2 ring-offset-0 hover:text-success\"\n onClick={onUndo}\n size=\"xs\"\n variant=\"link\"\n >\n Undo\n </Button>\n ) : null}\n </motion.div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport type { ITreeContextValue } from \"./type\"\n\nexport const TreeContext = React.createContext<ITreeContextValue | null>(null)\n\nexport function useTreeContext(): ITreeContextValue {\n const context = React.useContext(TreeContext)\n if (!context) throw new Error(\"Tree rows must render inside <Tree>.\")\n return context\n}\n","import type { Transition, Variants } from \"motion/react\"\n\n/** `--ease-smooth-out` as a motion/react easing tuple. */\nexport const TREE_EASE = [0.22, 1, 0.36, 1] as const\n\n/** Branch open — `--duration-fast` territory (accordion open). */\nexport const TREE_OPEN_DURATION = 0.25\n\n/** Branch close — quicker than open, per open/close asymmetry. */\nexport const TREE_CLOSE_DURATION = 0.15\n\n/** Chevron flip and label fades. */\nexport const TREE_MICRO_DURATION = 0.15\n\n/** Sidebar rail label reveal/hide when `collapsed` flips. */\nexport const TREE_COLLAPSE_DURATION = 0.2\n\n/** Rail label text fade — starts as the width growth is finishing, so the\n * label never reads as clipped mid-grow. */\nexport const TREE_LABEL_REVEAL_DELAY = 0.01\n\n/** A branch's children group: grows open with a soft stagger, folds shut\n * faster. Height rides layout (\"auto\"), paint fades. */\nexport const TREE_BRANCH_VARIANTS: Variants = {\n closed: { height: 0, opacity: 0 },\n open: {\n height: \"auto\",\n opacity: 1,\n transition: {\n duration: TREE_OPEN_DURATION,\n ease: TREE_EASE,\n staggerChildren: 0.03,\n },\n },\n}\n\n/** Branch close — a plain target, NOT the \"closed\" variant label: a\n * labeled exit orchestrates every variant child and AnimatePresence then\n * waits on the whole subtree before unmounting. */\nexport const TREE_BRANCH_EXIT = {\n height: 0,\n opacity: 0,\n transition: { duration: TREE_CLOSE_DURATION, ease: TREE_EASE },\n}\n\n/** One row inside an opening branch — a short blurred rise. */\nexport const TREE_ROW_VARIANTS: Variants = {\n closed: { opacity: 0, x: -4 },\n open: { opacity: 1, x: 0 },\n}\n\nexport const TREE_MICRO_TRANSITION: Transition = {\n duration: TREE_MICRO_DURATION,\n ease: TREE_EASE,\n}\n","import type { ITreeNode } from \"./type\"\n\n/** Depth-0 nodes read as sections only when the data actually nests three\n * levels — a two-level tree keeps its top level as plain link rows. */\nexport function hasThreeLevels(items: readonly ITreeNode[]): boolean {\n return items.some((node) =>\n node.children?.some((child) => (child.children?.length ?? 0) > 0)\n )\n}\n\n/** Ids of every ancestor of `id` (nearest last); empty when absent. */\nexport function ancestorIdsOf(\n items: readonly ITreeNode[],\n id: string\n): string[] {\n const walk = (nodes: readonly ITreeNode[], trail: string[]): string[] | null => {\n for (const node of nodes) {\n if (node.id === id) return trail\n if (node.children) {\n const found = walk(node.children, [...trail, node.id])\n if (found) return found\n }\n }\n return null\n }\n return walk(items, []) ?? []\n}\n\n/** Ids that start expanded: `defaultOpen` nodes plus every ancestor of the\n * active entry, so the current location is never folded away. */\nexport function initialExpandedIds(\n items: readonly ITreeNode[],\n activeId?: string\n): Set<string> {\n const expanded = new Set<string>()\n const walk = (nodes: readonly ITreeNode[]) => {\n for (const node of nodes) {\n if (node.defaultOpen) expanded.add(node.id)\n if (node.children) walk(node.children)\n }\n }\n walk(items)\n if (activeId !== undefined)\n for (const id of ancestorIdsOf(items, activeId)) expanded.add(id)\n return expanded\n}\n\n/** Ids of every node that can hold children — the set `expandAll` opens.\n * In `files` an empty `children: []` still counts (it is a folder). */\nexport function expandableIdsOf(\n items: readonly ITreeNode[],\n filesVariant = false\n): string[] {\n const ids: string[] = []\n const walk = (nodes: readonly ITreeNode[]) => {\n for (const node of nodes) {\n const branch = filesVariant\n ? node.children !== undefined\n : (node.children?.length ?? 0) > 0\n if (branch) ids.push(node.id)\n if (node.children) walk(node.children)\n }\n }\n walk(items)\n return ids\n}\n\n/** Immutably relabel `id`. Returns the same array reference when absent. */\nexport function renameNode(\n items: readonly ITreeNode[],\n id: string,\n label: string\n): ITreeNode[] {\n return items.map((node) => {\n if (node.id === id) return { ...node, label }\n return node.children\n ? { ...node, children: renameNode(node.children, id, label) }\n : node\n })\n}\n\n/** Whether `candidateId` is `id` itself or nests anywhere under it — the\n * guard that keeps a folder from being dropped into its own subtree. */\nexport function containsNode(\n items: readonly ITreeNode[],\n id: string,\n candidateId: string\n): boolean {\n if (id === candidateId) return true\n const root = findNode(items, id)\n if (!root?.children) return false\n return findNode(root.children, candidateId) !== null\n}\n\nexport function findNode(\n items: readonly ITreeNode[],\n id: string\n): ITreeNode | null {\n for (const node of items) {\n if (node.id === id) return node\n if (node.children) {\n const found = findNode(node.children, id)\n if (found) return found\n }\n }\n return null\n}\n\n/** Parent id (`null` at root) and index of `id` among its siblings. */\nexport function locateNode(\n items: readonly ITreeNode[],\n id: string\n): { parentId: string | null; index: number } | null {\n const walk = (\n nodes: readonly ITreeNode[],\n parentId: string | null\n ): { parentId: string | null; index: number } | null => {\n for (const [index, node] of nodes.entries()) {\n if (node.id === id) return { parentId, index }\n if (node.children) {\n const found = walk(node.children, node.id)\n if (found) return found\n }\n }\n return null\n }\n return walk(items, null)\n}\n\n/** Immutably lift `id` out of the tree and reinsert it under `parentId`\n * (`null` = root) at `index` — the standard `onMove` reducer, exported so\n * consumers don't each rebuild it. `index` addresses the sibling list\n * *after* the node has been lifted out. */\nexport function moveNode(\n items: readonly ITreeNode[],\n id: string,\n parentId: string | null,\n index: number\n): ITreeNode[] {\n // Dropping into the node's own subtree would orphan it — refuse.\n if (parentId !== null && containsNode(items, id, parentId)) return [...items]\n let moved: ITreeNode | null = null\n const strip = (nodes: readonly ITreeNode[]): ITreeNode[] =>\n nodes.flatMap((node) => {\n if (node.id === id) {\n moved = node\n return []\n }\n return node.children\n ? [{ ...node, children: strip(node.children) }]\n : [node]\n })\n const stripped = strip(items)\n if (!moved) return [...items]\n const captured = moved as ITreeNode\n\n if (parentId === null) {\n const next = [...stripped]\n next.splice(Math.min(index, next.length), 0, captured)\n return next\n }\n const insert = (nodes: readonly ITreeNode[]): ITreeNode[] =>\n nodes.map((node) => {\n if (node.id === parentId) {\n const children = [...(node.children ?? [])]\n children.splice(Math.min(index, children.length), 0, captured)\n return { ...node, children }\n }\n return node.children ? { ...node, children: insert(node.children) } : node\n })\n return insert(stripped)\n}\n","/**\n * Per-instance Jotai state for `Tree`.\n *\n * Every atom is a module-level family keyed by a tree id, so one\n * `ExegiaProvider` at the app root is enough: many trees coexist in one store\n * without a provider each, and any component can drive a tree by id without\n * holding its controller.\n *\n * Controlled props stay authoritative. `useTree` projects them into these\n * atoms on every commit so the action atoms and remote readers work off\n * current data — a one-way projection, not a second source of truth. The\n * write gates below (`controlsItems`, `controlsActiveId`, `controlsCollapsed`)\n * are what keep the store from overwriting a prop.\n */\nimport { atom } from \"jotai\"\nimport type { Atom, Getter, Setter } from \"jotai\"\n\nimport { playCue } from \"@/lib/sound\"\nimport type {\n ITreeConfig,\n TTreeDropPosition,\n ITreeDropTarget,\n ITreeHandlers,\n TTreeInstanceId,\n ITreeNode,\n ITreeSeed,\n ITreeState,\n TTreeVariant,\n} from \"./type\"\nimport {\n ancestorIdsOf,\n expandableIdsOf,\n findNode,\n hasThreeLevels,\n initialExpandedIds,\n moveNode,\n renameNode,\n} from \"./utils\"\n\nconst NO_ITEMS: ITreeNode[] = []\nconst NO_IDS: ReadonlySet<string> = new Set<string>()\nconst NO_HANDLERS: ITreeHandlers = {}\n\n/** What a tree reads as before `useTree` publishes its options. */\nexport const DEFAULT_TREE_CONFIG: ITreeConfig = {\n variant: \"navigation\",\n sound: true,\n controlsItems: false,\n controlsActiveId: false,\n controlsCollapsed: false,\n managesItems: true,\n hasRenameHandler: false,\n hasMoveHandler: false,\n}\n\nconst DEFAULT_TREE_SEED: ITreeSeed = { items: NO_ITEMS, collapsed: false }\n\n/**\n * A string-keyed atom family.\n *\n * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, and we need only\n * the string-keyed case with a `remove` — so this stays in-house rather than\n * adding `jotai-family` as a second Jotai package to keep version-aligned.\n * Dropping a key lets the store's WeakMap release that instance's state.\n */\ntype TFamily<AtomType> = ((id: TTreeInstanceId) => AtomType) & {\n remove: (id: TTreeInstanceId) => void\n}\n\n/** Every family, so `removeTreeInstance` can drop an id from all of them. */\nconst families: { remove: (id: TTreeInstanceId) => void }[] = []\n\nfunction keyed<AtomType>(create: (id: TTreeInstanceId) => AtomType) {\n const cache = new Map<TTreeInstanceId, AtomType>()\n const family = ((id: TTreeInstanceId) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id: TTreeInstanceId) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `tree/${id}/${name}`\n return instance\n })\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TTreeInstanceId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id))\n instance.debugLabel = `tree/${id}/${name}`\n return instance\n })\n}\n\nfunction actionFamily<Args extends unknown[]>(\n name: string,\n write: (get: Getter, set: Setter, id: TTreeInstanceId, ...args: Args) => void\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n )\n instance.debugLabel = `tree/${id}/${name}`\n return instance\n })\n}\n\n/**\n * A per-node derived atom, keyed by tree and then node id.\n *\n * This is where Jotai earns its place: a row subscribed to\n * `treeNodeExpandedAtom(treeId, node.id)` re-renders when *its* branch opens,\n * and stays put when a sibling's does. Reading the whole controller through\n * context instead re-rendered every row in the tree on every toggle.\n *\n * The outer family registers for cleanup, so `removeTreeInstance` drops all\n * of a tree's node atoms with it.\n */\nfunction nodeFamily<Value>(\n name: string,\n read: (get: Getter, id: TTreeInstanceId, nodeId: string) => Value\n) {\n const outer = keyed((id: TTreeInstanceId) => {\n const inner = new Map<string, Atom<Value>>()\n return (nodeId: string) => {\n let instance = inner.get(nodeId)\n if (instance === undefined) {\n instance = atom((get) => read(get, id, nodeId))\n instance.debugLabel = `tree/${id}/${name}/${nodeId}`\n inner.set(nodeId, instance)\n }\n return instance\n }\n })\n return (id: TTreeInstanceId, nodeId: string) => outer(id)(nodeId)\n}\n\n// ── state ──────────────────────────────────────────────────────────────────\n\n/** @internal */\nexport const treeConfigAtom = stateFamily<ITreeConfig>(\n \"config\",\n DEFAULT_TREE_CONFIG\n)\n/** @internal Refreshed every commit; nothing subscribes, so it is free. */\nexport const treeHandlersAtom = stateFamily<ITreeHandlers>(\n \"handlers\",\n NO_HANDLERS\n)\nconst treeSeedAtom = stateFamily<ITreeSeed>(\"seed\", DEFAULT_TREE_SEED)\nconst treeInitializedAtom = stateFamily<boolean>(\"initialized\", false)\n\n/** The tree's current data — hook-owned, or the projection of a controlled\n * `items` prop. */\nexport const treeItemsAtom = stateFamily<ITreeNode[]>(\"items\", NO_ITEMS)\nexport const treeActiveIdAtom = stateFamily<string | undefined>(\n \"activeId\",\n undefined\n)\nexport const treeExpandedIdsAtom = stateFamily<ReadonlySet<string>>(\n \"expandedIds\",\n NO_IDS\n)\n/** Raw rail fold. Read `treeCollapsedAtom` for the variant-masked value. */\nexport const treeRailCollapsedAtom = stateFamily<boolean>(\n \"railCollapsed\",\n false\n)\nexport const treeRenamingIdAtom = stateFamily<string | null>(\"renamingId\", null)\nexport const treeDraggedIdAtom = stateFamily<string | null>(\"draggedId\", null)\nexport const treeDropTargetAtom = stateFamily<ITreeDropTarget | null>(\n \"dropTarget\",\n null\n)\n\n// ── derived ────────────────────────────────────────────────────────────────\n\n/** @internal The only items atom `useTree` may subscribe to: empty while a\n * controlled `items` prop owns the data, so the projection write never feeds\n * back into the render that produced it. An inline `items={[…]}` array is a\n * new reference every render, and a subscribed round-trip would loop. */\nexport const treeOwnedItemsAtom = readFamily(\"ownedItems\", (get, id) =>\n get(treeConfigAtom(id)).controlsItems ? NO_ITEMS : get(treeItemsAtom(id))\n)\n\n/** Rail folded to icons — always `false` outside `sidebar`. */\nexport const treeCollapsedAtom = readFamily(\"collapsed\", (get, id) =>\n get(treeConfigAtom(id)).variant === \"sidebar\"\n ? get(treeRailCollapsedAtom(id))\n : false\n)\n\nexport const treeSectionedAtom = readFamily(\n \"sectioned\",\n (get, id) =>\n get(treeConfigAtom(id)).variant === \"navigation\" &&\n hasThreeLevels(get(treeItemsAtom(id)))\n)\n\nexport const treeSectionIdsAtom = readFamily(\"sectionIds\", (get, id) =>\n get(treeSectionedAtom(id))\n ? get(treeItemsAtom(id)).map((node) => node.id)\n : []\n)\n\nexport const treeCanRenameAtom = readFamily(\"canRename\", (get, id) => {\n const config = get(treeConfigAtom(id))\n return (\n config.variant === \"files\" &&\n (config.hasRenameHandler || config.managesItems)\n )\n})\n\nexport const treeCanMoveAtom = readFamily(\"canMove\", (get, id) => {\n const config = get(treeConfigAtom(id))\n return (\n config.variant === \"files\" && (config.hasMoveHandler || config.managesItems)\n )\n})\n\nexport const treeVariantAtom = readFamily(\n \"variant\",\n (get, id) => get(treeConfigAtom(id)).variant\n)\n\nexport const treeSoundAtom = readFamily(\n \"sound\",\n (get, id) => get(treeConfigAtom(id)).sound\n)\n\n/** Whether this one node's branch is open. */\nexport const treeNodeExpandedAtom = nodeFamily(\"expanded\", (get, id, nodeId) =>\n get(treeExpandedIdsAtom(id)).has(nodeId)\n)\n\n/** Whether this one node is the current entry. */\nexport const treeNodeActiveAtom = nodeFamily(\n \"active\",\n (get, id, nodeId) => get(treeActiveIdAtom(id)) === nodeId\n)\n\n/** Whether this one node is in rename mode. */\nexport const treeNodeRenamingAtom = nodeFamily(\n \"renaming\",\n (get, id, nodeId) => get(treeRenamingIdAtom(id)) === nodeId\n)\n\n/** Whether this one node is the row in flight. */\nexport const treeNodeDraggingAtom = nodeFamily(\n \"dragging\",\n (get, id, nodeId) => get(treeDraggedIdAtom(id)) === nodeId\n)\n\n/** Where a drop on this one node would land, `null` when it is not hovered. */\nexport const treeNodeDropAtom = nodeFamily<TTreeDropPosition | null>(\n \"drop\",\n (get, id, nodeId) => {\n const target = get(treeDropTargetAtom(id))\n return target?.id === nodeId ? target.position : null\n }\n)\n\n/** The whole state of one tree. Components reading a single field should\n * subscribe to that field's atom instead — this one changes on every edit. */\nexport const treeStateAtom = readFamily<ITreeState>(\"state\", (get, id) => ({\n variant: get(treeConfigAtom(id)).variant,\n items: get(treeItemsAtom(id)),\n activeId: get(treeActiveIdAtom(id)),\n expandedIds: get(treeExpandedIdsAtom(id)),\n collapsed: get(treeCollapsedAtom(id)),\n renamingId: get(treeRenamingIdAtom(id)),\n sectioned: get(treeSectionedAtom(id)),\n sectionIds: get(treeSectionIdsAtom(id)),\n canRename: get(treeCanRenameAtom(id)),\n canMove: get(treeCanMoveAtom(id)),\n draggedId: get(treeDraggedIdAtom(id)),\n dropTarget: get(treeDropTargetAtom(id)),\n}))\n\n// ── shared write helpers ───────────────────────────────────────────────────\n\nfunction cue(get: Getter, id: TTreeInstanceId): void {\n if (get(treeConfigAtom(id)).sound) playCue(\"toggle\")\n}\n\nfunction commitExpanded(\n get: Getter,\n set: Setter,\n id: TTreeInstanceId,\n next: Set<string>\n): void {\n set(treeExpandedIdsAtom(id), next)\n get(treeHandlersAtom(id)).onExpandedChange?.([...next])\n}\n\n/** The atom only when the hook owns the data; the callback always. */\nfunction commitItems(\n get: Getter,\n set: Setter,\n id: TTreeInstanceId,\n next: ITreeNode[]\n): void {\n if (!get(treeConfigAtom(id)).controlsItems) set(treeItemsAtom(id), next)\n get(treeHandlersAtom(id)).onItemsChange?.(next)\n}\n\n/** `null` when every ancestor of `nodeId` is already open. */\nfunction withAncestors(\n get: Getter,\n id: TTreeInstanceId,\n nodeId: string\n): Set<string> | null {\n const ancestors = ancestorIdsOf(get(treeItemsAtom(id)), nodeId)\n const expanded = get(treeExpandedIdsAtom(id))\n if (!ancestors.some((ancestor) => !expanded.has(ancestor))) return null\n return new Set([...expanded, ...ancestors])\n}\n\nfunction seedInstance(\n set: Setter,\n id: TTreeInstanceId,\n seed: ITreeSeed,\n variant: TTreeVariant\n): void {\n set(treeItemsAtom(id), seed.items)\n set(treeActiveIdAtom(id), seed.activeId)\n set(treeRailCollapsedAtom(id), seed.collapsed)\n set(treeRenamingIdAtom(id), null)\n set(treeDraggedIdAtom(id), null)\n set(treeDropTargetAtom(id), null)\n const expanded = seed.expandedIds\n ? new Set(seed.expandedIds)\n : initialExpandedIds(seed.items, seed.activeId)\n // Section names default open — they are headings over their run of items,\n // not drawers; `defaultOpen: false` still starts one closed.\n if (\n !seed.expandedIds &&\n variant === \"navigation\" &&\n hasThreeLevels(seed.items)\n )\n for (const node of seed.items)\n if (node.defaultOpen !== false) expanded.add(node.id)\n set(treeExpandedIdsAtom(id), expanded)\n}\n\n// ── expansion ──────────────────────────────────────────────────────────────\n\nexport const expandTreeNodeAtom = actionFamily<[nodeId: string]>(\n \"expand\",\n (get, set, id, nodeId) => {\n const expanded = get(treeExpandedIdsAtom(id))\n if (expanded.has(nodeId)) return\n commitExpanded(get, set, id, new Set([...expanded, nodeId]))\n cue(get, id)\n }\n)\n\nexport const collapseTreeNodeAtom = actionFamily<[nodeId: string]>(\n \"collapse\",\n (get, set, id, nodeId) => {\n const expanded = get(treeExpandedIdsAtom(id))\n if (!expanded.has(nodeId)) return\n const next = new Set(expanded)\n next.delete(nodeId)\n commitExpanded(get, set, id, next)\n cue(get, id)\n }\n)\n\nexport const toggleTreeNodeAtom = actionFamily<[nodeId: string]>(\n \"toggleExpanded\",\n (get, set, id, nodeId) => {\n const next = new Set(get(treeExpandedIdsAtom(id)))\n if (next.has(nodeId)) next.delete(nodeId)\n else next.add(nodeId)\n commitExpanded(get, set, id, next)\n cue(get, id)\n }\n)\n\nexport const expandAllTreeNodesAtom = actionFamily<[]>(\n \"expandAll\",\n (get, set, id) => {\n const filesVariant = get(treeConfigAtom(id)).variant === \"files\"\n const ids = expandableIdsOf(get(treeItemsAtom(id)), filesVariant)\n commitExpanded(get, set, id, new Set(ids))\n }\n)\n\nexport const collapseAllTreeNodesAtom = actionFamily<[]>(\n \"collapseAll\",\n (get, set, id) => {\n commitExpanded(get, set, id, new Set())\n }\n)\n\n/** Open every ancestor of `nodeId` without touching the rest of the tree. */\nexport const revealTreeNodeAtom = actionFamily<[nodeId: string]>(\n \"reveal\",\n (get, set, id, nodeId) => {\n const next = withAncestors(get, id, nodeId)\n if (next) commitExpanded(get, set, id, next)\n }\n)\n\n/** @internal The same, silent. `useTree` runs it whenever the active id\n * changes so a nested entry is never folded away — the hook has never\n * reported that implicit reveal through `onExpandedChange`. */\nexport const revealTreeAncestorsAtom = actionFamily<[nodeId: string]>(\n \"revealAncestors\",\n (get, set, id, nodeId) => {\n const next = withAncestors(get, id, nodeId)\n if (next) set(treeExpandedIdsAtom(id), next)\n }\n)\n\n// ── rail ───────────────────────────────────────────────────────────────────\n\nexport const setTreeCollapsedAtom = actionFamily<[collapsed: boolean]>(\n \"setCollapsed\",\n (get, set, id, collapsed) => {\n if (!get(treeConfigAtom(id)).controlsCollapsed)\n set(treeRailCollapsedAtom(id), collapsed)\n get(treeHandlersAtom(id)).onCollapsedChange?.(collapsed)\n cue(get, id)\n }\n)\n\nexport const toggleTreeCollapsedAtom = actionFamily<[]>(\n \"toggleCollapsed\",\n (get, set, id) => {\n set(setTreeCollapsedAtom(id), !get(treeCollapsedAtom(id)))\n }\n)\n\n// ── selection ──────────────────────────────────────────────────────────────\n\n/** Runs the node's own `onSelect` first, then `onNavigate` — the order a row\n * press follows. Disabled and unknown nodes are inert. */\nexport const selectTreeNodeAtom = actionFamily<[nodeId: string]>(\n \"select\",\n (get, set, id, nodeId) => {\n const node = findNode(get(treeItemsAtom(id)), nodeId)\n if (!node || node.disabled) return\n if (!get(treeConfigAtom(id)).controlsActiveId)\n set(treeActiveIdAtom(id), nodeId)\n node.onSelect?.()\n get(treeHandlersAtom(id)).onNavigate?.(node)\n }\n)\n\n// ── rename ─────────────────────────────────────────────────────────────────\n\nexport const startTreeRenameAtom = actionFamily<[nodeId: string]>(\n \"startRename\",\n (get, set, id, nodeId) => {\n // An id from elsewhere (a stale selection, another tree) would arm rename\n // mode against a row that never renders.\n if (!get(treeCanRenameAtom(id))) return\n if (!findNode(get(treeItemsAtom(id)), nodeId)) return\n set(treeRenamingIdAtom(id), nodeId)\n }\n)\n\nexport const cancelTreeRenameAtom = actionFamily<[]>(\n \"cancelRename\",\n (_get, set, id) => {\n set(treeRenamingIdAtom(id), null)\n }\n)\n\n/** Commit a rename and leave rename mode. Blank or unchanged labels are\n * dropped. */\nexport const renameTreeNodeAtom = actionFamily<[nodeId: string, label: string]>(\n \"rename\",\n (get, set, id, nodeId, label) => {\n set(treeRenamingIdAtom(id), null)\n const next = label.trim()\n if (!get(treeCanRenameAtom(id)) || !next) return\n const items = get(treeItemsAtom(id))\n const node = findNode(items, nodeId)\n if (!node || node.label === next) return\n get(treeHandlersAtom(id)).onRename?.(nodeId, next)\n if (get(treeConfigAtom(id)).managesItems)\n commitItems(get, set, id, renameNode(items, nodeId, next))\n }\n)\n\n// ── data ───────────────────────────────────────────────────────────────────\n\nexport const moveTreeNodeAtom = actionFamily<\n [nodeId: string, parentId: string | null, index: number]\n>(\"move\", (get, set, id, nodeId, parentId, index) => {\n if (!get(treeCanMoveAtom(id))) return\n get(treeHandlersAtom(id)).onMove?.(nodeId, parentId, index)\n if (get(treeConfigAtom(id)).managesItems)\n commitItems(\n get,\n set,\n id,\n moveNode(get(treeItemsAtom(id)), nodeId, parentId, index)\n )\n})\n\n/** Replace the data. Reports through `onItemsChange`; writes the atom only\n * when no controlled `items` prop owns it. */\nexport const setTreeItemsAtom = actionFamily<[items: ITreeNode[]]>(\n \"setItems\",\n (get, set, id, items) => {\n commitItems(get, set, id, items)\n }\n)\n\n// ── drag state ─────────────────────────────────────────────────────────────\n\nexport const endTreeDragAtom = actionFamily<[]>(\"endDrag\", (_get, set, id) => {\n set(treeDraggedIdAtom(id), null)\n set(treeDropTargetAtom(id), null)\n})\n\n// ── lifecycle ──────────────────────────────────────────────────────────────\n\n/** @internal Publish the latest options; seed the instance once. */\nexport const mountTreeAtom = actionFamily<[config: ITreeConfig, seed: ITreeSeed]>(\n \"mount\",\n (get, set, id, config, seed) => {\n set(treeConfigAtom(id), config)\n if (get(treeInitializedAtom(id))) return\n set(treeInitializedAtom(id), true)\n set(treeSeedAtom(id), seed)\n seedInstance(set, id, seed, config.variant)\n }\n)\n\n/** @internal */\nexport const setTreeHandlersAtom = actionFamily<[handlers: ITreeHandlers]>(\n \"setHandlers\",\n (_get, set, id, handlers) => {\n set(treeHandlersAtom(id), handlers)\n }\n)\n\n/** @internal One-way projections of controlled props — no callbacks fire. */\nexport const projectTreeItemsAtom = actionFamily<[items: ITreeNode[]]>(\n \"projectItems\",\n (_get, set, id, items) => {\n set(treeItemsAtom(id), items)\n }\n)\n\n/** @internal */\nexport const projectTreeActiveIdAtom = actionFamily<\n [activeId: string | undefined]\n>(\"projectActiveId\", (_get, set, id, activeId) => {\n set(treeActiveIdAtom(id), activeId)\n})\n\n/** @internal */\nexport const projectTreeCollapsedAtom = actionFamily<[collapsed: boolean]>(\n \"projectCollapsed\",\n (_get, set, id, collapsed) => {\n set(treeRailCollapsedAtom(id), collapsed)\n }\n)\n\n/** Back to the values the instance mounted with. */\nexport const resetTreeAtom = actionFamily<[]>(\"reset\", (get, set, id) => {\n seedInstance(set, id, get(treeSeedAtom(id)), get(treeConfigAtom(id)).variant)\n})\n\n/** Drop every atom for `id`. `useTree` calls this on unmount for trees it\n * keyed itself; an explicit `treeId` outlives its component, so a rail's fold\n * survives a route change. */\nexport function removeTreeInstance(id: TTreeInstanceId): void {\n for (const family of families) family.remove(id)\n}\n","\"use client\"\n\nimport { LucideChevronLeft, LucideChevronRight } from \"lucide-react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport {\n TREE_BRANCH_EXIT,\n TREE_BRANCH_VARIANTS,\n TREE_COLLAPSE_DURATION,\n TREE_LABEL_REVEAL_DELAY,\n TREE_MICRO_TRANSITION,\n TREE_ROW_VARIANTS,\n} from \"./constants\"\nimport {\n cancelTreeRenameAtom,\n renameTreeNodeAtom,\n selectTreeNodeAtom,\n startTreeRenameAtom,\n toggleTreeNodeAtom,\n treeCanRenameAtom,\n treeCollapsedAtom,\n treeNodeActiveAtom,\n treeNodeDraggingAtom,\n treeNodeDropAtom,\n treeNodeExpandedAtom,\n treeNodeRenamingAtom,\n treeSectionedAtom,\n treeSoundAtom,\n treeVariantAtom,\n} from \"./tree-atom\"\nimport { useTreeContext } from \"./tree-context\"\nimport type { ITreeNode } from \"./type\"\nimport { EASE_OUT } from \"@/lib/ease.ts\"\nimport { Button } from \"@/components/ui/button\"\n\n/** How a row behaves, resolved from variant + depth + shape. */\ntype TRowKind =\n | \"section\" // navigation depth 0 with 3-level data — heading, toggles\n | \"toggle\" // expands/collapses on row press (nav parents, files folders)\n | \"link\" // navigates; may still carry a chevron that toggles separately\nexport interface ITreeRowProps {\n node: ITreeNode\n depth: number\n}\n\nfunction rowKindOf(\n node: ITreeNode,\n depth: number,\n variant: string,\n sectioned: boolean\n): TRowKind {\n if (variant === \"sidebar\") return \"link\"\n const branch =\n variant === \"files\" ? node.children !== undefined : !!node.children?.length\n if (!branch) return \"link\"\n if (variant === \"navigation\")\n return sectioned && depth === 0 ? \"section\" : \"toggle\"\n // toc parents navigate — their chevron is a separate toggle.\n return variant === \"toc\" ? \"link\" : \"toggle\"\n}\n\nfunction TreeRowImpl({ node, depth }: ITreeRowProps): React.ReactElement {\n const { treeId, renderTrailing, dnd } = useTreeContext()\n const reduce = useReducedMotion()\n\n // One subscription per field, per node. A row re-renders when its own\n // branch, selection, rename or drag state changes and sits still while a\n // sibling's does — reading the whole controller off context instead\n // re-rendered every row in the tree on every toggle.\n const variant = useAtomValue(treeVariantAtom(treeId))\n const sectioned = useAtomValue(treeSectionedAtom(treeId))\n const collapsed = useAtomValue(treeCollapsedAtom(treeId))\n const canRename = useAtomValue(treeCanRenameAtom(treeId))\n const sound = useAtomValue(treeSoundAtom(treeId))\n const open = useAtomValue(treeNodeExpandedAtom(treeId, node.id))\n const active = useAtomValue(treeNodeActiveAtom(treeId, node.id))\n const renaming = useAtomValue(treeNodeRenamingAtom(treeId, node.id))\n const dragging = useAtomValue(treeNodeDraggingAtom(treeId, node.id))\n const drop = useAtomValue(treeNodeDropAtom(treeId, node.id))\n\n const select = useSetAtom(selectTreeNodeAtom(treeId))\n const toggleExpanded = useSetAtom(toggleTreeNodeAtom(treeId))\n const startRename = useSetAtom(startTreeRenameAtom(treeId))\n const cancelRename = useSetAtom(cancelTreeRenameAtom(treeId))\n const rename = useSetAtom(renameTreeNodeAtom(treeId))\n\n const kind = rowKindOf(node, depth, variant, sectioned)\n\n // The sidebar rail is single-level by contract — nested children are\n // ignored rather than rendered somewhere misleading.\n const children = variant === \"sidebar\" ? [] : (node.children ?? [])\n const canExpand =\n kind !== \"link\" || (variant === \"toc\" && children.length > 0)\n\n const files = variant === \"files\"\n\n // toc rows below the route level are in-page anchors: they scroll to the\n // heading sharing their id (an explicit `#hash` href wins). Rows are\n // buttons, so the anchor default is reproduced by setting location.hash\n // after `select` — the same order the old <a> gave (handlers first, then\n // the browser's jump), with the same :target/history semantics.\n const anchorHash =\n variant === \"toc\" && kind === \"link\" && !node.disabled\n ? node.href?.startsWith(\"#\")\n ? node.href\n : depth > 0 && !node.href\n ? `#${node.id}`\n : undefined\n : undefined\n\n function handlePress(event: React.MouseEvent) {\n if (node.disabled) {\n event.preventDefault()\n return\n }\n if (kind === \"link\") {\n select(node.id)\n if (anchorHash !== undefined && typeof window !== \"undefined\") {\n window.location.hash = anchorHash\n }\n return\n }\n toggleExpanded(node.id)\n }\n\n function handleStartRename(event: React.MouseEvent) {\n if (!canRename || node.disabled) return\n event.preventDefault()\n startRename(node.id)\n }\n\n const label = renaming ? (\n <input\n autoFocus\n className={cn(\n \"h-5 min-w-0 flex-1 rounded-sm border-none bg-transparent px-1\",\n \"text-[length:inherit] text-foreground outline-none focus-visible:ring-0\"\n )}\n data-slot=\"tree-rename-input\"\n defaultValue={node.label}\n onBlur={(event) => rename(node.id, event.currentTarget.value)}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n event.stopPropagation()\n if (event.key === \"Enter\") rename(node.id, event.currentTarget.value)\n if (event.key === \"Escape\") cancelRename()\n }}\n />\n ) : variant === \"sidebar\" ? (\n // The rail label folds away with the rail instead of unmounting rows.\n <AnimatePresence initial={false} mode=\"wait\">\n <motion.span\n initial={{ width: 0, opacity: 0, x: -8 }}\n animate={{\n width: collapsed ? 0 : \"auto\",\n opacity: collapsed ? 0 : 1,\n x: collapsed ? -8 : 0,\n display: collapsed ? \"none\" : \"flex\",\n transition: reduce\n ? { duration: 0 }\n : {\n width: {\n delay: TREE_LABEL_REVEAL_DELAY,\n duration: TREE_COLLAPSE_DURATION,\n ease: \"easeInOut\",\n },\n opacity: {\n delay: TREE_LABEL_REVEAL_DELAY,\n duration: TREE_COLLAPSE_DURATION,\n ease: \"easeInOut\",\n },\n x: {\n duration: TREE_COLLAPSE_DURATION,\n ease: \"easeInOut\",\n },\n },\n }}\n exit={{\n width: 0,\n opacity: 0,\n display: \"none\",\n x: -8,\n transition: reduce\n ? { duration: 0 }\n : {\n display: {\n duration: TREE_COLLAPSE_DURATION,\n ease: \"easeOut\",\n },\n width: {\n duration: TREE_COLLAPSE_DURATION * 3,\n ease: EASE_OUT,\n },\n opacity: {\n duration: TREE_COLLAPSE_DURATION,\n ease: \"easeOut\",\n },\n x: {\n duration: TREE_COLLAPSE_DURATION * 3,\n ease: EASE_OUT,\n },\n },\n }}\n className={cn(\"min-w-0 overflow-clip whitespace-nowrap\")}\n data-slot=\"tree-row-label\"\n >\n {node.label}\n </motion.span>\n </AnimatePresence>\n ) : (\n <span\n className=\"min-w-0 flex-1 truncate\"\n onDoubleClick={canRename ? handleStartRename : undefined}\n >\n {node.label}\n </span>\n )\n\n const chevron = canExpand ? (\n <motion.span\n animate={{ rotate: open ? (variant === \"navigation\" ? -90 : 90) : 0 }}\n aria-hidden\n className=\"flex size-4 shrink-0 items-center justify-center text-muted-foreground/70\"\n transition={reduce ? { duration: 0 } : TREE_MICRO_TRANSITION}\n >\n {variant === \"sidebar\" && (\n <LucideChevronLeft className=\"size-3.5 stroke-3\" />\n )}\n {variant === \"toc\" && (\n <LucideChevronRight className=\"size-3.5 stroke-3\" />\n )}\n {variant === \"navigation\" && (\n <LucideChevronLeft className=\"size-3.5 stroke-3\" />\n )}\n </motion.span>\n ) : null\n\n // The trailing slot is consumer-rendered and usually holds buttons, so it\n // cannot live inside the row — every row is itself a <button>, and a\n // button nesting a button is invalid HTML. It sits beside the row\n // instead, overlaid like the toc toggle.\n const showTrailing = files && !!renderTrailing && !renaming\n\n const rowClassName = cn(\n \"group/row relative flex w-full min-w-0 cursor-pointer items-center gap-2 rounded-md px-2\",\n \"text-left text-muted-foreground transition-colors duration-150 outline-none\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring\",\n files ? \"h-7 text-[0.8125rem]\" : \"h-8 text-sm\",\n node.disabled && \"pointer-events-none opacity-50\",\n active && \"bg-accent font-medium text-accent-foreground\",\n dragging && \"opacity-50\",\n drop === \"inside\" && \"bg-accent/60 ring-1 ring-primary/50 ring-inset\",\n variant === \"sidebar\" && collapsed && \"justify-center px-0\",\n // Room for the overlay expand toggle on toc parent rows.\n variant === \"toc\" && kind === \"link\" && children.length > 0 && \"pr-7\",\n // …and for the overlay trailing actions on files rows. Sized for one\n // icon button plus its inset; a wider slot clips the truncated label,\n // which is why the prop is documented as row actions, not free content.\n showTrailing && \"pr-9\"\n )\n\n const rowInteractionProps = {\n \"data-slot\": \"tree-row\" as const,\n \"data-id\": node.id,\n \"data-branch\": canExpand ? \"\" : undefined,\n \"data-expanded\": canExpand && open ? \"\" : undefined,\n \"data-active\": active ? \"\" : undefined,\n \"data-cuelume-press\": sound ? \"\" : undefined,\n draggable: dnd.enabled && !renaming ? true : undefined,\n onDragStart: dnd.enabled\n ? (event: React.DragEvent) => dnd.onRowDragStart(event, node.id)\n : undefined,\n onDragOver: dnd.enabled\n ? (event: React.DragEvent) => dnd.onRowDragOver(event, node)\n : undefined,\n onDragLeave: dnd.enabled ? dnd.onRowDragLeave : undefined,\n onDrop: dnd.enabled\n ? (event: React.DragEvent) => dnd.onRowDrop(event, node)\n : undefined,\n onDragEnd: dnd.enabled ? dnd.onRowDragEnd : undefined,\n }\n\n const content = (\n <>\n {kind !== \"section\" && files && chevron}\n {kind !== \"section\" && node.icon && (\n <span\n className={cn(\n \"flex size-4 shrink-0 items-center justify-center transition-[width,height,color] duration-150 [&>svg]:size-4\",\n // Folded rail: the icon is the whole row, so it steps up a size\n // and takes the foreground colour instead of muted.\n variant === \"sidebar\" &&\n collapsed &&\n \"size-5 text-foreground [&>svg]:size-5\",\n active && \"text-accent-foreground\"\n )}\n data-slot=\"tree-row-icon\"\n >\n {node.icon}\n </span>\n )}\n {label}\n {node.badge !== undefined && !(variant === \"sidebar\" && collapsed) && (\n <span className=\"ml-auto shrink-0 text-xs text-muted-foreground/80\">\n {node.badge}\n </span>\n )}\n {/* nav toggle chevrons trail like the sidebar block; files lead;\n toc link rows get a separate overlay toggle instead. */}\n {kind === \"toggle\" && !files && (\n <span\n className={cn(\n node.badge === undefined ? \"ml-auto\" : \"ml-1\",\n \"flex shrink-0\"\n )}\n >\n {chevron}\n </span>\n )}\n </>\n )\n\n let row: React.ReactElement\n if (kind === \"section\") {\n row = (\n <button\n {...rowInteractionProps}\n aria-expanded={open}\n className={cn(\n \"group/row flex w-full cursor-pointer items-center gap-1 rounded-md px-2 py-1\",\n \"text-xs font-medium tracking-wide text-muted-foreground/80 uppercase\",\n \"transition-colors duration-150 outline-none hover:text-foreground\",\n \"focus-visible:ring-0 focus-visible:ring-ring\"\n )}\n onClick={handlePress}\n type=\"button\"\n >\n <span className=\"truncate\">{node.label}</span>\n {chevron}\n </button>\n )\n } else {\n // Every non-section row is the shared Button — link rows included. An\n // `href` no longer renders an anchor: navigation runs through\n // `selectTreeNodeAtom` (onSelect → onNavigate), and the consumer routes\n // from the node it receives. `sound` is forwarded so Button's own\n // press/release cues follow the tree's setting rather than its default.\n row = (\n <Button\n {...rowInteractionProps}\n variant={variant === \"sidebar\" && active ? \"secondary\" : \"ghost\"}\n aria-current={active ? \"page\" : undefined}\n aria-expanded={kind === \"toggle\" ? open : undefined}\n aria-label={variant === \"sidebar\" && collapsed ? node.label : undefined}\n className={cn(\n \"transform cursor-pointer! justify-start transition-transform ease-smooth-out\",\n variant === \"sidebar\" && collapsed ? \"h-10! rounded-md!\" : undefined,\n rowClassName\n )}\n disabled={node.disabled}\n onClick={handlePress}\n sound={sound}\n >\n {content}\n </Button>\n )\n }\n\n // A collapsed rail row is icon-only — a tooltip names it on hover/focus.\n // Expanded, the visible label already does, so the tooltip is disabled\n // rather than unmounted: swapping the wrapper in and out with `collapsed`\n // would remount the row and cut the label's fold animation short.\n if (variant === \"sidebar\") {\n row = (\n <Tooltip disabled={!collapsed || node.disabled}>\n <TooltipTrigger render={row} />\n <TooltipContent side=\"right\">{node.label}</TooltipContent>\n </Tooltip>\n )\n }\n\n // toc parents navigate on the row itself, so their chevron lives beside\n // the row as its own toggle.\n const tocToggle =\n variant === \"toc\" && kind === \"link\" && children.length > 0 ? (\n <button\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${node.label}`}\n className={cn(\n \"absolute top-1/2 right-1 flex size-5 -translate-y-1/2 cursor-pointer items-center\",\n \"justify-center rounded-sm text-muted-foreground/70 outline-none\",\n \"hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring\"\n )}\n onClick={(event) => {\n event.stopPropagation()\n toggleExpanded(node.id)\n }}\n type=\"button\"\n >\n {chevron}\n </button>\n ) : null\n\n // Revealed by hovering/focusing anywhere in the row wrapper — the row and\n // the actions are siblings now, so the trigger group lives on the wrapper.\n const trailing = showTrailing ? (\n <span\n className={cn(\n \"absolute top-1/2 right-1 flex -translate-y-1/2 items-center\",\n \"opacity-0 transition-opacity duration-150\",\n \"group-focus-within/row-actions:opacity-100 group-hover/row-actions:opacity-100\",\n node.disabled && \"pointer-events-none opacity-50\"\n )}\n data-slot=\"tree-trailing\"\n >\n {renderTrailing?.(node)}\n </span>\n ) : null\n\n const branchClassName =\n kind === \"section\"\n ? \"flex flex-col gap-0.5 overflow-clip\"\n : cn(\n \"flex flex-col overflow-clip border-l border-border\",\n files ? \"mt-0.5 ml-3 gap-px pl-1.5\" : \"mt-1 ml-4 gap-0.5 pl-2.5\"\n )\n\n return (\n <motion.li\n aria-expanded={canExpand ? open : undefined}\n aria-level={depth + 1}\n aria-selected={active || undefined}\n className=\"relative flex min-w-0 flex-col\"\n data-slot=\"tree-item\"\n role=\"treeitem\"\n variants={reduce ? undefined : TREE_ROW_VARIANTS}\n >\n {drop === \"before\" && <TreeDropLine side=\"top\" />}\n <div className={cn(\"relative\", showTrailing && \"group/row-actions\")}>\n {row}\n {tocToggle}\n {trailing}\n </div>\n {canExpand && children.length > 0 && (\n <AnimatePresence initial={false}>\n {open && (\n <motion.ul\n animate={reduce ? { opacity: 1 } : \"open\"}\n className={branchClassName}\n exit={reduce ? { opacity: 0 } : TREE_BRANCH_EXIT}\n initial={reduce ? { opacity: 0 } : \"closed\"}\n key=\"branch\"\n role=\"group\"\n transition={reduce ? { duration: 0.12 } : undefined}\n variants={reduce ? undefined : TREE_BRANCH_VARIANTS}\n >\n {children.map((child) => (\n <TreeRow depth={depth + 1} key={child.id} node={child} />\n ))}\n </motion.ul>\n )}\n </AnimatePresence>\n )}\n {drop === \"after\" && <TreeDropLine side=\"bottom\" />}\n </motion.li>\n )\n}\n\n/** Rows are memoized so a re-render of the root — a rail measurement, a new\n * `renderTrailing` — does not walk the whole tree. Each row's own state\n * reaches it through its atoms instead. */\nexport const TreeRow = React.memo(TreeRowImpl)\nTreeRow.displayName = \"TreeRow\"\n\n/** Insertion indicator above or below a row while a drag hovers it. */\nfunction TreeDropLine({ side }: { side: \"top\" | \"bottom\" }) {\n return (\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-1 z-10 h-0.5 rounded-full bg-primary\",\n side === \"top\" ? \"top-0 -translate-y-1/2\" : \"bottom-0 translate-y-1/2\"\n )}\n data-slot=\"tree-drop-indicator\"\n />\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom, useStore } from \"jotai\"\n\nimport {\n endTreeDragAtom,\n moveTreeNodeAtom,\n treeCanMoveAtom,\n treeDraggedIdAtom,\n treeDropTargetAtom,\n treeItemsAtom,\n} from \"./tree-atom\"\nimport type {\n ITreeDndContextValue,\n ITreeDndHandlers,\n TTreeDropPosition,\n TTreeInstanceId,\n ITreeNode,\n} from \"./type\"\nimport { containsNode, findNode, locateNode } from \"./utils\"\n\n/** How far into a folder row the pointer must sit (from either edge) to read\n * as \"inside\" rather than \"before\"/\"after\". */\nconst EDGE_RATIO = 0.25\n\n/**\n * The drag handlers for the `files` variant, stable for the life of the tree.\n *\n * Nothing here subscribes to drag state: items, the dragged id and the drop\n * target are read out of the store when a handler runs. That is what lets\n * every row share one handler object without re-rendering when a drag moves —\n * and it keeps `useTree` from subscribing to data it also projects from\n * props, which would loop on an inline `items` array.\n *\n * Inert unless the tree `canMove`. `dataTransfer` is set for interop but\n * never read, so the flow also works where the store is unavailable (tests,\n * some webviews).\n */\nexport function useTreeDndHandlers(treeId: TTreeInstanceId): ITreeDndHandlers {\n const store = useStore()\n const enabled = useAtomValue(treeCanMoveAtom(treeId))\n const setDraggedId = useSetAtom(treeDraggedIdAtom(treeId))\n const setDropTarget = useSetAtom(treeDropTargetAtom(treeId))\n const move = useSetAtom(moveTreeNodeAtom(treeId))\n const reset = useSetAtom(endTreeDragAtom(treeId))\n\n const readItems = React.useCallback(\n () => store.get(treeItemsAtom(treeId)),\n [store, treeId]\n )\n const readDraggedId = React.useCallback(\n () => store.get(treeDraggedIdAtom(treeId)),\n [store, treeId]\n )\n const readDropTarget = React.useCallback(\n () => store.get(treeDropTargetAtom(treeId)),\n [store, treeId]\n )\n\n const onRowDragStart = React.useCallback(\n (event: React.DragEvent, id: string) => {\n if (!enabled) return\n event.stopPropagation()\n setDraggedId(id)\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = \"move\"\n event.dataTransfer.setData(\"text/plain\", id)\n }\n },\n [enabled, setDraggedId]\n )\n\n const onRowDragOver = React.useCallback(\n (event: React.DragEvent, node: ITreeNode) => {\n const draggedId = readDraggedId()\n if (!enabled || draggedId === null) return\n // A node never drops onto itself or into its own subtree.\n if (containsNode(readItems(), draggedId, node.id)) return\n event.preventDefault()\n event.stopPropagation()\n if (event.dataTransfer) event.dataTransfer.dropEffect = \"move\"\n\n const rect = event.currentTarget.getBoundingClientRect()\n const ratio =\n rect.height > 0 ? (event.clientY - rect.top) / rect.height : 0.5\n // Any node carrying a children array is a folder — an empty one still\n // accepts drops \"inside\".\n const folder = node.children !== undefined\n const position: TTreeDropPosition = folder\n ? ratio < EDGE_RATIO\n ? \"before\"\n : ratio > 1 - EDGE_RATIO\n ? \"after\"\n : \"inside\"\n : ratio < 0.5\n ? \"before\"\n : \"after\"\n setDropTarget((prev) =>\n prev?.id === node.id && prev.position === position\n ? prev\n : { id: node.id, position }\n )\n },\n [enabled, readDraggedId, readItems, setDropTarget]\n )\n\n const onRowDragLeave = React.useCallback(\n (event: React.DragEvent) => {\n // Leaving for a child of the same row still counts as hovering it.\n const next = event.relatedTarget as Node | null\n if (next && event.currentTarget.contains(next)) return\n setDropTarget(null)\n },\n [setDropTarget]\n )\n\n const onRowDrop = React.useCallback(\n (event: React.DragEvent, node: ITreeNode) => {\n if (!enabled) return\n event.preventDefault()\n event.stopPropagation()\n const draggedId = readDraggedId()\n const target = readDropTarget()\n if (draggedId === null || target === null || target.id !== node.id) {\n reset()\n return\n }\n const items = readItems()\n\n if (target.position === \"inside\") {\n // Append at the end of the folder, sized without the dragged node (it\n // may already live there).\n const children = node.children ?? []\n const index = children.filter((child) => child.id !== draggedId).length\n move(draggedId, node.id, index)\n } else {\n const location = locateNode(items, node.id)\n if (location) {\n const siblings = (\n location.parentId === null\n ? items\n : (findNode(items, location.parentId)?.children ?? [])\n ).filter((sibling) => sibling.id !== draggedId)\n const at = siblings.findIndex((sibling) => sibling.id === node.id)\n const index = target.position === \"after\" ? at + 1 : at\n move(draggedId, location.parentId, index)\n }\n }\n reset()\n },\n [enabled, move, readDraggedId, readDropTarget, readItems, reset]\n )\n\n return React.useMemo(\n () => ({\n enabled,\n onRowDragStart,\n onRowDragOver,\n onRowDragLeave,\n onRowDrop,\n onRowDragEnd: reset,\n }),\n [enabled, onRowDragStart, onRowDragOver, onRowDragLeave, onRowDrop, reset]\n )\n}\n\n/** The handlers plus live drag state, for `TreeController.dnd`. Rows take the\n * handlers alone and read the state per node instead. */\nexport function useTreeDnd(treeId: TTreeInstanceId): ITreeDndContextValue {\n const handlers = useTreeDndHandlers(treeId)\n const draggedId = useAtomValue(treeDraggedIdAtom(treeId))\n const dropTarget = useAtomValue(treeDropTargetAtom(treeId))\n\n return React.useMemo(\n () => ({ ...handlers, draggedId, dropTarget }),\n [handlers, draggedId, dropTarget]\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n cancelTreeRenameAtom,\n collapseAllTreeNodesAtom,\n collapseTreeNodeAtom,\n expandAllTreeNodesAtom,\n expandTreeNodeAtom,\n mountTreeAtom,\n moveTreeNodeAtom,\n projectTreeActiveIdAtom,\n projectTreeCollapsedAtom,\n projectTreeItemsAtom,\n removeTreeInstance,\n renameTreeNodeAtom,\n resetTreeAtom,\n revealTreeAncestorsAtom,\n revealTreeNodeAtom,\n selectTreeNodeAtom,\n setTreeCollapsedAtom,\n setTreeHandlersAtom,\n startTreeRenameAtom,\n toggleTreeCollapsedAtom,\n toggleTreeNodeAtom,\n treeActiveIdAtom,\n treeCanMoveAtom,\n treeCanRenameAtom,\n treeCollapsedAtom,\n treeExpandedIdsAtom,\n treeOwnedItemsAtom,\n treeRenamingIdAtom,\n} from \"./tree-atom\"\nimport type {\n ITreeConfig,\n ITreeController,\n ITreeHandlers,\n ITreeSeed,\n IUseTreeOptions,\n} from \"./type\"\nimport { useTreeDnd } from \"./use-tree-dnd\"\nimport { findNode, hasThreeLevels } from \"./utils\"\n\n/**\n * The tree's headless controller — every behaviour the component exposes,\n * callable from outside it: expand/collapse (a node, a section, the whole\n * tree), fold the `sidebar` rail, select a node, rename, reorder.\n *\n * Each piece of state is controlled-or-uncontrolled in the usual React\n * shape: pass `items`/`activeId`/`collapsed` to own it yourself, or\n * `defaultItems`/`defaultActiveId`/`defaultCollapsed` to let the hook. When\n * the hook owns `items` (or you pass `onItemsChange`), `rename` and `move`\n * apply the edit to the data themselves — otherwise they only report it\n * through `onRename`/`onMove` and you reduce the tree yourself.\n *\n * ```tsx\n * const tree = useTree({ variant: \"files\", defaultItems: files })\n * <Tree tree={tree} />\n * <Button onClick={tree.collapseAll}>Collapse all</Button>\n * ```\n *\n * State lives in Jotai atoms keyed by `treeId`, so anything under\n * `ExegiaProvider` can drive this tree without the controller — name it and\n * reach for `useTreeState(treeId)` / `useTreeActions(treeId)` elsewhere.\n */\nexport function useTree(options: IUseTreeOptions): ITreeController {\n const {\n variant,\n onNavigate,\n onRename,\n onMove,\n onItemsChange,\n onExpandedChange,\n onCollapsedChange,\n sound = true,\n } = options\n\n // A generated key isolates unnamed trees from each other; an explicit\n // `treeId` is the app's handle on this one.\n const generatedId = React.useId()\n const treeId = options.treeId ?? generatedId\n\n const controlsItems = options.items !== undefined\n const controlsActiveId = options.activeId !== undefined\n const controlsCollapsed = options.collapsed !== undefined\n // The hook may only rewrite the data when it owns it, or when the consumer\n // asked for the next tree through `onItemsChange`.\n const managesItems = !controlsItems || onItemsChange !== undefined\n const hasRenameHandler = onRename !== undefined\n const hasMoveHandler = onMove !== undefined\n\n // Primitives only, so this object is stable and the store write below runs\n // once per real change rather than once per render.\n const config = React.useMemo<ITreeConfig>(\n () => ({\n variant,\n sound,\n controlsItems,\n controlsActiveId,\n controlsCollapsed,\n managesItems,\n hasRenameHandler,\n hasMoveHandler,\n }),\n [\n variant,\n sound,\n controlsItems,\n controlsActiveId,\n controlsCollapsed,\n managesItems,\n hasRenameHandler,\n hasMoveHandler,\n ]\n )\n\n const handlers = React.useMemo<ITreeHandlers>(\n () => ({\n onNavigate,\n onItemsChange,\n onExpandedChange,\n onCollapsedChange,\n onRename,\n onMove,\n }),\n [\n onNavigate,\n onItemsChange,\n onExpandedChange,\n onCollapsedChange,\n onRename,\n onMove,\n ]\n )\n\n // Read once: the `default*` options describe the mount, not every render.\n const [seed] = React.useState<ITreeSeed>(() => ({\n items: options.items ?? options.defaultItems ?? [],\n activeId: options.activeId ?? options.defaultActiveId,\n collapsed: options.collapsed ?? options.defaultCollapsed ?? false,\n expandedIds: options.defaultExpandedIds\n ? [...options.defaultExpandedIds]\n : undefined,\n }))\n\n const mount = useSetAtom(mountTreeAtom(treeId))\n const publishHandlers = useSetAtom(setTreeHandlersAtom(treeId))\n const projectItems = useSetAtom(projectTreeItemsAtom(treeId))\n const projectActiveId = useSetAtom(projectTreeActiveIdAtom(treeId))\n const projectCollapsed = useSetAtom(projectTreeCollapsedAtom(treeId))\n const revealAncestors = useSetAtom(revealTreeAncestorsAtom(treeId))\n\n // Reads BEFORE the write effects, and the writes in passive effects: jotai\n // (v3) subscribes `useAtomValue` in its own `useEffect` with no\n // post-subscription recheck, so a write from a `useLayoutEffect` (or from\n // any effect declared before the reads) lands before the subscription\n // exists and the tree never re-renders with the seeded state.\n // Never `treeItemsAtom` — see the note on `treeOwnedItemsAtom`.\n const ownedItems = useAtomValue(treeOwnedItemsAtom(treeId))\n const items = options.items ?? ownedItems\n const activeId = useAtomValue(treeActiveIdAtom(treeId))\n const expandedIds = useAtomValue(treeExpandedIdsAtom(treeId))\n const collapsed = useAtomValue(treeCollapsedAtom(treeId))\n const renamingId = useAtomValue(treeRenamingIdAtom(treeId))\n const canRename = useAtomValue(treeCanRenameAtom(treeId))\n const canMove = useAtomValue(treeCanMoveAtom(treeId))\n\n // Handlers first — they must be in the store before any action can fire.\n // Rewritten every commit; no read atom depends on them, so nobody\n // re-renders for it.\n React.useEffect(() => {\n publishHandlers(handlers)\n }, [publishHandlers, handlers])\n\n React.useEffect(() => {\n mount(config, seed)\n }, [mount, config, seed])\n\n // Controlled props stay the source of truth; the store carries a projection\n // so the action atoms and remote readers see current data.\n React.useEffect(() => {\n if (options.items !== undefined) projectItems(options.items)\n }, [options.items, projectItems])\n\n React.useEffect(() => {\n if (options.activeId !== undefined) projectActiveId(options.activeId)\n }, [options.activeId, projectActiveId])\n\n React.useEffect(() => {\n if (options.collapsed !== undefined) projectCollapsed(options.collapsed)\n }, [options.collapsed, projectCollapsed])\n\n // A tree the hook keyed is scrap once its component goes. An explicit\n // `treeId` is the app's key and outlives the mount.\n React.useEffect(() => {\n if (options.treeId !== undefined) return\n return () => removeTreeInstance(treeId)\n }, [treeId, options.treeId])\n\n // Navigating into a nested entry from elsewhere reveals its ancestors, even\n // ones the reader had collapsed. In a layout effect, so the branch is open\n // before the frame paints.\n const lastActiveId = React.useRef(activeId)\n React.useLayoutEffect(() => {\n if (lastActiveId.current === activeId) return\n lastActiveId.current = activeId\n if (activeId !== undefined) revealAncestors(activeId)\n }, [activeId, revealAncestors])\n\n const sectioned = React.useMemo(\n () => variant === \"navigation\" && hasThreeLevels(items),\n [variant, items]\n )\n const sectionIds = React.useMemo(\n () => (sectioned ? items.map((node) => node.id) : []),\n [items, sectioned]\n )\n const getNode = React.useCallback(\n (id: string) => findNode(items, id),\n [items]\n )\n const isExpanded = React.useCallback(\n (id: string) => expandedIds.has(id),\n [expandedIds]\n )\n\n // `useSetAtom` setters are already stable — no useCallback needed.\n const expand = useSetAtom(expandTreeNodeAtom(treeId))\n const collapse = useSetAtom(collapseTreeNodeAtom(treeId))\n const toggleExpanded = useSetAtom(toggleTreeNodeAtom(treeId))\n const expandAll = useSetAtom(expandAllTreeNodesAtom(treeId))\n const collapseAll = useSetAtom(collapseAllTreeNodesAtom(treeId))\n const reveal = useSetAtom(revealTreeNodeAtom(treeId))\n const setCollapsed = useSetAtom(setTreeCollapsedAtom(treeId))\n const toggleCollapsed = useSetAtom(toggleTreeCollapsedAtom(treeId))\n const select = useSetAtom(selectTreeNodeAtom(treeId))\n const startRename = useSetAtom(startTreeRenameAtom(treeId))\n const cancelRename = useSetAtom(cancelTreeRenameAtom(treeId))\n const rename = useSetAtom(renameTreeNodeAtom(treeId))\n const move = useSetAtom(moveTreeNodeAtom(treeId))\n const reset = useSetAtom(resetTreeAtom(treeId))\n\n const dnd = useTreeDnd(treeId)\n\n return React.useMemo<ITreeController>(\n () => ({\n treeId,\n variant,\n items,\n sectioned,\n sectionIds,\n sound,\n getNode,\n expandedIds,\n isExpanded,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n collapsed,\n setCollapsed,\n toggleCollapsed,\n activeId,\n select,\n canRename,\n renamingId,\n startRename,\n cancelRename,\n rename,\n canMove,\n move,\n reset,\n dnd,\n }),\n [\n treeId,\n variant,\n items,\n sectioned,\n sectionIds,\n sound,\n getNode,\n expandedIds,\n isExpanded,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n collapsed,\n setCollapsed,\n toggleCollapsed,\n activeId,\n select,\n canRename,\n renamingId,\n startRename,\n cancelRename,\n rename,\n canMove,\n move,\n reset,\n dnd,\n ]\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { TooltipProvider } from \"@/components/ui/tooltip\"\nimport { TreeContext } from \"./tree-context\"\nimport { TreeRow } from \"./tree-node\"\nimport type {\n ITreeContextValue,\n ITreeController,\n TTreeDataProps,\n ITreeNode,\n TTreeProps,\n} from \"./type\"\nimport { useTree } from \"./use-tree\"\nimport { useTreeDndHandlers } from \"./use-tree-dnd\"\n\nconst DEFAULT_LABELS: Record<ITreeController[\"variant\"], string> = {\n navigation: \"Main\",\n toc: \"On this page\",\n sidebar: \"Main\",\n files: \"Files\",\n}\n\n/**\n * A nested item tree with four shapes: `navigation` (app nav — 3-level\n * data promotes the top level to collapsible section names), `toc`\n * (routes on top, in-page `#` anchors at the leaves), `sidebar` (a\n * single-level rail that collapses to icons) and `files` (a compact file\n * explorer with rename, drag-and-drop and trailing row actions).\n *\n * Two ways to drive it. Data-driven like the sidebar block: pass `items`,\n * wire `onNavigate` into your router. Or hold a `useTree` controller and\n * pass it as `tree` — same rendering, but expand, collapse, select, rename\n * and reorder are then callable from anywhere in your app.\n *\n * Branches expand with a soft height morph and row stagger; the rail's\n * labels fold away when `collapsed` flips. Arrow keys walk visible rows,\n * expand and collapse; F2 renames in `files`.\n */\nexport function Tree(props: TTreeProps): React.ReactElement {\n // Two components rather than one: hooks may not be called conditionally,\n // and the controller form has no props to build a fallback controller\n // from. Nobody switches a tree between the two forms at runtime.\n return props.tree ? (\n <TreeView\n ariaLabel={props.ariaLabel}\n className={props.className}\n renderTrailing={props.renderTrailing}\n tree={props.tree}\n />\n ) : (\n <UncontrolledTree {...props} />\n )\n}\n\n/** The props form: builds its own controller and renders through it. */\nfunction UncontrolledTree(props: TTreeDataProps): React.ReactElement {\n const {\n variant,\n items,\n activeId,\n onNavigate,\n sound = true,\n ariaLabel,\n className,\n } = props\n const tree = useTree({\n treeId: props.treeId,\n variant,\n items,\n activeId,\n onNavigate,\n sound,\n collapsed: variant === \"sidebar\" ? (props.collapsed ?? false) : undefined,\n onMove: variant === \"files\" ? props.onMove : undefined,\n onRename: variant === \"files\" ? props.onRename : undefined,\n })\n return (\n <TreeView\n ariaLabel={ariaLabel}\n className={className}\n renderTrailing={variant === \"files\" ? props.renderTrailing : undefined}\n tree={tree}\n />\n )\n}\n\ninterface ITreeViewProps {\n tree: ITreeController\n ariaLabel?: string\n className?: string\n renderTrailing?: (node: ITreeNode) => React.ReactNode\n}\n\n/** Rendering only — every piece of state and behaviour lives on `tree`. */\nfunction TreeView({\n tree,\n ariaLabel,\n className,\n renderTrailing,\n}: ITreeViewProps): React.ReactElement {\n const { variant, items, sectioned, collapsed } = tree\n const rootRef = React.useRef<HTMLUListElement>(null)\n\n // Roving over the DOM rather than a parallel model: collapsed branches\n // unmount, so a row query is exactly the visible set in order.\n function handleKeyDown(event: React.KeyboardEvent) {\n const row = (event.target as HTMLElement).closest<HTMLElement>(\n '[data-slot=\"tree-row\"]'\n )\n const root = rootRef.current\n if (!row || !root) return\n const rows = Array.from(\n root.querySelectorAll<HTMLElement>('[data-slot=\"tree-row\"]')\n )\n const index = rows.indexOf(row)\n if (index < 0) return\n const id = row.getAttribute(\"data-id\")\n const branch = row.hasAttribute(\"data-branch\")\n const open = row.hasAttribute(\"data-expanded\")\n\n const focusRow = (target: HTMLElement | undefined) => {\n if (!target) return\n event.preventDefault()\n target.focus()\n }\n\n switch (event.key) {\n case \"ArrowDown\":\n focusRow(rows[index + 1])\n break\n case \"ArrowUp\":\n focusRow(rows[index - 1])\n break\n case \"Home\":\n focusRow(rows[0])\n break\n case \"End\":\n focusRow(rows[rows.length - 1])\n break\n case \"ArrowRight\":\n if (branch && !open && id) {\n event.preventDefault()\n tree.expand(id)\n } else if (open) {\n focusRow(rows[index + 1])\n }\n break\n case \"ArrowLeft\":\n if (open && id) {\n event.preventDefault()\n tree.collapse(id)\n } else {\n focusRow(\n row\n .closest(\"li\")\n ?.parentElement?.closest(\"li\")\n ?.querySelector<HTMLElement>('[data-slot=\"tree-row\"]') ??\n undefined\n )\n }\n break\n case \"F2\":\n if (id && tree.canRename) {\n event.preventDefault()\n tree.startRename(id)\n }\n break\n }\n }\n\n // Rows take the tree's id and the stable drag handlers, never the\n // controller — so this value keeps its identity and a toggle re-renders only\n // the rows whose own atoms changed.\n const dnd = useTreeDndHandlers(tree.treeId)\n const context = React.useMemo<ITreeContextValue>(\n () => ({ treeId: tree.treeId, renderTrailing, dnd }),\n [tree.treeId, renderTrailing, dnd]\n )\n\n const label = ariaLabel ?? DEFAULT_LABELS[variant]\n let rendered = (\n <ul\n aria-label={label}\n className={cn(\n // The list always spans its container — collapsed included. The\n // rail's fold is its container's width change (an icon-collapsed\n // panel) plus the labels folding; rows keep the full width so their\n // hit areas and hover surfaces span the rail edge to edge.\n \"flex h-full w-full min-w-0 flex-col\",\n collapsed && \"gap-y-2!\",\n variant === \"files\" ? \"gap-px\" : sectioned ? \"gap-3\" : \"gap-0.5\"\n )}\n data-collapsed={collapsed ? \"\" : undefined}\n data-slot=\"tree\"\n data-variant={variant}\n onKeyDown={handleKeyDown}\n ref={rootRef}\n role=\"tree\"\n >\n {items.map((node) => (\n <TreeRow depth={0} key={node.id} node={node} />\n ))}\n </ul>\n )\n\n // The collapsed rail's rows carry tooltips — one provider groups their\n // open state and drops the hover delay across the rail. Mounted for the\n // expanded rail too: toggling the wrapper with `collapsed` would remount\n // every row and skip the label fold animation.\n if (variant === \"sidebar\")\n rendered = <TooltipProvider>{rendered}</TooltipProvider>\n\n return (\n <TreeContext.Provider value={context}>\n {variant === \"files\" ? (\n <div className={cn(\"min-w-0\", className)} data-slot=\"tree-root\">\n {rendered}\n </div>\n ) : (\n <nav\n aria-label={label}\n className={cn(\"flex h-full w-full min-w-0\", className)}\n data-slot=\"tree-root\"\n >\n {rendered}\n </nav>\n )}\n </TreeContext.Provider>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n cancelTreeRenameAtom,\n collapseAllTreeNodesAtom,\n collapseTreeNodeAtom,\n expandAllTreeNodesAtom,\n expandTreeNodeAtom,\n moveTreeNodeAtom,\n renameTreeNodeAtom,\n resetTreeAtom,\n revealTreeNodeAtom,\n selectTreeNodeAtom,\n setTreeCollapsedAtom,\n setTreeItemsAtom,\n startTreeRenameAtom,\n toggleTreeCollapsedAtom,\n toggleTreeNodeAtom,\n treeStateAtom,\n} from \"./tree-atom\"\nimport type { ITreeActions, TTreeInstanceId, ITreeState } from \"./type\"\n\n/**\n * Read the tree registered under `treeId` from anywhere below\n * `ExegiaProvider` — no controller, no props, no provider of its own.\n *\n * ```tsx\n * const { collapsed, activeId } = useTreeState(\"app-nav\")\n * ```\n *\n * This returns the whole state object, so the caller re-renders on any\n * change. A component that reads one field should subscribe to that field's\n * atom instead: `useAtomValue(treeCollapsedAtom(\"app-nav\"))`.\n */\nexport function useTreeState(treeId: TTreeInstanceId): ITreeState {\n return useAtomValue(treeStateAtom(treeId))\n}\n\n/**\n * Drive the tree registered under `treeId` from anywhere. Writes only — the\n * caller never re-renders when the tree changes, so this is what a command\n * palette, a keyboard shortcut or a route guard should reach for.\n *\n * ```tsx\n * const nav = useTreeActions(\"app-nav\")\n * <Button onClick={nav.collapseAll}>Collapse all</Button>\n * ```\n */\nexport function useTreeActions(treeId: TTreeInstanceId): ITreeActions {\n const expand = useSetAtom(expandTreeNodeAtom(treeId))\n const collapse = useSetAtom(collapseTreeNodeAtom(treeId))\n const toggleExpanded = useSetAtom(toggleTreeNodeAtom(treeId))\n const expandAll = useSetAtom(expandAllTreeNodesAtom(treeId))\n const collapseAll = useSetAtom(collapseAllTreeNodesAtom(treeId))\n const reveal = useSetAtom(revealTreeNodeAtom(treeId))\n const setCollapsed = useSetAtom(setTreeCollapsedAtom(treeId))\n const toggleCollapsed = useSetAtom(toggleTreeCollapsedAtom(treeId))\n const select = useSetAtom(selectTreeNodeAtom(treeId))\n const startRename = useSetAtom(startTreeRenameAtom(treeId))\n const cancelRename = useSetAtom(cancelTreeRenameAtom(treeId))\n const rename = useSetAtom(renameTreeNodeAtom(treeId))\n const move = useSetAtom(moveTreeNodeAtom(treeId))\n const setItems = useSetAtom(setTreeItemsAtom(treeId))\n const reset = useSetAtom(resetTreeAtom(treeId))\n\n return React.useMemo(\n () => ({\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n setCollapsed,\n toggleCollapsed,\n select,\n startRename,\n cancelRename,\n rename,\n move,\n setItems,\n reset,\n }),\n [\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n setCollapsed,\n toggleCollapsed,\n select,\n startRename,\n cancelRename,\n rename,\n move,\n setItems,\n reset,\n ]\n )\n}\n","import { Avatar } from \"@/components/atoms\"\nimport { Badge } from \"@/components/ui/badge\"\nimport type { TUserInfoProps } from \"./types\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * This component displays a user's information in a compact format.\n * that can be used to display a user's name and role,\n * in the chat bubble header or sidebar profile.\n * @param {TUserInfoProps['user']} user - The user to display.\n * @param {TUserInfoProps['description']} description - The description to display.\n *\n * @description Displays a user's name and role in a compact format.\n *\n */\nexport function Info({\n user,\n description,\n direction = \"sender\",\n audio,\n size,\n}: TUserInfoProps) {\n return (\n <div\n slot=\"info\"\n className={cn(\"gap-1.5 flex flex-row items-center\", {\n \"flex-row-reverse\": direction === \"sender\",\n })}\n >\n <Avatar size={size ?? \"default\"} user={user} audio={audio} />\n <div\n className={cn(\"flex flex-col\", {\n \"items-end text-right\": direction === \"sender\",\n })}\n >\n <div\n className={cn(\"gap-1.5 flex flex-row items-center\", {\n \"flex-row-reverse\": direction === \"sender\",\n })}\n >\n <span className=\"text-sm font-semibold\">\n {user.firstName} {user.lastName}\n </span>\n {user.role && (\n <Badge variant=\"invert\" size=\"xs\">\n {user.role}\n </Badge>\n )}\n </div>\n {description && (\n <span className=\"text-xs text-muted-foreground\">{description}</span>\n )}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { Bubble } from \"@/components/atoms\"\nimport { Info } from \"./info\"\nimport type { IUserMessageProps } from \"./types\"\n\nexport function Message({\n children,\n user,\n size,\n continued = false,\n className,\n reactions,\n actions,\n}: IUserMessageProps) {\n const direction = user?.direction ?? \"sender\"\n return (\n <Bubble variant={direction} continued={continued} className={className}>\n {user && !continued && (\n <Bubble.Header>\n <Info\n direction={direction}\n user={user}\n description={user.description}\n audio={user.audio}\n size={size ?? user.size}\n variant=\"info\"\n />\n </Bubble.Header>\n )}\n <Bubble.Message>{children}</Bubble.Message>\n {reactions && <Bubble.Reactions {...reactions} />}\n {actions}\n </Bubble>\n )\n}\n","import { Avatar } from \"@/components/atoms\"\nimport type { TUserPillProps } from \"./types\"\nimport { Button } from \"@/components/ui/button\"\n\n/**\n * This component displays a user's information in a compact format.\n * that can be used to display a user's name and role,\n * in the chat bubble header or sidebar profile.\n * @param {TUserPillProps['user']} user - The user to display.\n * @description Displays a user's name and role in a compact format.\n *\n */\nexport function Pill({ user }: TUserPillProps) {\n return (\n <Button size=\"sm\" className=\"gap-1 rounded-full pl-0.5\">\n <Avatar user={user} size=\"sm\" />\n <span className=\"text-xs\">@{user.firstName}</span>\n </Button>\n )\n}\n","import { Info } from \"./info\"\nimport { Message } from \"./message\"\nimport { Pill } from \"./pill\"\nimport type { TUserInfoProps, TUserPillProps } from \"./types\"\n\nconst User = {\n Info,\n Message,\n Pill,\n}\n\nexport type { TUserInfoProps, TUserPillProps }\n\nexport default User\n","\"use client\"\n\nimport { createContext, useContext } from \"react\"\nimport type { ReactElement } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Text } from \"../../atoms/text/default\"\nimport { TextClickPopover } from \"../../atoms/text-selection/click-popover\"\nimport type { TTextSize } from \"../../atoms/text/types\"\nimport type { TVerseNoteProps, IVerseProps, TVerseSpanProps } from \"./types\"\n\nconst VerseSizeContext = createContext<TTextSize | undefined>(undefined)\n\nconst chapterClassName =\n \"mr-1.5 align-super text-[0.7em] font-medium no-underline hover:underline\"\n\nexport function Verse({\n chapter,\n chapterPopover,\n children,\n className,\n href,\n renderChapterPopover,\n size = \"medium\",\n ...props\n}: IVerseProps): ReactElement {\n const hasChapterPopover =\n renderChapterPopover !== undefined ||\n (chapterPopover !== undefined && chapterPopover !== null)\n\n return (\n <VerseSizeContext.Provider value={size}>\n <Text\n {...props}\n className={className}\n data-verse=\"\"\n size={size}\n type=\"paragraph\"\n >\n {chapter !== undefined && chapter !== null ? (\n hasChapterPopover ? (\n <TextClickPopover\n className={chapterClassName}\n href={href}\n popover={chapterPopover}\n renderPopover={renderChapterPopover}\n size={size}\n type=\"link\"\n >\n {chapter}\n </TextClickPopover>\n ) : (\n <Text\n className={chapterClassName}\n href={href}\n size={size}\n type=\"link\"\n >\n {chapter}\n </Text>\n )\n ) : null}\n {children}\n </Text>\n </VerseSizeContext.Provider>\n )\n}\n\nexport function VerseSpan({\n className,\n size,\n ...props\n}: TVerseSpanProps): ReactElement {\n const verseSize = useContext(VerseSizeContext)\n return (\n <TextClickPopover\n {...props}\n className={cn(\n \"underline decoration-muted-foreground/50 decoration-dotted underline-offset-4\",\n className\n )}\n size={size ?? verseSize}\n />\n )\n}\n\nexport function VerseNote({\n className,\n size,\n ...props\n}: TVerseNoteProps): ReactElement {\n const verseSize = useContext(VerseSizeContext)\n return (\n <TextClickPopover\n {...props}\n className={cn(\"mx-0.5 text-[0.75em]\", className)}\n size={size ?? verseSize}\n type=\"subscript\"\n />\n )\n}\n","/**\n * Brand accents for the auth blocks.\n *\n * An accent is a set of custom properties set on the AuthCard root plus one\n * class string applied to the card's primary action. Splitting it this way\n * keeps the accent inheritable — anything else inside the card can opt into\n * `var(--auth-accent)` without the shell knowing about it.\n */\n\n/** Brand accents available to the auth blocks. */\nexport type TAuthAccent = \"corpora\" | \"exegia\";\n\n/**\n * Custom properties an accent contributes, set on the AuthCard root.\n *\n * The gradient lives in `--auth-accent-image` because `background-color` can't\n * hold one; `--auth-accent` sits underneath as the solid that paints wherever\n * the image is `none`. Foregrounds are fixed rather than themed — the accent\n * itself is a constant, so its contrast pair has to be too (white on the\n * corpora yellow fails badly).\n */\nexport const authAccentVars: Record<TAuthAccent, Record<string, string>> = {\n corpora: {\n \"--auth-accent\": \"#E8B124\",\n \"--auth-accent-image\": \"none\",\n \"--auth-accent-foreground\": \"oklch(0.145 0 0)\",\n },\n exegia: {\n \"--auth-accent\": \"#3B0080\",\n \"--auth-accent-image\":\n \"linear-gradient(44deg in oklab, rgba(29,0,202,0.66) 3%, #3B0080 37%, rgba(36,0,72,0.86) 98%)\",\n \"--auth-accent-foreground\": \"oklch(0.985 0 0)\",\n },\n};\n\n/**\n * Applied to the primary action inside an accented AuthCard, after the button\n * cva output so tailwind-merge lets it win over `bg-primary`. The hover and\n * pressed background entries are required: `hover:bg-primary/90` lives in a\n * different modifier group from `bg-*` and would otherwise survive and repaint\n * the button on hover.\n *\n * Hover uses `brightness` rather than a background tween because the button's\n * `transition-property` list is shared with its press/size animations — adding\n * `filter` to it means restating the whole list and its per-property\n * durations. The trade is an instant hover change instead of a 150ms one.\n */\nexport const authAccentActionStyles =\n \"border-transparent bg-[var(--auth-accent)] bg-[image:var(--auth-accent-image)] text-[var(--auth-accent-foreground)] shadow-none hover:bg-[var(--auth-accent)] hover:brightness-110 data-pressed:bg-[var(--auth-accent)] data-pressed:brightness-110 *:data-[slot=button-loading-indicator]:text-[var(--auth-accent-foreground)]\";\n","\"use client\";\n\nimport { AnimatePresence, MotionConfig, motion } from \"motion/react\";\nimport * as React from \"react\";\n\nimport {\n Card,\n CardDescription,\n CardHeader,\n CardPanel,\n CardTitle,\n} from \"@/components/ui/card\";\nimport { Frame, FrameFooter } from \"@/components/ui/frame\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { type TAuthAccent, authAccentVars } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\n\n/** transitions.dev motion scale, shared by all auth blocks. */\nexport const EASE = [0.22, 1, 0.36, 1] as const;\n\n\n/**\n * Frame shell shared by the auth blocks (coss particle p-card-8): a raised\n * Card inside a muted Frame, with the footer in the frame strip below the\n * card. Wraps content in a MotionConfig that honors prefers-reduced-motion\n * and layout-animates height changes so step swaps morph instead of jumping.\n */\nexport function AuthCard({\n title,\n description,\n children,\n footer,\n className,\n logo,\n accent,\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n /** Brand mark rendered above the title. Omit for no logo row at all. */\n logo?: React.ReactNode;\n /** Brand accent for the card's primary action. Omit to keep `bg-primary`. */\n accent?: TAuthAccent;\n}) {\n return (\n <MotionConfig reducedMotion=\"user\">\n <Frame\n className={cn(\"w-full max-w-sm\", className)}\n data-accent={accent}\n style={\n accent ? (authAccentVars[accent] as React.CSSProperties) : undefined\n }\n >\n <motion.div\n layout\n transition={{ duration: 0.3, ease: EASE }}\n className=\"flex flex-col\"\n >\n <Card>\n <CardHeader>\n {logo && (\n // Sized like the button's icon rule: a bare img/svg gets a\n // default height, an explicitly sized one keeps its own.\n <div\n className=\"mb-1.5 flex items-center [&_img:not([class*='h-'])]:h-8 [&_img]:w-auto [&_svg:not([class*='size-'])]:size-8\"\n data-slot=\"auth-logo\"\n >\n {logo}\n </div>\n )}\n <CardTitle>{title}</CardTitle>\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n <CardPanel className=\"overflow-hidden\">{children}</CardPanel>\n </Card>\n {footer && (\n <FrameFooter className=\"text-center text-sm text-muted-foreground\">\n {footer}\n </FrameFooter>\n )}\n </motion.div>\n </Frame>\n </MotionConfig>\n );\n}\n\n/** Cross-morphs between steps (form → success, …) keyed by `step`. */\nexport function MorphStep({\n step,\n children,\n className,\n}: {\n step: string;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.div\n key={step}\n className={className}\n initial={{ opacity: 0, y: 8, filter: \"blur(2px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, y: -8, filter: \"blur(2px)\" }}\n transition={{ duration: 0.25, ease: EASE }}\n >\n {children}\n </motion.div>\n </AnimatePresence>\n );\n}\n\n/**\n * Progressive-disclosure wrapper: collapses/expands a step as `show` flips.\n *\n * `overflow-hidden` is only worn while the height is in flight — leaving it on\n * would clip the focus ring of any full-width control inside (the ring sits\n * 3px outside the input's border box, so the left/right edges would be cut).\n */\nexport function Reveal({\n show,\n children,\n className,\n}: {\n show: boolean;\n children: React.ReactNode;\n className?: string;\n}) {\n // Reset during render (not in an effect) when `show` flips, matching\n // useCountdown below.\n const [state, setState] = React.useState({ show, settled: show });\n if (state.show !== show) setState({ show, settled: false });\n\n return (\n <AnimatePresence initial={false}>\n {show && (\n <motion.div\n className={cn(!state.settled && \"overflow-hidden\", className)}\n initial={{ height: 0, opacity: 0, y: -4, filter: \"blur(2px)\" }}\n animate={{ height: \"auto\", opacity: 1, y: 0, filter: \"blur(0px)\" }}\n exit={{ height: 0, opacity: 0, y: -4, filter: \"blur(2px)\" }}\n transition={{ duration: 0.25, ease: EASE }}\n onAnimationComplete={() =>\n setState((current) => ({ ...current, settled: true }))\n }\n >\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n/** Inline error message that shakes each time `message` changes. */\nexport function AuthError({ message }: { message: string | null }) {\n return (\n <AnimatePresence initial={false}>\n {message && (\n <motion.p\n key={message}\n role=\"alert\"\n className=\"text-sm text-destructive-foreground\"\n initial={{ opacity: 0, height: 0 }}\n animate={{\n opacity: 1,\n height: \"auto\",\n x: [0, -6, 6, -4, 4, 0],\n }}\n exit={{ opacity: 0, height: 0 }}\n transition={{\n duration: 0.25,\n ease: EASE,\n x: { duration: 0.4, ease: \"easeInOut\" },\n }}\n >\n {message}\n </motion.p>\n )}\n </AnimatePresence>\n );\n}\n\n/** Success panel with a stroke-drawn check. */\nexport function AuthSuccess({\n title,\n description,\n children,\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col items-center gap-3 py-4 text-center\">\n <motion.span\n className=\"flex size-12 items-center justify-center rounded-full bg-emerald-500/12 text-emerald-600\"\n initial={{ scale: 0.6, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ duration: 0.4, ease: EASE }}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n className=\"size-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <motion.path\n d=\"M4 12.5l5 5L20 6.5\"\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.4, delay: 0.15, ease: EASE }}\n />\n </svg>\n </motion.span>\n <div className=\"flex flex-col gap-1\">\n <p className=\"font-medium\">{title}</p>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {children}\n </div>\n );\n}\n\n/** \"Or continue with\" style divider. */\nexport function AuthSeparator({ label = \"Or\" }: { label?: string }) {\n return (\n <div className=\"flex items-center gap-3\">\n <Separator className=\"flex-1\" />\n <span className=\"text-xs text-muted-foreground uppercase\">{label}</span>\n <Separator className=\"flex-1\" />\n </div>\n );\n}\n\n/** Countdown for resend links; restarts when `restartKey` changes. */\nexport function useCountdown(seconds: number, restartKey: number) {\n const [state, setState] = React.useState({ restartKey, seconds, remaining: seconds });\n\n // Reset during render (not in an effect) when the inputs change.\n if (state.restartKey !== restartKey || state.seconds !== seconds) {\n setState({ restartKey, seconds, remaining: seconds });\n }\n\n React.useEffect(() => {\n if (seconds <= 0) return;\n const interval = window.setInterval(() => {\n setState((current) =>\n current.remaining <= 0\n ? current\n : { ...current, remaining: current.remaining - 1 },\n );\n }, 1000);\n return () => window.clearInterval(interval);\n }, [seconds, restartKey]);\n\n return state.remaining;\n}\n","\"use client\";\n\nimport { MailIcon, SmartphoneIcon } from \"lucide-react\";\nimport { motion } from \"motion/react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport { OTPField, OTPFieldInput } from \"@/components/ui/otp-field\";\nimport { authAccentActionStyles } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\nimport {\n AuthCard,\n AuthError,\n AuthSuccess,\n EASE,\n MorphStep,\n useCountdown,\n} from \"./auth-shell\";\nimport type { ICodeAuthBlockProps, TAuthStatus } from \"./type\";\n\nexport function CodeAuthBlock({\n channel = \"email\",\n logo,\n accent,\n destination,\n length = 6,\n autoSubmit = true,\n resendSeconds = 30,\n onVerify,\n onResend,\n onBack,\n}: ICodeAuthBlockProps) {\n const codeFieldId = React.useId();\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n const [code, setCode] = React.useState(\"\");\n const [resendCount, setResendCount] = React.useState(0);\n const remaining = useCountdown(resendSeconds, resendCount);\n\n const ChannelIcon = channel === \"sms\" ? SmartphoneIcon : MailIcon;\n const channelLabel = channel === \"sms\" ? \"phone\" : \"email\";\n\n const verify = React.useCallback(\n async (value: string) => {\n setError(null);\n setStatus(\"loading\");\n try {\n await onVerify?.(value);\n setStatus(\"success\");\n } catch (cause) {\n setStatus(\"idle\");\n setCode(\"\");\n setError(cause instanceof Error ? cause.message : \"Invalid code.\");\n }\n },\n [onVerify]\n );\n\n function handleChange(value: string) {\n setCode(value);\n if (error) setError(null);\n if (autoSubmit && value.length === length && status === \"idle\") {\n void verify(value);\n }\n }\n\n async function handleResend() {\n setResendCount((count) => count + 1);\n setCode(\"\");\n setError(null);\n await onResend?.();\n }\n\n return (\n <AuthCard\n title=\"Enter verification code\"\n className=\"[&_[data-slot=card-header]]:gap-3 [&_[data-slot=card-header]]:pb-8 [&_[data-slot=card-description]]:text-xs [&_[data-slot=card-description]]:leading-relaxed\"\n logo={logo}\n accent={accent}\n description={\n <span className=\"gap-1.5 inline-flex items-center\">\n <ChannelIcon className=\"size-3.5 shrink-0\" />\n <span>\n We sent a {length}-digit code to your {channelLabel}\n {destination ? (\n <>\n {\" \"}\n <span className=\"font-medium text-foreground\">\n {destination}\n </span>\n </>\n ) : null}\n .\n </span>\n </span>\n }\n footer={\n status !== \"success\" && (\n <Button variant=\"link\" onClick={onBack}>\n Use a different {channelLabel}\n </Button>\n )\n }\n >\n <MorphStep step={status === \"success\" ? \"success\" : \"form\"}>\n {status === \"success\" ? (\n <AuthSuccess\n title=\"Verified\"\n description=\"Your identity has been confirmed.\"\n />\n ) : (\n <div className=\"gap-4 flex flex-col items-center\">\n <motion.div\n // Shake the whole field on error; keying by message replays it.\n key={error ?? \"steady\"}\n animate={error ? { x: [0, -8, 8, -5, 5, 0] } : { x: 0 }}\n transition={{ duration: 0.4, ease: \"easeInOut\" }}\n >\n <Label className=\"sr-only\" htmlFor={codeFieldId}>\n Verification code\n </Label>\n <OTPField\n id={codeFieldId}\n length={length}\n value={code}\n onValueChange={handleChange}\n disabled={status === \"loading\"}\n >\n {Array.from({ length }, (_, index) => (\n <OTPFieldInput\n key={`slot-${index}`}\n aria-invalid={error ? true : undefined}\n />\n ))}\n </OTPField>\n </motion.div>\n <AuthError message={error} />\n {!autoSubmit && (\n <Button\n className={cn(\"w-full\", accent && authAccentActionStyles)}\n loading={status === \"loading\"}\n disabled={code.length !== length}\n onClick={() => void verify(code)}\n >\n Verify\n </Button>\n )}\n <motion.p\n layout\n transition={{ duration: 0.25, ease: EASE }}\n className=\"text-sm text-center text-muted-foreground\"\n >\n {remaining > 0 ? (\n <>\n Resend code in{\" \"}\n <span className=\"font-medium text-foreground tabular-nums\">\n {remaining}s\n </span>\n </>\n ) : (\n <Button\n variant=\"link\"\n disabled={status === \"loading\"}\n onClick={() => void handleResend()}\n >\n Resend code\n </Button>\n )}\n </motion.p>\n </div>\n )}\n </MorphStep>\n </AuthCard>\n );\n}\n","\"use client\";\n\nimport { ArrowLeftIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Field, FieldLabel } from \"@/components/ui/field\";\nimport { Input } from \"@/components/ui/input\";\nimport { authAccentActionStyles } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\nimport {\n AuthCard,\n AuthError,\n AuthSuccess,\n MorphStep,\n} from \"./auth-shell\";\nimport type { IForgotPasswordBlockProps, TAuthStatus } from \"./type\";\n\nexport function ForgotPasswordBlock({\n title = \"Reset your password\",\n logo,\n accent,\n description = \"Enter your email and we will send you a reset link\",\n onSubmit,\n onBackToLogin,\n}: IForgotPasswordBlockProps) {\n const emailId = React.useId();\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n const [email, setEmail] = React.useState(\"\");\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n setError(null);\n setStatus(\"loading\");\n try {\n await onSubmit?.({ email });\n setStatus(\"success\");\n } catch (cause) {\n setStatus(\"idle\");\n setError(\n cause instanceof Error ? cause.message : \"Unable to send reset link.\",\n );\n }\n }\n\n return (\n <AuthCard\n title={title}\n description={description}\n logo={logo}\n accent={accent}\n footer={\n <Button\n variant=\"link\"\n className=\"gap-1\"\n onClick={onBackToLogin}\n >\n <ArrowLeftIcon className=\"size-3.5\" />\n Back to login\n </Button>\n }\n >\n <MorphStep step={status === \"success\" ? \"success\" : \"form\"}>\n {status === \"success\" ? (\n <AuthSuccess\n title=\"Check your inbox\"\n description={\n <>\n We sent a password reset link to{\" \"}\n <span className=\"font-medium text-foreground\">{email}</span>.\n </>\n }\n >\n <Button\n variant=\"link\"\n className=\"text-xs sm:text-xs\"\n onClick={() => setStatus(\"idle\")}\n >\n Use a different email\n </Button>\n </AuthSuccess>\n ) : (\n <form className=\"flex flex-col gap-4\" onSubmit={handleSubmit}>\n <Field name=\"email\">\n <FieldLabel htmlFor={emailId}>Email</FieldLabel>\n <Input\n id={emailId}\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@example.com\"\n required\n disabled={status === \"loading\"}\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n />\n </Field>\n <AuthError message={error} />\n <Button\n className={cn(\"w-full\", accent && authAccentActionStyles)}\n type=\"submit\"\n loading={status === \"loading\"}\n >\n Send reset link\n </Button>\n </form>\n )}\n </MorphStep>\n </AuthCard>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { PasswordInput } from \"@/components/composed/password-input\";\nimport {\n SocialProviders,\n} from \"@/components/composed/social-providers\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Field, FieldLabel } from \"@/components/ui/field\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { authAccentActionStyles } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\nimport {\n AuthCard,\n AuthError,\n AuthSeparator,\n AuthSuccess,\n MorphStep,\n Reveal,\n} from \"./auth-shell\";\nimport type { ILoginBlockProps, TAuthStatus } from \"./type\";\nimport type { TSocialProvider } from \"@/components/composed/types\";\n\nexport function LoginBlock({\n title = \"Login to your account\",\n description = \"Enter your email and password to login\",\n logo,\n accent,\n providers = [\"google\", \"apple\", \"github\"],\n showRememberMe = true,\n showForgotPassword = true,\n onSubmit,\n onProviderSelect,\n onForgotPassword,\n onSignup,\n}: ILoginBlockProps) {\n const emailId = React.useId();\n const rememberId = React.useId();\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n const [loadingProvider, setLoadingProvider] =\n React.useState<TSocialProvider | null>(null);\n const [remember, setRemember] = React.useState(false);\n const [email, setEmail] = React.useState(\"\");\n const [emailValid, setEmailValid] = React.useState(false);\n const [password, setPassword] = React.useState(\"\");\n\n const busy = status === \"loading\" || loadingProvider !== null;\n\n // Progressive disclosure: each step unlocks the next. The password field is\n // gated on the email input's own constraint validation (required + type\n // email), the submit button on the password being non-empty — a login form\n // verifies a credential rather than enforcing policy, so strength rules here\n // would lock out anyone whose password predates them. The submit gate\n // re-checks emailValid so a stale password (typed, then the email was edited\n // back into an invalid state) can't leave the button on its own.\n const passwordValid = password.trim().length > 0;\n const canSubmit = emailValid && passwordValid;\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n // Enter in any field submits the form even while the button is hidden.\n if (!canSubmit) return;\n const form = new FormData(event.currentTarget);\n setError(null);\n setStatus(\"loading\");\n try {\n await onSubmit?.({\n email: String(form.get(\"email\") ?? \"\"),\n password: String(form.get(\"password\") ?? \"\"),\n remember,\n });\n setStatus(\"success\");\n } catch (cause) {\n setStatus(\"idle\");\n setError(cause instanceof Error ? cause.message : \"Unable to login.\");\n }\n }\n\n async function handleProvider(provider: TSocialProvider) {\n setError(null);\n setLoadingProvider(provider);\n try {\n await onProviderSelect?.(provider);\n setStatus(\"success\");\n } catch (cause) {\n setError(\n cause instanceof Error ? cause.message : \"Unable to login.\",\n );\n } finally {\n setLoadingProvider(null);\n }\n }\n\n return (\n <AuthCard\n title={title}\n description={description}\n logo={logo}\n accent={accent}\n footer={\n status !== \"success\" && (\n <>\n Don't have an account?{\" \"}\n <Button variant=\"link\" onClick={onSignup}>\n Sign up\n </Button>\n </>\n )\n }\n >\n <MorphStep step={status === \"success\" ? \"success\" : \"form\"}>\n {status === \"success\" ? (\n <AuthSuccess\n title=\"Welcome back\"\n description=\"You are now logged in.\"\n />\n ) : (\n <div className=\"flex flex-col gap-4\">\n <form className=\"flex flex-col gap-4\" onSubmit={handleSubmit}>\n <Field name=\"email\">\n <FieldLabel htmlFor={emailId}>Email</FieldLabel>\n <Input\n id={emailId}\n aria-label=\"Email\"\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@example.com\"\n required\n disabled={busy}\n value={email}\n onChange={(event) => {\n setEmail(event.currentTarget.value);\n setEmailValid(event.currentTarget.validity.valid);\n }}\n />\n </Field>\n <Reveal show={emailValid}>\n <Field name=\"password\">\n <FieldLabel htmlFor=\"password\">Password</FieldLabel>\n <PasswordInput\n id=\"password\"\n name=\"password\"\n autoComplete=\"current-password\"\n required\n disabled={busy}\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n {showForgotPassword && (\n // self-end: Field root is items-start, so this aligns the\n // link with the input's trailing edge. sm:text-xs is\n // required — the cva's sm:text-sm survives tailwind-merge\n // and would otherwise win at the breakpoint.\n <Button\n variant=\"link\"\n type=\"button\"\n className=\"self-end font-normal text-muted-foreground text-xs hover:text-foreground sm:text-xs\"\n onClick={onForgotPassword}\n >\n Forgot password?\n </Button>\n )}\n </Field>\n </Reveal>\n {showRememberMe && (\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id={rememberId}\n checked={remember}\n onCheckedChange={(checked) => setRemember(checked)}\n disabled={busy}\n />\n <Label htmlFor={rememberId} className=\"font-normal\">\n Remember me\n </Label>\n </div>\n )}\n <AuthError message={error} />\n <Reveal show={canSubmit}>\n <Button\n className={cn(\"w-full\", accent && authAccentActionStyles)}\n type=\"submit\"\n loading={status === \"loading\"}\n disabled={busy}\n >\n Login\n </Button>\n </Reveal>\n </form>\n {providers.length > 0 && (\n // The social providers retire once the email path is filled in\n // and valid — the user has committed to a path, so the\n // alternatives are just noise. They come back if a field is\n // invalidated again. gap-4 on the wrapper reproduces the spacing\n // the two children had as direct flex items of the column above.\n <Reveal show={!canSubmit} className=\"flex flex-col gap-4\">\n <AuthSeparator label=\"Or continue with\" />\n <SocialProviders\n providers={providers}\n action=\"login\"\n loadingProvider={loadingProvider}\n disabled={status === \"loading\"}\n onSelect={handleProvider}\n />\n </Reveal>\n )}\n </div>\n )}\n </MorphStep>\n </AuthCard>\n );\n}\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n ChevronDownIcon,\n ChevronsUpDownIcon,\n ChevronUpIcon,\n} from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const Select: typeof SelectPrimitive.Root = SelectPrimitive.Root;\n\nexport const selectTriggerVariants = cva(\n \"relative inline-flex min-h-9 w-full min-w-36 select-none items-center justify-between gap-2 rounded-md border border-input bg-background not-dark:bg-clip-padding px-[calc(--spacing(3)-1px)] text-left text-base text-foreground shadow-xs/5 outline-none ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-data-disabled:not-focus-visible:not-aria-invalid:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 focus-visible:border-ring focus-visible:ring-[3px] aria-invalid:border-destructive/36 focus-visible:aria-invalid:border-destructive/64 focus-visible:aria-invalid:ring-destructive/16 data-disabled:pointer-events-none data-disabled:opacity-64 sm:min-h-8 sm:text-sm dark:bg-input/32 dark:aria-invalid:ring-destructive/24 dark:not-data-disabled:not-focus-visible:not-aria-invalid:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 [[data-disabled],:focus-visible,[aria-invalid],[data-pressed]]:shadow-none\",\n {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: {\n default: \"\",\n lg: \"min-h-10 sm:min-h-9\",\n sm: \"min-h-8 gap-1.5 px-[calc(--spacing(2.5)-1px)] sm:min-h-7\",\n },\n },\n },\n);\n\nexport const selectTriggerIconClassName = \"-me-1 size-4.5 opacity-80 sm:size-4\";\n\nexport interface ISelectButtonProps extends useRender.ComponentProps<\"button\"> {\n size?: VariantProps<typeof selectTriggerVariants>[\"size\"];\n}\n\nexport function SelectButton({\n className,\n size,\n render,\n children,\n ...props\n}: ISelectButtonProps): React.ReactElement {\n const typeValue: React.ButtonHTMLAttributes<HTMLButtonElement>[\"type\"] =\n render ? undefined : \"button\";\n\n const defaultProps = {\n children: (\n <>\n <span className=\"flex-1 truncate in-data-placeholder:text-muted-foreground/72\">\n {children}\n </span>\n <ChevronsUpDownIcon className={selectTriggerIconClassName} />\n </>\n ),\n className: cn(selectTriggerVariants({ size }), \"min-w-0\", className),\n \"data-slot\": \"select-button\",\n type: typeValue,\n };\n\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(defaultProps, props),\n render,\n });\n}\n\nexport function SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props &\n VariantProps<typeof selectTriggerVariants>): React.ReactElement {\n return (\n <SelectPrimitive.Trigger\n className={cn(selectTriggerVariants({ size }), className)}\n data-slot=\"select-trigger\"\n {...props}\n >\n {children}\n <SelectPrimitive.Icon data-slot=\"select-icon\">\n <ChevronsUpDownIcon className={selectTriggerIconClassName} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nexport function SelectValue({\n className,\n ...props\n}: SelectPrimitive.Value.Props): React.ReactElement {\n return (\n <SelectPrimitive.Value\n className={cn(\n \"flex-1 truncate data-placeholder:text-muted-foreground\",\n className,\n )}\n data-slot=\"select-value\"\n {...props}\n />\n );\n}\n\nexport function SelectPopup({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"start\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n anchor,\n portalProps,\n ...props\n}: SelectPrimitive.Popup.Props & {\n portalProps?: SelectPrimitive.Portal.Props;\n side?: SelectPrimitive.Positioner.Props[\"side\"];\n sideOffset?: SelectPrimitive.Positioner.Props[\"sideOffset\"];\n align?: SelectPrimitive.Positioner.Props[\"align\"];\n alignOffset?: SelectPrimitive.Positioner.Props[\"alignOffset\"];\n alignItemWithTrigger?: SelectPrimitive.Positioner.Props[\"alignItemWithTrigger\"];\n anchor?: SelectPrimitive.Positioner.Props[\"anchor\"];\n}): React.ReactElement {\n return (\n <SelectPrimitive.Portal {...portalProps}>\n <SelectPrimitive.Positioner\n align={align}\n alignItemWithTrigger={alignItemWithTrigger}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50 select-none\"\n data-slot=\"select-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <SelectPrimitive.Popup\n className=\"origin-(--transform-origin) text-foreground outline-none\"\n data-slot=\"select-popup\"\n {...props}\n >\n <SelectPrimitive.ScrollUpArrow\n className=\"top-0 z-50 flex h-6 w-full cursor-default items-center justify-center before:pointer-events-none before:absolute before:inset-x-px before:top-px before:h-[200%] before:rounded-t-[calc(var(--radius-lg)-1px)] before:bg-linear-to-b before:from-50% before:from-popover\"\n data-slot=\"select-scroll-up-arrow\"\n >\n <ChevronUpIcon className=\"relative size-4.5 sm:size-4\" />\n </SelectPrimitive.ScrollUpArrow>\n <div className=\"relative h-full min-w-(--anchor-width) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\">\n <SelectPrimitive.List\n className={cn(\n \"max-h-(--available-height) overflow-y-auto p-1\",\n className,\n )}\n data-slot=\"select-list\"\n >\n {children}\n </SelectPrimitive.List>\n </div>\n <SelectPrimitive.ScrollDownArrow\n className=\"bottom-0 z-50 flex h-6 w-full cursor-default items-center justify-center before:pointer-events-none before:absolute before:inset-x-px before:bottom-px before:h-[200%] before:rounded-b-[calc(var(--radius-lg)-1px)] before:bg-linear-to-t before:from-50% before:from-popover\"\n data-slot=\"select-scroll-down-arrow\"\n >\n <ChevronDownIcon className=\"relative size-4.5 sm:size-4\" />\n </SelectPrimitive.ScrollDownArrow>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\nexport function SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props): React.ReactElement {\n return (\n <SelectPrimitive.Item\n className={cn(\n \"grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default grid-cols-[1rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-base outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"select-item\"\n {...props}\n >\n <SelectPrimitive.ItemIndicator className=\"col-start-1\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </SelectPrimitive.ItemIndicator>\n <SelectPrimitive.ItemText className=\"col-start-2 min-w-0\">\n {children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nexport function SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props): React.ReactElement {\n return (\n <SelectPrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border\", className)}\n data-slot=\"select-separator\"\n {...props}\n />\n );\n}\n\nexport function SelectGroup(\n props: SelectPrimitive.Group.Props,\n): React.ReactElement {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nexport function SelectLabel({\n className,\n ...props\n}: SelectPrimitive.Label.Props): React.ReactElement {\n return (\n <SelectPrimitive.Label\n className={cn(\n \"not-in-data-[slot=field]:mb-2 inline-flex cursor-default items-center gap-2 font-medium text-base/4.5 text-foreground sm:text-sm/4\",\n className,\n )}\n data-slot=\"select-label\"\n {...props}\n />\n );\n}\n\nexport function SelectGroupLabel(\n props: SelectPrimitive.GroupLabel.Props,\n): React.ReactElement {\n return (\n <SelectPrimitive.GroupLabel\n className=\"px-2 py-1.5 font-medium text-muted-foreground text-xs\"\n data-slot=\"select-group-label\"\n {...props}\n />\n );\n}\n\nexport { SelectPrimitive, SelectPopup as SelectContent };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Field, FieldError, FieldLabel } from \"@/components/ui/field\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { cn } from \"@/lib/utils\";\nimport type {\n IProfileStepProps,\n TOnboardingFieldConfig,\n TOnboardingValue,\n} from \"../type\";\n\n\nfunction initialValue(\n field: TOnboardingFieldConfig,\n saved: TOnboardingValue | undefined,\n): TOnboardingValue {\n if (field.kind === \"checkbox\") return typeof saved === \"boolean\" ? saved : false;\n return typeof saved === \"string\" ? saved : \"\";\n}\n\n/** Built-in validation, mirroring the declared `FieldConfig` contract. */\nfunction validateField(\n field: TOnboardingFieldConfig,\n value: TOnboardingValue,\n): string | null {\n const required = field.required === true;\n\n if (field.kind === \"checkbox\") {\n if (required && value !== true) return `${field.label} is required`;\n return null;\n }\n\n const text = typeof value === \"string\" ? value.trim() : \"\";\n if (required && text.length === 0) return `${field.label} is required`;\n\n if (field.kind === \"url\" && text.length > 0) {\n try {\n new URL(text);\n } catch {\n return \"Enter a valid URL\";\n }\n }\n\n if (field.kind === \"select\" && text.length > 0) {\n const allowed = field.options.map((option) => option.value);\n if (!allowed.includes(text)) {\n return `Choose a valid option for ${field.label}`;\n }\n }\n\n return field.validate?.(text) ?? null;\n}\n\n/**\n * Renders one declared profile step: `OnboardingFieldConfig[]` → labeled\n * controls, validated locally before anything is handed to `onSubmit`. Mounted\n * keyed by `step.id` so drafts re-seed per step.\n */\nexport function ProfileStep({\n step,\n values,\n submitting = false,\n submitLabel,\n onSubmit,\n onBack,\n onDraftChange,\n}: IProfileStepProps) {\n const idPrefix = React.useId();\n const [draft, setDraft] = React.useState<Record<string, TOnboardingValue>>(\n () =>\n Object.fromEntries(\n step.fields.map((field) => [\n field.name,\n initialValue(field, values[field.name]),\n ]),\n ),\n );\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n\n function setValue(name: string, value: TOnboardingValue) {\n setDraft((current) => ({ ...current, [name]: value }));\n onDraftChange?.(name, value);\n // Clear a field's error as soon as it is edited; re-validation happens on\n // the next submit rather than on every keystroke.\n setErrors((current) =>\n current[name] ? { ...current, [name]: \"\" } : current,\n );\n }\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n if (submitting) return;\n\n const next: Record<string, string> = {};\n for (const field of step.fields) {\n const message = validateField(field, draft[field.name]);\n if (message) next[field.name] = message;\n }\n if (Object.keys(next).length > 0) {\n setErrors(next);\n return;\n }\n setErrors({});\n\n const submitted: Record<string, TOnboardingValue> = {};\n for (const field of step.fields) {\n const value = draft[field.name];\n submitted[field.name] = typeof value === \"string\" ? value.trim() : value;\n }\n await onSubmit(submitted);\n }\n\n return (\n <form className=\"flex flex-col gap-4\" noValidate onSubmit={handleSubmit}>\n {step.fields.map((field) => {\n const error = errors[field.name] || undefined;\n const controlId = `${idPrefix}-${field.name}`;\n const value = draft[field.name];\n\n if (field.kind === \"checkbox\") {\n return (\n <Field\n key={field.name}\n name={field.name}\n invalid={Boolean(error)}\n className=\"gap-1.5\"\n >\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id={controlId}\n checked={value === true}\n disabled={submitting}\n onCheckedChange={(checked) => setValue(field.name, checked)}\n />\n <Label htmlFor={controlId} className=\"font-normal\">\n {field.label}\n </Label>\n </div>\n {error && <FieldError match>{error}</FieldError>}\n </Field>\n );\n }\n\n return (\n <Field key={field.name} name={field.name} invalid={Boolean(error)}>\n <FieldLabel htmlFor={controlId}>{field.label}</FieldLabel>\n {field.kind === \"textarea\" ? (\n <Textarea\n id={controlId}\n aria-invalid={error ? true : undefined}\n disabled={submitting}\n placeholder={field.placeholder}\n value={String(value ?? \"\")}\n onChange={(event) => setValue(field.name, event.target.value)}\n />\n ) : field.kind === \"select\" ? (\n // No select atom exists in the library yet; a native control\n // styled to match Input keeps the flow self-contained without\n // inventing one here.\n <select\n id={controlId}\n aria-invalid={error ? true : undefined}\n className={cn(\n \"h-8.5 w-full rounded-md border border-input bg-background px-[calc(--spacing(3)-1px)] text-base text-foreground shadow-xs/5 outline-none transition-[box-shadow,border-color] duration-150 ease-smooth-out focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/24 disabled:opacity-64 aria-invalid:border-destructive/36 sm:h-7.5 sm:text-sm dark:bg-input/32\",\n )}\n disabled={submitting}\n value={String(value ?? \"\")}\n onChange={(event) => setValue(field.name, event.target.value)}\n >\n <option value=\"\">{field.placeholder ?? \"Choose an option\"}</option>\n {field.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={controlId}\n aria-invalid={error ? true : undefined}\n disabled={submitting}\n placeholder={field.placeholder}\n type={field.kind === \"url\" ? \"url\" : \"text\"}\n value={String(value ?? \"\")}\n onChange={(event) => setValue(field.name, event.target.value)}\n />\n )}\n {error && <FieldError match>{error}</FieldError>}\n </Field>\n );\n })}\n\n <div className=\"flex gap-2\">\n {onBack && (\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={submitting}\n onClick={onBack}\n >\n Back\n </Button>\n )}\n <Button className=\"flex-1\" type=\"submit\" loading={submitting}>\n {submitLabel}\n </Button>\n </div>\n </form>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Select, SelectTrigger, SelectValue, SelectPopup, SelectItem } from \"@/components/ui/select\";\nimport {\n AuthCard,\n AuthError,\n AuthSuccess,\n MorphStep,\n} from \"./auth-shell\";\nimport { ProfileStep } from \"./onboarding/profile-step\";\nimport type { IOnboardingBlockProps, IOnboardingStepConfig, TOnboardingValue, TAuthStatus } from \"./type\";\n\n\n/** Default configuration: a single required display-name step. */\nexport const DEFAULT_ONBOARDING_STEPS: IOnboardingStepConfig[] = [\n {\n id: \"profile\",\n title: \"Your profile\",\n fields: [\n { kind: \"text\", name: \"display_name\", label: \"Display name\", required: true },\n ],\n },\n];\n\n\n\n/**\n * Multi-step profile onboarding: a declared `steps` config renders as\n * progress-tracked forms with back/forward navigation, per-step submission and\n * a single completion signal. Drafts survive back-navigation, and the step\n * heading takes focus on advance so a screen reader announces where the flow\n * moved.\n *\n * Account creation and email confirmation are separate blocks (`SignupBlock`,\n * `CodeAuthBlock`) — this one picks up once the account exists.\n */\nexport function OnboardingBlock({\n steps = DEFAULT_ONBOARDING_STEPS,\n logo,\n accent,\n onStepSubmit,\n onComplete,\n showCompleteScreen = true,\n autoFocus = true,\n className,\n}: IOnboardingBlockProps) {\n const headingRef = React.useRef<HTMLHeadingElement>(null);\n // Unsubmitted per-step drafts. Accumulated in a ref so a keystroke does not\n // re-render the whole flow, then published to state at each navigation —\n // the only moment the seed values are actually read.\n const draftsRef = React.useRef<\n Record<string, Record<string, TOnboardingValue>>\n >({});\n const [drafts, setDrafts] = React.useState<\n Record<string, Record<string, TOnboardingValue>>\n >({});\n\n const [index, setIndex] = React.useState(0);\n const [furthestIndex, setFurthestIndex] = React.useState(0);\n const [values, setValues] = React.useState<Record<string, TOnboardingValue>>(\n {},\n );\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n\n const done = status === \"success\";\n const step = steps[index];\n const last = index >= steps.length - 1;\n\n // Focus the step heading on advance; on error the alert carries the message\n // and stealing focus would talk over it.\n React.useEffect(() => {\n if (error || !autoFocus) return;\n headingRef.current?.focus();\n }, [index, done, error, autoFocus]);\n\n async function handleStepSubmit(stepValues: Record<string, TOnboardingValue>) {\n if (!step) return;\n const merged = { ...values, ...stepValues };\n setError(null);\n setStatus(\"loading\");\n try {\n await onStepSubmit?.(step.id, stepValues);\n if (last) await onComplete?.(merged);\n setValues(merged);\n delete draftsRef.current[step.id];\n setDrafts({ ...draftsRef.current });\n setStatus(last ? \"success\" : \"idle\");\n if (!last) {\n setFurthestIndex((current) => Math.max(current, index + 1));\n setIndex((current) => current + 1);\n }\n } catch (cause) {\n setStatus(\"idle\");\n setError(\n cause instanceof Error ? cause.message : \"Unable to save your profile.\",\n );\n }\n }\n\n if (done && !showCompleteScreen) return null;\n\n const heading = done ? \"You're all set\" : (step?.title ?? \"Your profile\");\n\n return (\n <AuthCard\n title={heading}\n description={done ? undefined : step?.description}\n logo={logo}\n accent={accent}\n className={className}\n >\n <MorphStep step={done ? \"done\" : `step-${index}`}>\n {done ? (\n <AuthSuccess\n title=\"Profile saved\"\n description=\"Your account is ready and your profile has been saved.\"\n />\n ) : step ? (\n <div className=\"flex flex-col gap-4\">\n <nav aria-label=\"Onboarding progress\">\n <Select\n items={steps.map((item) => ({ value: item.id, label: item.title }))}\n value={step.id}\n disabled={status === \"loading\"}\n onValueChange={(id) => {\n const next = steps.findIndex((item) => item.id === id);\n if (next < 0 || next > furthestIndex) return;\n setError(null);\n setDrafts({ ...draftsRef.current });\n setIndex(next);\n }}\n >\n <SelectTrigger aria-label=\"Onboarding step\"><SelectValue /></SelectTrigger>\n <SelectPopup>\n {steps.map((item, itemIndex) => (\n <SelectItem key={item.id} value={item.id} disabled={itemIndex > furthestIndex}>\n {item.title}\n </SelectItem>\n ))}\n </SelectPopup>\n </Select>\n </nav>\n\n {/* The AuthCard title is the visible heading; this one exists to\n take focus on advance without duplicating it on screen. */}\n <h3 ref={headingRef} tabIndex={-1} className=\"sr-only\">\n {step.title}\n </h3>\n\n <AuthError message={error} />\n\n <ProfileStep\n key={step.id}\n step={step}\n values={{ ...values, ...drafts[step.id] }}\n submitting={status === \"loading\"}\n submitLabel={last ? \"Finish\" : \"Continue\"}\n onBack={\n index > 0\n ? () => {\n setError(null);\n setDrafts({ ...draftsRef.current });\n setIndex((current) => current - 1);\n }\n : undefined\n }\n onDraftChange={(name, value) => {\n draftsRef.current[step.id] = {\n ...draftsRef.current[step.id],\n [name]: value,\n };\n }}\n onSubmit={handleStepSubmit}\n />\n </div>\n ) : null}\n </MorphStep>\n </AuthCard>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n PasswordInput,\n getPasswordStrength,\n passwordRequirements,\n} from \"@/components/composed/password-input\";\nimport {\n SocialProviders,\n} from \"@/components/composed/social-providers\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Field, FieldLabel } from \"@/components/ui/field\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { authAccentActionStyles } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\nimport {\n AuthCard,\n AuthError,\n AuthSeparator,\n AuthSuccess,\n MorphStep,\n Reveal,\n} from \"./auth-shell\";\nimport type { ISignupBlockProps, TAuthStatus } from \"./type\";\nimport type { TSocialProvider } from \"@/components/composed/types\";\n\n\nexport function SignupBlock({\n title = \"Create your account\",\n description = \"Start exploring manuscripts in minutes\",\n logo,\n accent,\n providers = [\"google\", \"apple\", \"github\"],\n showNameField = true,\n showTerms = true,\n termsChecked,\n defaultTermsChecked = false,\n onTermsCheckedChange,\n enforceStrongPassword = true,\n onSubmit,\n termsComponent,\n onProviderSelect,\n onLogin,\n onTerms,\n}: ISignupBlockProps) {\n const nameId = React.useId();\n const emailId = React.useId();\n const passwordId = React.useId();\n const termsId = React.useId();\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n const [loadingProvider, setLoadingProvider] =\n React.useState<TSocialProvider | null>(null);\n const [password, setPassword] = React.useState(\"\");\n // Controlled when `termsChecked` is passed, uncontrolled otherwise. The\n // internal state is kept either way, so a block that switches between the\n // two mid-life does not lose the box, and the callback fires in both modes.\n const [uncontrolledTerms, setUncontrolledTerms] =\n React.useState(defaultTermsChecked);\n const terms = termsChecked ?? uncontrolledTerms;\n\n function handleTermsChange(checked: boolean) {\n if (termsChecked === undefined) setUncontrolledTerms(checked);\n onTermsCheckedChange?.(checked);\n }\n // Tracked from each input's own constraint validation rather than a regex.\n // The values stay uncontrolled — only validity is needed, and the form reads\n // values from FormData on submit.\n const [emailValid, setEmailValid] = React.useState(false);\n const [nameValid, setNameValid] = React.useState(false);\n\n const busy = status === \"loading\" || loadingProvider !== null;\n const strongEnough =\n !enforceStrongPassword ||\n getPasswordStrength(password) === passwordRequirements.length;\n\n // The social providers retire once the email path is filled in and valid —\n // the user has committed to a path, so the alternatives are just noise. It\n // comes back if they invalidate a field again.\n const passwordValid = password.trim().length > 0 && strongEnough;\n const emailPathComplete =\n (!showNameField || nameValid) && emailValid && passwordValid;\n\n async function handleSubmit(event: React.SubmitEvent<HTMLFormElement>) {\n event.preventDefault();\n setError(null);\n if (!strongEnough) {\n setError(\"Please meet all password requirements.\");\n return;\n }\n if (showTerms && !terms) {\n setError(\"Please accept the terms to continue.\");\n return;\n }\n const form = new FormData(event.currentTarget);\n setStatus(\"loading\");\n try {\n await onSubmit?.({\n name: String(form.get(\"name\") ?? \"\"),\n email: String(form.get(\"email\") ?? \"\"),\n password,\n });\n setStatus(\"success\");\n } catch (cause) {\n setStatus(\"idle\");\n setError(\n cause instanceof Error ? cause.message : \"Unable to create account.\",\n );\n }\n }\n\n async function handleProvider(provider: TSocialProvider) {\n setError(null);\n setLoadingProvider(provider);\n try {\n await onProviderSelect?.(provider);\n setStatus(\"success\");\n } catch (cause) {\n setError(\n cause instanceof Error ? cause.message : \"Unable to create account.\",\n );\n } finally {\n setLoadingProvider(null);\n }\n }\n\n return (\n <AuthCard\n title={title}\n description={description}\n logo={logo}\n accent={accent}\n footer={\n status !== \"success\" && (\n <>\n Already have an account?{\" \"}\n <Button variant=\"link\" onClick={onLogin}>\n Login\n </Button>\n </>\n )\n }\n >\n <MorphStep step={status === \"success\" ? \"success\" : \"form\"}>\n {status === \"success\" ? (\n <AuthSuccess\n title=\"Account created\"\n description=\"Check your inbox to confirm your email address.\"\n />\n ) : (\n <div className=\"flex flex-col gap-4\">\n {providers.length > 0 && (\n // gap-4 on the wrapper reproduces the spacing the two children\n // had as direct flex items of the column above.\n <Reveal show={!emailPathComplete} className=\"flex flex-col gap-4\">\n <SocialProviders\n providers={providers}\n action=\"signup\"\n loadingProvider={loadingProvider}\n disabled={status === \"loading\"}\n onSelect={handleProvider}\n />\n <AuthSeparator label=\"Or with email\" />\n </Reveal>\n )}\n <form className=\"flex flex-col gap-4\" onSubmit={handleSubmit}>\n {showNameField && (\n <Field name=\"name\">\n <FieldLabel htmlFor={nameId}>Name</FieldLabel>\n <Input\n aria-label=\"Name\"\n id={nameId}\n name=\"name\"\n autoComplete=\"name\"\n placeholder=\"Your name\"\n required\n disabled={busy}\n onChange={(event) =>\n setNameValid(event.currentTarget.validity.valid)\n }\n />\n </Field>\n )}\n <Field name=\"email\">\n <FieldLabel htmlFor={emailId}>Email</FieldLabel>\n <Input\n id={emailId}\n name=\"email\"\n type=\"email\"\n aria-label=\"Email\"\n autoComplete=\"email\"\n placeholder=\"you@example.com\"\n required\n disabled={busy}\n onChange={(event) =>\n setEmailValid(event.currentTarget.validity.valid)\n }\n />\n </Field>\n <Reveal show={emailValid}>\n <Field name=\"password\">\n <FieldLabel htmlFor={passwordId}>Password</FieldLabel>\n <PasswordInput\n id={passwordId}\n name=\"password\"\n aria-label=\"Password\"\n autoComplete=\"new-password\"\n placeholder=\"Create a password\"\n showStrength\n required\n disabled={busy}\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n </Field>\n </Reveal>\n {showTerms && (\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id={termsId}\n checked={terms}\n onCheckedChange={(checked) =>\n handleTermsChange(checked === true)\n }\n disabled={busy}\n />\n <Label htmlFor={termsId} className=\"font-normal\">\n I agree to the{\" \"}\n {termsComponent ?? (\n <Button variant=\"link\" type=\"button\" onClick={onTerms}>\n terms\n </Button>\n )}\n </Label>\n </div>\n )}\n <AuthError message={error} />\n <Button\n className={cn(\"w-full\", accent && authAccentActionStyles)}\n type=\"submit\"\n loading={status === \"loading\"}\n disabled={busy}\n >\n Create account\n </Button>\n </form>\n </div>\n )}\n </MorphStep>\n </AuthCard>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n getPasswordStrength,\n PasswordInput,\n} from \"@/components/composed/password-input\";\nimport { Button } from \"@/components/ui/button\";\nimport { Field, FieldLabel } from \"@/components/ui/field\";\nimport { authAccentActionStyles } from \"@/lib/auth-accent\";\nimport { cn } from \"@/lib/utils\";\nimport {\n AuthCard,\n AuthError,\n AuthSuccess,\n MorphStep,\n Reveal,\n} from \"./auth-shell\";\nimport type { IUpdatePasswordBlockProps, TAuthStatus } from \"./type\";\n\n/**\n * Password change form for an already-authenticated user: a strength-metered\n * new password gates the confirm field, which in turn gates the submit\n * button. Mismatch is caught client-side; everything else comes back as a\n * rejection from `onSubmit`.\n */\nexport function UpdatePasswordBlock({\n title = \"Update your password\",\n description = \"Choose a new password for your account\",\n logo,\n accent,\n minStrength = 4,\n onSubmit,\n onDone,\n}: IUpdatePasswordBlockProps) {\n const passwordId = React.useId();\n const confirmId = React.useId();\n const [status, setStatus] = React.useState<TAuthStatus>(\"idle\");\n const [error, setError] = React.useState<string | null>(null);\n const [password, setPassword] = React.useState(\"\");\n const [confirmPassword, setConfirmPassword] = React.useState(\"\");\n\n // Progressive disclosure, matching the signup block: the confirm field\n // appears once the new password clears the policy, the submit button once\n // the two match.\n const strongEnough = getPasswordStrength(password) >= minStrength;\n const matches = confirmPassword.length > 0 && confirmPassword === password;\n const canSubmit = strongEnough && matches;\n\n // Only flag a mismatch once the confirmation has diverged — while it is\n // still a prefix of the new password the user is simply mid-keystroke, and\n // nagging on every character would shake the field the whole way through.\n const mismatch =\n confirmPassword.length > 0 && !password.startsWith(confirmPassword);\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n // Enter in any field submits the form even while the button is hidden.\n if (!canSubmit) return;\n setError(null);\n setStatus(\"loading\");\n try {\n await onSubmit?.({ password });\n setStatus(\"success\");\n } catch (cause) {\n setStatus(\"idle\");\n setError(\n cause instanceof Error ? cause.message : \"Unable to update password.\",\n );\n }\n }\n\n return (\n <AuthCard\n title={title}\n description={description}\n logo={logo}\n accent={accent}\n >\n <MorphStep step={status === \"success\" ? \"success\" : \"form\"}>\n {status === \"success\" ? (\n <AuthSuccess\n title=\"Password updated\"\n description=\"Your password has been changed successfully.\"\n >\n {onDone && (\n <Button variant=\"link\" onClick={onDone}>\n Continue\n </Button>\n )}\n </AuthSuccess>\n ) : (\n <form className=\"flex flex-col gap-4\" onSubmit={handleSubmit}>\n <Field name=\"password\">\n <FieldLabel htmlFor={passwordId}>New password</FieldLabel>\n <PasswordInput\n id={passwordId}\n name=\"password\"\n autoComplete=\"new-password\"\n required\n showStrength\n disabled={status === \"loading\"}\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n </Field>\n <Reveal show={strongEnough}>\n <Field name=\"confirmPassword\">\n <FieldLabel htmlFor={confirmId}>Confirm new password</FieldLabel>\n <PasswordInput\n id={confirmId}\n name=\"confirmPassword\"\n autoComplete=\"new-password\"\n required\n disabled={status === \"loading\"}\n value={confirmPassword}\n onChange={(event) => setConfirmPassword(event.target.value)}\n />\n </Field>\n </Reveal>\n <AuthError\n message={error ?? (mismatch ? \"Passwords do not match.\" : null)}\n />\n <Reveal show={canSubmit}>\n <Button\n className={cn(\"w-full\", accent && authAccentActionStyles)}\n type=\"submit\"\n loading={status === \"loading\"}\n >\n Update password\n </Button>\n </Reveal>\n </form>\n )}\n </MorphStep>\n </AuthCard>\n );\n}\n","/**\n * Session state for the auth blocks — singleton atoms, deliberately NOT a\n * family.\n *\n * A session is one-per-store: one signed-in user per app (per\n * `ExegiaProvider` store; SSR isolation comes from passing a fresh store).\n * Instance keying is for multi-instance components; a family here would\n * imply several concurrent users and be a lie.\n *\n * Import direction: this module is the LEAF — it imports nothing from\n * `auth-flow-atom.ts`. The flow module imports `signInAtom` from here (for\n * `completeAuthFlowAtom`) and defines the composite `endAuthSessionAtom`\n * that pairs `signOutAtom` with a flow reset. `signOutAtom` below clears the\n * session only.\n */\nimport { atom } from \"jotai\"\n\nimport type {\n IAuthSessionState,\n TAuthSessionStatus,\n IAuthUser,\n} from \"./type\"\n\n// ── primitives ───────────────────────────────────────────────────────────\n\n/** `\"unknown\"` until the app restores or rejects a session at boot. */\nexport const authSessionStatusAtom = atom<TAuthSessionStatus>(\"unknown\")\nauthSessionStatusAtom.debugLabel = \"auth-session/status\"\n\nexport const authUserAtom = atom<IAuthUser | null>(null)\nauthUserAtom.debugLabel = \"auth-session/user\"\n\n// ── derived ──────────────────────────────────────────────────────────────\n\nexport const isAuthenticatedAtom = atom(\n (get) => get(authSessionStatusAtom) === \"authenticated\"\n)\nisAuthenticatedAtom.debugLabel = \"auth-session/isAuthenticated\"\n\nexport const authSessionStateAtom = atom<IAuthSessionState>((get) => ({\n status: get(authSessionStatusAtom),\n user: get(authUserAtom),\n}))\nauthSessionStateAtom.debugLabel = \"auth-session/state\"\n\n// ── actions ──────────────────────────────────────────────────────────────\n\nexport const signInAtom = atom(null, (_get, set, user: IAuthUser) => {\n set(authUserAtom, user)\n set(authSessionStatusAtom, \"authenticated\")\n})\nsignInAtom.debugLabel = \"auth-session/signIn\"\n\nexport const updateAuthUserAtom = atom(\n null,\n (get, set, patch: Partial<IAuthUser>) => {\n const user = get(authUserAtom)\n // No-op when signed out: there is no user to merge into, and inventing\n // one from a partial patch would fabricate an identity.\n if (user === null) return\n set(authUserAtom, { ...user, ...patch })\n }\n)\nupdateAuthUserAtom.debugLabel = \"auth-session/updateUser\"\n\n/** What an app calls at boot when session restore fails. */\nexport const markUnauthenticatedAtom = atom(null, (_get, set) => {\n set(authSessionStatusAtom, \"unauthenticated\")\n set(authUserAtom, null)\n})\nmarkUnauthenticatedAtom.debugLabel = \"auth-session/markUnauthenticated\"\n\n/**\n * Clears the session only. Most consumers want `endAuthSessionAtom` from\n * `auth-flow-atom.ts` instead, which also returns the default flow to the\n * login step — the hooks expose that one as `signOut`.\n */\nexport const signOutAtom = atom(null, (_get, set) => {\n set(authUserAtom, null)\n set(authSessionStatusAtom, \"unauthenticated\")\n})\nsignOutAtom.debugLabel = \"auth-session/signOut\"\n","/**\n * Per-instance Jotai state for the auth flow — which auth block the app is\n * showing, the identifier in flight, and the attempt status.\n *\n * Every atom is a module-level family keyed by a flow id, so one\n * `ExegiaProvider` at the app root is enough: a modal login and a full-page\n * login can coexist in one store, and any component can drive a flow by id\n * without holding a controller. Most apps have one flow and use\n * `DEFAULT_AUTH_FLOW_ID`.\n *\n * This is a coordination layer only. The auth blocks keep passwords, codes\n * and field values in local `useState` on purpose — never store those here.\n *\n * Import direction: `auth-session-atom.ts` is the LEAF. This module imports\n * `signInAtom` from it (`completeAuthFlowAtom` signs the session in) and\n * defines the composite `endAuthSessionAtom`; the session module never\n * imports from here.\n */\nimport { atom } from \"jotai\"\nimport type { Getter, Setter } from \"jotai\"\n\nimport { signInAtom, signOutAtom } from \"./auth-session-atom\"\nimport type {\n TAuthStatus,\n TAuthFlowChannel,\n TAuthFlowId,\n IAuthFlowState,\n TAuthFlowStep,\n IAuthUser,\n IBeginAuthVerificationOptions,\n} from \"./type\"\n\nexport const DEFAULT_AUTH_FLOW_ID: TAuthFlowId = \"default\"\n\n/**\n * A string-keyed atom family (same in-house shape as `tree-atom.ts`:\n * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, and we need only\n * the string-keyed case with a `remove`). Dropping a key lets the store's\n * WeakMap release that instance's state.\n */\ntype TFamily<AtomType> = ((id: TAuthFlowId) => AtomType) & {\n remove: (id: TAuthFlowId) => void\n}\n\n/** Every family, so `removeAuthFlowInstance` can drop an id from all. */\nconst families: { remove: (id: TAuthFlowId) => void }[] = []\n\nfunction keyed<AtomType>(create: (id: TAuthFlowId) => AtomType) {\n const cache = new Map<TAuthFlowId, AtomType>()\n const family = ((id: TAuthFlowId) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id: TAuthFlowId) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `auth-flow/${id}/${name}`\n return instance\n })\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TAuthFlowId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id))\n instance.debugLabel = `auth-flow/${id}/${name}`\n return instance\n })\n}\n\nfunction actionFamily<Args extends unknown[]>(\n name: string,\n write: (get: Getter, set: Setter, id: TAuthFlowId, ...args: Args) => void\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n )\n instance.debugLabel = `auth-flow/${id}/${name}`\n return instance\n })\n}\n\n// ── masking ──────────────────────────────────────────────────────────────\n\n/**\n * Mask an identifier for display. Email → first character of the local part\n * plus `\"•••\"`, domain intact (`\"y•••@example.com\"`; a 1-char local part\n * still gets `\"y•••@…\"`). Non-email (sms) → `\"•••\"` + last 4 characters;\n * fewer than 4 characters masks everything as `\"•••\"`.\n */\nexport function maskAuthIdentifier(identifier: string): string {\n const at = identifier.indexOf(\"@\")\n if (at > 0) return `${identifier[0]}•••${identifier.slice(at)}`\n // At 4 characters or fewer, \"keep the last 4\" would reveal the whole\n // identifier while implying redaction — mask everything instead.\n if (identifier.length <= 4) return \"•••\"\n return `•••${identifier.slice(-4)}`\n}\n\n// ── primitives ───────────────────────────────────────────────────────────\n\nexport const authFlowStepAtom = stateFamily<TAuthFlowStep>(\"step\", \"login\")\n\n/** An email or phone number in flight — never a password or a code. */\nexport const authFlowIdentifierAtom = stateFamily<string | null>(\n \"identifier\",\n null\n)\n\nexport const authFlowChannelAtom = stateFamily<TAuthFlowChannel>(\n \"channel\",\n \"email\"\n)\n\nexport const authFlowStatusAtom = stateFamily<TAuthStatus>(\"status\", \"idle\")\n\nexport const authFlowErrorAtom = stateFamily<string | null>(\"error\", null)\n\n// ── derived ──────────────────────────────────────────────────────────────\n\n/** `identifier` masked for display, `null` while nothing is in flight. */\nexport const authFlowMaskedIdentifierAtom = readFamily<string | null>(\n \"maskedIdentifier\",\n (get, id) => {\n const identifier = get(authFlowIdentifierAtom(id))\n return identifier === null ? null : maskAuthIdentifier(identifier)\n }\n)\n\nexport const authFlowStateAtom = readFamily<IAuthFlowState>(\n \"state\",\n (get, id) => ({\n step: get(authFlowStepAtom(id)),\n identifier: get(authFlowIdentifierAtom(id)),\n maskedIdentifier: get(authFlowMaskedIdentifierAtom(id)),\n channel: get(authFlowChannelAtom(id)),\n status: get(authFlowStatusAtom(id)),\n error: get(authFlowErrorAtom(id)),\n })\n)\n\n// ── actions ──────────────────────────────────────────────────────────────\n\n/** Show a step with a clean slate (`\"idle\"`, no error). Keeps the\n * identifier so \"back to verify\" flows don't lose the destination. */\nexport const goToAuthStepAtom = actionFamily<[step: TAuthFlowStep]>(\n \"goToStep\",\n (_get, set, id, step) => {\n set(authFlowStepAtom(id), step)\n set(authFlowStatusAtom(id), \"idle\")\n set(authFlowErrorAtom(id), null)\n }\n)\n\n/** Record the identifier in flight and move to the verification step. */\nexport const beginAuthVerificationAtom = actionFamily<\n [options: IBeginAuthVerificationOptions]\n>(\n \"beginVerification\",\n (_get, set, id, { identifier, channel = \"email\", step = \"verify-code\" }) => {\n set(authFlowIdentifierAtom(id), identifier)\n set(authFlowChannelAtom(id), channel)\n set(authFlowStepAtom(id), step)\n set(authFlowStatusAtom(id), \"idle\")\n set(authFlowErrorAtom(id), null)\n }\n)\n\n/** Mark the flow `\"loading\"` while an async attempt is in flight. */\nexport const beginAuthAttemptAtom = actionFamily<[]>(\n \"beginAttempt\",\n (_get, set, id) => {\n set(authFlowStatusAtom(id), \"loading\")\n set(authFlowErrorAtom(id), null)\n }\n)\n\nexport const failAuthFlowAtom = actionFamily<[message: string]>(\n \"fail\",\n (_get, set, id, message) => {\n set(authFlowStatusAtom(id), \"error\")\n set(authFlowErrorAtom(id), message)\n }\n)\n\n/** Mark the flow `\"success\"` and land on the success step. When `user` is\n * given, also sign the session in — one atomic write for the whole\n * \"verification passed\" transition. */\nexport const completeAuthFlowAtom = actionFamily<[user?: IAuthUser]>(\n \"complete\",\n (_get, set, id, user) => {\n set(authFlowStatusAtom(id), \"success\")\n set(authFlowErrorAtom(id), null)\n set(authFlowStepAtom(id), \"success\")\n if (user) set(signInAtom, user)\n }\n)\n\n/** Back to the initial values (login step, no identifier, `\"email\"`,\n * `\"idle\"`, no error). */\nexport const resetAuthFlowAtom = actionFamily<[]>(\"reset\", (_get, set, id) => {\n set(authFlowStepAtom(id), \"login\")\n set(authFlowIdentifierAtom(id), null)\n set(authFlowChannelAtom(id), \"email\")\n set(authFlowStatusAtom(id), \"idle\")\n set(authFlowErrorAtom(id), null)\n})\n\n/**\n * Sign out and return the default flow to the login step — the one to wire\n * to a logout button. `useAuthSessionActions().signOut` is this atom;\n * `signOutAtom` in `auth-session-atom.ts` clears the session only.\n */\nexport const endAuthSessionAtom = atom(null, (_get, set) => {\n set(signOutAtom)\n set(resetAuthFlowAtom(DEFAULT_AUTH_FLOW_ID))\n})\nendAuthSessionAtom.debugLabel = \"auth-flow/endAuthSession\"\n\n/** Drop every atom for `id`. Call on teardown of an explicit flow id; the\n * default flow usually just gets `resetAuthFlowAtom`. */\nexport function removeAuthFlowInstance(id: TAuthFlowId): void {\n for (const family of families) family.remove(id)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n DEFAULT_AUTH_FLOW_ID,\n authFlowStateAtom,\n beginAuthAttemptAtom,\n beginAuthVerificationAtom,\n completeAuthFlowAtom,\n endAuthSessionAtom,\n failAuthFlowAtom,\n goToAuthStepAtom,\n resetAuthFlowAtom,\n} from \"./auth-flow-atom\"\nimport {\n authSessionStateAtom,\n isAuthenticatedAtom,\n markUnauthenticatedAtom,\n signInAtom,\n updateAuthUserAtom,\n} from \"./auth-session-atom\"\nimport type {\n IAuthFlowActions,\n TAuthFlowId,\n IAuthFlowState,\n IAuthSessionActions,\n IAuthSessionState,\n} from \"./type\"\n\n/**\n * Read the auth flow registered under `flowId` from anywhere below\n * `ExegiaProvider`. Pairs with `useAuthFlowActions` to wire the auth blocks\n * into one flow — the blocks keep passwords and codes in local state, the\n * flow tracks which block shows and what identifier is in flight:\n *\n * ```tsx\n * const flow = useAuthFlow()\n * const { beginVerification, complete, fail } = useAuthFlowActions()\n *\n * {flow.step === \"login\" && (\n * <LoginBlock\n * onSubmit={async ({ email }) => {\n * await api.requestCode(email)\n * beginVerification({ identifier: email })\n * }}\n * />\n * )}\n * {flow.step === \"verify-code\" && (\n * <CodeAuthBlock\n * destination={flow.maskedIdentifier ?? undefined}\n * onVerify={async (code) => complete(await api.verify(code))}\n * />\n * )}\n * ```\n *\n * This returns the whole state object, so the caller re-renders on any\n * change. A component that reads one field should subscribe to that field's\n * atom instead: `useAtomValue(authFlowStepAtom(flowId))`.\n */\nexport function useAuthFlow(\n flowId: TAuthFlowId = DEFAULT_AUTH_FLOW_ID\n): IAuthFlowState {\n return useAtomValue(authFlowStateAtom(flowId))\n}\n\n/**\n * Drive the auth flow registered under `flowId` from anywhere. Writes only —\n * the caller never re-renders when the flow changes. See `useAuthFlow` for\n * the intended wiring; a block's submit handler typically runs\n * `beginAttempt()` → the API call → `complete(user)` or `fail(message)`.\n */\nexport function useAuthFlowActions(\n flowId: TAuthFlowId = DEFAULT_AUTH_FLOW_ID\n): IAuthFlowActions {\n const goToStep = useSetAtom(goToAuthStepAtom(flowId))\n const beginVerification = useSetAtom(beginAuthVerificationAtom(flowId))\n const beginAttempt = useSetAtom(beginAuthAttemptAtom(flowId))\n const fail = useSetAtom(failAuthFlowAtom(flowId))\n const complete = useSetAtom(completeAuthFlowAtom(flowId))\n const reset = useSetAtom(resetAuthFlowAtom(flowId))\n\n return React.useMemo(\n () => ({\n goToStep,\n beginVerification,\n beginAttempt,\n fail,\n complete,\n reset,\n }),\n [goToStep, beginVerification, beginAttempt, fail, complete, reset]\n )\n}\n\n/**\n * Read the session: `status` (`\"unknown\"` until the app restores or rejects\n * a session at boot), the signed-in `user`, and derived `isAuthenticated`.\n */\nexport function useAuthSession(): IAuthSessionState & {\n isAuthenticated: boolean\n} {\n const state = useAtomValue(authSessionStateAtom)\n const isAuthenticated = useAtomValue(isAuthenticatedAtom)\n return React.useMemo(\n () => ({ ...state, isAuthenticated }),\n [state, isAuthenticated]\n )\n}\n\n/**\n * Drive the session. Writes only. `signOut` is the composite\n * `endAuthSessionAtom`: it clears the session AND returns the default flow\n * to the login step — the one to wire to a logout button.\n */\nexport function useAuthSessionActions(): IAuthSessionActions {\n const signIn = useSetAtom(signInAtom)\n const updateUser = useSetAtom(updateAuthUserAtom)\n const markUnauthenticated = useSetAtom(markUnauthenticatedAtom)\n const signOut = useSetAtom(endAuthSessionAtom)\n\n return React.useMemo(\n () => ({ signIn, updateUser, markUnauthenticated, signOut }),\n [signIn, updateUser, markUnauthenticated, signOut]\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { MotionConfig } from \"motion/react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { AuthCard, AuthSuccess, MorphStep } from \"./auth-shell\"\nimport { CodeAuthBlock } from \"./code-auth-block\"\nimport {\n ForgotPasswordBlock,\n} from \"./forgot-password-block\"\nimport { LoginBlock } from \"./login-block\"\nimport {\n OnboardingBlock,\n} from \"./onboarding-block\"\nimport { SignupBlock } from \"./signup-block\"\nimport {\n UpdatePasswordBlock,\n} from \"./update-password-block\"\nimport { useAuthFlow, useAuthFlowActions } from \"./use-auth-state\"\nimport type { IAuthFlowBlockProps, TAuthFlowDirective, TAuthFlowHandler } from \"./type\"\n\n/**\n * Where the flow goes after a step callback resolves. Returned from every\n * `AuthFlowBlock` handler:\n *\n * - `{ user }` — the attempt signed someone in: mark the flow complete AND\n * sign the session in (one atomic write, `completeAuthFlowAtom`).\n * - `{ verify }` — a code went out: record the identifier and move to the\n * verification step (`beginAuthVerificationAtom`).\n * - `{ step }` — plain navigation with a clean slate (`goToAuthStepAtom`).\n * - `void` — stay put; the block renders its own success state.\n *\n * Rejections are NOT handled here — they propagate back into the block,\n * which owns its transient error/shake state (see `react/CLAUDE.md`,\n * \"Third implementation: auth\").\n */\n\n/**\n * Renders the right auth block for the flow's current step with the store\n * wiring built in — the switchboard every host app was hand-rolling around\n * `useAuthFlow`. Navigation links between steps (login ↔ signup, forgot\n * password, back from verification) are pre-wired to `goToStep`; each\n * submit-shaped prop awaits your handler and applies the returned\n * {@link TAuthFlowDirective}.\n *\n * The blocks themselves stay untouched: passwords, codes and field drafts\n * live in their local state, and a rejected handler renders as the block's\n * own error — the orchestrator never mirrors transients into the store.\n * Needs `ExegiaProvider` above it, like every stateful block.\n *\n * ```tsx\n * <AuthFlowBlock\n * onLogin={async ({ email, password }) => {\n * const outcome = await api.signIn(email, password)\n * return outcome.mfa ? { verify: { identifier: email } } : { user: outcome.user }\n * }}\n * onVerifyCode={async (code) => ({ user: await api.verify(code) })}\n * />\n * ```\n */\nexport function AuthFlowBlock({\n flowId,\n logo,\n accent,\n providers,\n onLogin,\n onSignup,\n onProviderSelect,\n onRequestReset,\n onVerifyCode,\n onResendCode,\n onUpdatePassword,\n onOnboardingComplete,\n onboardingSteps,\n steps,\n renderStep,\n success,\n successTitle = \"Welcome\",\n successDescription,\n className,\n}: IAuthFlowBlockProps): React.ReactElement {\n const flow = useAuthFlow(flowId)\n const { goToStep, beginVerification, complete } = useAuthFlowActions(flowId)\n\n const apply = React.useCallback(\n (directive: TAuthFlowDirective) => {\n if (!directive) return\n if (\"user\" in directive) complete(directive.user)\n else if (\"verify\" in directive) beginVerification(directive.verify)\n else goToStep(directive.step)\n },\n [complete, beginVerification, goToStep]\n )\n\n /** Wrap a handler so its directive lands in the store. Errors propagate —\n * the block owns the error rendering. Absent handlers stay absent, so a\n * block keeps its \"no handler\" affordances (hidden buttons etc.). */\n function run<Data>(handler: TAuthFlowHandler<Data> | undefined) {\n if (!handler) return undefined\n return async (data: Data) => {\n apply(await handler(data))\n }\n }\n\n const content = ((): React.ReactNode => {\n const custom = renderStep?.(flow.step, flow)\n if (custom !== undefined) return custom\n\n switch (flow.step) {\n case \"login\":\n return (\n <LoginBlock\n logo={logo}\n accent={accent}\n providers={providers}\n onSubmit={run(onLogin)}\n onProviderSelect={run(onProviderSelect)}\n onForgotPassword={() => goToStep(\"forgot-password\")}\n onSignup={() => goToStep(\"signup\")}\n {...steps?.login}\n />\n )\n case \"signup\":\n return (\n <SignupBlock\n logo={logo}\n accent={accent}\n providers={providers}\n onSubmit={run(onSignup)}\n onProviderSelect={run(onProviderSelect)}\n onLogin={() => goToStep(\"login\")}\n {...steps?.signup}\n />\n )\n case \"verify-code\":\n return (\n <CodeAuthBlock\n logo={logo}\n accent={accent}\n channel={flow.channel}\n destination={flow.maskedIdentifier ?? undefined}\n onVerify={run(onVerifyCode)}\n onResend={run(onResendCode)}\n onBack={() => goToStep(\"login\")}\n {...steps?.[\"verify-code\"]}\n />\n )\n case \"forgot-password\":\n return (\n <ForgotPasswordBlock\n logo={logo}\n accent={accent}\n onSubmit={run(onRequestReset)}\n onBackToLogin={() => goToStep(\"login\")}\n {...steps?.[\"forgot-password\"]}\n />\n )\n case \"update-password\":\n return (\n <UpdatePasswordBlock\n logo={logo}\n accent={accent}\n onSubmit={run(onUpdatePassword)}\n onDone={() => goToStep(\"login\")}\n {...steps?.[\"update-password\"]}\n />\n )\n case \"onboarding\":\n return (\n <OnboardingBlock\n logo={logo}\n accent={accent}\n steps={onboardingSteps}\n onComplete={run(onOnboardingComplete)}\n // The flow's success step is the completion screen — showing the\n // block's own too would stack two checkmarks.\n showCompleteScreen={false}\n {...steps?.onboarding}\n />\n )\n case \"success\":\n return (\n success ?? (\n // Header names the moment, the check screen names the outcome —\n // the same split the onboarding block's completion screen uses.\n <AuthCard title={successTitle} logo={logo} accent={accent}>\n <AuthSuccess\n title=\"You're signed in\"\n description={successDescription}\n />\n </AuthCard>\n )\n )\n }\n })()\n\n return (\n <MotionConfig reducedMotion=\"user\">\n <div\n className={cn(\"flex w-full justify-center\", className)}\n data-slot=\"auth-flow\"\n data-step={flow.step}\n >\n <MorphStep step={flow.step} className=\"flex w-full justify-center\">\n {content}\n </MorphStep>\n </div>\n </MotionConfig>\n )\n}\n","\"use client\"\n\nimport { AnimatePresence, MotionConfig, motion } from \"motion/react\"\nimport * as React from \"react\"\n\nimport {\n SOCIAL_PROVIDERS,\n} from \"@/components/composed/social-providers\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardDescription,\n CardHeader,\n CardPanel,\n CardTitle,\n} from \"@/components/ui/card\"\nimport { Spinner } from \"@/components/ui/spinner\"\nimport { cn } from \"@/lib/utils\"\nimport { AuthError, EASE } from \"./auth-shell\"\nimport type { ILinkedAccountsBlockProps } from \"./type\"\nimport type { TSocialProvider } from \"@/components/composed/types\"\nimport { Users2 } from \"lucide-react\"\n\n\nconst LAST_METHOD_EXPLANATION =\n \"This is your only way to sign in, so it can't be disconnected.\"\n\n/**\n * Settings panel for the sign-in identities attached to an account: lists the\n * connected ones, offers connect buttons for the rest, and guards the last\n * remaining method from being disconnected — the guard is a disabled button\n * plus an explanation rather than an error after the fact.\n */\nexport function LinkedAccountsBlock({\n title = \"Connected accounts\",\n description = \"Manage the accounts you can use to sign in.\",\n identities = [],\n providers = [\"google\", \"apple\", \"github\"],\n loading = false,\n hasOtherSignInMethods = false,\n onLink,\n onUnlink,\n className,\n}: ILinkedAccountsBlockProps) {\n const noteId = React.useId()\n const [error, setError] = React.useState<string | null>(null)\n const [linking, setLinking] = React.useState<TSocialProvider | null>(null)\n const [unlinking, setUnlinking] = React.useState<string | null>(null)\n\n const connected = new Set(identities.map((identity) => identity.provider))\n const connectable = providers.filter((provider) => !connected.has(provider))\n const busy = linking !== null || unlinking !== null\n // The backend rule, enforced here so we never fire a request that would\n // remove the account's only way in. An off-list method (a password) keeps\n // the account reachable, so it lifts the guard.\n const lastMethod = !hasOtherSignInMethods && identities.length <= 1\n\n async function connect(provider: TSocialProvider) {\n if (busy) return\n setError(null)\n setLinking(provider)\n try {\n await onLink?.(provider)\n } catch (cause) {\n setError(\n cause instanceof Error ? cause.message : \"Unable to connect account.\"\n )\n } finally {\n setLinking(null)\n }\n }\n\n async function disconnect(id: string) {\n if (busy || lastMethod) return\n setError(null)\n setUnlinking(id)\n try {\n await onUnlink?.(id)\n } catch (cause) {\n setError(\n cause instanceof Error ? cause.message : \"Unable to disconnect account.\"\n )\n } finally {\n setUnlinking(null)\n }\n }\n\n return (\n <MotionConfig reducedMotion=\"user\">\n <Card className={cn(\"w-full\", className)} data-slot=\"auth-block\">\n <CardHeader>\n <CardTitle className=\"inline-flex items-center gap-1\"><Users2 size={18} /> {title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardPanel>\n {loading ? (\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Spinner className=\"size-4\" />\n Loading connected accounts…\n </div>\n ) : (\n <motion.div\n layout\n transition={{ duration: 0.3, ease: EASE }}\n className=\"flex flex-col gap-3\"\n >\n <AuthError message={error} />\n\n {identities.length > 0 ? (\n <ul\n aria-label=\"Connected accounts\"\n className=\"flex flex-col gap-2\"\n >\n <AnimatePresence initial={false}>\n {identities.map((identity, index) => {\n const { label, BrandIcon, brandClassName } =\n SOCIAL_PROVIDERS[identity.provider]\n return (\n <motion.li\n key={identity.id}\n layout\n className=\"flex items-center justify-between gap-3 rounded-md border px-3 py-2\"\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n // 40ms per row, capped so a long identity list never\n // leaves the last row arriving noticeably late.\n transition={{\n duration: 0.25,\n ease: EASE,\n delay: Math.min(index, 5) * 0.04,\n }}\n >\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <BrandIcon\n aria-hidden=\"true\"\n className={cn(\"size-4\", brandClassName)}\n />\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium\">\n {label}\n </span>\n {identity.email && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {identity.email}\n </span>\n )}\n </div>\n </div>\n <Button\n aria-describedby={lastMethod ? noteId : undefined}\n aria-label={`Disconnect ${label}`}\n size=\"sm\"\n type=\"button\"\n variant=\"destructive-outline\"\n disabled={busy || lastMethod}\n loading={unlinking === identity.id}\n onClick={() => void disconnect(identity.id)}\n >\n Disconnect\n </Button>\n </motion.li>\n )\n })}\n </AnimatePresence>\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">\n No sign-in methods connected yet.\n </p>\n )}\n\n {lastMethod && identities.length > 0 && (\n <p className=\"text-xs text-muted-foreground\" id={noteId}>\n {LAST_METHOD_EXPLANATION}\n </p>\n )}\n\n {connectable.map((provider) => {\n const { label, BrandIcon, brandClassName, buttonClassName, labelClassName } =\n SOCIAL_PROVIDERS[provider]\n return (\n <Button\n key={provider}\n className={cn(\"w-full\", buttonClassName)}\n type=\"button\"\n variant=\"outline\"\n disabled={busy}\n loading={linking === provider}\n onClick={() => void connect(provider)}\n >\n <BrandIcon aria-hidden=\"true\" className={brandClassName} />\n <span className={cn(\"flex-1\", labelClassName)}>Connect {label}</span>\n </Button>\n )\n })}\n </motion.div>\n )}\n </CardPanel>\n </Card>\n </MotionConfig>\n )\n}\n","\"use client\"\n\nimport { Fingerprint, KeyRoundIcon, Plus } from \"lucide-react\"\nimport { AnimatePresence, MotionConfig, motion } from \"motion/react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardDescription,\n CardHeader,\n CardPanel,\n CardTitle,\n} from \"@/components/ui/card\"\nimport { Field, FieldError, FieldLabel } from \"@/components/ui/field\"\nimport { Input } from \"@/components/ui/input\"\nimport { Spinner } from \"@/components/ui/spinner\"\nimport { cn } from \"@/lib/utils\"\nimport { AuthError, EASE, Reveal } from \"./auth-shell\"\nimport type { IPasskeyManagerBlockProps, IPasskeyRecord } from \"./type\"\n\n\n\nconst NAME_MAX = 120\n\nconst LAST_PASSKEY_WARNING =\n \"This is your last passkey. After deleting it you won't be able to sign in with a passkey until you register a new one.\"\n\nfunction formatDate(iso: string | null | undefined): string | null {\n if (!iso) return null\n const date = new Date(iso)\n return Number.isNaN(date.getTime()) ? null : date.toLocaleDateString()\n}\n\n/**\n * Settings panel for the passkeys on an account: register, inline rename with\n * field-level validation, and delete behind an explicit confirmation. Deleting\n * the last passkey is allowed — it is the account's passkey method that goes\n * away, not its only way in — so the confirmation carries a warning instead of\n * a block.\n */\nexport function PasskeyManagerBlock({\n title = \"Passkeys\",\n description = \"Sign in without a password using your device's biometrics or security key.\",\n passkeys = [],\n available = true,\n loading = false,\n onRegister,\n onRename,\n onDelete,\n className,\n}: IPasskeyManagerBlockProps) {\n const [error, setError] = React.useState<string | null>(null)\n const [busy, setBusy] = React.useState(false)\n const [registering, setRegistering] = React.useState(false)\n const [renamingId, setRenamingId] = React.useState<string | null>(null)\n const [renameValue, setRenameValue] = React.useState(\"\")\n const [renameError, setRenameError] = React.useState<string | null>(null)\n const [confirmingId, setConfirmingId] = React.useState<string | null>(null)\n\n const lastPasskey = passkeys.length === 1\n\n async function run(action: () => Promise<unknown> | unknown) {\n if (busy) return { ok: false } as const\n setError(null)\n setBusy(true)\n try {\n const result = await action()\n return { ok: true, result } as const\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Something went wrong.\")\n return { ok: false } as const\n } finally {\n setBusy(false)\n }\n }\n\n async function handleRegister() {\n setRegistering(true)\n await run(() => onRegister?.())\n setRegistering(false)\n }\n\n function startRename(passkey: IPasskeyRecord) {\n setConfirmingId(null)\n setRenamingId(passkey.id)\n setRenameValue(passkey.name ?? \"\")\n setRenameError(null)\n }\n\n async function submitRename(id: string) {\n const name = renameValue.trim()\n if (name.length < 1 || name.length > NAME_MAX) {\n setRenameError(`Name must be between 1 and ${NAME_MAX} characters.`)\n return\n }\n const outcome = await run(() => onRename?.(id, name))\n if (!outcome.ok) return\n setRenamingId(null)\n setRenameError(null)\n }\n\n async function confirmDelete(id: string) {\n const outcome = await run(() => onDelete?.(id))\n setConfirmingId(null)\n if (!outcome.ok) return\n if (renamingId === id) setRenamingId(null)\n }\n\n return (\n <MotionConfig reducedMotion=\"user\">\n <Card className={cn(\"w-full\", className)} data-slot=\"auth-block\">\n <CardHeader>\n <CardTitle className=\"inline-flex items-center gap-1\"><Fingerprint size={18} /> {title}</CardTitle>\n <CardDescription>{description}</CardDescription>\n </CardHeader>\n <CardPanel>\n {!available ? (\n <p className=\"text-sm text-muted-foreground\">\n Passkeys aren't available on this device. You can manage them\n from a device that supports passkeys.\n </p>\n ) : loading ? (\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Spinner className=\"size-4\" />\n Loading passkeys…\n </div>\n ) : (\n <motion.div\n layout\n transition={{ duration: 0.3, ease: EASE }}\n className=\"flex flex-col gap-3\"\n >\n <AuthError message={error} />\n\n {passkeys.length > 0 ? (\n <ul aria-label=\"Passkeys\" className=\"flex flex-col gap-2\">\n <AnimatePresence initial={false}>\n {passkeys.map((passkey, index) => {\n const name = passkey.name ?? \"Passkey\"\n const created = formatDate(passkey.createdAt)\n const lastUsed = formatDate(passkey.lastUsedAt)\n return (\n <motion.li\n key={passkey.id}\n layout\n className=\"flex flex-col gap-2 rounded-md border px-3 py-2\"\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n // 40ms per row, capped so a long list never leaves\n // the last row arriving noticeably late.\n transition={{\n duration: 0.25,\n ease: EASE,\n delay: Math.min(index, 5) * 0.04,\n }}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <span\n aria-hidden=\"true\"\n className=\"grid size-8 shrink-0 place-items-center rounded-md bg-muted text-muted-foreground\"\n >\n <KeyRoundIcon className=\"size-4\" />\n </span>\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium\">\n {name}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {created ? `Added ${created}` : null}\n {created && lastUsed ? \" · \" : null}\n {lastUsed ? `Last used ${lastUsed}` : null}\n </span>\n </div>\n </div>\n <div className=\"flex shrink-0 gap-2\">\n <Button\n aria-label={`Rename ${name}`}\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => startRename(passkey)}\n >\n Rename\n </Button>\n <Button\n aria-label={`Delete ${name}`}\n size=\"sm\"\n type=\"button\"\n variant=\"destructive-outline\"\n disabled={busy}\n onClick={() => {\n setRenamingId(null)\n setConfirmingId(passkey.id)\n }}\n >\n Delete\n </Button>\n </div>\n </div>\n\n <Reveal show={renamingId === passkey.id}>\n <form\n className=\"flex items-start gap-2 pt-1\"\n onSubmit={(event) => {\n event.preventDefault()\n void submitRename(passkey.id)\n }}\n >\n <Field\n className=\"min-w-0 grow\"\n invalid={Boolean(renameError)}\n >\n <FieldLabel className=\"sr-only\">\n Passkey name\n </FieldLabel>\n <Input\n aria-label=\"Passkey name\"\n aria-invalid={renameError ? true : undefined}\n autoFocus\n disabled={busy}\n maxLength={NAME_MAX + 1}\n value={renameValue}\n onChange={(event) =>\n setRenameValue(event.target.value)\n }\n />\n {renameError && (\n <FieldError match>{renameError}</FieldError>\n )}\n </Field>\n <Button size=\"sm\" type=\"submit\" loading={busy}>\n Save\n </Button>\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => setRenamingId(null)}\n >\n Cancel\n </Button>\n </form>\n </Reveal>\n\n <Reveal show={confirmingId === passkey.id}>\n <div\n className=\"flex flex-col gap-2 rounded-md bg-muted/50 p-2\"\n role=\"alertdialog\"\n aria-label={`Confirm deleting ${name}`}\n >\n <p className=\"text-sm\">\n Delete this passkey? It can no longer be used to\n sign in.\n </p>\n {lastPasskey && (\n <p className=\"text-xs text-destructive-foreground\">\n {LAST_PASSKEY_WARNING}\n </p>\n )}\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"destructive\"\n loading={busy}\n onClick={() => void confirmDelete(passkey.id)}\n >\n Delete passkey\n </Button>\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => setConfirmingId(null)}\n >\n Keep it\n </Button>\n </div>\n </div>\n </Reveal>\n </motion.li>\n )\n })}\n </AnimatePresence>\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">\n No passkeys registered yet. Add one to sign in without a\n password.\n </p>\n )}\n\n <Button\n className=\"w-full\"\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n loading={registering}\n onClick={() => void handleRegister()}\n >\n <Plus />\n Add\n </Button>\n </motion.div>\n )}\n </CardPanel>\n </Card>\n </MotionConfig>\n )\n}\n","\"use client\";\n\nimport { FingerprintIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\nimport { AuthError, Reveal } from \"./auth-shell\";\nimport type { IPasskeySignInBlockProps } from \"./type\";\n\n\n/**\n * Passkey sign-in entry point — a single button plus its error state, sized\n * to drop into a login card next to the password form rather than to stand on\n * its own. Renders `null` while passkeys are unavailable.\n */\nexport function PasskeySignInBlock({\n available = true,\n label = \"Sign in with a passkey\",\n onSignIn,\n fallbackHint = \"You can still sign in with your other methods below.\",\n className,\n}: IPasskeySignInBlockProps) {\n const [error, setError] = React.useState<string | null>(null);\n const [loading, setLoading] = React.useState(false);\n\n if (!available) return null;\n\n async function handleClick() {\n if (loading) return;\n setError(null);\n setLoading(true);\n try {\n await onSignIn?.();\n } catch (cause) {\n setError(\n cause instanceof Error\n ? cause.message\n : \"Unable to sign in with a passkey.\",\n );\n } finally {\n setLoading(false);\n }\n }\n\n return (\n <div className={cn(\"flex w-full flex-col gap-2\", className)}>\n <Button\n variant=\"outline\"\n className=\"w-full\"\n type=\"button\"\n loading={loading}\n onClick={() => void handleClick()}\n >\n <FingerprintIcon\n className=\"stroke-pink-700 dark:stroke-pink-400\"\n aria-hidden=\"true\"\n />\n <span className=\"flex-1\">{label}</span>\n </Button>\n <AuthError message={error} />\n <Reveal show={Boolean(error) && Boolean(fallbackHint)}>\n <p className=\"text-xs text-muted-foreground\">{fallbackHint}</p>\n </Reveal>\n </div>\n );\n}\n","import { EASE_OUT } from \"@/lib/ease.ts\"\nimport type { IFlatResource, ISidebarResource, TSidebarResourceDropPosition, ISidebarResourceMove } from \"./type.ts\"\n\nexport const ROW_REVEAL = {\n duration: 0.16,\n ease: EASE_OUT,\n} as const\n\nexport function canContain(item: ISidebarResource) {\n return item.kind === \"folder\" || item.kind === \"project\"\n}\n\nexport function flattenResources(\n items: ISidebarResource[],\n expanded: ReadonlySet<string>,\n depth = 0,\n parentId: string | null = null\n): IFlatResource[] {\n return items.flatMap((item) => {\n const row = { item, depth, parentId }\n if (!item.children?.length || !expanded.has(item.id)) return [row]\n return [\n row,\n ...flattenResources(item.children, expanded, depth + 1, item.id),\n ]\n })\n}\n\nexport function findResource(\n items: ISidebarResource[],\n id: string\n): ISidebarResource | undefined {\n for (const item of items) {\n if (item.id === id) return item\n const child = item.children ? findResource(item.children, id) : undefined\n if (child) return child\n }\n}\n\n\n/** Ids of every ancestor of `id` (nearest last); empty when absent. */\nexport function ancestorIdsOf(\n items: ISidebarResource[],\n id: string\n): string[] {\n const walk = (nodes: ISidebarResource[], trail: string[]): string[] | null => {\n for (const node of nodes) {\n if (node.id === id) return trail\n if (node.children) {\n const found = walk(node.children, [...trail, node.id])\n if (found) return found\n }\n }\n return null\n }\n return walk(items, []) ?? []\n}\n\n/** Ids of every row that can hold children and has some — the set\n * `expandAll` opens. */\nexport function expandableIdsOf(items: ISidebarResource[]): string[] {\n return items.flatMap((item) =>\n item.children?.length && canContain(item)\n ? [item.id, ...expandableIdsOf(item.children)]\n : []\n )\n}\n\nexport function containsResource(item: ISidebarResource, id: string): boolean {\n return (\n item.id === id ||\n item.children?.some((child) => containsResource(child, id)) === true\n );\n}\n\nexport function removeResource(\n items: ISidebarResource[],\n id: string,\n): { items: ISidebarResource[]; removed?: ISidebarResource } {\n let removed: ISidebarResource | undefined;\n const next: ISidebarResource[] = [];\n\n for (const item of items) {\n if (item.id === id) {\n removed = item;\n continue;\n }\n\n if (item.children?.length) {\n const childResult = removeResource(item.children, id);\n if (childResult.removed) {\n removed = childResult.removed;\n next.push({ ...item, children: childResult.items });\n continue;\n }\n }\n\n next.push(item);\n }\n\n return { items: next, removed };\n}\n\nexport function insertResource(\n items: ISidebarResource[],\n resource: ISidebarResource,\n targetId: string | null,\n position: TSidebarResourceDropPosition,\n): ISidebarResource[] {\n if (targetId === null) return [...items, resource];\n\n const next: ISidebarResource[] = [];\n for (const item of items) {\n if (item.id === targetId) {\n if (position === \"before\") next.push(resource, item);\n else if (position === \"after\") next.push(item, resource);\n else next.push({ ...item, children: [...(item.children ?? []), resource] });\n continue;\n }\n\n if (item.children?.length) {\n next.push({\n ...item,\n children: insertResource(item.children, resource, targetId, position),\n });\n } else {\n next.push(item);\n }\n }\n return next;\n}\n\nexport function moveResource(\n items: ISidebarResource[],\n move: ISidebarResourceMove,\n): ISidebarResource[] | null {\n const source = findResource(items, move.itemId);\n if (!source || source.disabled) return null;\n if (move.targetId && containsResource(source, move.targetId)) return null;\n\n const target = move.targetId ? findResource(items, move.targetId) : undefined;\n if (\n move.position === \"inside\" &&\n (!target || target.disabled || !canContain(target))\n )\n return null;\n\n const removed = removeResource(items, move.itemId);\n if (!removed.removed) return null;\n return insertResource(\n removed.items,\n removed.removed,\n move.targetId,\n move.position,\n );\n}\n\nexport function renameResource(\n items: ISidebarResource[],\n id: string,\n label: string,\n): ISidebarResource[] {\n return items.map((item) => ({\n ...item,\n label: item.id === id ? label : item.label,\n children: item.children\n ? renameResource(item.children, id, label)\n : undefined,\n }));\n}\n","/**\n * Per-instance Jotai state for the AI sidebar.\n *\n * Every atom is a module-level family keyed by a sidebar id, so one\n * `ExegiaProvider` at the app root is enough: many sidebars coexist in one\n * store without a provider each, and any component can drive a sidebar by id\n * without holding its controller.\n *\n * Controlled props stay authoritative. `useAISidebar` projects them into\n * these atoms on every commit so the action atoms and remote readers work off\n * current data — a one-way projection, not a second source of truth. The\n * write gates below (`controlsItems`, `controlsActiveId`,\n * `controlsExpandedIds`) are what keep the store from overwriting a prop.\n *\n * DOM nodes are deliberately absent: the roving-focus ref map belongs to the\n * block that renders the rows, not to the store.\n */\nimport { atom } from \"jotai\";\nimport type { Atom, Getter, Setter } from \"jotai\";\n\nimport type {\n IAISidebarConfig,\n IAISidebarHandlers,\n TAISidebarInstanceId,\n IAISidebarSeed,\n IAISidebarState,\n IDropTarget,\n IFlatResource,\n ISidebarResource,\n TSidebarResourceDropPosition,\n ISidebarResourceMove,\n} from \"./type.ts\";\nimport {\n ancestorIdsOf,\n expandableIdsOf,\n findResource,\n flattenResources,\n moveResource,\n renameResource,\n} from \"./utils.ts\";\n\nconst NO_ITEMS: ISidebarResource[] = [];\nconst NO_ROWS: IFlatResource[] = [];\nconst NO_IDS: ReadonlySet<string> = new Set<string>();\nconst NO_HANDLERS: IAISidebarHandlers = {};\n\n/** What a sidebar reads as before `useAISidebar` publishes its options. */\nexport const DEFAULT_AI_SIDEBAR_CONFIG: IAISidebarConfig = {\n controlsItems: false,\n controlsActiveId: false,\n controlsExpandedIds: false,\n};\n\nconst DEFAULT_AI_SIDEBAR_SEED: IAISidebarSeed = {\n items: NO_ITEMS,\n activeId: null,\n focusedId: null,\n expandedIds: [],\n};\n\n/**\n * A string-keyed atom family.\n *\n * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, and we need only\n * the string-keyed case with a `remove` — so this stays in-house rather than\n * adding `jotai-family` as a second Jotai package to keep version-aligned.\n * Dropping a key lets the store's WeakMap release that instance's state.\n */\ntype TFamily<AtomType> = ((id: TAISidebarInstanceId) => AtomType) & {\n remove: (id: TAISidebarInstanceId) => void;\n};\n\n/** Every family, so `removeAISidebarInstance` can drop an id from all. */\nconst families: { remove: (id: TAISidebarInstanceId) => void }[] = [];\n\nfunction keyed<AtomType>(create: (id: TAISidebarInstanceId) => AtomType) {\n const cache = new Map<TAISidebarInstanceId, AtomType>();\n const family = ((id: TAISidebarInstanceId) => {\n let instance = cache.get(id);\n if (instance === undefined) {\n instance = create(id);\n cache.set(id, instance);\n }\n return instance;\n }) as TFamily<AtomType>;\n family.remove = (id: TAISidebarInstanceId) => {\n cache.delete(id);\n };\n families.push(family);\n return family;\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue);\n instance.debugLabel = `ai-sidebar/${id}/${name}`;\n return instance;\n });\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TAISidebarInstanceId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id));\n instance.debugLabel = `ai-sidebar/${id}/${name}`;\n return instance;\n });\n}\n\nfunction actionFamily<Args extends unknown[], Result = void>(\n name: string,\n write: (\n get: Getter,\n set: Setter,\n id: TAISidebarInstanceId,\n ...args: Args\n ) => Result\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n );\n instance.debugLabel = `ai-sidebar/${id}/${name}`;\n return instance;\n });\n}\n\n/**\n * A per-row derived atom, keyed by sidebar and then row id.\n *\n * This is where Jotai earns its place: a row subscribed to\n * `aiSidebarRowExpandedAtom(sidebarId, row.item.id)` re-renders when *its*\n * branch opens and stays put when a sibling's does. Reading the whole\n * controller through props instead re-rendered every row on every hover.\n *\n * The outer family registers for cleanup, so `removeAISidebarInstance` drops\n * all of a sidebar's row atoms with it.\n */\nfunction rowFamily<Value>(\n name: string,\n read: (get: Getter, id: TAISidebarInstanceId, rowId: string) => Value\n) {\n const outer = keyed((id: TAISidebarInstanceId) => {\n const inner = new Map<string, Atom<Value>>();\n return (rowId: string) => {\n let instance = inner.get(rowId);\n if (instance === undefined) {\n instance = atom((get) => read(get, id, rowId));\n instance.debugLabel = `ai-sidebar/${id}/${name}/${rowId}`;\n inner.set(rowId, instance);\n }\n return instance;\n };\n });\n return (id: TAISidebarInstanceId, rowId: string) => outer(id)(rowId);\n}\n\n// ── state ──────────────────────────────────────────────────────────────────\n\n/** @internal */\nexport const aiSidebarConfigAtom = stateFamily<IAISidebarConfig>(\n \"config\",\n DEFAULT_AI_SIDEBAR_CONFIG\n);\n/** @internal Refreshed every commit; nothing subscribes, so it is free. */\nexport const aiSidebarHandlersAtom = stateFamily<IAISidebarHandlers>(\n \"handlers\",\n NO_HANDLERS\n);\nconst aiSidebarSeedAtom = stateFamily<IAISidebarSeed>(\n \"seed\",\n DEFAULT_AI_SIDEBAR_SEED\n);\nconst aiSidebarInitializedAtom = stateFamily<boolean>(\"initialized\", false);\n\n/** The sidebar's current data — hook-owned, or the projection of a\n * controlled `items` prop. */\nexport const aiSidebarItemsAtom = stateFamily<ISidebarResource[]>(\n \"items\",\n NO_ITEMS\n);\n/** @internal The hook-owned selection. `select` writes it only while no\n * `activeId` prop owns the selection — read `aiSidebarActiveIdAtom` for the\n * value the sidebar actually renders. */\nexport const aiSidebarOwnActiveIdAtom = stateFamily<string | null>(\n \"ownActiveId\",\n null\n);\n/** @internal Projection of a controlled `activeId` prop; `undefined` while\n * the selection is hook-owned. */\nexport const aiSidebarControlledActiveIdAtom = stateFamily<\n string | null | undefined\n>(\"controlledActiveId\", undefined);\n/** Open rows — hook-owned, or the projection of a controlled `expandedIds`\n * prop. */\nexport const aiSidebarExpandedIdsAtom = stateFamily<ReadonlySet<string>>(\n \"expandedIds\",\n NO_IDS\n);\n/** Roving-focus target. DOM focus is moved by the block, which owns the row\n * refs; this is only which row is tabbable. */\nexport const aiSidebarFocusedIdAtom = stateFamily<string | null>(\n \"focusedId\",\n null\n);\nexport const aiSidebarDraggingIdAtom = stateFamily<string | null>(\n \"draggingId\",\n null\n);\nexport const aiSidebarDropTargetAtom = stateFamily<IDropTarget | null>(\n \"dropTarget\",\n null\n);\nexport const aiSidebarMenuOpenIdAtom = stateFamily<string | null>(\n \"menuOpenId\",\n null\n);\nexport const aiSidebarRenamingIdAtom = stateFamily<string | null>(\n \"renamingId\",\n null\n);\nexport const aiSidebarHoveredIdAtom = stateFamily<string | null>(\n \"hoveredId\",\n null\n);\n/** Live-region text for the last move or rename outcome. */\nexport const aiSidebarAnnouncementAtom = stateFamily<string>(\n \"announcement\",\n \"\"\n);\n/** A move is in flight. Read synchronously by `moveAISidebarRowAtom` before\n * it starts another — the store needs no ref to see its own latest write. */\nexport const aiSidebarMovePendingAtom = stateFamily<boolean>(\n \"movePending\",\n false\n);\n\n// ── derived ────────────────────────────────────────────────────────────────\n\n/** @internal The only items atom `useAISidebar` may subscribe to: empty\n * while a controlled `items` prop owns the data, so the projection write\n * never feeds back into the render that produced it. An inline `items={[…]}`\n * array is a new reference every render, and a subscribed round-trip would\n * loop. */\nexport const aiSidebarOwnedItemsAtom = readFamily(\"ownedItems\", (get, id) =>\n get(aiSidebarConfigAtom(id)).controlsItems\n ? NO_ITEMS\n : get(aiSidebarItemsAtom(id))\n);\n\n/** @internal The same guard for `expandedIds`, which is controllable here\n * and arrives as an array — just as unstable an identity as `items`. */\nexport const aiSidebarOwnedExpandedIdsAtom = readFamily(\n \"ownedExpandedIds\",\n (get, id) =>\n get(aiSidebarConfigAtom(id)).controlsExpandedIds\n ? NO_IDS\n : get(aiSidebarExpandedIdsAtom(id))\n);\n\n/** The selected row: the controlled `activeId` when there is one, the\n * hook-owned selection otherwise. Kept as two atoms because a controlled\n * `activeId` of `null` falls through to the hook-owned value — the block has\n * always read `activeId ?? internalActiveId`. */\nexport const aiSidebarActiveIdAtom = readFamily(\n \"activeId\",\n (get, id) =>\n get(aiSidebarControlledActiveIdAtom(id)) ??\n get(aiSidebarOwnActiveIdAtom(id))\n);\n\n/** Visible rows in order, each with its depth and parent id. */\nexport const aiSidebarFlatAtom = readFamily(\"flat\", (get, id) => {\n const items = get(aiSidebarItemsAtom(id));\n if (items.length === 0) return NO_ROWS;\n return flattenResources(items, get(aiSidebarExpandedIdsAtom(id)));\n});\n\n/** Some row is hovered and no drag is running — mounts the pill wrapper. */\nexport const aiSidebarHoverActiveAtom = readFamily(\n \"hoverActive\",\n (get, id) =>\n get(aiSidebarHoveredIdAtom(id)) !== null &&\n get(aiSidebarDraggingIdAtom(id)) === null\n);\n\n/** Whether this one row is the current selection. */\nexport const aiSidebarRowSelectedAtom = rowFamily(\n \"rowSelected\",\n (get, id, rowId) => get(aiSidebarActiveIdAtom(id)) === rowId\n);\n\n/** Whether this one row is open. */\nexport const aiSidebarRowExpandedAtom = rowFamily(\n \"rowExpanded\",\n (get, id, rowId) => get(aiSidebarExpandedIdsAtom(id)).has(rowId)\n);\n\n/** Whether this one row is the roving-focus target. */\nexport const aiSidebarRowFocusedAtom = rowFamily(\n \"rowFocused\",\n (get, id, rowId) => get(aiSidebarFocusedIdAtom(id)) === rowId\n);\n\n/** Whether this one row is in rename mode. */\nexport const aiSidebarRowRenamingAtom = rowFamily(\n \"rowRenaming\",\n (get, id, rowId) => get(aiSidebarRenamingIdAtom(id)) === rowId\n);\n\n/** Whether this one row's action menu is open. */\nexport const aiSidebarRowMenuOpenAtom = rowFamily(\n \"rowMenuOpen\",\n (get, id, rowId) => get(aiSidebarMenuOpenIdAtom(id)) === rowId\n);\n\n/** Whether this one row is the row in flight. */\nexport const aiSidebarRowDraggingAtom = rowFamily(\n \"rowDragging\",\n (get, id, rowId) => get(aiSidebarDraggingIdAtom(id)) === rowId\n);\n\n/** Where a drop on this one row would land, `null` when it is not hovered\n * by a drag. */\nexport const aiSidebarRowDropAtom =\n rowFamily<TSidebarResourceDropPosition | null>(\"rowDrop\", (get, id, rowId) => {\n const target = get(aiSidebarDropTargetAtom(id));\n return target?.id === rowId ? target.position : null;\n });\n\n/** Whether this one row owns the sliding hover pill. */\nexport const aiSidebarRowHoveredAtom = rowFamily(\n \"rowHovered\",\n (get, id, rowId) =>\n get(aiSidebarHoveredIdAtom(id)) === rowId &&\n get(aiSidebarDraggingIdAtom(id)) === null\n);\n\n/** The whole state of one sidebar. Components reading a single field should\n * subscribe to that field's atom instead — this one changes on every edit. */\nexport const aiSidebarStateAtom = readFamily<IAISidebarState>(\n \"state\",\n (get, id) => ({\n items: get(aiSidebarItemsAtom(id)),\n flat: get(aiSidebarFlatAtom(id)),\n selectedId: get(aiSidebarActiveIdAtom(id)),\n expandedIds: get(aiSidebarExpandedIdsAtom(id)),\n focusedId: get(aiSidebarFocusedIdAtom(id)),\n renamingId: get(aiSidebarRenamingIdAtom(id)),\n menuOpenId: get(aiSidebarMenuOpenIdAtom(id)),\n draggingId: get(aiSidebarDraggingIdAtom(id)),\n dropTarget: get(aiSidebarDropTargetAtom(id)),\n hoveredId: get(aiSidebarHoveredIdAtom(id)),\n movePending: get(aiSidebarMovePendingAtom(id)),\n announcement: get(aiSidebarAnnouncementAtom(id)),\n })\n);\n\n// ── shared write helpers ───────────────────────────────────────────────────\n\n/** The atom only when the hook owns the data; the callback always. */\nfunction commitItems(\n get: Getter,\n set: Setter,\n id: TAISidebarInstanceId,\n next: ISidebarResource[]\n): void {\n if (!get(aiSidebarConfigAtom(id)).controlsItems)\n set(aiSidebarItemsAtom(id), next);\n get(aiSidebarHandlersAtom(id)).onItemsChange?.(next);\n}\n\nfunction commitExpanded(\n get: Getter,\n set: Setter,\n id: TAISidebarInstanceId,\n next: Set<string>\n): void {\n if (!get(aiSidebarConfigAtom(id)).controlsExpandedIds)\n set(aiSidebarExpandedIdsAtom(id), next);\n get(aiSidebarHandlersAtom(id)).onExpandedChange?.([...next]);\n}\n\nfunction seedInstance(\n set: Setter,\n id: TAISidebarInstanceId,\n seed: IAISidebarSeed\n): void {\n set(aiSidebarItemsAtom(id), seed.items);\n set(aiSidebarOwnActiveIdAtom(id), seed.activeId);\n set(aiSidebarFocusedIdAtom(id), seed.focusedId);\n set(aiSidebarExpandedIdsAtom(id), new Set(seed.expandedIds));\n set(aiSidebarRenamingIdAtom(id), null);\n set(aiSidebarMenuOpenIdAtom(id), null);\n set(aiSidebarDraggingIdAtom(id), null);\n set(aiSidebarDropTargetAtom(id), null);\n set(aiSidebarHoveredIdAtom(id), null);\n set(aiSidebarAnnouncementAtom(id), \"\");\n set(aiSidebarMovePendingAtom(id), false);\n}\n\n// ── expansion ──────────────────────────────────────────────────────────────\n\nexport const expandAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"expand\",\n (get, set, id, rowId) => {\n const expanded = get(aiSidebarExpandedIdsAtom(id));\n if (expanded.has(rowId)) return;\n commitExpanded(get, set, id, new Set(expanded).add(rowId));\n }\n);\n\nexport const collapseAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"collapse\",\n (get, set, id, rowId) => {\n const expanded = get(aiSidebarExpandedIdsAtom(id));\n if (!expanded.has(rowId)) return;\n const next = new Set(expanded);\n next.delete(rowId);\n commitExpanded(get, set, id, next);\n }\n);\n\nexport const toggleAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"toggleExpanded\",\n (get, set, id, rowId) => {\n const next = new Set(get(aiSidebarExpandedIdsAtom(id)));\n if (next.has(rowId)) next.delete(rowId);\n else next.add(rowId);\n commitExpanded(get, set, id, next);\n }\n);\n\nexport const expandAllAISidebarRowsAtom = actionFamily<[]>(\n \"expandAll\",\n (get, set, id) => {\n commitExpanded(\n get,\n set,\n id,\n new Set(expandableIdsOf(get(aiSidebarItemsAtom(id))))\n );\n }\n);\n\nexport const collapseAllAISidebarRowsAtom = actionFamily<[]>(\n \"collapseAll\",\n (get, set, id) => {\n commitExpanded(get, set, id, new Set());\n }\n);\n\n/** Open every ancestor of `rowId` without touching the rest of the tree. */\nexport const revealAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"reveal\",\n (get, set, id, rowId) => {\n const ancestors = ancestorIdsOf(get(aiSidebarItemsAtom(id)), rowId);\n const expanded = get(aiSidebarExpandedIdsAtom(id));\n if (!ancestors.some((ancestor) => !expanded.has(ancestor))) return;\n commitExpanded(get, set, id, new Set([...expanded, ...ancestors]));\n }\n);\n\n// ── selection and focus ────────────────────────────────────────────────────\n\nexport const selectAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"select\",\n (get, set, id, rowId) => {\n if (!get(aiSidebarConfigAtom(id)).controlsActiveId)\n set(aiSidebarOwnActiveIdAtom(id), rowId);\n get(aiSidebarHandlersAtom(id)).onActiveChange?.(rowId);\n }\n);\n\n/** The store half of `focus`: which row is tabbable. Moving DOM focus is the\n * block's job — it owns the row refs. */\nexport const focusAISidebarRowAtom = actionFamily<[rowId: string]>(\n \"focus\",\n (_get, set, id, rowId) => {\n set(aiSidebarFocusedIdAtom(id), rowId);\n }\n);\n\n/** @internal Keeps the roving target on a row that still renders: a focused\n * row that folds away hands focus to the first visible row instead of\n * pointing at nothing. `useAISidebar` runs it after every projection. */\nexport const normalizeAISidebarFocusAtom = actionFamily<[]>(\n \"normalizeFocus\",\n (get, set, id) => {\n const flat = get(aiSidebarFlatAtom(id));\n const focusedId = get(aiSidebarFocusedIdAtom(id));\n if (focusedId !== null && flat.some((row) => row.item.id === focusedId))\n return;\n const first = flat[0]?.item.id ?? null;\n if (focusedId !== first) set(aiSidebarFocusedIdAtom(id), first);\n }\n);\n\n// ── rename ─────────────────────────────────────────────────────────────────\n\nexport const startAISidebarRenameAtom = actionFamily<[rowId: string]>(\n \"startRename\",\n (get, set, id, rowId) => {\n // An id from elsewhere (a stale selection, another sidebar) would arm\n // rename mode against a row that never renders.\n if (!findResource(get(aiSidebarItemsAtom(id)), rowId)) return;\n set(aiSidebarRenamingIdAtom(id), rowId);\n }\n);\n\nexport const cancelAISidebarRenameAtom = actionFamily<[]>(\n \"cancelRename\",\n (_get, set, id) => {\n set(aiSidebarRenamingIdAtom(id), null);\n }\n);\n\n/** Commit a rename and leave rename mode. Applied optimistically and rolled\n * back if `onRename` rejects. Blank and unchanged labels are dropped. */\nexport const renameAISidebarRowAtom = actionFamily<\n [rowId: string, label: string]\n>(\"rename\", (get, set, id, rowId, label) => {\n const trimmed = label.trim();\n set(aiSidebarRenamingIdAtom(id), null);\n const before = get(aiSidebarItemsAtom(id));\n const item = findResource(before, rowId);\n if (!item || !trimmed || trimmed === item.label) return;\n commitItems(get, set, id, renameResource(before, rowId, trimmed));\n void Promise.resolve(\n get(aiSidebarHandlersAtom(id)).onRename?.(item, trimmed)\n ).catch(() => {\n commitItems(get, set, id, before);\n set(\n aiSidebarAnnouncementAtom(id),\n `Rename failed. ${item.label} was restored.`\n );\n });\n});\n\n// ── menu ───────────────────────────────────────────────────────────────────\n\nexport const openAISidebarMenuAtom = actionFamily<[rowId: string]>(\n \"openMenu\",\n (get, set, id, rowId) => {\n if (!findResource(get(aiSidebarItemsAtom(id)), rowId)) return;\n set(aiSidebarMenuOpenIdAtom(id), rowId);\n }\n);\n\n/** Closes the menu and hands the roving target back to the row that owned\n * it, then returns that id so the block can move DOM focus there — otherwise\n * focus falls back to the body and the keyboard user loses their place. */\nexport const closeAISidebarMenuAtom = actionFamily<[], string | null>(\n \"closeMenu\",\n (get, set, id) => {\n const current = get(aiSidebarMenuOpenIdAtom(id));\n set(aiSidebarMenuOpenIdAtom(id), null);\n if (current) set(aiSidebarFocusedIdAtom(id), current);\n return current;\n }\n);\n\n// ── data ───────────────────────────────────────────────────────────────────\n\n/**\n * Reorder, applied optimistically and rolled back if `onMove` rejects.\n *\n * The pending flag is read straight back out of the store, which is why this\n * needs no ref to guard overlapping moves the way React state did: the write\n * is visible to the next call immediately, not after a commit.\n */\nexport const moveAISidebarRowAtom = actionFamily<\n [move: ISidebarResourceMove],\n Promise<void>\n>(\"move\", async (get, set, id, move) => {\n if (get(aiSidebarMovePendingAtom(id))) {\n set(aiSidebarAnnouncementAtom(id), \"Wait for the current move to finish.\");\n return;\n }\n const before = get(aiSidebarItemsAtom(id));\n const next = moveResource(before, move);\n if (!next || next === before) return;\n\n set(aiSidebarMovePendingAtom(id), true);\n commitItems(get, set, id, next);\n set(aiSidebarDropTargetAtom(id), null);\n set(aiSidebarDraggingIdAtom(id), null);\n const moved = findResource(before, move.itemId);\n const target = move.targetId ? findResource(before, move.targetId) : null;\n set(\n aiSidebarAnnouncementAtom(id),\n target\n ? `Moved ${moved?.label ?? \"item\"} ${move.position} ${target.label}.`\n : `Moved ${moved?.label ?? \"item\"} to the top level.`\n );\n\n try {\n await get(aiSidebarHandlersAtom(id)).onMove?.(move);\n } catch (error) {\n commitItems(get, set, id, before);\n set(\n aiSidebarAnnouncementAtom(id),\n `Move failed. ${moved?.label ?? \"Item\"} was restored.`\n );\n get(aiSidebarHandlersAtom(id)).onMoveError?.(error, move);\n } finally {\n set(aiSidebarMovePendingAtom(id), false);\n }\n});\n\n/** Replace the data. Reports through `onItemsChange`; writes the atom only\n * when no controlled `items` prop owns it. */\nexport const setAISidebarItemsAtom = actionFamily<[items: ISidebarResource[]]>(\n \"setItems\",\n (get, set, id, items) => {\n commitItems(get, set, id, items);\n }\n);\n\n// ── hover and drag state ───────────────────────────────────────────────────\n\nexport const setAISidebarHoveredAtom = actionFamily<\n [rowId: string, hovered: boolean]\n>(\"setHovered\", (get, set, id, rowId, hovered) => {\n const current = get(aiSidebarHoveredIdAtom(id));\n const next = hovered ? rowId : current === rowId ? null : current;\n if (next !== current) set(aiSidebarHoveredIdAtom(id), next);\n});\n\nexport const clearAISidebarHoverAtom = actionFamily<[]>(\n \"clearHover\",\n (_get, set, id) => {\n set(aiSidebarHoveredIdAtom(id), null);\n }\n);\n\nexport const endAISidebarDragAtom = actionFamily<[]>(\n \"endDrag\",\n (_get, set, id) => {\n set(aiSidebarDraggingIdAtom(id), null);\n set(aiSidebarDropTargetAtom(id), null);\n }\n);\n\n// ── lifecycle ──────────────────────────────────────────────────────────────\n\n/** @internal Publish the latest options; seed the instance once. */\nexport const mountAISidebarAtom = actionFamily<\n [config: IAISidebarConfig, seed: IAISidebarSeed]\n>(\"mount\", (get, set, id, config, seed) => {\n set(aiSidebarConfigAtom(id), config);\n if (get(aiSidebarInitializedAtom(id))) return;\n set(aiSidebarInitializedAtom(id), true);\n set(aiSidebarSeedAtom(id), seed);\n seedInstance(set, id, seed);\n});\n\n/** @internal */\nexport const setAISidebarHandlersAtom = actionFamily<\n [handlers: IAISidebarHandlers]\n>(\"setHandlers\", (_get, set, id, handlers) => {\n set(aiSidebarHandlersAtom(id), handlers);\n});\n\n/** @internal One-way projections of controlled props — no callbacks fire. */\nexport const projectAISidebarItemsAtom = actionFamily<\n [items: ISidebarResource[]]\n>(\"projectItems\", (_get, set, id, items) => {\n set(aiSidebarItemsAtom(id), items);\n});\n\n/** @internal */\nexport const projectAISidebarActiveIdAtom = actionFamily<\n [activeId: string | null]\n>(\"projectActiveId\", (_get, set, id, activeId) => {\n set(aiSidebarControlledActiveIdAtom(id), activeId);\n});\n\n/** @internal */\nexport const projectAISidebarExpandedIdsAtom = actionFamily<\n [expandedIds: string[]]\n>(\"projectExpandedIds\", (_get, set, id, expandedIds) => {\n set(aiSidebarExpandedIdsAtom(id), new Set(expandedIds));\n});\n\n/** Back to the values the instance mounted with. */\nexport const resetAISidebarAtom = actionFamily<[]>(\"reset\", (get, set, id) => {\n seedInstance(set, id, get(aiSidebarSeedAtom(id)));\n});\n\n/** Drop every atom for `id`. `useAISidebar` calls this on unmount for\n * sidebars it keyed itself; an explicit `sidebarId` outlives its component,\n * so an app-named sidebar keeps its open rows across a route change. */\nexport function removeAISidebarInstance(id: TAISidebarInstanceId): void {\n for (const family of families) family.remove(id);\n}\n","\"use client\"\n\nimport {\n type DragEvent,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { useAtomValue, useSetAtom, useStore } from \"jotai\"\n\nimport {\n aiSidebarAnnouncementAtom,\n aiSidebarDraggingIdAtom,\n aiSidebarDropTargetAtom,\n aiSidebarExpandedIdsAtom,\n aiSidebarFlatAtom,\n aiSidebarFocusedIdAtom,\n aiSidebarHoveredIdAtom,\n aiSidebarItemsAtom,\n aiSidebarMenuOpenIdAtom,\n aiSidebarMovePendingAtom,\n aiSidebarOwnActiveIdAtom,\n aiSidebarOwnedExpandedIdsAtom,\n aiSidebarOwnedItemsAtom,\n aiSidebarRenamingIdAtom,\n cancelAISidebarRenameAtom,\n clearAISidebarHoverAtom,\n closeAISidebarMenuAtom,\n collapseAISidebarRowAtom,\n collapseAllAISidebarRowsAtom,\n endAISidebarDragAtom,\n expandAISidebarRowAtom,\n expandAllAISidebarRowsAtom,\n focusAISidebarRowAtom,\n mountAISidebarAtom,\n moveAISidebarRowAtom,\n normalizeAISidebarFocusAtom,\n openAISidebarMenuAtom,\n projectAISidebarActiveIdAtom,\n projectAISidebarExpandedIdsAtom,\n projectAISidebarItemsAtom,\n removeAISidebarInstance,\n renameAISidebarRowAtom,\n resetAISidebarAtom,\n revealAISidebarRowAtom,\n selectAISidebarRowAtom,\n setAISidebarHandlersAtom,\n setAISidebarHoveredAtom,\n startAISidebarRenameAtom,\n toggleAISidebarRowAtom,\n} from \"./ai-sidebar-atom.ts\"\nimport type {\n IAISidebarConfig,\n IAISidebarController,\n IAISidebarHandlers,\n IAISidebarSeed,\n IFlatResource,\n IUseAISidebarOptions,\n} from \"./type.ts\"\nimport {\n canContain,\n containsResource,\n findResource,\n flattenResources,\n} from \"./utils.ts\"\n\nexport type { IUseAISidebarOptions }\n\n/**\n * The AI sidebar's headless controller — every behaviour the block\n * performs, callable from outside it: select, expand/collapse (one row,\n * every row, or just the ancestors of one), move focus, rename, open a\n * row's action menu, reorder.\n *\n * `items`, `activeId` and `expandedIds` are each controlled when passed\n * and hook-owned via their `default*` twin otherwise. Reorder and rename\n * are applied to the data optimistically and rolled back if\n * `onMove`/`onRename` rejects, so a consumer never reduces the tree\n * itself — `moveResource` and `renameResource` are exported for the ones\n * who keep their data elsewhere.\n *\n * ```tsx\n * const sidebar = useAISidebar({ defaultItems: resources })\n * <AISidebar controller={sidebar} />\n * <Button onClick={sidebar.collapseAll}>Collapse all</Button>\n * ```\n *\n * State lives in Jotai atoms keyed by `sidebarId`, so anything under\n * `ExegiaProvider` can drive this sidebar without the controller — name it\n * and reach for `useAISidebarState(sidebarId)` /\n * `useAISidebarActions(sidebarId)` elsewhere.\n */\nexport function useAISidebar(\n options: IUseAISidebarOptions\n): IAISidebarController {\n const {\n items,\n defaultItems = [],\n onItemsChange,\n onMove,\n onMoveError,\n onRename,\n activeId,\n defaultActiveId = null,\n onActiveChange,\n onExpandedChange,\n } = options\n\n // A generated key isolates unnamed sidebars from each other; an explicit\n // `sidebarId` is the app's handle on this one.\n const generatedId = useId()\n const sidebarId = options.sidebarId ?? generatedId\n const store = useStore()\n const hoverLayoutId = useId()\n\n const controlledExpandedIds = options.expandedIds\n const controlsItems = items !== undefined\n const controlsActiveId = activeId !== undefined\n const controlsExpandedIds = controlledExpandedIds !== undefined\n\n // Primitives only, so this object is stable and the store write below runs\n // once per real change rather than once per render.\n const config = useMemo<IAISidebarConfig>(\n () => ({ controlsItems, controlsActiveId, controlsExpandedIds }),\n [controlsActiveId, controlsExpandedIds, controlsItems]\n )\n\n const handlers = useMemo<IAISidebarHandlers>(\n () => ({\n onItemsChange,\n onMove,\n onMoveError,\n onRename,\n onActiveChange,\n onExpandedChange,\n }),\n [\n onActiveChange,\n onExpandedChange,\n onItemsChange,\n onMove,\n onMoveError,\n onRename,\n ]\n )\n\n // Read once: the `default*` options describe the mount, not every render.\n const [seed] = useState<IAISidebarSeed>(() => ({\n items: items ?? defaultItems,\n activeId: defaultActiveId,\n focusedId: activeId ?? defaultActiveId,\n expandedIds: [\n ...(controlledExpandedIds ?? options.defaultExpandedIds ?? []),\n ],\n }))\n\n const mount = useSetAtom(mountAISidebarAtom(sidebarId))\n const publishHandlers = useSetAtom(setAISidebarHandlersAtom(sidebarId))\n const projectItems = useSetAtom(projectAISidebarItemsAtom(sidebarId))\n const projectActiveId = useSetAtom(projectAISidebarActiveIdAtom(sidebarId))\n const projectExpandedIds = useSetAtom(\n projectAISidebarExpandedIdsAtom(sidebarId)\n )\n const normalizeFocus = useSetAtom(normalizeAISidebarFocusAtom(sidebarId))\n\n // Reads BEFORE the write effects, and the writes in passive effects: jotai\n // (v3) subscribes `useAtomValue` in its own `useEffect` with no\n // post-subscription recheck, so a write from a `useLayoutEffect` (or from\n // any effect declared before the reads) lands before the subscription\n // exists and the sidebar never re-renders with the seeded state.\n // Never `aiSidebarItemsAtom` — see the note on `aiSidebarOwnedItemsAtom`.\n const ownedItems = useAtomValue(aiSidebarOwnedItemsAtom(sidebarId))\n const renderedItems = items ?? ownedItems\n // `activeId ?? own` rather than the projected atom: a controlled `activeId`\n // of `null` has always fallen through to the hook-owned selection.\n const ownActiveId = useAtomValue(aiSidebarOwnActiveIdAtom(sidebarId))\n const selectedId = activeId ?? ownActiveId\n const ownExpandedIds = useAtomValue(aiSidebarOwnedExpandedIdsAtom(sidebarId))\n const expandedIds = useMemo(\n () =>\n controlledExpandedIds ? new Set(controlledExpandedIds) : ownExpandedIds,\n [controlledExpandedIds, ownExpandedIds]\n )\n const focusedId = useAtomValue(aiSidebarFocusedIdAtom(sidebarId))\n const renamingId = useAtomValue(aiSidebarRenamingIdAtom(sidebarId))\n const menuOpenId = useAtomValue(aiSidebarMenuOpenIdAtom(sidebarId))\n const draggingId = useAtomValue(aiSidebarDraggingIdAtom(sidebarId))\n const dropTarget = useAtomValue(aiSidebarDropTargetAtom(sidebarId))\n const hoveredId = useAtomValue(aiSidebarHoveredIdAtom(sidebarId))\n const announcement = useAtomValue(aiSidebarAnnouncementAtom(sidebarId))\n const movePending = useAtomValue(aiSidebarMovePendingAtom(sidebarId))\n\n // Handlers first — they must be in the store before any action can fire.\n // Rewritten every commit; no read atom depends on them, so nobody\n // re-renders for it.\n useEffect(() => {\n publishHandlers(handlers)\n }, [handlers, publishHandlers])\n\n useEffect(() => {\n mount(config, seed)\n }, [config, mount, seed])\n\n // Controlled props stay the source of truth; the store carries a projection\n // so the action atoms and remote readers see current data.\n useEffect(() => {\n if (items !== undefined) projectItems(items)\n }, [items, projectItems])\n\n useEffect(() => {\n if (activeId !== undefined) projectActiveId(activeId)\n }, [activeId, projectActiveId])\n\n useEffect(() => {\n if (controlledExpandedIds !== undefined)\n projectExpandedIds(controlledExpandedIds)\n }, [controlledExpandedIds, projectExpandedIds])\n\n // A sidebar the hook keyed is scrap once its component goes. An explicit\n // `sidebarId` is the app's key and outlives the mount.\n useEffect(() => {\n if (options.sidebarId !== undefined) return\n return () => removeAISidebarInstance(sidebarId)\n }, [options.sidebarId, sidebarId])\n\n const flat = useMemo(\n () => flattenResources(renderedItems, expandedIds),\n [expandedIds, renderedItems]\n )\n\n // The roving target must name a row that still renders: one that folds away\n // hands focus to the first visible row instead of pointing at nothing. Last\n // of the effects, so it reads the projections this commit wrote.\n useEffect(() => {\n normalizeFocus()\n }, [flat, focusedId, normalizeFocus])\n\n useEffect(() => {\n if (!menuOpenId) return\n const frame = requestAnimationFrame(() => {\n const menus = Array.from(\n document.querySelectorAll<HTMLElement>(\"[data-sidebar-resource-menu]\")\n )\n menus\n .find((menu) => menu.dataset.sidebarResourceMenu === menuOpenId)\n ?.querySelector<HTMLElement>(\"button, a[href]\")\n ?.focus()\n })\n return () => cancelAnimationFrame(frame)\n }, [menuOpenId])\n\n const getItem = useCallback(\n (id: string) => findResource(renderedItems, id),\n [renderedItems]\n )\n\n const isExpanded = useCallback(\n (id: string) => expandedIds.has(id),\n [expandedIds]\n )\n\n // `useSetAtom` setters are already stable — no useCallback needed.\n const select = useSetAtom(selectAISidebarRowAtom(sidebarId))\n const expand = useSetAtom(expandAISidebarRowAtom(sidebarId))\n const collapse = useSetAtom(collapseAISidebarRowAtom(sidebarId))\n const toggleExpanded = useSetAtom(toggleAISidebarRowAtom(sidebarId))\n const expandAll = useSetAtom(expandAllAISidebarRowsAtom(sidebarId))\n const collapseAll = useSetAtom(collapseAllAISidebarRowsAtom(sidebarId))\n const reveal = useSetAtom(revealAISidebarRowAtom(sidebarId))\n const startRename = useSetAtom(startAISidebarRenameAtom(sidebarId))\n const cancelRename = useSetAtom(cancelAISidebarRenameAtom(sidebarId))\n const rename = useSetAtom(renameAISidebarRowAtom(sidebarId))\n const openMenu = useSetAtom(openAISidebarMenuAtom(sidebarId))\n const closeMenuInStore = useSetAtom(closeAISidebarMenuAtom(sidebarId))\n const move = useSetAtom(moveAISidebarRowAtom(sidebarId))\n const reset = useSetAtom(resetAISidebarAtom(sidebarId))\n const setFocusedRow = useSetAtom(focusAISidebarRowAtom(sidebarId))\n const onRowHover = useSetAtom(setAISidebarHoveredAtom(sidebarId))\n const clearHover = useSetAtom(clearAISidebarHoverAtom(sidebarId))\n const onRowDragEnd = useSetAtom(endAISidebarDragAtom(sidebarId))\n const setDraggingId = useSetAtom(aiSidebarDraggingIdAtom(sidebarId))\n const setDropTarget = useSetAtom(aiSidebarDropTargetAtom(sidebarId))\n\n // The one piece of row state that cannot live in the store: these are DOM\n // nodes. The block owns them, and every DOM focus move goes through here.\n const rowRefs = useRef(new Map<string, HTMLDivElement>())\n\n const setRowRef = useCallback((id: string, node: HTMLDivElement | null) => {\n if (node) rowRefs.current.set(id, node)\n else rowRefs.current.delete(id)\n }, [])\n\n const focusRow = useCallback((id: string) => {\n requestAnimationFrame(() => rowRefs.current.get(id)?.focus())\n }, [])\n\n const focus = useCallback(\n (id: string) => {\n setFocusedRow(id)\n focusRow(id)\n },\n [focusRow, setFocusedRow]\n )\n\n // Closing returns focus to the row that owned the menu — otherwise focus\n // falls back to the body and the keyboard user loses their place. The atom\n // hands back the id it closed so only the DOM half happens here.\n const closeMenu = useCallback(() => {\n const closed = closeMenuInStore()\n if (closed) focusRow(closed)\n }, [closeMenuInStore, focusRow])\n\n // Roving nav reads the visible rows out of the store when a key lands\n // rather than closing over them, so one stable handler serves every row.\n const readFlat = useCallback(\n () => store.get(aiSidebarFlatAtom(sidebarId)),\n [sidebarId, store]\n )\n\n const onRowKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, row: IFlatResource) => {\n const flatRows = readFlat()\n const expanded = store.get(aiSidebarExpandedIdsAtom(sidebarId))\n const index = flatRows.findIndex(({ item }) => item.id === row.item.id)\n const previous = flatRows[index - 1]\n const next = flatRows[index + 1]\n const moveModifier = event.altKey && event.shiftKey\n\n if (event.key === \"ArrowDown\" && !moveModifier && next) {\n event.preventDefault()\n focus(next.item.id)\n return\n }\n if (event.key === \"ArrowUp\" && !moveModifier && previous) {\n event.preventDefault()\n focus(previous.item.id)\n return\n }\n if (event.key === \"Home\" && flatRows[0]) {\n event.preventDefault()\n focus(flatRows[0].item.id)\n return\n }\n if (event.key === \"End\" && flatRows.at(-1)) {\n event.preventDefault()\n focus(flatRows.at(-1)?.item.id ?? row.item.id)\n return\n }\n\n if (row.item.disabled) {\n if (event.key === \"ArrowLeft\" && row.parentId) {\n event.preventDefault()\n focus(row.parentId)\n } else if (\n moveModifier ||\n [\"ArrowRight\", \"Enter\", \" \", \"F2\", \"ContextMenu\"].includes(\n event.key\n ) ||\n (event.shiftKey && event.key === \"F10\")\n ) {\n event.preventDefault()\n }\n return\n }\n\n if (moveModifier && event.key === \"ArrowUp\" && previous) {\n event.preventDefault()\n void move({\n itemId: row.item.id,\n targetId: previous.item.id,\n position: \"before\",\n })\n return\n }\n if (moveModifier && event.key === \"ArrowDown\" && next) {\n event.preventDefault()\n void move({\n itemId: row.item.id,\n targetId: next.item.id,\n position: \"after\",\n })\n return\n }\n if (\n moveModifier &&\n event.key === \"ArrowRight\" &&\n previous &&\n canContain(previous.item)\n ) {\n event.preventDefault()\n expand(previous.item.id)\n void move({\n itemId: row.item.id,\n targetId: previous.item.id,\n position: \"inside\",\n })\n return\n }\n if (moveModifier && event.key === \"ArrowLeft\" && row.parentId) {\n event.preventDefault()\n void move({\n itemId: row.item.id,\n targetId: row.parentId,\n position: \"after\",\n })\n return\n }\n\n if (event.key === \"ArrowRight\" && canContain(row.item)) {\n event.preventDefault()\n if (!expanded.has(row.item.id)) expand(row.item.id)\n else if (next?.parentId === row.item.id) focus(next.item.id)\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n if (expanded.has(row.item.id)) collapse(row.item.id)\n else if (row.parentId) focus(row.parentId)\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n if (canContain(row.item)) toggleExpanded(row.item.id)\n else select(row.item.id)\n } else if (event.key === \"F2\") {\n event.preventDefault()\n startRename(row.item.id)\n } else if (\n event.key === \"ContextMenu\" ||\n (event.shiftKey && event.key === \"F10\")\n ) {\n event.preventDefault()\n openMenu(row.item.id)\n }\n },\n [\n collapse,\n expand,\n focus,\n move,\n openMenu,\n readFlat,\n select,\n sidebarId,\n startRename,\n store,\n toggleExpanded,\n ]\n )\n\n // The drag handlers read drag state out of the store when they run instead\n // of closing over it. That is what keeps them stable for the life of the\n // sidebar, so every row can share one set without re-rendering on a drag.\n const onRootDragOver = useCallback(\n (event: DragEvent<HTMLDivElement>) => {\n if (\n !store.get(aiSidebarDraggingIdAtom(sidebarId)) ||\n event.target !== event.currentTarget\n )\n return\n event.preventDefault()\n setDropTarget({ id: null, position: \"after\" })\n },\n [setDropTarget, sidebarId, store]\n )\n\n const onDrop = useCallback(\n (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n event.stopPropagation()\n const dragging = store.get(aiSidebarDraggingIdAtom(sidebarId))\n const target = store.get(aiSidebarDropTargetAtom(sidebarId))\n if (dragging && target) {\n void move({\n itemId: dragging,\n targetId: target.id,\n position: target.position,\n })\n }\n },\n [move, sidebarId, store]\n )\n\n const onRowDragStart = useCallback(\n (event: DragEvent<HTMLDivElement>, id: string) => {\n setDraggingId(id)\n event.dataTransfer.effectAllowed = \"move\"\n event.dataTransfer.setData(\"text/plain\", id)\n },\n [setDraggingId]\n )\n\n const onRowDragOver = useCallback(\n (event: DragEvent<HTMLDivElement>, targetRow: IFlatResource) => {\n const dragging = store.get(aiSidebarDraggingIdAtom(sidebarId))\n if (!dragging || dragging === targetRow.item.id) return\n const source = findResource(\n store.get(aiSidebarItemsAtom(sidebarId)),\n dragging\n )\n if (source && containsResource(source, targetRow.item.id)) return\n event.preventDefault()\n event.stopPropagation()\n const rect = event.currentTarget.getBoundingClientRect()\n const ratio = (event.clientY - rect.top) / rect.height\n const position =\n !targetRow.item.disabled &&\n canContain(targetRow.item) &&\n ratio >= 0.25 &&\n ratio <= 0.75\n ? \"inside\"\n : ratio < 0.5\n ? \"before\"\n : \"after\"\n setDropTarget({ id: targetRow.item.id, position })\n },\n [setDropTarget, sidebarId, store]\n )\n\n const dnd = useMemo(\n () => ({\n draggingId,\n dropTarget,\n onRootDragOver,\n onDrop,\n onRowDragStart,\n onRowDragEnd,\n onRowDragOver,\n }),\n [\n draggingId,\n dropTarget,\n onRootDragOver,\n onDrop,\n onRowDragStart,\n onRowDragEnd,\n onRowDragOver,\n ]\n )\n\n const hover = useMemo(\n () => ({\n hoveredId,\n layoutId: hoverLayoutId,\n onRowHover,\n clear: clearHover,\n }),\n [clearHover, hoverLayoutId, hoveredId, onRowHover]\n )\n\n return useMemo<IAISidebarController>(\n () => ({\n sidebarId,\n items: renderedItems,\n flat,\n getItem,\n selectedId,\n select,\n expandedIds,\n isExpanded,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n focusedId,\n focus,\n renamingId,\n startRename,\n cancelRename,\n rename,\n menuOpenId,\n openMenu,\n closeMenu,\n move,\n movePending,\n announcement,\n reset,\n dnd,\n hover,\n onRowKeyDown,\n setRowRef,\n }),\n [\n sidebarId,\n renderedItems,\n flat,\n getItem,\n selectedId,\n select,\n expandedIds,\n isExpanded,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n focusedId,\n focus,\n renamingId,\n startRename,\n cancelRename,\n rename,\n menuOpenId,\n openMenu,\n closeMenu,\n move,\n movePending,\n announcement,\n reset,\n dnd,\n hover,\n onRowKeyDown,\n setRowRef,\n ]\n )\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nimport type { IAISidebarContextValue } from \"./type.ts\";\n\nexport const AISidebarContext = createContext<IAISidebarContextValue | null>(\n null\n);\n\nexport function useAISidebarContext(): IAISidebarContextValue {\n const context = useContext(AISidebarContext);\n if (!context) throw new Error(\"Sidebar rows must render inside <AISidebar>.\");\n return context;\n}\n","import type { ISidebarResource } from \"./type.ts\"\nimport { Bookmark, FileText, Folder, FolderOpen } from \"lucide-react\"\n\nexport function SidebarIcon(item: ISidebarResource, expanded: boolean) {\n const Icon =\n item.kind === \"folder\" || item.kind === \"project\"\n ? expanded\n ? FolderOpen\n : Folder\n : item.kind === \"bookmark\"\n ? Bookmark\n : FileText\n return <Icon className=\"size-4\" />\n}\n","import { motion, useReducedMotion } from \"motion/react\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { ROW_REVEAL } from \"./utils.ts\"\n\nexport function MarqueeLabel({\n active,\n children,\n}: {\n active: boolean\n children: string\n}) {\n const reduce = useReducedMotion() ?? false\n const viewportRef = useRef<HTMLSpanElement>(null)\n const labelRef = useRef<HTMLSpanElement>(null)\n const [distance, setDistance] = useState(0)\n\n useEffect(() => {\n const measure = () => {\n const viewport = viewportRef.current\n const label = labelRef.current\n if (!viewport || !label) return\n setDistance(\n label.scrollWidth > viewport.clientWidth ? label.scrollWidth + 24 : 0\n )\n }\n measure()\n const observer = new ResizeObserver(measure)\n if (viewportRef.current) observer.observe(viewportRef.current)\n if (labelRef.current) observer.observe(labelRef.current)\n return () => observer.disconnect()\n }, [])\n\n const running = active && distance > 0 && !reduce\n\n return (\n <span\n ref={viewportRef}\n className=\"relative block min-w-0 flex-1 overflow-hidden\"\n >\n <motion.span\n className=\"flex w-max items-center gap-6 whitespace-nowrap\"\n animate={{ x: running ? [0, -distance] : 0 }}\n transition={\n running\n ? {\n duration: Math.max(2.4, distance / 34),\n ease: \"linear\",\n repeat: Number.POSITIVE_INFINITY,\n repeatDelay: 2,\n }\n : ROW_REVEAL\n }\n >\n <span ref={labelRef}>{children}</span>\n {running ? <span aria-hidden=\"true\">{children}</span> : null}\n </motion.span>\n </span>\n )\n}\n","\"use client\";\n\nimport {\n type MutableRefObject,\n useCallback,\n useLayoutEffect,\n useState,\n} from \"react\";\n\nexport type TPortalLayout = {\n trigger: {\n left: number;\n top: number;\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n};\n\nfunction sameLayout(a: TPortalLayout | null, b: TPortalLayout) {\n return (\n a?.trigger.left === b.trigger.left &&\n a.trigger.top === b.trigger.top &&\n a.trigger.width === b.trigger.width &&\n a.trigger.height === b.trigger.height &&\n a.content.width === b.content.width &&\n a.content.height === b.content.height\n );\n}\n\n/** Measures a trigger and portalled panel in viewport coordinates. */\nexport function usePopoverPortalPosition<\n TriggerElement extends HTMLElement,\n ContentElement extends HTMLElement,\n>(\n triggerRef: MutableRefObject<TriggerElement | null>,\n contentRef: MutableRefObject<ContentElement | null>,\n active: boolean,\n) {\n const [layout, setLayout] = useState<TPortalLayout | null>(null);\n\n const update = useCallback(() => {\n const trigger = triggerRef.current;\n const content = contentRef.current;\n if (!trigger || !content) return;\n\n const rect = trigger.getBoundingClientRect();\n const next: TPortalLayout = {\n trigger: {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n },\n content: {\n width: content.offsetWidth,\n height: content.offsetHeight,\n },\n };\n setLayout((current) => (sameLayout(current, next) ? current : next));\n }, [contentRef, triggerRef]);\n\n useLayoutEffect(() => {\n update();\n if (!active) return;\n\n const trigger = triggerRef.current;\n const content = contentRef.current;\n const observer = new ResizeObserver(update);\n if (trigger) observer.observe(trigger);\n if (content) observer.observe(content);\n\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n return () => {\n observer.disconnect();\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [active, contentRef, triggerRef, update]);\n\n return layout;\n}\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\";\nimport {\n cloneElement,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePopoverPortalPosition } from \"@/components/motion/popover-position\";\nimport { EASE_OUT, SPRING_PANEL } from \"@/lib/ease\";\nimport { cn } from \"@/lib/utils\";\n\ntype TSide = \"top\" | \"bottom\";\ntype TAlign = \"start\" | \"end\";\n\ntype TMorphContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n toggle: () => void;\n triggerId: string;\n contentId: string;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n setContentRef: (node: HTMLDivElement | null) => void;\n contentRef: React.MutableRefObject<HTMLDivElement | null>;\n};\n\nconst MorphContext = createContext<TMorphContextValue | null>(null);\n\nfunction useMorphContext(component: string) {\n const ctx = useContext(MorphContext);\n if (!ctx) throw new Error(`${component} must be used within <MorphPopover>`);\n return ctx;\n}\n\nexport interface IMorphPopoverProps {\n children: ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\n/**\n * A popover whose panel morphs open from the trigger corner: it's laid out at\n * full size but clipped to the corner nearest the trigger, then unclips as one\n * piece. Closes on outside pointer / Escape. Controlled or uncontrolled.\n */\nexport function MorphPopover({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n className,\n}: IMorphPopoverProps) {\n const baseId = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const controlled = controlledOpen !== undefined;\n const open = controlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!controlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [controlled, onOpenChange],\n );\n const toggle = useCallback(() => setOpen(!open), [setOpen, open]);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && setOpen(false);\n const onPointer = (e: PointerEvent) => {\n const target = e.target as Node;\n if (\n rootRef.current &&\n !rootRef.current.contains(target) &&\n !contentRef.current?.contains(target)\n )\n setOpen(false);\n };\n window.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"pointerdown\", onPointer);\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"pointerdown\", onPointer);\n };\n }, [open, setOpen]);\n\n const ctx = useMemo<TMorphContextValue>(\n () => ({\n open,\n setOpen,\n toggle,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n triggerRef,\n setContentRef: (node) => {\n contentRef.current = node;\n },\n contentRef,\n }),\n [open, setOpen, toggle, baseId],\n );\n\n return (\n <MorphContext.Provider value={ctx}>\n <div ref={rootRef} className={cn(\"relative inline-flex\", className)}>\n {children}\n </div>\n </MorphContext.Provider>\n );\n}\n\nexport interface IMorphPopoverTriggerProps {\n children: ReactElement;\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T | null) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref && typeof ref === \"object\")\n (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n\n/** Wraps a single element, toggling the popover on click. */\nexport function MorphPopoverTrigger({ children }: IMorphPopoverTriggerProps) {\n const ctx = useMorphContext(\"MorphPopoverTrigger\");\n if (!isValidElement(children)) return children;\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((e: unknown) => void)\n | undefined;\n const childRef = (child.props as { ref?: Ref<HTMLElement> }).ref;\n\n return cloneElement(child, {\n id: ctx.triggerId,\n ref: mergeRefs(childRef, (node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }),\n onClick: (e: unknown) => {\n childOnClick?.(e);\n ctx.toggle();\n },\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": ctx.open,\n \"aria-controls\": ctx.open ? ctx.contentId : undefined,\n });\n}\n\nconst originFor = (side: TSide, align: TAlign) =>\n `${side === \"bottom\" ? \"top\" : \"bottom\"} ${align === \"end\" ? \"right\" : \"left\"}`;\n\n// A clip that hides everything but the corner nearest the trigger, so the\n// panel appears to grow out of it. inset(top right bottom left).\nfunction clipHidden(side: TSide, align: TAlign, radius: number) {\n const top = side === \"bottom\" ? \"0%\" : \"92%\";\n const bottom = side === \"bottom\" ? \"92%\" : \"0%\";\n const right = align === \"end\" ? \"0%\" : \"92%\";\n const left = align === \"end\" ? \"92%\" : \"0%\";\n return `inset(${top} ${right} ${bottom} ${left} round ${radius}px)`;\n}\nconst clipShown = (radius: number) => `inset(0% 0% 0% 0% round ${radius}px)`;\n\n// Preserve the original spring character on the wrapper, but tween the complex\n// clip-path so it cannot snap when the spring resolves its final distance.\nconst MORPH_CLIP_TRANSITION = { duration: 0.32, ease: EASE_OUT } as const;\n\nexport interface IMorphPopoverContentProps {\n children: ReactNode;\n side?: TSide;\n align?: TAlign;\n /** Gap between trigger and panel, in px. Default 8. */\n sideOffset?: number;\n /** Panel corner radius, in px. Default 16. */\n radius?: number;\n className?: string;\n}\n\nexport function MorphPopoverContent({\n children,\n side = \"bottom\",\n align = \"end\",\n sideOffset = 8,\n radius = 16,\n className,\n}: IMorphPopoverContentProps) {\n const ctx = useMorphContext(\"MorphPopoverContent\");\n const { contentId, setContentRef, triggerId } = ctx;\n const reduce = useReducedMotion() ?? false;\n const [portalReady, setPortalReady] = useState(false);\n const layout = usePopoverPortalPosition(\n ctx.triggerRef,\n ctx.contentRef,\n portalReady && ctx.open,\n );\n\n useEffect(() => setPortalReady(true), []);\n const left = layout\n ? align === \"end\"\n ? layout.trigger.left + layout.trigger.width - layout.content.width\n : layout.trigger.left\n : 0;\n const top = layout\n ? side === \"bottom\"\n ? layout.trigger.top + layout.trigger.height + sideOffset\n : layout.trigger.top - layout.content.height - sideOffset\n : 0;\n\n // Both directions travel between the exact same hidden/show states. Exit\n // targets \"hidden\" directly instead of introducing separate choreography.\n const wrap = reduce\n ? undefined\n : {\n hidden: { opacity: 0, scale: 0.96, transition: SPRING_PANEL },\n show: { opacity: 1, scale: 1, transition: SPRING_PANEL },\n };\n const clip = reduce\n ? undefined\n : {\n hidden: {\n clipPath: clipHidden(side, align, radius),\n transition: MORPH_CLIP_TRANSITION,\n },\n show: {\n clipPath: clipShown(radius),\n transition: MORPH_CLIP_TRANSITION,\n },\n };\n\n // Keep the server and first client render identical, then mount the portal.\n if (!portalReady) return null;\n\n return createPortal(\n <AnimatePresence>\n {ctx.open ? (\n <motion.div\n data-morph-popover-portal=\"\"\n // Wrapper carries the shadow as a drop-shadow filter, which hugs the\n // clipped shape below (box-shadow would just get clipped away).\n variants={wrap}\n initial={reduce ? { opacity: 0 } : \"hidden\"}\n animate={reduce ? { opacity: 1 } : \"show\"}\n exit={reduce ? { opacity: 0 } : \"hidden\"}\n transition={reduce ? { duration: 0.12 } : undefined}\n style={{\n left,\n top,\n visibility: layout ? \"visible\" : \"hidden\",\n transformOrigin: originFor(side, align),\n }}\n className=\"fixed z-[9999] [filter:drop-shadow(0_10px_18px_rgba(0,0,0,0.14))]\"\n >\n <motion.div\n ref={setContentRef}\n id={contentId}\n role=\"dialog\"\n aria-labelledby={triggerId}\n variants={clip}\n style={{ borderRadius: radius }}\n className={cn(\n \"overflow-hidden border border-border bg-background\",\n className,\n )}\n >\n {children}\n </motion.div>\n </motion.div>\n ) : null}\n </AnimatePresence>,\n document.body,\n );\n}\n","\"use client\"\n\nimport {\n cloneElement,\n memo,\n useCallback,\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n} from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\nimport type { IResourceRowProps } from \"./type\"\nimport {\n AnimatePresence,\n motion,\n useReducedMotion,\n type Variants,\n} from \"motion/react\"\nimport { ChevronRight, MoreHorizontal, Pencil } from \"lucide-react\"\nimport { SPRING_LAYOUT } from \"@/lib/ease.ts\"\nimport { cn } from \"@/lib/utils.ts\"\nimport {\n aiSidebarHoverActiveAtom,\n aiSidebarRowDraggingAtom,\n aiSidebarRowDropAtom,\n aiSidebarRowExpandedAtom,\n aiSidebarRowFocusedAtom,\n aiSidebarRowHoveredAtom,\n aiSidebarRowMenuOpenAtom,\n aiSidebarRowRenamingAtom,\n aiSidebarRowSelectedAtom,\n cancelAISidebarRenameAtom,\n focusAISidebarRowAtom,\n openAISidebarMenuAtom,\n renameAISidebarRowAtom,\n selectAISidebarRowAtom,\n startAISidebarRenameAtom,\n toggleAISidebarRowAtom,\n} from \"./ai-sidebar-atom.ts\"\nimport { useAISidebarContext } from \"./sidebar-context.ts\"\nimport { canContain } from \"./utils\"\nimport { SidebarIcon } from \"./sidebar-icon\"\nimport { MarqueeLabel } from \"./marquee-label\"\nimport {\n MorphPopover,\n MorphPopoverContent,\n MorphPopoverTrigger,\n} from \"@/components/motion/popover-morph.tsx\"\nimport { Button } from \"@/components/ui/button\"\n\n// Same choreography as SharedLayoutBg: the wrapper only fades/blurs out when\n// the pointer leaves the whole tree; a row-to-row move exits instantly so the\n// layoutId pill slides instead of crossfading.\nconst pillVariants: Variants = {\n initial: { opacity: 0, filter: \"blur(6px)\" },\n animate: { opacity: 1, filter: \"blur(0px)\" },\n exit: (hoverActive: boolean) =>\n !hoverActive ? { opacity: 0, filter: \"blur(6px)\" } : {},\n}\n\nconst reducedPillVariants: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: (hoverActive: boolean) => (!hoverActive ? { opacity: 0 } : {}),\n}\n\nfunction ResourceRowImpl({ row }: IResourceRowProps) {\n const {\n sidebarId,\n hoverLayoutId,\n renderIcon,\n renderMenu,\n renderActionsTrigger,\n setRowRef,\n onRowKeyDown,\n onRowHover,\n closeMenu,\n dnd,\n } = useAISidebarContext()\n const reduce = useReducedMotion() ?? false\n\n // One subscription per field, per row. A row re-renders when its own\n // selection, expansion, focus, rename, menu, drag or hover state changes\n // and sits still while a sibling's does — reading the controller off\n // context instead re-rendered every row on every change.\n const active = useAtomValue(aiSidebarRowSelectedAtom(sidebarId, row.item.id))\n const expanded = useAtomValue(\n aiSidebarRowExpandedAtom(sidebarId, row.item.id)\n )\n const focused = useAtomValue(aiSidebarRowFocusedAtom(sidebarId, row.item.id))\n const renaming = useAtomValue(\n aiSidebarRowRenamingAtom(sidebarId, row.item.id)\n )\n const menuOpen = useAtomValue(\n aiSidebarRowMenuOpenAtom(sidebarId, row.item.id)\n )\n const isDragging = useAtomValue(\n aiSidebarRowDraggingAtom(sidebarId, row.item.id)\n )\n const dropPosition = useAtomValue(\n aiSidebarRowDropAtom(sidebarId, row.item.id)\n )\n const hoverActive = useAtomValue(aiSidebarHoverActiveAtom(sidebarId))\n const hoverPill =\n useAtomValue(aiSidebarRowHoveredAtom(sidebarId, row.item.id)) &&\n !row.item.disabled\n\n const select = useSetAtom(selectAISidebarRowAtom(sidebarId))\n const toggleExpanded = useSetAtom(toggleAISidebarRowAtom(sidebarId))\n const setFocusedRow = useSetAtom(focusAISidebarRowAtom(sidebarId))\n const startRename = useSetAtom(startAISidebarRenameAtom(sidebarId))\n const cancelRename = useSetAtom(cancelAISidebarRenameAtom(sidebarId))\n const rename = useSetAtom(renameAISidebarRowAtom(sidebarId))\n const openMenu = useSetAtom(openAISidebarMenuAtom(sidebarId))\n\n const onMenuOpenChange = useCallback(\n (open: boolean) => {\n if (open) openMenu(row.item.id)\n else closeMenu()\n },\n [closeMenu, openMenu, row.item.id]\n )\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => setRowRef(row.item.id, node),\n [row.item.id, setRowRef]\n )\n\n const [hovered, setHovered] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const skipRenameBlurRef = useRef(false)\n const draggedRef = useRef(false)\n const [draft, setDraft] = useState(row.item.label)\n const acceptsChildren = canContain(row.item)\n\n useEffect(() => {\n if (!renaming) return\n skipRenameBlurRef.current = false\n // setDraft(row.item.label);\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n inputRef.current?.select()\n })\n }, [renaming, row.item.label])\n\n const menu = renderMenu?.(row.item, {\n close: () => onMenuOpenChange(false),\n rename: () => {\n onMenuOpenChange(false)\n startRename(row.item.id)\n },\n }) ?? (\n <button\n type=\"button\"\n onClick={() => {\n onMenuOpenChange(false)\n startRename(row.item.id)\n }}\n className=\"flex h-8 w-full items-center gap-2 rounded-md px-2.5 text-left text-xs text-foreground transition-colors outline-none hover:bg-muted focus-visible:bg-muted focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Pencil aria-hidden=\"true\" className=\"size-3.5\" />\n Rename\n </button>\n )\n\n return (\n <motion.div\n ref={setRef}\n layout=\"position\"\n transition={reduce ? { duration: 0 } : SPRING_LAYOUT}\n role=\"treeitem\"\n aria-level={row.depth + 1}\n aria-selected={acceptsChildren ? undefined : active}\n aria-expanded={acceptsChildren ? expanded : undefined}\n aria-disabled={row.item.disabled || undefined}\n tabIndex={focused ? 0 : -1}\n draggable={!row.item.disabled && !renaming}\n data-menu-open={menuOpen || undefined}\n data-drop={dropPosition ?? undefined}\n data-dragging={isDragging || undefined}\n onFocus={() => setFocusedRow(row.item.id)}\n onKeyDown={(event) => onRowKeyDown(event, row)}\n onClick={(event) => {\n if (\n event.defaultPrevented ||\n draggedRef.current ||\n renaming ||\n row.item.disabled\n )\n return\n if (acceptsChildren) toggleExpanded(row.item.id)\n else select(row.item.id)\n }}\n onDoubleClick={(event) => {\n if (acceptsChildren || row.item.disabled) return\n event.preventDefault()\n startRename(row.item.id)\n }}\n onMouseEnter={() => {\n setHovered(true)\n onRowHover(row.item.id, true)\n }}\n onMouseLeave={() => {\n setHovered(false)\n onRowHover(row.item.id, false)\n }}\n onDragStartCapture={(event) => {\n draggedRef.current = true\n dnd.onRowDragStart(event, row.item.id)\n }}\n onDragEndCapture={() => {\n dnd.onRowDragEnd()\n requestAnimationFrame(() => {\n draggedRef.current = false\n })\n }}\n onDragOver={(event) => dnd.onRowDragOver(event, row)}\n onDrop={dnd.onDrop}\n className={cn(\n \"group/resource relative flex min-h-9 min-w-0 cursor-pointer items-center gap-2.5 rounded-md pr-3 text-sm outline-none\",\n \"text-muted-foreground transition-[color,background-color,scale] duration-150 ease-smooth-out hover:text-foreground motion-reduce:transition-none\",\n !row.item.disabled &&\n !renaming &&\n \"active:scale-97 motion-reduce:active:scale-100\",\n // Fallback for standalone rows that render without the shared pill.\n hoverLayoutId === undefined && \"hover:bg-muted\",\n \"focus-visible:bg-muted/70 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset\",\n \"data-[menu-open=true]:bg-muted data-[menu-open=true]:text-foreground\",\n \"data-[dragging=true]:opacity-40\",\n \"data-[drop=inside]:bg-primary/10 data-[drop=inside]:ring-1 data-[drop=inside]:ring-primary/45\",\n \"data-[drop=before]:before:absolute data-[drop=before]:before:-top-0.5 data-[drop=before]:before:right-2 data-[drop=before]:before:left-2 data-[drop=before]:before:h-0.5 data-[drop=before]:before:rounded-full data-[drop=before]:before:bg-primary\",\n \"data-[drop=after]:after:absolute data-[drop=after]:after:right-2 data-[drop=after]:after:-bottom-0.5 data-[drop=after]:after:left-2 data-[drop=after]:after:h-0.5 data-[drop=after]:after:rounded-full data-[drop=after]:after:bg-primary\",\n !acceptsChildren &&\n active &&\n \"bg-primary/10 text-primary dark:bg-primary/25 dark:text-primary-foreground\",\n row.item.disabled && \"cursor-not-allowed opacity-45\"\n )}\n style={{ paddingLeft: `${12 + row.depth * 16}px` }}\n >\n {hoverLayoutId ? (\n <AnimatePresence custom={hoverActive}>\n {hoverActive ? (\n <motion.span\n aria-hidden=\"true\"\n variants={reduce ? reducedPillVariants : pillVariants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n custom={hoverActive}\n className=\"pointer-events-none absolute inset-0\"\n >\n {hoverPill ? (\n <motion.span\n layoutId={hoverLayoutId}\n transition={reduce ? { duration: 0 } : SPRING_LAYOUT}\n className=\"block h-full w-full rounded-md bg-foreground/8 dark:bg-muted/50\"\n />\n ) : null}\n </motion.span>\n ) : null}\n </AnimatePresence>\n ) : null}\n <span\n aria-hidden=\"true\"\n className=\"relative grid size-5 shrink-0 place-items-center\"\n >\n {renderIcon?.(row.item) ?? SidebarIcon(row.item, expanded)}\n </span>\n\n {renaming ? (\n <input\n ref={inputRef}\n value={draft}\n aria-label={`Rename ${row.item.label}`}\n onChange={(event) => setDraft(event.target.value)}\n draggable={false}\n onClick={(event) => event.stopPropagation()}\n onDoubleClick={(event) => event.stopPropagation()}\n onBlur={() => {\n if (!skipRenameBlurRef.current) rename(row.item.id, draft)\n }}\n onKeyDown={(event) => {\n event.stopPropagation()\n if (event.key === \"Enter\") {\n skipRenameBlurRef.current = true\n rename(row.item.id, draft)\n }\n if (event.key === \"Escape\") {\n skipRenameBlurRef.current = true\n cancelRename()\n }\n }}\n className=\"relative h-7 min-w-0 flex-1 text-sm text-foreground outline-none focus-visible:ring-0 focus-visible:ring-ring\"\n />\n ) : (\n <MarqueeLabel active={hovered || menuOpen}>\n {row.item.label}\n </MarqueeLabel>\n )}\n\n {!renaming && !row.item.disabled ? (\n <MorphPopover open={menuOpen} onOpenChange={onMenuOpenChange}>\n <MorphPopoverTrigger>\n {(() => {\n const custom = renderActionsTrigger?.(row.item)\n if (custom) {\n // A row click selects/toggles — the trigger must not bubble.\n const customOnClick = (\n custom.props as {\n onClick?: (event: MouseEvent<HTMLElement>) => void\n }\n ).onClick\n return cloneElement(custom, {\n draggable: false,\n onClick: (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n customOnClick?.(event)\n },\n } as Partial<unknown>)\n }\n return (\n <Button\n draggable={false}\n tabIndex={-1}\n variant=\"link\"\n aria-label={`Actions for ${row.item.label}`}\n onClick={(event) => event.stopPropagation()}\n className=\"relative grid size-7 shrink-0 place-items-center rounded-md opacity-0 transition-opacity duration-150 ease-smooth-out outline-none group-hover/resource:opacity-80 group-hover/resource:delay-150 group-data-[menu-open=true]/resource:opacity-100 hover:bg-foreground/5 focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring motion-reduce:transition-none\"\n >\n <MoreHorizontal aria-hidden=\"true\" className=\"size-4\" />\n </Button>\n )\n })()}\n </MorphPopoverTrigger>\n <MorphPopoverContent\n side=\"bottom\"\n align=\"end\"\n sideOffset={8}\n radius={12}\n className=\"w-40 p-1.5\"\n >\n <div data-sidebar-resource-menu={row.item.id}>{menu}</div>\n </MorphPopoverContent>\n </MorphPopover>\n ) : null}\n\n {row.depth === 0 &&\n acceptsChildren &&\n (row.item.children?.length ?? 0) > 0 ? (\n <ChevronRight\n aria-hidden=\"true\"\n className={cn(\n \"relative size-3.5 shrink-0 text-muted-foreground transition-transform duration-200 ease-smooth-out motion-reduce:transition-none\",\n expanded && \"rotate-90\"\n )}\n />\n ) : null}\n </motion.div>\n )\n}\n\n/** `flat` is rebuilt whenever expansion changes, so its `FlatResource`\n * wrappers are fresh objects even for rows nothing happened to. The\n * comparator looks through the wrapper at what a row actually renders from —\n * its item (stable unless the data changed), depth and parent — so a sibling\n * opening does not walk every row. Each row's own state reaches it through\n * its atoms instead. */\nfunction sameRow(prev: IResourceRowProps, next: IResourceRowProps): boolean {\n return (\n prev.row.item === next.row.item &&\n prev.row.depth === next.row.depth &&\n prev.row.parentId === next.row.parentId\n )\n}\n\nexport const ResourceRow = memo(ResourceRowImpl, sameRow)\nResourceRow.displayName = \"ResourceRow\"\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { AnimatePresence } from \"motion/react\"\nimport { cn } from \"@/lib/utils\"\nimport type {\n TAISidebarComponentProps,\n IAISidebarContextValue,\n IAISidebarController,\n IAISidebarProps,\n TAISidebarViewProps,\n IFlatResource,\n} from \"./type\"\nimport { useAISidebar } from \"./use-ai-sidebar\"\nimport { AISidebarContext } from \"./sidebar-context\"\nimport { ResourceRow } from \"./sidebar-row\"\n\n/**\n * Resource tree for the app rail: nested rows with drag-and-drop reorder,\n * inline rename, per-row action menus and full keyboard navigation.\n *\n * Two ways to drive it. Pass the data and handlers as props and the block\n * owns its state, or hold a `useAISidebar` controller and pass it as\n * `controller` — the same rendering, but select, expand, rename, reorder\n * and menu state are then callable from anywhere in your app.\n */\nexport function AISidebar(props: TAISidebarComponentProps) {\n // Two components rather than one: hooks may not be called conditionally,\n // and the controller form has no options to build a fallback controller\n // from. Nobody switches a sidebar between the two forms at runtime.\n return props.controller ? (\n <AISidebarView {...viewProps(props)} controller={props.controller} />\n ) : (\n <UncontrolledAISidebar {...props} />\n )\n}\n\n/** The props form: builds its own controller and renders through it. */\nfunction UncontrolledAISidebar(props: IAISidebarProps) {\n const {\n renderIcon: _icon,\n renderMenu: _menu,\n renderActionsTrigger: _trigger,\n ariaLabel: _label,\n className: _className,\n controller: _controller,\n ...options\n } = props\n const controller = useAISidebar(options)\n return <AISidebarView {...viewProps(props)} controller={controller} />\n}\n\nfunction viewProps(props: TAISidebarComponentProps): TAISidebarViewProps {\n return {\n renderIcon: props.renderIcon,\n renderMenu: props.renderMenu,\n renderActionsTrigger: props.renderActionsTrigger,\n ariaLabel: props.ariaLabel,\n className: props.className,\n }\n}\n\n/** Rendering only — every piece of state lives on the controller. */\nfunction AISidebarView({\n controller,\n renderIcon,\n renderMenu,\n renderActionsTrigger,\n ariaLabel = \"Resources\",\n className,\n}: TAISidebarViewProps & { controller: IAISidebarController }) {\n const { dnd, hover } = controller\n const { draggingId, dropTarget } = dnd\n\n // Rows take the sidebar's id and the stable handlers, never the controller\n // — so this value keeps its identity and a hover or a toggle re-renders\n // only the rows whose own atoms changed. Deps name each function because\n // `dnd` itself carries live drag state and changes identity with it.\n const context = useMemo<IAISidebarContextValue>(\n () => ({\n sidebarId: controller.sidebarId,\n hoverLayoutId: hover.layoutId,\n renderIcon,\n renderMenu,\n renderActionsTrigger,\n setRowRef: controller.setRowRef,\n onRowKeyDown: controller.onRowKeyDown,\n onRowHover: hover.onRowHover,\n closeMenu: controller.closeMenu,\n dnd: {\n onDrop: dnd.onDrop,\n onRowDragStart: dnd.onRowDragStart,\n onRowDragEnd: dnd.onRowDragEnd,\n onRowDragOver: dnd.onRowDragOver,\n },\n }),\n [\n controller.sidebarId,\n controller.setRowRef,\n controller.onRowKeyDown,\n controller.closeMenu,\n hover.layoutId,\n hover.onRowHover,\n renderIcon,\n renderMenu,\n renderActionsTrigger,\n dnd.onDrop,\n dnd.onRowDragStart,\n dnd.onRowDragEnd,\n dnd.onRowDragOver,\n ]\n )\n\n return (\n <AISidebarContext.Provider value={context}>\n <div\n role=\"tree\"\n aria-label={ariaLabel}\n aria-multiselectable=\"false\"\n onDragOver={dnd.onRootDragOver}\n onDrop={dnd.onDrop}\n onMouseLeave={hover.clear}\n className={cn(\n \"relative min-w-0 flex-col gap-0.5 [overflow-anchor:none] group-data-[state=collapsed]/sidebar:hidden\",\n draggingId && \"pb-9 select-none\",\n className\n )}\n >\n <AnimatePresence initial={false}>\n {controller.flat.map((row: IFlatResource) => (\n <ResourceRow key={row.item.id} row={row} />\n ))}\n </AnimatePresence>\n\n {draggingId && (\n <div\n aria-hidden=\"true\"\n data-active={dropTarget?.id === null || undefined}\n className=\"absolute inset-x-1 bottom-0 flex h-8 items-center justify-center rounded-md border border-dashed border-border text-[10px] text-muted-foreground data-[active=true]:border-primary/50 data-[active=true]:bg-primary/10 data-[active=true]:text-foreground\"\n >\n Move to top level\n </div>\n )}\n </div>\n <span className=\"sr-only\" aria-live=\"polite\">\n {controller.announcement}\n </span>\n </AISidebarContext.Provider>\n )\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { useAtomValue, useSetAtom } from \"jotai\";\n\nimport {\n aiSidebarStateAtom,\n cancelAISidebarRenameAtom,\n closeAISidebarMenuAtom,\n collapseAISidebarRowAtom,\n collapseAllAISidebarRowsAtom,\n expandAISidebarRowAtom,\n expandAllAISidebarRowsAtom,\n focusAISidebarRowAtom,\n moveAISidebarRowAtom,\n openAISidebarMenuAtom,\n renameAISidebarRowAtom,\n resetAISidebarAtom,\n revealAISidebarRowAtom,\n selectAISidebarRowAtom,\n setAISidebarItemsAtom,\n startAISidebarRenameAtom,\n toggleAISidebarRowAtom,\n} from \"./ai-sidebar-atom.ts\";\nimport type {\n IAISidebarActions,\n TAISidebarInstanceId,\n IAISidebarState,\n} from \"./type.ts\";\n\n/**\n * Read the sidebar registered under `sidebarId` from anywhere below\n * `ExegiaProvider` — no controller, no props, no provider of its own.\n *\n * ```tsx\n * const { selectedId, movePending } = useAISidebarState(\"app-resources\")\n * ```\n *\n * This returns the whole state object, so the caller re-renders on any\n * change. A component that reads one field should subscribe to that field's\n * atom instead: `useAtomValue(aiSidebarActiveIdAtom(\"app-resources\"))`.\n */\nexport function useAISidebarState(\n sidebarId: TAISidebarInstanceId\n): IAISidebarState {\n return useAtomValue(aiSidebarStateAtom(sidebarId));\n}\n\n/**\n * Drive the sidebar registered under `sidebarId` from anywhere. Writes only —\n * the caller never re-renders when the sidebar changes, so this is what a\n * command palette, a keyboard shortcut or a route guard should reach for.\n *\n * `focus` and `closeMenu` move the store's roving target; DOM focus follows\n * only for callers that hold the controller, because the row refs live in\n * the block rather than the store.\n *\n * ```tsx\n * const resources = useAISidebarActions(\"app-resources\")\n * <Button onClick={resources.collapseAll}>Collapse all</Button>\n * ```\n */\nexport function useAISidebarActions(\n sidebarId: TAISidebarInstanceId\n): IAISidebarActions {\n const select = useSetAtom(selectAISidebarRowAtom(sidebarId));\n const expand = useSetAtom(expandAISidebarRowAtom(sidebarId));\n const collapse = useSetAtom(collapseAISidebarRowAtom(sidebarId));\n const toggleExpanded = useSetAtom(toggleAISidebarRowAtom(sidebarId));\n const expandAll = useSetAtom(expandAllAISidebarRowsAtom(sidebarId));\n const collapseAll = useSetAtom(collapseAllAISidebarRowsAtom(sidebarId));\n const reveal = useSetAtom(revealAISidebarRowAtom(sidebarId));\n const focus = useSetAtom(focusAISidebarRowAtom(sidebarId));\n const startRename = useSetAtom(startAISidebarRenameAtom(sidebarId));\n const cancelRename = useSetAtom(cancelAISidebarRenameAtom(sidebarId));\n const rename = useSetAtom(renameAISidebarRowAtom(sidebarId));\n const openMenu = useSetAtom(openAISidebarMenuAtom(sidebarId));\n const closeMenuInStore = useSetAtom(closeAISidebarMenuAtom(sidebarId));\n const move = useSetAtom(moveAISidebarRowAtom(sidebarId));\n const setItems = useSetAtom(setAISidebarItemsAtom(sidebarId));\n const reset = useSetAtom(resetAISidebarAtom(sidebarId));\n\n return useMemo(\n () => ({\n select,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n focus,\n startRename,\n cancelRename,\n rename,\n openMenu,\n // The atom returns the id it closed so the block can move DOM focus;\n // remote callers have no refs, so the return value is dropped here.\n closeMenu: () => void closeMenuInStore(),\n move,\n setItems,\n reset,\n }),\n [\n select,\n expand,\n collapse,\n toggleExpanded,\n expandAll,\n collapseAll,\n reveal,\n focus,\n startRename,\n cancelRename,\n rename,\n openMenu,\n closeMenuInStore,\n move,\n setItems,\n reset,\n ]\n );\n}\n","import { AISidebar } from \"./ai-sidebar\"\nimport { MarqueeLabel } from \"./marquee-label.tsx\"\nimport { ResourceRow } from \"./sidebar-row.tsx\"\nimport { SidebarIcon } from \"./sidebar-icon.tsx\"\nexport { useAISidebar, type IUseAISidebarOptions } from \"./use-ai-sidebar.ts\"\nexport {\n useAISidebarActions,\n useAISidebarState,\n} from \"./use-ai-sidebar-state.ts\"\nexport type * from \"./type.ts\"\n// The public atom surface. `@internal` atoms (config, handlers, mount, the\n// projections, the owned-* loop guards) stay unexported on purpose —\n// `export *` would make every internal a breaking-change surface for\n// consumer apps.\nexport {\n aiSidebarActiveIdAtom,\n aiSidebarAnnouncementAtom,\n aiSidebarDraggingIdAtom,\n aiSidebarDropTargetAtom,\n aiSidebarExpandedIdsAtom,\n aiSidebarFlatAtom,\n aiSidebarFocusedIdAtom,\n aiSidebarHoverActiveAtom,\n aiSidebarHoveredIdAtom,\n aiSidebarItemsAtom,\n aiSidebarMenuOpenIdAtom,\n aiSidebarMovePendingAtom,\n aiSidebarRenamingIdAtom,\n aiSidebarRowDraggingAtom,\n aiSidebarRowDropAtom,\n aiSidebarRowExpandedAtom,\n aiSidebarRowFocusedAtom,\n aiSidebarRowHoveredAtom,\n aiSidebarRowMenuOpenAtom,\n aiSidebarRowRenamingAtom,\n aiSidebarRowSelectedAtom,\n aiSidebarStateAtom,\n cancelAISidebarRenameAtom,\n clearAISidebarHoverAtom,\n closeAISidebarMenuAtom,\n collapseAISidebarRowAtom,\n collapseAllAISidebarRowsAtom,\n endAISidebarDragAtom,\n expandAISidebarRowAtom,\n expandAllAISidebarRowsAtom,\n focusAISidebarRowAtom,\n moveAISidebarRowAtom,\n openAISidebarMenuAtom,\n removeAISidebarInstance,\n renameAISidebarRowAtom,\n resetAISidebarAtom,\n revealAISidebarRowAtom,\n selectAISidebarRowAtom,\n setAISidebarHoveredAtom,\n setAISidebarItemsAtom,\n startAISidebarRenameAtom,\n toggleAISidebarRowAtom,\n} from \"./ai-sidebar-atom.ts\"\n\nexport { AISidebar, MarqueeLabel, ResourceRow, SidebarIcon }\n\nexport const Sidebar = {\n Wrapper: AISidebar,\n MarqueeLabel,\n Row: ResourceRow,\n Icon: SidebarIcon,\n}\n","import { atom } from \"jotai\"\nimport type { TSidebarComponentMap, TSidebarSide } from \"./type\"\n\ntype OpenState = Record<TSidebarSide, boolean>\ntype Handlers = {\n setOpen: (open: boolean, side: TSidebarSide) => void\n setOpenMobile: (open: boolean, side: TSidebarSide) => void\n}\nfunction createState() {\n const railWidth = atom<number | null>(null)\n const resizeSidebar = atom(null, (_get, set, width: number) => {\n if (Number.isFinite(width))\n set(railWidth, Math.max(180, Math.min(480, width)))\n })\n const open = atom<OpenState>({ left: true, right: false })\n const mobile = atom<OpenState>({ left: false, right: false })\n const components = atom<TSidebarComponentMap>({})\n const handlers = atom<Handlers | null>(null)\n const seeded = atom(false)\n const setOpen = atom(null, (get, set, value: boolean, side: TSidebarSide) => {\n const host = get(handlers)\n if (host) host.setOpen(value, side)\n else set(open, { ...get(open), [side]: value })\n })\n const setOpenMobile = atom(\n null,\n (get, set, value: boolean, side: TSidebarSide) => {\n const host = get(handlers)\n if (host) host.setOpenMobile(value, side)\n else set(mobile, { ...get(mobile), [side]: value })\n }\n )\n const toggle = atom(null, (get, set, side: TSidebarSide) =>\n set(setOpen, !get(open)[side], side)\n )\n const seed = atom(\n null,\n (\n get,\n set,\n initial?: Partial<OpenState>,\n initialMobile?: Partial<OpenState>\n ) => {\n if (get(seeded)) return\n set(seeded, true)\n set(open, { ...get(open), ...initial })\n set(mobile, { ...get(mobile), ...initialMobile })\n }\n )\n return {\n railWidth,\n resizeSidebar,\n open,\n mobile,\n components,\n handlers,\n setOpen,\n setOpenMobile,\n toggle,\n seed,\n }\n}\nconst instances = new Map<string, ReturnType<typeof createState>>()\nexport function shellPanelAtoms(id: string) {\n let state = instances.get(id)\n if (!state) {\n state = createState()\n instances.set(id, state)\n }\n return state\n}\nexport function removeShellPanelInstance(id: string) {\n instances.delete(id)\n}\n","/**\n * The shell's layout arithmetic, as plain functions over px.\n *\n * Nothing here touches React or the DOM. This module IS the contract of who\n * gets which column, which keeps the rule unit-testable on its own and lets\n * the shell-fit atoms (`shellFitFitsAtom`, `shellFitPanelWidthAtom`) call it\n * without restating it: `useShellFit` only supplies the measurements.\n */\n\n/** The px the shell lays itself out with. Every field is measured from a CSS\n * variable (see `SHELL_WIDTHS`), never hard-coded, so a consumer's override\n * flows straight through the rule. */\nexport interface IShellSidebarFit {\n width: number\n minWidth: number\n maxWidth: number\n canExpand: boolean\n mode: \"expanded\" | \"icon\" | \"hidden\"\n}\n\n/** Reserve the body first, then shrink, fold, or hide the navigation rail.\n * The requested width/open state is retained so widening restores it. */\nexport function fitSidebar({\n width,\n padding,\n gap,\n insetMin,\n expanded,\n icon,\n minimum,\n open,\n collapsible,\n present,\n}: {\n width: number\n padding: number\n gap: number\n insetMin: number\n expanded: number\n icon: number\n minimum: number\n open: boolean\n collapsible: string\n present: boolean\n}): IShellSidebarFit {\n const room = width > 0 ? Math.max(0, width - padding - gap - insetMin) : 480\n const canExpand = present && room >= minimum\n const isExpanded = canExpand && (open || collapsible === \"none\")\n const railWidth = !present\n ? 0\n : isExpanded\n ? Math.min(expanded, room)\n : collapsible === \"offcanvas\" || room < icon\n ? 0\n : icon\n return {\n width: railWidth,\n minWidth: minimum,\n maxWidth: Math.max(minimum, Math.min(480, room)),\n canExpand,\n mode: railWidth === 0 ? \"hidden\" : isExpanded ? \"expanded\" : \"icon\",\n }\n}\n\nexport interface IShellMetrics {\n sidebar?: IShellSidebarFit\n /** What the left rail occupies right now — its expanded width, its icon\n * width, or 0 when there is no rail at all (or it is off canvas). */\n rail: number\n /** The floor the body refuses to go below. */\n insetMin: number\n /** The secondary panel's floor, which is also the width it opens at. */\n panelMin: number\n /** Available shell container width (legacy field name). */\n viewport: number\n /** px the shell's own frame eats before any column gets a share: its\n * padding, plus the gap between columns.\n */\n chrome: number\n}\n\n/** px the shell needs before a secondary panel can exist: the rail as it\n * stands, plus the body and the panel at their own floors. */\nexport function requiredWidth({ rail, insetMin, panelMin }: IShellMetrics) {\n return rail + insetMin + panelMin\n}\n\n/**\n * Whether the shell can hold a secondary panel, including padding and gaps.\n *\n * An unmeasurable shell fails open. A server render, a `display: none` host\n * or a test environment with no layout engine all report 0, and a panel must\n * never disappear over a reading the layout could not produce.\n */\nexport function fitsPanel(metrics: IShellMetrics) {\n if (metrics.viewport <= 0 || metrics.panelMin <= 0) return true\n return requiredWidth(metrics) + metrics.chrome <= metrics.viewport\n}\n\n/** How wide the secondary panel may be: never under its own floor, never past\n * the slack the body holds above its floor. `max` never drops below `min`, so\n * a shell that does not fit reports a degenerate range instead of an inverted\n * one — `fitsPanel` is what hides the panel, not a negative bound. */\nexport function panelBounds(metrics: IShellMetrics) {\n const { chrome, insetMin, panelMin, rail, viewport } = metrics\n return {\n min: panelMin,\n max: Math.max(panelMin, viewport - chrome - rail - insetMin),\n }\n}\n\nexport function clampPanelWidth(width: number, metrics: IShellMetrics) {\n const { min, max } = panelBounds(metrics)\n return Math.min(Math.max(width, min), max)\n}\n\n/** Resizes fire per pointer move and per resize event, most of them landing\n * on the same numbers — comparing fields keeps those from re-rendering the\n * whole shell. */\nexport function metricsEqual(a: IShellMetrics, b: IShellMetrics) {\n return (\n a.rail === b.rail &&\n a.insetMin === b.insetMin &&\n a.panelMin === b.panelMin &&\n a.viewport === b.viewport &&\n a.chrome === b.chrome &&\n a.sidebar?.width === b.sidebar?.width &&\n a.sidebar?.minWidth === b.sidebar?.minWidth &&\n a.sidebar?.maxWidth === b.sidebar?.maxWidth &&\n a.sidebar?.canExpand === b.sidebar?.canExpand &&\n a.sidebar?.mode === b.sidebar?.mode\n )\n}\n","import { removeShellPanelInstance } from \"./shell-panel-atom\"\n/**\n * Per-instance Jotai state for the shell's layout fit.\n *\n * Every atom is a module-level family keyed by a shell id, so one\n * `ExegiaProvider` at the app root is enough: several shells coexist in one\n * store without a provider each, and a title bar, a command palette or a\n * layout test can drive one by id without holding its controller.\n *\n * Unlike the tree, this feature has no controlled props — the shell measures\n * itself, nobody hands it a viewport. So, like `blocks/auth`'s coordination\n * layer, there is no config atom, no projection and no owned-* loop guard.\n * `useShellFit` is the only writer of `metrics`, and that write is silent by\n * design: a resize is not an event an app subscribed to.\n *\n * The rule itself lives in `shell-metrics.ts` and is called from here, so the\n * arithmetic has one home whether it is read through a hook or a store.\n */\nimport { atom } from \"jotai\"\nimport type { Getter, Setter } from \"jotai\"\n\nimport {\n clampPanelWidth,\n fitsPanel,\n metricsEqual,\n panelBounds,\n type IShellMetrics,\n} from \"./shell-metrics\"\nimport type {\n TShellFitInstanceId,\n IShellFitPanelBounds,\n IShellFitSeed,\n IShellFitState,\n} from \"./type\"\n\n/** An unmeasured shell. Zeroes read as \"no layout yet\", which the rule fails\n * open on rather than hiding a panel over a reading it never took. */\nconst NO_METRICS: IShellMetrics = {\n rail: 0,\n insetMin: 0,\n panelMin: 0,\n viewport: 0,\n chrome: 0,\n}\n\n/** A panel that mounts at `--panel-width`. */\nconst DEFAULT_SHELL_FIT_SEED: IShellFitSeed = { panelWidth: null }\n\nconst NO_BOUNDS: IShellFitPanelBounds = { min: 0, max: 0 }\n\n/**\n * A string-keyed atom family.\n *\n * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, and we need only\n * the string-keyed case with a `remove` — so this stays in-house rather than\n * adding `jotai-family` as a second Jotai package to keep version-aligned.\n * Dropping a key lets the store's WeakMap release that instance's state.\n */\ntype TFamily<AtomType> = ((id: TShellFitInstanceId) => AtomType) & {\n remove: (id: TShellFitInstanceId) => void\n}\n\n/** Every family, so `removeShellFitInstance` can drop an id from all of them. */\nconst families: { remove: (id: TShellFitInstanceId) => void }[] = []\n\nfunction keyed<AtomType>(create: (id: TShellFitInstanceId) => AtomType) {\n const cache = new Map<TShellFitInstanceId, AtomType>()\n const family = ((id: TShellFitInstanceId) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id: TShellFitInstanceId) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `shell-fit/${id}/${name}`\n return instance\n })\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TShellFitInstanceId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id))\n instance.debugLabel = `shell-fit/${id}/${name}`\n return instance\n })\n}\n\nfunction actionFamily<Args extends unknown[]>(\n name: string,\n write: (\n get: Getter,\n set: Setter,\n id: TShellFitInstanceId,\n ...args: Args\n ) => void\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n )\n instance.debugLabel = `shell-fit/${id}/${name}`\n return instance\n })\n}\n\n/** The shell's own measurement of its columns. `useShellFit` is the only\n * writer; read `shellFitMeasuredAtom` to get it with the \"no layout yet\" case\n * already resolved. */\nexport const shellFitMetricsAtom = stateFamily<IShellMetrics>(\n \"metrics\",\n NO_METRICS\n)\n\n/** The width the user dragged to, before clamping — null while the panel sits\n * at `--panel-width`. Read `shellFitPanelWidthAtom` for the width the panel\n * actually renders at: clamping on read is what lets a narrowing viewport\n * pull the panel down without forgetting the width they asked for. */\nexport const shellFitRequestedWidthAtom = stateFamily<number | null>(\n \"requestedWidth\",\n null\n)\n\nconst shellFitSeedAtom = stateFamily<IShellFitSeed>(\n \"seed\",\n DEFAULT_SHELL_FIT_SEED\n)\nconst shellFitInitializedAtom = stateFamily<boolean>(\"initialized\", false)\n\n/** The metrics, or null when the shell has no layout to report — a server\n * render, a `display: none` host, a test with no layout engine. A zero is not\n * a width, and treating it as one would pin the panel to nothing. */\nexport const shellFitMeasuredAtom = readFamily<IShellMetrics | null>(\n \"measured\",\n (get, id) => {\n const metrics = get(shellFitMetricsAtom(id))\n return metrics.panelMin > 0 ? metrics : null\n }\n)\n\n/** Whether the shell can hold a secondary panel at all. */\nexport const shellFitFitsAtom = readFamily(\"fits\", (get, id) =>\n fitsPanel(get(shellFitMetricsAtom(id)))\n)\n\n/** The range a resize may land in. */\nexport const shellFitPanelBoundsAtom = readFamily<IShellFitPanelBounds>(\n \"panelBounds\",\n (get, id) => {\n const measured = get(shellFitMeasuredAtom(id))\n return measured ? panelBounds(measured) : NO_BOUNDS\n }\n)\n\n/** The width the secondary panel renders at, or null before the first\n * measurement, where the caller falls back to `--panel-width`. */\nexport const shellFitPanelWidthAtom = readFamily<number | null>(\n \"panelWidth\",\n (get, id) => {\n const measured = get(shellFitMeasuredAtom(id))\n if (!measured) return null\n const requested = get(shellFitRequestedWidthAtom(id))\n return clampPanelWidth(requested ?? measured.panelMin, measured)\n }\n)\n\n/** The whole fit of one shell. This changes on every measurement, so a\n * component that reads one field should subscribe to that field's atom\n * instead: `useAtomValue(shellFitFitsAtom(\"app-shell\"))`. */\nexport const shellFitStateAtom = readFamily<IShellFitState>(\n \"state\",\n (get, id) => ({\n sidebar: get(shellFitMetricsAtom(id)).sidebar ?? null,\n metrics: get(shellFitMeasuredAtom(id)),\n fits: get(shellFitFitsAtom(id)),\n panelWidth: get(shellFitPanelWidthAtom(id)),\n bounds: get(shellFitPanelBoundsAtom(id)),\n })\n)\n\n/** @internal The measurement's way in. Silent, and inert when the numbers did\n * not move — a resize event that changes nothing must not re-render a shell. */\nexport const measureShellFitAtom = actionFamily<[metrics: IShellMetrics]>(\n \"measure\",\n (get, set, id, metrics) => {\n if (metricsEqual(get(shellFitMetricsAtom(id)), metrics)) return\n set(shellFitMetricsAtom(id), metrics)\n }\n)\n\n/** Resize the secondary panel. Clamped on the way in, so a drag past the\n * gutter parks at the bound instead of banking travel it has to give back —\n * and a caller with no idea how wide the shell is can still ask for 900. */\nexport const resizeShellPanelAtom = actionFamily<[width: number]>(\n \"resizePanel\",\n (get, set, id, width) => {\n const measured = get(shellFitMeasuredAtom(id))\n set(\n shellFitRequestedWidthAtom(id),\n measured ? clampPanelWidth(width, measured) : width\n )\n }\n)\n\n/** Back to the width the shell mounted with — `defaultPanelWidth`, or\n * `--panel-width` when there was none. */\nexport const resetShellPanelWidthAtom = actionFamily<[]>(\n \"resetPanelWidth\",\n (get, set, id) => {\n set(shellFitRequestedWidthAtom(id), get(shellFitSeedAtom(id)).panelWidth)\n }\n)\n\n/** @internal Seed the instance once. A seed describes the mount, not every\n * render, so a `defaultPanelWidth` that arrives later never overwrites a\n * width the user dragged to. */\nexport const mountShellFitAtom = actionFamily<[seed: IShellFitSeed]>(\n \"mount\",\n (get, set, id, seed) => {\n if (get(shellFitInitializedAtom(id))) return\n set(shellFitInitializedAtom(id), true)\n set(shellFitSeedAtom(id), seed)\n set(shellFitRequestedWidthAtom(id), seed.panelWidth)\n }\n)\n\n/** Drop every atom for `id`. `useShellFit` calls this on unmount for shells it\n * keyed itself; an explicit `shellId` is the app's key and outlives its\n * component, so a resized panel survives a route change. */\nexport function removeShellFitInstance(id: TShellFitInstanceId): void {\n removeShellPanelInstance(id)\n for (const family of families) family.remove(id)\n}\n","\"use client\"\n\nimport { useEffect, useLayoutEffect, useRef } from \"react\"\nimport {\n attachSeparator,\n createPanel,\n createPanelGroup,\n type Orientation,\n type PanelController,\n type PanelOptions,\n type Size,\n} from \"motion-panels\"\n\n/** Attach Motion Panels to our existing surfaces without adding styled wrappers. */\nexport function useMotionPanel(\n options: PanelOptions<Size> & {\n orientation?: Orientation\n enabled?: boolean\n }\n) {\n const {\n orientation = \"horizontal\",\n enabled = true,\n ...panelOptions\n } = options\n const panelRef = useRef<HTMLElement | null>(null)\n const gripRef = useRef<HTMLDivElement | null>(null)\n const controllerRef = useRef<PanelController | null>(null)\n const latest = useRef(panelOptions)\n useLayoutEffect(() => {\n latest.current = panelOptions\n })\n\n useLayoutEffect(() => {\n const node = panelRef.current\n if (!node || !enabled) return\n const group = createPanelGroup(orientation)\n const controller = createPanel(group, latest.current)\n controllerRef.current = controller\n const detach = controller.attach(node)\n const extent = group.axes.extent\n const previous = node.style[extent]\n const draw = (size: number) => {\n node.style[extent] = `${Math.max(0, size)}px`\n }\n draw(controller.motion.size.get())\n const stopSize = controller.motion.size.on(\"change\", draw)\n const stopState = controller.subscribe(() => {\n node.toggleAttribute(\"data-resizing\", controller.state.dragging)\n node.toggleAttribute(\"data-folding\", controller.state.folding)\n })\n const detachGrip = gripRef.current\n ? attachSeparator(gripRef.current, group, controller)\n : undefined\n return () => {\n detachGrip?.()\n stopSize()\n stopState()\n detach()\n controller.destroy()\n controllerRef.current = null\n node.style[extent] = previous\n }\n }, [orientation, enabled])\n\n useLayoutEffect(() => {\n controllerRef.current?.sync(panelOptions)\n })\n // A separator can mount after a collapsed panel becomes visible. The host\n // keeps it mounted instead and removes it from focus while closed.\n useEffect(\n () => () => {\n controllerRef.current?.drag.cancel()\n },\n []\n )\n return { panelRef, gripRef }\n}\n","export const SHELL_BEZEL_CLASSES =\n \"bezel-lit-t-2 bezel-lit-blur-2 bezel-lit/57 bezel-dim-b-2 bezel-dim-blur-3 bezel-dim/11 dark:bezel-lit-blur-3 dark:bezel-lit/14 dark:bezel-dim/78\"\n\nexport const TITLE_BAR_HEIGHT = 48\n// The desktop rail settles at a hard zero-width boundary. Keep the spring\n// critically damped so it cannot overshoot, pause against that boundary, and\n// then snap back during the final frame.\nimport { EASE_OUT, EASE_DRAWER } from \"@/lib/ease.ts\"\nimport type { Variants } from \"motion/react\"\nimport { createContext, useContext, useSyncExternalStore } from \"react\"\nimport type {\n IAnimatedSidebarContextValue,\n IAnimatedSidebarPanelContextValue,\n} from \"./type\"\n\nexport const SIDEBAR_MORPH_TRANSITION = {\n type: \"spring\",\n stiffness: 380,\n damping: 35,\n mass: 0.75,\n} as const\n\nexport const LABEL_ENTER_TRANSITION = {\n duration: 0.2,\n delay: 0.08,\n ease: EASE_OUT,\n} as const\n\nexport const LABEL_EXIT_TRANSITION = {\n duration: 0.12,\n ease: EASE_OUT,\n} as const\n\nexport const PANEL_TRANSITION = {\n duration: 0.36,\n ease: EASE_DRAWER,\n} as const\n\nexport const REDUCED_TRANSITION = {\n duration: 0.16,\n ease: EASE_OUT,\n} as const\n\nconst SUBMENU_TRANSITION = {\n duration: 0.18,\n ease: EASE_OUT,\n} as const\n\nexport const SUBMENU_VARIANTS: Variants = {\n closed: {\n opacity: 0,\n clipPath: \"inset(0 0 100% 0 round 8px)\",\n transition: {\n duration: 0.14,\n ease: EASE_OUT,\n staggerChildren: 0.025,\n staggerDirection: -1,\n },\n },\n open: {\n opacity: 1,\n clipPath: \"inset(0 0 0% 0 round 8px)\",\n transition: {\n duration: 0.2,\n delayChildren: 0.035,\n ease: EASE_OUT,\n staggerChildren: 0.045,\n },\n },\n}\n\nexport const SUBMENU_ITEM_VARIANTS: Variants = {\n closed: {\n opacity: 0,\n y: -6,\n filter: \"blur(3px)\",\n },\n open: {\n opacity: 1,\n y: 0,\n filter: \"blur(0px)\",\n transition: SUBMENU_TRANSITION,\n },\n}\n\nexport const FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\")\n\nexport const MOBILE_QUERY = \"(max-width: 767px)\"\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\n/**\n * The shell's layout contract, in px. Every entry lands on the provider's\n * wrapper as a CSS variable, so a consumer overrides a column by restyling it\n * rather than by passing a prop:\n *\n * | variable | column |\n * | ---------------------- | ----------------------------------------- |\n * | `--sidebar-width` | left rail, expanded |\n * | `--sidebar-width-icon` | left rail, folded to icons |\n * | `--panel-width` | secondary panel: its floor AND its default |\n * | `--inset-min-width` | the body's floor |\n *\n * These are only the defaults. Every measurement resolves the live variable,\n * so an override wins over the value written here.\n */\nexport const SHELL_WIDTHS = {\n \"--sidebar-min-width\": \"180px\",\n \"--sidebar-width\": \"256px\",\n \"--sidebar-width-icon\": \"56px\",\n \"--sidebar-width-mobile\": \"18rem\",\n \"--panel-width\": \"320px\",\n \"--inset-min-width\": \"360px\",\n} as const\n\n/** The expanded width of a panel docked to `side`: the secondary panel opens\n * at `--panel-width`, the primary rail at `--sidebar-width`. */\nexport function expandedWidthVar(side: \"left\" | \"right\") {\n return side === \"right\" ? \"var(--panel-width)\" : \"var(--sidebar-width)\"\n}\n\n/** Resolve a CSS length — `var()` included — to px inside `host`'s cascade.\n * Custom properties inherit, so a throwaway probe mounted in `host` reads the\n * very `--sidebar-width` the shell lays out with, including a value a\n * consumer overrode on the provider. Returns 0 when `host` has no layout\n * (server render, `display: none`), so callers must fail open on 0 rather\n * than treat it as a real measurement. */\nexport function resolveLength(host: HTMLElement, value: string) {\n const probe = document.createElement(\"div\")\n probe.style.cssText = `position:absolute;visibility:hidden;pointer-events:none;width:${value}`\n host.appendChild(probe)\n const px = probe.getBoundingClientRect().width\n probe.remove()\n return px\n}\n\nexport const AnimatedSidebarContext =\n createContext<IAnimatedSidebarContextValue | null>(null)\n\nexport const AnimatedSidebarPanelContext =\n createContext<IAnimatedSidebarPanelContextValue | null>(null)\n\nexport function useAnimatedSidebar() {\n const context = useContext(AnimatedSidebarContext)\n if (!context) {\n throw new Error(\n \"useAnimatedSidebar must be used inside AnimatedPanelProvider.\"\n )\n }\n return context\n}\n\nfunction subscribeToMobileQuery(callback: () => void) {\n const query = window.matchMedia(MOBILE_QUERY)\n query.addEventListener(\"change\", callback)\n return () => query.removeEventListener(\"change\", callback)\n}\n\nexport function getMobileSnapshot() {\n return window.matchMedia(MOBILE_QUERY).matches\n}\n\nexport function getServerMobileSnapshot() {\n return false\n}\n\nexport function useIsMobile() {\n return useSyncExternalStore(\n subscribeToMobileQuery,\n getMobileSnapshot,\n getServerMobileSnapshot\n )\n}\n\nexport function useAnimatedSidebarPanel() {\n const context = useContext(AnimatedSidebarPanelContext)\n if (!context) {\n throw new Error(\"Animated Sidebar parts must be used inside AnimatedPanel.\")\n }\n return context\n}\n","\"use client\"\n// beui.dev/components/motion/animated-sidebar\n\nimport { motion } from \"motion/react\"\nimport { useCallback } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { useSetAtom } from \"jotai\"\nimport { shellPanelAtoms } from \"./shell-panel-atom\"\nimport { useMotionPanel } from \"@/lib/use-motion-panel\"\nimport type { IAnimatedSidebarProps } from \"./type\"\nimport {\n AnimatedSidebarPanelContext,\n useAnimatedSidebar,\n SIDEBAR_MORPH_TRANSITION,\n PANEL_TRANSITION,\n REDUCED_TRANSITION,\n} from \"./utils\"\n\nexport function AnimatedPanel({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"icon\",\n ariaLabel = \"Sidebar\",\n children,\n className,\n panelClassName,\n style,\n ref,\n ...props\n}: IAnimatedSidebarProps) {\n const context = useAnimatedSidebar()\n const resizeSidebar = useSetAtom(\n shellPanelAtoms(context.fit.shellId).resizeSidebar\n )\n const { bounds, panelWidth, resizePanel } = context.fit\n const sidebar = context.fit.sidebar\n const sideOpen = context.open[side]\n const collapsed =\n side === \"left\" && sidebar\n ? sidebar.mode !== \"expanded\"\n : collapsible !== \"none\" && !sideOpen\n const offcanvas =\n side === \"left\" && sidebar\n ? sidebar.mode === \"hidden\"\n : collapsed && collapsible === \"offcanvas\"\n const visible = side !== \"right\" || context.fit.fits\n const width =\n side === \"right\"\n ? (panelWidth ?? 320)\n : (sidebar?.width ?? (collapsed ? 56 : 256))\n const { panelRef, gripRef } = useMotionPanel({\n size: width,\n defaultSize:\n side === \"right\"\n ? (context.fit.defaultPanelWidth ?? (bounds.min || 320))\n : 256,\n minSize:\n side === \"right\"\n ? bounds.min || 320\n : collapsed\n ? width\n : (sidebar?.minWidth ?? 180),\n maxSize:\n side === \"right\"\n ? bounds.max || 640\n : collapsed\n ? width\n : (sidebar?.maxWidth ?? 480),\n collapsed: offcanvas,\n enabled: visible,\n overshoot: false,\n transition: context.reduce ? { duration: 0 } : SIDEBAR_MORPH_TRANSITION,\n onSizeChange: (size) =>\n side === \"right\"\n ? resizePanel(Number(size))\n : resizeSidebar(Number(size)),\n onCollapsedChange:\n collapsible !== \"none\"\n ? (value) => context.setOpen(!value, side)\n : undefined,\n })\n const setPanelRef = useCallback(\n (node: HTMLElement | null) => {\n panelRef.current = node\n if (typeof ref === \"function\") ref(node)\n else if (ref) ref.current = node\n },\n [panelRef, ref]\n )\n\n // A secondary panel exists only while the viewport can carry it beside the\n // rail and the body at their own floors. Below that there is nothing to dock\n // into, so the panel stands down rather than squeezing the content column —\n // and its trigger stands down with it.\n if (side === \"right\" && !context.fit.fits) return null\n\n return (\n <motion.aside\n {...props}\n ref={setPanelRef}\n initial={false}\n aria-label={ariaLabel}\n aria-hidden={offcanvas || undefined}\n inert={offcanvas || undefined}\n data-slot=\"sidebar\"\n data-state={collapsed ? \"collapsed\" : \"expanded\"}\n data-collapsible={collapsible}\n data-variant={variant}\n data-side={side}\n animate={{\n // Swallow the shell's gap-x-2 column gap while off canvas so the\n // shell edge keeps a constant spacing-2 inset whether the panel is\n // open (gap + panel + margin) or collapsed (gap + this).\n ...(side === \"right\"\n ? { marginLeft: offcanvas ? \"-0.5rem\" : \"0rem\" }\n : { marginRight: offcanvas ? \"-0.5rem\" : \"0rem\" }),\n }}\n // A drag has to land on the frame it happened — the morph spring would\n // trail the pointer and keep settling after the handle is released.\n transition={context.reduce ? { duration: 0 } : SIDEBAR_MORPH_TRANSITION}\n style={{ ...style, flexShrink: 0 }}\n className={cn(\n \"group/sidebar relative h-full shrink-0 will-change-[width]\",\n \"peer flex!\",\n side === \"right\" && \"order-last\",\n className\n )}\n >\n {collapsible !== \"none\" && (\n <div\n ref={gripRef}\n role=\"separator\"\n aria-label={`Resize ${ariaLabel}`}\n aria-orientation=\"vertical\"\n tabIndex={collapsed ? -1 : 0}\n aria-hidden={collapsed || undefined}\n className={cn(\n \"inset-y-0 w-2 hover:bg-amber-300/20 data-resizing:bg-amber-300/20 absolute z-10 cursor-col-resize touch-none focus-visible:outline-2 focus-visible:outline-ring\",\n collapsed && \"pointer-events-none\",\n side === \"right\" ? \"-left-2\" : \"-right-2\"\n )}\n />\n )}\n {/* The aside's own width animation is the whole layout story: the\n inner panel just fills it and fades, so it is masked to the aside's\n box here instead of clipping the aside itself — the aside must stay\n unclipped for the gap handle above to be hoverable. */}\n <div className={\"contents\"}>\n <motion.div\n initial={false}\n animate={{ opacity: offcanvas ? 0 : 1 }}\n transition={context.reduce ? REDUCED_TRANSITION : PANEL_TRANSITION}\n className={cn(\n \"top-0 sticky flex w-full flex-col overflow-hidden\",\n // Pin the right panel to the aside's trailing edge so the aside's\n // width animation expands the panel out of it instead of\n // revealing a detached strip.\n side === \"right\" && \"ml-auto\",\n\n // Panels fill the shell's container, not the viewport — the shell\n // owns its own scrolling, so a bounded host (docs demo, split\n // view) must bound the panels too. Full-page apps size the shell\n // itself (e.g., h-svh). The bottom gap comes from the shell\n // container's padding, so panels only carry their top offset.\n variant === \"floating\" && \"mx-2 mt-2 h-[calc(100%-0.5rem)]\",\n variant === \"inset\" && \"mt-2 h-[calc(100%-0.5rem)]\",\n\n panelClassName\n )}\n >\n <AnimatedSidebarPanelContext.Provider\n value={{ collapsed, collapsible, side }}\n >\n {children}\n </AnimatedSidebarPanelContext.Provider>\n </motion.div>\n </div>\n </motion.aside>\n )\n}\n","\"use client\"\n\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\"\nimport { useAtomValueRawSync, useSetAtom } from \"jotai\"\nimport { useIsomorphicLayoutEffect } from \"motion/react\"\n\nimport {\n measureShellFitAtom,\n mountShellFitAtom,\n removeShellFitInstance,\n resetShellPanelWidthAtom,\n resizeShellPanelAtom,\n shellFitStateAtom,\n} from \"./shell-fit-atom\"\nimport { fitsPanel, fitSidebar, type IShellMetrics } from \"./shell-metrics\"\nimport type {\n IShellFitController,\n IShellFitSeed,\n IUseShellFitOptions,\n} from \"./type\"\nimport { shellPanelAtoms } from \"./shell-panel-atom\"\nimport { resolveLength } from \"./utils\"\n\n/** Read the shell's columns out of the DOM. The widths come from CSS\n * variables; the rail's share comes from its own state, not its box, so a\n * fold counts the moment React commits it rather than a frame later when the\n * width animation has moved. */\nfunction readMetrics(host: HTMLElement, railOpen: boolean): IShellMetrics {\n // Whether a shell has a rail at all is the caller's composition, so it is\n // read off the DOM rather than tracked in state.\n const rail = host.querySelector<HTMLElement>(\n '[data-slot=\"sidebar\"][data-side=\"left\"]'\n )\n const frame = getComputedStyle(host)\n const gap = Number.parseFloat(frame.columnGap) || 0\n const padding =\n (Number.parseFloat(frame.paddingLeft) || 0) +\n (Number.parseFloat(frame.paddingRight) || 0)\n const width = host.clientWidth || host.getBoundingClientRect().width\n const insetMin = resolveLength(host, \"var(--inset-min-width)\")\n const sidebar = fitSidebar({\n width,\n padding,\n gap,\n insetMin,\n expanded: resolveLength(host, \"var(--sidebar-width)\") || 256,\n icon: resolveLength(host, \"var(--sidebar-width-icon)\") || 56,\n minimum: resolveLength(host, \"var(--sidebar-min-width)\") || 180,\n open: railOpen,\n collapsible: rail?.dataset.collapsible ?? \"icon\",\n present: Boolean(rail),\n })\n return {\n rail: sidebar.width,\n sidebar,\n insetMin,\n panelMin: resolveLength(host, \"var(--panel-width)\"),\n viewport: width,\n // Measure the space a prospective inspector needs, even while absent.\n chrome: padding + gap * (sidebar.width > 0 ? 2 : 1),\n }\n}\n\n/**\n * Measures the shell and decides what the secondary panel may do: whether it\n * exists at all, and how wide it may be dragged.\n *\n * Container resizing, rail folding, and user resizing are observed here,\n * so embedded shells obey the same bounds as full-page layouts. The measurement is\n * the only thing this hook keeps to itself: the numbers land in the shell-fit\n * atoms keyed by `shellId`, so anything under `ExegiaProvider` can read the\n * verdict (`useShellFitState`) or move the panel (`useShellFitActions`)\n * without holding this controller.\n */\nexport function useShellFit({\n shellId: explicitId,\n hostRef,\n railOpen,\n defaultPanelWidth,\n onUnfit,\n}: IUseShellFitOptions): IShellFitController {\n // A generated key isolates unnamed shells from each other; an explicit\n // `shellId` is the app's handle on this one.\n const generatedId = useId()\n const shellId = explicitId ?? generatedId\n const railWidth = useAtomValueRawSync(shellPanelAtoms(shellId).railWidth)\n\n // Read once: `defaultPanelWidth` describes the mount, not every render.\n const [seed] = useState<IShellFitSeed>(() => ({\n panelWidth: defaultPanelWidth ?? null,\n }))\n\n const mount = useSetAtom(mountShellFitAtom(shellId))\n const measure = useSetAtom(measureShellFitAtom(shellId))\n const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))\n const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))\n\n // Before paint, and before the first measurement below, so a seeded width\n // is in the store by the time the panel first reads its width.\n useIsomorphicLayoutEffect(() => {\n mount(seed)\n }, [mount, seed])\n\n // The listener below is bound once per fold, so the callback rides a ref\n // rather than rebinding it whenever a consumer passes a fresh arrow.\n const onUnfitRef = useRef(onUnfit)\n useIsomorphicLayoutEffect(() => {\n onUnfitRef.current = onUnfit\n })\n\n useIsomorphicLayoutEffect(() => {\n const host = hostRef.current\n if (!host) return\n\n const takeMeasurement = () => {\n const next = readMetrics(host, railOpen)\n measure(next)\n if (!fitsPanel(next)) onUnfitRef.current?.()\n }\n\n // Observe the host, including changes from a split view or surrounding\n // navigation that never trigger a window resize.\n takeMeasurement()\n const observer = new ResizeObserver(takeMeasurement)\n observer.observe(host)\n window.addEventListener(\"resize\", takeMeasurement)\n return () => {\n observer.disconnect()\n window.removeEventListener(\"resize\", takeMeasurement)\n }\n }, [hostRef, railOpen, railWidth, measure])\n\n // A shell the hook keyed is scrap once its component goes. An explicit\n // `shellId` is the app's key and outlives the mount — that is what lets a\n // dragged width survive a route change.\n useEffect(() => {\n if (explicitId !== undefined) return\n return () => removeShellFitInstance(shellId)\n }, [shellId, explicitId])\n\n const state = useAtomValueRawSync(shellFitStateAtom(shellId))\n\n return useMemo<IShellFitController>(\n () => ({\n shellId,\n ...state,\n defaultPanelWidth: seed.panelWidth,\n resizePanel,\n resetPanelWidth,\n }),\n [shellId, state, seed.panelWidth, resizePanel, resetPanelWidth]\n )\n}\n","import { useAtomValueRawSync, useSetAtom } from \"jotai\"\nimport { removeShellFitInstance } from \"./shell-fit-atom\"\nimport { shellPanelAtoms } from \"./shell-panel-atom\"\nimport { useCallback, useEffect, useId, useMemo, useRef } from \"react\"\nimport { useIsomorphicLayoutEffect, useReducedMotion } from \"motion/react\"\nimport { cn } from \"@/lib/utils.ts\"\nimport type { IAnimatedSidebarProviderProps, TSidebarSide } from \"./type\"\nimport { useShellFit } from \"./use-shell-fit\"\nimport {\n AnimatedSidebarContext,\n SHELL_WIDTHS,\n SIDEBAR_KEYBOARD_SHORTCUT,\n useIsMobile,\n} from \"./utils\"\n\nexport function AnimatedPanelProvider({\n children,\n shellId,\n defaultPanelWidth,\n open,\n defaultOpen,\n onOpenChange,\n openMobile,\n defaultOpenMobile,\n onOpenMobileChange,\n onNarrowChange,\n // ShellLayout renders this; the bare provider only keeps it off the DOM.\n panelComponents: _panelComponents,\n className,\n style,\n ...props\n}: IAnimatedSidebarProviderProps) {\n const generatedId = useId()\n const resolvedId = shellId ?? generatedId\n useEffect(() => {\n if (shellId !== undefined) return\n return () => removeShellFitInstance(resolvedId)\n }, [resolvedId, shellId])\n const atoms = shellPanelAtoms(resolvedId)\n const railWidth = useAtomValueRawSync(atoms.railWidth)\n const internalOpen = useAtomValueRawSync(atoms.open)\n const internalOpenMobile = useAtomValueRawSync(atoms.mobile)\n const setInternalOpen = useSetAtom(atoms.open)\n const setInternalOpenMobile = useSetAtom(atoms.mobile)\n const seed = useSetAtom(atoms.seed)\n const publish = useSetAtom(atoms.handlers)\n useEffect(() => {\n seed(defaultOpen, defaultOpenMobile)\n }, [seed, defaultOpen, defaultOpenMobile])\n const isMobile = useIsMobile()\n const reduce = useReducedMotion() ?? false\n const leftTriggerRef = useRef<HTMLButtonElement>(null)\n const rightTriggerRef = useRef<HTMLButtonElement>(null)\n const wrapperRef = useRef<HTMLDivElement>(null)\n // The narrow gate below is consulted by the setters, but the verdict comes\n // from `useShellFit` further down — which needs those very setters to retire\n // the panel. A ref unwinds the cycle: a setter only ever runs from an event,\n // by which time the layout effect has published the current verdict.\n const fitsRef = useRef(true)\n const sidebarCanExpandRef = useRef(true)\n\n // Per-side controlled/uncontrolled merge — a side is controlled exactly\n // when its key is present on the controlled record.\n const controlledLeft = open?.left\n const controlledRight = open?.right\n const controlledMobileLeft = openMobile?.left\n const controlledMobileRight = openMobile?.right\n\n const openState = useMemo<Record<TSidebarSide, boolean>>(\n () => ({\n left: controlledLeft ?? internalOpen.left,\n right: controlledRight ?? internalOpen.right,\n }),\n [controlledLeft, controlledRight, internalOpen]\n )\n const openMobileState = useMemo<Record<TSidebarSide, boolean>>(\n () => ({\n left: controlledMobileLeft ?? internalOpenMobile.left,\n right: controlledMobileRight ?? internalOpenMobile.right,\n }),\n [controlledMobileLeft, controlledMobileRight, internalOpenMobile]\n )\n\n // The right panel is not on screen while the shell is too narrow to hold\n // it, so opening it would only ever surface later as a panel nobody asked\n // for. Closing always goes through — that is how state left over from a\n // wider viewport clears.\n const setOpen = useCallback(\n (nextOpen: boolean, side: TSidebarSide) => {\n if (nextOpen && side === \"right\" && !fitsRef.current) return\n if (nextOpen && side === \"left\" && !sidebarCanExpandRef.current) return\n\n const controlled = side === \"left\" ? controlledLeft : controlledRight\n if (controlled === undefined) {\n setInternalOpen((prev) =>\n prev[side] === nextOpen ? prev : { ...prev, [side]: nextOpen }\n )\n }\n onOpenChange?.(nextOpen, side)\n },\n [controlledLeft, controlledRight, onOpenChange, setInternalOpen]\n )\n\n const setOpenMobile = useCallback(\n (nextOpen: boolean, side: TSidebarSide) => {\n if (nextOpen && side === \"right\" && !fitsRef.current) return\n if (nextOpen && side === \"left\" && !sidebarCanExpandRef.current) return\n\n const controlled =\n side === \"left\" ? controlledMobileLeft : controlledMobileRight\n if (controlled === undefined) {\n setInternalOpenMobile((prev) =>\n prev[side] === nextOpen ? prev : { ...prev, [side]: nextOpen }\n )\n }\n onOpenMobileChange?.(nextOpen, side)\n },\n [\n controlledMobileLeft,\n controlledMobileRight,\n onOpenMobileChange,\n setInternalOpenMobile,\n ]\n )\n\n useEffect(() => {\n publish({ setOpen, setOpenMobile })\n return () => publish(null)\n }, [publish, setOpen, setOpenMobile])\n useEffect(() => {\n if (controlledLeft !== undefined || controlledRight !== undefined)\n setInternalOpen((previous) => ({ ...previous, ...open }))\n }, [controlledLeft, controlledRight, open, setInternalOpen])\n useEffect(() => {\n if (\n controlledMobileLeft !== undefined ||\n controlledMobileRight !== undefined\n )\n setInternalOpenMobile((previous) => ({ ...previous, ...openMobile }))\n }, [\n controlledMobileLeft,\n controlledMobileRight,\n openMobile,\n setInternalOpenMobile,\n ])\n\n const toggleSidebar = useCallback(\n (side: TSidebarSide) => {\n if (side === \"left\" && !sidebarCanExpandRef.current) return\n setOpen(!openState[side], side)\n },\n [openState, setOpen]\n )\n\n const triggerRefs = useMemo(\n () => ({ left: leftTriggerRef, right: rightTriggerRef }),\n []\n )\n\n // A measurement that lands on \"no room\" retires the right panel's open\n // state instead of parking it: a panel that survived the crossing would\n // spring back the moment the viewport widened, long after the user asked\n // for it. Closing is the one write the narrow gate lets through, and the\n // guards keep a repeated verdict from re-reporting a panel already shut.\n //\n // It rides a ref so `useShellFit` can call the latest one from a listener\n // it bound once, and it is a layout effect declared FIRST so the ref is\n // filled before that listener takes its opening measurement.\n const retireRightPanelRef = useRef<() => void>(() => {})\n useIsomorphicLayoutEffect(() => {\n retireRightPanelRef.current = () => {\n if (openState.right) setOpen(false, \"right\")\n if (openMobileState.right) setOpenMobile(false, \"right\")\n }\n })\n const retireRightPanel = useCallback(() => retireRightPanelRef.current(), [])\n\n // Everything about the shell's columns — whether a secondary panel fits,\n // how wide it is, how far it may be dragged — lives in this one hook, and\n // in the shell-fit atoms it writes to under `shellId`. The rail's fold is an\n // input because its column is part of the room the panel needs.\n const fit = useShellFit({\n shellId: resolvedId,\n hostRef: wrapperRef,\n railOpen: openState.left,\n defaultPanelWidth,\n onUnfit: retireRightPanel,\n })\n const isNarrow = !fit.fits\n useIsomorphicLayoutEffect(() => {\n fitsRef.current = fit.fits\n sidebarCanExpandRef.current = fit.sidebar?.canExpand ?? true\n })\n\n // The verdict has to travel up to whoever renders the provider —\n // useShellPanels, a title bar — since context only flows down. The\n // listener above is bound once, so the callback rides a ref rather than\n // rebinding it whenever a consumer passes a fresh arrow.\n const onNarrowChangeRef = useRef(onNarrowChange)\n useEffect(() => {\n onNarrowChangeRef.current = onNarrowChange\n })\n\n // Only real crossings are news: a resize that leaves the verdict alone is\n // silent, and so is the mount default the consumer already holds.\n const reportedNarrowRef = useRef(false)\n useEffect(() => {\n if (reportedNarrowRef.current === isNarrow) return\n reportedNarrowRef.current = isNarrow\n onNarrowChangeRef.current?.(isNarrow)\n }, [isNarrow])\n\n useEffect(() => {\n const handleShortcut = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar(\"left\")\n }\n }\n\n window.addEventListener(\"keydown\", handleShortcut)\n return () => window.removeEventListener(\"keydown\", handleShortcut)\n }, [toggleSidebar])\n\n return (\n <AnimatedSidebarContext.Provider\n value={{\n isMobile,\n fit,\n layoutId: `${generatedId}-active`,\n open: openState,\n openMobile: openMobileState,\n reduce,\n setOpen,\n setOpenMobile,\n toggleSidebar,\n triggerRefs,\n }}\n >\n <div\n {...props}\n ref={wrapperRef}\n data-slot=\"sidebar-wrapper\"\n data-narrow={isNarrow ? \"\" : undefined}\n data-sidebar-mode={fit.sidebar?.mode}\n data-state-left={\n (fit.sidebar ? fit.sidebar.mode === \"expanded\" : openState.left)\n ? \"expanded\"\n : \"collapsed\"\n }\n data-state-right={openState.right ? \"expanded\" : \"collapsed\"}\n style={{\n ...SHELL_WIDTHS,\n ...style,\n ...(railWidth !== null && { \"--sidebar-width\": `${railWidth}px` }),\n }}\n className={cn(\n \"group/sidebar-wrapper min-w-0 gap-x-2 flex w-full overflow-hidden\",\n className\n )}\n >\n {children}\n </div>\n </AnimatedSidebarContext.Provider>\n )\n}\n","import { forwardRef } from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { useAnimatedSidebar } from \"./utils\"\nimport type { IAnimatedSidebarTriggerProps } from \"./type\"\n\nexport const AnimatedPanelTrigger = forwardRef<\n HTMLButtonElement,\n IAnimatedSidebarTriggerProps\n>(function AnimatedSidebarTrigger(\n { onClick, side = \"left\", type = \"button\", ...props },\n forwardedRef\n) {\n const context = useAnimatedSidebar()\n const expanded =\n side === \"left\" && context.fit.sidebar\n ? context.fit.sidebar.mode === \"expanded\"\n : context.open[side]\n const triggerRef = context.triggerRefs[side]\n\n // The right panel drops out of a viewport too narrow to hold it, so its\n // toggle would otherwise sit in the header driving nothing.\n if (side === \"right\" && !context.fit.fits) return null\n\n return (\n <Button\n {...props}\n ref={(node) => {\n triggerRef.current = node\n if (typeof forwardedRef === \"function\") forwardedRef(node)\n else if (forwardedRef) forwardedRef.current = node\n }}\n disabled={\n props.disabled ||\n (side === \"left\" && context.fit.sidebar?.canExpand === false)\n }\n type={type}\n variant=\"ghost\"\n size=\"icon-xl\"\n aria-label={props[\"aria-label\"] ?? \"Toggle sidebar\"}\n aria-expanded={expanded}\n data-slot=\"sidebar-trigger\"\n data-side={side}\n data-state={expanded ? \"expanded\" : \"collapsed\"}\n onClick={(event) => {\n onClick?.(event)\n if (event.defaultPrevented) return\n context.toggleSidebar(side)\n }}\n />\n )\n})\n","import { SHELL_BEZEL_CLASSES } from \"./utils\"\nimport { forwardRef } from \"react\"\nimport { motion } from \"motion/react\"\nimport { cn } from \"@/lib/utils.ts\"\nimport type { TAnimatedSidebarInsetProps } from \"./type\"\n\nexport const AnimatedPanelInset = forwardRef<\n HTMLElement,\n TAnimatedSidebarInsetProps\n>(function AnimatedSidebarInset({ className, ...props }, forwardedRef) {\n return (\n <motion.main\n {...props}\n ref={forwardedRef}\n data-slot=\"sidebar-inset\"\n data-motion-panels-fill=\"\"\n className={cn(\n // Panel bounds reserve the body's preferred width. Once navigation\n // is hidden, the body can use a container narrower than that floor.\n \"bg-neutral-50 dark:bg-neutral-900 min-w-0 relative flex flex-1 flex-col\",\n \"overflow-hidden rounded-md\",\n SHELL_BEZEL_CLASSES,\n className\n )}\n />\n )\n})\n","\"use client\"\n\nimport { MotionIcon } from \"motion-icons-react\"\nimport * as React from \"react\"\nimport { useAtomValueRawSync } from \"jotai\"\nimport { removeShellFitInstance } from \"./shell-fit-atom\"\nimport { shellPanelAtoms } from \"./shell-panel-atom\"\n\nimport { AnimatedPanel } from \"./animated-panel.tsx\"\nimport { cn } from \"@/lib/utils\"\nimport type { IShellLayoutProps, TShellPanelControlProps } from \"./type\"\nimport { SHELL_BEZEL_CLASSES, TITLE_BAR_HEIGHT } from \"./utils\"\nimport type { ClassNameValue } from \"tailwind-merge\"\nimport { AnimatedPanelProvider } from \"./animated-panel-provider.tsx\"\nimport { AnimatedPanelTrigger } from \"./animated-panel-trigger.tsx\"\nimport { AnimatedPanelInset } from \"./animated-panel-inset.tsx\"\n\nexport function ShellLayout({\n children,\n variant = \"desktop\",\n panels,\n className,\n header,\n trailing,\n defaultOpen,\n panelComponents,\n ...panelControlProps\n}: IShellLayoutProps): React.ReactElement {\n const background: ClassNameValue = `bg-linear-to-tr/increasing from-neutral-200 via-neutral-100 to-stone-200 dark:from-neutral-900 dark:via-neutral-950 dark:to-stone-950`\n\n const generatedId = React.useId()\n const shellId = panelControlProps.shellId ?? generatedId\n React.useEffect(() => {\n if (panelControlProps.shellId !== undefined) return\n return () => removeShellFitInstance(shellId)\n }, [shellId, panelControlProps.shellId])\n const sharedComponents = useAtomValueRawSync(\n shellPanelAtoms(shellId).components\n )\n\n // Content pushed through `openPanel(side, component)` wins over the static\n // `panels` entry; a side renders its panel when either supplies content.\n const leftContent =\n sharedComponents.left ?? panelComponents?.left ?? panels?.left?.component\n const rightContent =\n sharedComponents.right ?? panelComponents?.right ?? panels?.right?.component\n\n // Each panel seeds its own side's initial state (`defaultOpen ?? open`);\n // an explicit `defaultOpen` record — usually from useShellPanels — wins\n // per side.\n const initialOpen: TShellPanelControlProps[\"defaultOpen\"] = {\n ...(panels?.left && {\n left: panels.left.defaultOpen ?? true,\n }),\n ...(panels?.right && {\n right: panels.right.defaultOpen ?? false,\n }),\n ...defaultOpen,\n }\n\n return (\n <AnimatedPanelProvider\n {...panelControlProps}\n shellId={shellId}\n defaultOpen={initialOpen}\n className={cn(\n \"min-h-0 px-2 pb-2 relative h-full\",\n variant === \"web\" && \"pt-2\",\n className,\n background\n )}\n style={{\n paddingTop: variant === \"desktop\" ? TITLE_BAR_HEIGHT : 0,\n }}\n >\n {leftContent && (\n <AnimatedPanel\n ariaLabel=\"Primary navigation\"\n collapsible=\"icon\"\n role=\"navigation\"\n variant=\"inset\"\n >\n {leftContent}\n </AnimatedPanel>\n )}\n\n <AnimatedPanelInset>\n <header className=\"h-12 gap-2 px-2 flex flex-row! items-center justify-between border-b\">\n {leftContent && (\n <div className=\"min-w-0 gap-2 flex shrink-0 items-center justify-start\">\n <AnimatedPanelTrigger side=\"left\">\n <MotionIcon name=\"PanelLeft\" size={24} animation=\"press\" />\n </AnimatedPanelTrigger>\n </div>\n )}\n {header && (\n <div className=\"min-w-0 flex flex-1 items-center\">{header}</div>\n )}\n {(trailing || rightContent) && (\n // ml-auto, not flex-fill: the cluster hugs the trailing edge even\n // when there is no header (or left trigger) to push against.\n <div className=\"gap-2 ml-auto flex shrink-0 items-center justify-end\">\n {trailing}\n {rightContent && (\n <AnimatedPanelTrigger aria-label=\"Toggle panel\" side=\"right\">\n <MotionIcon\n className=\"opacity-70\"\n name=\"PanelRight\"\n size={24}\n />\n </AnimatedPanelTrigger>\n )}\n </div>\n )}\n </header>\n <div className=\"min-h-24 flex-1 overflow-auto\">{children}</div>\n </AnimatedPanelInset>\n\n {rightContent && (\n <AnimatedPanel\n ariaLabel={panels?.right?.name ?? \"Secondary panel\"}\n // Below md the panel is portal led over the page, so it carries the\n // surface itself; the desktop rail keeps it on the inner panel.\n className={cn(\n \"bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900\",\n \"rounded-md\",\n SHELL_BEZEL_CLASSES\n )}\n collapsible=\"offcanvas\"\n role=\"complementary\"\n side=\"right\"\n variant=\"inset\"\n >\n {rightContent}\n </AnimatedPanel>\n )}\n </AnimatedPanelProvider>\n )\n}\n","\"use client\"\n\nimport { useCallback, useEffect, useId, useMemo } from \"react\"\nimport type { ReactNode } from \"react\"\nimport { shellPanelAtoms } from \"./shell-panel-atom\"\nimport { useAtomValueRawSync, useSetAtom } from \"jotai\"\n\nimport {\n removeShellFitInstance,\n resizeShellPanelAtom,\n shellFitFitsAtom,\n shellFitStateAtom,\n shellFitPanelWidthAtom,\n} from \"./shell-fit-atom\"\nimport type {\n TShellPanelControlProps,\n IShellPanelControls,\n TSidebarSide,\n IUseShellPanelsOptions,\n} from \"./type\"\n\n/**\n * Owns the open/close state of the shell's panels, keyed by side, and\n * reports every change through a single `onPanelChange(open, side)`\n * callback. Spread the returned `providerProps` onto ShellLayout; the\n * setters and `toggle` are for UI that lives outside the shell (title-bar\n * buttons, command palette, shortcuts).\n *\n * The way back down is the store: `providerProps` carries a `shellId`, the\n * shell files its measurement under it, and this hook reads `isNarrow` and\n * `panelWidth` straight out of those atoms — so outside UI stands down with\n * the panel instead of measuring `--sidebar-width` a second time. Name the\n * `shellId` and any component below `ExegiaProvider` can do the same with\n * `useShellFitState(shellId)`.\n *\n * Call it under the same `ExegiaProvider` as the shell it drives (or under\n * none at all, on both sides): mounted above the provider it would read\n * Jotai's default store while the shell writes to the provider's.\n */\nexport function useShellPanels({\n shellId: explicitId,\n defaultOpen,\n defaultOpenMobile,\n defaultPanelWidth,\n onPanelChange,\n}: IUseShellPanelsOptions = {}): IShellPanelControls {\n // The hook, not the provider, keys the shell: it renders above the provider\n // and has to read the same atoms the provider writes. Whoever generates the\n // key drops it — the provider treats a passed-in id as the app's and leaves\n // it alone on unmount.\n const generatedId = useId()\n const shellId = explicitId ?? generatedId\n useEffect(() => {\n if (explicitId !== undefined) return\n return () => removeShellFitInstance(shellId)\n }, [shellId, explicitId])\n\n const atoms = shellPanelAtoms(shellId)\n const sidebarWidth = useAtomValueRawSync(atoms.railWidth)\n const resizeSidebar = useSetAtom(atoms.resizeSidebar)\n const open = useAtomValueRawSync(atoms.open)\n const openMobile = useAtomValueRawSync(atoms.mobile)\n const setOpen = useSetAtom(atoms.setOpen)\n const setOpenMobile = useSetAtom(atoms.setOpenMobile)\n const toggle = useSetAtom(atoms.toggle)\n const panelComponents = useAtomValueRawSync(atoms.components)\n const setPanelComponents = useSetAtom(atoms.components)\n\n // Reads false until the shell has measured itself — an unmeasured shell\n // fails open, so nothing out here stands down over a reading that has not\n // happened yet.\n const fits = useAtomValueRawSync(shellFitFitsAtom(shellId))\n const isNarrow = !fits\n const { sidebar } = useAtomValueRawSync(shellFitStateAtom(shellId))\n const panelWidth = useAtomValueRawSync(shellFitPanelWidthAtom(shellId))\n const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))\n\n const openPanel = useCallback(\n (side: TSidebarSide, component?: ReactNode) => {\n if (component !== undefined) {\n setPanelComponents((prev) =>\n prev[side] === component ? prev : { ...prev, [side]: component }\n )\n }\n setOpen(true, side)\n },\n [setOpen, setPanelComponents]\n )\n\n const providerProps = useMemo<TShellPanelControlProps>(\n () => ({\n shellId,\n defaultPanelWidth,\n defaultOpen,\n defaultOpenMobile,\n onOpenChange: onPanelChange,\n onOpenMobileChange: onPanelChange,\n panelComponents,\n }),\n [\n shellId,\n defaultPanelWidth,\n defaultOpen,\n defaultOpenMobile,\n onPanelChange,\n panelComponents,\n ]\n )\n\n return {\n shellId,\n sidebar,\n sidebarWidth,\n resizeSidebar,\n isNarrow,\n panelWidth,\n resizePanel,\n open,\n openMobile,\n setOpen,\n setOpenMobile,\n toggle,\n openPanel,\n providerProps,\n }\n}\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { useAtomValueRawSync, useSetAtom } from \"jotai\"\n\nimport {\n resetShellPanelWidthAtom,\n resizeShellPanelAtom,\n shellFitStateAtom,\n} from \"./shell-fit-atom\"\nimport type { IShellFitActions, TShellFitInstanceId, IShellFitState } from \"./type\"\n\n/**\n * Read the fit of the shell registered under `shellId` from anywhere below\n * `ExegiaProvider` — no controller, no props, no provider of its own.\n *\n * ```tsx\n * const { fits, panelWidth } = useShellFitState(\"app-shell\")\n * ```\n *\n * This returns the whole state object, so the caller re-renders on every\n * measurement. A component that reads one field should subscribe to that\n * field's atom instead: `useAtomValue(shellFitFitsAtom(\"app-shell\"))`.\n */\nexport function useShellFitState(shellId: TShellFitInstanceId): IShellFitState {\n return useAtomValueRawSync(shellFitStateAtom(shellId))\n}\n\n/**\n * Drive the secondary panel of the shell registered under `shellId` from\n * anywhere. Writes only — the caller never re-renders when the shell moves,\n * so this is what a command palette or a keyboard shortcut should reach for.\n *\n * ```tsx\n * const shell = useShellFitActions(\"app-shell\")\n * <Button onClick={() => shell.resizePanel(480)}>Wide inspector</Button>\n * ```\n */\nexport function useShellFitActions(\n shellId: TShellFitInstanceId\n): IShellFitActions {\n const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))\n const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))\n\n return useMemo(\n () => ({ resizePanel, resetPanelWidth }),\n [resizePanel, resetPanelWidth]\n )\n}\n","/** Icon-rail width in px (the rail sits directly on the desktop backdrop). */\nexport const SCAFFOLD_SIDEBAR_WIDTH = 64\n\n/** Inspector drawer width in px. */\nexport const SCAFFOLD_INSPECTOR_WIDTH = 272\n\n/** Most panels the canvas holds at once — omit Actions' `onAdd` when the\n * count reaches it so the Add segment hides. */\nexport const SCAFFOLD_PANEL_CAPACITY = 3\n\n/** Narrowest a panel may render, in px. When the canvas can't grant every\n * panel this width, the scaffold hides panels until the rest fit. */\nexport const SCAFFOLD_PANEL_MIN_WIDTH = 320\n\n/** Gap in px between side-by-side panels on the canvas (`gap-2`). */\nexport const SCAFFOLD_CANVAS_GAP = 8\n\n/** Gap in px between the drawer/actions and the viewport edges. */\nexport const SCAFFOLD_EDGE_GUTTER = 10\n\n/** Vertical room in px reserved above the canvas for the actions cluster. */\nexport const SCAFFOLD_HEADER_HEIGHT = 52\n\n/** Height in px of a panel's secondary strip. */\nexport const SCAFFOLD_SECONDARY_HEIGHT = 52\n\n/** Gap in px between a panel's primary surface and its secondary strip. */\nexport const SCAFFOLD_PANEL_GAP = 10\n\n/** How long the seam menu lingers expanded after the pointer leaves it (ms)\n * before it collapses back to the compact toggle. The timer keeps counting\n * even when the pointer leaves the window entirely. */\nexport const SCAFFOLD_MENU_COLLAPSE_DELAY = 4000\n\n/** Morph duration in seconds for drawer slides and panel layout shifts. */\nexport const SCAFFOLD_MORPH_DURATION = 0.3\n\n/** `--ease-smooth-out` as a motion/react easing tuple. */\nexport const SCAFFOLD_EASE = [0.22, 1, 0.36, 1] as const\n","import type { Variants } from \"motion/react\"\nimport type { ClassNameValue } from \"tailwind-merge\"\nimport type {\n IScaffoldPanelVisibility,\n TSubPanelVariant,\n} from \"@/components/blocks/scaffold/type.ts\"\nimport { EASE_OUT } from \"@/lib/ease.ts\"\nimport {\n SCAFFOLD_CANVAS_GAP,\n SCAFFOLD_PANEL_CAPACITY,\n SCAFFOLD_PANEL_MIN_WIDTH,\n} from \"./constants\"\n\n/**\n * How many panels fit on a canvas of `width` px, granting each\n * `SCAFFOLD_PANEL_MIN_WIDTH` plus the gaps between them. Clamped to\n * [1, SCAFFOLD_PANEL_CAPACITY]; an unmeasured canvas (`null`) fits the cap.\n */\nexport function getPanelCapacity(width: number | null): number {\n if (width === null) return SCAFFOLD_PANEL_CAPACITY\n const fits = Math.floor(\n (width + SCAFFOLD_CANVAS_GAP) /\n (SCAFFOLD_PANEL_MIN_WIDTH + SCAFFOLD_CANVAS_GAP)\n )\n return Math.max(1, Math.min(SCAFFOLD_PANEL_CAPACITY, fits))\n}\n\n/** @internal An untracked scaffold: nothing registered, nothing hidden. */\nexport const EMPTY_SCAFFOLD_VISIBILITY: IScaffoldPanelVisibility = {\n visibleOrder: [],\n autoHidden: [],\n userHidden: [],\n}\n\n/**\n * @internal Fold the registered ids and current capacity into a settled\n * visibility: prune departed panels, admit new ones, evict the\n * least-recently-activated visible panels past capacity, and restore\n * auto-hidden ones when room returns. Returns `prev` untouched when nothing\n * changes, so callers can compare identities instead of contents.\n */\nexport function reconcileVisibility(\n prev: IScaffoldPanelVisibility,\n ids: readonly string[],\n capacity: number\n): IScaffoldPanelVisibility {\n const known = new Set(ids)\n const visibleOrder = prev.visibleOrder.filter((id) => known.has(id))\n const autoHidden = prev.autoHidden.filter((id) => known.has(id))\n const userHidden = prev.userHidden.filter((id) => known.has(id))\n\n const tracked = new Set([...visibleOrder, ...autoHidden, ...userHidden])\n for (const id of ids) if (!tracked.has(id)) visibleOrder.push(id)\n\n while (visibleOrder.length > capacity && visibleOrder.length > 1) {\n autoHidden.push(visibleOrder.shift() as string)\n }\n while (visibleOrder.length < capacity && autoHidden.length > 0) {\n visibleOrder.push(autoHidden.pop() as string)\n }\n\n const unchanged =\n visibleOrder.join(\" \") === prev.visibleOrder.join(\" \") &&\n autoHidden.join(\" \") === prev.autoHidden.join(\" \") &&\n userHidden.join(\" \") === prev.userHidden.join(\" \")\n return unchanged ? prev : { visibleOrder, autoHidden, userHidden }\n}\n\n/** Desktop backdrop the whole scaffold sits on — a soft warm-gray wash. */\nexport const scaffoldBackgroundClass: ClassNameValue =\n \"bg-linear-to-tr/increasing from-neutral-400 via-stone-200 to-neutral-300 dark:from-neutral-900 dark:via-neutral-950 dark:to-stone-950\"\n\nexport const SCAFFOLD_BEZEL_CLASSES =\n \"bezel-lit-t-2 bezel-lit-blur-2 bezel-lit/57 bezel-dim-b-2 bezel-dim-blur-3 bezel-dim/11 dark:bezel-lit-blur-3 dark:bezel-lit/14 dark:bezel-dim/78\"\n\n/** Card surface shared by a panel's primary area and secondary strip. */\nexport const panelSurfaceClass: ClassNameValue =\n `rounded-md bg-slate-100 dark:bg-neutral-900 ${SCAFFOLD_BEZEL_CLASSES}`\n\n/** Floating icon button hovering over a panel (close, swap). */\nexport const floatingButtonClass: ClassNameValue =\n \"transition-[opacity,scale,box-shadow] duration-200 ease-smooth-out hover:text-neutral-900 hover:shadow-md active:scale-97 dark:bg-neutral-800/95 dark:text-neutral-300 dark:inset-ring-white/10 dark:hover:text-white motion-reduce:transition-none motion-reduce:active:scale-100 z-20\"\n\n/** Hidden until the pointer rests on the panel (always shown for touch and\n * while focused) — the affordances stay quiet until the panel is engaged. */\nexport const revealOnPanelHoverClass: ClassNameValue =\n \"opacity-0 scale-95 group-hover/panel:opacity-100 group-hover/panel:scale-100 focus-visible:opacity-100 focus-visible:scale-100 pointer-coarse:opacity-100 pointer-coarse:scale-100\"\n\n/** Pill segment inside the actions cluster (Add, browse). */\nexport const actionSegmentClass: ClassNameValue =\n \"flex h-[30px] items-center rounded-full text-neutral-700 transition-[background-color,color,scale,box-shadow] duration-150 ease-smooth-out hover:bg-white hover:text-neutral-900 hover:shadow-xs active:scale-97 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:hover:text-white motion-reduce:transition-none motion-reduce:active:scale-100\"\n\n/** Pill segments (seam-menu actions, tabs, Add) blur/fade in place while\n * the track morphs around them. The exit is a fast tween, not the layout\n * spring — the track stays overflow-visible, so popped-out segments must be\n * gone before the shrinking pill leaves them behind as a ghost. */\nexport const segmentVariants: Variants = {\n hidden: { opacity: 0, filter: \"blur(4px)\" },\n visible: { opacity: 1, filter: \"blur(0px)\" },\n exit: {\n opacity: 0,\n filter: \"blur(4px)\",\n transition: { duration: 0.18, ease: EASE_OUT },\n },\n}\n\n/** Map of sub-panel variants to their corresponding side. */\nexport const subPanelVariant: Record<TSubPanelVariant, ClassNameValue> = {\n card: `bg-neutral-50 dark:bg-neutral-900 rounded-md ${SCAFFOLD_BEZEL_CLASSES}`,\n subtle: \"bg-neutral-100 dark:bg-neutral-800\",\n inset: \"bg-neutral-200 dark:bg-neutral-700\",\n} as const\n","\"use client\"\n\nimport { RiCloseLine } from \"@remixicon/react\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { IPanelFloatingButtonProps } from \"./type\"\nimport { floatingButtonClass, revealOnPanelHoverClass } from \"./utils\"\n\n/** Floating close affordance in a panel's top-right corner. */\nexport function PanelCloseButton({\n onClick,\n label,\n sound = true,\n className,\n}: IPanelFloatingButtonProps): React.ReactElement {\n return (\n <button\n id=\"scaffold-panel-close-button\"\n aria-label={label}\n className={cn(\n floatingButtonClass,\n revealOnPanelHoverClass,\n \"absolute top-4 right-3.5 z-10\",\n className\n )}\n data-cuelume-press={sound ? \"\" : undefined}\n data-cuelume-release={sound ? \"\" : undefined}\n data-slot=\"scaffold-panel-close\"\n onClick={onClick}\n type=\"button\"\n >\n <RiCloseLine aria-hidden className=\"size-4\" />\n </button>\n )\n}\n","import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { motion, type HTMLMotionProps } from \"motion/react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Separator } from \"@/components/ui/separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n \"*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0\",\n vertical:\n \"flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: HTMLMotionProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <motion.div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"flex items-center gap-2 rounded-md border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"button-group-text\",\n },\n })\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","\"use client\"\n\nimport {\n type TFrostGlassVariantProp,\n} from \"@/lib/glass-variants\"\nimport { cn } from \"@/lib/utils\"\n\nimport { ButtonGroup } from \"../button-group\"\nimport { GlassSurface } from \"./liquid-glass\"\n\ntype TGlassButtonGroupProps = Omit<React.ComponentProps<typeof ButtonGroup>, \"children\"> & { children?: React.ReactNode } &\n TFrostGlassVariantProp\n\nfunction GlassButtonGroup({\n className,\n glassVariant = \"liquid-refract\",\n children,\n ...props\n}: TGlassButtonGroupProps) {\n\n return (\n <ButtonGroup\n data-slot=\"glass-button-group\"\n data-glass-variant={glassVariant}\n className={cn(\"relative isolate rounded-lg\", className)}\n {...props}\n >\n <GlassSurface glassVariant={glassVariant} />\n {children}\n </ButtonGroup>\n )\n}\n\nexport { GlassButtonGroup }\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns true only on devices that have a true hover (mouse / trackpad).\n * Touch devices fire phantom `:hover` on tap that sticks until tap-elsewhere\n * — gate hover-only effects (scale lifts, magnetic pulls) behind this.\n */\nexport function useHoverCapable() {\n const [canHover, setCanHover] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(hover: hover) and (pointer: fine)\");\n const update = () => setCanHover(mq.matches);\n update();\n mq.addEventListener?.(\"change\", update);\n return () => mq.removeEventListener?.(\"change\", update);\n }, []);\n\n return canHover;\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { More } from \"iconsax-reactjs\"\nimport { LucideArrowUpDown, LucideChevronDown, LucideX } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { IPanelMenuButtonProps } from \"./type\"\nimport { floatingButtonClass, revealOnPanelHoverClass } from \"./utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { GlassButtonGroup } from \"@/components/ui/glasscn/glass-button-group.tsx\"\nimport { useHoverCapable } from \"@/lib/hooks/use-hover-capable\"\nimport { SCAFFOLD_MENU_COLLAPSE_DELAY } from \"./constants\"\n\n/** One side of the seam menu. Both sides stay mounted; the pill morphs by\n * collapsing one side's grid column to 0fr while the other grows — pure\n * CSS, driven by `data-expanded` on the group. The hidden side is inert\n * and aria-hidden so it can't be clicked, focused or found by queries. */\nconst menuCellClass =\n \"grid transition-[grid-template-columns,opacity] duration-300 ease-smooth-out motion-reduce:transition-none\"\n\n/**\n * Floating menu affordance centered on the seam between a panel's primary\n * surface and its secondary strip: a compact ⋯ toggle that morphs into the\n * Expand | Swap (| Close) actions.\n */\nexport function PanelMenuButton({\n onClick,\n onExpand,\n onCloseSecondary,\n secondaryExpanded = false,\n swapped = false,\n label,\n sound = true,\n className,\n}: IPanelMenuButtonProps): React.ReactElement {\n const canHover = useHoverCapable()\n const actionsId = React.useId()\n const groupRef = React.useRef<HTMLDivElement>(null)\n const actionsRef = React.useRef<HTMLDivElement>(null)\n const [expanded, setExpanded] = React.useState(false);\n\n const collapseTimerRef = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n const suppressHoverOpenUntilRef = React.useRef(0)\n const focusActionsOnOpenRef = React.useRef(false)\n\n React.useEffect(() => () => clearTimeout(collapseTimerRef.current), [])\n\n const cancelCollapse = React.useCallback(() => {\n clearTimeout(collapseTimerRef.current)\n }, [])\n\n // Arms when the pointer stops hovering the group: the menu lingers for the\n // grace period, then collapses — unless the pointer (or focus) came back.\n const armCollapse = React.useCallback(() => {\n if (!canHover) return\n clearTimeout(collapseTimerRef.current)\n collapseTimerRef.current = setTimeout(() => {\n // Focus keeps the menu open — don't collapse under the keyboard.\n if (groupRef.current?.contains(document.activeElement)) return\n setExpanded(false)\n }, SCAFFOLD_MENU_COLLAPSE_DELAY)\n }, [canHover])\n\n // The grace period must keep counting when the pointer leaves the whole\n // app — leaving the window can skip the group's own pointerleave, so arm\n // on viewport exit and window blur as well.\n React.useEffect(() => {\n if (!expanded || !canHover) return\n const root = document.documentElement\n root.addEventListener(\"pointerleave\", armCollapse)\n window.addEventListener(\"blur\", armCollapse)\n return () => {\n root.removeEventListener(\"pointerleave\", armCollapse)\n window.removeEventListener(\"blur\", armCollapse)\n }\n }, [expanded, canHover, armCollapse])\n\n // Click-opens replace the toggle with the actions — hand focus over so\n // keyboard users aren't dropped onto an inert control.\n React.useEffect(() => {\n if (!expanded || !focusActionsOnOpenRef.current) return\n focusActionsOnOpenRef.current = false\n actionsRef.current?.querySelector<HTMLButtonElement>(\"button\")?.focus()\n }, [expanded])\n\n const collapse = () => {\n // The shrinking toggle can glide under a resting cursor and hover-reopen\n // the menu it just closed — ignore hover-opens until it has settled.\n suppressHoverOpenUntilRef.current = Date.now() + 600\n setExpanded(false)\n }\n\n // Acting collapses the menu — the pill returns to the compact toggle.\n const handleAction = (action?: () => void) => {\n action?.()\n collapse()\n }\n\n // Click open — the touch and keyboard path.\n const handleOnExpand = () => {\n if (groupRef.current?.contains(document.activeElement)) {\n focusActionsOnOpenRef.current = true\n }\n setExpanded(true)\n }\n\n // Hover on the toggle opens the menu (hover-capable devices only — touch\n // and keyboard go through the click toggle).\n const handleToggleHover = () => {\n if (!canHover || Date.now() < suppressHoverOpenUntilRef.current) return\n cancelCollapse()\n setExpanded(true)\n }\n\n return (\n <GlassButtonGroup\n ref={groupRef}\n onPointerEnter={cancelCollapse}\n onPointerLeave={armCollapse}\n glassVariant=\"subtle\"\n data-expanded={expanded ? \"\" : undefined}\n className={cn(\n floatingButtonClass,\n revealOnPanelHoverClass,\n \"group/menu absolute top-1/2 z-10 -translate-y-1/2\",\n className\n )}\n >\n <div\n aria-hidden={expanded || undefined}\n inert={expanded || undefined}\n className={cn(\n menuCellClass,\n \"grid-cols-[1fr] opacity-100 group-data-expanded/menu:grid-cols-[0fr] group-data-expanded/menu:opacity-0\"\n )}\n >\n <div className=\"flex min-w-0 overflow-hidden\">\n <Button\n id=\"scaffold-panel-menu-toggle-button\"\n aria-label={label}\n aria-expanded={expanded}\n aria-controls={actionsId}\n size=\"icon-sm\"\n variant=\"ghost\"\n sound={sound}\n // The hidden Expand|Swap|Close side stretches the pill to the sm\n // button height — match it so the collapsed toggle stays square.\n className=\"size-8 sm:size-7\"\n data-slot=\"scaffold-panel-menu-toggle\"\n onClick={handleOnExpand}\n onPointerEnter={handleToggleHover}\n >\n <More size={16} />\n </Button>\n </div>\n </div>\n <div\n id={actionsId}\n ref={actionsRef}\n aria-hidden={!expanded || undefined}\n inert={!expanded || undefined}\n className={cn(\n menuCellClass,\n \"grid-cols-[0fr] opacity-0 group-data-expanded/menu:grid-cols-[1fr] group-data-expanded/menu:opacity-100\"\n )}\n >\n <div className=\"flex min-w-0 overflow-hidden\">\n <Button\n id=\"scaffold-panel-menu-expand\"\n size=\"sm\"\n variant=\"ghost\"\n sound={sound}\n data-slot=\"scaffold-panel-menu-expand\"\n className=\"rounded-r-none\"\n onClick={() => handleAction(onExpand)}\n >\n {/* Points at the sub-panel that grows next, in VISUAL space —\n a swapped panel is column-reverse, so the direction mirrors.\n Button's [&_svg]:transition-transform eases the flip. */}\n <LucideChevronDown\n size={16}\n className={cn(secondaryExpanded !== swapped && \"rotate-180\")}\n />\n Expand\n </Button>\n <Button\n id=\"scaffold-panel-menu-swap\"\n size=\"sm\"\n variant=\"ghost\"\n sound={sound}\n data-slot=\"scaffold-panel-menu-swap\"\n className={cn(\n \"border-l-0\",\n onCloseSecondary ? \"rounded-none\" : \"rounded-l-none\"\n )}\n onClick={() => handleAction(onClick)}\n >\n <LucideArrowUpDown size={16} />\n Swap\n </Button>\n {onCloseSecondary && (\n <Button\n id=\"scaffold-panel-menu-close\"\n size=\"sm\"\n variant=\"ghost\"\n sound={sound}\n data-slot=\"scaffold-panel-menu-close\"\n className=\"rounded-l-none border-l-0\"\n onClick={() => handleAction(onCloseSecondary)}\n >\n <LucideX size={16} />\n Close\n </Button>\n )}\n </div>\n </div>\n </GlassButtonGroup>\n )\n}\n","/**\n * Scaffold state — Jotai atom families keyed by a scaffold id.\n *\n * Same layout as the tree (`components/composed/tree/tree-atom.ts`), the\n * shell (`blocks/shell/shell-fit-atom.ts`) and the profile card: in-house\n * `keyed()` families per field, write-only action atoms, a composed\n * read-only state atom, and `removeScaffoldInstance` to drop an id from\n * every family.\n *\n * The visibility bookkeeping (`visibleOrder` / `autoHidden` / `userHidden`)\n * stays one atom on purpose — `reconcileVisibility` always settles the three\n * lists together, so splitting them would only invite half-written states.\n * The reconcile rule itself lives in `utils.ts`, and every action that moves\n * an input (ids, capacity, a toggle) settles the visibility before it\n * returns, so readers never see an interim state — the render-time settling\n * the old `usePanelVisibility` hook needed has no equivalent here.\n */\n\nimport type { IScaffoldPanelLayout } from \"./type\"\nimport { atom } from \"jotai\"\nimport type { Atom, Getter, Setter } from \"jotai\"\n\nimport { SCAFFOLD_PANEL_CAPACITY } from \"./constants\"\nimport type {\n IScaffoldConfig,\n IScaffoldHandlers,\n TScaffoldInstanceId,\n IScaffoldPanelVisibility,\n IScaffoldState,\n} from \"./type\"\nimport {\n EMPTY_SCAFFOLD_VISIBILITY,\n getPanelCapacity,\n reconcileVisibility,\n} from \"./utils\"\n\nconst DEFAULT_CONFIG: IScaffoldConfig = { controlsInspector: false }\nconst NO_HANDLERS: IScaffoldHandlers = {}\nconst NO_PANEL_IDS: readonly string[] = []\n\n// ── families ───────────────────────────────────────────────────────────────\n\ntype TFamily<AtomType> = ((id: TScaffoldInstanceId) => AtomType) & {\n remove: (id: TScaffoldInstanceId) => void\n}\n\nconst families: { remove: (id: TScaffoldInstanceId) => void }[] = []\n\nfunction keyed<AtomType>(create: (id: TScaffoldInstanceId) => AtomType) {\n const cache = new Map<TScaffoldInstanceId, AtomType>()\n const family = ((id: TScaffoldInstanceId) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id: TScaffoldInstanceId) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `scaffold/${id}/${name}`\n return instance\n })\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TScaffoldInstanceId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id))\n instance.debugLabel = `scaffold/${id}/${name}`\n return instance\n })\n}\n\nfunction actionFamily<Args extends unknown[]>(\n name: string,\n write: (\n get: Getter,\n set: Setter,\n id: TScaffoldInstanceId,\n ...args: Args\n ) => void\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n )\n instance.debugLabel = `scaffold/${id}/${name}`\n return instance\n })\n}\n\n/** A family keyed by scaffold AND panel, so a tab or a panel subscribes to\n * its own boolean and sits still when a sibling's changes — the per-node\n * rule from the tree, at panel scale. Removal drops a whole scaffold. */\nfunction panelFamily<Value>(\n name: string,\n read: (get: Getter, id: TScaffoldInstanceId, panelId: string) => Value\n) {\n const cache = new Map<TScaffoldInstanceId, Map<string, Atom<Value>>>()\n const family = (id: TScaffoldInstanceId, panelId: string): Atom<Value> => {\n let panels = cache.get(id)\n if (panels === undefined) {\n panels = new Map()\n cache.set(id, panels)\n }\n let instance = panels.get(panelId)\n if (instance === undefined) {\n const created = atom((get) => read(get, id, panelId))\n created.debugLabel = `scaffold/${id}/${panelId}/${name}`\n panels.set(panelId, created)\n instance = created\n }\n return instance\n }\n families.push({\n remove: (id: TScaffoldInstanceId) => {\n cache.delete(id)\n },\n })\n return family\n}\n\n// ── primitives ─────────────────────────────────────────────────────────────\n\nexport const scaffoldInspectorOpenAtom = stateFamily<boolean>(\n \"inspectorOpen\",\n false\n)\n\n/** @internal The canvas's ordered panel ids, as registered each render. */\nexport const scaffoldPanelIdsAtom = stateFamily<readonly string[]>(\n \"panelIds\",\n NO_PANEL_IDS\n)\n\n/** @internal The capacity derived from the canvas's measured width — the\n * derived number is stored, not the raw width, so resize storms only touch\n * the store when a panel actually gains or loses room. */\nexport const scaffoldMeasuredCapacityAtom = stateFamily<number | null>(\n \"measuredCapacity\",\n null\n)\n\n/** @internal The three visibility lists, settled as one value. */\nexport const scaffoldVisibilityAtom = stateFamily<IScaffoldPanelVisibility>(\n \"visibility\",\n EMPTY_SCAFFOLD_VISIBILITY\n)\n\nexport const scaffoldHoveredPanelIdAtom = stateFamily<string | null>(\n \"hoveredPanelId\",\n null\n)\n\n/** @internal */\nexport const scaffoldConfigAtom = stateFamily<IScaffoldConfig>(\n \"config\",\n DEFAULT_CONFIG\n)\n\n/** @internal */\nexport const scaffoldHandlersAtom = stateFamily<IScaffoldHandlers>(\n \"handlers\",\n NO_HANDLERS\n)\n\n// ── derived ────────────────────────────────────────────────────────────────\n\n/** How many panels fit side by side; the cap while the canvas is unmeasured. */\nexport const scaffoldPanelCapacityAtom = readFamily(\n \"panelCapacity\",\n (get, id) => get(scaffoldMeasuredCapacityAtom(id)) ?? SCAFFOLD_PANEL_CAPACITY\n)\n\n/** Ids of panels currently hidden (auto + user), for tabs to reflect. */\nexport const scaffoldHiddenPanelIdsAtom = readFamily<readonly string[]>(\n \"hiddenPanelIds\",\n (get, id) => {\n const visibility = get(scaffoldVisibilityAtom(id))\n return [...visibility.autoHidden, ...visibility.userHidden]\n }\n)\n\n/** Whether one panel is hidden. A tab subscribes here and sits still while\n * its siblings toggle. Empty `panelId` (a tab without one) reads false. */\nexport const scaffoldPanelHiddenAtom = panelFamily(\n \"hidden\",\n (get, id, panelId) => {\n if (panelId === \"\") return false\n const visibility = get(scaffoldVisibilityAtom(id))\n return (\n visibility.autoHidden.includes(panelId) ||\n visibility.userHidden.includes(panelId)\n )\n }\n)\n\n/** Whether one panel fades back while another panel's tab holds the\n * spotlight. Moving the hover between two tabs re-renders those panels\n * only — everyone else's boolean holds. */\nexport const scaffoldPanelDimmedAtom = panelFamily(\n \"dimmed\",\n (get, id, panelId) => {\n if (panelId === \"\") return false\n const hovered = get(scaffoldHoveredPanelIdAtom(id))\n return hovered !== null && hovered !== panelId\n }\n)\n\nexport const scaffoldPanelLayoutsAtom = stateFamily<\n Record<string, IScaffoldPanelLayout>\n>(\"panel-layouts\", {})\nexport const scaffoldActiveResizeAtom = stateFamily<string | null>(\n \"active-resize\",\n null\n)\nexport const scaffoldInspectorWidthAtom = stateFamily<number | null>(\n \"inspector-width\",\n null\n)\nexport const resizeScaffoldInspectorAtom = actionFamily<[number]>(\n \"resize-inspector\",\n (_get, set, id, width) => {\n if (Number.isFinite(width))\n set(scaffoldInspectorWidthAtom(id), Math.max(180, width))\n }\n)\nexport const updateScaffoldPanelLayoutAtom = actionFamily<\n [string, Partial<IScaffoldPanelLayout>]\n>(\"update-panel-layout\", (get, set, id, panelId, patch) => {\n const layouts = get(scaffoldPanelLayoutsAtom(id))\n const safe = { ...patch }\n if (safe.width !== undefined && Number.isFinite(safe.width))\n set(scaffoldActiveResizeAtom(id), panelId)\n if (safe.width !== undefined)\n safe.width = Number.isFinite(safe.width)\n ? Math.max(320, safe.width)\n : undefined\n if (safe.secondarySize !== undefined)\n safe.secondarySize = Number.isFinite(safe.secondarySize)\n ? Math.max(56, safe.secondarySize)\n : undefined\n set(scaffoldPanelLayoutsAtom(id), {\n ...layouts,\n [panelId]: { ...layouts[panelId], ...safe },\n })\n})\n\n/** The whole state of one scaffold. This changes on every hover move, so a\n * component that reads one field should subscribe to that field's atom\n * instead: `useAtomValue(scaffoldInspectorOpenAtom(\"workspace\"))`. */\nexport const scaffoldStateAtom = readFamily<IScaffoldState>(\n \"state\",\n (get, id) => ({\n inspectorOpen: get(scaffoldInspectorOpenAtom(id)),\n inspectorWidth: get(scaffoldInspectorWidthAtom(id)),\n panelLayouts: get(scaffoldPanelLayoutsAtom(id)),\n panelCapacity: get(scaffoldPanelCapacityAtom(id)),\n hiddenPanelIds: get(scaffoldHiddenPanelIdsAtom(id)),\n hoveredPanelId: get(scaffoldHoveredPanelIdAtom(id)),\n })\n)\n\n// ── visibility settling ────────────────────────────────────────────────────\n\n/** Re-settle the lists after any input moved. Inert when nothing changes —\n * `reconcileVisibility` returns `prev` untouched then. */\nfunction settleVisibility(get: Getter, set: Setter, id: TScaffoldInstanceId) {\n const prev = get(scaffoldVisibilityAtom(id))\n const settled = reconcileVisibility(\n prev,\n get(scaffoldPanelIdsAtom(id)),\n get(scaffoldPanelCapacityAtom(id))\n )\n if (settled !== prev) set(scaffoldVisibilityAtom(id), settled)\n}\n\n// ── actions: inspector ─────────────────────────────────────────────────────\n\n/** Reports through `onInspectorOpenChange` always; writes the store only\n * when no `inspectorOpen` prop controls the root — the prop is truth then. */\nexport const setScaffoldInspectorOpenAtom = actionFamily<[open: boolean]>(\n \"setInspectorOpen\",\n (get, set, id, open) => {\n if (get(scaffoldInspectorOpenAtom(id)) === open) return\n if (!get(scaffoldConfigAtom(id)).controlsInspector)\n set(scaffoldInspectorOpenAtom(id), open)\n get(scaffoldHandlersAtom(id)).onInspectorOpenChange?.(open)\n }\n)\n\nexport const toggleScaffoldInspectorAtom = actionFamily<[]>(\n \"toggleInspector\",\n (get, set, id) => {\n set(setScaffoldInspectorOpenAtom(id), !get(scaffoldInspectorOpenAtom(id)))\n }\n)\n\n// ── actions: panels ────────────────────────────────────────────────────────\n\n/** Show/hide an id'd panel. Showing past capacity auto-hides the\n * least-recently-activated visible panel; the last visible one never hides. */\nexport const toggleScaffoldPanelAtom = actionFamily<[panelId: string]>(\n \"togglePanel\",\n (get, set, id, panelId) => {\n const ids = get(scaffoldPanelIdsAtom(id))\n if (!ids.includes(panelId)) return\n const prev = get(scaffoldVisibilityAtom(id))\n const hidden =\n prev.autoHidden.includes(panelId) || prev.userHidden.includes(panelId)\n if (!hidden && prev.visibleOrder.length <= 1) return\n\n const next: IScaffoldPanelVisibility = hidden\n ? {\n // Showing: newest activation — reconcile evicts the oldest\n // visible panel if the canvas can't fit one more.\n visibleOrder: [...prev.visibleOrder, panelId],\n autoHidden: prev.autoHidden.filter((other) => other !== panelId),\n userHidden: prev.userHidden.filter((other) => other !== panelId),\n }\n : {\n visibleOrder: prev.visibleOrder.filter((other) => other !== panelId),\n autoHidden: prev.autoHidden,\n userHidden: [...prev.userHidden, panelId],\n }\n set(\n scaffoldVisibilityAtom(id),\n reconcileVisibility(next, ids, get(scaffoldPanelCapacityAtom(id)))\n )\n }\n)\n\n/** @internal Tabs report pointer enter/leave on their label. Leaving clears\n * only its own id — a tab that unmounts mid-hover must not wipe out a hover\n * the pointer has already moved on to. */\nexport const setScaffoldPanelHoveredAtom = actionFamily<\n [panelId: string, hovered: boolean]\n>(\"setPanelHovered\", (get, set, id, panelId, hovered) => {\n const prev = get(scaffoldHoveredPanelIdAtom(id))\n if (hovered) {\n if (prev !== panelId) set(scaffoldHoveredPanelIdAtom(id), panelId)\n return\n }\n if (prev === panelId) set(scaffoldHoveredPanelIdAtom(id), null)\n})\n\n/** @internal Canvas reports its ordered panel ids each render. Inert when\n * the ids did not move; otherwise the visibility settles in the same write. */\nexport const registerScaffoldPanelIdsAtom = actionFamily<\n [ids: readonly string[]]\n>(\"registerPanelIds\", (get, set, id, ids) => {\n const prev = get(scaffoldPanelIdsAtom(id))\n if (prev.length === ids.length && prev.every((v, i) => v === ids[i])) return\n set(scaffoldPanelIdsAtom(id), [...ids])\n settleVisibility(get, set, id)\n})\n\n/** @internal Canvas reports its measured width. Only the derived capacity is\n * stored, so resize storms settle to at most one visibility change. */\nexport const measureScaffoldCanvasAtom = actionFamily<[width: number]>(\n \"measureCanvas\",\n (get, set, id, width) => {\n const capacity = getPanelCapacity(width)\n if (get(scaffoldMeasuredCapacityAtom(id)) === capacity) return\n set(scaffoldMeasuredCapacityAtom(id), capacity)\n settleVisibility(get, set, id)\n }\n)\n\n// ── internal projections ───────────────────────────────────────────────────\n\n/** @internal Projection of the mounted root's controlled props. */\nexport const projectScaffoldPropsAtom = actionFamily<\n [config: IScaffoldConfig, inspectorOpen: boolean | undefined]\n>(\"projectProps\", (_get, set, id, config, inspectorOpen) => {\n set(scaffoldConfigAtom(id), config)\n if (config.controlsInspector && inspectorOpen !== undefined)\n set(scaffoldInspectorOpenAtom(id), inspectorOpen)\n})\n\n/** @internal */\nexport const setScaffoldHandlersAtom = actionFamily<\n [handlers: IScaffoldHandlers]\n>(\"setHandlers\", (_get, set, id, handlers) => {\n set(scaffoldHandlersAtom(id), handlers)\n})\n\n/** @internal Seed the uncontrolled inspector on mount without firing\n * `onInspectorOpenChange`. */\nexport const seedScaffoldInspectorAtom = actionFamily<[open: boolean]>(\n \"seedInspector\",\n (_get, set, id, open) => {\n set(scaffoldInspectorOpenAtom(id), open)\n }\n)\n\n// ── reset ──────────────────────────────────────────────────────────────────\n\nexport const resetScaffoldAtom = actionFamily<[]>(\"reset\", (_get, set, id) => {\n set(scaffoldInspectorOpenAtom(id), false)\n set(scaffoldInspectorWidthAtom(id), null)\n set(scaffoldPanelLayoutsAtom(id), {})\n set(scaffoldActiveResizeAtom(id), null)\n set(scaffoldPanelIdsAtom(id), NO_PANEL_IDS)\n set(scaffoldMeasuredCapacityAtom(id), null)\n set(scaffoldVisibilityAtom(id), EMPTY_SCAFFOLD_VISIBILITY)\n set(scaffoldHoveredPanelIdAtom(id), null)\n set(scaffoldConfigAtom(id), DEFAULT_CONFIG)\n set(scaffoldHandlersAtom(id), NO_HANDLERS)\n})\n\n/** Forget a scaffold entirely — every family drops the key so the store can\n * release its state. Call on teardown of a named instance. */\nexport function removeScaffoldInstance(id: TScaffoldInstanceId): void {\n for (const family of families) family.remove(id)\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport type { IScaffoldContextValue } from \"./type\"\n\nexport const ScaffoldContext = React.createContext<IScaffoldContextValue | null>(\n null\n)\n\n/** Read the scaffold's identity (`scaffoldId`, `inspectorWidth`); must run\n * under `Scaffold.Root`. State itself lives in the store — subscribe to the\n * atoms, or reach them by id through `useScaffoldState` / `useScaffoldActions`. */\nexport function useScaffoldContext(): IScaffoldContextValue {\n const context = React.useContext(ScaffoldContext)\n if (!context) {\n throw new Error(\"useScaffoldContext must be used within <Scaffold.Root>\")\n }\n return context\n}\n","\"use client\"\n\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\n\nimport { useAtomValue } from \"jotai\"\n\nimport { cn } from \"@/lib/utils\"\nimport { SCAFFOLD_EASE, SCAFFOLD_EDGE_GUTTER, SCAFFOLD_MORPH_DURATION } from \"./constants\"\nimport { scaffoldInspectorOpenAtom } from \"./scaffold-atom\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport type { IScaffoldActionsProps } from \"./type\"\nimport { segmentVariants } from \"./utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { SPRING_LAYOUT } from \"@/lib/ease.ts\"\nimport { LucidePlus } from \"lucide-react\"\n\n/**\n * The floating pill cluster in the main region's top-right corner — the\n * design's \"Panel Context Menu\": one tab per open panel (`Scaffold.Tab`\n * children) plus an Add segment. Add renders only while `onAdd` is\n * present — omit it once the canvas holds `SCAFFOLD_PANEL_CAPACITY`\n * panels. Slides left in step with the inspector opening.\n */\nexport function ScaffoldActions({\n onAdd,\n addLabel = \"Panel\",\n addIcon,\n sound = true,\n className,\n children,\n ...rest\n}: IScaffoldActionsProps): React.ReactElement {\n const { scaffoldId, inspectorWidth } = useScaffoldContext()\n const inspectorOpen = useAtomValue(scaffoldInspectorOpenAtom(scaffoldId))\n const reducedMotion = useReducedMotion()\n const transition = reducedMotion ? { duration: 0 } : SPRING_LAYOUT\n\n return (\n <motion.div\n id=\"scaffold-actions\"\n animate={{\n x: inspectorOpen ? -(inspectorWidth + SCAFFOLD_EDGE_GUTTER) : 0,\n }}\n className={cn(\n \"sticky inline-flex h-12 items-center gap-0.5\",\n \"justify-end\",\n className\n )}\n data-slot=\"scaffold-actions\"\n initial={false}\n transition={{\n duration: reducedMotion ? 0 : SCAFFOLD_MORPH_DURATION,\n ease: SCAFFOLD_EASE,\n }}\n {...rest}\n >\n <motion.div\n layout\n transition={transition}\n className=\"flex items-center gap-1.5\"\n >\n <AnimatePresence mode=\"popLayout\" initial={false}>\n {onAdd && (\n <motion.div\n key=\"scaffold-add\"\n layout\n animate={reducedMotion ? { opacity: 1 } : \"visible\"}\n className=\"flex shrink-0\"\n exit={reducedMotion ? { opacity: 0 } : \"exit\"}\n initial={reducedMotion ? { opacity: 0 } : \"hidden\"}\n transition={transition}\n variants={segmentVariants}\n >\n <Button\n onClick={onAdd}\n size=\"sm\"\n sound={sound}\n variant=\"ghost\"\n className=\"h-full gap-2 rounded-sm py-1.5 pr-3 pl-2\"\n >\n {addIcon ?? <LucidePlus className=\"stroke-2\" />}\n {addLabel}\n </Button>\n </motion.div>\n )}\n {children}\n </AnimatePresence>\n </motion.div>\n </motion.div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n measureScaffoldCanvasAtom,\n registerScaffoldPanelIdsAtom,\n scaffoldHiddenPanelIdsAtom,\n scaffoldPanelLayoutsAtom,\n scaffoldActiveResizeAtom,\n} from \"./scaffold-atom\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport type { TScaffoldCanvasProps, IScaffoldPanelProps } from \"./type\"\n\n/** A canvas child's panel id when it opted into responsive hiding. */\nfunction panelIdOf(child: React.ReactNode): string | undefined {\n if (!React.isValidElement<Pick<IScaffoldPanelProps, \"id\">>(child))\n return undefined\n const id = child.props.id\n return typeof id === \"string\" ? id : undefined\n}\n\n/**\n * The panel row below the action cluster: 8px gutters, 8px gaps, panels\n * side by side. Key each `Scaffold.Panel` child so closes animate out.\n * Measures its own width and hides id'd panels (oldest activation first)\n * whenever it can't grant each one `SCAFFOLD_PANEL_MIN_WIDTH`.\n */\nexport function ScaffoldCanvas({\n className,\n children,\n ...rest\n}: TScaffoldCanvasProps): React.ReactElement {\n const { scaffoldId } = useScaffoldContext()\n const layouts = useAtomValue(scaffoldPanelLayoutsAtom(scaffoldId))\n const activeResize = useAtomValue(scaffoldActiveResizeAtom(scaffoldId))\n const hiddenPanelIds = useAtomValue(scaffoldHiddenPanelIdsAtom(scaffoldId))\n const registerPanelIds = useSetAtom(registerScaffoldPanelIdsAtom(scaffoldId))\n const measureCanvas = useSetAtom(measureScaffoldCanvasAtom(scaffoldId))\n const [width, setWidth] = React.useState(0)\n const ref = React.useRef<HTMLDivElement>(null)\n\n React.useLayoutEffect(() => {\n const element = ref.current\n if (!element || typeof ResizeObserver === \"undefined\") return\n const observer = new ResizeObserver(([entry]) => {\n measureCanvas(entry.contentRect.width)\n setWidth(entry.contentRect.width)\n })\n observer.observe(element)\n return () => observer.disconnect()\n }, [measureCanvas])\n\n const childArray = React.Children.toArray(children)\n const panelIds = childArray\n .map(panelIdOf)\n .filter((id): id is string => id !== undefined)\n const idsKey = panelIds.join(\" \")\n\n // Passive on purpose: jotai (v3) readers subscribe in their own\n // `useEffect`, so a layout-effect write at mount would land before any\n // subscription exists and never notify them.\n React.useEffect(() => {\n registerPanelIds(panelIds)\n // panelIds is rebuilt each render; idsKey carries its identity.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [idsKey, registerPanelIds])\n\n const visibleChildren = childArray.filter((child) => {\n const id = panelIdOf(child)\n return id === undefined || !hiddenPanelIds.includes(id)\n })\n\n // With three columns, the center consumes the flexible space so Motion\n // Panels has at most one sized surface on either side.\n const fillChild =\n visibleChildren.length > 2\n ? visibleChildren[Math.floor(visibleChildren.length / 2)]\n : ([...visibleChildren]\n .reverse()\n .find((child) => panelIdOf(child) !== activeResize) ??\n visibleChildren.at(-1))\n const count = visibleChildren.length\n const equalWidth =\n width > 0 ? (width - Math.max(0, count - 1) * 8) / Math.max(1, count) : 320\n const sized = visibleChildren.filter((child) => child !== fillChild)\n const fillRequest =\n panelIdOf(fillChild) === activeResize\n ? (layouts[activeResize ?? \"\"]?.width ?? 320)\n : 320\n const fillReserve = Math.max(\n 320,\n Math.min(fillRequest, width - Math.max(0, count - 1) * 328)\n )\n const availableExtra = Math.max(\n 0,\n width - Math.max(0, count - 1) * 8 - (count - 1) * 320 - fillReserve\n )\n const requestedExtra = sized.reduce<number>(\n (sum, child) =>\n sum +\n Math.max(0, (layouts[panelIdOf(child) ?? \"\"]?.width ?? equalWidth) - 320),\n 0\n )\n const resizingFill = panelIdOf(fillChild) === activeResize\n const ratio =\n requestedExtra > 0 && (resizingFill || requestedExtra > availableExtra)\n ? availableExtra / requestedExtra\n : 1\n const widths = new Map(\n sized.map((child) => [\n child,\n 320 +\n (resizingFill && requestedExtra === 0\n ? availableExtra / Math.max(1, sized.length)\n : Math.max(\n 0,\n (layouts[panelIdOf(child) ?? \"\"]?.width ?? equalWidth) - 320\n ) * ratio),\n ])\n )\n\n return (\n <div\n className={cn(\"min-h-0 gap-2 relative flex w-full flex-1\", className)}\n data-slot=\"scaffold-canvas\"\n data-motion-panels-fill=\"\"\n ref={ref}\n {...rest}\n >\n {/* Keep folded panels mounted to preserve their content state. */}\n {childArray.map((child) => {\n if (!React.isValidElement(child)) return child\n const hidden = !visibleChildren.includes(child)\n return React.cloneElement(\n child as React.ReactElement<Record<string, unknown>>,\n {\n _panelHidden: hidden,\n _panelFill: child === fillChild,\n _panelEnd:\n childArray.indexOf(child) < childArray.indexOf(fillChild!),\n _panelMax: Math.max(\n 320,\n width -\n Math.max(0, count - 1) * 8 -\n 320 -\n sized\n .filter((other) => other !== child)\n .reduce<number>(\n (sum, other) => sum + (widths.get(other) ?? 320),\n 0\n )\n ),\n _panelWidth: widths.get(child) ?? equalWidth,\n }\n )\n })}\n </div>\n )\n}\n","\"use client\"\n\nimport { motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\n\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { useMotionPanel } from \"@/lib/use-motion-panel\"\nimport { cn } from \"@/lib/utils\"\nimport {\n SCAFFOLD_EASE,\n SCAFFOLD_EDGE_GUTTER,\n SCAFFOLD_MORPH_DURATION,\n} from \"./constants\"\nimport {\n scaffoldInspectorOpenAtom,\n toggleScaffoldInspectorAtom,\n resizeScaffoldInspectorAtom,\n setScaffoldInspectorOpenAtom,\n} from \"./scaffold-atom\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport type { IScaffoldInspectorProps } from \"./type\"\nimport { GlassContainer } from \"@/components/ui/glasscn/glass-container.tsx\"\nimport { Button } from \"@/components/ui/button\"\nimport { LucideX } from \"lucide-react\"\nimport { SCAFFOLD_BEZEL_CLASSES } from \"./utils\"\n\n/**\n * The right-hand drawer: a brighter card that slides in over the canvas,\n * inset from the viewport edges. Open state lives on `Scaffold.Root` (or\n * `useScaffold().providerProps`); the drawer stays mounted so it can slide\n * back out.\n */\nexport function ScaffoldInspector({\n children,\n name = \"Inspector\",\n className,\n ...rest\n}: IScaffoldInspectorProps): React.ReactElement {\n const { scaffoldId, inspectorWidth } = useScaffoldContext()\n const inspectorOpen = useAtomValue(scaffoldInspectorOpenAtom(scaffoldId))\n const toggleInspector = useSetAtom(toggleScaffoldInspectorAtom(scaffoldId))\n const reducedMotion = useReducedMotion()\n\n const resizeInspector = useSetAtom(resizeScaffoldInspectorAtom(scaffoldId))\n const setInspectorOpen = useSetAtom(setScaffoldInspectorOpenAtom(scaffoldId))\n const [availableWidth, setAvailableWidth] = React.useState<number>(Infinity)\n const { panelRef, gripRef } = useMotionPanel({\n size: Math.min(inspectorWidth, availableWidth),\n minSize: 180,\n maxSize: \"90%\",\n defaultSize: 272,\n collapsed: !inspectorOpen,\n overshoot: false,\n onSizeChange: (size) => resizeInspector(Number(size)),\n onCollapsedChange: (collapsed) => setInspectorOpen(!collapsed),\n transition: reducedMotion\n ? { duration: 0 }\n : { duration: SCAFFOLD_MORPH_DURATION, ease: SCAFFOLD_EASE },\n })\n\n React.useLayoutEffect(() => {\n const parent = panelRef.current?.parentElement\n if (!parent) return\n const measure = () => {\n if (parent.clientWidth) setAvailableWidth(parent.clientWidth * 0.9)\n }\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(parent)\n return () => observer.disconnect()\n }, [panelRef])\n\n // Slide fully past the edge gutter and the drop shadow's blur radius.\n const offcanvasX = inspectorWidth + SCAFFOLD_EDGE_GUTTER + 12\n\n return (\n <motion.aside\n id=\"scaffold-inspector\"\n ref={panelRef}\n animate={{ x: inspectorOpen ? 0 : offcanvasX }}\n aria-hidden={inspectorOpen ? undefined : true}\n aria-label={name}\n className={cn(\n \"right-0 my-2 w-96 absolute z-20 flex h-full max-h-[calc(100%-0.5rem)] flex-col\",\n !inspectorOpen && \"pointer-events-none\",\n className\n )}\n data-slot=\"scaffold-inspector\"\n inert={inspectorOpen ? undefined : true}\n initial={false}\n role=\"complementary\"\n style={{ overflow: inspectorOpen ? undefined : \"clip\" }}\n transition={{\n duration: reducedMotion ? 0 : SCAFFOLD_MORPH_DURATION,\n ease: SCAFFOLD_EASE,\n }}\n {...rest}\n >\n <div\n ref={gripRef}\n role=\"separator\"\n aria-label=\"Resize inspector\"\n aria-orientation=\"vertical\"\n tabIndex={inspectorOpen ? 0 : -1}\n className=\"inset-y-0 -left-1 w-2 absolute z-30 cursor-col-resize touch-none focus-visible:outline-2 focus-visible:outline-ring\"\n />\n <GlassContainer\n className={cn(\n \"bg-neutral-50/20 dark:bg-black/5 flex flex-1 flex-col rounded-md\",\n SCAFFOLD_BEZEL_CLASSES\n )}\n glassVariant=\"subtle\"\n >\n <div\n id=\"scaffold-inspector-header\"\n className=\"h-12 gap-2 pr-3 pl-4 flex items-center justify-between border-b\"\n >\n <span className=\"text-base font-normal text-card-foreground/70\">\n {name}\n </span>\n <Button\n size=\"icon-xs\"\n variant=\"glass\"\n glassVariant=\"subtle\"\n className=\"scale-85\"\n aria-label=\"Close inspector\"\n onClick={toggleInspector}\n >\n <LucideX className=\"stroke-3\" />\n </Button>\n </div>\n {children}\n </GlassContainer>\n </motion.aside>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { TScaffoldMainProps } from \"./type\"\n\n/**\n * The region right of the rail. Hosts `Scaffold.Actions` (top-right),\n * `Scaffold.Canvas` and the `Scaffold.Inspector` overlay — all positioned\n * against this box.\n */\nexport function ScaffoldMain({\n className,\n children,\n ...rest\n}: TScaffoldMainProps): React.ReactElement {\n return (\n <div\n id=\"scaffold-main\"\n className={cn(\"relative flex min-w-0 flex-1 flex-col\", className)}\n data-slot=\"scaffold-main\"\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { useMotionPanel } from \"@/lib/use-motion-panel\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\nimport {\n scaffoldPanelLayoutsAtom,\n updateScaffoldPanelLayoutAtom,\n} from \"./scaffold-atom\"\nimport { motion, useReducedMotion } from \"motion/react\"\nimport { cn } from \"@/lib/utils\"\nimport type { IScaffoldSubPanelProps } from \"./type\"\nimport { subPanelVariant } from \"@/components/blocks/scaffold/utils.ts\"\nimport { SCAFFOLD_EASE, SCAFFOLD_MORPH_DURATION } from \"./constants\"\n\nexport function ScaffoldSubPanel({\n panelId = \"\",\n swapped = false,\n className,\n children,\n variant = \"card\",\n primary = false,\n expanded,\n ...rest\n}: IScaffoldSubPanelProps & {\n panelId?: string\n swapped?: boolean\n}): React.ReactElement {\n const reduce = useReducedMotion()\n // The primary card holds the flexible slot unless the panel says otherwise.\n const isExpanded = expanded ?? primary\n\n const { scaffoldId } = useScaffoldContext()\n const layouts = useAtomValue(scaffoldPanelLayoutsAtom(scaffoldId))\n const updateLayout = useSetAtom(updateScaffoldPanelLayoutAtom(scaffoldId))\n const [height, setHeight] = React.useState(400)\n const { panelRef, gripRef } = useMotionPanel({\n orientation: \"vertical\",\n enabled: !primary,\n size: isExpanded\n ? Math.min(\n layouts[panelId]?.secondarySize ?? height - 64,\n Math.max(56, height - 64)\n )\n : 56,\n minSize: 56,\n maxSize: Math.max(56, height - 64),\n defaultSize: 56,\n overshoot: false,\n transition: reduce\n ? { duration: 0 }\n : { duration: SCAFFOLD_MORPH_DURATION, ease: SCAFFOLD_EASE },\n onSizeChange: (size) =>\n updateLayout(panelId, {\n secondarySize: Number(size),\n secondaryExpanded: Number(size) > 56,\n }),\n })\n\n React.useLayoutEffect(() => {\n const parent = panelRef.current?.parentElement\n if (!parent) return\n const measure = () => setHeight(parent.clientHeight || 400)\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(parent)\n return () => observer.disconnect()\n }, [panelRef])\n\n return (\n <motion.div\n layout=\"position\"\n ref={(node) => {\n panelRef.current = node\n }}\n data-motion-panels-fill={primary ? \"\" : undefined}\n id={`scaffold-sub-panel-${variant}`}\n // Motion Panels animates the boundary; the primary consumes the rest.\n initial={false}\n style={{\n flex: primary ? \"1 1 0%\" : \"0 0 auto\",\n minHeight: primary ? 56 : 0,\n }}\n transition={\n reduce\n ? { duration: 0 }\n : { duration: SCAFFOLD_MORPH_DURATION, ease: SCAFFOLD_EASE }\n }\n className={cn(\n \"relative flex w-full flex-col\",\n subPanelVariant[variant],\n // basis-14 + clip let the primary squeeze down to the strip height;\n // the strip keeps its natural (basis-auto) height when collapsed.\n primary ? \"overflow-clip\" : \"\",\n className\n )}\n data-slot={`scaffold-sub-panel-${variant}`}\n data-expanded={isExpanded ? \"\" : undefined}\n {...rest}\n >\n {!primary && (\n <div\n ref={gripRef}\n role=\"separator\"\n aria-label=\"Resize secondary panel\"\n aria-orientation=\"horizontal\"\n tabIndex={0}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault()\n updateLayout(panelId, { secondaryExpanded: !isExpanded })\n }\n }}\n className={cn(\n \"inset-x-0 h-2 absolute z-10 cursor-row-resize touch-none focus-visible:outline-2 focus-visible:outline-ring\",\n swapped ? \"-bottom-1\" : \"-top-1\"\n )}\n />\n )}\n {children}\n </motion.div>\n )\n}\n","\"use client\"\n\nimport { motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\nimport { useId } from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n SCAFFOLD_EASE,\n SCAFFOLD_MORPH_DURATION,\n SCAFFOLD_PANEL_MIN_WIDTH,\n} from \"./constants\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { useMotionPanel } from \"@/lib/use-motion-panel\"\nimport { PanelMenuButton } from \"./panel-menu-button.tsx\"\nimport {\n scaffoldPanelDimmedAtom,\n scaffoldPanelLayoutsAtom,\n updateScaffoldPanelLayoutAtom,\n toggleScaffoldPanelAtom,\n} from \"./scaffold-atom\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport type { IScaffoldPanelProps } from \"./type\"\nimport { ScaffoldSubPanel } from \"@/components/blocks/scaffold/scaffold-sub-panel.tsx\"\n\n/**\n * A canvas panel: a primary card plus an optional secondary strip below it,\n * separated by a slice of the desktop backdrop. Floating close and swap\n * buttons reveal on hover when their callbacks are provided. Swapping trades\n * the two cards with a layout morph — the strip glides up and grows into the\n * primary slot while the primary card shrinks down into the strip.\n */\nexport function ScaffoldPanel({\n id,\n _panelHidden = false,\n _panelFill = true,\n _panelWidth = 320,\n _panelMax = 640,\n _panelEnd = true,\n children,\n SecondaryPanel,\n onSwap,\n onCloseSecondary,\n name,\n swapLabel = \"Swap panel content\",\n sound = true,\n className,\n}: IScaffoldPanelProps & {\n _panelHidden?: boolean\n _panelFill?: boolean\n _panelWidth?: number\n _panelMax?: number\n _panelEnd?: boolean\n}): React.ReactElement {\n const { scaffoldId } = useScaffoldContext()\n const reducedMotion = useReducedMotion()\n\n // A hovered tab spotlights its own panel — every other id'd panel fades\n // back so the pairing reads at a glance. The per-panel atom keeps a hover\n // moving between two tabs from re-rendering the panels that stay dimmed;\n // the empty-key sentinel reads false for a panel without an `id`.\n const dimmed = useAtomValue(scaffoldPanelDimmedAtom(scaffoldId, id ?? \"\"))\n\n const transition = {\n duration: reducedMotion ? 0 : SCAFFOLD_MORPH_DURATION,\n ease: SCAFFOLD_EASE,\n }\n\n const generatedId = useId()\n const panelId = id ?? generatedId\n const layouts = useAtomValue(scaffoldPanelLayoutsAtom(scaffoldId))\n const updateLayout = useSetAtom(updateScaffoldPanelLayoutAtom(scaffoldId))\n const togglePanel = useSetAtom(toggleScaffoldPanelAtom(scaffoldId))\n const panelLayout = layouts[panelId] ?? {}\n const isSwapped = panelLayout.swapped ?? false\n const secondaryExpanded = panelLayout.secondaryExpanded ?? false\n const handleSwap = () => {\n updateLayout(panelId, { swapped: !isSwapped })\n onSwap?.()\n }\n const handleExpand = () =>\n updateLayout(panelId, { secondaryExpanded: !secondaryExpanded })\n const { panelRef, gripRef } = useMotionPanel({\n size: _panelWidth,\n minSize: SCAFFOLD_PANEL_MIN_WIDTH,\n maxSize: _panelMax,\n\n enabled: !_panelFill,\n collapsed: _panelHidden,\n overshoot: false,\n transition,\n onSizeChange: (size) => updateLayout(panelId, { width: Number(size) }),\n onCollapsedChange: id\n ? (collapsed) => {\n if (collapsed !== _panelHidden) togglePanel(id)\n }\n : undefined,\n })\n\n const primaryPanel = (\n <ScaffoldSubPanel\n key=\"top\"\n id=\"top\"\n expanded={!secondaryExpanded}\n primary\n panelId={panelId}\n >\n {children}\n </ScaffoldSubPanel>\n )\n const secondaryPanel = SecondaryPanel ? (\n <ScaffoldSubPanel\n key=\"bottom\"\n id=\"bottom\"\n expanded={secondaryExpanded}\n panelId={panelId}\n swapped={isSwapped}\n >\n {SecondaryPanel}\n </ScaffoldSubPanel>\n ) : null\n const seam = (onSwap || onCloseSecondary) && SecondaryPanel && (\n // `layout` keeps the seam glued to the moving boundary while the\n // cards trade places around it.\n <motion.div\n key=\"seam\"\n layout=\"position\"\n data-motion-panels-separator=\"\"\n transition={transition}\n className=\"h-2 relative flex items-center justify-center\"\n >\n <PanelMenuButton\n label={swapLabel}\n onClick={handleSwap}\n onExpand={handleExpand}\n onCloseSecondary={onCloseSecondary}\n secondaryExpanded={secondaryExpanded}\n swapped={isSwapped}\n sound={sound}\n />\n </motion.div>\n )\n\n return (\n <motion.section\n initial={false}\n id={id ?? \"scaffold-panel\"}\n ref={panelRef}\n data-motion-panels-fill={_panelFill ? \"\" : undefined}\n data-motion-panels-separator={_panelHidden ? \"\" : undefined}\n aria-hidden={_panelHidden || undefined}\n inert={_panelHidden || undefined}\n animate={{ opacity: dimmed ? 0.35 : 1 }}\n style={{\n flex: _panelFill ? \"1 1 0%\" : \"0 0 auto\",\n minWidth: 0,\n marginRight: _panelHidden ? -8 : 0,\n overflow: _panelHidden ? \"clip\" : undefined,\n }}\n aria-label={name}\n className={cn(\"group/panel min-w-0 relative flex\", \"flex-col\", className)}\n data-slot=\"scaffold-panel\"\n data-dimmed={dimmed ? \"\" : undefined}\n data-swapped={isSwapped ? \"\" : undefined}\n transition={transition}\n >\n {!_panelFill && (\n <div\n ref={gripRef}\n role=\"separator\"\n aria-label={`Resize ${name ?? \"panel\"}`}\n aria-orientation=\"vertical\"\n tabIndex={_panelHidden ? -1 : 0}\n className={cn(\n \"inset-y-0 w-2 absolute z-10 cursor-col-resize touch-none focus-visible:outline-2 focus-visible:outline-ring\",\n _panelEnd ? \"-right-1\" : \"-left-1\"\n )}\n />\n )}\n {isSwapped ? secondaryPanel : primaryPanel}\n {seam}\n {isSwapped ? primaryPanel : secondaryPanel}\n </motion.section>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { cn } from \"@/lib/utils\"\nimport { SCAFFOLD_INSPECTOR_WIDTH } from \"./constants\"\nimport {\n projectScaffoldPropsAtom,\n scaffoldInspectorWidthAtom,\n removeScaffoldInstance,\n seedScaffoldInspectorAtom,\n setScaffoldHandlersAtom,\n} from \"./scaffold-atom\"\nimport { ScaffoldContext } from \"./scaffold-context\"\nimport type {\n IScaffoldConfig,\n IScaffoldContextValue,\n IScaffoldHandlers,\n IScaffoldRootProps,\n} from \"./type\"\nimport type { ClassNameValue } from \"tailwind-merge\"\n\n/**\n * The scaffold's viewport: desktop backdrop + horizontal row of rail and\n * main region, and the binding between this instance's props and its slice\n * of the store. Fills its container — size it from the outside (e.g.\n * `h-svh` for a full page).\n *\n * State lives in the store under `scaffoldId`; the context carries only the\n * id and the drawer width, so its value never changes while the scaffold is\n * mounted and parts subscribe to exactly the atoms they render from. A\n * controlled `inspectorOpen` stays the source of truth: it is projected\n * one-way into the store (so remote readers see current data), and the\n * inspector actions report through `onInspectorOpenChange` instead of\n * writing.\n */\nexport function ScaffoldRoot({\n scaffoldId: scaffoldIdProp,\n inspectorOpen: inspectorOpenProp,\n defaultInspectorOpen,\n onInspectorOpenChange,\n inspectorWidth = SCAFFOLD_INSPECTOR_WIDTH,\n className,\n children,\n ...rest\n}: IScaffoldRootProps): React.ReactElement {\n const generatedId = React.useId()\n const scaffoldId = scaffoldIdProp ?? generatedId\n const background: ClassNameValue = `bg-linear-to-tr/increasing from-neutral-200 via-neutral-100 to-stone-200 dark:from-neutral-900 dark:via-neutral-950 dark:to-stone-950`\n\n const controlsInspector = inspectorOpenProp !== undefined\n const config = React.useMemo<IScaffoldConfig>(\n () => ({ controlsInspector }),\n [controlsInspector]\n )\n const handlers = React.useMemo<IScaffoldHandlers>(\n () => ({ onInspectorOpenChange }),\n [onInspectorOpenChange]\n )\n\n const project = useSetAtom(projectScaffoldPropsAtom(scaffoldId))\n const publishHandlers = useSetAtom(setScaffoldHandlersAtom(scaffoldId))\n const seedInspector = useSetAtom(seedScaffoldInspectorAtom(scaffoldId))\n\n // Seed the uncontrolled inspector once per mount, before the projection —\n // `defaultInspectorOpen` describes the mount, not every render. Passive\n // effects on purpose: jotai (v3) subscribes readers in their own\n // `useEffect` with no post-subscription recheck, and the children's\n // subscription effects run before this parent's passive effects — a\n // `useLayoutEffect` write would land before any subscription exists and\n // the readers would never re-render with the seeded state.\n const [seed] = React.useState(\n () => inspectorOpenProp ?? defaultInspectorOpen ?? false\n )\n React.useEffect(() => {\n if (!controlsInspector) seedInspector(seed)\n // Mount-time seed only.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n // Handlers before the projection — they must be in the store before any\n // action can fire.\n React.useEffect(() => {\n publishHandlers(handlers)\n }, [publishHandlers, handlers])\n React.useEffect(() => {\n project(config, inspectorOpenProp)\n }, [project, config, inspectorOpenProp])\n\n React.useEffect(() => {\n if (scaffoldIdProp !== undefined) return\n return () => removeScaffoldInstance(scaffoldId)\n }, [scaffoldIdProp, scaffoldId])\n\n const storedWidth = useAtomValue(scaffoldInspectorWidthAtom(scaffoldId))\n const value = React.useMemo<IScaffoldContextValue>(\n () => ({ scaffoldId, inspectorWidth: storedWidth ?? inspectorWidth }),\n [scaffoldId, inspectorWidth, storedWidth]\n )\n\n return (\n <ScaffoldContext.Provider value={value}>\n <div\n id={\"scaffold-root\"}\n className={cn(\n // `clip`, not `hidden`: the off canvas inspector extends the\n // scrollable overflow, and focus/scrollIntoView would scroll a\n // hidden-overflow root sideways to reveal it.\n \"pr-2 pb-2 relative isolate flex size-full flex-1 overflow-clip\",\n background,\n className\n )}\n data-slot=\"scaffold\"\n {...rest}\n >\n {children}\n </div>\n </ScaffoldContext.Provider>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { TScaffoldSidebarProps } from \"./type\"\n\n/**\n * The 64px icon rail on the left edge. Transparent — it sits directly on\n * the desktop backdrop; fill it with icon buttons.\n */\nexport function ScaffoldSidebar({\n className,\n children,\n ...rest\n}: TScaffoldSidebarProps): React.ReactElement {\n return (\n <nav\n id=\"scaffold-sidebar\"\n aria-label=\"Primary\"\n className={cn(\n \"flex h-full min-w-12 shrink-0 flex-col items-center gap-1 overflow-y-auto pt-10 pb-2\",\n className\n )}\n data-slot=\"scaffold-sidebar\"\n {...rest}\n >\n {children}\n </nav>\n )\n}\n","\"use client\"\n\nimport { useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport { cn } from \"@/lib/utils\"\nimport { SPRING_LAYOUT } from \"@/lib/ease.ts\"\nimport {\n scaffoldPanelHiddenAtom,\n setScaffoldPanelHoveredAtom,\n toggleScaffoldPanelAtom,\n} from \"./scaffold-atom\"\nimport { useScaffoldContext } from \"./scaffold-context\"\nimport type { IScaffoldTabProps } from \"./type\"\nimport { segmentVariants } from \"./utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { LucideAppWindow, LucideEyeOff, LucideX } from \"lucide-react\"\nimport { GlassButtonGroup } from \"@/components/ui/glasscn/glass-button-group.tsx\"\n\n/**\n * A panel's tab inside the action cluster: its label plus a close\n * affordance. Render one per open panel as Actions children, keyed —\n * closes animate out of the pill. Omit `onClose` on the last remaining\n * panel's tab; the canvas keeps at least one panel open.\n *\n * With `panelId` (matching a `Scaffold.Panel`'s `id`), the tab also fronts\n * that panel's visibility: a hidden panel dims its tab behind an eye-off\n * icon, and pressing the label toggles the panel — showing one past\n * capacity hides the least-recently-activated panel in its place.\n */\nexport function ScaffoldTab({\n children,\n panelId,\n onClose,\n closeLabel = \"Close panel\",\n sound = true,\n className,\n ...rest\n}: IScaffoldTabProps): React.ReactElement {\n const { scaffoldId } = useScaffoldContext()\n // The per-panel atom keeps this tab still while its siblings toggle; the\n // empty-key sentinel reads false for a tab without a `panelId`.\n const hidden = useAtomValue(scaffoldPanelHiddenAtom(scaffoldId, panelId ?? \"\"))\n const togglePanel = useSetAtom(toggleScaffoldPanelAtom(scaffoldId))\n const setPanelHovered = useSetAtom(setScaffoldPanelHoveredAtom(scaffoldId))\n const reduce = useReducedMotion()\n const transition = reduce ? { duration: 0 } : SPRING_LAYOUT\n\n // A tab closed mid-hover never fires pointer-leave — release the\n // spotlight it holds so the canvas doesn't stay dimmed.\n React.useEffect(() => {\n if (panelId === undefined) return\n return () => setPanelHovered(panelId, false)\n }, [panelId, setPanelHovered])\n\n return (\n <GlassButtonGroup\n layout\n animate={reduce ? { opacity: 1, width: \"auto\" } : \"visible\"}\n data-slot=\"scaffold-tab\"\n data-panel-hidden={hidden ? \"\" : undefined}\n onPointerEnter={\n panelId !== undefined ? () => setPanelHovered(panelId, true) : undefined\n }\n onPointerLeave={\n panelId !== undefined\n ? () => setPanelHovered(panelId, false)\n : undefined\n }\n exit={reduce ? { opacity: 0, width: 0 } : \"exit\"}\n initial={reduce ? { opacity: 0, width: 0 } : \"hidden\"}\n transition={transition}\n variants={segmentVariants}\n glassVariant=\"subtle\"\n className={cn(\"h-full rounded-sm\", className)}\n {...rest}\n >\n <Button\n aria-pressed={panelId !== undefined ? !hidden : undefined}\n onClick={panelId !== undefined ? () => togglePanel(panelId) : undefined}\n size=\"sm\"\n sound={sound}\n variant=\"ghost\"\n className={cn(\n \"gap-2.5 rounded-sm pl-2\",\n onClose && \"pr-2\",\n hidden && \"text-muted-foreground/70\"\n )}\n >\n {hidden ? <LucideEyeOff size={16} /> : <LucideAppWindow size={16} />}\n {children}\n </Button>\n {onClose && (\n <Button\n aria-label={closeLabel}\n onClick={onClose}\n size=\"icon-sm\"\n sound={sound}\n variant=\"ghost\"\n className=\"self-center rounded-none!\"\n >\n <LucideX size={16} />\n </Button>\n )}\n </GlassButtonGroup>\n )\n}\n","\"use client\"\n\nimport { useEffect, useId, useMemo } from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n removeScaffoldInstance,\n scaffoldInspectorOpenAtom,\n setScaffoldInspectorOpenAtom,\n toggleScaffoldInspectorAtom,\n} from \"./scaffold-atom\"\nimport type { IScaffoldControls, IUseScaffoldOptions } from \"./type\"\n\n/**\n * Owns the scaffold's inspector state for UI living outside the scaffold\n * (title-bar buttons, command palette, shortcuts). Spread the returned\n * `providerProps` onto `Scaffold.Root`; without this hook the root manages\n * the same state internally via `defaultInspectorOpen`.\n *\n * The hook and the root meet in the store: `providerProps` carries a\n * `scaffoldId`, both sides read and write that instance's atoms, and\n * `useScaffoldState` / `useScaffoldActions` reach the same slice from\n * anywhere else by id. Unnamed scaffolds key off `useId` and are dropped on\n * unmount; an explicit `scaffoldId` outlives its component.\n */\nexport function useScaffold({\n scaffoldId: scaffoldIdProp,\n defaultInspectorOpen,\n onInspectorChange,\n}: IUseScaffoldOptions = {}): IScaffoldControls {\n const generatedId = useId()\n const scaffoldId = scaffoldIdProp ?? generatedId\n\n const inspectorOpen = useAtomValue(scaffoldInspectorOpenAtom(scaffoldId))\n const setInspectorOpen = useSetAtom(setScaffoldInspectorOpenAtom(scaffoldId))\n const toggleInspector = useSetAtom(toggleScaffoldInspectorAtom(scaffoldId))\n\n useEffect(() => {\n if (scaffoldIdProp !== undefined) return\n return () => removeScaffoldInstance(scaffoldId)\n }, [scaffoldIdProp, scaffoldId])\n\n const providerProps = useMemo<IScaffoldControls[\"providerProps\"]>(\n () => ({\n scaffoldId,\n defaultInspectorOpen,\n onInspectorOpenChange: onInspectorChange,\n }),\n [scaffoldId, defaultInspectorOpen, onInspectorChange]\n )\n\n return {\n scaffoldId,\n inspectorOpen,\n setInspectorOpen,\n toggleInspector,\n providerProps,\n }\n}\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n resetScaffoldAtom,\n resizeScaffoldInspectorAtom,\n updateScaffoldPanelLayoutAtom,\n scaffoldStateAtom,\n setScaffoldInspectorOpenAtom,\n toggleScaffoldInspectorAtom,\n toggleScaffoldPanelAtom,\n} from \"./scaffold-atom\"\nimport type {\n TScaffoldInstanceId,\n IScaffoldState,\n IScaffoldStateActions,\n} from \"./type\"\n\n/**\n * Read the scaffold registered under `scaffoldId` from anywhere below\n * `ExegiaProvider` — no controller, no props, no provider of its own.\n *\n * ```tsx\n * const { inspectorOpen, hiddenPanelIds } = useScaffoldState(\"workspace\")\n * ```\n *\n * This returns the whole state object, so the caller re-renders on every\n * change, hovers included. A component that reads one field should subscribe\n * to that field's atom instead:\n * `useAtomValue(scaffoldInspectorOpenAtom(\"workspace\"))`.\n */\nexport function useScaffoldState(\n scaffoldId: TScaffoldInstanceId\n): IScaffoldState {\n return useAtomValue(scaffoldStateAtom(scaffoldId))\n}\n\n/**\n * Drive the scaffold registered under `scaffoldId` from anywhere. Writes\n * only — the caller never re-renders when the scaffold changes, so this is\n * what a command palette or a keyboard shortcut should reach for.\n *\n * ```tsx\n * const scaffold = useScaffoldActions(\"workspace\")\n * <Button onClick={scaffold.toggleInspector}>Inspect</Button>\n * ```\n */\nexport function useScaffoldActions(\n scaffoldId: TScaffoldInstanceId\n): IScaffoldStateActions {\n const setInspectorOpen = useSetAtom(setScaffoldInspectorOpenAtom(scaffoldId))\n const toggleInspector = useSetAtom(toggleScaffoldInspectorAtom(scaffoldId))\n const togglePanel = useSetAtom(toggleScaffoldPanelAtom(scaffoldId))\n const updatePanel = useSetAtom(updateScaffoldPanelLayoutAtom(scaffoldId))\n const resizeInspector = useSetAtom(resizeScaffoldInspectorAtom(scaffoldId))\n const reset = useSetAtom(resetScaffoldAtom(scaffoldId))\n\n return useMemo(\n () => ({\n setInspectorOpen,\n toggleInspector,\n togglePanel,\n reset,\n resizeInspector,\n resizePanel: (panelId: string, width: number) =>\n updatePanel(panelId, { width }),\n resizeSecondaryPanel: (panelId: string, secondarySize: number) =>\n updatePanel(panelId, { secondarySize }),\n setSecondaryExpanded: (panelId: string, secondaryExpanded: boolean) =>\n updatePanel(panelId, { secondaryExpanded }),\n setPanelSwapped: (panelId: string, swapped: boolean) =>\n updatePanel(panelId, { swapped }),\n }),\n [\n setInspectorOpen,\n toggleInspector,\n togglePanel,\n reset,\n resizeInspector,\n updatePanel,\n ]\n )\n}\n","import { PanelCloseButton } from \"./panel-close-button\"\nimport { PanelMenuButton } from \"./panel-menu-button.tsx\"\nimport { ScaffoldActions } from \"./scaffold-actions\"\nimport { ScaffoldCanvas } from \"./scaffold-canvas\"\nimport { ScaffoldInspector } from \"./scaffold-inspector\"\nimport { ScaffoldMain } from \"./scaffold-main\"\nimport { ScaffoldPanel } from \"./scaffold-panel\"\nimport { ScaffoldRoot } from \"./scaffold-root\"\nimport { ScaffoldSidebar } from \"./scaffold-sidebar\"\nimport { ScaffoldTab } from \"./scaffold-tab\"\nimport { ScaffoldSubPanel } from \"@/components/blocks/scaffold/scaffold-sub-panel.tsx\"\n\nexport { useScaffoldContext } from \"./scaffold-context\"\nexport { useScaffold } from \"./use-scaffold\"\nexport { useScaffoldActions, useScaffoldState } from \"./use-scaffold-state\"\nexport {\n removeScaffoldInstance,\n resetScaffoldAtom,\n scaffoldHiddenPanelIdsAtom,\n scaffoldHoveredPanelIdAtom,\n scaffoldInspectorOpenAtom,\n scaffoldPanelCapacityAtom,\n scaffoldPanelDimmedAtom,\n scaffoldPanelHiddenAtom,\n scaffoldStateAtom,\n scaffoldPanelLayoutsAtom,\n scaffoldInspectorWidthAtom,\n resizeScaffoldInspectorAtom,\n updateScaffoldPanelLayoutAtom,\n setScaffoldInspectorOpenAtom,\n toggleScaffoldInspectorAtom,\n toggleScaffoldPanelAtom,\n} from \"./scaffold-atom\"\nexport type * from \"./type\"\nexport * from \"./constants\"\n\nexport {\n PanelCloseButton,\n PanelMenuButton,\n ScaffoldActions,\n ScaffoldCanvas,\n ScaffoldInspector,\n ScaffoldMain,\n ScaffoldPanel,\n ScaffoldRoot,\n ScaffoldSidebar,\n ScaffoldTab,\n}\n\nexport const Scaffold = {\n Root: ScaffoldRoot,\n Sidebar: ScaffoldSidebar,\n Main: ScaffoldMain,\n Actions: ScaffoldActions,\n Canvas: ScaffoldCanvas,\n Panel: ScaffoldPanel,\n Tab: ScaffoldTab,\n Inspector: ScaffoldInspector,\n SubPanel: ScaffoldSubPanel,\n}\n","import ShellLayout, {\n AnimatedPanel,\n AnimatedPanelTrigger,\n useShellPanels,\n resetShellPanelWidthAtom,\n resizeShellPanelAtom,\n shellFitFitsAtom,\n shellFitMeasuredAtom,\n shellFitMetricsAtom,\n shellFitPanelBoundsAtom,\n shellFitPanelWidthAtom,\n shellFitRequestedWidthAtom,\n shellFitStateAtom,\n} from \"@/components/blocks/shell\"\n\nconst Layout = {\n Main: ShellLayout,\n Panel: AnimatedPanel,\n Trigger: AnimatedPanelTrigger,\n}\n\nexport {\n useShellPanels,\n resetShellPanelWidthAtom,\n resizeShellPanelAtom,\n shellFitFitsAtom,\n shellFitMeasuredAtom,\n shellFitMetricsAtom,\n shellFitPanelBoundsAtom,\n shellFitPanelWidthAtom,\n shellFitRequestedWidthAtom,\n shellFitStateAtom,\n}\n\nexport default Layout\n","/**\n * Profile card state — Jotai atom families keyed by a card id.\n *\n * Same layout as the tree (`components/composed/tree/tree-atom.ts`) and the\n * avatar (`components/user-avatar/user-avatar-atom.ts`): in-house `keyed()`\n * families per field, write-only action atoms, a composed read-only state\n * atom, and `removeProfileCardInstance` to drop an id from every family.\n */\n\nimport { atom } from \"jotai\"\nimport type { Getter, Setter } from \"jotai\"\n\nimport type {\n IProfileCardAction,\n IProfileCardConfig,\n IProfileCardHandlers,\n TProfileCardInstanceId,\n IProfileCardState,\n TProfileCardVariant,\n} from \"./type\"\n\nconst DEFAULT_CONFIG: IProfileCardConfig = {\n controlsVariant: false,\n controlsMenuOpen: false,\n}\nconst NO_HANDLERS: IProfileCardHandlers = {}\n\n// ── families ───────────────────────────────────────────────────────────────\n\ntype TFamily<AtomType> = ((id: TProfileCardInstanceId) => AtomType) & {\n remove: (id: TProfileCardInstanceId) => void\n}\n\nconst families: { remove: (id: TProfileCardInstanceId) => void }[] = []\n\nfunction keyed<AtomType>(create: (id: TProfileCardInstanceId) => AtomType) {\n const cache = new Map<TProfileCardInstanceId, AtomType>()\n const family = ((id: TProfileCardInstanceId) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id: TProfileCardInstanceId) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n}\n\nfunction stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `profileCard/${id}/${name}`\n return instance\n })\n}\n\nfunction readFamily<Value>(\n name: string,\n read: (get: Getter, id: TProfileCardInstanceId) => Value\n) {\n return keyed((id) => {\n const instance = atom((get) => read(get, id))\n instance.debugLabel = `profileCard/${id}/${name}`\n return instance\n })\n}\n\nfunction actionFamily<Args extends unknown[]>(\n name: string,\n write: (\n get: Getter,\n set: Setter,\n id: TProfileCardInstanceId,\n ...args: Args\n ) => void\n) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) =>\n write(get, set, id, ...args)\n )\n instance.debugLabel = `profileCard/${id}/${name}`\n return instance\n })\n}\n\n// ── primitives ─────────────────────────────────────────────────────────────\n\nexport const profileCardVariantAtom = stateFamily<TProfileCardVariant>(\n \"variant\",\n \"expanded\"\n)\n\nexport const profileCardMenuOpenAtom = stateFamily<boolean>(\"menuOpen\", false)\n\nexport const profileCardPendingActionIdAtom = stateFamily<string | null>(\n \"pendingActionId\",\n null\n)\n\n/** @internal */\nexport const profileCardConfigAtom = stateFamily<IProfileCardConfig>(\n \"config\",\n DEFAULT_CONFIG\n)\n\n/** @internal */\nexport const profileCardHandlersAtom = stateFamily<IProfileCardHandlers>(\n \"handlers\",\n NO_HANDLERS\n)\n\n// ── derived ────────────────────────────────────────────────────────────────\n\nexport const profileCardCollapsedAtom = readFamily(\n \"collapsed\",\n (get, id) => get(profileCardVariantAtom(id)) === \"collapsed\"\n)\n\nexport const profileCardBusyAtom = readFamily(\n \"busy\",\n (get, id) => get(profileCardPendingActionIdAtom(id)) !== null\n)\n\n/** Whole-state read for callers that want the object; the field atoms are\n * cheaper for components that watch one thing. */\nexport const profileCardStateAtom = readFamily<IProfileCardState>(\n \"state\",\n (get, id) => ({\n variant: get(profileCardVariantAtom(id)),\n menuOpen: get(profileCardMenuOpenAtom(id)),\n pendingActionId: get(profileCardPendingActionIdAtom(id)),\n busy: get(profileCardBusyAtom(id)),\n })\n)\n\n// ── actions: variant ───────────────────────────────────────────────────────\n\n/** Reports through `onVariantChange` always; writes the store only when no\n * `variant` prop controls the card — the prop is truth then. */\nexport const setProfileCardVariantAtom = actionFamily<\n [variant: TProfileCardVariant]\n>(\"setVariant\", (get, set, id, variant) => {\n if (get(profileCardVariantAtom(id)) === variant) return\n if (!get(profileCardConfigAtom(id)).controlsVariant)\n set(profileCardVariantAtom(id), variant)\n get(profileCardHandlersAtom(id)).onVariantChange?.(variant)\n})\n\nexport const toggleProfileCardVariantAtom = actionFamily<[]>(\n \"toggleVariant\",\n (get, set, id) => {\n set(\n setProfileCardVariantAtom(id),\n get(profileCardVariantAtom(id)) === \"collapsed\" ? \"expanded\" : \"collapsed\"\n )\n }\n)\n\n// ── actions: menu ──────────────────────────────────────────────────────────\n\n/** Inert while an `open` prop controls the menu. */\nexport const setProfileCardMenuOpenAtom = actionFamily<[open: boolean]>(\n \"setMenuOpen\",\n (get, set, id, open) => {\n if (get(profileCardConfigAtom(id)).controlsMenuOpen) return\n set(profileCardMenuOpenAtom(id), open)\n }\n)\n\n// ── actions: selection ─────────────────────────────────────────────────────\n\n/**\n * Run an action's `onSelect`. A returned promise marks the card busy until it\n * settles; a rejection goes to `onError` and the card leaves its busy state\n * either way. Because the pending id is a store value, it survives the card\n * unmounting mid-flight (sign-out typically unmounts it) — the settle just\n * writes to an instance nobody renders any more.\n */\nexport const selectProfileCardActionAtom = actionFamily<\n [action: IProfileCardAction]\n>(\"selectAction\", (get, set, id, action) => {\n const result = action.onSelect?.()\n if (!(result instanceof Promise)) return\n set(profileCardPendingActionIdAtom(id), action.id)\n result\n .catch((cause: unknown) => get(profileCardHandlersAtom(id)).onError?.(cause))\n .finally(() => {\n // Only clear our own flight — a later action may have taken over.\n if (get(profileCardPendingActionIdAtom(id)) === action.id)\n set(profileCardPendingActionIdAtom(id), null)\n })\n})\n\n// ── internal projections ───────────────────────────────────────────────────\n\n/** @internal Projection of the mounted component's controlled props. */\nexport const projectProfileCardPropsAtom = actionFamily<\n [\n config: IProfileCardConfig,\n variant: TProfileCardVariant | undefined,\n menuOpen: boolean | undefined,\n ]\n>(\"projectProps\", (_get, set, id, config, variant, menuOpen) => {\n set(profileCardConfigAtom(id), config)\n if (config.controlsVariant && variant !== undefined)\n set(profileCardVariantAtom(id), variant)\n if (config.controlsMenuOpen && menuOpen !== undefined)\n set(profileCardMenuOpenAtom(id), menuOpen)\n})\n\n/** @internal */\nexport const setProfileCardHandlersAtom = actionFamily<\n [handlers: IProfileCardHandlers]\n>(\"setHandlers\", (_get, set, id, handlers) => {\n set(profileCardHandlersAtom(id), handlers)\n})\n\n/** @internal Seed the uncontrolled variant on mount without firing\n * `onVariantChange`. */\nexport const seedProfileCardVariantAtom = actionFamily<\n [variant: TProfileCardVariant]\n>(\"seedVariant\", (_get, set, id, variant) => {\n set(profileCardVariantAtom(id), variant)\n})\n\n// ── reset ──────────────────────────────────────────────────────────────────\n\nexport const resetProfileCardAtom = actionFamily<[]>(\n \"reset\",\n (_get, set, id) => {\n set(profileCardVariantAtom(id), \"expanded\")\n set(profileCardMenuOpenAtom(id), false)\n set(profileCardPendingActionIdAtom(id), null)\n set(profileCardConfigAtom(id), DEFAULT_CONFIG)\n set(profileCardHandlersAtom(id), NO_HANDLERS)\n }\n)\n\n/** Forget a card entirely — every family drops the key so the store can\n * release its state. Call on teardown of a named instance. */\nexport function removeProfileCardInstance(id: TProfileCardInstanceId): void {\n for (const family of families) family.remove(id)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n profileCardBusyAtom,\n profileCardMenuOpenAtom,\n profileCardVariantAtom,\n projectProfileCardPropsAtom,\n removeProfileCardInstance,\n seedProfileCardVariantAtom,\n selectProfileCardActionAtom,\n setProfileCardHandlersAtom,\n setProfileCardMenuOpenAtom,\n} from \"./profile-card-atom\"\nimport type {\n IProfileCardAction,\n IProfileCardConfig,\n IProfileCardHandlers,\n TProfileCardInstanceId,\n TProfileCardVariant,\n} from \"./type\"\n\nexport interface IUseProfileCardOptions {\n profileCardId?: TProfileCardInstanceId\n /** Controlled fold. `undefined` leaves the store (and `defaultVariant`) in charge. */\n variant?: TProfileCardVariant\n defaultVariant?: TProfileCardVariant\n onVariantChange?: (variant: TProfileCardVariant) => void\n /** Controlled menu. */\n open?: boolean\n defaultOpen?: boolean\n onError?: (error: unknown) => void\n}\n\nexport interface IProfileCardBinding {\n profileCardId: TProfileCardInstanceId\n variant: TProfileCardVariant\n collapsed: boolean\n menuOpen: boolean\n busy: boolean\n /** Hand to the menu's `onOpenChange` (first argument). Stable. */\n setMenuOpen: (open: boolean) => void\n /** Run an action: `onSelect`, promise → busy, rejection → `onError`. Stable. */\n select: (action: IProfileCardAction) => void\n}\n\n/**\n * Binds one profile card to its slice of the store: projects the controlled\n * `variant` / `open` props (one-way, with write gates so the store never\n * overwrites a prop), publishes the latest handlers, and returns the values\n * the component renders from.\n *\n * Unnamed cards key off `useId` and are dropped on unmount; a named\n * `profileCardId` outlives its component, so a fold set from elsewhere\n * (`useProfileCardActions(id).collapse()`) survives a route change.\n */\nexport function useProfileCard(\n options: IUseProfileCardOptions\n): IProfileCardBinding {\n const {\n variant: variantProp,\n defaultVariant = \"expanded\",\n onVariantChange,\n open: openProp,\n onError,\n } = options\n const generatedId = React.useId()\n const profileCardId = options.profileCardId ?? generatedId\n\n const controlsVariant = variantProp !== undefined\n const controlsMenuOpen = openProp !== undefined\n const config = React.useMemo<IProfileCardConfig>(\n () => ({ controlsVariant, controlsMenuOpen }),\n [controlsVariant, controlsMenuOpen]\n )\n const handlers = React.useMemo<IProfileCardHandlers>(\n () => ({ onVariantChange, onError }),\n [onVariantChange, onError]\n )\n\n const project = useSetAtom(projectProfileCardPropsAtom(profileCardId))\n const publishHandlers = useSetAtom(setProfileCardHandlersAtom(profileCardId))\n const seedVariant = useSetAtom(seedProfileCardVariantAtom(profileCardId))\n const setMenuOpen = useSetAtom(setProfileCardMenuOpenAtom(profileCardId))\n const select = useSetAtom(selectProfileCardActionAtom(profileCardId))\n\n // Reads BEFORE the write effects, and the writes in passive effects: jotai\n // (v3) subscribes `useAtomValue` in its own `useEffect` with no\n // post-subscription recheck, so a write from a `useLayoutEffect` (or from\n // any effect declared before the reads) lands before the subscription\n // exists and the card never re-renders with the seeded state.\n const variant = useAtomValue(profileCardVariantAtom(profileCardId))\n const menuOpen = useAtomValue(profileCardMenuOpenAtom(profileCardId))\n const busy = useAtomValue(profileCardBusyAtom(profileCardId))\n\n // Seed the uncontrolled fold once per mount, before the projection — the\n // `default*` options describe the mount, not every render. Primitive deps,\n // so no loop guard is needed.\n const [seed] = React.useState(() => ({\n variant: variantProp ?? defaultVariant,\n open: openProp ?? options.defaultOpen ?? false,\n }))\n React.useEffect(() => {\n if (!controlsVariant) seedVariant(seed.variant)\n if (!controlsMenuOpen) setMenuOpen(seed.open)\n // Mount-time seed only.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n React.useEffect(() => {\n project(config, variantProp, openProp)\n }, [project, config, variantProp, openProp])\n React.useEffect(() => {\n publishHandlers(handlers)\n }, [publishHandlers, handlers])\n\n React.useEffect(() => {\n if (options.profileCardId !== undefined) return\n return () => removeProfileCardInstance(profileCardId)\n }, [options.profileCardId, profileCardId])\n\n return {\n profileCardId,\n variant,\n collapsed: variant === \"collapsed\",\n menuOpen,\n busy,\n setMenuOpen,\n select,\n }\n}\n","\"use client\"\n\nimport {\n ChevronsUpDownIcon,\n LogOutIcon,\n SettingsIcon,\n UserIcon,\n UserPlusIcon,\n UsersIcon,\n} from \"lucide-react\"\nimport { motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\n\nimport {\n AnimatedSidebarPanelContext,\n LABEL_ENTER_TRANSITION,\n LABEL_EXIT_TRANSITION,\n REDUCED_TRANSITION,\n} from \"@/components/blocks/shell/utils\"\nimport { Avatar } from \"@/components/atoms/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n type MenuPrimitive,\n} from \"@/components/ui/menu\"\nimport { playCue } from \"@/lib/sound\"\nimport { cn } from \"@/lib/utils\"\n\nimport { useProfileCard } from \"./use-profile-card\"\nimport type {\n IProfileCardAction,\n TProfileCardItem,\n IProfileCardUser,\n TProfileCardVariant,\n} from \"./type\"\n\nexport type {\n IProfileCardAction,\n IProfileCardActions,\n TProfileCardInstanceId,\n TProfileCardItem,\n IProfileCardLabel,\n IProfileCardSeparator,\n IProfileCardState,\n IProfileCardUser,\n TProfileCardVariant,\n} from \"./type\"\n\n/**\n * The menu the card ships with. Spread it to keep the shape and attach your\n * own handlers, or ignore it and pass `items` of your own.\n */\nexport const defaultProfileCardItems: TProfileCardItem[] = [\n { type: \"label\", label: \"Management\" },\n { id: \"profile\", label: \"Profile\", icon: <UserIcon aria-hidden=\"true\" /> },\n {\n id: \"settings\",\n label: \"Settings\",\n icon: <SettingsIcon aria-hidden=\"true\" />,\n },\n { type: \"separator\" },\n { id: \"teams\", label: \"Teams\", icon: <UsersIcon aria-hidden=\"true\" /> },\n { id: \"invite\", label: \"Invite\", icon: <UserPlusIcon aria-hidden=\"true\" /> },\n { type: \"separator\" },\n {\n id: \"sign-out\",\n label: \"Log out\",\n icon: <LogOutIcon aria-hidden=\"true\" />,\n variant: \"destructive\",\n },\n]\n\ntype TPopupProps = React.ComponentProps<typeof DropdownMenuContent>\n\nexport interface IProfileCardBlockProps {\n user: IProfileCardUser\n /**\n * The menu, flat: actions plus `{ type: \"separator\" }` / `{ type: \"label\" }`\n * entries. Defaults to `defaultProfileCardItems` (no handlers attached).\n */\n items?: TProfileCardItem[]\n /** Menu placement relative to the card. */\n align?: TPopupProps[\"align\"]\n side?: TPopupProps[\"side\"]\n sideOffset?: TPopupProps[\"sideOffset\"]\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: MenuPrimitive.Root.Props[\"onOpenChange\"]\n /**\n * \"content\" sizes the menu to its items; \"card\" locks it to the trigger's\n * width, so `align` stops mattering horizontally.\n */\n menuWidth?: \"content\" | \"card\"\n /**\n * `expanded` shows avatar, name and handle; `collapsed` folds the card to\n * its avatar — for an icon-collapsed sidebar rail. The fold animates: the\n * identity lines and chevron slide to zero width, the avatar stays put.\n * Controlled when passed. Left unset, the card follows the `AnimatedPanel`\n * it sits in (a panel footer folds with the rail on its own), and\n * outside a panel starts from `defaultVariant`.\n */\n variant?: TProfileCardVariant\n defaultVariant?: TProfileCardVariant\n onVariantChange?: (variant: TProfileCardVariant) => void\n /**\n * Name this card's slice of the store so `useProfileCardState(id)` /\n * `useProfileCardActions(id)` can read or drive it (fold it, open its\n * menu) from anywhere under `ExegiaProvider`. Unnamed cards key off\n * `useId` and are dropped on unmount.\n */\n profileCardId?: string\n /** Presence badge on the avatar — overrides `user.presence`. */\n presence?: IProfileCardUser[\"presence\"]\n /**\n * Emit cuelume press/release on the card and play the open/close cues.\n * Inert unless the app opts into interaction sound via `bindSounds()`.\n */\n sound?: boolean\n /** Called when an action's promise rejects — the card leaves its loading state either way. */\n onError?: (error: unknown) => void\n className?: string\n}\n\n/** Split a flat item list into the groups the menu renders. */\nfunction toGroups(\n items: TProfileCardItem[]\n): { label?: string; actions: IProfileCardAction[] }[] {\n const groups: { label?: string; actions: IProfileCardAction[] }[] = []\n let current: { label?: string; actions: IProfileCardAction[] } = {\n actions: [],\n }\n\n for (const item of items) {\n if (item.type === \"separator\") {\n groups.push(current)\n current = { actions: [] }\n } else if (item.type === \"label\") {\n current.label = item.label\n } else {\n current.actions.push(item)\n }\n }\n groups.push(current)\n\n return groups.filter(\n (group) => group.actions.length > 0 || group.label !== undefined\n )\n}\n\n/**\n * Avatar card that opens an account menu.\n *\n * The trigger is the rich identity chip (avatar + name over handle) and the\n * popup is a plain action menu. `items` is the whole menu — a flat list of\n * actions, separators and labels — defaulting to `defaultProfileCardItems`.\n */\nexport function ProfileCardBlock({\n user,\n items = defaultProfileCardItems,\n align = \"center\",\n side = \"bottom\",\n sideOffset = 8,\n menuWidth = \"content\",\n variant: variantProp,\n defaultVariant,\n onVariantChange,\n profileCardId,\n presence,\n open,\n defaultOpen,\n onOpenChange,\n sound = true,\n onError,\n className,\n}: IProfileCardBlockProps): React.ReactElement {\n const groups = React.useMemo(() => toGroups(items), [items])\n\n // Optional, not required: the card is a standalone block that also lands\n // in sidebar footers, so it reads the panel context when there is one and\n // does not throw when there is not. Inside a panel the rail is the truth\n // for the fold, so it is projected as a controlled variant.\n const panel = React.useContext(AnimatedSidebarPanelContext)\n const card = useProfileCard({\n profileCardId,\n variant:\n variantProp ??\n (panel ? (panel.collapsed ? \"collapsed\" : \"expanded\") : undefined),\n defaultVariant,\n onVariantChange,\n open,\n defaultOpen,\n onError,\n })\n const { collapsed, busy, menuOpen, setMenuOpen, select } = card\n const reduce = useReducedMotion()\n const identity = `${user.name}${user.username ? ` ${user.username}` : \"\"}`\n\n const handleOpenChange: MenuPrimitive.Root.Props[\"onOpenChange\"] = (\n nextOpen,\n details\n ) => {\n if (sound) playCue(nextOpen ? \"bloom\" : \"droplet\")\n setMenuOpen(nextOpen)\n onOpenChange?.(nextOpen, details)\n }\n\n return (\n // The store mirrors the menu: `open` (when passed) is projected into it,\n // and this always renders from it, so `useProfileCardActions(id).openMenu()`\n // works the same whether or not the consumer controls the prop.\n <DropdownMenu onOpenChange={handleOpenChange} open={menuOpen}>\n <DropdownMenuTrigger\n disabled={busy}\n render={\n <Button\n // Spelled out rather than left to the name-from-contents rule: the\n // avatar sits inside the button and the handle is a second line.\n aria-label={`${identity}, account menu`}\n className={cn(\n // Quiet at rest — the background only surfaces on hover or\n // while the menu is open.\n \"h-auto w-full justify-between py-1.5 pl-1.5 data-popup-open:bg-accent sm:h-auto\",\n // Folded: a full-width h-10 row matching the tree rail's tiles,\n // avatar centred — a fixed-width tile drifted off the rail's\n // centre line whenever the collapsed panel was wider than it.\n // The label spans below fold to zero width rather than\n // unmounting so the change animates. Button's own gap-2 stays:\n // its always-mounted loading slot carries a -ms-2 that cancels\n // it, so zeroing the gap would pull the avatar 8px left; the\n // folded chevron cancels its own gap instead (see below).\n // `sm:h-10` because the base carries an `sm:h-auto` that an\n // unprefixed height would not beat.\n collapsed &&\n \"h-10 w-full shrink-0 justify-center rounded-md p-0 sm:h-10\",\n className\n )}\n data-collapsed={collapsed ? \"\" : undefined}\n data-slot=\"profile-card\"\n data-variant={collapsed ? \"collapsed\" : \"expanded\"}\n loading={busy}\n sound={sound}\n // The visible name is gone while folded — name the tile on hover\n // the way the rail's menu buttons do.\n title={collapsed ? identity : undefined}\n variant=\"ghost\"\n >\n <span\n className={cn(\n \"flex min-w-0 items-center justify-start\",\n collapsed ? \"w-auto gap-0\" : \"w-full gap-2\"\n )}\n >\n <Avatar\n size=\"default\"\n user={{\n // The atoms avatar derives initials from first + last name;\n // explicit `user.initials` win by standing in for the pair.\n firstName: user.initials?.[0] ?? user.name.split(/\\s+/)[0],\n lastName:\n user.initials?.[1] ??\n user.name.split(/\\s+/).slice(1).at(-1),\n avatarUrl: user.avatar,\n status: presence ?? user.presence,\n }}\n />\n <motion.span\n animate={{\n width: collapsed ? 0 : \"auto\",\n opacity: collapsed ? 0 : 1,\n x: collapsed ? -4 : 0,\n }}\n aria-hidden={collapsed || undefined}\n className={cn(\n \"flex min-w-0 flex-col overflow-hidden text-left whitespace-nowrap\",\n collapsed && \"pointer-events-none\"\n )}\n data-slot=\"profile-card-identity\"\n initial={false}\n transition={\n reduce\n ? REDUCED_TRANSITION\n : collapsed\n ? LABEL_EXIT_TRANSITION\n : LABEL_ENTER_TRANSITION\n }\n >\n <span className=\"truncate font-medium\">{user.name}</span>\n {user.username ? (\n <span className=\"truncate text-xs font-normal text-muted-foreground\">\n {user.username}\n </span>\n ) : null}\n </motion.span>\n </span>\n <motion.span\n animate={{\n width: collapsed ? 0 : \"auto\",\n opacity: collapsed ? 0 : 1,\n x: collapsed ? 4 : 0,\n }}\n aria-hidden=\"true\"\n className={cn(\n \"flex shrink-0 items-center overflow-hidden\",\n // 0px wide while folded, but the flex gap before it would\n // still offset the avatar — pull it back by that gap.\n collapsed && \"-ml-2\"\n )}\n initial={false}\n transition={\n reduce\n ? REDUCED_TRANSITION\n : collapsed\n ? LABEL_EXIT_TRANSITION\n : LABEL_ENTER_TRANSITION\n }\n >\n <ChevronsUpDownIcon aria-hidden=\"true\" className=\"size-3.5\" />\n </motion.span>\n </Button>\n }\n />\n <DropdownMenuContent\n align={align}\n // Content-width by default so `align` reads: a popup locked to\n // `--anchor-width` lands in the same place for every value. `!`\n // because the popup's own `not-[class*='w-']:min-w-32` compiles to\n // a higher-specificity `:not(:is())` that would otherwise win.\n className={cn(\n menuWidth === \"card\" ? \"w-(--anchor-width)\" : \"min-w-44!\",\n \"origin-(--transform-origin) transition-[opacity,scale,translate] duration-150 ease-smooth-out data-ending-style:scale-98 data-ending-style:opacity-0 data-ending-style:duration-100 data-starting-style:scale-98 data-starting-style:opacity-0 data-[side=bottom]:data-ending-style:-translate-y-1 data-[side=bottom]:data-starting-style:-translate-y-1 data-[side=top]:data-ending-style:translate-y-1 data-[side=top]:data-starting-style:translate-y-1 motion-reduce:transition-none\"\n )}\n side={side}\n sideOffset={sideOffset}\n >\n {groups.map((group, index) => (\n <React.Fragment key={group.label ?? `group-${group.actions[0]?.id}`}>\n {index > 0 ? <DropdownMenuSeparator /> : null}\n <DropdownMenuGroup>\n {group.label ? (\n <DropdownMenuLabel>{group.label}</DropdownMenuLabel>\n ) : null}\n {group.actions.map((item) => (\n <DropdownMenuItem\n disabled={item.disabled}\n key={item.id}\n onClick={() => select(item)}\n variant={item.variant}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.shortcut ? (\n <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>\n ) : null}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </React.Fragment>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useAtomValue, useSetAtom } from \"jotai\"\n\nimport {\n profileCardStateAtom,\n resetProfileCardAtom,\n setProfileCardMenuOpenAtom,\n setProfileCardVariantAtom,\n toggleProfileCardVariantAtom,\n} from \"./profile-card-atom\"\nimport type {\n IProfileCardActions,\n TProfileCardInstanceId,\n IProfileCardState,\n} from \"./type\"\n\n/**\n * Read the card registered under `profileCardId` from anywhere below\n * `ExegiaProvider` — no props, no ref, no provider of its own.\n *\n * ```tsx\n * const { variant, busy } = useProfileCardState(\"account\")\n * ```\n *\n * Returns the whole state object, so the caller re-renders on any change. A\n * component that watches one field should subscribe to that atom instead:\n * `useAtomValue(profileCardVariantAtom(\"account\"))`.\n */\nexport function useProfileCardState(\n profileCardId: TProfileCardInstanceId\n): IProfileCardState {\n return useAtomValue(profileCardStateAtom(profileCardId))\n}\n\n/**\n * Write-only handles onto the card registered under `profileCardId`. Nothing\n * here subscribes, so a rail toggle can fold the card without re-rendering\n * when the card changes.\n *\n * ```tsx\n * const { collapse, expand } = useProfileCardActions(\"account\")\n * ```\n */\nexport function useProfileCardActions(\n profileCardId: TProfileCardInstanceId\n): IProfileCardActions {\n const setVariant = useSetAtom(setProfileCardVariantAtom(profileCardId))\n const toggleVariant = useSetAtom(toggleProfileCardVariantAtom(profileCardId))\n const setMenuOpen = useSetAtom(setProfileCardMenuOpenAtom(profileCardId))\n const reset = useSetAtom(resetProfileCardAtom(profileCardId))\n\n return React.useMemo(\n () => ({\n setVariant,\n toggleVariant,\n collapse: () => setVariant(\"collapsed\"),\n expand: () => setVariant(\"expanded\"),\n setMenuOpen,\n openMenu: () => setMenuOpen(true),\n closeMenu: () => setMenuOpen(false),\n reset,\n }),\n [setVariant, toggleVariant, setMenuOpen, reset]\n )\n}\n","\"use client\";\n\nimport {\n AnimatePresence,\n type HTMLMotionProps,\n motion,\n useReducedMotion,\n type Variants,\n} from \"motion/react\";\nimport {\n Children,\n cloneElement,\n forwardRef,\n type HTMLAttributes,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n useId,\n useState,\n} from \"react\";\nimport { SPRING_LAYOUT } from \"@/lib/ease\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ISharedLayoutBgProps\n extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n children: ReactNode;\n /** Semantic container used for the children. */\n as?: \"div\" | \"ul\";\n /** Tailwind class applied to the moving pill. Defaults to a subtle foreground tint. */\n pillClassName?: string;\n /** Horizontal inset of the pill relative to each row (px). Default 20. */\n inset?: number;\n /** Optional positioning override for the pill wrapper inside each item. */\n pillContainerClassName?: string;\n}\n\nconst variants: Variants = {\n initial: { opacity: 0, filter: \"blur(6px)\" },\n animate: { opacity: 1, filter: \"blur(0px)\" },\n exit: (isActive: boolean) =>\n !isActive ? { opacity: 0, filter: \"blur(6px)\" } : {},\n};\n\nconst reducedVariants: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: (isActive: boolean) => (!isActive ? { opacity: 0 } : {}),\n};\n\nexport const SharedLayoutBg = forwardRef<HTMLElement, ISharedLayoutBgProps>(\n function SharedLayoutBg(\n {\n children,\n as = \"div\",\n className,\n onMouseLeave,\n pillClassName,\n pillContainerClassName,\n inset = 20,\n ...props\n },\n forwardedRef,\n ) {\n const [activeId, setActiveId] = useState<string | null>(null);\n const uid = useId();\n const reduce = useReducedMotion();\n\n const renderedChildren = Children.toArray(children)\n .filter(isValidElement)\n .map((child, index) => {\n const el = child as ReactElement<{\n className?: string;\n onMouseEnter?: () => void;\n children?: ReactNode;\n }>;\n const childKey = el.key ? String(el.key) : `item-${index}`;\n return cloneElement(\n el,\n {\n key: childKey,\n className: cn(\"relative\", el.props.className),\n onMouseEnter: () => {\n el.props.onMouseEnter?.();\n setActiveId(childKey);\n },\n },\n <>\n <AnimatePresence custom={activeId !== null}>\n {activeId !== null ? (\n <motion.div\n variants={reduce ? reducedVariants : variants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n custom={activeId !== null}\n className={cn(\n \"pointer-events-none absolute inset-y-0\",\n pillContainerClassName,\n )}\n style={{ left: -inset, right: -inset }}\n >\n {activeId === childKey ? (\n <motion.div\n layoutId={`shared-bg-${uid}`}\n transition={reduce ? { duration: 0 } : SPRING_LAYOUT}\n className={cn(\n \"pointer-events-none h-full w-full rounded-2xl bg-primary/[0.06]\",\n pillClassName,\n )}\n />\n ) : null}\n </motion.div>\n ) : null}\n </AnimatePresence>\n <div className=\"relative z-10\">{el.props.children}</div>\n </>,\n );\n });\n\n const handleMouseLeave = (event: MouseEvent<HTMLElement>) => {\n setActiveId(null);\n onMouseLeave?.(event);\n };\n\n // layoutRoot scopes the pill's layout projection to this list, so fixed or\n // scrolled ancestors can't smear scroll offsets into its movement.\n return as === \"ul\" ? (\n <motion.ul\n {...(props as HTMLMotionProps<\"ul\">)}\n ref={forwardedRef as Ref<HTMLUListElement>}\n layoutRoot\n onMouseLeave={handleMouseLeave}\n className={cn(\"flex w-full flex-col\", className)}\n >\n {renderedChildren}\n </motion.ul>\n ) : (\n <motion.div\n {...(props as HTMLMotionProps<\"div\">)}\n ref={forwardedRef as Ref<HTMLDivElement>}\n layoutRoot\n onMouseLeave={handleMouseLeave}\n className={cn(\"flex w-full flex-col\", className)}\n >\n {renderedChildren}\n </motion.div>\n );\n },\n);\n","/* eslint-disable react-refresh/only-export-components */\nimport * as React from \"react\"\n\ntype TTheme = \"dark\" | \"light\" | \"system\"\ntype TResolvedTheme = \"dark\" | \"light\"\n\ntype TThemeProviderProps = {\n children: React.ReactNode\n defaultTheme?: TTheme\n storageKey?: string\n disableTransitionOnChange?: boolean\n}\n\ntype TThemeProviderState = {\n theme: TTheme\n setTheme: (theme: TTheme) => void\n}\n\nconst COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\"\nconst THEME_VALUES: TTheme[] = [\"dark\", \"light\", \"system\"]\n\nconst ThemeProviderContext = React.createContext<\n TThemeProviderState | undefined\n>(undefined)\n\nfunction isTheme(value: string | null): value is TTheme {\n if (value === null) {\n return false\n }\n\n return THEME_VALUES.includes(value as TTheme)\n}\n\nfunction getSystemTheme(): TResolvedTheme {\n if (window.matchMedia(COLOR_SCHEME_QUERY).matches) {\n return \"dark\"\n }\n\n return \"light\"\n}\n\nfunction disableTransitionsTemporarily() {\n const style = document.createElement(\"style\")\n style.appendChild(\n document.createTextNode(\n \"*,*::before,*::after{-webkit-transition:none!important;transition:none!important}\"\n )\n )\n document.head.appendChild(style)\n\n return () => {\n window.getComputedStyle(document.body)\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n style.remove()\n })\n })\n }\n}\n\nfunction isEditableTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return false\n }\n\n if (target.isContentEditable) {\n return true\n }\n\n const editableParent = target.closest(\n \"input, textarea, select, [contenteditable='true']\"\n )\n if (editableParent) {\n return true\n }\n\n return false\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme = \"system\",\n storageKey = \"theme\",\n disableTransitionOnChange = true,\n ...props\n}: TThemeProviderProps) {\n const [theme, setThemeState] = React.useState<TTheme>(() => {\n const storedTheme = localStorage.getItem(storageKey)\n if (isTheme(storedTheme)) {\n return storedTheme\n }\n\n return defaultTheme\n })\n\n const setTheme = React.useCallback(\n (nextTheme: TTheme) => {\n localStorage.setItem(storageKey, nextTheme)\n setThemeState(nextTheme)\n },\n [storageKey]\n )\n\n const applyTheme = React.useCallback(\n (nextTheme: TTheme) => {\n const root = document.documentElement\n const resolvedTheme =\n nextTheme === \"system\" ? getSystemTheme() : nextTheme\n const restoreTransitions = disableTransitionOnChange\n ? disableTransitionsTemporarily()\n : null\n\n root.classList.remove(\"light\", \"dark\")\n root.classList.add(resolvedTheme)\n\n if (restoreTransitions) {\n restoreTransitions()\n }\n },\n [disableTransitionOnChange]\n )\n\n React.useEffect(() => {\n applyTheme(theme)\n\n if (theme !== \"system\") {\n return undefined\n }\n\n const mediaQuery = window.matchMedia(COLOR_SCHEME_QUERY)\n const handleChange = () => {\n applyTheme(\"system\")\n }\n\n mediaQuery.addEventListener(\"change\", handleChange)\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handleChange)\n }\n }, [theme, applyTheme])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.repeat) {\n return\n }\n\n if (event.metaKey || event.ctrlKey || event.altKey) {\n return\n }\n\n if (isEditableTarget(event.target)) {\n return\n }\n\n if (event.key.toLowerCase() !== \"d\") {\n return\n }\n\n setThemeState((currentTheme) => {\n const nextTheme =\n currentTheme === \"dark\"\n ? \"light\"\n : currentTheme === \"light\"\n ? \"dark\"\n : getSystemTheme() === \"dark\"\n ? \"light\"\n : \"dark\"\n\n localStorage.setItem(storageKey, nextTheme)\n return nextTheme\n })\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [storageKey])\n\n React.useEffect(() => {\n const handleStorageChange = (event: StorageEvent) => {\n if (event.storageArea !== localStorage) {\n return\n }\n\n if (event.key !== storageKey) {\n return\n }\n\n if (isTheme(event.newValue)) {\n setThemeState(event.newValue)\n return\n }\n\n setThemeState(defaultTheme)\n }\n\n window.addEventListener(\"storage\", handleStorageChange)\n\n return () => {\n window.removeEventListener(\"storage\", handleStorageChange)\n }\n }, [defaultTheme, storageKey])\n\n const value = React.useMemo(\n () => ({\n theme,\n setTheme,\n }),\n [theme, setTheme]\n )\n\n return (\n <ThemeProviderContext.Provider {...props} value={value}>\n {children}\n </ThemeProviderContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const context = React.useContext(ThemeProviderContext)\n\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\")\n }\n\n return context\n}\n","import { createStore } from \"jotai\"\n\n/** A Jotai store as created by `createStore()`. */\nexport type TExegiaStore = ReturnType<typeof createStore>\n\n/**\n * The library's default store — the one `ExegiaProvider` mounts unless it is\n * handed another. Exported so non-React code (a router guard, a command\n * palette, a test) can read and write library state imperatively:\n *\n * ```ts\n * exegiaStore.get(treeExpandedIdsAtom(\"app-nav\"))\n * ```\n *\n * A single module-level store is wrong for SSR — state would leak between\n * requests — so render-per-request apps pass a fresh `createStore()` to\n * `ExegiaProvider` instead.\n */\nexport const exegiaStore: TExegiaStore = createStore()\n","\"use client\"\n\n/* eslint-disable react-refresh/only-export-components */\n/**\n * The library's one and only state provider.\n *\n * Mount it once at the app root. Every library state hook then works\n * anywhere below it — there are no per-component providers to nest.\n *\n * One provider suffices because library state lives in module-level Jotai\n * atom families keyed by an instance id, not in a context created per\n * component. A new stateful component adds atoms to that module scope; it\n * never adds a provider. Consumer code therefore stays exactly as it is as\n * the library grows.\n *\n * Without this provider the hooks still run, which is the trap: Jotai falls\n * back to its implicit default store, and that store is NOT `exegiaStore`,\n * so imperative access would read a different store than the one the\n * components render from. Mount the provider.\n *\n * ```tsx\n * export function App() {\n * return (\n * <ExegiaProvider sound>\n * <Routes />\n * </ExegiaProvider>\n * )\n * }\n * ```\n */\nimport * as React from \"react\"\nimport { Provider, useStore } from \"jotai\"\n\nimport { ThemeProvider } from \"@/components/theme-provider\"\nimport { ToastProvider } from \"@/components/ui/toast\"\nimport { bindSounds } from \"@/lib/sound\"\nimport { exegiaStore } from \"./store\"\nimport type { TExegiaStore } from \"./store\"\n\n/** Options forwarded to the library's `ThemeProvider`. */\nexport interface IExegiaThemeOptions {\n defaultTheme?: \"dark\" | \"light\" | \"system\"\n storageKey?: string\n disableTransitionOnChange?: boolean\n}\n\nexport interface IExegiaProviderProps {\n children: React.ReactNode\n /** Store to mount. Defaults to the library's `exegiaStore`. */\n store?: TExegiaStore\n /** Opt into interaction sound. Off unless the app asks for it. */\n sound?: boolean\n /** Mount `ThemeProvider` with these options. Omit it and none is mounted —\n * it reads `localStorage` in its state initializer, so an unconditional\n * mount would break SSR consumers, and `useTheme` already throws without\n * one. */\n theme?: IExegiaThemeOptions\n}\n\nexport function ExegiaProvider({\n children,\n store,\n sound = false,\n theme,\n}: IExegiaProviderProps): React.ReactElement {\n React.useEffect(() => {\n // Idempotent, and deliberately not at module scope: opting into sound is\n // the consuming app's decision, not an import side effect.\n if (sound) bindSounds()\n }, [sound])\n\n // Toasts ride on the same single mount: components call `toastManager.add`\n // and it renders here, so consumers never nest a second provider.\n const content = <ToastProvider>{children}</ToastProvider>\n return (\n <Provider store={store ?? exegiaStore}>\n {theme ? <ThemeProvider {...theme}>{content}</ThemeProvider> : content}\n </Provider>\n )\n}\n\n/** The store mounted by the nearest `ExegiaProvider` above the caller. */\nexport const useExegiaStore = useStore\n","\"use client\"\n\nimport { useEffect, useState } from \"react\"\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n svg: \"image/svg+xml\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mov: \"video/quicktime\",\n mp3: \"audio/mpeg\",\n m4a: \"audio/mp4\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\",\n pdf: \"application/pdf\",\n txt: \"text/plain\",\n md: \"text/markdown\",\n csv: \"text/csv\",\n json: \"application/json\",\n xml: \"text/xml\",\n}\n\nexport function attachmentMimeType(file: File): string {\n return file.type && file.type !== \"application/octet-stream\"\n ? file.type\n : (MIME_BY_EXTENSION[file.name.split(\".\").pop()?.toLowerCase() ?? \"\"] ??\n file.type)\n}\n\nexport function attachmentFileKind(\n file: File\n):\n { kind: \"image\" } | { kind: \"media\"; audio: boolean } | { kind: \"document\" } {\n const mime = attachmentMimeType(file)\n if (mime.startsWith(\"image/\")) return { kind: \"image\" }\n if (mime.startsWith(\"video/\") || mime.startsWith(\"audio/\"))\n return { kind: \"media\", audio: mime.startsWith(\"audio/\") }\n return { kind: \"document\" }\n}\n\ninterface FilePreview {\n file: File\n url?: string\n text?: string\n}\n\n/** Each mounted attachment owns its URL, so clearing the tray cannot break a sent preview. */\nexport function useAttachmentFile(file?: File) {\n const [preview, setPreview] = useState<FilePreview>()\n useEffect(() => {\n if (!file) return\n let active = true\n let url: string | undefined\n // Create browser resources after mounting; cancelled renders never allocate a URL.\n void Promise.resolve().then(async () => {\n if (!active) return\n try {\n const mime = attachmentMimeType(file)\n const blob =\n mime && file.type !== mime ? file.slice(0, file.size, mime) : file\n url = URL.createObjectURL(blob)\n const text =\n mime.startsWith(\"text/\") || mime === \"application/json\"\n ? await file.slice(0, 8192).text()\n : undefined\n if (active) setPreview({ file, url, text })\n } catch {\n if (active) setPreview({ file, url })\n }\n })\n return () => {\n active = false\n if (url) URL.revokeObjectURL(url)\n }\n }, [file])\n return preview?.file === file ? preview : undefined\n}\n","\"use client\"\n\nimport {\n AtSign,\n BookOpen,\n Download,\n Film,\n FileText,\n Image as ImageIcon,\n Link as LinkIcon,\n Reply,\n TextQuote,\n} from \"lucide-react\"\nimport { useState, type ReactElement, type ReactNode } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { ATTACHMENT_CONTENT } from \"@/lib/attachment-content\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n PreviewCard,\n PreviewCardPopup,\n PreviewCardTrigger,\n} from \"@/components/ui/preview-card\"\nimport {\n AvatarHandle,\n DurationPill,\n Favicon,\n PlayButton,\n QuoteRail,\n RemoveButton,\n Waveform,\n} from \"@/components/ui/chat\"\nimport {\n attachmentFileKind,\n attachmentMimeType,\n useAttachmentFile,\n} from \"./attachment-file\"\n\nexport type TAttachmentKind =\n | \"document\"\n | \"image\"\n | \"media\"\n | \"text-selection\"\n | \"chat-reply\"\n | \"username-handle\"\n | \"url-link\"\nexport type TAttachmentVariant = \"default\" | \"preview\"\n\ninterface IAttachmentBase {\n id?: string\n className?: string\n style?: React.CSSProperties\n /** `default` is a compact chip with a hover preview; `preview` displays the content directly. */\n variant?: TAttachmentVariant\n title: ReactNode\n meta?: ReactNode\n onRemove?: () => void\n removable?: boolean\n /** A local file, retained through sending. Its type and preview are resolved automatically. */\n file?: File\n /** Content URL for an uploaded file, image, media or document. */\n src?: string\n /** A supplied thumbnail takes precedence over a generated image/video frame. */\n thumbnail?: string\n /** Custom rich hover content, for formats the browser cannot display itself. */\n preview?: ReactNode\n /** A document excerpt; text files generate one automatically (first 8 KB). */\n previewText?: string\n mimeType?: string\n}\n\nexport type TAttachmentProps = IAttachmentBase &\n (\n | { kind: \"document\"; onAction?: () => void; actionIcon?: ReactNode }\n | { kind: \"image\"; alt?: string }\n | {\n kind: \"media\"\n poster?: string\n duration?: ReactNode\n audio?: boolean\n onPlay?: () => void\n waveform?: number[]\n }\n | { kind: \"text-selection\"; quote?: ReactNode }\n | {\n kind: \"chat-reply\"\n author?: ReactNode\n time?: ReactNode\n body?: ReactNode\n }\n | { kind: \"username-handle\"; initials?: string }\n | {\n kind: \"url-link\"\n domain?: ReactNode\n description?: ReactNode\n favicon?: string\n href?: string\n }\n )\n\nconst KIND_ICON = {\n document: FileText,\n image: ImageIcon,\n media: Film,\n \"text-selection\": TextQuote,\n \"chat-reply\": Reply,\n \"username-handle\": AtSign,\n \"url-link\": LinkIcon,\n}\nconst chipClasses =\n \"flex min-h-[52px] w-60 max-w-full items-center gap-2.5 rounded-lg border border-border-default bg-surface-card py-1.5 pl-1.5 pr-2.5 text-left\"\nconst titleClasses =\n \"truncate text-[13px] font-medium leading-[15px] text-text-primary\"\nconst metaClasses = \"truncate text-[11px] leading-3 text-text-secondary\"\nconst panelClasses =\n \"w-[260px] max-w-full overflow-hidden rounded-lg border border-border-default bg-surface-card\"\n\n/** Compact attachments open their content on hover/focus; expanded content has no nested preview. */\nexport function Attachment(props: TAttachmentProps): ReactElement {\n const filePreview = useAttachmentFile(props.file)\n const resolved = {\n ...props,\n ...(props.file ? attachmentFileKind(props.file) : {}),\n src: props.src ?? filePreview?.url,\n previewText: props.previewText ?? filePreview?.text,\n mimeType:\n props.mimeType ??\n (props.file ? attachmentMimeType(props.file) : undefined),\n } as TAttachmentProps\n if (props.variant === \"preview\") return <AttachmentPreview {...resolved} />\n\n return (\n <PreviewCard>\n <PreviewCardTrigger\n delay={300}\n tabIndex={0}\n render={\n <div className=\"w-fit max-w-full rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-ring\" />\n }\n >\n <AttachmentChip {...resolved} />\n </PreviewCardTrigger>\n <PreviewCardPopup\n className=\"p-1.5 w-fit max-w-[calc(100vw-2rem)] rounded-lg\"\n data-slot=\"attachment-hover-preview\"\n >\n {props.preview ?? (\n <AttachmentHover {...resolved} id={undefined} className={undefined} />\n )}\n </PreviewCardPopup>\n </PreviewCard>\n )\n}\n\nObject.assign(Attachment, { [ATTACHMENT_CONTENT]: true })\n\n/** Real file content when available; a kind icon otherwise. No fabricated thumbnail. */\nfunction AttachmentVisual({\n attachment,\n small = false,\n className,\n}: {\n attachment: TAttachmentProps\n small?: boolean\n className?: string\n}): ReactElement {\n const [failedSource, setFailedSource] = useState<string>()\n const Icon = KIND_ICON[attachment.kind]\n const label =\n typeof attachment.title === \"string\" ? attachment.title : \"Attachment\"\n const image =\n attachment.thumbnail ??\n (attachment.kind === \"image\" || attachment.kind === \"url-link\"\n ? attachment.src\n : attachment.kind === \"media\"\n ? attachment.poster\n : undefined)\n const video =\n attachment.kind === \"media\" && !attachment.audio\n ? attachment.src\n : undefined\n const pdf =\n attachment.kind === \"document\" &&\n (attachment.mimeType === \"application/pdf\" ||\n /\\.pdf(?:[?#]|$)/i.test(attachment.src ?? \"\"))\n return (\n <div\n data-slot=\"attachment-thumbnail\"\n className={cn(\n \"relative flex shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-subtle text-text-muted\",\n small ? \"size-10\" : \"w-60 aspect-[3/2] max-w-full\",\n className\n )}\n >\n {image && failedSource !== image ? (\n <img\n src={image}\n alt={attachment.kind === \"image\" ? (attachment.alt ?? label) : label}\n onError={() => setFailedSource(image)}\n className=\"size-full object-cover\"\n />\n ) : video && failedSource !== video ? (\n <video\n src={video.includes(\"#\") ? video : `${video}#t=0.1`}\n aria-label={label}\n preload=\"metadata\"\n muted\n playsInline\n onError={() => setFailedSource(video)}\n className=\"size-full object-cover\"\n />\n ) : !small && pdf && attachment.src ? (\n <object\n data={`${attachment.src.split(\"#\")[0]}#page=1&view=FitH&toolbar=0&navpanes=0`}\n type=\"application/pdf\"\n aria-label={`Preview of ${label}`}\n className=\"bg-white size-full\"\n >\n <span className=\"p-4 text-sm text-neutral-600\">\n PDF preview unavailable in this browser.\n </span>\n </object>\n ) : attachment.previewText ? (\n <pre\n aria-label={`${label} excerpt`}\n className={cn(\n \"font-mono size-full overflow-hidden bg-background text-left break-words whitespace-pre-wrap text-foreground\",\n small ? \"p-1 text-[3px] leading-[4px]\" : \"p-3 leading-4 text-[11px]\"\n )}\n >\n {attachment.previewText}\n </pre>\n ) : (\n <Icon aria-hidden className={small ? \"size-4\" : \"size-9 opacity-60\"} />\n )}\n </div>\n )\n}\n\nfunction AttachmentChip(props: TAttachmentProps): ReactElement {\n return (\n <div\n data-slot=\"attachment\"\n data-kind={props.kind}\n data-variant=\"default\"\n className={cn(chipClasses, props.className)}\n id={props.id}\n style={props.style}\n >\n <AttachmentVisual attachment={props} small />\n <span className=\"min-w-0 gap-0.5 flex flex-1 flex-col\">\n <span className={titleClasses}>{props.title}</span>\n {props.meta ? <span className={metaClasses}>{props.meta}</span> : null}\n </span>\n {props.removable !== false && props.onRemove ? (\n <RemoveButton onClick={props.onRemove} />\n ) : null}\n </div>\n )\n}\n\nfunction AttachmentPreview(props: TAttachmentProps): ReactElement {\n const { kind, title, meta, className, id, style } = props\n const shared = {\n \"data-slot\": \"attachment\",\n \"data-kind\": kind,\n \"data-variant\": \"preview\",\n id,\n style,\n } as const\n switch (props.kind) {\n case \"image\":\n return (\n <div {...shared} className={cn(\"max-w-full rounded-lg\", className)}>\n <AttachmentVisual attachment={props} />\n </div>\n )\n case \"media\": {\n if (props.audio) {\n return (\n <div\n {...shared}\n className={cn(panelClasses, \"gap-2 p-2.5 flex flex-col\", className)}\n >\n {props.src ? (\n <audio\n controls\n preload=\"metadata\"\n src={props.src}\n aria-label={\n typeof title === \"string\" ? title : \"Audio attachment\"\n }\n className=\"h-9 min-w-0 w-full\"\n />\n ) : (\n <div className=\"gap-3 flex items-center\">\n <PlayButton onClick={props.onPlay} />\n <Waveform bars={props.waveform} />\n </div>\n )}\n {meta ? <span className={metaClasses}>{meta}</span> : null}\n </div>\n )\n }\n return (\n <div\n {...shared}\n className={cn(\n \"w-60 relative max-w-full overflow-hidden rounded-lg\",\n className\n )}\n >\n {props.src ? (\n <video\n controls\n preload=\"metadata\"\n playsInline\n src={props.src}\n poster={props.poster ?? props.thumbnail}\n aria-label={\n typeof title === \"string\" ? title : \"Video attachment\"\n }\n className=\"aspect-[3/2] w-full rounded-lg bg-surface-subtle object-cover\"\n />\n ) : (\n <>\n <AttachmentVisual attachment={props} />\n <PlayButton\n onClick={props.onPlay}\n className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n />\n </>\n )}\n {props.duration ? (\n <DurationPill className=\"right-2 top-2 pointer-events-none absolute\">\n {props.duration}\n </DurationPill>\n ) : null}\n </div>\n )\n }\n case \"document\":\n return (\n <div {...shared} className={cn(chipClasses, \"w-[260px]\", className)}>\n <AttachmentVisual attachment={props} small />\n <span className=\"min-w-0 gap-0.5 flex flex-1 flex-col\">\n <span className={titleClasses}>{title}</span>\n {meta ? <span className={metaClasses}>{meta}</span> : null}\n </span>\n {props.onAction ? (\n <Button\n aria-label=\"Download\"\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={props.onAction}\n >\n {props.actionIcon ?? <Download />}\n </Button>\n ) : null}\n </div>\n )\n case \"text-selection\":\n return (\n <div\n {...shared}\n className={cn(\n \"gap-2.5 p-2.5 flex w-[260px] max-w-full rounded-lg bg-surface-subtle\",\n className\n )}\n >\n <QuoteRail />\n <span className=\"min-w-0 gap-1 flex flex-1 flex-col\">\n <span className=\"gap-1.5 font-semibold leading-4 flex items-center text-[11px] text-accent-text\">\n <BookOpen className=\"size-4 shrink-0\" />\n <span className=\"truncate\">{title}</span>\n </span>\n <span className=\"line-clamp-4 text-[13px] leading-[15px] text-text-primary\">\n {props.quote ?? meta}\n </span>\n </span>\n </div>\n )\n case \"chat-reply\":\n return (\n <div\n {...shared}\n className={cn(\n \"gap-2 p-2.5 flex w-[260px] max-w-full rounded-lg bg-surface-subtle\",\n className\n )}\n >\n <QuoteRail />\n <span className=\"min-w-0 gap-0.5 flex flex-1 flex-col\">\n <span className=\"gap-1.5 leading-4 flex items-center text-[12px] text-accent-text\">\n <Reply className=\"size-4 shrink-0\" />\n <span className=\"font-semibold truncate\">\n {props.author ?? title}\n </span>\n {props.time ? (\n <span className=\"text-[11px] text-text-muted\">\n {props.time}\n </span>\n ) : null}\n </span>\n <span className=\"line-clamp-3 text-[13px] leading-[15px] text-text-primary\">\n {props.body ?? meta}\n </span>\n </span>\n </div>\n )\n case \"username-handle\":\n return (\n <span\n {...shared}\n className={cn(\n \"h-6 gap-1.5 py-0.5 pl-0.5 pr-2 font-semibold inline-flex max-w-full items-center rounded-lg bg-accent-subtle text-[13px] leading-none text-accent-text\",\n className\n )}\n >\n <AvatarHandle src={props.src} initials={props.initials} />\n {title}\n </span>\n )\n case \"url-link\": {\n const Tag = props.href ? \"a\" : \"div\"\n return (\n <Tag\n {...shared}\n href={props.href}\n target={props.href ? \"_blank\" : undefined}\n rel={props.href ? \"noreferrer\" : undefined}\n className={cn(panelClasses, \"w-60 block\", className)}\n >\n <AttachmentVisual\n attachment={props}\n className=\"h-[120px] w-full rounded-none\"\n />\n <span className=\"gap-1 px-3 pb-3 pt-2.5 flex flex-col\">\n <span className=\"gap-1.5 font-mono leading-3 flex items-center text-[10.5px] text-text-secondary\">\n <Favicon src={props.favicon} />\n <span className=\"truncate\">{props.domain}</span>\n </span>\n <span className={titleClasses}>{title}</span>\n {props.description ? (\n <span className=\"line-clamp-2 text-[11px] leading-[14px] text-text-secondary\">\n {props.description}\n </span>\n ) : null}\n </span>\n </Tag>\n )\n }\n }\n}\n\nfunction AttachmentHover(props: TAttachmentProps): ReactElement {\n if (props.kind === \"document\") {\n return (\n <div className={cn(panelClasses, \"border-0\")}>\n <AttachmentVisual\n attachment={props}\n className=\"w-full rounded-b-none\"\n />\n <div className=\"gap-1 p-3 flex flex-col\">\n <span className={titleClasses}>{props.title}</span>\n {props.meta ? (\n <span className={metaClasses}>{props.meta}</span>\n ) : null}\n </div>\n </div>\n )\n }\n if (props.kind === \"username-handle\") {\n return (\n <div className=\"w-60 gap-3 p-3 flex max-w-full items-center rounded-lg bg-surface-card\">\n <AvatarHandle src={props.src} initials={props.initials} size={20} />\n <span className=\"min-w-0 gap-1 flex flex-col\">\n <span className={titleClasses}>{props.title}</span>\n {props.meta ? (\n <span className={metaClasses}>{props.meta}</span>\n ) : null}\n </span>\n </div>\n )\n }\n return (\n <div className=\"gap-2 flex max-w-full flex-col\">\n <AttachmentPreview {...props} variant=\"preview\" removable={false} />\n {props.kind === \"image\" || props.kind === \"media\" ? (\n <div className=\"max-w-60 gap-1 px-1 pb-1 flex flex-col\">\n <span className={titleClasses}>{props.title}</span>\n {props.meta ? (\n <span className={metaClasses}>{props.meta}</span>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n}\n","\"use client\"\n\nimport { useReducedMotion } from \"motion/react\"\nimport type * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n} from \"recharts\"\nimport { cn } from \"@/lib/utils\"\nimport {\n Card,\n CardFrame,\n CardFrameHeader,\n CardPanel,\n} from \"@/components/ui/card\"\nimport { Dot, LegendItem, Pill, type TDotTone } from \"@/components/ui/chat\"\nimport { Reference } from \"@/components/atoms/reference\"\n\nexport type TChartType = \"pie\" | \"area\" | \"line\" | \"bar\"\n\nexport interface IChartSeries {\n /** Key into each data row. */\n key: string\n label: React.ReactNode\n /** Defaults to `var(--chart-series-N)` by position. */\n color?: string\n /** Renders a value in the legend and tooltip (`v => \\`${v}%\\``). */\n format?: (value: number) => React.ReactNode\n}\n\nexport type TChartDatum = { label: string; [key: string]: string | number }\n\nexport interface IChartProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"title\"\n> {\n type: TChartType\n title?: React.ReactNode\n subtitle?: React.ReactNode\n /** Pill text; defaults to the capitalised type. */\n badge?: React.ReactNode\n /** The passage or Strong's entry behind the data. Replaces the type badge. */\n reference?: React.ComponentProps<typeof Reference>\n data: TChartDatum[]\n /** Series to plot; pie uses the first one. */\n series: IChartSeries[]\n /** Pie only: big number and caption in the donut's centre. */\n center?: { value: React.ReactNode; label?: React.ReactNode }\n /** Drop the title row (InsightCards embeds a bare plot). */\n headerless?: boolean\n /** Plot height in px; the card is 244 tall with the header. */\n plotHeight?: number\n}\n\nconst TYPE_LABEL: Record<TChartType, string> = {\n pie: \"Pie\",\n area: \"Area\",\n line: \"Line\",\n bar: \"Bar\",\n}\n\nconst seriesColor = (s: IChartSeries, i: number) =>\n s.color ?? `var(--chart-series-${(i % 5) + 1})`\nconst seriesTone = (i: number) => `series-${(i % 5) + 1}` as TDotTone\n\nconst fmt = (s: IChartSeries | undefined, v: unknown): React.ReactNode =>\n typeof v === \"number\" && s?.format ? s.format(v) : String(v)\n\ninterface ITooltipRow {\n name?: unknown\n value?: unknown\n color?: string\n payload?: TChartDatum\n}\n\n/** Hover card: category label, then one dot · series · value row per series. */\nfunction ChartTooltip({\n active,\n payload,\n label,\n series,\n}: {\n active?: boolean\n payload?: ITooltipRow[]\n label?: unknown\n series: IChartSeries[]\n}): React.ReactElement | null {\n if (!active || !payload?.length) return null\n // Pie rows already carry the category as their name, so no heading there.\n const heading =\n series.length > 1 || label !== undefined\n ? (label ?? payload[0].payload?.label)\n : undefined\n return (\n <div\n data-slot=\"chart-tooltip\"\n className=\"min-w-28 px-2.5 py-2 shadow-md rounded-md border border-border-default bg-surface-card\"\n >\n {heading !== undefined ? (\n <div className=\"mb-1.5 font-medium leading-3 text-[11px] text-text-secondary\">\n {String(heading)}\n </div>\n ) : null}\n <ul className=\"gap-1 flex flex-col\">\n {payload.map((row, i) => {\n const si = Math.max(\n 0,\n series.findIndex((s) => s.key === row.name)\n )\n const s = series[si]\n return (\n <li\n key={i}\n className=\"gap-2 leading-3 flex items-center text-[11px]\"\n >\n <Dot tone={seriesTone(series.length > 1 ? si : i)} />\n <span className=\"truncate text-text-secondary\">\n {series.length > 1\n ? s?.label\n : (row.payload?.label ?? s?.label)}\n </span>\n <span className=\"pl-3 font-medium ml-auto text-text-primary\">\n {fmt(s, row.value)}\n </span>\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\nconst AXIS = {\n tick: { fontSize: 11, fill: \"var(--text-secondary)\" },\n axisLine: false,\n tickLine: false,\n dataKey: \"label\",\n padding: { left: 12, right: 12 },\n interval: 0 as const,\n}\n\n/**\n * Compact chart card: title, subtitle, reference or type pill, plot and legend.\n * Series colours are the `--chart-series-*` tokens, grid is `--chart-grid`.\n *\n * @sketch \"Component / Chart / {Pie, Area, Line, Bar}\"\n */\nexport function Chart({\n type,\n title,\n subtitle,\n badge,\n reference,\n data,\n series,\n center,\n headerless = false,\n plotHeight,\n className,\n ...props\n}: IChartProps): React.ReactElement {\n const height = plotHeight ?? (type === \"pie\" ? 140 : 150)\n const empty = data.length === 0 || series.length === 0\n const reduceMotion = useReducedMotion()\n const anim = {\n isAnimationActive: !reduceMotion,\n animationDuration: 700,\n animationEasing: \"ease-out\" as const,\n }\n const tooltip = (\n <Tooltip\n content={<ChartTooltip series={series} />}\n cursor={{\n stroke: \"var(--chart-grid)\",\n fill: \"var(--chart-grid)\",\n fillOpacity: 0.4,\n }}\n isAnimationActive={!reduceMotion}\n animationDuration={150}\n />\n )\n\n const plot = (\n <>\n {type === \"pie\" ? (\n <div className=\"gap-6 flex flex-wrap items-center justify-center\">\n <div className=\"relative shrink-0\" style={{ width: height, height }}>\n {empty ? null : (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n {tooltip}\n <Pie\n data={data}\n dataKey={series[0].key}\n nameKey=\"label\"\n innerRadius=\"66%\"\n outerRadius=\"100%\"\n paddingAngle={2}\n stroke=\"none\"\n {...anim}\n >\n {data.map((_, i) => (\n <Cell\n key={i}\n fill={`var(--chart-series-${(i % 5) + 1})`}\n className=\"transition-opacity duration-200 hover:opacity-80\"\n />\n ))}\n </Pie>\n </PieChart>\n </ResponsiveContainer>\n )}\n {center ? (\n <div className=\"inset-0 pointer-events-none absolute flex flex-col items-center justify-center\">\n <span className=\"font-semibold leading-5 text-[17px] text-text-primary\">\n {center.value}\n </span>\n {center.label ? (\n <span className=\"leading-3 text-[11px] text-text-secondary\">\n {center.label}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n {empty ? null : (\n <ul className=\"min-w-24 gap-3.5 flex flex-1 flex-col\">\n {data.map((d, i) => (\n <li key={d.label} className=\"flex\">\n <LegendItem\n tone={seriesTone(i)}\n value={fmt(series[0], d[series[0].key])}\n className=\"w-full\"\n >\n {d.label}\n </LegendItem>\n </li>\n ))}\n </ul>\n )}\n </div>\n ) : (\n <>\n <div style={{ height }} className=\"w-full\">\n {empty ? null : (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {type === \"bar\" ? (\n <BarChart\n data={data}\n margin={{ top: 4, right: 4, bottom: 0, left: 4 }}\n barCategoryGap=\"30%\"\n >\n <CartesianGrid\n vertical={false}\n stroke=\"var(--chart-grid)\"\n />\n <XAxis {...AXIS} />\n {tooltip}\n {series.map((s, i) => (\n <Bar\n key={s.key}\n dataKey={s.key}\n fill={seriesColor(s, i)}\n radius={[4, 4, 0, 0]}\n {...anim}\n />\n ))}\n </BarChart>\n ) : type === \"line\" ? (\n <LineChart\n data={data}\n margin={{ top: 4, right: 8, bottom: 0, left: 8 }}\n >\n <CartesianGrid\n vertical={false}\n stroke=\"var(--chart-grid)\"\n />\n <XAxis {...AXIS} />\n {tooltip}\n {series.map((s, i) => (\n <Line\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n dot={{\n r: 3,\n strokeWidth: 2,\n fill: \"var(--surface-card)\",\n }}\n activeDot={{ r: 5, strokeWidth: 0 }}\n {...anim}\n />\n ))}\n </LineChart>\n ) : (\n <AreaChart\n data={data}\n margin={{ top: 4, right: 8, bottom: 0, left: 8 }}\n >\n <CartesianGrid\n vertical={false}\n stroke=\"var(--chart-grid)\"\n />\n <XAxis {...AXIS} />\n {tooltip}\n {series.map((s, i) => (\n <Area\n key={s.key}\n type=\"monotone\"\n dataKey={s.key}\n stroke={seriesColor(s, i)}\n strokeWidth={2}\n fill={\n i === 0 ? \"var(--chart-area-fill)\" : seriesColor(s, i)\n }\n fillOpacity={1}\n activeDot={{ r: 5, strokeWidth: 0 }}\n {...anim}\n />\n ))}\n </AreaChart>\n )}\n </ResponsiveContainer>\n )}\n </div>\n {empty ? null : (\n <div className=\"gap-4 flex flex-wrap\">\n {series.map((s, i) => (\n <LegendItem key={s.key} tone={seriesTone(i)}>\n {s.label}\n </LegendItem>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )\n\n // Embedded (InsightCards) plots stay bare; a titled chart is a framed card.\n if (headerless) {\n return (\n <div\n data-slot=\"chart\"\n data-type={type}\n className={cn(\"w-80 gap-2 flex max-w-full flex-col\", className)}\n {...props}\n >\n {plot}\n </div>\n )\n }\n return (\n <CardFrame\n data-slot=\"chart\"\n data-type={type}\n className={cn(\n \"w-80 max-w-full [--frame-radius:var(--radius-md)]\",\n className\n )}\n {...props}\n >\n <CardFrameHeader className=\"gap-x-3 gap-y-2 px-3.5 py-3 flex flex-row flex-wrap items-start justify-between\">\n <div className=\"min-w-0 basis-36 gap-0.5 flex flex-1 flex-col\">\n <span className=\"font-semibold leading-4 text-[13px] text-text-primary\">\n {title}\n </span>\n {subtitle ? (\n <span className=\"leading-3 text-[11px] text-text-secondary\">\n {subtitle}\n </span>\n ) : null}\n </div>\n {reference ? (\n <Reference\n {...reference}\n className={cn(\"max-w-full shrink-0\", reference.className)}\n />\n ) : (\n <Pill>{badge ?? TYPE_LABEL[type]}</Pill>\n )}\n </CardFrameHeader>\n <Card>\n <CardPanel className=\"gap-3 p-3.5 flex flex-col\">{plot}</CardPanel>\n </Card>\n </CardFrame>\n )\n}\n","import { cva } from \"class-variance-authority\";\n\nexport type TSegmentedControlSize = \"default\" | \"lg\" | \"sm\" | \"xs\";\n\nexport const segmentedControlItemSizeClassNames: Record<\n TSegmentedControlSize,\n string\n> = {\n default: \"h-8.5 px-[calc(--spacing(2.5)-1px)] sm:h-7.5\",\n lg: \"h-9.5 px-[calc(--spacing(3)-1px)] sm:h-8.5\",\n sm: \"h-7.5 px-[calc(--spacing(2)-1px)] sm:h-6.5\",\n xs: \"h-6.5 px-[calc(--spacing(1.5)-1px)] sm:h-5.5\",\n};\n\nexport const segmentedControlRootClassName =\n \"relative z-0 flex w-fit items-center justify-center gap-0.5 rounded-lg bg-muted p-0.5\";\n\nexport const segmentedControlItemLayoutClassName =\n \"gap-1.5 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0\";\n\nexport const segmentedControlItemVariants = cva(\n [\n \"relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center whitespace-nowrap rounded-md border border-transparent font-medium text-base text-muted-foreground/72 outline-2 outline-transparent transition-[outline-color] hover:bg-transparent hover:text-muted-foreground focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-64 data-disabled:pointer-events-none data-disabled:opacity-64 sm:text-sm\",\n segmentedControlItemLayoutClassName,\n ],\n {\n defaultVariants: {\n size: \"default\",\n },\n variants: {\n size: segmentedControlItemSizeClassNames,\n state: {\n checked:\n \"data-checked:bg-background data-checked:text-foreground data-checked:shadow-sm/5 dark:data-checked:bg-input\",\n current:\n \"aria-[current=page]:bg-background aria-[current=page]:text-foreground aria-[current=page]:shadow-sm/5 dark:aria-[current=page]:bg-input\",\n pressed:\n \"data-pressed:bg-background data-pressed:text-foreground data-pressed:shadow-sm/5 dark:data-pressed:bg-input\",\n },\n },\n },\n);\n","\"use client\"\n\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport * as React from \"react\"\nimport {\n type TSegmentedControlSize,\n segmentedControlItemLayoutClassName,\n segmentedControlItemSizeClassNames,\n} from \"@/lib/segmented-control\"\nimport { cn } from \"@/lib/utils\"\n\ntype TTabsVariant = \"default\" | \"underline\"\ntype TTabsSize = TSegmentedControlSize\n\nconst TabsListContext: React.Context<TTabsSize> =\n React.createContext<TTabsSize>(\"default\")\n\nexport function Tabs({\n className,\n ...props\n}: TabsPrimitive.Root.Props): React.ReactElement {\n return (\n <TabsPrimitive.Root\n className={cn(\n \"flex flex-col gap-2 data-[orientation=vertical]:flex-row\",\n className\n )}\n data-slot=\"tabs\"\n {...props}\n />\n )\n}\n\nexport function TabsList({\n variant = \"default\",\n size = \"default\",\n className,\n children,\n ...props\n}: TabsPrimitive.List.Props & {\n size?: TTabsSize\n variant?: TTabsVariant\n}): React.ReactElement {\n return (\n <TabsPrimitive.List\n className={cn(\n \"relative z-0 flex w-fit items-center justify-center gap-x-0.5 text-muted-foreground\",\n \"data-[orientation=vertical]:flex-col\",\n variant === \"default\"\n ? \"rounded-lg bg-muted p-0.5 text-muted-foreground/72\"\n : \"data-[orientation=horizontal]:py-1 data-[orientation=vertical]:px-1 *:data-[slot=tabs-tab]:hover:bg-accent\",\n size === \"xs\" && \"text-xs!\",\n className\n )}\n data-size={size}\n data-slot=\"tabs-list\"\n {...props}\n >\n <TabsListContext.Provider value={size}>\n {children}\n </TabsListContext.Provider>\n <TabsPrimitive.Indicator\n className={cn(\n \"absolute bottom-0 left-0 h-(--active-tab-height) w-(--active-tab-width) translate-x-(--active-tab-left) -translate-y-(--active-tab-bottom) transition-[width,translate] duration-200 ease-in-out\",\n variant === \"underline\"\n ? \"z-10 bg-primary data-[orientation=horizontal]:h-0.5 data-[orientation=horizontal]:translate-y-px data-[orientation=vertical]:w-0.5 data-[orientation=vertical]:-translate-x-px\"\n : \"-z-1 rounded-md bg-background shadow-sm/5 dark:bg-input\"\n )}\n data-slot=\"tab-indicator\"\n />\n </TabsPrimitive.List>\n )\n}\n\nexport function TabsTab({\n className,\n size,\n ...props\n}: TabsPrimitive.Tab.Props & {\n size?: TTabsSize\n}): React.ReactElement {\n const contextSize: TTabsSize = React.useContext(TabsListContext)\n const resolvedSize: TTabsSize = size ?? contextSize\n\n return (\n <TabsPrimitive.Tab\n className={cn(\n \"relative flex shrink-0 grow cursor-pointer items-center justify-center rounded-md border border-transparent text-base font-medium whitespace-nowrap transition-[color,background-color,box-shadow] outline-none hover:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring data-[orientation=vertical]:w-full data-[orientation=vertical]:justify-start sm:text-sm data-disabled:pointer-events-none data-disabled:opacity-64 data-active:text-foreground\",\n segmentedControlItemLayoutClassName,\n segmentedControlItemSizeClassNames[resolvedSize],\n size === \"xs\" && \"text-xs!\",\n className\n )}\n data-size={resolvedSize}\n data-slot=\"tabs-tab\"\n {...props}\n />\n )\n}\n\nexport function TabsPanel({\n className,\n ...props\n}: TabsPrimitive.Panel.Props): React.ReactElement {\n return (\n <TabsPrimitive.Panel\n className={cn(\"flex-1 outline-none\", className)}\n data-slot=\"tabs-content\"\n {...props}\n />\n )\n}\n\nexport {\n TabsPrimitive,\n TabsTab as TabsTrigger,\n TabsPanel as TabsContent,\n type TTabsSize,\n type TTabsVariant,\n}\n","/**\n * String-keyed Jotai atom families for the chat components.\n *\n * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, so the library keeps\n * a tiny in-house family: one cache per family, a `remove(id)` that lets the\n * store drop an instance, and a per-feature registry so `removeInstance(id)`\n * clears every family of that feature at once. `tree`, `scaffold` and the AI\n * sidebar carry their own copies of this shape; new chat state uses this one.\n */\nimport { atom } from \"jotai\"\nimport type { Getter, Setter } from \"jotai\"\n\nexport type TFamily<AtomType> = ((id: string) => AtomType) & { remove: (id: string) => void }\n\nexport function createKeyedFamilies(feature: string) {\n const families: { remove: (id: string) => void }[] = []\n\n function keyed<AtomType>(create: (id: string) => AtomType): TFamily<AtomType> {\n const cache = new Map<string, AtomType>()\n const family = ((id: string) => {\n let instance = cache.get(id)\n if (instance === undefined) {\n instance = create(id)\n cache.set(id, instance)\n }\n return instance\n }) as TFamily<AtomType>\n family.remove = (id) => {\n cache.delete(id)\n }\n families.push(family)\n return family\n }\n\n function stateFamily<Value>(name: string, initialValue: Value) {\n return keyed((id) => {\n const instance = atom(initialValue)\n instance.debugLabel = `${feature}/${id}/${name}`\n return instance\n })\n }\n\n function actionFamily<Args extends unknown[]>(\n name: string,\n write: (get: Getter, set: Setter, id: string, ...args: Args) => void\n ) {\n return keyed((id) => {\n const instance = atom(null, (get, set, ...args: Args) => write(get, set, id, ...args))\n instance.debugLabel = `${feature}/${id}/${name}`\n return instance\n })\n }\n\n /** Drop every atom of one instance so the store can release its state. */\n function removeInstance(id: string): void {\n for (const family of families) family.remove(id)\n }\n\n return { keyed, stateFamily, actionFamily, removeInstance }\n}\n","import { useAtom } from \"jotai\"\n\nimport { createKeyedFamilies } from \"@/lib/keyed-atom\"\n\nexport type TMarkdownView = \"preview\" | \"markup\"\n\nconst { stateFamily, removeInstance } = createKeyedFamilies(\"markdown\")\n\n/** Which pane a Markdown card shows, keyed by its `markdownId`; `null` until first toggled (the card then falls back to its `defaultView`). */\nexport const markdownViewAtom = stateFamily<TMarkdownView | null>(\"view\", null)\nexport const removeMarkdownInstance = removeInstance\n\nexport function useMarkdownView(markdownId: string) {\n return useAtom(markdownViewAtom(markdownId))\n}\n","\"use client\"\n\nimport { Copy, Maximize2 } from \"lucide-react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport { EASE_OUT } from \"@/lib/ease\"\nimport * as React from \"react\"\nimport ReactMarkdown, { type Components } from \"react-markdown\"\nimport { cn } from \"@/lib/utils\"\nimport {\n Card,\n CardFrame,\n CardFrameHeader,\n CardPanel,\n} from \"@/components/ui/card\"\nimport { IconButton } from \"@/components/ui/chat\"\nimport { Tabs, TabsList, TabsTab } from \"@/components/ui/tabs\"\nimport {\n markdownViewAtom,\n removeMarkdownInstance,\n type TMarkdownView,\n useMarkdownView,\n} from \"./markdown-atom\"\n\nexport {\n markdownViewAtom,\n removeMarkdownInstance,\n useMarkdownView,\n type TMarkdownView,\n}\n\nconst VIEWS = [\n { value: \"preview\", label: \"Preview\" },\n { value: \"markup\", label: \"Markup\" },\n] as const\n\n/** Tag map restricted to what the design shows: headings, paragraphs, lists, inline + fenced code. */\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <h1 className=\"text-[15px] leading-[17px] font-semibold text-text-primary\">\n {children}\n </h1>\n ),\n h2: ({ children }) => (\n <h2 className=\"text-[14px] leading-4 font-semibold text-text-primary\">\n {children}\n </h2>\n ),\n h3: ({ children }) => (\n <h3 className=\"text-[13px] leading-4 font-semibold text-text-primary\">\n {children}\n </h3>\n ),\n p: ({ children }) => (\n <p className=\"text-[13px] leading-[15px] text-text-primary\">{children}</p>\n ),\n strong: ({ children }) => (\n <strong className=\"font-semibold\">{children}</strong>\n ),\n a: ({ children, href }) => (\n <a\n className=\"text-link underline-offset-2 hover:underline\"\n href={href}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n {children}\n </a>\n ),\n ul: ({ children }) => (\n <ul className=\"flex list-disc flex-col gap-1 pl-4 text-[13px] leading-[15px] text-text-primary\">\n {children}\n </ul>\n ),\n ol: ({ children }) => (\n <ol className=\"flex list-decimal flex-col gap-1 pl-4 text-[13px] leading-[15px] text-text-primary\">\n {children}\n </ol>\n ),\n li: ({ children }) => <li>{children}</li>,\n code: ({ children, className }) =>\n className ? (\n <code className=\"font-mono text-[11.5px] leading-[14px] text-link\">\n {children}\n </code>\n ) : (\n <code className=\"rounded-[4px] bg-surface-code px-1 py-px font-mono text-[11.5px] text-link\">\n {children}\n </code>\n ),\n pre: ({ children }) => (\n <pre className=\"overflow-x-auto rounded-lg bg-surface-code px-2.5 py-1.5\">\n {children}\n </pre>\n ),\n}\n\nexport interface IMarkdownProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"onCopy\"\n> {\n /** Markdown source; rendered in Preview, shown raw in Markup. */\n source: string\n /** Stable id for the view atom. Unnamed cards key off `useId()`. */\n markdownId?: string\n view?: TMarkdownView\n defaultView?: TMarkdownView\n onViewChange?: (view: TMarkdownView) => void\n onCopy?: (source: string) => void\n onExpand?: () => void\n /** Drop the card border (inside an AiBubble the bubble supplies it). */\n bare?: boolean\n}\n\n/**\n * Rendered markdown behind a Preview | Markup toggle, with copy and expand.\n *\n * @sketch \"Component / Markdown / Preview\", \"Component / Markdown / Markup\"\n */\nexport function Markdown({\n source,\n markdownId,\n view,\n defaultView,\n onViewChange,\n onCopy,\n onExpand,\n bare = false,\n className,\n ...props\n}: IMarkdownProps): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const generatedId = React.useId()\n const id = markdownId ?? generatedId\n const [stored, setStored] = useMarkdownView(id)\n React.useEffect(() => {\n if (markdownId) return\n return () => removeMarkdownInstance(id)\n }, [markdownId, id])\n\n const current: TMarkdownView = view ?? stored ?? defaultView ?? \"preview\"\n const select = (next: TMarkdownView) => {\n if (view === undefined) setStored(next)\n onViewChange?.(next)\n }\n\n return (\n <CardFrame\n data-slot=\"markdown\"\n data-view={current}\n className={cn(\n \"w-[360px] max-w-full [--frame-radius:var(--radius-md)]\",\n bare && \"border-transparent shadow-none\",\n className,\n \"rounded-md!\"\n )}\n {...props}\n >\n <CardFrameHeader className=\"flex flex-row items-center justify-between rounded-md! px-3 py-2\">\n <Tabs\n className=\"gap-0\"\n value={current}\n onValueChange={(next) => select(next as TMarkdownView)}\n >\n <TabsList aria-label=\"Markdown view\" size=\"xs\">\n {VIEWS.map((v) => (\n <TabsTab key={v.value} size=\"xs\" value={v.value}>\n {v.label}\n </TabsTab>\n ))}\n </TabsList>\n </Tabs>\n <span className=\"flex items-center gap-1\">\n <IconButton aria-label=\"Expand\" onClick={onExpand}>\n <Maximize2 />\n </IconButton>\n <IconButton\n aria-label=\"Copy markdown\"\n onClick={() => onCopy?.(source)}\n >\n <Copy />\n </IconButton>\n </span>\n </CardFrameHeader>\n <Card>\n <CardPanel className={current === \"preview\" ? \"p-4\" : \"p-2\"}>\n <AnimatePresence initial={false} mode=\"wait\">\n <motion.div\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n initial={reduceMotion ? false : { opacity: 0, y: 12 }}\n key={current}\n transition={\n reduceMotion\n ? { duration: 0 }\n : { duration: 0.24, ease: EASE_OUT }\n }\n >\n {current === \"preview\" ? (\n <div className=\"flex flex-col gap-2.5\">\n <ReactMarkdown components={COMPONENTS}>{source}</ReactMarkdown>\n </div>\n ) : (\n <pre className=\"overflow-x-auto rounded-md bg-surface-code px-2.5 py-2 font-mono text-[11px] leading-[13px] whitespace-pre-wrap text-text-primary\">\n {source}\n </pre>\n )}\n </motion.div>\n </AnimatePresence>\n </CardPanel>\n </Card>\n </CardFrame>\n )\n}\n","/**\n * Per-instance attachment tray for `Composer`, keyed by composer id\n * so an app can add or remove chips without holding the component.\n */\nimport { createKeyedFamilies } from \"@/lib/keyed-atom\"\nimport type { TComposerAttachment } from \"../type\"\nimport { Children, Fragment, isValidElement } from \"react\";\nimport type { Variants } from \"motion\";\nimport { EASE_IN_OUT, SPRING_PANEL } from \"@/lib/ease\";\n\nconst { stateFamily, actionFamily, removeInstance } =\n createKeyedFamilies(\"composer\")\n\nconst NO_ITEMS: TComposerAttachment[] = []\n\nexport const composerAttachmentsAtom = stateFamily<TComposerAttachment[]>(\n \"attachments\",\n NO_ITEMS\n)\n\nexport const addComposerAttachmentAtom = actionFamily(\n \"add\",\n (get, set, id, item: TComposerAttachment) => {\n const items = get(composerAttachmentsAtom(id))\n if (items.some((i) => i.id === item.id)) return\n set(composerAttachmentsAtom(id), [...items, item])\n }\n)\n\nexport const removeComposerAttachmentAtom = actionFamily(\n \"remove\",\n (get, set, id, itemId: string) => {\n set(\n composerAttachmentsAtom(id),\n get(composerAttachmentsAtom(id)).filter((i) => i.id !== itemId)\n )\n }\n)\n\nexport const clearComposerAttachmentsAtom = actionFamily(\n \"clear\",\n (_get, set, id) => {\n set(composerAttachmentsAtom(id), NO_ITEMS)\n }\n)\n\nexport const removeComposerInstance = removeInstance\n\n/** Children.toArray, but looking through fragments so `<>{a}{b}</>` counts two. */\nexport function flattenChildren(children: React.ReactNode): React.ReactNode[] {\n return Children.toArray(children).flatMap((child) =>\n isValidElement<{ children?: React.ReactNode }>(child) && child.type === Fragment\n ? flattenChildren(child.props.children)\n : [child]\n )\n}\n\n// The suggestions fan-out: the list holds the stagger, each item springs up\n// into place. Shared by `AiMessage`'s disclosure and `SuggestedPrompts`, so\n// both fan out with the same rhythm.\nexport const LIST_VARIANTS: Variants = {\n hidden: { transition: { staggerChildren: 0.04, staggerDirection: -1 } },\n visible: { transition: { staggerChildren: 0.07, delayChildren: 0.05 } },\n}\n\nexport const ITEM_VARIANTS: Variants = {\n hidden: {\n opacity: 0,\n y: 14,\n scale: 0.97,\n transition: { duration: 0.18, ease: EASE_IN_OUT },\n },\n visible: { opacity: 1, y: 0, scale: 1, transition: SPRING_PANEL },\n}","import { ArrowUp, Square } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport type { IComposerSubmitButtonProps } from \"../type\"\nimport type * as React from \"react\"\n\nexport function SendButton({\n isStreaming,\n isExpanded: _isExpanded,\n disabled,\n onStop,\n className,\n ...props\n}: IComposerSubmitButtonProps &\n React.ButtonHTMLAttributes<HTMLButtonElement>): React.ReactElement {\n return (\n <button\n {...props}\n type={isStreaming ? \"button\" : \"submit\"}\n aria-label={isStreaming ? \"Stop\" : \"Send message\"}\n data-cuelume-press=\"\"\n data-cuelume-release=\"\"\n disabled={disabled}\n onClick={isStreaming ? onStop : undefined}\n className={cn(\n \"size-7 flex shrink-0 items-center justify-center rounded-lg bg-foreground text-background transition-colors hover:opacity-90 focus-visible:outline-2 focus-visible:outline-ring disabled:bg-foreground/10 disabled:text-muted-foreground disabled:opacity-60\",\n className\n )}\n >\n {isStreaming ? (\n <Square aria-hidden className=\"size-3 fill-current\" />\n ) : (\n <ArrowUp aria-hidden className=\"size-4 stroke-[2.4]\" />\n )}\n </button>\n )\n}\n","\"use client\"\n\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\"\n\ntype RecognitionResult = { isFinal: boolean; 0: { transcript: string } }\ninterface Recognition {\n continuous: boolean\n interimResults: boolean\n lang: string\n onresult:\n | ((event: {\n resultIndex: number\n results: ArrayLike<RecognitionResult>\n }) => void)\n | null\n onerror: ((event: { error: string }) => void) | null\n onend: (() => void) | null\n start(): void\n stop(): void\n abort(): void\n}\nfunction recognitionConstructor() {\n if (typeof window === \"undefined\") return undefined\n const browser = window as unknown as {\n SpeechRecognition?: new () => Recognition\n webkitSpeechRecognition?: new () => Recognition\n }\n return browser.SpeechRecognition ?? browser.webkitSpeechRecognition\n}\nconst subscribe = () => () => {}\nconst getSupported = () => Boolean(recognitionConstructor())\nconst getServerSupported = () => false\n\n/** Uses the browser's recognizer only after an explicit microphone click. */\nexport function useDictation(\n onTranscript: (text: string) => void,\n disabled: boolean\n) {\n const supported = useSyncExternalStore(\n subscribe,\n getSupported,\n getServerSupported\n )\n const [listening, setListening] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const recognition = useRef<Recognition | null>(null)\n const receive = useRef(onTranscript)\n useEffect(() => {\n receive.current = onTranscript\n })\n useEffect(() => {\n return () => {\n const current = recognition.current\n if (current) {\n current.onresult = null\n current.onerror = null\n current.onend = null\n current.abort()\n }\n }\n }, [])\n useEffect(() => {\n const current = recognition.current\n if (disabled && current) {\n current.onresult = null\n current.abort()\n }\n }, [disabled])\n const cancel = () => {\n const current = recognition.current\n if (!current) return\n current.onresult = null\n current.onerror = null\n current.onend = null\n recognition.current = null\n current.abort()\n setListening(false)\n }\n const toggle = () => {\n if (disabled) return\n if (recognition.current) {\n recognition.current.stop()\n return\n }\n const Constructor = recognitionConstructor()\n if (!Constructor) return\n const current = new Constructor()\n current.continuous = true\n current.interimResults = false\n current.lang = document.documentElement.lang || navigator.language\n current.onresult = (event) => {\n const text = Array.from(event.results)\n .slice(event.resultIndex)\n .filter((result) => result.isFinal)\n .map((result) => result[0].transcript)\n .join(\" \")\n if (text) receive.current(text)\n }\n current.onerror = (event) => {\n if (event.error !== \"aborted\")\n setError(\n event.error === \"not-allowed\"\n ? \"Microphone access was denied.\"\n : \"Dictation stopped. Please try again.\"\n )\n }\n current.onend = () => {\n recognition.current = null\n setListening(false)\n }\n recognition.current = current\n setError(null)\n try {\n current.start()\n setListening(true)\n } catch {\n recognition.current = null\n setListening(false)\n setError(\"Dictation is unavailable. Please try again.\")\n }\n }\n return { supported, listening, error, toggle, cancel }\n}\n","\"use client\"\n\nimport { useAtom } from \"jotai\"\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from \"react\"\nimport type * as React from \"react\"\nimport { AtSign, ChevronDown, Mic, Paperclip, Plus, Slash } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport {\n Select,\n SelectItem,\n SelectPopup,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\nimport { Popover, PopoverPopup, PopoverTrigger } from \"@/components/ui/popover\"\nimport type { IComposerProps, IComposerOption } from \"../type\"\nimport { composerAttachmentsAtom, removeComposerInstance } from \"./utils\"\nimport { SendButton } from \"./send-button\"\nimport { useDictation } from \"./use-dictation\"\nimport { Attachment } from \"../attachment\"\nimport { attachmentFileKind, attachmentMimeType } from \"../attachment-file\"\n\nconst AUTO_MODEL = [{ id: \"auto\", label: \"Auto\" }]\nconst control =\n \"flex size-7 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-foreground/5 hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-40\"\n\n/** Beautiful UI Prompt Bar layout, adapted for Corpora's composer contract.\n * https://www.beautifului.dev/#prompt-bar — see BEAUTIFUL-UI-LICENSE.txt. */\nexport function Composer({\n value,\n onValueChange,\n composerId,\n attachments: seedAttachments,\n isStreaming = false,\n disabled = false,\n safetyNote,\n expanded = false,\n placeholder = \"Write a message…\",\n SubmitButton = SendButton,\n ComposerMenu,\n Suggestions,\n defaultValue = \"\",\n onSubmit,\n onStop,\n className,\n shape = \"rounded\",\n sources = [],\n commands = [],\n models = AUTO_MODEL,\n model,\n defaultModel,\n onModelChange,\n onSourceSelect,\n onCommand,\n onFilesChange,\n accept,\n dictation = true,\n}: IComposerProps): React.ReactElement {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [internalModel, setInternalModel] = useState(\n defaultModel ?? models[0]?.id ?? \"auto\"\n )\n const [promptsOpen, setPromptsOpen] = useState(true)\n const [plusOpen, setPlusOpen] = useState(false)\n const [dismissed, setDismissed] = useState(false)\n const [active, setActive] = useState(0)\n const [caret, setCaret] = useState(defaultValue.length)\n const [wide, setWide] = useState(expanded)\n const generatedId = useId()\n const id = composerId ?? generatedId\n const listId = `${generatedId}-options`\n const [attachments, setAttachments] = useAtom(composerAttachmentsAtom(id))\n const seeded = useRef(false)\n const input = useRef<HTMLTextAreaElement>(null)\n const fileInput = useRef<HTMLInputElement>(null)\n const surface = useRef<HTMLDivElement>(null)\n const controls = useRef<HTMLDivElement>(null)\n const measure = useRef<HTMLSpanElement>(null)\n const modelControl = useRef<HTMLDivElement>(null)\n const pendingCaret = useRef<number | null>(null)\n\n useEffect(() => {\n if (seeded.current) return\n seeded.current = true\n if (seedAttachments?.length) setAttachments(seedAttachments)\n }, [seedAttachments, setAttachments])\n useEffect(() => {\n if (composerId) return\n return () => removeComposerInstance(id)\n }, [composerId, id])\n const draft = value ?? internalValue\n const isDisabled = disabled || isStreaming\n const selectedModel = model ?? internalModel\n const changeValue = (next: string) => {\n if (value === undefined) setInternalValue(next)\n onValueChange?.(next)\n }\n const speech = useDictation((text) => {\n const next = draft ? `${draft.trimEnd()} ${text}` : text\n changeValue(next)\n setCaret(next.length)\n }, isDisabled || !dictation)\n\n const match = /(?:^|\\s)([@/])([^\\s@/]*)$/.exec(draft.slice(0, caret))\n const token = match\n ? {\n kind: match[1],\n query: match[2].toLowerCase(),\n start: caret - match[2].length - 1,\n }\n : null\n const kind = !isDisabled && !dismissed ? (plusOpen ? \"@\" : token?.kind) : null\n const options = (kind === \"@\" ? sources : commands).filter((item) =>\n item.label.toLowerCase().includes(plusOpen ? \"\" : (token?.query ?? \"\"))\n )\n const hasUpload =\n kind === \"@\" &&\n (plusOpen || !token?.query || \"add photos and files\".includes(token.query))\n const count = options.length + (hasUpload ? 1 : 0)\n const menuOpen = Boolean(kind)\n const closeMenu = () => {\n setPlusOpen(false)\n setDismissed(true)\n }\n const focusAt = (position: number) => {\n pendingCaret.current = position\n input.current?.focus()\n }\n const pick = (item: IComposerOption) => {\n if (isDisabled) return\n const replacement =\n item.insertText ?? `${kind === \"@\" ? \"@\" + item.label : \"/\" + item.id} `\n const start = !plusOpen && token ? token.start : caret\n const next = draft.slice(0, start) + replacement + draft.slice(caret)\n changeValue(next)\n setCaret(start + replacement.length)\n closeMenu()\n item.onSelect?.()\n if (kind === \"@\") onSourceSelect?.(item)\n else onCommand?.(item)\n focusAt(start + replacement.length)\n }\n const upload = () => {\n closeMenu()\n fileInput.current?.click()\n }\n const chooseActive = () => {\n const selected = Math.min(active, count - 1)\n if (hasUpload && selected === 0) upload()\n else {\n const item = options[selected - (hasUpload ? 1 : 0)]\n if (item) pick(item)\n }\n }\n const send = () => {\n if (isDisabled || (!draft.trim() && !attachments.length)) return\n speech.cancel()\n onSubmit?.(draft.trim(), \"answer\", attachments)\n if (value === undefined) setInternalValue(\"\")\n setAttachments([])\n closeMenu()\n }\n useLayoutEffect(() => {\n if (pendingCaret.current === null || !input.current) return\n input.current.setSelectionRange(pendingCaret.current, pendingCaret.current)\n pendingCaret.current = null\n }, [draft])\n useLayoutEffect(() => {\n const field = input.current\n const row = controls.current\n if (!field || !row) return\n const resize = () => {\n const fixed =\n 28 * (dictation ? 3 : 2) + (modelControl.current?.offsetWidth ?? 0) + 16\n const available = row.clientWidth - fixed\n setWide(\n expanded ||\n draft.includes(\"\\n\") ||\n (row.clientWidth > 0 &&\n (available < 110 ||\n (measure.current?.offsetWidth ?? 0) + 8 > available))\n )\n field.style.height = \"0px\"\n const height = Math.max(wide ? 44 : 28, field.scrollHeight)\n field.style.height = `${Math.min(height, 128)}px`\n field.style.overflowY = height > 128 ? \"auto\" : \"hidden\"\n }\n resize()\n const observer = new ResizeObserver(resize)\n observer.observe(row)\n return () => observer.disconnect()\n }, [draft, expanded, wide, selectedModel, dictation])\n\n return (\n <form\n className=\"min-w-0 max-w-3xl w-full\"\n data-slot=\"composer\"\n data-expanded={wide ? \"\" : undefined}\n onSubmit={(event) => {\n event.preventDefault()\n send()\n }}\n >\n {Suggestions && (\n <Suggestions onOpenChange={setPromptsOpen} open={promptsOpen} />\n )}\n <Popover\n open={menuOpen}\n onOpenChange={(open) => {\n if (!open) closeMenu()\n }}\n >\n <div\n ref={surface}\n className={cn(\n \"min-w-0 gap-1.5 p-1.5 shadow-sm relative flex flex-col border border-foreground/10 bg-(--chat-field) transition-[border-color,border-radius] duration-150 focus-within:border-foreground/25\",\n shape === \"pill\"\n ? wide || attachments.length\n ? \"rounded-3xl\"\n : \"rounded-full\"\n : \"rounded-[14px]\",\n className\n )}\n >\n <span\n ref={measure}\n aria-hidden\n className=\"pointer-events-none invisible absolute text-[13px] leading-[18px] whitespace-pre\"\n >\n {draft}\n </span>\n {attachments.length > 0 && (\n <div\n className=\"gap-1.5 px-0.5 pt-0.5 flex flex-wrap\"\n data-slot=\"composer-tray\"\n >\n {attachments.map((attachment) => (\n <Attachment\n key={attachment.id}\n {...attachment}\n onRemove={\n isDisabled\n ? undefined\n : () =>\n setAttachments((items) =>\n items.filter((item) => item.id !== attachment.id)\n )\n }\n />\n ))}\n </div>\n )}\n <div\n ref={controls}\n className={cn(\n \"min-w-0 gap-x-1 gap-y-1.5 grid items-end\",\n dictation\n ? wide\n ? \"grid-cols-[28px_auto_minmax(0,1fr)_28px_28px]\"\n : \"grid-cols-[28px_minmax(0,1fr)_auto_28px_28px]\"\n : wide\n ? \"grid-cols-[28px_auto_minmax(0,1fr)_28px]\"\n : \"grid-cols-[28px_minmax(0,1fr)_auto_28px]\"\n )}\n >\n <div\n className={\n wide ? \"col-start-1 row-start-2\" : \"col-start-1 row-start-1\"\n }\n >\n {ComposerMenu ? (\n <ComposerMenu disabled={isDisabled} />\n ) : (\n <PopoverTrigger\n render={<button type=\"button\" />}\n aria-label=\"Add attachments and sources\"\n data-cuelume-press=\"\"\n data-cuelume-release=\"\"\n disabled={isDisabled}\n className={control}\n onClick={() => {\n setPlusOpen(!plusOpen)\n setDismissed(false)\n setActive(0)\n input.current?.focus()\n }}\n >\n <Plus aria-hidden className=\"size-4\" />\n </PopoverTrigger>\n )}\n </div>\n <textarea\n ref={input}\n rows={1}\n aria-label=\"Message\"\n aria-keyshortcuts=\"Meta+Enter Control+Enter\"\n aria-controls={menuOpen ? listId : undefined}\n aria-activedescendant={\n menuOpen && count\n ? `${listId}-${Math.min(active, count - 1)}`\n : undefined\n }\n autoComplete=\"off\"\n disabled={isDisabled}\n value={draft}\n placeholder={speech.listening ? \"Listening…\" : placeholder}\n className={cn(\n \"min-h-7 min-w-0 px-1 w-full resize-none bg-transparent py-[5px] text-[13px] leading-[18px] [overflow-wrap:anywhere] text-foreground outline-none placeholder:text-muted-foreground/70 disabled:opacity-50\",\n wide\n ? \"col-span-full col-start-1 row-start-1\"\n : \"col-start-2 row-start-1\"\n )}\n onFocus={() => setPromptsOpen(false)}\n onSelect={(event) => setCaret(event.currentTarget.selectionStart)}\n onChange={(event) => {\n changeValue(event.target.value)\n setCaret(event.target.selectionStart)\n setDismissed(false)\n setPlusOpen(false)\n setActive(0)\n }}\n onKeyDown={(event) => {\n if (event.nativeEvent.isComposing) return\n if (event.key === \"Escape\") {\n closeMenu()\n if (isStreaming) onStop?.()\n return\n }\n if (\n menuOpen &&\n count &&\n (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")\n ) {\n event.preventDefault()\n setActive(\n (current) =>\n (current + (event.key === \"ArrowDown\" ? 1 : count - 1)) %\n count\n )\n return\n }\n if (\n menuOpen &&\n count &&\n (event.key === \"Tab\" ||\n (event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey))\n ) {\n event.preventDefault()\n chooseActive()\n return\n }\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault()\n send()\n }\n }}\n />\n <div\n ref={modelControl}\n className={\n wide\n ? \"min-w-0 col-start-2 row-start-2\"\n : \"min-w-0 col-start-3 row-start-1\"\n }\n >\n <Select\n value={selectedModel}\n onValueChange={(next) => {\n if (next) {\n if (model === undefined) setInternalModel(next)\n onModelChange?.(next)\n }\n }}\n disabled={isDisabled}\n >\n <SelectTrigger\n aria-label=\"Choose model\"\n className=\"h-7 min-h-7 min-w-0 max-w-32 gap-1 px-1.5 text-xs font-medium sm:min-h-7 sm:text-xs w-auto rounded-lg border-0 bg-transparent! text-muted-foreground shadow-none! before:hidden hover:bg-foreground/5! [&_[data-slot=select-icon]]:hidden\"\n >\n <SelectValue>\n {models.find((item) => item.id === selectedModel)?.label ??\n \"Auto\"}\n </SelectValue>\n <ChevronDown aria-hidden className=\"size-3!\" />\n </SelectTrigger>\n <SelectPopup\n side=\"top\"\n alignItemWithTrigger={false}\n className=\"min-w-44\"\n >\n {models.map((item) => (\n <SelectItem key={item.id} value={item.id}>\n {item.label}\n {item.description && (\n <span className=\"text-xs ml-auto text-muted-foreground\">\n {\" \"}\n {item.description}\n </span>\n )}\n </SelectItem>\n ))}\n </SelectPopup>\n </Select>\n </div>\n {dictation && (\n <button\n type=\"button\"\n aria-label={\n speech.listening ? \"Stop dictation\" : \"Start dictation\"\n }\n aria-pressed={speech.listening}\n data-cuelume-press=\"\"\n data-cuelume-release=\"\"\n title={\n speech.supported\n ? \"Dictate a message\"\n : \"Dictation is not supported in this browser\"\n }\n disabled={isDisabled || !speech.supported}\n onClick={speech.toggle}\n className={cn(\n control,\n wide ? \"col-start-4 row-start-2\" : \"col-start-4 row-start-1\",\n speech.listening && \"bg-primary/10 text-primary\"\n )}\n >\n <Mic\n aria-hidden\n className={cn(\n \"size-4\",\n speech.listening &&\n \"animate-pulse motion-reduce:animate-none\"\n )}\n />\n </button>\n )}\n <div\n className={cn(\n dictation ? \"col-start-5\" : \"col-start-4\",\n wide ? \"row-start-2\" : \"row-start-1\"\n )}\n >\n <SubmitButton\n isExpanded\n isStreaming={isStreaming}\n disabled={\n !isStreaming &&\n (disabled || (!draft.trim() && !attachments.length))\n }\n onStop={onStop}\n />\n </div>\n </div>\n </div>\n <PopoverPopup\n anchor={surface}\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n initialFocus={false}\n finalFocus={false}\n className=\"min-w-56 [&_[data-slot=popover-viewport]]:p-1 w-(--anchor-width) rounded-[10px]\"\n >\n <div\n id={listId}\n role=\"listbox\"\n aria-label={kind === \"@\" ? \"Sources and attachments\" : \"Commands\"}\n >\n {hasUpload && (\n <button\n id={`${listId}-0`}\n type=\"button\"\n role=\"option\"\n aria-selected={active === 0}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActive(0)}\n onClick={upload}\n className={cn(\n \"min-h-9 gap-2 px-2 flex w-full items-center rounded-md text-left text-[13px]\",\n active === 0 && \"bg-foreground/5\"\n )}\n >\n <Paperclip aria-hidden className=\"size-4\" />\n <span>Add photos & files</span>\n </button>\n )}\n {options.map((item, index) => {\n const row = index + (hasUpload ? 1 : 0)\n return (\n <button\n id={`${listId}-${row}`}\n key={item.id}\n type=\"button\"\n role=\"option\"\n aria-selected={active === row}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActive(row)}\n onClick={() => pick(item)}\n className={cn(\n \"min-h-9 gap-2 px-2 flex w-full items-center rounded-md text-left text-[13px]\",\n active === row && \"bg-foreground/5\"\n )}\n >\n <span className=\"[&_svg]:size-4 shrink-0\">\n {item.icon ??\n (kind === \"@\" ? (\n <AtSign aria-hidden className=\"size-4\" />\n ) : (\n <Slash aria-hidden className=\"size-4\" />\n ))}\n </span>\n <span className=\"shrink-0\">{item.label}</span>\n <span className=\"text-xs truncate text-muted-foreground\">\n {item.description}\n </span>\n </button>\n )\n })}\n {!count && (\n <p className=\"px-2 py-3 text-xs text-muted-foreground\">\n No {kind === \"@\" ? \"sources\" : \"commands\"} found.\n </p>\n )}\n </div>\n <p className=\"mt-1 px-2 py-1.5 border-t text-[11px] text-muted-foreground\">\n {kind === \"@\"\n ? \"Type @ to search sources & files\"\n : \"Type / to search commands\"}\n </p>\n </PopoverPopup>\n </Popover>\n <input\n ref={fileInput}\n type=\"file\"\n multiple\n accept={accept}\n aria-label=\"Attach files\"\n className=\"hidden\"\n disabled={isDisabled}\n onChange={(event) => {\n const files = Array.from(event.target.files ?? [])\n if (!files.length) return\n setAttachments((items) => [\n ...items,\n ...files.map((file) => ({\n id: crypto.randomUUID(),\n ...attachmentFileKind(file),\n title: file.name,\n meta: attachmentMimeType(file),\n file,\n })),\n ])\n onFilesChange?.(files)\n event.target.value = \"\"\n input.current?.focus()\n }}\n />\n {speech.error && (\n <p role=\"status\" className=\"mt-1 text-xs text-muted-foreground\">\n {speech.error}\n </p>\n )}\n {safetyNote && (\n <p className=\"mt-1 px-1.5 text-[10px] text-muted-foreground\">\n {safetyNote}\n </p>\n )}\n </form>\n )\n}\n","import { Plus } from \"lucide-react\"\nimport type { PopoverTriggerState } from \"@base-ui/react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport function AddButton({\n state,\n className,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n state?: PopoverTriggerState\n}) {\n return (\n <button\n {...props}\n type=\"button\"\n aria-label=\"Add attachment\"\n data-cuelume-press=\"\"\n data-cuelume-release=\"\"\n className={cn(\n \"size-7 flex items-center justify-center rounded-lg text-muted-foreground hover:bg-foreground/5 hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring disabled:opacity-40\",\n state?.open && \"bg-foreground/5\",\n className\n )}\n >\n <Plus aria-hidden className=\"size-4\" />\n </button>\n )\n}\n","import { useState } from \"react\"\nimport type { IComposerMenuProps } from \"../type\"\nimport { Popover, PopoverPopup, PopoverTrigger } from \"@/components/ui/popover\"\nimport { MenuCommandList } from \"@/components/ui/menu-command\"\nimport { AddButton } from \"./add-button\"\n\n/** Compatibility slot for apps that provide their own attachment commands. */\nexport function CommandMenu({\n items = [],\n onCommand,\n onAttach,\n disabled,\n}: IComposerMenuProps): React.ReactElement {\n const [open, setOpen] = useState(false)\n return (\n <Popover open={open && !disabled} onOpenChange={setOpen}>\n <PopoverTrigger\n disabled={disabled}\n render={(props, state) => <AddButton {...props} state={state} />}\n />\n <PopoverPopup\n side=\"top\"\n align=\"start\"\n className=\"w-80 [&_[data-slot=popover-viewport]]:p-0\"\n >\n <MenuCommandList\n items={\n onAttach\n ? [\n {\n id: \"attach\",\n label: \"Add photos & files\",\n onSelect: onAttach,\n },\n ...items,\n ]\n : items\n }\n onSelect={(item) => {\n onCommand?.(item)\n setOpen(false)\n }}\n />\n </PopoverPopup>\n </Popover>\n )\n}\n","import { useAtomValue, useSetAtom } from \"jotai\"\nimport { useCallback } from \"react\"\n\nimport type { TComposerAttachment } from \"../type\"\nimport {\n addComposerAttachmentAtom,\n clearComposerAttachmentsAtom,\n composerAttachmentsAtom,\n removeComposerAttachmentAtom,\n} from \"./utils\"\n\n/** Read the tray of one composer. */\nexport function useComposerAttachments(\n composerId: string\n): TComposerAttachment[] {\n return useAtomValue(composerAttachmentsAtom(composerId))\n}\n\n/** Write-only tray actions; never re-renders the caller when the tray changes. */\nexport function useComposerAttachmentActions(composerId: string) {\n const add = useSetAtom(addComposerAttachmentAtom(composerId))\n const remove = useSetAtom(removeComposerAttachmentAtom(composerId))\n const clear = useSetAtom(clearComposerAttachmentsAtom(composerId))\n return {\n add: useCallback((item: TComposerAttachment) => add(item), [add]),\n remove: useCallback((itemId: string) => remove(itemId), [remove]),\n clear: useCallback(() => clear(), [clear]),\n }\n}\n","import type { TSignalLevel, TTagTone } from \"@/components/ui/chat\"\nimport type { TRecommendationState } from \"./types\"\nimport { EASE_IN_OUT, EASE_OUT_STRONG } from \"@/lib/ease\"\n\nexport const CONFIDENCE: Record<TSignalLevel, string> = {\n high: \"High confidence\",\n medium: \"Medium confidence\",\n low: \"Low confidence\",\n}\n\nexport const STATE_LABEL: Record<\n Exclude<TRecommendationState, \"pending\" | \"running\">,\n string\n> = {\n accepted: \"Done\",\n rejected: \"Skipped\",\n}\n\n/** Status pill tones, shared with the presentation Tag atom. */\nexport const STATE_TONE: Record<\n Exclude<TRecommendationState, \"pending\" | \"running\">,\n TTagTone\n> = {\n accepted: \"green\",\n rejected: \"amber\",\n}\n\nexport const ACTION_MOTION = {\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 4 },\n initial: { opacity: 0, y: 4 },\n transition: { duration: 0.18, ease: EASE_IN_OUT },\n} as const\n\n/** Row entrance, driven by the Group's staggered `visible` variant. */\nexport const ROW_VARIANTS = {\n hidden: { opacity: 0, y: 8 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.45, ease: EASE_OUT_STRONG },\n },\n} as const\n\n/** Rows enter staggered 80ms apart; each Item picks up `row` from `ROW_VARIANTS`. */\nexport const GROUP_VARIANTS = {\n hidden: {},\n visible: { transition: { staggerChildren: 0.08 } },\n} as const\n\nexport const SIZE = 18\nexport const STROKE = 1.5\nexport const R = (SIZE - STROKE) / 2\nexport const C = 2 * Math.PI * R\n","\"use client\"\n\nimport { Check, Sparkle, X } from \"lucide-react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport type * as React from \"react\"\nimport { EASE_OUT_STRONG } from \"@/lib/ease\"\nimport { cn } from \"@/lib/utils\"\nimport type { IRecommendationCheckboxProps } from \"./types\"\nimport { SIZE, STROKE, R, C } from \"./constant\"\n\n/**\n * Outcome mark after beautiful-ui's Task Rows: a Sparkle while the proposal\n * waits for approval, a spinning ring once the agent is running (with the\n * step number inside), then a filled badge that pops in — green check when\n * accepted, red cross when rejected.\n */\nexport function Checkbox({\n state,\n step,\n className,\n}: IRecommendationCheckboxProps): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const transition = reduceMotion\n ? { duration: 0 }\n : { duration: 0.3, ease: EASE_OUT_STRONG }\n\n return (\n <span\n className={cn(\n \"relative inline-grid shrink-0 place-items-center\",\n className\n )}\n data-slot=\"recommendation-state\"\n data-state={state}\n style={{ width: SIZE, height: SIZE }}\n >\n <AnimatePresence initial={false} mode=\"popLayout\">\n {state === \"pending\" ? (\n <motion.span\n key=\"pending\"\n animate={{ scale: 1, opacity: 1 }}\n className=\"inline-grid place-items-center [grid-area:1/1]\"\n exit={{ scale: 0.4, opacity: 0 }}\n initial={{ scale: 0.4, opacity: 0 }}\n style={{ width: SIZE, height: SIZE }}\n transition={transition}\n >\n <Sparkle\n aria-hidden=\"true\"\n className=\"size-4 fill-indigo-500/25 stroke-[1.75] text-indigo-600 dark:text-indigo-400\"\n />\n </motion.span>\n ) : state === \"running\" ? (\n <motion.span\n key=\"running\"\n animate={{ scale: 1, opacity: 1 }}\n className=\"relative inline-grid place-items-center [grid-area:1/1]\"\n exit={{ scale: 0.4, opacity: 0 }}\n initial={{ scale: 0.4, opacity: 0 }}\n style={{ width: SIZE, height: SIZE }}\n transition={transition}\n >\n <svg\n aria-hidden=\"true\"\n className={cn(\n \"absolute inset-0\",\n !reduceMotion && \"animate-spin [animation-duration:1.1s]\"\n )}\n height={SIZE}\n width={SIZE}\n >\n <circle\n className=\"stroke-border-default\"\n cx={SIZE / 2}\n cy={SIZE / 2}\n fill=\"none\"\n r={R}\n strokeWidth={STROKE}\n />\n <circle\n className=\"stroke-text-muted\"\n cx={SIZE / 2}\n cy={SIZE / 2}\n fill=\"none\"\n r={R}\n strokeDasharray={`${C * 0.28} ${C * 0.72}`}\n strokeLinecap=\"round\"\n strokeWidth={STROKE}\n />\n </svg>\n {step !== undefined ? (\n <span className=\"relative text-[9px] font-semibold text-text-primary tabular-nums\">\n {step}\n </span>\n ) : null}\n </motion.span>\n ) : (\n <motion.span\n key={state}\n animate={{ scale: 1, opacity: 1 }}\n className={cn(\n \"inline-grid place-items-center rounded-full text-white [grid-area:1/1]\",\n state === \"accepted\"\n ? \"bg-semantic-success\"\n : \"bg-semantic-danger\"\n )}\n exit={{ scale: 0.4, opacity: 0 }}\n initial={{ scale: 0, opacity: 0 }}\n style={{ width: SIZE, height: SIZE }}\n transition={transition}\n >\n {state === \"accepted\" ? (\n <Check aria-hidden=\"true\" className=\"size-3 stroke-[3.5]\" />\n ) : (\n <X aria-hidden=\"true\" className=\"size-2.5 stroke-[3.5]\" />\n )}\n </motion.span>\n )}\n </AnimatePresence>\n </span>\n )\n}\n","\"use client\";\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Accordion(\n props: AccordionPrimitive.Root.Props,\n): React.ReactElement {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nexport function AccordionItem({\n className,\n ...props\n}: AccordionPrimitive.Item.Props): React.ReactElement {\n return (\n <AccordionPrimitive.Item\n className={cn(\"border-b last:border-b-0\", className)}\n data-slot=\"accordion-item\"\n {...props}\n />\n );\n}\n\nexport function AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props): React.ReactElement {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n className={cn(\n \"flex flex-1 cursor-pointer items-start justify-between gap-4 rounded-md py-4 text-left font-medium text-sm outline-none transition-all focus-visible:ring-[3px] focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-64 data-panel-open:*:data-[slot=accordion-indicator]:rotate-180\",\n className,\n )}\n data-slot=\"accordion-trigger\"\n {...props}\n >\n {children}\n <ChevronDownIcon\n className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 opacity-80 transition-transform duration-200 ease-in-out\"\n data-slot=\"accordion-indicator\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nexport function AccordionPanel({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props): React.ReactElement {\n return (\n <AccordionPrimitive.Panel\n className=\"h-(--accordion-panel-height) overflow-hidden text-muted-foreground text-sm transition-[height,opacity] duration-300 ease-[var(--ease-out-strong)] data-ending-style:h-0 data-ending-style:opacity-0 data-starting-style:h-0 data-starting-style:opacity-0\"\n data-slot=\"accordion-panel\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Panel>\n );\n}\n\nexport { AccordionPrimitive, AccordionPanel as AccordionContent };\n","\"use client\"\n\nimport { motion } from \"motion/react\"\nimport type * as React from \"react\"\nimport {\n Accordion,\n} from \"@/components/ui/accordion\"\nimport { cn } from \"@/lib/utils\"\nimport type { TRecommendationGroupProps } from \"./types\"\nimport { GROUP_VARIANTS } from \"./constant\"\n\n/**\n * Accordion root for a stack of recommendation items. Defaults to `multiple`\n * so each proposal can stay open on its own, like independent suggestion cards.\n */\nexport function Group({\n className,\n multiple = true,\n ...props\n}: TRecommendationGroupProps): React.ReactElement {\n return (\n <Accordion\n className={cn(\"flex w-full flex-col gap-2 max-w-11/12 overflow-clip rounded-md\", className)}\n data-slot=\"recommendation-group\"\n multiple={multiple}\n render={\n <motion.div\n animate=\"visible\"\n initial=\"hidden\"\n variants={GROUP_VARIANTS}\n />\n }\n {...props}\n />\n )\n}\n","\"use client\"\n\nimport { Check, Undo2, X } from \"lucide-react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport type * as React from \"react\"\nimport {\n AccordionItem,\n AccordionPanel,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Card,\n CardFrame,\n CardFrameFooter,\n CardPanel,\n} from \"@/components/ui/card\"\nimport { AvatarHandle, Signal, Tag } from \"@/components/ui/chat\"\nimport { EASE_OUT_STRONG } from \"@/lib/ease\"\nimport { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { CONFIDENCE, STATE_LABEL, STATE_TONE, ACTION_MOTION, ROW_VARIANTS } from \"./constant\"\nimport type { IRecommendationItemProps } from \"./types\"\nimport { Reference } from \"@/components/atoms\"\n\n\n/**\n * Human-in-the-loop proposal: title, description with entity + lead-time\n * pills, other options with signal bars, confidence + Accept / Alternatives.\n * Outcome mark, badge, and the pending ↔ undo swap come from SuggestionCard.\n *\n * Must render inside `Recommendation.Group`.\n *\n * @sketch \"Component / Recommendation Card\"\n */\nexport function Item({\n value,\n title,\n description,\n entity,\n leadTime,\n reference,\n options = [],\n optionsLabel = \"Other options\",\n confidence = \"high\",\n confidenceLabel,\n acceptLabel = \"Accept\",\n rejectLabel,\n alternativesLabel = \"Alternatives\",\n state = \"pending\",\n step,\n onAccept,\n onReject,\n onAlternatives,\n onUndo,\n onSelectOption,\n children,\n className,\n ...props\n}: IRecommendationItemProps): React.ReactElement {\n const declined = state === \"rejected\"\n const decline = onReject ?? onAlternatives\n const declineLabel = rejectLabel ?? alternativesLabel\n const reduceMotion = useReducedMotion()\n // Options mount with the panel, so they drop in staggered on every open.\n const optionMotion = (index: number) =>\n reduceMotion\n ? {}\n : {\n animate: { opacity: 1, y: 0 },\n initial: { opacity: 0, y: 6 },\n transition: {\n delay: 0.12 + index * 0.1,\n duration: 0.3,\n ease: EASE_OUT_STRONG,\n },\n }\n\n return (\n <AccordionItem\n className=\"border-0 last:border-0\"\n render={<motion.div variants={reduceMotion ? undefined : ROW_VARIANTS} />}\n value={value}\n {...props}\n >\n <CardFrame\n className={cn(\n \"max-w-full [--frame-radius:var(--radius-md)]\",\n className\n )}\n data-slot=\"recommendation-card\"\n data-state={state}\n >\n <AccordionTrigger className=\"gap-3 px-3 py-2.5 hover:bg-black/4 dark:hover:bg-white/4 relative items-center rounded-none text-left focus-visible:ring-0\">\n <Checkbox state={state} step={step} />\n <div className=\"min-w-0 gap-1 flex flex-1 flex-col items-start\">\n <span\n className={cn(\n \"leading-4 font-semibold w-full text-[14px] text-text-primary\",\n declined && \"font-light text-muted-foreground line-through\"\n )}\n >\n {title}\n </span>\n </div>\n {state === \"accepted\" || state === \"rejected\" ? (\n <Tag className=\"uppercase\" tone={STATE_TONE[state]}>\n {STATE_LABEL[state]}\n </Tag>\n ) : null}\n </AccordionTrigger>\n\n {/* `relative`: the frame's ::before veil is positioned, so an\n unpositioned panel body would paint under it and look faded. */}\n <AccordionPanel className=\"px-0 pb-0 relative\">\n {(description || entity || leadTime) && <div className={cn(\"flex flex-wrap items-center gap-x-1.5 gap-y-1.5 px-3 pb-3 text-[13px] leading-[18px] text-text-secondary\", declined && \"line-through opacity-50\")}>\n {description}\n {entity && <span className=\"inline-flex h-[22px] items-center gap-1.5 rounded-full bg-surface-subtle py-0.5 pl-0.5 pr-2 text-xs font-medium text-text-primary\"><AvatarHandle initials={entity.initials} size={16} src={entity.src} />{entity.name}</span>}\n {leadTime && <Tag className=\"rounded-full\" tone=\"green\">{leadTime}</Tag>}\n </div>}\n {reference && <div\n className={cn(\n \"gap-x-1.5 gap-y-1 px-2 pb-1.5 flex w-full items-center\",\n declined && \"line-through opacity-50\"\n )}\n >\n <Reference {...reference} />\n </div>}\n {children && <div className=\"px-3 py-2\">{children}</div>}\n {options.length > 0 && (\n <Card className=\"mx-3 rounded-md before:rounded-[calc(var(--radius-md)-1px)]\">\n <CardPanel className=\"gap-2 px-3.5 py-2.5 flex flex-col\">\n <span className=\"leading-3 text-[11px] text-text-secondary\">\n {optionsLabel}\n </span>\n {options.map((option, index) => (\n <motion.button\n {...optionMotion(index)}\n className=\"-mx-2 h-6 gap-2.5 px-2 hover:bg-black/4 dark:hover:bg-white/6 flex items-center rounded-md text-left text-[12.5px] leading-none text-text-primary outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n key={index}\n onClick={() => onSelectOption?.(index)}\n type=\"button\"\n >\n <Signal level={option.signal ?? \"low\"} />\n <span className=\"flex-1 truncate\">{option.label}</span>\n {option.status ? (\n <span className=\"text-[11px] text-text-muted\">\n {option.status}\n </span>\n ) : null}\n </motion.button>\n ))}\n </CardPanel>\n </Card>\n )}\n \n <CardFrameFooter className=\"gap-2 px-4 py-3.5 relative flex items-center\">\n <Signal level={confidence} />\n <span className=\"text-[12.5px] text-text-primary\">\n {confidenceLabel ?? CONFIDENCE[confidence]}\n </span>\n <span className=\"gap-2 ml-auto flex items-center\">\n <AnimatePresence initial={false} mode=\"wait\">\n {state === \"running\" ? (\n // The spinner in the heading already reports progress; the\n // approval actions are gone and Undo is not offered mid-run.\n <motion.div {...ACTION_MOTION} key=\"running\" />\n ) : state === \"pending\" ? (\n <motion.div\n {...ACTION_MOTION}\n className=\"gap-2 flex items-center\"\n key=\"actions\"\n >\n <Button\n className=\"px-3 font-medium sm:h-6 h-6 rounded-full text-[12px]\"\n onClick={decline}\n size=\"xs\"\n variant=\"outline\"\n >\n <X className=\"size-3 stroke-3\" />\n {declineLabel}\n </Button>\n <Button onClick={onAccept} size=\"xs\" variant=\"default\">\n <Check className=\"size-3 stroke-3\" />\n {acceptLabel}\n </Button>\n </motion.div>\n ) : (\n // Always a node, never null: `mode=\"wait\"` only releases the\n // leaving actions once a sibling enters behind them.\n <motion.div\n {...ACTION_MOTION}\n className=\"gap-1 text-xs font-normal inline-flex items-center text-success-foreground\"\n key={state}\n >\n {onUndo ? (\n <Button\n className=\"text-amber-400\"\n onClick={onUndo}\n size=\"xs\"\n variant=\"ghost\"\n >\n <Undo2 className=\"size-3 stroke-3\" /> Undo\n </Button>\n ) : null}\n </motion.div>\n )}\n </AnimatePresence>\n </span>\n </CardFrameFooter>\n </AccordionPanel>\n </CardFrame>\n </AccordionItem>\n )\n}\n","\"use client\"\n\nimport { useId } from \"react\"\nimport type * as React from \"react\"\nimport { Group } from \"./group\"\nimport { Item } from \"./item\"\nimport type { IRecommendationCardProps } from \"./types\"\n\n/**\n * One-card convenience: a Group with a single Item, so existing\n * `<RecommendationCard />` call sites keep working.\n */\nexport function RecommendationCard({\n value,\n defaultOpen = true,\n ...props\n}: IRecommendationCardProps): React.ReactElement {\n const autoId = useId()\n const itemValue = value ?? autoId\n return (\n <Group defaultValue={defaultOpen ? [itemValue] : []}>\n <Item value={itemValue} {...props} />\n </Group>\n )\n}\n","import { Checkbox } from \"./checkbox\"\nimport { RecommendationCard } from \"./default\"\nimport { Group } from \"./group\"\nimport { Item } from \"./item\"\n\nexport type * from \"./types\"\n\nexport { RecommendationCard }\n\nexport const Recommendation = {\n Group,\n Item,\n Checkbox,\n Card: RecommendationCard,\n}\n\nexport default Group\n","\"use client\"\n\nimport { AlignLeft, ExternalLink, FileText } from \"lucide-react\"\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card, CardPanel } from \"@/components/ui/card\"\nimport { FileTypeBadge, Pill } from \"@/components/ui/chat\"\n\nexport interface IContextCard {\n id?: string\n title: React.ReactNode\n /** \"290 characters\" */\n meta?: React.ReactNode\n snippet: React.ReactNode\n file?: { name: React.ReactNode; type: string }\n icon?: React.ReactNode\n}\n\nexport interface IContextCardsProps extends React.ComponentPropsWithoutRef<\"div\"> {\n header?: React.ReactNode\n cards: IContextCard[]\n /** Count pill; defaults to `cards.length`. */\n count?: React.ReactNode\n onOpen?: (card: IContextCard, index: number) => void\n}\n\n/**\n * Retrieved chunks: header with a count pill, then one card per chunk with\n * title, character count, snippet and the source file pill.\n *\n * @sketch \"Component / Context Cards\"\n */\nexport function ContextCards({ header = \"All chunks\", cards, count, onOpen, className, ...props }: IContextCardsProps): React.ReactElement {\n return (\n <div data-slot=\"context-cards\" className={cn(\"flex w-[380px] max-w-full flex-col gap-2\", className)} {...props}>\n <div className=\"flex items-center gap-2.5 px-0.5\">\n <span className=\"text-[13px] font-semibold leading-4 text-text-primary\">{header}</span>\n <Pill>{count ?? cards.length}</Pill>\n </div>\n {cards.map((card, i) => (\n <Card key={card.id ?? i}><CardPanel className=\"flex flex-col gap-2 p-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-icon [&_svg]:size-3\">{card.icon ?? (i % 2 ? <AlignLeft /> : <FileText />)}</span>\n <span className=\"flex-1 truncate text-[13px] font-semibold leading-4 text-text-primary\">{card.title}</span>\n {card.meta ? <span className=\"text-[11px] text-text-muted\">{card.meta}</span> : null}\n </div>\n <p className=\"line-clamp-2 text-[12px] leading-[14px] text-text-secondary\">{card.snippet}</p>\n {card.file ? (\n <button\n type=\"button\"\n onClick={() => onOpen?.(card, i)}\n className=\"inline-flex h-6 w-fit max-w-full items-center gap-1.5 rounded-md bg-surface-subtle pl-2 pr-2 text-[11.5px] font-medium text-text-primary outline-none hover:bg-black/8 focus-visible:ring-2 focus-visible:ring-ring dark:hover:bg-white/10 [&_svg]:size-2.5 [&_svg]:text-text-muted\"\n >\n <FileTypeBadge className=\"min-w-0 px-1\">{card.file.type}</FileTypeBadge>\n <span className=\"truncate\">{card.file.name}</span>\n <ExternalLink />\n </button>\n ) : null}\n </CardPanel></Card>\n ))}\n </div>\n )\n}\n","\"use client\"\n\nimport { Copy, FileCode } from \"lucide-react\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card, CardFrame, CardFrameHeader } from \"@/components/ui/card\"\nimport { Button } from \"@/components/ui/button\"\nimport { SegmentedToggle } from \"@/components/ui/chat\"\n\nexport interface ICodeDiffLine {\n type?: \"add\" | \"remove\" | \"context\"\n text: string\n}\n\nexport interface ICodeBlockProps extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"onCopy\"> {\n filename?: React.ReactNode\n code: string\n /** Optional diff view; when absent the toggle is hidden. */\n diff?: ICodeDiffLine[]\n view?: \"code\" | \"diff\"\n defaultView?: \"code\" | \"diff\"\n onViewChange?: (view: \"code\" | \"diff\") => void\n onCopy?: (code: string) => void\n /** Extra keywords for the tokenizer. */\n keywords?: string[]\n}\n\nconst KEYWORDS = new Set([\"export\", \"import\", \"from\", \"async\", \"await\", \"function\", \"const\", \"let\", \"var\", \"return\", \"if\", \"else\", \"null\", \"true\", \"false\", \"new\", \"class\", \"type\", \"interface\"])\nfunction isIdentifierStart(char: string): boolean {\n const code = char.charCodeAt(0)\n return char === \"$\" || char === \"_\" || (code >= 65 && code <= 90) || (code >= 97 && code <= 122)\n}\n\nfunction isIdentifierPart(char: string): boolean {\n const code = char.charCodeAt(0)\n return isIdentifierStart(char) || (code >= 48 && code <= 57)\n}\n\n/** Minimal highlighter: string literals and keywords only, as in the design. */\nexport function tokenize(line: string, keywords: ReadonlySet<string>): React.ReactNode[] {\n const out: React.ReactNode[] = []\n let i = 0\n while (i < line.length) {\n const start = i\n const quote = line[i]\n\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n for (i++; i < line.length; i++) {\n if (line[i] === \"\\\\\") i++\n else if (line[i] === quote) {\n i++\n break\n }\n }\n out.push(<span key={start} className=\"text-code-string\">{line.slice(start, i)}</span>)\n continue\n }\n\n if (isIdentifierStart(line[i])) {\n i++\n while (i < line.length && isIdentifierPart(line[i])) i++\n const word = line.slice(start, i)\n out.push(keywords.has(word) ? <span key={start} className=\"text-code-keyword\">{word}</span> : word)\n continue\n }\n\n i++\n while (i < line.length && line[i] !== '\"' && line[i] !== \"'\" && line[i] !== \"`\" && !isIdentifierStart(line[i])) i++\n out.push(line.slice(start, i))\n }\n return out\n}\n\nconst VIEWS = [{ value: \"code\", label: \"Code\" }, { value: \"diff\", label: \"Diff\" }] as const\n\n/**\n * Code card: filename header, Code | Diff toggle, Copy; gutter line numbers\n * and keyword / string tinting from the `--code-*` tokens.\n *\n * @sketch \"Component / Code Block\"\n */\nexport function CodeBlock({ filename, code, diff, view, defaultView = \"code\", onViewChange, onCopy, keywords, className, ...props }: ICodeBlockProps): React.ReactElement {\n const [internal, setInternal] = React.useState<\"code\" | \"diff\">(defaultView)\n const current = view ?? internal\n const kw = React.useMemo(() => (keywords ? new Set([...KEYWORDS, ...keywords]) : KEYWORDS), [keywords])\n const lines: ICodeDiffLine[] = current === \"diff\" && diff ? diff : code.split(\"\\n\").map((text) => ({ text }))\n\n return (\n <CardFrame data-slot=\"code-block\" data-view={current} className={cn(\"w-[420px] max-w-full\", className)} {...props}>\n <CardFrameHeader className=\"flex h-11 flex-row items-center gap-2 px-4 py-0\">\n <FileCode className=\"size-[15px] text-icon\" />\n <span className=\"flex-1 truncate font-mono text-[12px] font-semibold text-text-primary\">{filename}</span>\n {diff ? (\n <SegmentedToggle\n label=\"Code view\"\n options={VIEWS}\n value={current}\n onValueChange={(v) => {\n if (view === undefined) setInternal(v)\n onViewChange?.(v)\n }}\n />\n ) : null}\n <Button variant=\"ghost\" size=\"xs\" onClick={() => onCopy?.(code)} className=\"h-6 gap-1.5 rounded-md px-2 text-[11.5px] font-medium text-text-secondary hover:bg-surface-subtle hover:text-text-primary sm:h-6 [&_svg]:size-3.5! [&_svg]:opacity-100\">\n <Copy />Copy\n </Button>\n </CardFrameHeader>\n <Card className=\"overflow-hidden\">\n <pre className=\"overflow-x-auto bg-surface-code py-3 font-mono text-[11.5px] leading-[21px] text-text-primary\">\n {lines.map((line, i) => (\n <div\n key={i}\n className={cn(\"flex\", line.type === \"add\" && \"bg-semantic-success-subtle\", line.type === \"remove\" && \"bg-semantic-danger-subtle\")}\n >\n <span className=\"w-10 shrink-0 select-none border-r border-border-default pr-2.5 text-right text-[11px] text-text-muted\">{line.type === \"add\" ? \"+\" : line.type === \"remove\" ? \"−\" : i + 1}</span>\n <span className=\"whitespace-pre pl-3\">{tokenize(line.text, kw)}</span>\n </div>\n ))}\n </pre>\n </Card>\n </CardFrame>\n )\n}\n","\"use client\"\n\nimport { useAtom } from \"jotai\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card } from \"@/components/ui/card\"\nimport { createKeyedFamilies } from \"@/lib/keyed-atom\"\nimport { Dot, type TDotTone } from \"@/components/ui/chat\"\n\nconst { stateFamily, removeInstance } = createKeyedFamilies(\"filterTable\")\n\n/** Active filter id, keyed by `tableId`; `null` means \"All\". */\nexport const filterTableFilterAtom = stateFamily<string | null>(\"filter\", null)\nexport const removeFilterTableInstance = removeInstance\n\nexport interface IFilterTableStatus {\n id: string\n label: React.ReactNode\n tone: TDotTone\n}\n\nexport interface IFilterTableColumn<Row> {\n key: keyof Row & string\n header: React.ReactNode\n className?: string\n}\n\nexport interface IFilterTableProps<Row extends { id: string; status: string }> extends React.ComponentPropsWithoutRef<\"div\"> {\n tableId?: string\n statuses: IFilterTableStatus[]\n columns: IFilterTableColumn<Row>[]\n /** Column key rendered with the status dot (defaults to \"status\"). */\n statusKey?: keyof Row & string\n rows: Row[]\n allLabel?: React.ReactNode\n filter?: string | null\n onFilterChange?: (filter: string | null) => void\n}\n\n/**\n * Status filter pills over a compact task table.\n *\n * @sketch \"Component / Filter Table\"\n */\nexport function FilterTable<Row extends { id: string; status: string }>({\n tableId, statuses, columns, statusKey = \"status\" as keyof Row & string, rows, allLabel = \"All\", filter, onFilterChange, className, ...props\n}: IFilterTableProps<Row>): React.ReactElement {\n const generatedId = React.useId()\n const id = tableId ?? generatedId\n const [stored, setStored] = useAtom(filterTableFilterAtom(id))\n const current = filter === undefined ? stored : filter\n const select = (next: string | null) => {\n if (filter === undefined) setStored(next)\n onFilterChange?.(next)\n }\n React.useEffect(() => {\n if (tableId) return\n return () => removeFilterTableInstance(id)\n }, [tableId, id])\n\n const visible = current ? rows.filter((r) => r.status === current) : rows\n const byStatus = (s: string) => rows.filter((r) => r.status === s).length\n const statusOf = (s: string) => statuses.find((x) => x.id === s)\n\n const pill = (active: boolean) =>\n cn(\n \"flex h-[26px] items-center gap-1.5 rounded-full px-2.5 text-[12.5px] leading-none outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring\",\n active ? \"bg-surface-subtle font-medium text-text-primary\" : \"text-text-secondary hover:text-text-primary\"\n )\n\n return (\n <div data-slot=\"filter-table\" className={cn(\"flex w-[450px] max-w-full flex-col gap-2.5\", className)} {...props}>\n <div role=\"tablist\" className=\"flex flex-wrap items-center gap-1\">\n <button type=\"button\" role=\"tab\" aria-selected={current === null} onClick={() => select(null)} className={pill(current === null)}>\n {allLabel}\n <span className=\"rounded-full bg-black/8 px-1.5 py-0.5 text-[10.5px] text-text-secondary dark:bg-white/10\">{rows.length}</span>\n </button>\n {statuses.map((s) => (\n <button key={s.id} type=\"button\" role=\"tab\" aria-selected={current === s.id} onClick={() => select(s.id)} className={pill(current === s.id)}>\n <Dot tone={s.tone} size={6} />\n {s.label}\n <span className=\"text-[10.5px] text-text-muted\">{byStatus(s.id)}</span>\n </button>\n ))}\n </div>\n <Card className=\"overflow-x-auto\">\n <table className=\"w-full border-collapse text-left\">\n <thead>\n <tr className=\"border-b border-border-default\">\n {columns.map((c) => (\n <th key={c.key} className={cn(\"px-3 py-2.5 text-[11px] font-medium leading-3 text-text-secondary\", c.className)}>{c.header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visible.map((row) => (\n <tr key={row.id} className=\"border-b border-border-default last:border-b-0\">\n {columns.map((c) => {\n const value = row[c.key] as React.ReactNode\n const status = c.key === statusKey ? statusOf(String(value)) : undefined\n return (\n <td key={c.key} className={cn(\"whitespace-nowrap px-3 py-2.5 text-[13px] leading-4 text-text-primary\", c.className)}>\n {status ? (\n <span className=\"flex items-center gap-1.5 text-[12.5px] text-text-secondary\"><Dot tone={status.tone} size={6} />{status.label}</span>\n ) : value}\n </td>\n )\n })}\n </tr>\n ))}\n {visible.length === 0 ? (\n <tr><td colSpan={columns.length} className=\"px-3 py-4 text-center text-[12px] text-text-muted\">No rows</td></tr>\n ) : null}\n </tbody>\n </table>\n </Card>\n </div>\n )\n}\n","\"use client\"\n\nimport { ChevronsUpDown } from \"lucide-react\"\nimport { useAtom } from \"jotai\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card } from \"@/components/ui/card\"\nimport { createKeyedFamilies } from \"@/lib/keyed-atom\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Tag, type TTagTone } from \"@/components/ui/chat\"\n\nconst { stateFamily, removeInstance } = createKeyedFamilies(\"recordsTable\")\n\n/** Selected row ids, keyed by `tableId`. */\nexport const recordsTableSelectionAtom = stateFamily<ReadonlySet<string>>(\"selection\", new Set<string>())\nexport const removeRecordsTableInstance = removeInstance\n\nexport interface IRecordsRow {\n id: string\n name: React.ReactNode\n initial?: string\n avatarSrc?: string\n tags?: { label: React.ReactNode; tone?: TTagTone }[]\n /** Max tags shown inline; the rest collapse to \"+N\". */\n lastInteraction?: React.ReactNode\n strength?: React.ReactNode\n}\n\nexport type TRecordsColumnKey = \"name\" | \"tags\" | \"lastInteraction\" | \"strength\"\n\nexport interface IRecordsTableProps extends React.ComponentPropsWithoutRef<\"div\"> {\n tableId?: string\n rows: IRecordsRow[]\n headers?: Partial<Record<TRecordsColumnKey, React.ReactNode>>\n /** Pin the header inside a height-constrained scroll container. */\n stickyHeader?: boolean\n maxTags?: number\n selected?: ReadonlySet<string>\n onSelectionChange?: (selected: ReadonlySet<string>) => void\n /** Sort is the caller's: the design shows the control only. */\n onSortChange?: (column: TRecordsColumnKey) => void\n}\n\nconst HEADERS: Record<TRecordsColumnKey, string> = { name: \"Company\", tags: \"Categories\", lastInteraction: \"Last interaction\", strength: \"Connection\" }\n\n/**\n * Selectable records table: index, initial avatar, name, tag row with\n * overflow, relative date, connection strength; sortable headers.\n *\n * @sketch \"Component / Records Table\"\n */\nexport function RecordsTable({ tableId, rows, headers, stickyHeader = false, maxTags = 2, selected, onSelectionChange, onSortChange, className, ...props }: IRecordsTableProps): React.ReactElement {\n const generatedId = React.useId()\n const id = tableId ?? generatedId\n const [stored, setStored] = useAtom(recordsTableSelectionAtom(id))\n const current = selected ?? stored\n const update = (next: ReadonlySet<string>) => {\n if (selected === undefined) setStored(next)\n onSelectionChange?.(next)\n }\n React.useEffect(() => {\n if (tableId) return\n return () => removeRecordsTableInstance(id)\n }, [tableId, id])\n\n const all = rows.length > 0 && rows.every((r) => current.has(r.id))\n const some = !all && rows.some((r) => current.has(r.id))\n const toggleAll = () => update(all ? new Set() : new Set(rows.map((r) => r.id)))\n const toggle = (rowId: string) => {\n const next = new Set(current)\n if (next.has(rowId)) next.delete(rowId)\n else next.add(rowId)\n update(next)\n }\n const h = { ...HEADERS, ...headers }\n const sortable = (key: TRecordsColumnKey, label: React.ReactNode) => (\n <button type=\"button\" onClick={() => onSortChange?.(key)} className=\"inline-flex items-center gap-1.5 text-left outline-none hover:text-text-primary focus-visible:ring-2 focus-visible:ring-ring [&_svg]:size-3 [&_svg]:text-text-muted\">\n {label}<ChevronsUpDown />\n </button>\n )\n\n return (\n <Card tabIndex={0} role=\"region\" aria-label=\"Records table\" data-slot=\"records-table\" className={cn(\"isolate w-[540px] max-w-full overflow-auto select-none [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\", className)} {...props}>\n <table className=\"w-full min-w-[540px] border-separate border-spacing-0 text-left [&_td]:border-b [&_td]:border-border-default [&_th]:border-b [&_th]:border-border-default [&_tr:last-child_td]:border-b-0\">\n <thead className={cn(stickyHeader && \"[&_th]:sticky [&_th]:top-0 [&_th]:z-20 [&_th]:bg-surface-card [&_th:first-child]:z-30 [&_th:nth-child(2)]:z-30\")}>\n <tr className=\"border-b border-border-default text-[11px] font-medium leading-3 text-text-secondary\">\n <th className=\"sticky left-0 z-10 w-13 min-w-13 bg-surface-card py-2.5 pl-3\"><Checkbox aria-label=\"Select all\" checked={all} indeterminate={some} onCheckedChange={toggleAll} className=\"size-4\" /></th>\n <th className=\"sticky left-13 z-10 min-w-44 bg-surface-card px-2 py-2.5\">{h.name}</th>\n <th className=\"px-2 py-2.5\">{sortable(\"tags\", h.tags)}</th>\n <th className=\"px-2 py-2.5\">{sortable(\"lastInteraction\", h.lastInteraction)}</th>\n <th className=\"px-2 py-2.5 pr-3\">{sortable(\"strength\", h.strength)}</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row, i) => {\n const tags = row.tags ?? []\n const extra = tags.length - maxTags\n const checked = current.has(row.id)\n return (\n <tr key={row.id} data-selected={checked || undefined} className=\"border-b border-border-default last:border-b-0 data-selected:bg-accent-subtle/40\">\n <td className={cn(\"sticky left-0 z-10 w-13 min-w-13 py-2 pl-3\", checked ? \"bg-accent-subtle\" : \"bg-surface-card\")}>\n <span className=\"flex items-center gap-2\">\n <span className=\"w-2 text-[11px] text-text-muted group-hover:hidden\">{i + 1}</span>\n <Checkbox aria-label={`Select row ${i + 1}`} checked={checked} onCheckedChange={() => toggle(row.id)} className=\"size-4\" />\n </span>\n </td>\n <td className={cn(\"sticky left-13 z-10 min-w-44 px-2 py-2\", checked ? \"bg-accent-subtle\" : \"bg-surface-card\")}>\n <span className=\"flex items-center gap-2\">\n <span className=\"inline-flex size-5 shrink-0 items-center justify-center overflow-hidden rounded-full bg-surface-subtle text-[9px] font-semibold text-text-secondary\">\n {row.avatarSrc ? <img alt=\"\" className=\"size-full object-cover\" src={row.avatarSrc} /> : row.initial}\n </span>\n <span className=\"truncate text-[13px] font-medium leading-4 text-text-primary\">{row.name}</span>\n </span>\n </td>\n <td className=\"px-2 py-2\">\n <span className=\"flex items-center gap-1\">\n {tags.slice(0, maxTags).map((t, ti) => <Tag key={ti} tone={t.tone}>{t.label}</Tag>)}\n {extra > 0 ? <span className=\"text-[12px] text-text-secondary\">+{extra}</span> : null}\n </span>\n </td>\n <td className=\"px-2 py-2 text-[12.5px] text-text-secondary\">{row.lastInteraction}</td>\n <td className=\"px-2 py-2 pr-3 text-[12.5px] text-text-secondary\">{row.strength}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </Card>\n )\n}\n","import { PAD_Y, PILL_OFFSET, ROW_GAP } from \"./constant\";\nimport type { TStepNode } from \"./types\";\n\nexport type TOffsets = Record<string, { dx: number; dy: number }>;\nexport type THeights = Record<string, number>;\n\n/** Everything `place`/`bezier` need to position a node, resolved once per render. */\nexport type TLayout = {\n width: number;\n offsets: TOffsets;\n rows: number[];\n rowY: number[];\n heights: THeights;\n};\n\n/** Distinct row indices, ascending. */\nexport const rows = (steps: TStepNode[]) =>\n [...new Set(steps.map((n) => n.row))].sort((a, b) => a - b);\n\n/** Height of each row = tallest node in it. */\nexport const rowH = (steps: TStepNode[], heights: THeights) =>\n rows(steps).map((r) =>\n Math.max(...steps.filter((n) => n.row === r).map((n) => heights[n.id] ?? 90)),\n );\n\n/** Y offset of each row, stacked with ROW_GAP. */\nexport const rowYs = (rowH: number[]) =>\n rowH.map((_, i) => (i === 0 ? PAD_Y : PAD_Y + rowH.slice(0, i).reduce((a, b) => a + b, 0) + i * ROW_GAP));\n\nexport const canvasH = (rowY: number[], rowH: number[]) =>\n (rowY[rowY.length - 1] ?? PAD_Y) + (rowH[rowH.length - 1] ?? 0) + PAD_Y;\n\nexport const mix = (hue: string, pct: number, base = \"var(--surface)\") =>\n `color-mix(in srgb, ${hue} ${pct}%, ${base})`;\n\nexport const cw = (width: number) => width || 480;\n\nexport const place = (n: TStepNode, { width, offsets, rows, rowY }: TLayout) => {\n const w = Math.min(n.w, cw(width) * 0.92);\n const off = offsets[n.id];\n return {\n w,\n cx: n.x * cw(width) + (off?.dx ?? 0),\n top: (rowY[rows.indexOf(n.row)] ?? PAD_Y) + (off?.dy ?? 0),\n };\n};\n\n/** Card anchor points (pills sit above the card, so offset the top). */\nexport const anchors = (n: TStepNode, layout: TLayout) => {\n const { cx, top } = place(n, layout);\n return {\n top: { x: cx, y: top + (n.kind ? PILL_OFFSET : 0) },\n bottom: { x: cx, y: top + (layout.heights[n.id] ?? 90) },\n };\n};\n\nexport type TPoint = { x: number; y: number };\n\n/** Vertical S-curve between two points. */\nexport const curve = (from: TPoint, to: TPoint) => {\n const k = Math.min(Math.max(Math.abs(to.y - from.y) * 0.55, 24), 84);\n return `M ${from.x} ${from.y} C ${from.x} ${from.y + k}, ${to.x} ${to.y - k}, ${to.x} ${to.y}`;\n};\n\n/** Cubic bezier midpoint, where the connector toolbar sits. */\nexport const midpoint = (from: TPoint, to: TPoint): TPoint => ({ x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 });\n\nexport const edgePoints = (edge: { from: string; to: string }, steps: TStepNode[], layout: TLayout) => {\n const a = steps.find((n) => n.id === edge.from);\n const b = steps.find((n) => n.id === edge.to);\n if (!a || !b) return null;\n return { from: anchors(a, layout).bottom, to: anchors(b, layout).top };\n};\n\nexport const bezier = (edge: { from: string; to: string }, steps: TStepNode[], layout: TLayout) => {\n const pts = edgePoints(edge, steps, layout);\n return pts ? curve(pts.from, pts.to) : \"\";\n};\n","import React, { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport type { TEdge, TEdgeEnd, IFlowchartProps, TStepNode } from \"./types\";\nimport { anchors, bezier, canvasH, curve, cw, edgePoints, place, rowH, rows, rowYs, type THeights, type TLayout, type TOffsets, type TPoint } from \"./utils\";\nimport { EST_H, SNAP_RADIUS } from \"./constant\";\nimport { toastManager } from \"@/components/ui/toast\";\n\nexport const ZOOM_MIN = 0.25;\nexport const ZOOM_MAX = 2;\n\ntype TOptions = Pick<IFlowchartProps, \"edges\" | \"readOnly\" | \"zoomable\" | \"onDrag\" | \"onAdd\" | \"onRemove\" | \"onEdgeRemove\" | \"onEdgeConnect\" | \"onEdgeChange\" | \"onRename\" | \"onDuplicate\"> & {\n steps: TStepNode[];\n canvasRef: React.RefObject<HTMLDivElement | null>;\n};\n\n/** A connector end being dragged towards a new card; `snap` is the card whose anchor is in range. */\nexport type TEdgeDrag = { id: string; end: TEdgeEnd; point: TPoint; snap?: string };\n\n/** Pill text: explicit name, else the kind label, else \"Node n\" (conditions always count). */\nexport const nodeLabel = (node: TStepNode, index: number) =>\n node.name ?? (node.condition || !node.kind ? `Node ${index + 1}` : node.kind.label);\n\n/** Default connectors: a chain through the steps in order. */\nexport const chainEdges = (steps: TStepNode[]): TEdge[] =>\n steps.slice(1).map((n, i) => ({ id: `${steps[i].id}->${n.id}`, source: steps[i].id, target: n.id }));\n\nexport const useFlowchart = ({ steps, edges: edgesProp, readOnly = false, zoomable = false, onDrag, onAdd, onRemove, onEdgeRemove, onEdgeConnect, onEdgeChange, onRename, onDuplicate, canvasRef }: TOptions) => {\n /** Visible canvas box; the world behind it is twice this size. */\n const [frame, setFrame] = useState({ w: 0, h: 0 });\n const [heights, setHeights] = useState<THeights>(EST_H);\n const [selected, setSelected] = useState<string | null>(null);\n const [offsets, setOffsets] = useState<TOffsets>({});\n /** Zoom and pan of the world inside the frame (pan in frame px). */\n const [view, setView] = useState({ scale: 1, x: 0, y: 0 });\n const scale = view.scale;\n const pan = useRef<{ startX: number; startY: number; baseX: number; baseY: number; moved: boolean } | null>(null);\n const [pendingRemove, setPendingRemove] = useState<{ id: string; orphans: string[] } | null>(null);\n const [selectedEdge, setSelectedEdge] = useState<string | null>(null);\n const [edgeDrag, setEdgeDrag] = useState<TEdgeDrag | null>(null);\n /** Card highlighted while the user browses \"Connect to…\" in the context menu. */\n const [previewNode, setPreviewNode] = useState<string | null>(null);\n const drag = useRef<{\n id: string;\n startX: number;\n startY: number;\n baseDx: number;\n baseDy: number;\n moved: boolean;\n } | null>(null);\n\n const edges = useMemo(() => edgesProp ?? chainEdges(steps), [edgesProp, steps]);\n const rowHeight = useMemo(() => rowH(steps, heights), [heights, steps]);\n // The world is twice the frame so there is always hidden canvas to drag into view.\n const width = frame.w * 2;\n const layout = useMemo<TLayout>(() => {\n const _rows = rows(steps);\n return { width, offsets, rows: _rows, rowY: rowYs(rowHeight), heights };\n }, [steps, width, offsets, rowHeight, heights]);\n const canvasHeight = useMemo(() => canvasH(layout.rowY, rowHeight), [layout.rowY, rowHeight]);\n const connectorWidth = cw(width);\n const worldHeight = Math.max(canvasHeight, frame.h * 2);\n\n /** Keep the world covering the frame: clamp when it is larger, centre it when smaller. */\n const clampPan = useCallback(\n (x: number, y: number, s: number, f = frame) => {\n const fit = (offset: number, visible: number, content: number) =>\n content <= visible ? (visible - content) / 2 : Math.min(0, Math.max(visible - content, offset));\n return { x: fit(x, f.w, connectorWidth * s), y: fit(y, f.h, worldHeight * s) };\n },\n [frame, connectorWidth, worldHeight],\n );\n\n const updateHeights = useCallback((callback: (prev: THeights) => THeights) => setHeights(callback), []);\n const updateFrame = useCallback((w: number, h: number) => {\n setFrame((prev) => (prev.w === w && prev.h === h ? prev : { w, h }));\n // First measurement centres the world horizontally, top-aligned; later\n // width changes scale the pan so the view stays put as the world resizes.\n const prevW = frame.w;\n setView((v) => {\n if (w <= 0 || w === prevW) return v;\n return prevW === 0 ? { ...v, x: (w - w * 2 * v.scale) / 2, y: 0 } : { ...v, x: (v.x * w) / prevW };\n });\n }, [frame.w]);\n const updateSelected = (id: string | null) => {\n setSelected((prev) => (prev === id ? prev : id));\n if (id !== null) setSelectedEdge(null);\n };\n const editableEdges = !readOnly && Boolean(onEdgeRemove || onEdgeConnect || onEdgeChange);\n const selectEdge = (id: string | null) => {\n if (!editableEdges) return;\n setSelectedEdge(id);\n if (id !== null) setSelected(null);\n };\n /** Zoom about the frame centre so what is in the middle stays there. */\n const zoomTo = useCallback(\n (next: number) =>\n setView((v) => {\n const s = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, +next.toFixed(3)));\n const cx = frame.w / 2;\n const cy = frame.h / 2;\n const k = s / v.scale;\n return { scale: s, ...clampPan(cx - (cx - v.x) * k, cy - (cy - v.y) * k, s) };\n }),\n [frame, clampPan],\n );\n const zoomBy = useCallback((factor: number) => zoomTo(scale * factor), [zoomTo, scale]);\n const resetZoom = useCallback(() => zoomTo(1), [zoomTo]);\n\n /** Dragging empty canvas pans the world; a still click clears the selection. */\n const onCanvasPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n const target = event.target as Element;\n if (target.closest(\"[data-node], [data-ui], [data-edge-handle], [data-edge]\")) return;\n pan.current = { startX: event.clientX, startY: event.clientY, baseX: view.x, baseY: view.y, moved: false };\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n const onCanvasPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n const p = pan.current;\n if (!p) return;\n const dx = event.clientX - p.startX;\n const dy = event.clientY - p.startY;\n if (!p.moved && Math.hypot(dx, dy) < 3) return;\n p.moved = true;\n setView((v) => ({ ...v, ...clampPan(p.baseX + dx, p.baseY + dy, v.scale) }));\n };\n const onCanvasPointerUp = () => {\n const p = pan.current;\n pan.current = null;\n if (p && !p.moved) {\n setSelected(null);\n setSelectedEdge(null);\n }\n };\n const isPanning = () => pan.current?.moved === true;\n\n const onPointerDown = (node: TStepNode) => (event: React.PointerEvent<HTMLDivElement>) => {\n // Left button only: a right-press belongs to the context menu.\n if (readOnly || event.button !== 0) return;\n if ((event.target as Element).closest(\"[data-ui]\")) return;\n const off = offsets[node.id];\n drag.current = {\n id: node.id,\n startX: event.clientX,\n startY: event.clientY,\n baseDx: off?.dx ?? 0,\n baseDy: off?.dy ?? 0,\n moved: false,\n };\n // Capture only once a drag starts; capturing a still press retargets\n // its click to the wrapper instead of the node selection button.\n };\n\n const onPointerMove = (node: TStepNode) => (event: React.PointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || d.id !== node.id) return;\n const dx = d.baseDx + (event.clientX - d.startX) / scale;\n const dy = d.baseDy + (event.clientY - d.startY) / scale;\n if (!d.moved && Math.hypot(dx - d.baseDx, dy - d.baseDy) < 3) return;\n if (!d.moved) event.currentTarget.setPointerCapture(event.pointerId);\n d.moved = true;\n\n // keep the card inside the canvas\n const { w } = place(node, layout);\n const h = heights[node.id] ?? 90;\n const baseCx = node.x * connectorWidth;\n const baseTop = layout.rowY[layout.rows.indexOf(node.row)] ?? 0;\n const cx = Math.min(Math.max(baseCx + dx, w / 2 + 8), connectorWidth - w / 2 - 8);\n const top = Math.min(Math.max(baseTop + dy, 8), worldHeight - h - 8);\n setOffsets((current) => ({ ...current, [node.id]: { dx: cx - baseCx, dy: top - baseTop } }));\n };\n\n const onPointerUp = (node: TStepNode) => () => {\n const d = drag.current;\n if (d?.id !== node.id) return;\n if (d.moved) {\n onDrag?.(node.id, offsets[node.id] ?? { dx: 0, dy: 0 });\n // a real drag shouldn't also toggle selection\n setTimeout(() => (drag.current = null), 0);\n } else drag.current = null;\n };\n\n const wasDragged = () => drag.current?.moved === true;\n const isLit = (edge: TEdge) => selected === edge.source || selected === edge.target || selectedEdge === edge.id;\n\n /** Client → unscaled canvas coordinates. */\n const toCanvas = (clientX: number, clientY: number): TPoint => {\n const rect = canvasRef.current?.getBoundingClientRect();\n return { x: (clientX - (rect?.left ?? 0) - view.x) / scale, y: (clientY - (rect?.top ?? 0) - view.y) / scale };\n };\n const edgeEnds = (edge: TEdge) => edgePoints({ from: edge.source, to: edge.target }, steps, layout);\n\n const onEdgeHandleDown = (edge: TEdge, end: TEdgeEnd) => (event: React.PointerEvent<SVGElement>) => {\n if (!onEdgeConnect) return;\n event.stopPropagation();\n (event.currentTarget as Element).setPointerCapture(event.pointerId);\n setEdgeDrag({ id: edge.id, end, point: toCanvas(event.clientX, event.clientY) });\n };\n /** Nearest anchor of another card within SNAP_RADIUS: top anchors for a target end, bottom for a source end. */\n const snapCandidate = (edge: TEdge, end: TEdgeEnd, point: TPoint) => {\n const other = end === \"source\" ? edge.target : edge.source;\n let best: { id: string; d: number } | null = null;\n for (const node of steps) {\n if (node.id === other) continue;\n const a = anchors(node, layout);\n const p = end === \"source\" ? a.bottom : a.top;\n const d = Math.hypot(p.x - point.x, p.y - point.y);\n if (d <= SNAP_RADIUS && (!best || d < best.d)) best = { id: node.id, d };\n }\n return best?.id;\n };\n const onEdgeHandleMove = (event: React.PointerEvent<SVGElement>) => {\n if (!edgeDrag) return;\n const point = toCanvas(event.clientX, event.clientY);\n const edge = edges.find((e) => e.id === edgeDrag.id);\n const snap = edge ? snapCandidate(edge, edgeDrag.end, point) : undefined;\n setEdgeDrag({ ...edgeDrag, point, snap });\n };\n const onEdgeHandleUp = (event: React.PointerEvent<SVGElement>) => {\n if (!edgeDrag) return;\n const edge = edges.find((e) => e.id === edgeDrag.id);\n const card = document.elementFromPoint(event.clientX, event.clientY)?.closest<HTMLElement>(\"[data-node]\");\n const target = edgeDrag.snap ?? card?.dataset.node;\n setEdgeDrag(null);\n if (!edge || !target) return;\n const other = edgeDrag.end === \"source\" ? edge.target : edge.source;\n if (target === other || target === edge[edgeDrag.end]) return;\n onEdgeConnect?.({ ...edge, [edgeDrag.end]: target });\n };\n /** Path of the connector being re-routed, following the pointer. */\n const ghostCurve = () => {\n if (!edgeDrag) return \"\";\n const edge = edges.find((e) => e.id === edgeDrag.id);\n const pts = edge && edgeEnds(edge);\n if (!pts) return \"\";\n const snapNode = edgeDrag.snap ? steps.find((n) => n.id === edgeDrag.snap) : undefined;\n const point = snapNode ? anchors(snapNode, layout)[edgeDrag.end === \"source\" ? \"bottom\" : \"top\"] : edgeDrag.point;\n return edgeDrag.end === \"source\" ? curve(point, pts.to) : curve(pts.from, point);\n };\n /** \"Connect to…\": a new connector from `source` to `target`, unless one exists. */\n const connectTo = (source: string, target: string) => {\n if (source === target || edges.some((e) => e.source === source && e.target === target)) return;\n onEdgeConnect?.({ id: `${source}->${target}`, source, target });\n };\n const renameNode = (id: string, name: string) => {\n onRename?.(id, name);\n toastManager.add({ title: \"Node renamed\", description: name, type: \"success\" });\n };\n const duplicateNode = (id: string) => onDuplicate?.(id);\n const snapTarget = edgeDrag?.snap ?? null;\n const removeEdge = (id: string) => {\n setSelectedEdge(null);\n onEdgeRemove?.(id);\n };\n const bezierCurve = (edge: TEdge) => bezier({ from: edge.source, to: edge.target }, steps, layout);\n const handlePlace = (node: TStepNode) => place(node, layout);\n\n /** Children that would lose their only parent if `id` were removed. */\n const orphansOf = (id: string) =>\n edges\n .filter((e) => e.source === id)\n .map((e) => e.target)\n .filter((child) => !edges.some((e) => e.target === child && e.source !== id));\n\n const commitRemove = (id: string) => {\n if (selected === id) setSelected(null);\n setPendingRemove(null);\n onRemove?.(id);\n };\n\n /** Removes outright, or parks the id in `pendingRemove` for Root's AlertDialog when children would be orphaned. */\n const removeNode = (id: string) => {\n const orphans = orphansOf(id);\n if (orphans.length) setPendingRemove({ id, orphans });\n else commitRemove(id);\n };\n const cancelRemove = () => setPendingRemove(null);\n\n return {\n steps,\n edges,\n readOnly,\n zoomable,\n scale,\n view,\n zoomBy,\n resetZoom,\n onCanvasPointerDown,\n onCanvasPointerMove,\n onCanvasPointerUp,\n isPanning,\n frame,\n worldHeight,\n onAdd,\n removeNode,\n commitRemove,\n cancelRemove,\n pendingRemove,\n orphansOf,\n updateHeights,\n offsets,\n width,\n selected,\n drag,\n updateSelected,\n updateFrame,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n wasDragged,\n isLit,\n editableEdges,\n selectedEdge,\n selectEdge,\n edgeDrag,\n edgeEnds,\n onEdgeHandleDown,\n onEdgeHandleMove,\n onEdgeHandleUp,\n ghostCurve,\n removeEdge,\n onEdgeChange,\n snapTarget,\n previewNode,\n setPreviewNode,\n connectTo,\n renameNode,\n duplicateNode,\n canRename: Boolean(onRename),\n canDuplicate: Boolean(onDuplicate),\n canConnect: Boolean(onEdgeConnect),\n rowHeight,\n canvasHeight,\n connectorWidth,\n bezierCurve,\n handlePlace,\n };\n};\n\nexport type TFlowchartController = ReturnType<typeof useFlowchart>;\n\n/** Root owns the one `useFlowchart` instance; nodes read it from here. */\nexport const FlowchartContext = createContext<TFlowchartController | null>(null);\n\nexport const useFlowchartContext = () => {\n const ctx = useContext(FlowchartContext);\n if (!ctx) throw new Error(\"Flowchart.ChartNode must render inside Flowchart.Root\");\n return ctx;\n};\n","import type { IConnectorProps } from \"./types\"\n\nexport function Connector({ edge, isLit, selected, onPick, strokeWidth, ...props }: IConnectorProps) {\n const width = strokeWidth ?? edge.strokeWidth ?? 1.25\n const stroke = isLit ? \"var(--accent-default)\" : (edge.color ?? \"var(--line-strong)\")\n return (\n <g data-selected={selected || undefined}>\n <path\n data-edge={edge.id}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={selected ? width + 0.75 : width}\n className=\"transition-[stroke,stroke-width] duration-150\"\n {...props}\n />\n {onPick ? (\n // Wide invisible twin so a 1px line is clickable.\n <path\n d={props.d}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={14}\n className=\"pointer-events-auto cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation()\n onPick(edge.id)\n }}\n />\n ) : null}\n </g>\n )\n}\n","import { useState } from \"react\";\nimport { SelectChip, SourceChip } from \"@/components/atoms/chip\";\nimport { FLAVORS, PROPERTIES, TOPPINGS } from \"./constant\";\nimport type { TStepNode } from \"./types\";\nimport { mix } from \"./utils\";\n\n/* ── icons ── */\nfunction ConeIcon({ size = 16 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11\" />\n <path d=\"M17 7A5 5 0 0 0 7 7\" />\n <path d=\"M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4\" />\n </svg>\n );\n}\n\nexport function StepBody({ node }: { node: TStepNode }) {\n const hue = node.hue ?? \"var(--accent-default)\";\n return (\n <div className=\"flex items-center gap-2.5 p-2.5\">\n {node.image ? (\n <img\n alt={node.image.alt ?? \"\"}\n className=\"size-9 shrink-0 rounded-[8px] object-cover\"\n src={node.image.src}\n style={{ boxShadow: `0 0 0 1px ${mix(hue, 20)}` }}\n />\n ) : (\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-[8px] [&>svg]:size-4\"\n style={{\n background: mix(hue, 12),\n color: hue,\n boxShadow: `0 0 0 1px ${mix(hue, 20)}`,\n }}\n >\n {node.icon ?? <ConeIcon />}\n </span>\n )}\n <span className=\"min-w-0 text-left\">\n <span className=\"block truncate text-[13px] font-semibold leading-tight text-ink\">{node.title}</span>\n <span className=\"mt-0.5 block text-[12px] leading-snug text-ink-2\">{node.caption}</span>\n </span>\n </div>\n );\n}\n\n/** Default If/Else card body: two chip rows. Picking a value is a TODO until SelectChip's menu lands. */\nexport function ConditionBody() {\n const [open, setOpen] = useState<string | null>(null);\n const values: Record<string, string> = {\n prop1: \"flavor\",\n val1: \"Rocky Road\",\n prop2: \"topping\",\n val2: \"Brown butter bourbon brittle crunch\",\n };\n const toggle = (id: string) => setOpen((current) => (current === id ? null : id));\n const pick = () => setOpen(null);\n const chip = (id: string, items: { name: string; tag?: string }[], width: string, extra?: object) => (\n <SelectChip id={id} value={values[id]} items={items} width={width} open={open === id} onToggle={toggle} onPick={pick} {...extra} />\n );\n\n return (\n <div className=\"flex flex-col gap-1.5 px-3 py-2.5\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"w-7 text-[12.5px] text-ink-2\">If</span>\n <SourceChip />\n {chip(\"prop1\", PROPERTIES.map((name) => ({ name })), \"w-36\")}\n <span className=\"text-[12.5px] text-ink-2\">is</span>\n {chip(\"val1\", FLAVORS, \"w-44\", { dot: true, align: \"right\" })}\n </div>\n <div className=\"flex min-w-0 flex-wrap items-center gap-1.5\">\n <span className=\"w-7 text-[12.5px] text-ink-2\">and</span>\n <SourceChip />\n {chip(\"prop2\", PROPERTIES.map((name) => ({ name })), \"w-36\")}\n <span className=\"text-[12.5px] text-ink-2\">is</span>\n {chip(\"val2\", TOPPINGS, \"w-64\", { dot: true })}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Copy, Link2, Plus, Sparkles, Trash2 } from \"lucide-react\";\nimport type { IChartNodeProps } from \"./types\";\nimport { ConditionBody, StepBody } from \"./step-body\";\nimport { nodeLabel, useFlowchartContext } from \"./hooks\";\nimport { mix } from \"./utils\";\nimport {\n ContextMenu,\n ContextMenuItem,\n ContextMenuPopup,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubPopup,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from \"@/components/ui/context-menu\";\nimport { cn } from \"@/lib/utils\";\n\nexport function ChartNode({ node, index = 0, onRef, children }: IChartNodeProps) {\n const {\n steps, selected, updateSelected, onPointerDown, onPointerMove, onPointerUp, handlePlace, wasDragged, drag, readOnly, onAdd, removeNode,\n snapTarget, previewNode, setPreviewNode, connectTo, renameNode, duplicateNode, canRename, canDuplicate, canConnect,\n } = useFlowchartContext();\n const { w, cx, top } = handlePlace(node);\n const active = selected === node.id;\n const label = nodeLabel(node, index);\n const [draft, setDraft] = useState<string | null>(null);\n const body = children ?? node.children ?? (node.condition ? <ConditionBody /> : <StepBody node={node} />);\n const custom = children !== undefined || node.children !== undefined || node.condition;\n // Previewed: a connector end snapped here, or the user is hovering it in \"Connect to…\".\n const previewed = snapTarget === node.id || previewNode === node.id;\n const dimmed = previewNode !== null && !previewed;\n const toggle = () => {\n if (wasDragged()) return;\n updateSelected(active ? null : node.id);\n };\n const commitRename = () => {\n const next = draft?.trim();\n setDraft(null);\n if (next && next !== label) renameNode(node.id, next);\n };\n const cardClass = cn(\n \"w-full rounded-[18px] bg-surface text-left outline-none transition-[box-shadow,opacity] duration-150\",\n active ? \"shadow-[0_0_0_1.5px_var(--accent-default),0_2px_10px_rgba(0,0,0,0.045)]\" : \"shadow-card hover:shadow-raised\",\n previewed && \"shadow-[0_0_0_2px_var(--accent-default),0_2px_10px_rgba(0,0,0,0.045)]\",\n );\n const card = custom ? (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={active}\n onClick={(event) => {\n if ((event.target as Element).closest(\"[data-ui]\")) return;\n toggle();\n }}\n className={cn(cardClass, \"focus-visible:shadow-[0_0_0_1.5px_var(--accent-default)]\")}\n >\n {body}\n </div>\n ) : (\n <button type=\"button\" onClick={toggle} aria-pressed={active} className={cn(cardClass, \"cursor-pointer focus-visible:shadow-[0_0_0_1.5px_var(--accent-default)]\")}>\n {body}\n </button>\n );\n const others = steps.filter((n) => n.id !== node.id);\n\n return (\n <div\n ref={onRef}\n data-node={node.id}\n data-preview={previewed || undefined}\n onPointerDown={onPointerDown(node)}\n onPointerMove={onPointerMove(node)}\n onPointerUp={onPointerUp(node)}\n onKeyDown={(event) => {\n if (readOnly || !active || (event.key !== \"Delete\" && event.key !== \"Backspace\")) return;\n if ((event.target as Element).closest(\"[data-ui]\")) return;\n event.preventDefault();\n removeNode(node.id);\n }}\n className={cn(\n \"group absolute flex -translate-x-1/2 touch-none flex-col items-start gap-1.5 transition-opacity duration-150\",\n previewed && \"opacity-70\",\n dimmed && \"opacity-40\",\n )}\n style={{ left: cx, top, width: w, zIndex: drag.current?.id === node.id ? 2 : 1 }}\n >\n {node.kind || node.condition ? (\n draft !== null ? (\n <input\n data-ui\n aria-label=\"Node name\"\n autoFocus\n className=\"h-6 w-32 rounded-[6px] border border-accent-default bg-surface px-2 text-[11.5px] font-medium text-ink outline-none\"\n onBlur={commitRename}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") commitRename();\n if (event.key === \"Escape\") setDraft(null);\n }}\n value={draft}\n />\n ) : (\n <span\n data-ui\n data-slot=\"node-pill\"\n title={canRename && !readOnly ? \"Double-click to rename\" : undefined}\n onDoubleClick={() => {\n if (canRename && !readOnly) setDraft(label);\n }}\n className={cn(\"inline-flex h-6 items-center rounded-[6px] px-2 text-[11.5px] font-medium\", canRename && !readOnly && \"cursor-text\")}\n style={{\n background: mix(node.kind?.hue ?? \"var(--accent-default)\", 14, \"var(--page)\"),\n color: mix(node.kind?.hue ?? \"var(--accent-default)\", 80, \"var(--ink)\"),\n }}\n >\n {label}\n </span>\n )\n ) : null}\n {readOnly ? (\n <div className=\"relative w-full\">{card}</div>\n ) : (\n <ContextMenu onOpenChange={(open) => { if (!open) setPreviewNode(null); }}>\n <ContextMenuTrigger className=\"relative w-full\">{card}</ContextMenuTrigger>\n <ContextMenuPopup className=\"w-52\">\n <ContextMenuSub>\n <ContextMenuSubTrigger disabled={!canConnect || others.length === 0}>\n <Link2 /> Connect to…\n </ContextMenuSubTrigger>\n <ContextMenuSubPopup className=\"w-48\">\n {others.map((other, i) => (\n <ContextMenuItem\n key={other.id}\n onClick={() => connectTo(node.id, other.id)}\n onMouseEnter={() => setPreviewNode(other.id)}\n onMouseLeave={() => setPreviewNode(null)}\n >\n {other.title ?? nodeLabel(other, steps.indexOf(other) >= 0 ? steps.indexOf(other) : i)}\n </ContextMenuItem>\n ))}\n </ContextMenuSubPopup>\n </ContextMenuSub>\n <ContextMenuItem disabled={!onAdd} onClick={() => onAdd?.(node.id, \"bottom\")}>\n <Plus /> Add child\n </ContextMenuItem>\n <ContextMenuItem disabled>\n <Sparkles /> Ask Exegia…\n </ContextMenuItem>\n <ContextMenuSeparator />\n <ContextMenuItem disabled={!canDuplicate} onClick={() => duplicateNode(node.id)}>\n <Copy /> Duplicate\n </ContextMenuItem>\n <ContextMenuItem variant=\"destructive\" onClick={() => removeNode(node.id)}>\n <Trash2 /> Delete\n </ContextMenuItem>\n </ContextMenuPopup>\n </ContextMenu>\n )}\n </div>\n );\n}\n","import { Unlink } from \"lucide-react\"\nimport { IconButton } from \"@/components/ui/chat\"\nimport { cn } from \"@/lib/utils\"\nimport type { TEdge } from \"./types\"\nimport type { TPoint } from \"./utils\"\n\nconst WIDTHS = [1.25, 2, 3]\nconst COLORS = [\"var(--line-strong)\", \"var(--tag-purple-text)\", \"var(--tag-amber-text)\", \"var(--tag-blue-text)\", \"var(--tag-green-text)\"]\n\n/** Floats at a selected connector's midpoint: stroke widths, colours, disconnect. */\nexport function EdgeToolbar({\n edge,\n at,\n onChange,\n onRemove,\n}: {\n edge: TEdge\n at: TPoint\n onChange?: (id: string, patch: Pick<TEdge, \"strokeWidth\" | \"color\">) => void\n onRemove?: (id: string) => void\n}) {\n const width = edge.strokeWidth ?? 1.25\n const color = edge.color ?? COLORS[0]\n return (\n <div\n data-ui\n data-slot=\"edge-toolbar\"\n role=\"toolbar\"\n aria-label=\"Connector\"\n onClick={(event) => event.stopPropagation()}\n className=\"absolute z-20 flex -translate-x-1/2 -translate-y-1/2 items-center gap-1 rounded-md bg-surface p-1 shadow-btn\"\n style={{ left: at.x, top: at.y }}\n >\n {onChange\n ? WIDTHS.map((w) => (\n <button\n key={w}\n type=\"button\"\n aria-label={`Stroke ${w}`}\n aria-pressed={width === w}\n onClick={() => onChange(edge.id, { strokeWidth: w })}\n className={cn(\"flex size-6 items-center justify-center rounded-sm hover:bg-hover-2\", width === w && \"bg-hover-2\")}\n >\n <span className=\"w-3.5 rounded-full bg-ink\" style={{ height: w }} />\n </button>\n ))\n : null}\n {onChange ? <span aria-hidden className=\"mx-0.5 h-4 w-px bg-line\" /> : null}\n {onChange\n ? COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n aria-label={`Colour ${c}`}\n aria-pressed={color === c}\n onClick={() => onChange(edge.id, { color: c })}\n className={cn(\"flex size-6 items-center justify-center rounded-sm hover:bg-hover-2\", color === c && \"bg-hover-2\")}\n >\n <span className=\"size-3 rounded-full\" style={{ background: c }} />\n </button>\n ))\n : null}\n {onRemove ? (\n <>\n {onChange ? <span aria-hidden className=\"mx-0.5 h-4 w-px bg-line\" /> : null}\n <IconButton aria-label=\"Disconnect\" onClick={() => onRemove(edge.id)}>\n <Unlink />\n </IconButton>\n </>\n ) : null}\n </div>\n )\n}\n","\"use client\";\n\nimport { AlertDialog as AlertDialogPrimitive } from \"@base-ui/react/alert-dialog\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport const AlertDialogCreateHandle: typeof AlertDialogPrimitive.createHandle =\n AlertDialogPrimitive.createHandle;\n\nexport const AlertDialog: typeof AlertDialogPrimitive.Root =\n AlertDialogPrimitive.Root;\n\nexport const AlertDialogPortal: typeof AlertDialogPrimitive.Portal =\n AlertDialogPrimitive.Portal;\n\nexport function AlertDialogTrigger(\n props: AlertDialogPrimitive.Trigger.Props,\n): React.ReactElement {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n );\n}\n\nexport function AlertDialogBackdrop({\n className,\n ...props\n}: AlertDialogPrimitive.Backdrop.Props): React.ReactElement {\n return (\n <AlertDialogPrimitive.Backdrop\n className={cn(\n \"fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className,\n )}\n data-slot=\"alert-dialog-backdrop\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogViewport({\n className,\n ...props\n}: AlertDialogPrimitive.Viewport.Props): React.ReactElement {\n return (\n <AlertDialogPrimitive.Viewport\n className={cn(\n \"fixed inset-0 z-50 grid grid-rows-[1fr_auto_3fr] justify-items-center p-4\",\n className,\n )}\n data-slot=\"alert-dialog-viewport\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogPopup({\n className,\n bottomStickOnMobile = true,\n portalProps,\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n bottomStickOnMobile?: boolean;\n portalProps?: AlertDialogPrimitive.Portal.Props;\n}): React.ReactElement {\n return (\n <AlertDialogPortal {...portalProps}>\n <AlertDialogBackdrop />\n <AlertDialogViewport\n className={cn(\n bottomStickOnMobile &&\n \"max-sm:grid-rows-[1fr_auto] max-sm:p-0 max-sm:pt-12\",\n )}\n >\n <AlertDialogPrimitive.Popup\n className={cn(\n \"relative row-start-2 flex max-h-full min-h-0 w-full min-w-0 max-w-lg origin-center flex-col rounded-2xl border bg-popover not-dark:bg-clip-padding text-popover-foreground opacity-[calc(1-var(--nested-dialogs))] shadow-lg/5 transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:opacity-0 data-starting-style:opacity-0 sm:scale-[calc(1-0.1*var(--nested-dialogs))] sm:data-ending-style:scale-98 sm:data-starting-style:scale-98 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n bottomStickOnMobile &&\n \"max-sm:max-w-none max-sm:origin-bottom max-sm:rounded-none max-sm:border-x-0 max-sm:border-t max-sm:border-b-0 max-sm:data-ending-style:translate-y-4 max-sm:data-starting-style:translate-y-4 max-sm:before:hidden max-sm:before:rounded-none\",\n className,\n )}\n data-slot=\"alert-dialog-popup\"\n {...props}\n />\n </AlertDialogViewport>\n </AlertDialogPortal>\n );\n}\n\nexport function AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex flex-col gap-2 p-6 text-center max-sm:pb-4 sm:text-left\",\n className,\n )}\n data-slot=\"alert-dialog-header\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogFooter({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n variant?: \"default\" | \"bare\";\n}): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse gap-2 px-6 sm:flex-row sm:justify-end sm:rounded-b-[calc(var(--radius-2xl)-1px)]\",\n variant === \"default\" && \"border-t bg-muted/72 py-4\",\n variant === \"bare\" && \"pb-6\",\n className,\n )}\n data-slot=\"alert-dialog-footer\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogTitle({\n className,\n ...props\n}: AlertDialogPrimitive.Title.Props): React.ReactElement {\n return (\n <AlertDialogPrimitive.Title\n className={cn(\n \"font-heading font-semibold text-xl leading-none\",\n className,\n )}\n data-slot=\"alert-dialog-title\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogDescription({\n className,\n ...props\n}: AlertDialogPrimitive.Description.Props): React.ReactElement {\n return (\n <AlertDialogPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"alert-dialog-description\"\n {...props}\n />\n );\n}\n\nexport function AlertDialogClose(\n props: AlertDialogPrimitive.Close.Props,\n): React.ReactElement {\n return (\n <AlertDialogPrimitive.Close data-slot=\"alert-dialog-close\" {...props} />\n );\n}\n\nexport {\n AlertDialogPrimitive,\n AlertDialogBackdrop as AlertDialogOverlay,\n AlertDialogPopup as AlertDialogContent,\n};\n","\"use client\"\n\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport { Minus, Plus } from \"lucide-react\"\nimport type { IFlowchartProps, TStepNode } from \"./types\"\nimport { FlowchartContext, useFlowchart } from \"./hooks\"\nimport { AMBER, PURPLE } from \"./constant\"\nimport { Connector } from \"./connector\"\nimport { ChartNode } from \"./chart-node\"\nimport { EdgeToolbar } from \"./edge-toolbar\"\nimport { midpoint } from \"./utils\"\nimport { IconButton } from \"@/components/ui/chat\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n AlertDialog,\n AlertDialogClose,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogPopup,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { cn } from \"@/lib/utils\"\n\nconst NODES: TStepNode[] = [\n {\n id: \"trigger\",\n row: 0,\n x: 0.5,\n w: 300,\n kind: { label: \"Trigger\", hue: PURPLE },\n hue: PURPLE,\n title: \"Iliad corpus loaded\",\n caption: \"Homer · Greek epic corpus\",\n },\n {\n id: \"cond\",\n row: 1,\n x: 0.5,\n w: 356,\n kind: { label: \"Text node\", hue: AMBER },\n hue: AMBER,\n title: \"μῆνιν ἄειδε, θεά\",\n caption: \"Iliad 1.1 · 18 characters\",\n },\n]\n\n/**\n * Dot-grid canvas of draggable, selectable step cards joined by bezier connectors.\n *\n * @sketch \"Component / Flowchart\"\n */\nexport default function Flowchart({ steps = NODES, edges, readOnly, zoomable, height, onDrag, onAdd, onRemove, onEdgeRemove, onEdgeConnect, onEdgeChange, onRename, onDuplicate, className, children }: IFlowchartProps) {\n const canvasRef = useRef<HTMLDivElement>(null)\n const nodeRefs = useRef(new Map<string, HTMLElement>())\n const chart = useFlowchart({ steps, edges, readOnly, zoomable, onDrag, onAdd, onRemove, onEdgeRemove, onEdgeConnect, onEdgeChange, onRename, onDuplicate, canvasRef })\n const {\n updateHeights, updateFrame, canvasHeight, worldHeight, isLit, bezierCurve, connectorWidth, scale, view, zoomBy, resetZoom, pendingRemove, commitRemove, cancelRemove,\n onCanvasPointerDown, onCanvasPointerMove, onCanvasPointerUp, isPanning,\n editableEdges, selectedEdge, selectEdge, edgeDrag, edgeEnds, onEdgeHandleDown, onEdgeHandleMove, onEdgeHandleUp, ghostCurve, removeEdge,\n } = chart\n // The canvas fills its parent; its floor is the content height it loaded with\n // (or `height`), so zooming out or removing a card never collapses it.\n const [floor, setFloor] = useState<number | null>(null)\n if (floor === null && chart.frame.w > 0) setFloor(canvasHeight)\n const minHeight = height ?? floor ?? canvasHeight\n const selectedEdgeObj = chart.edges.find((e) => e.id === selectedEdge)\n const selectedEnds = selectedEdgeObj ? edgeEnds(selectedEdgeObj) : null\n\n useLayoutEffect(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n\n const measure = () => {\n updateFrame(canvas.clientWidth, canvas.clientHeight)\n updateHeights((prev) => {\n const next = { ...prev }\n let changed = false\n nodeRefs.current.forEach((el, id) => {\n const h = el.offsetHeight\n if (h && Math.abs(h - (next[id] ?? 0)) > 0.5) {\n next[id] = h\n changed = true\n }\n })\n return changed ? next : prev\n })\n }\n\n measure()\n if (typeof ResizeObserver === \"undefined\") return\n const observer = new ResizeObserver(measure)\n observer.observe(canvas)\n nodeRefs.current.forEach((el) => observer.observe(el))\n return () => observer.disconnect()\n }, [updateHeights, updateFrame, steps])\n\n // React's onWheel is passive, so preventDefault (no page scroll while zooming) needs a native listener.\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas || !zoomable) return\n const onWheel = (event: WheelEvent) => {\n if (!event.ctrlKey && !event.metaKey) return\n event.preventDefault()\n zoomBy(event.deltaY < 0 ? 1.1 : 1 / 1.1)\n }\n canvas.addEventListener(\"wheel\", onWheel, { passive: false })\n return () => canvas.removeEventListener(\"wheel\", onWheel)\n }, [zoomable, zoomBy])\n\n return (\n <FlowchartContext.Provider value={chart}>\n <div\n ref={canvasRef}\n data-slot=\"flowchart\"\n data-readonly={readOnly || undefined}\n className={cn(\n \"rounded-card bg-page shadow-hairline relative h-full w-full touch-none overflow-hidden select-none\",\n \"transition-[background-size,background-position] duration-300 ease-[var(--ease-out-strong)] motion-reduce:transition-none\",\n isPanning() ? \"cursor-grabbing\" : \"cursor-grab\",\n className,\n )}\n onPointerDown={onCanvasPointerDown}\n onPointerMove={onCanvasPointerMove}\n onPointerUp={onCanvasPointerUp}\n onPointerCancel={onCanvasPointerUp}\n style={{\n minHeight,\n backgroundImage: \"radial-gradient(var(--line-strong) 1px, transparent 1.25px)\",\n backgroundSize: `${22 * scale}px ${22 * scale}px`,\n backgroundPosition: `${view.x}px ${view.y}px`,\n }}\n >\n {children}\n <div\n data-slot=\"flowchart-world\"\n className={cn(\"absolute top-0 left-0 origin-top-left\", !isPanning() && \"transition-transform duration-300 ease-[var(--ease-out-strong)] motion-reduce:transition-none\")}\n style={{ width: connectorWidth, height: worldHeight, transform: `translate(${view.x}px, ${view.y}px) scale(${scale})` }}\n >\n <svg width={connectorWidth} height={worldHeight} className=\"pointer-events-none absolute inset-0 overflow-visible\">\n {chart.edges.map((edge) => (\n <Connector\n key={edge.id}\n edge={edge}\n isLit={isLit(edge)}\n selected={selectedEdge === edge.id}\n onPick={editableEdges ? selectEdge : undefined}\n d={bezierCurve(edge)}\n />\n ))}\n </svg>\n {selectedEdgeObj && selectedEnds ? (\n <EdgeToolbar\n edge={selectedEdgeObj}\n at={midpoint(selectedEnds.from, selectedEnds.to)}\n onChange={onEdgeChange}\n onRemove={onEdgeRemove ? removeEdge : undefined}\n />\n ) : null}\n {steps.map((node, index) => (\n <ChartNode\n key={node.id}\n index={index}\n node={node}\n onRef={(el) => {\n if (el) nodeRefs.current.set(node.id, el)\n else nodeRefs.current.delete(node.id)\n }}\n />\n ))}\n {/* Above the cards, so the grab handles are reachable at a card's edge. */}\n <svg width={connectorWidth} height={worldHeight} className=\"pointer-events-none absolute inset-0 z-10 overflow-visible\">\n {edgeDrag ? (\n <path data-edge-ghost fill=\"none\" stroke=\"var(--accent-default)\" strokeWidth={1.5} strokeDasharray=\"4 3\" d={ghostCurve()} />\n ) : null}\n {selectedEdgeObj && selectedEnds && onEdgeConnect\n ? ([\"source\", \"target\"] as const).map((end) => {\n const p = end === \"source\" ? selectedEnds.from : selectedEnds.to\n return (\n <g key={end}>\n <circle cx={p.x} cy={p.y} r={5} fill=\"var(--surface)\" stroke=\"var(--accent-default)\" strokeWidth={1.5} />\n {/* Generous invisible grab target over the 5px dot. */}\n <circle\n data-edge-handle={end}\n cx={p.x}\n cy={p.y}\n r={12}\n fill=\"transparent\"\n className=\"pointer-events-auto cursor-grab touch-none active:cursor-grabbing\"\n onPointerDown={onEdgeHandleDown(selectedEdgeObj, end)}\n onPointerMove={onEdgeHandleMove}\n onPointerUp={onEdgeHandleUp}\n />\n </g>\n )\n })\n : null}\n </svg>\n </div>\n {zoomable ? (\n <div data-ui className=\"absolute right-2 bottom-2 flex items-center gap-0.5 rounded-md bg-surface p-0.5 shadow-btn\">\n <IconButton aria-label=\"Zoom out\" onClick={() => zoomBy(1 / 1.25)}><Minus /></IconButton>\n <button type=\"button\" onClick={resetZoom} className=\"min-w-10 text-center text-[11px] tabular-nums text-ink-2\">\n {Math.round(scale * 100)}%\n </button>\n <IconButton aria-label=\"Zoom in\" onClick={() => zoomBy(1.25)}><Plus /></IconButton>\n </div>\n ) : null}\n </div>\n <AlertDialog open={pendingRemove !== null} onOpenChange={(open) => { if (!open) cancelRemove() }}>\n <AlertDialogPopup>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete this node?</AlertDialogTitle>\n <AlertDialogDescription>\n {pendingRemove?.orphans.length === 1\n ? \"One child node has no other parent and will be left orphaned.\"\n : `${pendingRemove?.orphans.length ?? 0} child nodes have no other parent and will be left orphaned.`}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogClose render={<Button variant=\"ghost\" />}>Cancel</AlertDialogClose>\n <Button variant=\"destructive\" onClick={() => pendingRemove && commitRemove(pendingRemove.id)}>\n Delete anyway\n </Button>\n </AlertDialogFooter>\n </AlertDialogPopup>\n </AlertDialog>\n </FlowchartContext.Provider>\n )\n}\n","import Root from \"./default\"\nimport { Connector } from \"./connector\"\nimport { ChartNode } from \"./chart-node\"\n\nexport type * from \"./types\"\nexport * from \"./hooks\"\n\nexport const Flowchart = {\n Root,\n Connector,\n ChartNode,\n}\n\nexport default Root\n","\"use client\"\n\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Card, CardFrame, CardFrameHeader, CardPanel } from \"@/components/ui/card\"\nimport { SPRING_SWAP } from \"@/lib/ease\"\nimport { DOT_TONE_CLASSES, Dot, FollowUpRow, IconButton, Pill, Stat, type TDotTone, type IStatProps } from \"@/components/ui/chat\"\nimport { Chart, type TChartDatum, type IChartSeries } from \"./chart\"\n\nexport interface IInsight {\n /** Sentence; `entity` is highlighted with a dot in front. */\n summary: React.ReactNode\n stats?: IStatProps[]\n snapshot?: { label?: React.ReactNode; badge?: React.ReactNode; data: TChartDatum[]; series: IChartSeries[] }\n /** Share breakdown: tile + big value, a segmented bar, selectable legend pills and a detail panel. */\n allocation?: IInsightAllocation\n followUp?: string\n}\n\nexport interface IInsightSegment {\n key: string\n label: React.ReactNode\n value: number\n tone?: TDotTone\n /** Detail panel heading; falls back to `label`. */\n title?: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface IInsightAllocation {\n label: React.ReactNode\n value: React.ReactNode\n /** Letter in the tile; takes the first segment's tone. */\n initials?: string\n segments: IInsightSegment[]\n defaultSelected?: string\n}\n\nconst TONE_TEXT: Record<TDotTone, string> = {\n success: \"text-semantic-success\", warning: \"text-semantic-warning\", info: \"text-semantic-info\", danger: \"text-semantic-danger\",\n neutral: \"text-text-muted\", accent: \"text-accent-default\", brand: \"text-brand\",\n \"series-1\": \"text-chart-series-1\", \"series-2\": \"text-chart-series-2\", \"series-3\": \"text-chart-series-3\", \"series-4\": \"text-chart-series-4\", \"series-5\": \"text-chart-series-5\",\n}\n\nconst pct = (n: number, total: number) => `${Math.round((n / total) * 1000) / 10}%`\n\n/** @sketch beautiful-ui \"Insight Cards / allocation\" — segment selection changes the inspected group without moving the card. */\nfunction Allocation({ label, value, initials, segments, defaultSelected }: IInsightAllocation): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const [selected, setSelected] = React.useState(defaultSelected ?? segments[0]?.key)\n const total = segments.reduce((n, s) => n + s.value, 0) || 1\n const active = segments.find((s) => s.key === selected) ?? segments[0]\n const tone = (s?: IInsightSegment) => s?.tone ?? \"series-1\"\n\n return (\n <CardPanel data-slot=\"insight-allocation\" className=\"flex flex-col gap-3 p-3\">\n <span className=\"flex items-center gap-2 text-[12.5px] text-text-secondary\">\n <span className={cn(\"inline-flex size-5 items-center justify-center rounded-full text-[9px] font-semibold text-white\", DOT_TONE_CLASSES[tone(segments[0])])}>\n {initials ?? String(label).slice(0, 1).toUpperCase()}\n </span>\n {label}\n </span>\n <span className=\"text-[26px] font-semibold leading-8 tracking-tight text-text-primary\">{value}</span>\n <div className=\"flex h-6 gap-1\" role=\"group\" aria-label=\"Share by segment\">\n {segments.map((s) => (\n <button\n key={s.key}\n type=\"button\"\n aria-label={typeof s.label === \"string\" ? s.label : undefined}\n aria-pressed={s.key === active?.key}\n onClick={() => setSelected(s.key)}\n style={{ flexGrow: s.value }}\n className={cn(\n \"min-w-1.5 rounded-full outline-none transition-[opacity,box-shadow] duration-300 ease-[var(--ease-out-strong)] focus-visible:ring-2 focus-visible:ring-ring\",\n s.key === active?.key ? cn(\"ring-2 ring-inset ring-white/25\", DOT_TONE_CLASSES[tone(s)]) : \"bg-surface-subtle hover:opacity-80\"\n )}\n />\n ))}\n </div>\n <div className=\"flex flex-wrap gap-1.5\">\n {segments.map((s) => (\n <button\n key={s.key}\n type=\"button\"\n aria-pressed={s.key === active?.key}\n onClick={() => setSelected(s.key)}\n className={cn(\n \"inline-flex h-5 items-center gap-1.5 rounded-full px-2 text-[11px] font-medium leading-none outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring\",\n s.key === active?.key ? \"bg-surface-subtle text-text-primary\" : \"text-text-secondary hover:text-text-primary\"\n )}\n >\n <Dot tone={s.key === active?.key ? tone(s) : \"neutral\"} />\n {s.label} {pct(s.value, total)}\n </button>\n ))}\n </div>\n {active ? (\n <AnimatePresence initial={false} mode=\"wait\">\n <motion.div\n key={active.key}\n initial={reduceMotion ? false : { opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={reduceMotion ? undefined : { opacity: 0, y: -4 }}\n transition={reduceMotion ? { duration: 0 } : SPRING_SWAP}\n className=\"flex flex-col gap-1 rounded-md bg-surface-subtle px-3 py-2.5\"\n >\n <span className={cn(\"text-[12px] font-semibold leading-4\", TONE_TEXT[tone(active)])}>{active.title ?? active.label}</span>\n {active.description ? <span className=\"text-[12px] leading-4 text-text-secondary\">{active.description}</span> : null}\n </motion.div>\n </AnimatePresence>\n ) : null}\n </CardPanel>\n )\n}\n\nexport interface IInsightCardsProps extends React.ComponentPropsWithoutRef<\"div\"> {\n header?: React.ReactNode\n insights: IInsight[]\n index?: number\n defaultIndex?: number\n onIndexChange?: (index: number) => void\n onFollowUp?: (text: string) => void\n}\n\n/**\n * Paged insights: header with count and prev/next, summary, stats,\n * a trend snapshot (line plot + legend) or an allocation breakdown, and a follow-up prompt.\n *\n * @sketch \"Component / Insight Cards\"\n */\nexport function InsightCards({ header = \"Insights\", insights, index, defaultIndex = 0, onIndexChange, onFollowUp, className, ...props }: IInsightCardsProps): React.ReactElement {\n const reduceMotion = useReducedMotion()\n const [internal, setInternal] = React.useState(defaultIndex)\n const current = Math.min(index ?? internal, Math.max(insights.length - 1, 0))\n // Which way the card slides: next pulls the new one up from below, previous from above.\n const [direction, setDirection] = React.useState(1)\n const go = (next: number) => {\n setDirection(next > current ? 1 : -1)\n if (index === undefined) setInternal(next)\n onIndexChange?.(next)\n }\n const insight = insights[current]\n const offset = reduceMotion ? 0 : 24 * direction\n\n return (\n <div data-slot=\"insight-cards\" className={cn(\"flex w-[344px] max-w-full flex-col gap-2.5\", className)} {...props}>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[13px] font-semibold leading-4 text-text-primary\">{header}</span>\n <span className=\"text-[13px] text-text-muted\">{insights.length}</span>\n <span className=\"ml-auto flex items-center gap-0.5\">\n <IconButton aria-label=\"Previous insight\" disabled={current <= 0} onClick={() => go(current - 1)}><ChevronUp /></IconButton>\n <IconButton aria-label=\"Next insight\" disabled={current >= insights.length - 1} onClick={() => go(current + 1)}><ChevronDown /></IconButton>\n </span>\n </div>\n <AnimatePresence custom={direction} initial={false} mode=\"popLayout\">\n {insight ? (\n <motion.div\n key={current}\n className=\"flex flex-col gap-2.5\"\n initial={{ opacity: 0, y: offset }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -offset }}\n transition={reduceMotion ? { duration: 0 } : SPRING_SWAP}\n >\n <p className=\"text-[13px] leading-[15px] text-text-secondary [&_[data-slot=dot]]:mx-0.5 [&_[data-slot=dot]]:inline-block [&_[data-slot=dot]]:align-middle\">\n {insight.summary}\n </p>\n <CardFrame className=\"[--frame-radius:var(--radius-md)]\">\n {insight.stats?.length ? (\n <CardFrameHeader className=\"flex flex-row gap-4 p-4\">\n {insight.stats.map((s, i) => <Stat key={i} {...s} />)}\n </CardFrameHeader>\n ) : null}\n {insight.allocation ? <Card><Allocation {...insight.allocation} /></Card> : null}\n {insight.snapshot ? (\n <Card><CardPanel className=\"flex flex-col gap-2 p-2.5\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[11px] leading-3 text-text-secondary\">{insight.snapshot.label ?? \"Trend snapshot\"}</span>\n <Pill>{insight.snapshot.badge ?? \"Snapshot\"}</Pill>\n </div>\n <Chart type=\"line\" headerless plotHeight={110} data={insight.snapshot.data} series={insight.snapshot.series} className=\"w-full\" />\n </CardPanel></Card>\n ) : null}\n </CardFrame>\n {insight.followUp ? <FollowUpRow onSelect={() => onFollowUp?.(insight.followUp!)} className=\"w-fit rounded-full border border-border-default bg-surface-card px-3 hover:bg-surface-subtle\">{insight.followUp}</FollowUpRow> : null}\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n )\n}\n\n/** Inline entity marker for `Insight.summary`: dot + name. */\nexport function InsightEntity({ tone = \"neutral\", children }: { tone?: TDotTone; children: React.ReactNode }): React.ReactElement {\n return <><Dot tone={tone} size={8} /> {children}</>\n}\n\n","import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Kbd({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\n \"pointer-events-none inline-flex h-5 min-w-5 select-none items-center justify-center gap-1 rounded-[.35rem] font-medium font-sans text-muted-foreground text-xs [&_svg:not([class*='size-'])]:size-3 border border-border bg-black/5 px-1\",\n \"shadow-[inset_0_-1px_0_rgb(0_0_0/0.08)] dark:border-white/10 dark:bg-white/6 dark:shadow-[inset_0_-1px_0_rgb(0_0_0/0.4)]\",\n className,\n )}\n data-slot=\"kbd\"\n {...props}\n />\n );\n}\n\nexport function KbdGroup({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\"inline-flex items-center gap-1\", className)}\n data-slot=\"kbd-group\"\n {...props}\n />\n );\n}\n","import { Kbd, KbdGroup } from \"@/components/ui/kbd\";\nimport { SPRING_LAYOUT } from \"@/lib/ease\";\nimport { cn } from \"@/lib/utils\";\nimport { useReducedMotion, motion } from \"motion/react\";\n\n\n/** \"Press ⌘ + ↵ to send message\" — the composer's send hint. */\nexport function SendHint({\n className,\n verbose = true,\n}: {\n className?: string\n /** Pin the keycaps to the end and drop the trailing \"to send message\". */\n verbose?: boolean\n}): React.ReactElement {\n const reduceMotion = useReducedMotion()\n // `justify-content` and `display` are discrete — they snap rather than tween.\n // A spacer whose flex-grow rises 0 → 1 buys the start → end shift, and it\n // takes exactly the room the collapsing label gives back, so both halves ride\n // the same spring.\n const transition = reduceMotion ? { duration: 0 } : SPRING_LAYOUT\n\n return (\n <motion.span\n className={cn(\n \"flex flex-1 items-center gap-1.5 text-sm whitespace-nowrap text-muted-foreground/60\",\n className\n )}\n data-slot=\"send-hint\"\n >\n <motion.span\n aria-hidden=\"true\"\n animate={{ flexGrow: verbose ? 1 : 0 }}\n className=\"inline-flex shrink-0 basis-0 items-center\"\n initial={false}\n transition={transition}\n />\n Press\n <KbdGroup className=\"max-h-3 items-center\">\n <Kbd aria-label=\"Command\">⌘</Kbd>\n <Kbd aria-label=\"Enter\" className=\"w-8\">\n ↵\n </Kbd>\n </KbdGroup>\n <motion.span\n animate={{\n opacity: verbose ? 0 : 1,\n width: verbose ? 0 : \"auto\",\n x: verbose ? -8 : 0,\n }}\n className=\"inline-block shrink-0 overflow-hidden\"\n initial={false}\n transition={transition}\n >\n to send message\n </motion.span>\n </motion.span>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Lock, Plus } from \"lucide-react\"\nimport { Tooltip, TooltipPopup, TooltipTrigger } from \"@/components/ui/tooltip\"\nimport type { IAiPanelHeaderProps } from \"./type\"\n\nfunction LockedHint({ locked }: { locked?: boolean }): React.ReactElement {\n return (\n <Tooltip>\n <TooltipTrigger\n disabled={locked}\n render={\n <Button variant=\"ghost\" size=\"icon-xs\" className=\"opacity-50\" />\n }\n >\n <Lock className=\"size-3\" />\n </TooltipTrigger>\n <TooltipPopup side=\"bottom\">\n <div>\n <div className=\"flex items-center gap-1\">\n <Lock className=\"size-2.5\" />\n <h6 className=\"text-sm\">Published corpus</h6>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Editing is disabled. Answers only.\n </p>\n </div>\n </TooltipPopup>\n </Tooltip>\n )\n}\n\n/** The panel's sticky top row: title, lock hint and the new-thread button. */\nexport function AiPanelHeader({\n title,\n locked = false,\n onNewThread,\n}: IAiPanelHeaderProps): React.ReactElement {\n return (\n <header className=\"sticky top-0 flex shrink-0 flex-col items-center gap-2 border-b border-border bg-sidebar p-3.5\">\n <div className=\"flex w-full flex-row items-center justify-between\">\n <div className=\"flex flex-1 items-center\">\n <h2 className=\"text-sm font-semibold text-foreground\">{title}</h2>\n {!locked && <LockedHint locked={locked} />}\n </div>\n <Button\n className={cn(\"font-semibold\")}\n onClick={onNewThread}\n size=\"icon-xs\"\n variant=\"ghost\"\n >\n <Plus className=\"size-4 stroke-3\" />\n </Button>\n </div>\n </header>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { accentRing, mutedText } from \"./shared\"\nimport { Sparkles } from \"lucide-react\"\nimport type { ISuggestedPromptsProps } from \"./type\";\n\n\nexport function SuggestedPrompts({\n prompts = [],\n onSelect,\n emptyLabel = \"Ask about this selection or validate it against the schema.\",\n className,\n}: ISuggestedPromptsProps): React.ReactElement | null {\n if (!prompts.length) {\n return (\n <p className={cn(\"px-1 py-3\", mutedText, className)} data-empty=\"true\">\n <Sparkles className=\"mr-1.5\" />\n {emptyLabel}\n </p>\n )\n }\n return (\n <div\n className={cn(\"grid gap-1.5\", className)}\n aria-label=\"Suggested prompts\"\n >\n {prompts.map((prompt) => (\n <Button\n className={cn(\n \"h-auto justify-start border bg-muted/30 px-3 py-2 text-left text-xs font-normal whitespace-normal text-muted-foreground hover:border-amber-500/30 hover:text-foreground sm:h-auto sm:text-xs\",\n accentRing\n )}\n key={prompt}\n onClick={() => onSelect?.(prompt)}\n variant=\"ghost\"\n >\n {prompt}\n </Button>\n ))}\n </div>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Composer } from \"@/components/composed/chat/composer\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport Background from \"@/components/atoms/background\"\nimport { AiPanelHeader } from \"./header\"\nimport { SuggestedPrompts } from \"./suggested-prompts\"\nimport type { IAiPanelProps } from \"./type\"\n\n/**\n * Full-height curation rail, designed to sit inside a host container such as\n * the shell's right panel — it brings no surface chrome or close affordance\n * of its own. Data fetching, streaming and version writes stay with the host\n * application; this component only establishes layout and the focus order\n * shared by all panel states.\n */\nexport function AiPanel({\n onNewThread,\n thread,\n prompts = [],\n onPromptSelect,\n composerProps,\n locked = false,\n headerTitle = \"AI panel\",\n className,\n ...props\n}: IAiPanelProps): React.ReactElement {\n return (\n // A landmark, not a bare div: `aria-label` on a roleless element is not\n // exposed, so the panel would lose both its name and its region.\n <aside\n aria-label={headerTitle}\n className={cn(\n \"relative flex h-full w-full flex-col bg-background\",\n className\n )}\n data-slot=\"ai-panel\"\n {...props}\n >\n <Background.Texture\n variant=\"paper\"\n className=\"relative flex h-full w-full flex-col\"\n >\n <AiPanelHeader\n locked={locked}\n onNewThread={onNewThread}\n title={headerTitle}\n />\n\n <div className=\"relative min-h-0 flex-1\">\n <ScrollArea\n aria-label=\"Thread\"\n role=\"region\"\n scrollFade=\"bottom\"\n fill\n >\n {/* `w-full`, not `mx-auto`: as a flex item, auto margins shrink the\n column to fit-content, so the thread would drift off the\n composer's gutters. px-3 lines it up with the footer. */}\n <div className=\"flex min-h-0 flex-1 flex-col px-5\">\n <div className=\"w-full\">{thread}</div>\n {!thread && (\n <div className=\"flex h-full min-h-44 flex-col justify-end\">\n <SuggestedPrompts\n onSelect={onPromptSelect}\n prompts={prompts}\n />\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n <footer className=\"shrink-0 px-5 pb-3.5\">\n <Composer\n {...composerProps}\n disabled={locked || composerProps?.disabled}\n />\n </footer>\n </Background.Texture>\n </aside>\n )\n}\n","\"use client\"\n\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport type * as React from \"react\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { cn } from \"@/lib/utils\"\n\nexport const groupVariants = cva(\n \"flex w-fit *:focus-visible:z-1 *:has-focus-visible:z-1 has-[>[data-slot=group]]:gap-2 dark:*:[[data-slot=separator]:has(~button:hover):not(:has(~[data-slot=separator]~[data-slot]:hover)),[data-slot=separator]:has(~[data-slot][data-pressed]):not(:has(~[data-slot=separator]~[data-slot][data-pressed]))]:before:bg-input/64 dark:*:[button:hover~[data-slot=separator]:not([data-slot]:hover~[data-slot=separator]~[data-slot=separator]),[data-slot][data-pressed]~[data-slot=separator]:not([data-slot][data-pressed]~[data-slot=separator]~[data-slot=separator])]:before:bg-input/64\",\n {\n defaultVariants: {\n orientation: \"horizontal\",\n },\n variants: {\n orientation: {\n horizontal:\n \"*:data-slot:has-[~[data-slot]]:rounded-e-none *:data-slot:has-[~[data-slot]]:border-e-0 *:data-slot:has-[~[data-slot]]:before:rounded-e-none *:data-slot:not-data-[slot=separator]:has-[~[data-slot]]:before:-end-[0.5px] *:pointer-coarse:after:min-w-auto *:[[data-slot]~[data-slot]]:rounded-s-none *:[[data-slot]~[data-slot]]:border-s-0 *:[[data-slot]~[data-slot]]:before:rounded-s-none *:[[data-slot]~[data-slot]:not([data-slot=separator])]:before:-start-[0.5px]\",\n vertical:\n \"flex-col *:data-slot:has-[~[data-slot]]:rounded-b-none *:data-slot:has-[~[data-slot]]:border-b-0 *:data-slot:has-[~[data-slot]]:before:rounded-b-none *:data-slot:not-data-[slot=separator]:has-[~[data-slot]]:before:-bottom-[0.5px] *:data-slot:not-data-[slot=separator]:has-[~[data-slot]]:before:hidden dark:*:first:before:block dark:*:last:before:hidden *:pointer-coarse:after:min-h-auto *:[[data-slot]~[data-slot]]:rounded-t-none *:[[data-slot]~[data-slot]]:border-t-0 *:[[data-slot]~[data-slot]]:before:rounded-t-none *:[[data-slot]~[data-slot]:not([data-slot=separator])]:before:-top-[0.5px]\",\n },\n },\n }\n)\n\nexport function Group({\n className,\n orientation,\n children,\n ...props\n}: {\n className?: string\n orientation?: VariantProps<typeof groupVariants>[\"orientation\"]\n children: React.ReactNode\n} & React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(groupVariants({ orientation }), className)}\n data-orientation={orientation}\n data-slot=\"group\"\n role=\"group\"\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function GroupText({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"relative inline-flex items-center gap-2 rounded-md border border-input bg-muted px-[calc(--spacing(3)-1px)] text-base whitespace-nowrap text-muted-foreground shadow-xs/5 transition-shadow outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/6%)] sm:text-sm dark:bg-input/64 dark:before:shadow-[0_-1px_--theme(--color-white/6%)] [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4\",\n className\n ),\n \"data-slot\": \"group-text\",\n }\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps(defaultProps, props),\n render,\n })\n}\n\nexport function GroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: {\n className?: string\n} & React.ComponentProps<typeof Separator>): React.ReactElement {\n return (\n <Separator\n className={cn(\n \"pointer-events-none relative z-2 bg-input before:absolute before:inset-0 has-[+[data-slot=input-control]:focus-within,+[data-slot=input-group]:focus-within,+[data-slot=select-trigger]:focus-visible+*,+[data-slot=number-field]:focus-within]:translate-x-px has-[+[data-slot=input-control]:focus-within,+[data-slot=input-group]:focus-within,+[data-slot=select-trigger]:focus-visible+*,+[data-slot=number-field]:focus-within]:bg-ring dark:before:bg-input/32 [[data-slot=input-control]:focus-within+&,[data-slot=input-group]:focus-within+&,[data-slot=select-trigger]:focus-visible+*+&,[data-slot=number-field]:focus-within+&,[data-slot=number-field]:focus-within+input+&]:bg-ring [[data-slot=input-control]:focus-within+&,[data-slot=input-group]:focus-within+&,[data-slot=select-trigger]:focus-visible+*+&,[data-slot=number-field]:focus-within+input+&]:-translate-x-px\",\n className\n )}\n orientation={orientation}\n {...props}\n />\n )\n}\n\nexport {\n Group as ButtonGroup,\n GroupText as ButtonGroupText,\n GroupSeparator as ButtonGroupSeparator,\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { Group } from \"@/components/ui/group\"\nimport { cn } from \"@/lib/utils\"\nimport type { IRecommendationStackProps } from \"./type\"\n\n\n\n/**\n * Fuses a run of RecommendationCards into one bordered stack for the thread.\n *\n * The ui Group only fuses bordered direct children, but each card wraps its\n * frame in a borderless accordion root — so the frames are fused one level\n * down instead, and the Group-injected ::before (which would render as a\n * phantom flex item between the cards) is dropped.\n */\nexport function RecommendationStack({\n className,\n children,\n ...props\n}: IRecommendationStackProps): React.ReactElement {\n return (\n <Group\n className={cn(\n \"w-full *:before:content-none mt-3\",\n \"[&>*:not(:last-child)_[data-slot=recommendation-card]]:rounded-b-none\",\n \"[&>*:not(:last-child)_[data-slot=recommendation-card]]:before:rounded-b-none\",\n \"[&>*+*_[data-slot=recommendation-card]]:rounded-t-none\",\n \"[&>*+*_[data-slot=recommendation-card]]:border-t-0\",\n \"[&>*+*_[data-slot=recommendation-card]]:before:rounded-t-none\",\n className\n )}\n data-slot=\"recommendation-stack\"\n orientation=\"vertical\"\n {...props}\n >\n {children}\n </Group>\n )\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst alertVariants = cva(\n \"relative grid w-full items-start gap-x-2 gap-y-0.5 rounded-xl border px-3.5 py-3 text-card-foreground text-sm has-[>svg]:has-data-[slot=alert-action]:grid-cols-[calc(var(--spacing)*4)_1fr_auto] has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-data-[slot=alert-action]:grid-cols-[1fr_auto] has-[>svg]:gap-x-2 [&>svg]:h-lh [&>svg]:w-4\",\n {\n defaultVariants: {\n variant: \"default\",\n },\n variants: {\n variant: {\n default:\n \"bg-transparent dark:bg-input/32 [&>svg]:text-muted-foreground\",\n error:\n \"border-destructive/32 bg-destructive/4 [&>svg]:text-destructive\",\n info: \"border-info/32 bg-info/4 [&>svg]:text-info\",\n success: \"border-success/32 bg-success/4 [&>svg]:text-success\",\n warning: \"border-warning/32 bg-warning/4 [&>svg]:text-warning\",\n },\n },\n },\n);\n\nexport function Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof alertVariants>): React.ReactElement {\n return (\n <div\n className={cn(alertVariants({ variant }), className)}\n data-slot=\"alert\"\n role=\"alert\"\n {...props}\n />\n );\n}\n\nexport function AlertTitle({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\"font-medium [svg~&]:col-start-2\", className)}\n data-slot=\"alert-title\"\n {...props}\n />\n );\n}\n\nexport function AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex flex-col gap-2.5 text-muted-foreground [svg~&]:col-start-2\",\n className,\n )}\n data-slot=\"alert-description\"\n {...props}\n />\n );\n}\n\nexport function AlertAction({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex gap-1 max-sm:col-start-2 max-sm:mt-2 sm:row-start-1 sm:row-end-3 sm:self-center sm:[[data-slot=alert-description]~&]:col-start-2 sm:[[data-slot=alert-title]~&]:col-start-2 sm:[svg~&]:col-start-2 sm:[svg~[data-slot=alert-description]~&]:col-start-3 sm:[svg~[data-slot=alert-title]~&]:col-start-3\",\n className,\n )}\n data-slot=\"alert-action\"\n {...props}\n />\n );\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Alert, AlertAction, AlertDescription } from \"@/components/ui/alert\"\nimport type { IDegradedBannerProps, ILockedBannerProps, IPinnedThreadBannerProps } from \"./type\"\n\nexport function LockedBanner({\n children = \"This published corpus is locked. Ask questions here, or continue in a working draft to make changes.\",\n className,\n}: ILockedBannerProps): React.ReactElement {\n return (\n <Alert className={cn(\"rounded-sm text-xs\", className)} role=\"status\">\n <AlertDescription className=\"text-xs\">\n <span>\n <span aria-hidden=\"true\">🔒 </span>\n {children}\n </span>\n </AlertDescription>\n </Alert>\n )\n}\n\nexport function PinnedThreadBanner({\n className,\n}: IPinnedThreadBannerProps): React.ReactElement {\n return (\n <Alert className={cn(\"rounded-sm\", className)} role=\"status\">\n <AlertDescription className=\"text-xs\">\n Thread follows its passage, not your view.\n </AlertDescription>\n </Alert>\n )\n}\n\n\n\nexport function DegradedBanner({\n reason = \"The model is unavailable right now.\",\n onRetry,\n className,\n}: IDegradedBannerProps): React.ReactElement {\n return (\n <Alert className={cn(\"rounded-sm\", className)} variant=\"warning\">\n <AlertDescription className=\"text-xs\">{reason}</AlertDescription>\n {onRetry ? (\n <AlertAction>\n <Button\n className=\"font-normal\"\n onClick={onRetry}\n size=\"xs\"\n variant=\"outline\"\n >\n Retry\n </Button>\n </AlertAction>\n ) : null}\n </Alert>\n )\n}\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { accentText, mutedText } from \"./shared\"\nimport type { IVersionHistoryRecordProps } from \"./type\"\n\n\n\nexport function VersionHistoryRecord({\n entry,\n className,\n}: IVersionHistoryRecordProps): React.ReactElement {\n const timestamp =\n entry.timestamp instanceof Date\n ? entry.timestamp.toLocaleString()\n : entry.timestamp\n return (\n <article\n className={cn(\"border-l border-border pl-3\", className)}\n data-slot=\"version-history-record\"\n >\n <p className=\"text-xs text-foreground/85\">\n <span className={cn(\"font-medium\", accentText)}>\n resp="{entry.responseId}"\n </span>\n {entry.applyingUser ? ` · ${entry.applyingUser}` : \"\"}\n </p>\n <p className={cn(\"mt-1 text-xs\", mutedText)}>\n Node <code>{entry.nodeId}</code> · v{entry.version} · {timestamp}\n </p>\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Previous value: <del>{entry.previousValue}</del>\n </p>\n </article>\n )\n}\n"],"mappings":"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,eAAe,GACrB,EAAM,gBAAgB;EACtB,IAAM,IAAO,EAAM,cAAc,sBAAsB,GACjD,KAAS,EAAM,UAAU,EAAK,OAAO,EAAK,QAC1C,IACJ,CAAC,EAAU,KAAK,YAChB,GAAW,EAAU,IAAI,KACzB,KAAS,OACT,KAAS,MACL,WACA,IAAQ,KACN,WACA;EACR,GAAc;GAAE,IAAI,EAAU,KAAK;GAAI;EAAS,CAAC;CACnD,GACA;EAAC;EAAe;EAAW;CAAK,CAClC,GAEM,KAAM,SACH;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF,GAEM,KAAQ,SACL;EACL;EACA,UAAU;EACV;EACA,OAAO;CACT,IACA;EAAC;EAAY;EAAe;EAAW;CAAU,CACnD;CAEA,OAAO,SACE;EACL;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;ACpmBA,IAAa,KAAmB,EAC9B,IACF;AAEA,SAAgB,KAA8C;CAC5D,IAAM,IAAU,EAAW,EAAgB;CAC3C,IAAI,CAAC,GAAS,MAAU,MAAM,8CAA8C;CAC5E,OAAO;AACT;;;ACXA,SAAgB,GAAY,GAAwB,GAAmB;CACrE,IAAM,IACJ,EAAK,SAAS,YAAY,EAAK,SAAS,YACpC,IACE,KACA,KACF,EAAK,SAAS,aACZ,IACA;CACR,OAAO,kBAAC,GAAD,EAAM,WAAU,SAAU,CAAA;AACnC;;;ACTA,SAAgB,GAAa,EAC3B,WACA,eAIC;CACD,IAAM,IAAS,EAAiB,KAAK,IAC/B,IAAc,EAAwB,IAAI,GAC1C,IAAW,EAAwB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"}
|