@wzrhine/agent 0.0.0-stage → 0.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/CHANGELOG.md +23 -0
- package/LICENSE +21 -0
- package/README.md +29 -3
- package/dist/agent.css +15 -0
- package/dist/components/artifact/ArtifactCard.d.ts +56 -0
- package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
- package/dist/components/artifact/ArtifactCard.js +78 -0
- package/dist/components/artifact/ArtifactCard.js.map +1 -0
- package/dist/components/artifact/FilePreview.d.ts +117 -0
- package/dist/components/artifact/FilePreview.d.ts.map +1 -0
- package/dist/components/artifact/FilePreview.js +207 -0
- package/dist/components/artifact/FilePreview.js.map +1 -0
- package/dist/components/artifact/FilePreviewTabs.d.ts +51 -0
- package/dist/components/artifact/FilePreviewTabs.d.ts.map +1 -0
- package/dist/components/artifact/FilePreviewTabs.js +150 -0
- package/dist/components/artifact/FilePreviewTabs.js.map +1 -0
- package/dist/components/composer/AttachmentList.d.ts +33 -0
- package/dist/components/composer/AttachmentList.d.ts.map +1 -0
- package/dist/components/composer/AttachmentList.js +56 -0
- package/dist/components/composer/AttachmentList.js.map +1 -0
- package/dist/components/composer/Composer.d.ts +113 -0
- package/dist/components/composer/Composer.d.ts.map +1 -0
- package/dist/components/composer/Composer.js +327 -0
- package/dist/components/composer/Composer.js.map +1 -0
- package/dist/components/composer/ComposerInput.d.ts +101 -0
- package/dist/components/composer/ComposerInput.d.ts.map +1 -0
- package/dist/components/composer/ComposerInput.js +301 -0
- package/dist/components/composer/ComposerInput.js.map +1 -0
- package/dist/components/composer/ComposerNotice.d.ts +38 -0
- package/dist/components/composer/ComposerNotice.d.ts.map +1 -0
- package/dist/components/composer/ComposerNotice.js +16 -0
- package/dist/components/composer/ComposerNotice.js.map +1 -0
- package/dist/components/composer/MentionMenu.d.ts +37 -0
- package/dist/components/composer/MentionMenu.d.ts.map +1 -0
- package/dist/components/composer/MentionMenu.js +55 -0
- package/dist/components/composer/MentionMenu.js.map +1 -0
- package/dist/components/composer/MenuPanel.d.ts +49 -0
- package/dist/components/composer/MenuPanel.d.ts.map +1 -0
- package/dist/components/composer/MenuPanel.js +50 -0
- package/dist/components/composer/MenuPanel.js.map +1 -0
- package/dist/components/composer/ModelPicker.d.ts +40 -0
- package/dist/components/composer/ModelPicker.d.ts.map +1 -0
- package/dist/components/composer/ModelPicker.js +115 -0
- package/dist/components/composer/ModelPicker.js.map +1 -0
- package/dist/components/composer/PermissionPicker.d.ts +31 -0
- package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
- package/dist/components/composer/PermissionPicker.js +43 -0
- package/dist/components/composer/PermissionPicker.js.map +1 -0
- package/dist/components/composer/SendStopButton.d.ts +71 -0
- package/dist/components/composer/SendStopButton.d.ts.map +1 -0
- package/dist/components/composer/SendStopButton.js +87 -0
- package/dist/components/composer/SendStopButton.js.map +1 -0
- package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
- package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/composer/SlashCommandMenu.js +43 -0
- package/dist/components/composer/SlashCommandMenu.js.map +1 -0
- package/dist/components/composer/composer-text.d.ts +10 -0
- package/dist/components/composer/composer-text.d.ts.map +1 -0
- package/dist/components/composer/composer-text.js +26 -0
- package/dist/components/composer/composer-text.js.map +1 -0
- package/dist/components/composer/composer-utils.d.ts +74 -0
- package/dist/components/composer/composer-utils.d.ts.map +1 -0
- package/dist/components/composer/composer-utils.js +133 -0
- package/dist/components/composer/composer-utils.js.map +1 -0
- package/dist/components/conversation/ConversationList.d.ts +88 -0
- package/dist/components/conversation/ConversationList.d.ts.map +1 -0
- package/dist/components/conversation/ConversationList.js +81 -0
- package/dist/components/conversation/ConversationList.js.map +1 -0
- package/dist/components/conversation/ConversationRow.d.ts +66 -0
- package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
- package/dist/components/conversation/ConversationRow.js +65 -0
- package/dist/components/conversation/ConversationRow.js.map +1 -0
- package/dist/components/conversation/conversation-status.d.ts +21 -0
- package/dist/components/conversation/conversation-status.d.ts.map +1 -0
- package/dist/components/conversation/conversation-status.js +33 -0
- package/dist/components/conversation/conversation-status.js.map +1 -0
- package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
- package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
- package/dist/components/intervention/ApprovalDiff.js +25 -0
- package/dist/components/intervention/ApprovalDiff.js.map +1 -0
- package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
- package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
- package/dist/components/intervention/ApprovalPanel.js +111 -0
- package/dist/components/intervention/ApprovalPanel.js.map +1 -0
- package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
- package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
- package/dist/components/intervention/ErrorRecoveryNotice.js +30 -0
- package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
- package/dist/components/intervention/GrantList.d.ts +49 -0
- package/dist/components/intervention/GrantList.d.ts.map +1 -0
- package/dist/components/intervention/GrantList.js +58 -0
- package/dist/components/intervention/GrantList.js.map +1 -0
- package/dist/components/intervention/InterventionDock.d.ts +24 -0
- package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
- package/dist/components/intervention/InterventionDock.js +18 -0
- package/dist/components/intervention/InterventionDock.js.map +1 -0
- package/dist/components/intervention/QuestionnaireCard.d.ts +60 -0
- package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
- package/dist/components/intervention/QuestionnaireCard.js +322 -0
- package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
- package/dist/components/intervention/action-lock.d.ts +20 -0
- package/dist/components/intervention/action-lock.d.ts.map +1 -0
- package/dist/components/intervention/action-lock.js +65 -0
- package/dist/components/intervention/action-lock.js.map +1 -0
- package/dist/components/intervention/icons.d.ts +8 -0
- package/dist/components/intervention/icons.d.ts.map +1 -0
- package/dist/components/intervention/icons.js +11 -0
- package/dist/components/intervention/icons.js.map +1 -0
- package/dist/components/intervention/questionnaire-answers.d.ts +29 -0
- package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
- package/dist/components/intervention/questionnaire-answers.js +81 -0
- package/dist/components/intervention/questionnaire-answers.js.map +1 -0
- package/dist/components/message/AgentMessage.d.ts +98 -0
- package/dist/components/message/AgentMessage.d.ts.map +1 -0
- package/dist/components/message/AgentMessage.js +94 -0
- package/dist/components/message/AgentMessage.js.map +1 -0
- package/dist/components/message/CitationChip.d.ts +34 -0
- package/dist/components/message/CitationChip.d.ts.map +1 -0
- package/dist/components/message/CitationChip.js +30 -0
- package/dist/components/message/CitationChip.js.map +1 -0
- package/dist/components/message/CodeBlock.d.ts +45 -0
- package/dist/components/message/CodeBlock.d.ts.map +1 -0
- package/dist/components/message/CodeBlock.js +21 -0
- package/dist/components/message/CodeBlock.js.map +1 -0
- package/dist/components/message/JumpToLatest.d.ts +27 -0
- package/dist/components/message/JumpToLatest.d.ts.map +1 -0
- package/dist/components/message/JumpToLatest.js +17 -0
- package/dist/components/message/JumpToLatest.js.map +1 -0
- package/dist/components/message/Markdown.d.ts +21 -0
- package/dist/components/message/Markdown.d.ts.map +1 -0
- package/dist/components/message/Markdown.js +21 -0
- package/dist/components/message/Markdown.js.map +1 -0
- package/dist/components/message/MessageActions.d.ts +63 -0
- package/dist/components/message/MessageActions.d.ts.map +1 -0
- package/dist/components/message/MessageActions.js +83 -0
- package/dist/components/message/MessageActions.js.map +1 -0
- package/dist/components/message/MessageList.d.ts +100 -0
- package/dist/components/message/MessageList.d.ts.map +1 -0
- package/dist/components/message/MessageList.js +266 -0
- package/dist/components/message/MessageList.js.map +1 -0
- package/dist/components/message/MessagePart.d.ts +44 -0
- package/dist/components/message/MessagePart.d.ts.map +1 -0
- package/dist/components/message/MessagePart.js +146 -0
- package/dist/components/message/MessagePart.js.map +1 -0
- package/dist/components/message/RunDetails.d.ts +26 -0
- package/dist/components/message/RunDetails.d.ts.map +1 -0
- package/dist/components/message/RunDetails.js +113 -0
- package/dist/components/message/RunDetails.js.map +1 -0
- package/dist/components/message/SkillUseList.d.ts +22 -0
- package/dist/components/message/SkillUseList.d.ts.map +1 -0
- package/dist/components/message/SkillUseList.js +20 -0
- package/dist/components/message/SkillUseList.js.map +1 -0
- package/dist/components/message/ThinkingBlock.d.ts +44 -0
- package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
- package/dist/components/message/ThinkingBlock.js +34 -0
- package/dist/components/message/ThinkingBlock.js.map +1 -0
- package/dist/components/message/icons.d.ts +14 -0
- package/dist/components/message/icons.d.ts.map +1 -0
- package/dist/components/message/icons.js +16 -0
- package/dist/components/message/icons.js.map +1 -0
- package/dist/components/message/plain-text.d.ts +11 -0
- package/dist/components/message/plain-text.d.ts.map +1 -0
- package/dist/components/message/plain-text.js +58 -0
- package/dist/components/message/plain-text.js.map +1 -0
- package/dist/components/message/renderers.d.ts +30 -0
- package/dist/components/message/renderers.d.ts.map +1 -0
- package/dist/components/message/renderers.js +2 -0
- package/dist/components/message/renderers.js.map +1 -0
- package/dist/components/message/use-copy.d.ts +18 -0
- package/dist/components/message/use-copy.d.ts.map +1 -0
- package/dist/components/message/use-copy.js +65 -0
- package/dist/components/message/use-copy.js.map +1 -0
- package/dist/components/process/AgentProcess.d.ts +47 -0
- package/dist/components/process/AgentProcess.d.ts.map +1 -0
- package/dist/components/process/AgentProcess.js +78 -0
- package/dist/components/process/AgentProcess.js.map +1 -0
- package/dist/components/process/RunStatus.d.ts +60 -0
- package/dist/components/process/RunStatus.d.ts.map +1 -0
- package/dist/components/process/RunStatus.js +34 -0
- package/dist/components/process/RunStatus.js.map +1 -0
- package/dist/components/shell/AgentEmptyState.d.ts +35 -0
- package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
- package/dist/components/shell/AgentEmptyState.js +20 -0
- package/dist/components/shell/AgentEmptyState.js.map +1 -0
- package/dist/components/shell/AgentHeader.d.ts +84 -0
- package/dist/components/shell/AgentHeader.d.ts.map +1 -0
- package/dist/components/shell/AgentHeader.js +38 -0
- package/dist/components/shell/AgentHeader.js.map +1 -0
- package/dist/components/shell/AgentShell.d.ts +138 -0
- package/dist/components/shell/AgentShell.d.ts.map +1 -0
- package/dist/components/shell/AgentShell.js +206 -0
- package/dist/components/shell/AgentShell.js.map +1 -0
- package/dist/components/shell/AgentSidePane.d.ts +54 -0
- package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
- package/dist/components/shell/AgentSidePane.js +26 -0
- package/dist/components/shell/AgentSidePane.js.map +1 -0
- package/dist/components/shell/ResizeHandle.d.ts +50 -0
- package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
- package/dist/components/shell/ResizeHandle.js +84 -0
- package/dist/components/shell/ResizeHandle.js.map +1 -0
- package/dist/components/shell/use-controllable.d.ts +9 -0
- package/dist/components/shell/use-controllable.d.ts.map +1 -0
- package/dist/components/shell/use-controllable.js +26 -0
- package/dist/components/shell/use-controllable.js.map +1 -0
- package/dist/components/tools/ChunkPager.d.ts +48 -0
- package/dist/components/tools/ChunkPager.d.ts.map +1 -0
- package/dist/components/tools/ChunkPager.js +68 -0
- package/dist/components/tools/ChunkPager.js.map +1 -0
- package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
- package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
- package/dist/components/tools/CodeModeToolTree.js +97 -0
- package/dist/components/tools/CodeModeToolTree.js.map +1 -0
- package/dist/components/tools/DiffPreview.d.ts +83 -0
- package/dist/components/tools/DiffPreview.d.ts.map +1 -0
- package/dist/components/tools/DiffPreview.js +95 -0
- package/dist/components/tools/DiffPreview.js.map +1 -0
- package/dist/components/tools/ToolActivity.d.ts +63 -0
- package/dist/components/tools/ToolActivity.d.ts.map +1 -0
- package/dist/components/tools/ToolActivity.js +45 -0
- package/dist/components/tools/ToolActivity.js.map +1 -0
- package/dist/components/tools/ToolDetails.d.ts +106 -0
- package/dist/components/tools/ToolDetails.d.ts.map +1 -0
- package/dist/components/tools/ToolDetails.js +247 -0
- package/dist/components/tools/ToolDetails.js.map +1 -0
- package/dist/components/tools/ToolHistory.d.ts +48 -0
- package/dist/components/tools/ToolHistory.d.ts.map +1 -0
- package/dist/components/tools/ToolHistory.js +37 -0
- package/dist/components/tools/ToolHistory.js.map +1 -0
- package/dist/components/tools/ToolOutput.d.ts +61 -0
- package/dist/components/tools/ToolOutput.d.ts.map +1 -0
- package/dist/components/tools/ToolOutput.js +45 -0
- package/dist/components/tools/ToolOutput.js.map +1 -0
- package/dist/components/tools/ToolRecord.d.ts +54 -0
- package/dist/components/tools/ToolRecord.d.ts.map +1 -0
- package/dist/components/tools/ToolRecord.js +78 -0
- package/dist/components/tools/ToolRecord.js.map +1 -0
- package/dist/components/tools/shared.d.ts +93 -0
- package/dist/components/tools/shared.d.ts.map +1 -0
- package/dist/components/tools/shared.js +160 -0
- package/dist/components/tools/shared.js.map +1 -0
- package/dist/components/workspace/ActivityLedger.d.ts +44 -0
- package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
- package/dist/components/workspace/ActivityLedger.js +63 -0
- package/dist/components/workspace/ActivityLedger.js.map +1 -0
- package/dist/components/workspace/CompactionNotice.d.ts +63 -0
- package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
- package/dist/components/workspace/CompactionNotice.js +36 -0
- package/dist/components/workspace/CompactionNotice.js.map +1 -0
- package/dist/components/workspace/ContextUsage.d.ts +44 -0
- package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
- package/dist/components/workspace/ContextUsage.js +106 -0
- package/dist/components/workspace/ContextUsage.js.map +1 -0
- package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
- package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
- package/dist/components/workspace/PersistentTerminal.js +155 -0
- package/dist/components/workspace/PersistentTerminal.js.map +1 -0
- package/dist/components/workspace/PinnedSummary.d.ts +43 -0
- package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
- package/dist/components/workspace/PinnedSummary.js +33 -0
- package/dist/components/workspace/PinnedSummary.js.map +1 -0
- package/dist/components/workspace/RunSummary.d.ts +35 -0
- package/dist/components/workspace/RunSummary.d.ts.map +1 -0
- package/dist/components/workspace/RunSummary.js +46 -0
- package/dist/components/workspace/RunSummary.js.map +1 -0
- package/dist/components/workspace/SubAgentCard.d.ts +60 -0
- package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
- package/dist/components/workspace/SubAgentCard.js +73 -0
- package/dist/components/workspace/SubAgentCard.js.map +1 -0
- package/dist/components/workspace/TerminalRow.d.ts +51 -0
- package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
- package/dist/components/workspace/TerminalRow.js +62 -0
- package/dist/components/workspace/TerminalRow.js.map +1 -0
- package/dist/components/workspace/shared.d.ts +22 -0
- package/dist/components/workspace/shared.d.ts.map +1 -0
- package/dist/components/workspace/shared.js +36 -0
- package/dist/components/workspace/shared.js.map +1 -0
- package/dist/index.d.ts +130 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/motion/agent-motion.d.ts +62 -0
- package/dist/motion/agent-motion.d.ts.map +1 -0
- package/dist/motion/agent-motion.js +61 -0
- package/dist/motion/agent-motion.js.map +1 -0
- package/dist/primitives/AgentSpark.d.ts +17 -0
- package/dist/primitives/AgentSpark.d.ts.map +1 -0
- package/dist/primitives/AgentSpark.js +11 -0
- package/dist/primitives/AgentSpark.js.map +1 -0
- package/dist/primitives/AgentStatus.d.ts +32 -0
- package/dist/primitives/AgentStatus.d.ts.map +1 -0
- package/dist/primitives/AgentStatus.js +13 -0
- package/dist/primitives/AgentStatus.js.map +1 -0
- package/dist/primitives/StatusGlyph.d.ts +10 -0
- package/dist/primitives/StatusGlyph.d.ts.map +1 -0
- package/dist/primitives/StatusGlyph.js +31 -0
- package/dist/primitives/StatusGlyph.js.map +1 -0
- package/dist/primitives/icons.d.ts +7 -0
- package/dist/primitives/icons.d.ts.map +1 -0
- package/dist/primitives/icons.js +55 -0
- package/dist/primitives/icons.js.map +1 -0
- package/dist/provider/AgentMessages.d.ts +51 -0
- package/dist/provider/AgentMessages.d.ts.map +1 -0
- package/dist/provider/AgentMessages.js +77 -0
- package/dist/provider/AgentMessages.js.map +1 -0
- package/dist/provider/messages/composer.d.ts +90 -0
- package/dist/provider/messages/composer.d.ts.map +1 -0
- package/dist/provider/messages/composer.js +155 -0
- package/dist/provider/messages/composer.js.map +1 -0
- package/dist/provider/messages/intervention.d.ts +135 -0
- package/dist/provider/messages/intervention.d.ts.map +1 -0
- package/dist/provider/messages/intervention.js +321 -0
- package/dist/provider/messages/intervention.js.map +1 -0
- package/dist/provider/messages/message.d.ts +118 -0
- package/dist/provider/messages/message.d.ts.map +1 -0
- package/dist/provider/messages/message.js +224 -0
- package/dist/provider/messages/message.js.map +1 -0
- package/dist/provider/messages/shell.d.ts +70 -0
- package/dist/provider/messages/shell.d.ts.map +1 -0
- package/dist/provider/messages/shell.js +109 -0
- package/dist/provider/messages/shell.js.map +1 -0
- package/dist/provider/messages/status.d.ts +20 -0
- package/dist/provider/messages/status.d.ts.map +1 -0
- package/dist/provider/messages/status.js +195 -0
- package/dist/provider/messages/status.js.map +1 -0
- package/dist/provider/messages/tools.d.ts +210 -0
- package/dist/provider/messages/tools.d.ts.map +1 -0
- package/dist/provider/messages/tools.js +482 -0
- package/dist/provider/messages/tools.js.map +1 -0
- package/dist/provider/messages/workspace.d.ts +176 -0
- package/dist/provider/messages/workspace.d.ts.map +1 -0
- package/dist/provider/messages/workspace.js +325 -0
- package/dist/provider/messages/workspace.js.map +1 -0
- package/dist/styles/artifact.css +564 -0
- package/dist/styles/base.css +220 -0
- package/dist/styles/composer.css +1001 -0
- package/dist/styles/conversation.css +275 -0
- package/dist/styles/intervention.css +929 -0
- package/dist/styles/message.css +917 -0
- package/dist/styles/process.css +207 -0
- package/dist/styles/shell.css +441 -0
- package/dist/styles/tools.css +929 -0
- package/dist/styles/workspace.css +1294 -0
- package/dist/utils/cx.d.ts +3 -0
- package/dist/utils/cx.d.ts.map +1 -0
- package/dist/utils/cx.js +5 -0
- package/dist/utils/cx.js.map +1 -0
- package/package.json +64 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentHeader.js","sourceRoot":"","sources":["../../../src/components/shell/AgentHeader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAElG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA2DhD,SAAS,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAA2D;IAChG,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,6FAA6F;IAC7F,8DAA8D;IAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,YAAY,CAAkB,IAAI,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,CACL,KAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,yBAAyB,EACnC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,CAAC,MAAM,cACT,MAAM,KACZ,cAAc,CAAC,SAAS,CAAC,GAC7B,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAgC,SAAS,WAAW,CAC7F,EACE,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,MAAM,EACN,YAAY,EACZ,MAAM,EACN,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,eAAe,EAAE,YAAY,EAC7B,YAAY,EACZ,MAAM,EACN,OAAO,EACP,YAAY,GAAG,CAAC,EAChB,OAAO,GAAG,KAAK,EACf,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG;IAEH,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAU,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;IAEnD,MAAM,eAAe,GAAG,YAAY,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxG,MAAM,WAAW,GAAG,eAAe,IAAI,UAAU,EAAE,WAAW,IAAI,KAAK,CAAC;IACxE,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC;IAC9F,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,mBAAmB,CAAC;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/H,MAAM,IAAI,GAAG,UAAU,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErF,OAAO,CACL,qBAAY,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,cAAY,SAAS,aAC1F,eAAK,SAAS,EAAC,uBAAuB,aACnC,MAAM,IAAI,KAAC,UAAU,IAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,YAAY,GAAG,EAAE,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAI,EAC1H,eAAe,IAAI,CAClB,KAAC,UAAU,IACT,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EAC/B,KAAK,EAAE,KAAK,CAAC,SAAS,mBACR,QAAQ,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,GACtD,CACH,EACA,MAAM,IAAI,YAAY,IAAI,CACzB,KAAC,UAAU,IACT,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAI,EACnE,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GACnC,CACH,IACG,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,EAAE,IAAI,KAAK,UAAU,IAAI,CAC9B,gBAAM,SAAS,EAAC,wBAAwB,aACtC,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EACzB,KAAK,CAAC,aAAa,IACf,CACR,EACD,KAAC,OAAO,IAAC,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,UAAU,YAC1D,UAAU,GACH,EACT,QAAQ,IAAI,CACX,KAAC,UAAU,IACT,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EAC/B,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,MAAM,EAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,QAAQ,GACjB,CACH,IACG,EACL,CAAC,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,CAClC,eAAK,SAAS,EAAC,uBAAuB,aACnC,QAAQ,IAAI,CACX,gBAAM,SAAS,EAAC,2BAA2B,aACzC,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,YAC3D,QAAQ,CAAC,QAAQ,IAAI,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,GAC3C,EACP,eAAM,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAQ,EACxF,eAAM,SAAS,EAAC,gCAAgC,iBAAa,MAAM,YAChE,QAAQ,CAAC,IAAI,GACT,EACN,QAAQ,CAAC,IAAI,IAAI,CAChB,eAAM,SAAS,EAAC,gCAAgC,iBAAa,MAAM,YAChE,QAAQ,CAAC,IAAI,GACT,CACR,IACI,CACR,EACA,SAAS,IAAI,KAAC,OAAO,IAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAI,EAChF,IAAI,IAAI,UAAU,IAAI,CACrB,KAAC,WAAW,IACV,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAC5B,UAAU,GACrB,CACH,IACG,CACP,IACG,EACN,eAAK,SAAS,EAAC,wBAAwB,aACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,gBAAqB,SAAS,EAAC,wBAAwB,aACpD,KAAK,CAAC,IAAI,IAAI,CACb,eAAM,SAAS,EAAC,6BAA6B,iBAAa,MAAM,YAC7D,KAAK,CAAC,IAAI,GACN,CACR,EACD,8BAAkB,MAAM,YAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,EAC7D,eAAM,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,KAAK,GAAQ,KAPzC,KAAK,CAAC,EAAE,CAQZ,CACR,CAAC,EACD,OAAO,EACP,eAAe,IAAI,CAClB,KAAC,UAAU,IACT,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,KAAC,SAAS,IAAC,IAAI,EAAC,OAAO,GAAG,EAChC,KAAK,EAAE,YAAY,IAAI,KAAK,CAAC,aAAa,EAC1C,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,eAAe,GACxB,CACH,IACG,IACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* AgentShell (atlas 01): the workbench frame. It owns regions, slots, focus and responsive
|
|
4
|
+
* behaviour only; routing, window chrome and data stay with the host (ADR-0011 §9).
|
|
5
|
+
*
|
|
6
|
+
* Layout, from the inline start: `rail` (app navigation) · `index` (conversation index) · reading
|
|
7
|
+
* column (`header` / `conversation` / `composer`) · ResizeHandle · `context` (side pane). Every
|
|
8
|
+
* column scrolls on its own (`min-height: 0` + `overflow: auto`); reading content is capped at
|
|
9
|
+
* `--rl-agent-reading-width` and centred, so wide screens never stretch long lines.
|
|
10
|
+
*
|
|
11
|
+
* Responsive: the shell measures its own width (ResizeObserver; without it the shell stays
|
|
12
|
+
* `wide`), so two shells on one page, or a shell inside a card, decide independently.
|
|
13
|
+
* - `wide`: every column inline.
|
|
14
|
+
* - `compact` (< `breakpoints.context` rem): the context pane leaves the row first instead of
|
|
15
|
+
* squeezing the reading column; opening it shows a Drawer sheet.
|
|
16
|
+
* - `narrow` (< `breakpoints.index` rem): the index becomes a sheet too and the rail is hidden;
|
|
17
|
+
* one reading column remains.
|
|
18
|
+
* Shrinking past a breakpoint closes what no longer fits (`onContextOpenChange(false, 'layout')`,
|
|
19
|
+
* so `aria-pressed` on toggles always matches what is visible) and growing back reopens it,
|
|
20
|
+
* unless the user toggled it in between. Controlled hosts receive the same calls.
|
|
21
|
+
*
|
|
22
|
+
* Landmarks: the shell does not force `main`. The reading column is a `<section aria-label>`
|
|
23
|
+
* (`mainLabel`); wrap the shell in `<main>` when it is the page's main content. The index is a
|
|
24
|
+
* labelled section; AgentSidePane brings its own `complementary` landmark. Closing the inline
|
|
25
|
+
* pane while focus is inside it returns focus to the element that was focused when it opened
|
|
26
|
+
* (typically the header toggle); sheets restore focus through Drawer.
|
|
27
|
+
*
|
|
28
|
+
* Motion (ADR-0012): the inline pane opens / closes with a single-axis CSS translate + opacity
|
|
29
|
+
* transition on `--rl-motion-panel`, interruptible and instant under reduced motion. Its width
|
|
30
|
+
* is never animated: it appears at once on open and is released only after the exit fade.
|
|
31
|
+
* Dragging the ResizeHandle follows the pointer directly.
|
|
32
|
+
*/
|
|
33
|
+
export type AgentShellLayout = 'wide' | 'compact' | 'narrow';
|
|
34
|
+
/** Why an open state changed: user toggle, sheet dismissal, layout breakpoint, a new selection. */
|
|
35
|
+
export type AgentShellOpenReason = 'toggle' | 'dismiss' | 'layout' | 'selection';
|
|
36
|
+
export interface AgentShellContextValue {
|
|
37
|
+
layout: AgentShellLayout;
|
|
38
|
+
hasContext: boolean;
|
|
39
|
+
hasIndex: boolean;
|
|
40
|
+
contextOpen: boolean;
|
|
41
|
+
setContextOpen: (open: boolean, reason?: AgentShellOpenReason) => void;
|
|
42
|
+
toggleContext: () => void;
|
|
43
|
+
indexOpen: boolean;
|
|
44
|
+
setIndexOpen: (open: boolean, reason?: AgentShellOpenReason) => void;
|
|
45
|
+
/** The index is not visible as an inline column (narrow layout or collapsed). */
|
|
46
|
+
indexCollapsed: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Where the context slot is rendered right now. */
|
|
49
|
+
export type AgentContextPresentation = 'inline' | 'sheet' | 'standalone';
|
|
50
|
+
/** The nearest AgentShell's state and toggles, or `null` outside a shell. */
|
|
51
|
+
export declare function useAgentShell(): AgentShellContextValue | null;
|
|
52
|
+
/** How the surrounding shell presents the context slot (AgentSidePane hides its close button in a sheet). */
|
|
53
|
+
export declare function useAgentContextPresentation(): AgentContextPresentation;
|
|
54
|
+
export type AgentShellProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
55
|
+
/** App navigation rail (hidden on narrow layouts; the host offers its own menu there). */
|
|
56
|
+
rail?: React.ReactNode;
|
|
57
|
+
/** Conversation index column, usually a ConversationList. */
|
|
58
|
+
index?: React.ReactNode;
|
|
59
|
+
header?: React.ReactNode;
|
|
60
|
+
/** Main reading area (MessageList). */
|
|
61
|
+
conversation?: React.ReactNode;
|
|
62
|
+
/** Docked at the bottom of the reading column. */
|
|
63
|
+
composer?: React.ReactNode;
|
|
64
|
+
/** Side pane, usually an AgentSidePane. */
|
|
65
|
+
context?: React.ReactNode;
|
|
66
|
+
/** Accessible name of the reading column. */
|
|
67
|
+
mainLabel?: string;
|
|
68
|
+
/** Accessible name of the index column and title of the index sheet. */
|
|
69
|
+
indexLabel?: string;
|
|
70
|
+
/** Title of the context sheet on compact / narrow layouts. */
|
|
71
|
+
contextLabel?: string;
|
|
72
|
+
contextOpen?: boolean;
|
|
73
|
+
defaultContextOpen?: boolean;
|
|
74
|
+
onContextOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
|
|
75
|
+
indexOpen?: boolean;
|
|
76
|
+
defaultIndexOpen?: boolean;
|
|
77
|
+
onIndexOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
|
|
78
|
+
/** Width of the inline context pane in CSS pixels. */
|
|
79
|
+
contextSize?: number;
|
|
80
|
+
defaultContextSize?: number;
|
|
81
|
+
onContextSizeChange?: (size: number) => void;
|
|
82
|
+
contextMin?: number;
|
|
83
|
+
contextMax?: number;
|
|
84
|
+
/** Show the ResizeHandle between reading column and pane (default true). */
|
|
85
|
+
resizable?: boolean;
|
|
86
|
+
/** Breakpoints in rem of the shell's own width (defaults: context 64, index 40). */
|
|
87
|
+
breakpoints?: {
|
|
88
|
+
context?: number;
|
|
89
|
+
index?: number;
|
|
90
|
+
};
|
|
91
|
+
/** Force a layout (tests, hosts that already know their size). Overrides measurement. */
|
|
92
|
+
layout?: AgentShellLayout;
|
|
93
|
+
/** Id of the conversation being read; a change closes the index sheet on narrow layouts. */
|
|
94
|
+
activeId?: string;
|
|
95
|
+
};
|
|
96
|
+
export declare const AgentShell: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
97
|
+
/** App navigation rail (hidden on narrow layouts; the host offers its own menu there). */
|
|
98
|
+
rail?: React.ReactNode;
|
|
99
|
+
/** Conversation index column, usually a ConversationList. */
|
|
100
|
+
index?: React.ReactNode;
|
|
101
|
+
header?: React.ReactNode;
|
|
102
|
+
/** Main reading area (MessageList). */
|
|
103
|
+
conversation?: React.ReactNode;
|
|
104
|
+
/** Docked at the bottom of the reading column. */
|
|
105
|
+
composer?: React.ReactNode;
|
|
106
|
+
/** Side pane, usually an AgentSidePane. */
|
|
107
|
+
context?: React.ReactNode;
|
|
108
|
+
/** Accessible name of the reading column. */
|
|
109
|
+
mainLabel?: string;
|
|
110
|
+
/** Accessible name of the index column and title of the index sheet. */
|
|
111
|
+
indexLabel?: string;
|
|
112
|
+
/** Title of the context sheet on compact / narrow layouts. */
|
|
113
|
+
contextLabel?: string;
|
|
114
|
+
contextOpen?: boolean;
|
|
115
|
+
defaultContextOpen?: boolean;
|
|
116
|
+
onContextOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
|
|
117
|
+
indexOpen?: boolean;
|
|
118
|
+
defaultIndexOpen?: boolean;
|
|
119
|
+
onIndexOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
|
|
120
|
+
/** Width of the inline context pane in CSS pixels. */
|
|
121
|
+
contextSize?: number;
|
|
122
|
+
defaultContextSize?: number;
|
|
123
|
+
onContextSizeChange?: (size: number) => void;
|
|
124
|
+
contextMin?: number;
|
|
125
|
+
contextMax?: number;
|
|
126
|
+
/** Show the ResizeHandle between reading column and pane (default true). */
|
|
127
|
+
resizable?: boolean;
|
|
128
|
+
/** Breakpoints in rem of the shell's own width (defaults: context 64, index 40). */
|
|
129
|
+
breakpoints?: {
|
|
130
|
+
context?: number;
|
|
131
|
+
index?: number;
|
|
132
|
+
};
|
|
133
|
+
/** Force a layout (tests, hosts that already know their size). Overrides measurement. */
|
|
134
|
+
layout?: AgentShellLayout;
|
|
135
|
+
/** Id of the conversation being read; a change closes the index sheet on narrow layouts. */
|
|
136
|
+
activeId?: string;
|
|
137
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
138
|
+
//# sourceMappingURL=AgentShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Drawer } from '@wzrhine/react';
|
|
5
|
+
import { useAgentMessages } from '../../provider/AgentMessages.js';
|
|
6
|
+
import { cx } from '../../utils/cx.js';
|
|
7
|
+
import { ResizeHandle } from './ResizeHandle.js';
|
|
8
|
+
import { useIsoLayoutEffect } from './use-controllable.js';
|
|
9
|
+
const ShellContext = React.createContext(null);
|
|
10
|
+
const PresentationContext = React.createContext('standalone');
|
|
11
|
+
/** The nearest AgentShell's state and toggles, or `null` outside a shell. */
|
|
12
|
+
export function useAgentShell() {
|
|
13
|
+
return React.useContext(ShellContext);
|
|
14
|
+
}
|
|
15
|
+
/** How the surrounding shell presents the context slot (AgentSidePane hides its close button in a sheet). */
|
|
16
|
+
export function useAgentContextPresentation() {
|
|
17
|
+
return React.useContext(PresentationContext);
|
|
18
|
+
}
|
|
19
|
+
const DEFAULT_BREAKPOINTS = { context: 64, index: 40 };
|
|
20
|
+
/** Reading column kept free when clamping the pane width (CSS pixels, 20rem at 16px). */
|
|
21
|
+
const READING_MIN = 320;
|
|
22
|
+
const rank = { narrow: 0, compact: 1, wide: 2 };
|
|
23
|
+
function rootFontSize() {
|
|
24
|
+
if (typeof document === 'undefined' || typeof getComputedStyle === 'undefined')
|
|
25
|
+
return 16;
|
|
26
|
+
return Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
|
|
27
|
+
}
|
|
28
|
+
function useShellMeasure(ref, contextAt, indexAt) {
|
|
29
|
+
const [state, setState] = React.useState({ layout: 'wide', width: 0, side: 0 });
|
|
30
|
+
useIsoLayoutEffect(() => {
|
|
31
|
+
const el = ref.current;
|
|
32
|
+
if (!el)
|
|
33
|
+
return undefined;
|
|
34
|
+
const measure = () => {
|
|
35
|
+
const width = Math.round(el.getBoundingClientRect().width);
|
|
36
|
+
if (!width)
|
|
37
|
+
return;
|
|
38
|
+
const rem = rootFontSize();
|
|
39
|
+
const layout = width < indexAt * rem ? 'narrow' : width < contextAt * rem ? 'compact' : 'wide';
|
|
40
|
+
let side = 0;
|
|
41
|
+
for (const child of Array.from(el.children)) {
|
|
42
|
+
if (child.matches('.rl-agent-shell__rail, .rl-agent-shell__index'))
|
|
43
|
+
side += child.offsetWidth;
|
|
44
|
+
}
|
|
45
|
+
setState((prev) => (prev.layout === layout && prev.width === width && prev.side === side ? prev : { layout, width, side }));
|
|
46
|
+
};
|
|
47
|
+
measure();
|
|
48
|
+
if (typeof ResizeObserver === 'undefined')
|
|
49
|
+
return undefined;
|
|
50
|
+
const observer = new ResizeObserver(measure);
|
|
51
|
+
observer.observe(el);
|
|
52
|
+
return () => observer.disconnect();
|
|
53
|
+
}, [ref, contextAt, indexAt]);
|
|
54
|
+
return state;
|
|
55
|
+
}
|
|
56
|
+
function useOpenState(value, defaultValue, onChange) {
|
|
57
|
+
const [inner, setInner] = React.useState(defaultValue);
|
|
58
|
+
const controlled = value !== undefined;
|
|
59
|
+
const open = controlled ? value : inner;
|
|
60
|
+
const latest = React.useRef(open);
|
|
61
|
+
latest.current = open;
|
|
62
|
+
const onChangeRef = React.useRef(onChange);
|
|
63
|
+
onChangeRef.current = onChange;
|
|
64
|
+
const restore = React.useRef(false);
|
|
65
|
+
const set = React.useCallback((next, reason = 'toggle') => {
|
|
66
|
+
if (reason !== 'layout')
|
|
67
|
+
restore.current = false;
|
|
68
|
+
if (next === latest.current)
|
|
69
|
+
return;
|
|
70
|
+
latest.current = next;
|
|
71
|
+
if (!controlled)
|
|
72
|
+
setInner(next);
|
|
73
|
+
onChangeRef.current?.(next, reason);
|
|
74
|
+
}, [controlled]);
|
|
75
|
+
return { open, set, restore };
|
|
76
|
+
}
|
|
77
|
+
/** Scroll container that is keyboard-focusable only while it actually overflows. */
|
|
78
|
+
function useScrollable() {
|
|
79
|
+
const [node, setNode] = React.useState(null);
|
|
80
|
+
const [scrollable, setScrollable] = React.useState(false);
|
|
81
|
+
useIsoLayoutEffect(() => {
|
|
82
|
+
if (!node || typeof ResizeObserver === 'undefined')
|
|
83
|
+
return undefined;
|
|
84
|
+
const update = () => setScrollable(node.scrollHeight > node.clientHeight + 1);
|
|
85
|
+
update();
|
|
86
|
+
const observer = new ResizeObserver(update);
|
|
87
|
+
observer.observe(node);
|
|
88
|
+
const content = node.firstElementChild;
|
|
89
|
+
if (content)
|
|
90
|
+
observer.observe(content);
|
|
91
|
+
return () => observer.disconnect();
|
|
92
|
+
}, [node]);
|
|
93
|
+
return { ref: setNode, scrollable };
|
|
94
|
+
}
|
|
95
|
+
const present = (node) => node != null && node !== false;
|
|
96
|
+
export const AgentShell = React.forwardRef(function AgentShell({ rail, index, header, conversation, composer, context, mainLabel, indexLabel, contextLabel, contextOpen: contextOpenProp, defaultContextOpen = false, onContextOpenChange, indexOpen: indexOpenProp, defaultIndexOpen = true, onIndexOpenChange, contextSize, defaultContextSize = 352, onContextSizeChange, contextMin = 288, contextMax = 640, resizable = true, breakpoints, layout: layoutProp, activeId, className, style, ...rest }, forwardedRef) {
|
|
97
|
+
const messages = useAgentMessages().shell;
|
|
98
|
+
const rootRef = React.useRef(null);
|
|
99
|
+
const contextRef = React.useRef(null);
|
|
100
|
+
const setRoot = React.useCallback((el) => {
|
|
101
|
+
rootRef.current = el;
|
|
102
|
+
if (typeof forwardedRef === 'function')
|
|
103
|
+
forwardedRef(el);
|
|
104
|
+
else if (forwardedRef)
|
|
105
|
+
forwardedRef.current = el;
|
|
106
|
+
}, [forwardedRef]);
|
|
107
|
+
const measured = useShellMeasure(rootRef, breakpoints?.context ?? DEFAULT_BREAKPOINTS.context, breakpoints?.index ?? DEFAULT_BREAKPOINTS.index);
|
|
108
|
+
const layout = layoutProp ?? measured.layout;
|
|
109
|
+
const hasContext = present(context);
|
|
110
|
+
const hasIndex = present(index);
|
|
111
|
+
const ctx = useOpenState(contextOpenProp, defaultContextOpen, onContextOpenChange);
|
|
112
|
+
const idx = useOpenState(indexOpenProp, defaultIndexOpen, onIndexOpenChange);
|
|
113
|
+
// Leaving a layout closes what no longer fits *before* a sheet could open for it: sheets only
|
|
114
|
+
// follow `open` once the layout change has been reconciled (`synced`).
|
|
115
|
+
// Starts from `wide` (the server / first-paint layout) so a narrow first measurement closes
|
|
116
|
+
// what the defaults opened instead of popping a sheet on load.
|
|
117
|
+
const [synced, setSynced] = React.useState('wide');
|
|
118
|
+
useIsoLayoutEffect(() => {
|
|
119
|
+
if (synced === layout)
|
|
120
|
+
return;
|
|
121
|
+
const reconcile = (state, threshold) => {
|
|
122
|
+
const was = rank[synced] >= threshold;
|
|
123
|
+
const is = rank[layout] >= threshold;
|
|
124
|
+
if (was && !is && state.open) {
|
|
125
|
+
state.set(false, 'layout');
|
|
126
|
+
state.restore.current = true;
|
|
127
|
+
}
|
|
128
|
+
else if (!was && is && state.restore.current) {
|
|
129
|
+
state.restore.current = false;
|
|
130
|
+
state.set(true, 'layout');
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
reconcile(ctx, rank.wide);
|
|
134
|
+
reconcile(idx, rank.compact);
|
|
135
|
+
setSynced(layout);
|
|
136
|
+
}, [layout, synced]);
|
|
137
|
+
// Picking a conversation in the narrow index sheet closes the sheet.
|
|
138
|
+
const prevActive = React.useRef(activeId);
|
|
139
|
+
React.useEffect(() => {
|
|
140
|
+
if (prevActive.current === activeId)
|
|
141
|
+
return;
|
|
142
|
+
prevActive.current = activeId;
|
|
143
|
+
if (layout === 'narrow' && idx.open)
|
|
144
|
+
idx.set(false, 'selection');
|
|
145
|
+
});
|
|
146
|
+
// Focus return for the inline pane: remember the opener, restore it when the pane closes with focus inside.
|
|
147
|
+
const opener = React.useRef(null);
|
|
148
|
+
const focusWithin = React.useRef(false);
|
|
149
|
+
const wasOpen = React.useRef(ctx.open);
|
|
150
|
+
useIsoLayoutEffect(() => {
|
|
151
|
+
if (ctx.open === wasOpen.current)
|
|
152
|
+
return;
|
|
153
|
+
wasOpen.current = ctx.open;
|
|
154
|
+
if (typeof document === 'undefined')
|
|
155
|
+
return;
|
|
156
|
+
const active = document.activeElement;
|
|
157
|
+
if (ctx.open) {
|
|
158
|
+
opener.current = active && active !== document.body ? active : null;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const pane = contextRef.current;
|
|
162
|
+
// `inert` may already have blurred the focused control, so also trust the focus-within flag.
|
|
163
|
+
if (focusWithin.current || (pane && active && pane.contains(active))) {
|
|
164
|
+
focusWithin.current = false;
|
|
165
|
+
const target = opener.current;
|
|
166
|
+
if (target?.isConnected)
|
|
167
|
+
target.focus();
|
|
168
|
+
else
|
|
169
|
+
rootRef.current?.querySelector('.rl-agent-shell__main')?.focus();
|
|
170
|
+
}
|
|
171
|
+
opener.current = null;
|
|
172
|
+
}, [ctx.open]);
|
|
173
|
+
const [innerSize, setInnerSize] = React.useState(defaultContextSize);
|
|
174
|
+
const rawSize = contextSize ?? innerSize;
|
|
175
|
+
const fitMax = measured.width ? Math.max(contextMin, Math.min(contextMax, measured.width - measured.side - READING_MIN)) : contextMax;
|
|
176
|
+
const paneSize = Math.round(Math.min(Math.max(rawSize, contextMin), fitMax));
|
|
177
|
+
const setSize = (next) => {
|
|
178
|
+
if (contextSize === undefined)
|
|
179
|
+
setInnerSize(next);
|
|
180
|
+
onContextSizeChange?.(next);
|
|
181
|
+
};
|
|
182
|
+
const inlineContext = hasContext && layout === 'wide';
|
|
183
|
+
const inlineIndex = hasIndex && layout !== 'narrow';
|
|
184
|
+
const contextOpen = hasContext && ctx.open;
|
|
185
|
+
const indexOpen = hasIndex && idx.open;
|
|
186
|
+
const value = React.useMemo(() => ({
|
|
187
|
+
layout,
|
|
188
|
+
hasContext,
|
|
189
|
+
hasIndex,
|
|
190
|
+
contextOpen,
|
|
191
|
+
setContextOpen: ctx.set,
|
|
192
|
+
toggleContext: () => ctx.set(!contextOpen, 'toggle'),
|
|
193
|
+
indexOpen,
|
|
194
|
+
setIndexOpen: idx.set,
|
|
195
|
+
indexCollapsed: hasIndex && (!inlineIndex || !indexOpen),
|
|
196
|
+
}), [layout, hasContext, hasIndex, contextOpen, ctx.set, indexOpen, idx.set, inlineIndex]);
|
|
197
|
+
const scroller = useScrollable();
|
|
198
|
+
const sheetsReady = synced === layout;
|
|
199
|
+
return (_jsxs(ShellContext.Provider, { value: value, children: [_jsxs("div", { ...rest, ref: setRoot, className: cx('rl-agent-shell', className), style: { ...style, ['--rl-agent-pane-size']: `${paneSize}px` }, "data-layout": layout, "data-context-open": (inlineContext && contextOpen) || undefined, children: [present(rail) && layout !== 'narrow' && _jsx("div", { className: "rl-agent-shell__rail", children: rail }), inlineIndex && indexOpen && (_jsx("section", { className: "rl-agent-shell__index", "aria-label": indexLabel ?? messages.indexLabel, children: index })), _jsxs("section", { className: "rl-agent-shell__main", "aria-label": mainLabel ?? messages.mainLabel, tabIndex: -1, children: [present(header) && _jsx("div", { className: "rl-agent-shell__header", children: header }), _jsx("div", { ref: scroller.ref, className: "rl-agent-shell__conversation", tabIndex: scroller.scrollable ? 0 : undefined, children: _jsx("div", { className: "rl-agent-shell__reading", children: conversation }) }), present(composer) && (_jsx("div", { className: "rl-agent-shell__composer", children: _jsx("div", { className: "rl-agent-shell__reading", children: composer }) }))] }), inlineContext && resizable && contextOpen && (_jsx(ResizeHandle, { className: "rl-agent-shell__handle", size: paneSize, onSizeChange: setSize, min: contextMin, max: fitMax, resetSize: defaultContextSize, pane: "end" })), inlineContext && (_jsx("div", { ref: contextRef, className: "rl-agent-shell__context", "data-open": contextOpen || undefined, inert: !contextOpen, "aria-hidden": !contextOpen || undefined, onFocus: () => {
|
|
200
|
+
focusWithin.current = true;
|
|
201
|
+
}, onBlur: (event) => {
|
|
202
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
203
|
+
focusWithin.current = false;
|
|
204
|
+
}, children: _jsx("div", { className: "rl-agent-shell__context-inner", children: _jsx(PresentationContext.Provider, { value: "inline", children: context }) }) }))] }), hasIndex && !inlineIndex && (_jsx(Drawer, { open: sheetsReady && indexOpen, onOpenChange: (open) => idx.set(open, 'dismiss'), side: "start", size: "sm", title: indexLabel ?? messages.indexLabel, className: "rl-agent-shell__sheet", children: index })), hasContext && !inlineContext && (_jsx(Drawer, { open: sheetsReady && contextOpen, onOpenChange: (open) => ctx.set(open, 'dismiss'), side: "end", size: "md", title: contextLabel ?? messages.contextLabel, className: "rl-agent-shell__sheet", children: _jsx(PresentationContext.Provider, { value: "sheet", children: context }) }))] }));
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=AgentShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentShell.js","sourceRoot":"","sources":["../../../src/components/shell/AgentShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* AgentSidePane (atlas 26): the context / detail pane. A `complementary` landmark
|
|
4
|
+
* (`<aside aria-label>`) with Tabs (@wzrhine/react) over `sections`.
|
|
5
|
+
*
|
|
6
|
+
* - Every panel stays mounted (`keepMounted`), hidden ones with `hidden`, and each panel is its
|
|
7
|
+
* own scroll container, so switching tabs keeps every tab's scroll position.
|
|
8
|
+
* - A panel that overflows becomes keyboard-scrollable (`tabIndex=0` comes from Base UI).
|
|
9
|
+
* - `count` renders after the tab label and is part of the tab's name; `content` can carry its
|
|
10
|
+
* own loading / error / empty state.
|
|
11
|
+
* - Close button only with `onClose`, or automatically inside an inline AgentShell pane (it
|
|
12
|
+
* closes the pane and the shell returns focus). Inside the shell's sheet the Drawer has its
|
|
13
|
+
* own close button, so the pane's title row and close button are not repeated there.
|
|
14
|
+
* - With one section the tab strip is omitted and the section label becomes the heading.
|
|
15
|
+
* - Motion: tab indicator from Tabs (CSS, `--rl-motion-base`); pane open / close belongs to
|
|
16
|
+
* AgentShell. No content drift between tabs.
|
|
17
|
+
*/
|
|
18
|
+
export interface AgentSidePaneSection {
|
|
19
|
+
id: string;
|
|
20
|
+
label: string;
|
|
21
|
+
count?: number;
|
|
22
|
+
content: React.ReactNode;
|
|
23
|
+
}
|
|
24
|
+
export type AgentSidePaneProps = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'title'> & {
|
|
25
|
+
sections: AgentSidePaneSection[];
|
|
26
|
+
activeTab?: string;
|
|
27
|
+
defaultTab?: string;
|
|
28
|
+
onTabChange?: (id: string) => void;
|
|
29
|
+
/** Accessible name of the landmark (and visible heading). */
|
|
30
|
+
label?: string;
|
|
31
|
+
/** Hide the visible heading (the landmark keeps its name). */
|
|
32
|
+
hideHeading?: boolean;
|
|
33
|
+
onClose?: () => void;
|
|
34
|
+
closeLabel?: string;
|
|
35
|
+
/** Accessible name of the tab list. */
|
|
36
|
+
tabsLabel?: string;
|
|
37
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
38
|
+
};
|
|
39
|
+
export declare const AgentSidePane: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children" | "title"> & {
|
|
40
|
+
sections: AgentSidePaneSection[];
|
|
41
|
+
activeTab?: string;
|
|
42
|
+
defaultTab?: string;
|
|
43
|
+
onTabChange?: (id: string) => void;
|
|
44
|
+
/** Accessible name of the landmark (and visible heading). */
|
|
45
|
+
label?: string;
|
|
46
|
+
/** Hide the visible heading (the landmark keeps its name). */
|
|
47
|
+
hideHeading?: boolean;
|
|
48
|
+
onClose?: () => void;
|
|
49
|
+
closeLabel?: string;
|
|
50
|
+
/** Accessible name of the tab list. */
|
|
51
|
+
tabsLabel?: string;
|
|
52
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
53
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
54
|
+
//# sourceMappingURL=AgentSidePane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSidePane.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentSidePane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IAC/F,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,aAAa;cAfd,oBAAoB,EAAE;gBACpB,MAAM;iBACL,MAAM;kBACL,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;IAClC,6DAA6D;YACrD,MAAM;IACd,8DAA8D;kBAChD,OAAO;cACX,MAAM,IAAI;iBACP,MAAM;IACnB,uCAAuC;gBAC3B,MAAM;mBACH,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;qCAwEhC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { IconButton, Tab, TabList, TabPanel, Tabs } from '@wzrhine/react';
|
|
5
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
6
|
+
import { AgentIcon } from '../../primitives/icons.js';
|
|
7
|
+
import { cx } from '../../utils/cx.js';
|
|
8
|
+
import { useAgentContextPresentation, useAgentShell } from './AgentShell.js';
|
|
9
|
+
import { useControllable } from './use-controllable.js';
|
|
10
|
+
export const AgentSidePane = React.forwardRef(function AgentSidePane({ sections, activeTab, defaultTab, onTabChange, label, hideHeading = false, onClose: onCloseProp, closeLabel, tabsLabel, headingLevel = 2, className, ...rest }, ref) {
|
|
11
|
+
const shell = useAgentMessages().shell;
|
|
12
|
+
const format = useAgentFormat();
|
|
13
|
+
const shellState = useAgentShell();
|
|
14
|
+
const presentation = useAgentContextPresentation();
|
|
15
|
+
const headingId = React.useId();
|
|
16
|
+
const [current, setCurrent] = useControllable(activeTab, defaultTab ?? sections[0]?.id ?? '', onTabChange);
|
|
17
|
+
const value = sections.some((section) => section.id === current) ? current : (sections[0]?.id ?? '');
|
|
18
|
+
const name = label ?? shell.paneLabel;
|
|
19
|
+
const Heading = `h${headingLevel}`;
|
|
20
|
+
const inSheet = presentation === 'sheet';
|
|
21
|
+
const onClose = onCloseProp ?? (presentation === 'inline' && shellState ? () => shellState.setContextOpen(false, 'toggle') : undefined);
|
|
22
|
+
const single = sections.length === 1 ? sections[0] : undefined;
|
|
23
|
+
const showHead = !inSheet && (!hideHeading || onClose);
|
|
24
|
+
return (_jsxs("aside", { ...rest, ref: ref, className: cx('rl-agent-pane', className), "aria-label": name, "data-presentation": presentation, children: [showHead && (_jsxs("div", { className: "rl-agent-pane__head", children: [hideHeading ? (_jsx("span", {})) : (_jsx(Heading, { id: headingId, className: "rl-agent-pane__title", children: single ? single.label : name })), onClose && !inSheet && (_jsx(IconButton, { size: "sm", icon: _jsx(AgentIcon, { name: "close" }), label: closeLabel ?? shell.paneClose, onClick: onClose }))] })), single ? (_jsx("div", { className: "rl-agent-pane__panel rl-agent-pane__panel--single", children: single.content })) : (sections.length > 0 && (_jsxs(Tabs, { className: "rl-agent-pane__tabs", value: value, onValueChange: setCurrent, size: "sm", children: [_jsx(TabList, { className: "rl-agent-pane__tablist", "aria-label": tabsLabel ?? shell.paneTabs, children: sections.map((section) => (_jsx(Tab, { value: section.id, meta: section.count != null ? format.compact(section.count) : undefined, children: section.label }, section.id))) }), sections.map((section) => (_jsx(TabPanel, { value: section.id, keepMounted: true, className: "rl-agent-pane__panel", children: section.content }, section.id)))] })))] }));
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=AgentSidePane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentSidePane.js","sourceRoot":"","sources":["../../../src/components/shell/AgentSidePane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* ResizeHandle (atlas 01): a focusable vertical splitter between two columns.
|
|
4
|
+
*
|
|
5
|
+
* - Semantics: `role="separator"` + `aria-orientation="vertical"` with `aria-valuenow / min / max`
|
|
6
|
+
* and a readable `aria-valuetext`; the value is the size (CSS pixels) of the pane it resizes.
|
|
7
|
+
* - Pointer: drag with pointer capture; the size follows the pointer directly (no animation,
|
|
8
|
+
* ADR-0012 「侧栏拖动调宽」). Double-click resets to `resetSize` (default `defaultSize`).
|
|
9
|
+
* - Keyboard: ←/→ move the splitter by `step` (Shift: `largeStep`), Home / End jump to min / max.
|
|
10
|
+
* Arrows move the splitter physically, so with the pane at the inline end ← makes it wider; the
|
|
11
|
+
* direction follows `dir="rtl"`.
|
|
12
|
+
* - Controlled with `size` + `onSizeChange`, or uncontrolled with `defaultSize`.
|
|
13
|
+
*/
|
|
14
|
+
export type ResizeHandleProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'defaultValue' | 'onChange'> & {
|
|
15
|
+
size?: number;
|
|
16
|
+
defaultSize?: number;
|
|
17
|
+
onSizeChange?: (size: number) => void;
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
/** Arrow-key step in CSS pixels. */
|
|
21
|
+
step?: number;
|
|
22
|
+
/** Shift + arrow step. */
|
|
23
|
+
largeStep?: number;
|
|
24
|
+
/** Size restored on double-click; defaults to `defaultSize`. */
|
|
25
|
+
resetSize?: number;
|
|
26
|
+
/** Logical side of the handle the resized pane is on. */
|
|
27
|
+
pane?: 'start' | 'end';
|
|
28
|
+
/** Accessible name; defaults to the shell copy 「调整详情面板宽度」. */
|
|
29
|
+
label?: string;
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
};
|
|
32
|
+
export declare const ResizeHandle: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "role" | "defaultValue" | "onChange"> & {
|
|
33
|
+
size?: number;
|
|
34
|
+
defaultSize?: number;
|
|
35
|
+
onSizeChange?: (size: number) => void;
|
|
36
|
+
min: number;
|
|
37
|
+
max: number;
|
|
38
|
+
/** Arrow-key step in CSS pixels. */
|
|
39
|
+
step?: number;
|
|
40
|
+
/** Shift + arrow step. */
|
|
41
|
+
largeStep?: number;
|
|
42
|
+
/** Size restored on double-click; defaults to `defaultSize`. */
|
|
43
|
+
resetSize?: number;
|
|
44
|
+
/** Logical side of the handle the resized pane is on. */
|
|
45
|
+
pane?: "start" | "end";
|
|
46
|
+
/** Accessible name; defaults to the shell copy 「调整详情面板宽度」. */
|
|
47
|
+
label?: string;
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
50
|
+
//# sourceMappingURL=ResizeHandle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../../src/components/shell/ResizeHandle.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG;IAC9H,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AASF,eAAO,MAAM,YAAY;WAzBhB,MAAM;kBACC,MAAM;mBACL,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;SAChC,MAAM;SACN,MAAM;IACX,oCAAoC;WAC7B,MAAM;IACb,0BAA0B;gBACd,MAAM;IAClB,gEAAgE;gBACpD,MAAM;IAClB,yDAAyD;WAClD,OAAO,GAAG,KAAK;IACtB,8DAA8D;YACtD,MAAM;eACH,OAAO;wCA2HlB,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
|
|
5
|
+
import { cx } from '../../utils/cx.js';
|
|
6
|
+
import { useControllable } from './use-controllable.js';
|
|
7
|
+
const clamp = (value, min, max) => Math.round(Math.min(Math.max(value, min), Math.max(min, max)));
|
|
8
|
+
function isRtl(el) {
|
|
9
|
+
if (typeof getComputedStyle === 'undefined')
|
|
10
|
+
return false;
|
|
11
|
+
return getComputedStyle(el).direction === 'rtl' || el.closest('[dir]')?.getAttribute('dir') === 'rtl';
|
|
12
|
+
}
|
|
13
|
+
export const ResizeHandle = React.forwardRef(function ResizeHandle({ size: sizeProp, defaultSize, onSizeChange, min, max, step = 16, largeStep = 64, resetSize, pane = 'end', label, disabled = false, className, onKeyDown, onPointerDown, onPointerMove, onPointerUp, onPointerCancel, onLostPointerCapture, onDoubleClick, ...rest }, ref) {
|
|
14
|
+
const messages = useAgentMessages().shell;
|
|
15
|
+
const format = useAgentFormat();
|
|
16
|
+
const initial = defaultSize ?? min;
|
|
17
|
+
const [rawSize, setRawSize] = useControllable(sizeProp, initial, onSizeChange);
|
|
18
|
+
const size = clamp(rawSize, min, max);
|
|
19
|
+
const drag = React.useRef(null);
|
|
20
|
+
const [dragging, setDragging] = React.useState(false);
|
|
21
|
+
const commit = (next) => setRawSize(clamp(next, min, max));
|
|
22
|
+
// Physical direction in which a positive pointer delta grows the pane.
|
|
23
|
+
const growDirection = (el) => {
|
|
24
|
+
const towardStart = pane === 'end';
|
|
25
|
+
const rtl = isRtl(el);
|
|
26
|
+
return towardStart !== rtl ? -1 : 1;
|
|
27
|
+
};
|
|
28
|
+
const endDrag = () => {
|
|
29
|
+
drag.current = null;
|
|
30
|
+
setDragging(false);
|
|
31
|
+
};
|
|
32
|
+
return (_jsx("div", { ...rest, ref: ref, role: "separator", "aria-orientation": "vertical", "aria-label": rest['aria-labelledby'] ? undefined : (label ?? messages.resizeContext), "aria-valuenow": size, "aria-valuemin": min, "aria-valuemax": Math.max(min, max), "aria-valuetext": messages.resizeValue(format.number(size)), "aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : 0, className: cx('rl-agent-resize', className), "data-pane": pane, "data-dragging": dragging || undefined, "data-disabled": disabled || undefined, onKeyDown: (event) => {
|
|
33
|
+
onKeyDown?.(event);
|
|
34
|
+
if (event.defaultPrevented || disabled)
|
|
35
|
+
return;
|
|
36
|
+
const amount = event.shiftKey ? largeStep : step;
|
|
37
|
+
const dir = growDirection(event.currentTarget);
|
|
38
|
+
let next = null;
|
|
39
|
+
if (event.key === 'ArrowLeft')
|
|
40
|
+
next = size - amount * dir;
|
|
41
|
+
else if (event.key === 'ArrowRight')
|
|
42
|
+
next = size + amount * dir;
|
|
43
|
+
else if (event.key === 'Home')
|
|
44
|
+
next = min;
|
|
45
|
+
else if (event.key === 'End')
|
|
46
|
+
next = max;
|
|
47
|
+
if (next === null)
|
|
48
|
+
return;
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
commit(next);
|
|
51
|
+
}, onPointerDown: (event) => {
|
|
52
|
+
onPointerDown?.(event);
|
|
53
|
+
if (event.defaultPrevented || disabled || event.button !== 0)
|
|
54
|
+
return;
|
|
55
|
+
event.currentTarget.setPointerCapture?.(event.pointerId);
|
|
56
|
+
drag.current = { x: event.clientX, size, dir: growDirection(event.currentTarget), id: event.pointerId };
|
|
57
|
+
setDragging(true);
|
|
58
|
+
// Keeps the drag from selecting text; focus still lands on the handle.
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
event.currentTarget.focus();
|
|
61
|
+
}, onPointerMove: (event) => {
|
|
62
|
+
onPointerMove?.(event);
|
|
63
|
+
const current = drag.current;
|
|
64
|
+
if (!current || current.id !== event.pointerId)
|
|
65
|
+
return;
|
|
66
|
+
commit(current.size + (event.clientX - current.x) * current.dir);
|
|
67
|
+
}, onPointerUp: (event) => {
|
|
68
|
+
onPointerUp?.(event);
|
|
69
|
+
if (drag.current?.id === event.pointerId)
|
|
70
|
+
endDrag();
|
|
71
|
+
}, onPointerCancel: (event) => {
|
|
72
|
+
onPointerCancel?.(event);
|
|
73
|
+
endDrag();
|
|
74
|
+
}, onLostPointerCapture: (event) => {
|
|
75
|
+
onLostPointerCapture?.(event);
|
|
76
|
+
endDrag();
|
|
77
|
+
}, onDoubleClick: (event) => {
|
|
78
|
+
onDoubleClick?.(event);
|
|
79
|
+
if (event.defaultPrevented || disabled)
|
|
80
|
+
return;
|
|
81
|
+
commit(resetSize ?? initial);
|
|
82
|
+
} }));
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=ResizeHandle.js.map
|