@mastra/playground-ui 68.0.0-alpha.2 → 68.0.0-alpha.3
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/dist/KnowledgePageGraph.css +55 -0
- package/dist/{MarkdownRenderer-2GOXQJEv.js → MarkdownRenderer-CI30RqdB.js} +19 -6
- package/dist/MarkdownRenderer-CI30RqdB.js.map +1 -0
- package/dist/{MarkdownRenderer-CB8Z_CHc.cjs → MarkdownRenderer-y65WGBhC.cjs} +19 -6
- package/dist/MarkdownRenderer-y65WGBhC.cjs.map +1 -0
- package/dist/{activity-rJ1NQl_2.js → activity-C8Ql81WM.js} +2 -2
- package/dist/{activity-rJ1NQl_2.js.map → activity-C8Ql81WM.js.map} +1 -1
- package/dist/{activity-DyB5H3gF.cjs → activity-CcQZeDYi.cjs} +2 -2
- package/dist/{activity-DyB5H3gF.cjs.map → activity-CcQZeDYi.cjs.map} +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +1 -1
- package/dist/components/SavedViews.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +2 -2
- package/dist/components/ai/tool-call.es.js +2 -2
- package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
- package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
- package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js +52 -6
- package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/knowledge-links.es.js +53 -9
- package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +10 -3
- package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +10 -3
- package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +8 -3
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +8 -3
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -1
- package/dist/domains/chat/knowledge.cjs.js +2 -0
- package/dist/domains/chat/knowledge.es.js +2 -2
- package/dist/domains/chat/messages/message-row.cjs.js +3 -3
- package/dist/domains/chat/messages/message-row.es.js +3 -3
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +35 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +36 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js +80 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.d.ts +1 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.es.js +78 -0
- package/dist/domains/chat/tools/badges/knowledge-body-range.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +163 -13
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +165 -15
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js +51 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.d.ts +1 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js +49 -0
- package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +7 -2
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +7 -2
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +9 -4
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.es.js +9 -4
- package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js +81 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js.map +1 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.d.ts +1 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js +77 -0
- package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js.map +1 -0
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +11 -2
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +11 -2
- package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +240 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.d.ts +1 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js +239 -0
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request.cjs.js +40 -0
- package/dist/domains/chat/tools/mcp-input-request.cjs.js.map +1 -0
- package/dist/domains/chat/tools/mcp-input-request.d.ts +1 -0
- package/dist/domains/chat/tools/mcp-input-request.es.js +33 -0
- package/dist/domains/chat/tools/mcp-input-request.es.js.map +1 -0
- package/dist/domains/chat/tools/tool-card-kind.cjs.js +8 -3
- package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-card-kind.es.js +8 -4
- package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-groups.es.js +1 -1
- package/dist/domains/chat.cjs.js +5 -3
- package/dist/domains/chat.es.js +4 -4
- package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js +48 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.es.js +47 -0
- package/dist/domains/knowledge/components/KnowledgePageCard.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +63 -5
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +64 -6
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +485 -47
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +487 -50
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +1051 -123
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +1054 -126
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +75 -3
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js +76 -4
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
- package/dist/domains/knowledge/lib/circleText.cjs.js +9 -0
- package/dist/domains/knowledge/lib/circleText.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/circleText.d.ts +1 -0
- package/dist/domains/knowledge/lib/circleText.es.js +8 -0
- package/dist/domains/knowledge/lib/circleText.es.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js +82 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.d.ts +1 -0
- package/dist/domains/knowledge/lib/fitViewport.es.js +73 -0
- package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -0
- package/dist/domains/knowledge/lib/graphShape.cjs.js +524 -0
- package/dist/domains/knowledge/lib/graphShape.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/graphShape.d.ts +1 -0
- package/dist/domains/knowledge/lib/graphShape.es.js +499 -0
- package/dist/domains/knowledge/lib/graphShape.es.js.map +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.cjs.js +11 -0
- package/dist/domains/knowledge/lib/linkCountsText.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.d.ts +1 -0
- package/dist/domains/knowledge/lib/linkCountsText.es.js +10 -0
- package/dist/domains/knowledge/lib/linkCountsText.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js +29 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageAddress.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageAddress.es.js +27 -0
- package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageGraph.cjs.js +11 -11
- package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageGraph.es.js +11 -11
- package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.cjs.js +69 -0
- package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pageRefs.d.ts +1 -0
- package/dist/domains/knowledge/lib/pageRefs.es.js +66 -0
- package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js +5 -0
- package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageTree.es.js +5 -1
- package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -1
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js +82 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +1 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js +78 -0
- package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js.map +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.cjs.js +77 -0
- package/dist/domains/knowledge/lib/tooltipSide.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.d.ts +1 -0
- package/dist/domains/knowledge/lib/tooltipSide.es.js +75 -0
- package/dist/domains/knowledge/lib/tooltipSide.es.js.map +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js +65 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.d.ts +1 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.es.js +62 -0
- package/dist/domains/knowledge/lib/useLeavingNodes.es.js.map +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.cjs.js +15 -0
- package/dist/domains/knowledge/lib/useStableWhile.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.d.ts +1 -0
- package/dist/domains/knowledge/lib/useStableWhile.es.js +14 -0
- package/dist/domains/knowledge/lib/useStableWhile.es.js.map +1 -0
- package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
- package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
- package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
- package/dist/domains/skills/skill-simple-form.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
- package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +8 -2
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +8 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +3 -3
- package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
- package/dist/lib/form/dynamic-form.cjs.js +2 -2
- package/dist/lib/form/dynamic-form.es.js +2 -2
- package/dist/lib/form/json-draft.cjs.js +1 -1
- package/dist/lib/form/json-draft.es.js +1 -1
- package/dist/lib/form/zod-provider.cjs.js +1 -1
- package/dist/lib/form/zod-provider.es.js +1 -1
- package/dist/{span-payload-primitives-B3RdahsC.js → span-payload-primitives-CKKIAVPJ.js} +4 -4
- package/dist/{span-payload-primitives-B3RdahsC.js.map → span-payload-primitives-CKKIAVPJ.js.map} +1 -1
- package/dist/{span-payload-primitives-_2d-pAOD.cjs → span-payload-primitives-D4tHWN2W.cjs} +4 -4
- package/dist/{span-payload-primitives-_2d-pAOD.cjs.map → span-payload-primitives-D4tHWN2W.cjs.map} +1 -1
- package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +32 -4
- package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +2 -0
- package/dist/src/domains/chat/tools/badges/knowledge-body-range.d.ts +12 -0
- package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +5 -2
- package/dist/src/domains/chat/tools/badges/mcp-input-request-badge.d.ts +18 -0
- package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +4 -1
- package/dist/src/domains/chat/tools/badges/use-deferred-input-request.d.ts +44 -0
- package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +6 -1
- package/dist/src/domains/chat/tools/mcp-input-request-tool.d.ts +18 -0
- package/dist/src/domains/chat/tools/mcp-input-request.d.ts +40 -0
- package/dist/src/domains/chat/tools/tool-card-kind.d.ts +4 -2
- package/dist/src/domains/chat/tools/tool-card.d.ts +1 -1
- package/dist/src/domains/knowledge/components/KnowledgePageCard.d.ts +23 -0
- package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +29 -0
- package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +27 -1
- package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +2 -1
- package/dist/src/domains/knowledge/lib/circleText.d.ts +2 -0
- package/dist/src/domains/knowledge/lib/fitViewport.d.ts +67 -0
- package/dist/src/domains/knowledge/lib/graphShape.d.ts +131 -0
- package/dist/src/domains/knowledge/lib/linkCountsText.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/pageAddress.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/pageGraph.d.ts +4 -4
- package/dist/src/domains/knowledge/lib/pageRefs.d.ts +15 -0
- package/dist/src/domains/knowledge/lib/pageTree.d.ts +2 -0
- package/dist/src/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +13 -0
- package/dist/src/domains/knowledge/lib/tooltipSide.d.ts +40 -0
- package/dist/src/domains/knowledge/lib/useLeavingNodes.d.ts +14 -0
- package/dist/src/domains/knowledge/lib/useStableWhile.d.ts +5 -0
- package/dist/src/domains/knowledge/pageTypes.d.ts +6 -1
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
- package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
- package/dist/style.css +69 -2
- package/dist/{tool-approval-1qiB4hhG.cjs → tool-approval-CJvPDL7D.cjs} +4 -4
- package/dist/{tool-approval-1qiB4hhG.cjs.map → tool-approval-CJvPDL7D.cjs.map} +1 -1
- package/dist/{tool-approval-B6MFcaKV.js → tool-approval-DyN11vFA.js} +4 -4
- package/dist/{tool-approval-B6MFcaKV.js.map → tool-approval-DyN11vFA.js.map} +1 -1
- package/dist/{tool-call-Bu66PkD-.cjs → tool-call-DBn14X-3.cjs} +9 -3
- package/dist/{tool-call-Bu66PkD-.cjs.map → tool-call-DBn14X-3.cjs.map} +1 -1
- package/dist/{tool-call-Ch9-jjXU.js → tool-call-Dsj43lvJ.js} +9 -3
- package/dist/{tool-call-Ch9-jjXU.js.map → tool-call-Dsj43lvJ.js.map} +1 -1
- package/dist/{tool-card-DrqPZfPQ.cjs → tool-card-rxhTDpk_.cjs} +164 -126
- package/dist/tool-card-rxhTDpk_.cjs.map +1 -0
- package/dist/{tool-card-sO6P2Qj4.js → tool-card-toDgoZzJ.js} +165 -127
- package/dist/tool-card-toDgoZzJ.js.map +1 -0
- package/dist/{tool-presentation-DvCsb_kz.js → tool-presentation-CvibOP1J.js} +6 -1
- package/dist/tool-presentation-CvibOP1J.js.map +1 -0
- package/dist/{tool-presentation-CQlDEwgS.cjs → tool-presentation-D6nzVruN.cjs} +6 -1
- package/dist/tool-presentation-D6nzVruN.cjs.map +1 -0
- package/package.json +10 -10
- package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
- package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
- package/dist/domains/knowledge/lib/pageLayout.cjs.js +0 -49
- package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +0 -1
- package/dist/domains/knowledge/lib/pageLayout.d.ts +0 -1
- package/dist/domains/knowledge/lib/pageLayout.es.js +0 -48
- package/dist/domains/knowledge/lib/pageLayout.es.js.map +0 -1
- package/dist/src/domains/knowledge/lib/pageLayout.d.ts +0 -24
- package/dist/tool-card-DrqPZfPQ.cjs.map +0 -1
- package/dist/tool-card-sO6P2Qj4.js.map +0 -1
- package/dist/tool-presentation-CQlDEwgS.cjs.map +0 -1
- package/dist/tool-presentation-DvCsb_kz.js.map +0 -1
|
@@ -1,16 +1,139 @@
|
|
|
1
1
|
import { t as Txt } from "../../../Txt-BM6TVV_c.js";
|
|
2
2
|
import { n as EmptyState } from "../../../EmptyState-P-Gy898T.js";
|
|
3
3
|
import { useIsMobile } from "../../../hooks/use-is-mobile.es.js";
|
|
4
|
+
import { bodyLinkEdges, bodyLinkRefs, knowledgePageRefIndex } from "../lib/pageRefs.es.js";
|
|
4
5
|
import { KnowledgeNoteItem, KnowledgePageDetail } from "./KnowledgePageDetail.es.js";
|
|
6
|
+
import { isChildPlaceholder, isRestCircle, isScopeGroup, lazyGraph } from "../lib/graphShape.es.js";
|
|
5
7
|
import { mentionPopupPlacement } from "../lib/popupPlacement.es.js";
|
|
8
|
+
import { useStableWhile } from "../lib/useStableWhile.es.js";
|
|
6
9
|
import { KnowledgePageGraph } from "./KnowledgePageGraph.es.js";
|
|
7
10
|
import { KnowledgePageTree } from "./KnowledgePageTree.es.js";
|
|
8
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
11
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
9
12
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
-
import { X } from "lucide-react";
|
|
13
|
+
import { ArrowLeft, Hash, Link2, X } from "lucide-react";
|
|
11
14
|
// src/domains/knowledge/components/KnowledgePageExplorer.tsx
|
|
15
|
+
/** Page ids are ULIDs; a bare `[[id]]` is askable, a bare `[[Name]]` is not. */
|
|
16
|
+
var PAGE_ID_SHAPE = /^[0-9A-Z]{26}$/;
|
|
17
|
+
var JUST_CREATED_MS = 6e4;
|
|
18
|
+
var isJustCreated = (page) => Date.now() - Date.parse(page.createdAt) < JUST_CREATED_MS;
|
|
12
19
|
var MIN_SEARCH_LENGTH = 2;
|
|
20
|
+
/** Links of the selected page drawn at most in each direction; the rest are counted. */
|
|
21
|
+
var FOCUS_LINK_CAP = 20;
|
|
22
|
+
/** Keys fetched per direction: a page reached by a note and by the body is two keys but one link, so this is twice the cap. */
|
|
23
|
+
var FOCUS_LINK_FETCH_CAP = 40;
|
|
24
|
+
function edgeKey(edge) {
|
|
25
|
+
return `${edge.kind}\u0000${edge.source}\u0000${edge.target}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The links to draw, and per page how many of its links (into it, out of it) go undrawn. With all links
|
|
29
|
+
* on, every link between drawn pages shows. Otherwise only the selected page's, up to
|
|
30
|
+
* {@link FOCUS_LINK_CAP} each way; with nothing selected, none.
|
|
31
|
+
*/
|
|
32
|
+
function visibleLinks(known, drawn, selectedId, all) {
|
|
33
|
+
const unique = /* @__PURE__ */ new Map();
|
|
34
|
+
for (const edge of known) if (edge.source !== edge.target && !unique.has(edgeKey(edge))) unique.set(edgeKey(edge), edge);
|
|
35
|
+
const pairs = /* @__PURE__ */ new Map();
|
|
36
|
+
for (const edge of unique.values()) pairs.set(`${edge.source}\u0000${edge.target}`, edge);
|
|
37
|
+
const shown = /* @__PURE__ */ new Set();
|
|
38
|
+
const more = {
|
|
39
|
+
in: 0,
|
|
40
|
+
out: 0
|
|
41
|
+
};
|
|
42
|
+
if (all) {
|
|
43
|
+
for (const [key, edge] of unique) if (drawn.has(edge.source) && drawn.has(edge.target)) shown.add(key);
|
|
44
|
+
} else if (selectedId) {
|
|
45
|
+
const admitted = /* @__PURE__ */ new Set();
|
|
46
|
+
const over = /* @__PURE__ */ new Set();
|
|
47
|
+
let ins = 0;
|
|
48
|
+
let outs = 0;
|
|
49
|
+
for (const [key, edge] of unique) {
|
|
50
|
+
if (!drawn.has(edge.source) || !drawn.has(edge.target)) continue;
|
|
51
|
+
const side = edge.source === selectedId ? "out" : edge.target === selectedId ? "in" : null;
|
|
52
|
+
if (!side) continue;
|
|
53
|
+
const pair = `${edge.source}\u0000${edge.target}`;
|
|
54
|
+
if (!admitted.has(pair) && !over.has(pair)) {
|
|
55
|
+
if ((side === "out" ? outs : ins) >= 20) {
|
|
56
|
+
over.add(pair);
|
|
57
|
+
more[side]++;
|
|
58
|
+
} else {
|
|
59
|
+
admitted.add(pair);
|
|
60
|
+
if (side === "out") outs++;
|
|
61
|
+
else ins++;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (admitted.has(pair)) shown.add(key);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const drawnPairs = new Set([...shown].map((key) => {
|
|
68
|
+
const edge = unique.get(key);
|
|
69
|
+
return `${edge.source}\u0000${edge.target}`;
|
|
70
|
+
}));
|
|
71
|
+
const hidden = /* @__PURE__ */ new Map();
|
|
72
|
+
const bump = (id, side) => {
|
|
73
|
+
if (!drawn.has(id)) return;
|
|
74
|
+
const counts = hidden.get(id) ?? {
|
|
75
|
+
in: 0,
|
|
76
|
+
out: 0
|
|
77
|
+
};
|
|
78
|
+
counts[side]++;
|
|
79
|
+
hidden.set(id, counts);
|
|
80
|
+
};
|
|
81
|
+
for (const [pair, edge] of pairs) {
|
|
82
|
+
if (drawnPairs.has(pair)) continue;
|
|
83
|
+
bump(edge.source, "out");
|
|
84
|
+
bump(edge.target, "in");
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
edges: [...unique.values()].filter((edge) => shown.has(edgeKey(edge))),
|
|
88
|
+
hidden,
|
|
89
|
+
more
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** The round buttons floating over the graph: muted when off or idle, a solid fill when pressed. */
|
|
93
|
+
var FLOAT_BUTTON = "flex size-9 cursor-pointer items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-overlay transition-colors hover:bg-fill-subtle hover:text-foreground aria-pressed:border-transparent aria-pressed:bg-fill-inverse aria-pressed:text-background aria-pressed:hover:bg-fill-inverse disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-card";
|
|
13
94
|
var noTreeLevels = () => [];
|
|
95
|
+
var noKeys = [];
|
|
96
|
+
var noLinkedPages = () => [];
|
|
97
|
+
var noLinkQuery = () => ({
|
|
98
|
+
isPending: false,
|
|
99
|
+
isError: false,
|
|
100
|
+
error: null
|
|
101
|
+
});
|
|
102
|
+
/** Longest a pointer rests on a page before its links are fetched, so sweeping across the graph fetches none. */
|
|
103
|
+
var HOVER_FETCH_DELAY_MS = 150;
|
|
104
|
+
/** Per page, the links into and out of it that none of `shown` draws, given the exact totals. */
|
|
105
|
+
function undrawnLinks(exact, shown) {
|
|
106
|
+
const drawn = /* @__PURE__ */ new Map();
|
|
107
|
+
const pairs = /* @__PURE__ */ new Set();
|
|
108
|
+
for (const edge of shown) {
|
|
109
|
+
if (edge.kind === "parent" || pairs.has(`${edge.source}\u0000${edge.target}`)) continue;
|
|
110
|
+
pairs.add(`${edge.source}\u0000${edge.target}`);
|
|
111
|
+
const out = drawn.get(edge.source) ?? {
|
|
112
|
+
in: 0,
|
|
113
|
+
out: 0
|
|
114
|
+
};
|
|
115
|
+
out.out++;
|
|
116
|
+
drawn.set(edge.source, out);
|
|
117
|
+
const into = drawn.get(edge.target) ?? {
|
|
118
|
+
in: 0,
|
|
119
|
+
out: 0
|
|
120
|
+
};
|
|
121
|
+
into.in++;
|
|
122
|
+
drawn.set(edge.target, into);
|
|
123
|
+
}
|
|
124
|
+
const hidden = /* @__PURE__ */ new Map();
|
|
125
|
+
for (const [id, total] of exact) {
|
|
126
|
+
const seen = drawn.get(id) ?? {
|
|
127
|
+
in: 0,
|
|
128
|
+
out: 0
|
|
129
|
+
};
|
|
130
|
+
hidden.set(id, {
|
|
131
|
+
in: Math.max(0, total.in - seen.in),
|
|
132
|
+
out: Math.max(0, total.out - seen.out)
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return hidden;
|
|
136
|
+
}
|
|
14
137
|
var noActivity = () => ({
|
|
15
138
|
isPending: false,
|
|
16
139
|
isError: false,
|
|
@@ -277,11 +400,15 @@ function SearchBox({ source, onSelect }) {
|
|
|
277
400
|
}) : null]
|
|
278
401
|
});
|
|
279
402
|
}
|
|
403
|
+
function sameLevels(a, b) {
|
|
404
|
+
const sameSet = (x, y) => x.size === y.size && [...x].every((id) => y.has(id));
|
|
405
|
+
return a.pages.length === b.pages.length && a.pages.every((page, index) => page === b.pages[index]) && sameSet(a.loaded, b.loaded) && sameSet(a.failed, b.failed) && a.nextCursor.size === b.nextCursor.size && [...a.nextCursor].every(([id, cursor]) => b.nextCursor.get(id) === cursor);
|
|
406
|
+
}
|
|
280
407
|
/**
|
|
281
408
|
* The tree loaded a level at a time through `useTreeLevels`: the root scopes, then each level as it is
|
|
282
409
|
* opened, plus the path to the selected page. Unloaded pages keep a chevron until opened.
|
|
283
410
|
*/
|
|
284
|
-
function useLazyTree(source, graph, selected) {
|
|
411
|
+
function useLazyTree(source, graph, selected, graphOpened) {
|
|
285
412
|
const [expanded, setExpanded] = useState(() => /* @__PURE__ */ new Set());
|
|
286
413
|
const [more, setMore] = useState(() => /* @__PURE__ */ new Map());
|
|
287
414
|
const requests = useMemo(() => {
|
|
@@ -293,17 +420,25 @@ function useLazyTree(source, graph, selected) {
|
|
|
293
420
|
cursor
|
|
294
421
|
});
|
|
295
422
|
}
|
|
423
|
+
for (const id of graphOpened) if (!expanded.has(id)) list.push({ parentId: id });
|
|
296
424
|
return list;
|
|
297
|
-
}, [
|
|
425
|
+
}, [
|
|
426
|
+
expanded,
|
|
427
|
+
more,
|
|
428
|
+
graphOpened
|
|
429
|
+
]);
|
|
298
430
|
const levels = (source.useTreeLevels ?? noTreeLevels)(requests);
|
|
299
|
-
const
|
|
431
|
+
const built = useMemo(() => {
|
|
432
|
+
const failedIds = /* @__PURE__ */ new Set();
|
|
300
433
|
const byId = /* @__PURE__ */ new Map();
|
|
301
434
|
const loadedIds = /* @__PURE__ */ new Set();
|
|
302
435
|
const next = /* @__PURE__ */ new Map();
|
|
303
436
|
levels.forEach((level, index) => {
|
|
304
437
|
const request = requests[index];
|
|
305
|
-
if (!request
|
|
438
|
+
if (!request) return;
|
|
306
439
|
const key = request.parentId ?? "";
|
|
440
|
+
if (level.isError) failedIds.add(key);
|
|
441
|
+
if (!level.data) return;
|
|
307
442
|
loadedIds.add(key);
|
|
308
443
|
for (const page of level.data.pages) byId.set(page.id, page);
|
|
309
444
|
if (level.data.nextCursor) next.set(key, level.data.nextCursor);
|
|
@@ -313,6 +448,7 @@ function useLazyTree(source, graph, selected) {
|
|
|
313
448
|
return {
|
|
314
449
|
pages: [...byId.values()],
|
|
315
450
|
loaded: loadedIds,
|
|
451
|
+
failed: failedIds,
|
|
316
452
|
nextCursor: next
|
|
317
453
|
};
|
|
318
454
|
}, [
|
|
@@ -320,10 +456,13 @@ function useLazyTree(source, graph, selected) {
|
|
|
320
456
|
requests,
|
|
321
457
|
selected
|
|
322
458
|
]);
|
|
459
|
+
const { pages, loaded, failed, nextCursor } = useStableWhile(built, sameLevels);
|
|
323
460
|
const graphParents = useMemo(() => graph.truncated ? null : new Set(graph.pages.map((page) => page.parentId).filter((id) => id !== null)), [graph]);
|
|
324
461
|
return {
|
|
325
462
|
pages,
|
|
326
|
-
|
|
463
|
+
loaded,
|
|
464
|
+
failed,
|
|
465
|
+
mayHaveChildren: useCallback((page) => !loaded.has(page.id) && (page.childCountCapped || (page.childCount !== void 0 ? page.childCount > 0 : !isJustCreated(page) && (graphParents ? graphParents.has(page.id) : true))), [loaded, graphParents]),
|
|
327
466
|
loadMore: useMemo(() => {
|
|
328
467
|
const map = /* @__PURE__ */ new Map();
|
|
329
468
|
for (const [parentId, cursor] of nextCursor) map.set(parentId, () => setMore((current) => new Map(current).set(parentId, [...current.get(parentId) ?? [], cursor])));
|
|
@@ -341,37 +480,268 @@ function useLazyTree(source, graph, selected) {
|
|
|
341
480
|
* page instead.
|
|
342
481
|
*/
|
|
343
482
|
function KnowledgePageExplorer({ graph, source, selectedPageId, onSelect, view, onViewChange }) {
|
|
344
|
-
const
|
|
483
|
+
const selected = source.usePage(selectedPageId);
|
|
484
|
+
const lazyMode = !!source.useTreeLevels;
|
|
485
|
+
const [graphOpened, setGraphOpened] = useState([]);
|
|
486
|
+
const [previewed, setPreviewed] = useState([]);
|
|
487
|
+
const [openGroups, setOpenGroups] = useState(() => /* @__PURE__ */ new Set());
|
|
488
|
+
const [revealed, setRevealed] = useState(() => /* @__PURE__ */ new Map());
|
|
489
|
+
const [allLinks, setAllLinks] = useState(false);
|
|
490
|
+
const [dotCounts, setDotCounts] = useState(true);
|
|
491
|
+
const lazy = useLazyTree(source, graph, selected.data, graphOpened);
|
|
492
|
+
const drawnGraph = useMemo(() => lazyMode ? lazyGraph({
|
|
493
|
+
pages: [...new Map([...graph.pages, ...lazy.pages].map((page) => [page.id, page])).values()],
|
|
494
|
+
loadedParents: lazy.loaded,
|
|
495
|
+
rootKey: "",
|
|
496
|
+
focusId: selectedPageId,
|
|
497
|
+
openGroups,
|
|
498
|
+
revealed
|
|
499
|
+
}) : {
|
|
500
|
+
pages: graph.pages,
|
|
501
|
+
hiddenChildren: /* @__PURE__ */ new Map(),
|
|
502
|
+
wanted: [],
|
|
503
|
+
hub: null
|
|
504
|
+
}, [
|
|
505
|
+
lazyMode,
|
|
506
|
+
lazy.pages,
|
|
507
|
+
lazy.loaded,
|
|
508
|
+
selectedPageId,
|
|
509
|
+
openGroups,
|
|
510
|
+
revealed,
|
|
511
|
+
graph.pages
|
|
512
|
+
]);
|
|
513
|
+
const graphSettled = !lazyMode || drawnGraph.wanted.every((id) => lazy.loaded.has(id) || lazy.failed.has(id));
|
|
514
|
+
useEffect(() => {
|
|
515
|
+
if (!lazyMode || view === "page") return;
|
|
516
|
+
const next = [.../* @__PURE__ */ new Set([...drawnGraph.wanted, ...previewed])];
|
|
517
|
+
setGraphOpened((current) => current.length === next.length && current.every((id, index) => id === next[index]) ? current : next);
|
|
518
|
+
}, [
|
|
519
|
+
lazyMode,
|
|
520
|
+
view,
|
|
521
|
+
drawnGraph.wanted,
|
|
522
|
+
previewed
|
|
523
|
+
]);
|
|
524
|
+
const focusLinkList = (source.usePageLinks ?? noLinkQuery)(view === "graph" ? selectedPageId : null).data;
|
|
525
|
+
const linkEnds = useMemo(() => {
|
|
526
|
+
const detail = selected.data;
|
|
527
|
+
if (!detail || detail.page.id !== selectedPageId) return null;
|
|
528
|
+
const known = new Map([
|
|
529
|
+
...lazy.pages,
|
|
530
|
+
...detail.ancestors,
|
|
531
|
+
...detail.related
|
|
532
|
+
].map((page) => [page.id, page]));
|
|
533
|
+
const index = knowledgePageRefIndex(known.values());
|
|
534
|
+
const own = detail.page.id;
|
|
535
|
+
const mentions = detail.notes.flatMap((note) => note.mentions).filter((key) => key && key !== own);
|
|
536
|
+
const refs = bodyLinkRefs(detail.page.body ?? "").map((ref) => ref.trim()).filter((key) => key && key !== own);
|
|
537
|
+
const out = [...mentions, ...refs];
|
|
538
|
+
const mentioned = new Set(mentions);
|
|
539
|
+
const unaskable = new Set(refs.filter((ref) => !ref.includes(":") && !PAGE_ID_SHAPE.test(ref) && !mentioned.has(ref)));
|
|
540
|
+
const listed = (focusLinkList?.edges ?? []).filter((edge) => edge.toPageId === own);
|
|
541
|
+
const noteInto = [.../* @__PURE__ */ new Set([...(detail.mentionedBy ?? []).map((note) => note.pageId), ...listed.filter((edge) => edge.kind === "note").map((edge) => edge.fromPageId)])].filter((id) => id !== own);
|
|
542
|
+
const bodyInto = [...new Set(listed.filter((edge) => edge.kind === "body").map((edge) => edge.fromPageId))].filter((id) => id !== own);
|
|
543
|
+
const into = [.../* @__PURE__ */ new Set([...noteInto, ...bodyInto])];
|
|
544
|
+
const lookup = (key) => known.get(key) ?? index.resolve(key);
|
|
545
|
+
const missing = (keys) => [...new Set(keys.filter((key) => !lookup(key) && !unaskable.has(key)))];
|
|
546
|
+
const resolvedCount = (keys) => new Set(keys.flatMap((key) => lookup(key)?.id ?? [])).size;
|
|
547
|
+
const room = (keys) => Math.max(0, FOCUS_LINK_FETCH_CAP - resolvedCount(keys));
|
|
548
|
+
const wantOut = missing(out);
|
|
549
|
+
const wantIn = missing(into);
|
|
550
|
+
return {
|
|
551
|
+
detail,
|
|
552
|
+
known,
|
|
553
|
+
mentions,
|
|
554
|
+
refs,
|
|
555
|
+
into,
|
|
556
|
+
noteInto,
|
|
557
|
+
bodyInto,
|
|
558
|
+
lookup,
|
|
559
|
+
fetchKeys: [...wantOut.slice(0, room(out)), ...wantIn.slice(0, room(into))],
|
|
560
|
+
unfetched: {
|
|
561
|
+
out: Math.max(0, wantOut.length - room(out)),
|
|
562
|
+
in: Math.max(0, wantIn.length - room(into))
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
}, [
|
|
566
|
+
selected.data,
|
|
567
|
+
selectedPageId,
|
|
568
|
+
lazy.pages,
|
|
569
|
+
focusLinkList
|
|
570
|
+
]);
|
|
571
|
+
const fetchKeys = linkEnds?.fetchKeys ?? noKeys;
|
|
572
|
+
const fetchedStates = (source.useLinkedPages ?? noLinkedPages)(fetchKeys);
|
|
573
|
+
const fetchedSignature = fetchKeys.map((key, index) => `${key}=${fetchedStates[index]?.data?.page?.id ?? ""}`).join("|");
|
|
574
|
+
const fetchedPages = useMemo(() => {
|
|
575
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
576
|
+
fetchKeys.forEach((key, index) => {
|
|
577
|
+
const page = fetchedStates[index]?.data?.page;
|
|
578
|
+
if (page) byKey.set(key, page);
|
|
579
|
+
});
|
|
580
|
+
return byKey;
|
|
581
|
+
}, [fetchedSignature]);
|
|
582
|
+
const focusLinks = useMemo(() => {
|
|
583
|
+
if (!linkEnds) return {
|
|
584
|
+
edges: [],
|
|
585
|
+
pages: [],
|
|
586
|
+
unfetched: {
|
|
587
|
+
in: 0,
|
|
588
|
+
out: 0
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
const { detail, lookup, mentions, refs, noteInto, bodyInto } = linkEnds;
|
|
592
|
+
const resolve = (key) => lookup(key) ?? fetchedPages.get(key);
|
|
593
|
+
const own = detail.page.id;
|
|
594
|
+
const edges = [];
|
|
595
|
+
const pages = /* @__PURE__ */ new Map();
|
|
596
|
+
const reach = (key, kind, side) => {
|
|
597
|
+
const target = resolve(key);
|
|
598
|
+
if (!target || target.id === own) {
|
|
599
|
+
if (!target && kind === "mention" && side === "out") edges.push({
|
|
600
|
+
source: own,
|
|
601
|
+
target: key,
|
|
602
|
+
kind
|
|
603
|
+
});
|
|
604
|
+
if (!target && side === "in") edges.push({
|
|
605
|
+
source: key,
|
|
606
|
+
target: own,
|
|
607
|
+
kind
|
|
608
|
+
});
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
pages.set(target.id, target);
|
|
612
|
+
edges.push(side === "out" ? {
|
|
613
|
+
source: own,
|
|
614
|
+
target: target.id,
|
|
615
|
+
kind
|
|
616
|
+
} : {
|
|
617
|
+
source: target.id,
|
|
618
|
+
target: own,
|
|
619
|
+
kind
|
|
620
|
+
});
|
|
621
|
+
};
|
|
622
|
+
for (const key of mentions) reach(key, "mention", "out");
|
|
623
|
+
for (const key of refs) reach(key, "link", "out");
|
|
624
|
+
for (const key of noteInto) reach(key, "mention", "in");
|
|
625
|
+
for (const key of bodyInto) reach(key, "link", "in");
|
|
626
|
+
return {
|
|
627
|
+
edges: edges.filter((edge) => edge.source !== edge.target),
|
|
628
|
+
pages: [...pages.values()],
|
|
629
|
+
unfetched: linkEnds.unfetched
|
|
630
|
+
};
|
|
631
|
+
}, [linkEnds, fetchedPages]);
|
|
632
|
+
const focusLinkIds = useMemo(() => new Set(focusLinks.pages.map((page) => page.id)), [focusLinks.pages]);
|
|
633
|
+
const drawn = useMemo(() => {
|
|
634
|
+
const ids = new Set(drawnGraph.pages.map((page) => page.id));
|
|
635
|
+
const extra = focusLinks.pages.filter((page) => !ids.has(page.id));
|
|
636
|
+
return {
|
|
637
|
+
...drawnGraph,
|
|
638
|
+
pages: extra.length ? [...drawnGraph.pages, ...extra] : drawnGraph.pages
|
|
639
|
+
};
|
|
640
|
+
}, [drawnGraph, focusLinks.pages]);
|
|
641
|
+
const pagesById = useMemo(() => new Map(drawn.pages.map((page) => [page.id, page])), [drawn.pages]);
|
|
642
|
+
const previewParent = (parentId) => setPreviewed((current) => current.includes(parentId) ? current : [...current, parentId].slice(-8));
|
|
345
643
|
const [focusScopeId, setFocusScopeId] = useState(null);
|
|
346
|
-
const
|
|
644
|
+
const knownLinks = useMemo(() => {
|
|
645
|
+
const seen = /* @__PURE__ */ new Set();
|
|
646
|
+
return [
|
|
647
|
+
...graph.edges.filter((edge) => edge.kind === "mention"),
|
|
648
|
+
...bodyLinkEdges(drawn.pages),
|
|
649
|
+
...focusLinks.edges
|
|
650
|
+
].filter((edge) => {
|
|
651
|
+
const key = `${edge.kind}:${edge.source}>${edge.target}`;
|
|
652
|
+
return seen.has(key) ? false : (seen.add(key), true);
|
|
653
|
+
});
|
|
654
|
+
}, [
|
|
655
|
+
graph.edges,
|
|
656
|
+
drawn.pages,
|
|
657
|
+
focusLinks.edges
|
|
658
|
+
]);
|
|
659
|
+
const linkView = useMemo(() => visibleLinks(knownLinks, pagesById, selectedPageId, allLinks), [
|
|
660
|
+
knownLinks,
|
|
661
|
+
pagesById,
|
|
662
|
+
selectedPageId,
|
|
663
|
+
allLinks
|
|
664
|
+
]);
|
|
665
|
+
const linkEdges = linkView.edges;
|
|
666
|
+
const countIds = useMemo(() => drawn.pages.filter((page) => !isChildPlaceholder(page) && !isRestCircle(page) && !isScopeGroup(page)).map((page) => page.id).sort(), [drawn.pages]);
|
|
667
|
+
const counted = (source.useLinkCounts ?? noLinkQuery)(view === "graph" ? countIds : []);
|
|
668
|
+
const exactCounts = useMemo(() => counted.data ? new Map(Object.entries(counted.data)) : void 0, [counted.data]);
|
|
669
|
+
const hiddenLinks = useMemo(() => exactCounts ? undrawnLinks(exactCounts, linkEdges) : linkView.hidden, [
|
|
670
|
+
exactCounts,
|
|
671
|
+
linkEdges,
|
|
672
|
+
linkView.hidden
|
|
673
|
+
]);
|
|
674
|
+
const [hoverFetchId, setHoverFetchId] = useState(null);
|
|
675
|
+
const hoverTimer = useRef(void 0);
|
|
676
|
+
const setHoveredId = useCallback((id) => {
|
|
677
|
+
clearTimeout(hoverTimer.current);
|
|
678
|
+
if (id) hoverTimer.current = setTimeout(() => setHoverFetchId(id), HOVER_FETCH_DELAY_MS);
|
|
679
|
+
else setHoverFetchId(null);
|
|
680
|
+
}, []);
|
|
681
|
+
useEffect(() => () => clearTimeout(hoverTimer.current), []);
|
|
682
|
+
const hovered = (source.usePageLinks ?? noLinkQuery)(hoverFetchId);
|
|
683
|
+
const hoverEdges = useMemo(() => hoverFetchId && hovered.data ? hovered.data.edges.map((edge) => ({
|
|
684
|
+
source: edge.fromPageId,
|
|
685
|
+
target: edge.toPageId,
|
|
686
|
+
kind: edge.kind === "body" ? "link" : "mention",
|
|
687
|
+
count: edge.count
|
|
688
|
+
})) : [], [hoverFetchId, hovered.data]);
|
|
347
689
|
const [mention, setMention] = useState(null);
|
|
348
690
|
const [marked, setMarked] = useState(null);
|
|
349
691
|
const closeMention = useCallback(() => setMention(null), []);
|
|
350
692
|
const graphShown = !useIsMobile(1024) || view === "graph";
|
|
351
693
|
const highlightMentionOf = marked && marked.source === selectedPageId ? marked.target : void 0;
|
|
352
|
-
const selected = source.usePage(selectedPageId);
|
|
353
|
-
const lazy = useLazyTree(source, graph, selected.data);
|
|
354
694
|
const showPage = view === "page" && !!selectedPageId;
|
|
695
|
+
const [history, setHistory] = useState([]);
|
|
696
|
+
const lastSelected = useRef(selectedPageId);
|
|
697
|
+
const goingBackTo = useRef(null);
|
|
698
|
+
useEffect(() => {
|
|
699
|
+
const previous = lastSelected.current;
|
|
700
|
+
lastSelected.current = selectedPageId;
|
|
701
|
+
const backTarget = goingBackTo.current;
|
|
702
|
+
goingBackTo.current = null;
|
|
703
|
+
if (backTarget && backTarget === selectedPageId) return;
|
|
704
|
+
if (!previous || !selectedPageId || previous === selectedPageId) return;
|
|
705
|
+
setHistory((current) => [...current.filter((id) => id !== selectedPageId), previous].slice(-50));
|
|
706
|
+
}, [selectedPageId]);
|
|
707
|
+
const backTo = history.length ? history[history.length - 1] : void 0;
|
|
708
|
+
const goBack = () => {
|
|
709
|
+
if (!backTo) return;
|
|
710
|
+
goingBackTo.current = backTo;
|
|
711
|
+
setHistory((current) => current.slice(0, -1));
|
|
712
|
+
onSelect(backTo);
|
|
713
|
+
};
|
|
355
714
|
const openPage = (pageId) => {
|
|
356
715
|
onSelect(pageId);
|
|
357
716
|
onViewChange("page");
|
|
358
717
|
};
|
|
359
718
|
const selectFromTree = (page) => {
|
|
360
719
|
if (page.isScope) setFocusScopeId(page.id);
|
|
361
|
-
if (view === "graph") onSelect(page.id);
|
|
720
|
+
if (view === "graph" && (lazyMode || pagesById.has(page.id)) && page.id !== selectedPageId) onSelect(page.id);
|
|
362
721
|
else openPage(page.id);
|
|
363
722
|
};
|
|
723
|
+
const leaveScopeFocusFor = (pageId) => {
|
|
724
|
+
if (focusScopeId && !withinScope([...lazy.pages, ...drawn.pages], focusScopeId).some((page) => page.id === pageId)) setFocusScopeId(null);
|
|
725
|
+
};
|
|
364
726
|
const openAnywhere = (pageId) => {
|
|
365
|
-
|
|
727
|
+
leaveScopeFocusFor(pageId);
|
|
366
728
|
openPage(pageId);
|
|
367
729
|
};
|
|
730
|
+
const selectFromSearch = (pageId) => {
|
|
731
|
+
if (view === "graph" && (lazyMode || pagesById.has(pageId)) && pageId !== selectedPageId) {
|
|
732
|
+
leaveScopeFocusFor(pageId);
|
|
733
|
+
onSelect(pageId);
|
|
734
|
+
} else openAnywhere(pageId);
|
|
735
|
+
};
|
|
368
736
|
const focusScope = focusScopeId ? lazy.pages.find((page) => page.id === focusScopeId) ?? pagesById.get(focusScopeId) : void 0;
|
|
369
737
|
const treePages = withinScope(source.useTreeLevels ? lazy.pages : graph.pages, focusScope ? focusScopeId : null);
|
|
370
|
-
const graphPages = useMemo(() => withinScope(
|
|
371
|
-
|
|
738
|
+
const graphPages = useMemo(() => withinScope(drawn.pages, focusScope ? focusScopeId : null), [
|
|
739
|
+
drawn.pages,
|
|
372
740
|
focusScope,
|
|
373
741
|
focusScopeId
|
|
374
742
|
]);
|
|
743
|
+
const focusedInGraph = view === "graph" ? pagesById.get(selectedPageId ?? drawn.hub ?? "") : void 0;
|
|
744
|
+
focusedInGraph && drawn.hiddenChildren.get(focusedInGraph.id);
|
|
375
745
|
return /* @__PURE__ */ jsxs("div", {
|
|
376
746
|
className: "flex min-h-0 flex-1 flex-col gap-3",
|
|
377
747
|
children: [
|
|
@@ -379,11 +749,11 @@ function KnowledgePageExplorer({ graph, source, selectedPageId, onSelect, view,
|
|
|
379
749
|
className: "flex flex-wrap items-center gap-2",
|
|
380
750
|
children: [/* @__PURE__ */ jsx(SearchBox, {
|
|
381
751
|
source,
|
|
382
|
-
onSelect:
|
|
752
|
+
onSelect: selectFromSearch
|
|
383
753
|
}), /* @__PURE__ */ jsx("div", {
|
|
384
754
|
role: "group",
|
|
385
755
|
"aria-label": "View",
|
|
386
|
-
className: "flex rounded border border-border",
|
|
756
|
+
className: "flex overflow-hidden rounded border border-border",
|
|
387
757
|
children: [
|
|
388
758
|
{
|
|
389
759
|
value: "tree",
|
|
@@ -402,13 +772,13 @@ function KnowledgePageExplorer({ graph, source, selectedPageId, onSelect, view,
|
|
|
402
772
|
type: "button",
|
|
403
773
|
"aria-pressed": option.value === "page" ? showPage : option.value === "graph" ? !showPage && view !== "tree" : view === "tree",
|
|
404
774
|
disabled: option.value === "page" && !selectedPageId,
|
|
405
|
-
className: `text-ui-md px-3 py-1 disabled:opacity-50 aria-pressed:bg-
|
|
775
|
+
className: `text-ui-md px-3 py-1 text-muted-foreground disabled:opacity-50 aria-pressed:bg-fill-inverse aria-pressed:text-background ${option.narrowOnly ? "lg:hidden" : ""}`,
|
|
406
776
|
onClick: () => onViewChange(option.value),
|
|
407
777
|
children: option.label
|
|
408
778
|
}, option.value))
|
|
409
779
|
})]
|
|
410
780
|
}),
|
|
411
|
-
graph.truncated && !showPage ? /* @__PURE__ */ jsxs("p", {
|
|
781
|
+
!lazyMode && graph.truncated && !showPage ? /* @__PURE__ */ jsxs("p", {
|
|
412
782
|
className: "text-ui-sm text-muted-foreground",
|
|
413
783
|
children: [
|
|
414
784
|
"The graph shows the first ",
|
|
@@ -480,41 +850,108 @@ function KnowledgePageExplorer({ graph, source, selectedPageId, onSelect, view,
|
|
|
480
850
|
}) : /* @__PURE__ */ jsxs("div", {
|
|
481
851
|
className: `relative min-h-0 min-w-0 flex-1 overflow-hidden rounded-lg border border-border bg-background lg:block lg:h-full ${view === "graph" ? "block" : "hidden"}`,
|
|
482
852
|
"data-testid": "knowledge-graph-container",
|
|
483
|
-
children: [
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
853
|
+
children: [
|
|
854
|
+
graphShown ? /* @__PURE__ */ jsxs("div", {
|
|
855
|
+
className: "absolute top-3 right-3 z-10 flex flex-col gap-2",
|
|
856
|
+
children: [
|
|
857
|
+
/* @__PURE__ */ jsx("button", {
|
|
858
|
+
type: "button",
|
|
859
|
+
"data-testid": "knowledge-graph-back",
|
|
860
|
+
"aria-label": "Back",
|
|
861
|
+
title: backTo ? "Back to the page you focused before this one" : "Back (nothing to go back to yet)",
|
|
862
|
+
disabled: !backTo,
|
|
863
|
+
className: FLOAT_BUTTON,
|
|
864
|
+
onClick: goBack,
|
|
865
|
+
children: /* @__PURE__ */ jsx(ArrowLeft, {
|
|
866
|
+
"aria-hidden": true,
|
|
867
|
+
className: "size-4"
|
|
868
|
+
})
|
|
869
|
+
}),
|
|
870
|
+
/* @__PURE__ */ jsx("button", {
|
|
871
|
+
type: "button",
|
|
872
|
+
"aria-label": "All links",
|
|
873
|
+
"aria-pressed": allLinks,
|
|
874
|
+
"data-testid": "knowledge-graph-all-links",
|
|
875
|
+
title: `All links: ${allLinks ? "on" : "off"}. Draw every link between the pages in the graph, not only the selected page's`,
|
|
876
|
+
className: FLOAT_BUTTON,
|
|
877
|
+
onClick: () => setAllLinks((current) => !current),
|
|
878
|
+
children: /* @__PURE__ */ jsx(Link2, {
|
|
879
|
+
"aria-hidden": true,
|
|
880
|
+
className: "size-4"
|
|
881
|
+
})
|
|
882
|
+
}),
|
|
883
|
+
/* @__PURE__ */ jsx("button", {
|
|
884
|
+
type: "button",
|
|
885
|
+
"aria-label": "Link counts",
|
|
886
|
+
"aria-pressed": dotCounts,
|
|
887
|
+
"data-testid": "knowledge-graph-dot-counts",
|
|
888
|
+
title: `Link counts: ${dotCounts ? "on" : "off"}. Write how many links go in and out of each dot inside it`,
|
|
889
|
+
className: FLOAT_BUTTON,
|
|
890
|
+
onClick: () => setDotCounts((current) => !current),
|
|
891
|
+
children: /* @__PURE__ */ jsx(Hash, {
|
|
892
|
+
"aria-hidden": true,
|
|
893
|
+
className: "size-4"
|
|
894
|
+
})
|
|
895
|
+
})
|
|
896
|
+
]
|
|
897
|
+
}) : null,
|
|
898
|
+
graphShown ? /* @__PURE__ */ jsx(KnowledgePageGraph, {
|
|
899
|
+
pages: graphPages,
|
|
900
|
+
edges: linkEdges,
|
|
901
|
+
pinnedIds: graph.pinnedIds,
|
|
902
|
+
grants: graph.grants,
|
|
903
|
+
selectedPageId,
|
|
904
|
+
centerId: drawn.hub,
|
|
905
|
+
hiddenLinks,
|
|
906
|
+
knownLinks,
|
|
907
|
+
fetchedLinks: hoverEdges,
|
|
908
|
+
exactLinkCounts: exactCounts,
|
|
909
|
+
onHover: setHoveredId,
|
|
910
|
+
nearIds: focusLinkIds,
|
|
911
|
+
settled: graphSettled,
|
|
912
|
+
showCounts: dotCounts,
|
|
913
|
+
onPreview: (page) => {
|
|
914
|
+
if (isChildPlaceholder(page) && page.parentId) previewParent(page.parentId);
|
|
915
|
+
},
|
|
916
|
+
onSelect: (page) => {
|
|
917
|
+
if (isChildPlaceholder(page)) return page.parentId ? previewParent(page.parentId) : void 0;
|
|
918
|
+
if (isRestCircle(page)) {
|
|
919
|
+
const parentId = page.parentId;
|
|
920
|
+
if (!parentId) return void 0;
|
|
921
|
+
setRevealed((current) => new Map(current).set(parentId, (current.get(parentId) ?? 0) + 12));
|
|
922
|
+
return lazy.loadMore.get(parentId)?.();
|
|
923
|
+
}
|
|
924
|
+
if (isScopeGroup(page)) return setOpenGroups((current) => new Set(current).add(page.id));
|
|
925
|
+
onSelect(page.id);
|
|
926
|
+
if (view !== "graph") onViewChange("graph");
|
|
927
|
+
},
|
|
928
|
+
onOpen: (page) => openPage(page.id),
|
|
929
|
+
onClearSelection: () => {
|
|
930
|
+
setMention(null);
|
|
931
|
+
if (selectedPageId) onSelect(null);
|
|
932
|
+
},
|
|
933
|
+
onMentionSelect: setMention
|
|
934
|
+
}) : null,
|
|
935
|
+
mention && graphShown ? /* @__PURE__ */ jsx(MentionPopup, {
|
|
936
|
+
source,
|
|
937
|
+
mention,
|
|
938
|
+
pagesById,
|
|
939
|
+
onClose: closeMention,
|
|
940
|
+
onOpen: (pageId) => {
|
|
941
|
+
setMarked(pageId === mention.source.id ? {
|
|
942
|
+
source: mention.source.id,
|
|
943
|
+
target: mention.target.id
|
|
944
|
+
} : null);
|
|
945
|
+
setMention(null);
|
|
946
|
+
openAnywhere(pageId);
|
|
947
|
+
}
|
|
948
|
+
}) : null
|
|
949
|
+
]
|
|
513
950
|
})]
|
|
514
951
|
})
|
|
515
952
|
]
|
|
516
953
|
});
|
|
517
954
|
}
|
|
518
|
-
export { KnowledgePageExplorer };
|
|
955
|
+
export { FOCUS_LINK_CAP, KnowledgePageExplorer };
|
|
519
956
|
|
|
520
957
|
//# sourceMappingURL=KnowledgePageExplorer.es.js.map
|