@mastra/playground-ui 68.0.0-alpha.2 → 68.0.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/dist/{FilterBar-CQl04O6t.cjs → FilterBar-BSP2UTjc.cjs} +2 -2
- package/dist/{FilterBar-CQl04O6t.cjs.map → FilterBar-BSP2UTjc.cjs.map} +1 -1
- package/dist/{FilterBar-BgW2dqRQ.js → FilterBar-PSQ1OwqH.js} +2 -2
- package/dist/{FilterBar-BgW2dqRQ.js.map → FilterBar-PSQ1OwqH.js.map} +1 -1
- 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/{MetricsCard-CEB-f2sv.cjs → MetricsCard-BEwiS7Pe.cjs} +8 -8
- package/dist/MetricsCard-BEwiS7Pe.cjs.map +1 -0
- package/dist/{MetricsCard-M8awJ2B_.js → MetricsCard-ua6C6b8a.js} +10 -10
- package/dist/MetricsCard-ua6C6b8a.js.map +1 -0
- package/dist/{MetricsLineChart-BhHoduO0.js → MetricsLineChart-4SwxBbQx.js} +14 -3
- package/dist/MetricsLineChart-4SwxBbQx.js.map +1 -0
- package/dist/{MetricsLineChart-CjBm4IXu.cjs → MetricsLineChart-tZxsauau.cjs} +13 -2
- package/dist/MetricsLineChart-tZxsauau.cjs.map +1 -0
- package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs → MetricsStackedBarChart-CDLE76IB.cjs} +2 -2
- package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs.map → MetricsStackedBarChart-CDLE76IB.cjs.map} +1 -1
- package/dist/{MetricsStackedBarChart-BRuA6MTE.js → MetricsStackedBarChart-D2QyS4-z.js} +2 -2
- package/dist/{MetricsStackedBarChart-BRuA6MTE.js.map → MetricsStackedBarChart-D2QyS4-z.js.map} +1 -1
- 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/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +2 -2
- package/dist/components/FilterBar.es.js +2 -2
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
- package/dist/components/MetricsStackedBarChart.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/{date-time-range-picker-CTt7Od0P.cjs → date-time-range-picker-CWGjoR3j.cjs} +40 -13
- package/dist/date-time-range-picker-CWGjoR3j.cjs.map +1 -0
- package/dist/{date-time-range-picker-DKh1K9Iy.js → date-time-range-picker-CdSiXwB4.js} +40 -13
- package/dist/date-time-range-picker-CdSiXwB4.js.map +1 -0
- 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/connect-prompt-tool.cjs.js +79 -4
- package/dist/domains/chat/tools/connect-prompt-tool.cjs.js.map +1 -1
- package/dist/domains/chat/tools/connect-prompt-tool.es.js +79 -4
- package/dist/domains/chat/tools/connect-prompt-tool.es.js.map +1 -1
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +238 -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 +237 -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 +9 -4
- package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
- package/dist/domains/chat/tools/tool-card-kind.es.js +9 -5
- 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/connect/types.cjs.js.map +1 -1
- package/dist/domains/connect/types.es.js.map +1 -1
- package/dist/domains/connect/use-user-connect.cjs.js +19 -2
- package/dist/domains/connect/use-user-connect.cjs.js.map +1 -1
- package/dist/domains/connect/use-user-connect.es.js +19 -2
- package/dist/domains/connect/use-user-connect.es.js.map +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +4 -3
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.es.js +4 -3
- package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
- package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
- package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-error.es.js +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +4 -3
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.es.js +4 -3
- package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +9 -6
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +9 -6
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +2 -2
- package/dist/domains/dashboards/kinds/table/table-tabs.es.js +2 -2
- package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +1 -1
- package/dist/domains/dashboards/kinds/table/table-widget.es.js +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +6 -5
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +6 -5
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
- package/dist/domains/dashboards/lib/chrome.cjs.js +9 -2
- package/dist/domains/dashboards/lib/chrome.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/chrome.es.js +9 -2
- package/dist/domains/dashboards/lib/chrome.es.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
- 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/metrics/components/agent-runs-card.cjs.js +3 -3
- package/dist/domains/metrics/components/agent-runs-card.es.js +3 -3
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
- package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-area.es.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
- package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +3 -2
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js.map +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +3 -2
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js.map +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +3 -2
- package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +3 -2
- package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +3 -2
- package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +3 -2
- package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
- package/dist/domains/metrics/components/scores-card.cjs.js +2 -1
- package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card.es.js +2 -1
- package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +3 -3
- package/dist/domains/metrics/components/token-usage-card.es.js +3 -3
- package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
- package/dist/domains/observability/components/observability-histogram.cjs.js +1 -1
- package/dist/domains/observability/components/observability-histogram.es.js +1 -1
- 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/spans/components/spans-filter-bar.cjs.js +2 -2
- package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
- package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.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/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.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/{filter-bar-time-range-mg9JeYue.js → filter-bar-time-range-qlV8p7hp.js} +2 -2
- package/dist/{filter-bar-time-range-mg9JeYue.js.map → filter-bar-time-range-qlV8p7hp.js.map} +1 -1
- package/dist/{filter-bar-time-range-BA-pXMlo.cjs → filter-bar-time-range-zdM024JD.cjs} +2 -2
- package/dist/{filter-bar-time-range-BA-pXMlo.cjs.map → filter-bar-time-range-zdM024JD.cjs.map} +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/connect-prompt-tool.d.ts +10 -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/connect/types.d.ts +16 -0
- package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +4 -2
- package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +4 -3
- package/dist/src/domains/dashboards/index.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
- package/dist/src/domains/dashboards/lib/chrome.d.ts +6 -4
- package/dist/src/domains/dashboards/widget-kind.d.ts +12 -0
- 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/DateTimeRangePicker/date-time-range-picker.d.ts +12 -1
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
- package/dist/src/ds/components/MetricsCard/metrics-card-headline.d.ts +1 -1
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +8 -0
- package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
- package/dist/style.css +73 -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-BOLXeKIp.cjs} +167 -126
- package/dist/tool-card-BOLXeKIp.cjs.map +1 -0
- package/dist/{tool-card-sO6P2Qj4.js → tool-card-HZ5bm7ue.js} +168 -127
- package/dist/tool-card-HZ5bm7ue.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 +11 -11
- package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
- package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
- package/dist/MetricsCard-CEB-f2sv.cjs.map +0 -1
- package/dist/MetricsCard-M8awJ2B_.js.map +0 -1
- package/dist/MetricsLineChart-BhHoduO0.js.map +0 -1
- package/dist/MetricsLineChart-CjBm4IXu.cjs.map +0 -1
- package/dist/date-time-range-picker-CTt7Od0P.cjs.map +0 -1
- package/dist/date-time-range-picker-DKh1K9Iy.js.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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/domains/knowledge/lib/remarkKnowledgeLinks.ts
|
|
2
|
+
var WIKILINK = /\[\[([^\]]+)\]\]/g;
|
|
3
|
+
/** `[[ref]]`, or a bare `type:value#path` address such as `docs:mastra#guides/memory` (never a URL or an email). */
|
|
4
|
+
var WIKILINK_OR_ADDRESS = /\[\[([^\]]+)\]\]|(?<![\w:/#@.-])([a-z][\w-]*:[\w.-]+#[\w./-]*[\w/])/g;
|
|
5
|
+
/** The hast property a `[[ref]]` carries on its `<span>`; react-markdown hands it to the `span` override. */
|
|
6
|
+
var KNOWLEDGE_REF_PROPERTY = "dataKnowledgeRef";
|
|
7
|
+
/** Set to `'bare'` on a ref written without `[[ ]]`: it only looks like an address, so a host links it once the page resolves. */
|
|
8
|
+
var KNOWLEDGE_BARE_PROPERTY = "dataKnowledgeBare";
|
|
9
|
+
/**
|
|
10
|
+
* A remark plugin that turns each `[[ref]]` in markdown prose into `<span data-knowledge-ref="ref">ref</span>`,
|
|
11
|
+
* for a `span` override to draw as a page link. It only splits text nodes, so code, inline code and
|
|
12
|
+
* existing links are left alone, and the ref stays text: nothing in a body becomes markup.
|
|
13
|
+
*/
|
|
14
|
+
function remarkKnowledgeLinks() {
|
|
15
|
+
return (tree) => {
|
|
16
|
+
visit(tree, WIKILINK);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** `remarkKnowledgeLinks` for chat prose, where a model also writes a page's address bare. */
|
|
20
|
+
function remarkKnowledgeChatLinks() {
|
|
21
|
+
return (tree) => {
|
|
22
|
+
visit(tree, WIKILINK_OR_ADDRESS);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function visit(node, pattern) {
|
|
26
|
+
if (node.type === "link" || node.type === "linkReference") return;
|
|
27
|
+
const children = [];
|
|
28
|
+
let changed = false;
|
|
29
|
+
for (const child of node.children) {
|
|
30
|
+
if (child.type === "text") {
|
|
31
|
+
const split = splitText(child, pattern);
|
|
32
|
+
if (split) {
|
|
33
|
+
children.push(...split);
|
|
34
|
+
changed = true;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
} else if ("children" in child) visit(child, pattern);
|
|
38
|
+
children.push(child);
|
|
39
|
+
}
|
|
40
|
+
if (changed) node.children = children;
|
|
41
|
+
}
|
|
42
|
+
function splitText(node, pattern) {
|
|
43
|
+
const { value } = node;
|
|
44
|
+
const parts = [];
|
|
45
|
+
let last = 0;
|
|
46
|
+
for (const match of value.matchAll(pattern)) {
|
|
47
|
+
const ref = match[1] ?? match[2] ?? "";
|
|
48
|
+
const bare = match[1] === void 0;
|
|
49
|
+
if (match.index > last) parts.push({
|
|
50
|
+
type: "text",
|
|
51
|
+
value: value.slice(last, match.index)
|
|
52
|
+
});
|
|
53
|
+
parts.push({
|
|
54
|
+
type: "emphasis",
|
|
55
|
+
data: {
|
|
56
|
+
hName: "span",
|
|
57
|
+
hProperties: {
|
|
58
|
+
[KNOWLEDGE_REF_PROPERTY]: ref,
|
|
59
|
+
...bare ? { [KNOWLEDGE_BARE_PROPERTY]: "bare" } : {}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
children: [{
|
|
63
|
+
type: "text",
|
|
64
|
+
value: ref
|
|
65
|
+
}]
|
|
66
|
+
});
|
|
67
|
+
last = match.index + match[0].length;
|
|
68
|
+
}
|
|
69
|
+
if (last === 0) return null;
|
|
70
|
+
if (last < value.length) parts.push({
|
|
71
|
+
type: "text",
|
|
72
|
+
value: value.slice(last)
|
|
73
|
+
});
|
|
74
|
+
return parts;
|
|
75
|
+
}
|
|
76
|
+
export { KNOWLEDGE_BARE_PROPERTY, KNOWLEDGE_REF_PROPERTY, remarkKnowledgeChatLinks, remarkKnowledgeLinks };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=remarkKnowledgeLinks.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remarkKnowledgeLinks.es.js","names":[],"sources":["../../../../src/domains/knowledge/lib/remarkKnowledgeLinks.ts"],"sourcesContent":["import type { Parent, PhrasingContent, Root, Text } from 'mdast';\n\nconst WIKILINK = /\\[\\[([^\\]]+)\\]\\]/g;\n/** `[[ref]]`, or a bare `type:value#path` address such as `docs:mastra#guides/memory` (never a URL or an email). */\nconst WIKILINK_OR_ADDRESS = /\\[\\[([^\\]]+)\\]\\]|(?<![\\w:/#@.-])([a-z][\\w-]*:[\\w.-]+#[\\w./-]*[\\w/])/g;\n\n/** The hast property a `[[ref]]` carries on its `<span>`; react-markdown hands it to the `span` override. */\nexport const KNOWLEDGE_REF_PROPERTY = 'dataKnowledgeRef';\n/** Set to `'bare'` on a ref written without `[[ ]]`: it only looks like an address, so a host links it once the page resolves. */\nexport const KNOWLEDGE_BARE_PROPERTY = 'dataKnowledgeBare';\n\n/**\n * A remark plugin that turns each `[[ref]]` in markdown prose into `<span data-knowledge-ref=\"ref\">ref</span>`,\n * for a `span` override to draw as a page link. It only splits text nodes, so code, inline code and\n * existing links are left alone, and the ref stays text: nothing in a body becomes markup.\n */\nexport function remarkKnowledgeLinks() {\n return (tree: Root) => {\n visit(tree, WIKILINK);\n };\n}\n\n/** `remarkKnowledgeLinks` for chat prose, where a model also writes a page's address bare. */\nexport function remarkKnowledgeChatLinks() {\n return (tree: Root) => {\n visit(tree, WIKILINK_OR_ADDRESS);\n };\n}\n\nfunction visit(node: Parent, pattern: RegExp) {\n if (node.type === 'link' || node.type === 'linkReference') return;\n const children: Parent['children'] = [];\n let changed = false;\n for (const child of node.children) {\n if (child.type === 'text') {\n const split = splitText(child, pattern);\n if (split) {\n children.push(...split);\n changed = true;\n continue;\n }\n } else if ('children' in child) {\n visit(child, pattern);\n }\n children.push(child);\n }\n if (changed) node.children = children;\n}\n\nfunction splitText(node: Text, pattern: RegExp): PhrasingContent[] | null {\n const { value } = node;\n const parts: PhrasingContent[] = [];\n let last = 0;\n for (const match of value.matchAll(pattern)) {\n const ref = match[1] ?? match[2] ?? '';\n const bare = match[1] === undefined;\n if (match.index > last) parts.push({ type: 'text', value: value.slice(last, match.index) });\n parts.push({\n type: 'emphasis',\n data: {\n hName: 'span',\n hProperties: { [KNOWLEDGE_REF_PROPERTY]: ref, ...(bare ? { [KNOWLEDGE_BARE_PROPERTY]: 'bare' } : {}) },\n },\n children: [{ type: 'text', value: ref }],\n });\n last = match.index + match[0].length;\n }\n if (last === 0) return null;\n if (last < value.length) parts.push({ type: 'text', value: value.slice(last) });\n return parts;\n}\n"],"mappings":";AAEA,IAAM,WAAW;;AAEjB,IAAM,sBAAsB;;AAG5B,IAAa,yBAAyB;;AAEtC,IAAa,0BAA0B;;;;;;AAOvC,SAAgB,uBAAuB;CACrC,QAAQ,SAAe;EACrB,MAAM,MAAM,QAAQ;CACtB;AACF;;AAGA,SAAgB,2BAA2B;CACzC,QAAQ,SAAe;EACrB,MAAM,MAAM,mBAAmB;CACjC;AACF;AAEA,SAAS,MAAM,MAAc,SAAiB;CAC5C,IAAI,KAAK,SAAS,UAAU,KAAK,SAAS,iBAAiB;CAC3D,MAAM,WAA+B,CAAC;CACtC,IAAI,UAAU;CACd,KAAK,MAAM,SAAS,KAAK,UAAU;EACjC,IAAI,MAAM,SAAS,QAAQ;GACzB,MAAM,QAAQ,UAAU,OAAO,OAAO;GACtC,IAAI,OAAO;IACT,SAAS,KAAK,GAAG,KAAK;IACtB,UAAU;IACV;GACF;EACF,OAAO,IAAI,cAAc,OACvB,MAAM,OAAO,OAAO;EAEtB,SAAS,KAAK,KAAK;CACrB;CACA,IAAI,SAAS,KAAK,WAAW;AAC/B;AAEA,SAAS,UAAU,MAAY,SAA2C;CACxE,MAAM,EAAE,UAAU;CAClB,MAAM,QAA2B,CAAC;CAClC,IAAI,OAAO;CACX,KAAK,MAAM,SAAS,MAAM,SAAS,OAAO,GAAG;EAC3C,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;EACpC,MAAM,OAAO,MAAM,OAAO,KAAA;EAC1B,IAAI,MAAM,QAAQ,MAAM,MAAM,KAAK;GAAE,MAAM;GAAQ,OAAO,MAAM,MAAM,MAAM,MAAM,KAAK;EAAE,CAAC;EAC1F,MAAM,KAAK;GACT,MAAM;GACN,MAAM;IACJ,OAAO;IACP,aAAa;MAAG,yBAAyB;KAAK,GAAI,OAAO,GAAG,0BAA0B,OAAO,IAAI,CAAC;IAAG;GACvG;GACA,UAAU,CAAC;IAAE,MAAM;IAAQ,OAAO;GAAI,CAAC;EACzC,CAAC;EACD,OAAO,MAAM,QAAQ,MAAM,EAAE,CAAC;CAChC;CACA,IAAI,SAAS,GAAG,OAAO;CACvB,IAAI,OAAO,MAAM,QAAQ,MAAM,KAAK;EAAE,MAAM;EAAQ,OAAO,MAAM,MAAM,IAAI;CAAE,CAAC;CAC9E,OAAO;AACT"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
// src/domains/knowledge/lib/tooltipSide.ts
|
|
3
|
+
/** Sides in the order they win a tie: above is the one people expect. */
|
|
4
|
+
var SIDES = [
|
|
5
|
+
"top",
|
|
6
|
+
"bottom",
|
|
7
|
+
"right",
|
|
8
|
+
"left"
|
|
9
|
+
];
|
|
10
|
+
/** Where the tooltip would sit on a side of the dot, centred on it. */
|
|
11
|
+
function tooltipBox(side, { dot, tip, gap }) {
|
|
12
|
+
const centerX = (dot.left + dot.right) / 2;
|
|
13
|
+
const centerY = (dot.top + dot.bottom) / 2;
|
|
14
|
+
if (side === "top") return {
|
|
15
|
+
left: centerX - tip.width / 2,
|
|
16
|
+
right: centerX + tip.width / 2,
|
|
17
|
+
bottom: dot.top - gap,
|
|
18
|
+
top: dot.top - gap - tip.height
|
|
19
|
+
};
|
|
20
|
+
if (side === "bottom") return {
|
|
21
|
+
left: centerX - tip.width / 2,
|
|
22
|
+
right: centerX + tip.width / 2,
|
|
23
|
+
top: dot.bottom + gap,
|
|
24
|
+
bottom: dot.bottom + gap + tip.height
|
|
25
|
+
};
|
|
26
|
+
if (side === "left") return {
|
|
27
|
+
right: dot.left - gap,
|
|
28
|
+
left: dot.left - gap - tip.width,
|
|
29
|
+
top: centerY - tip.height / 2,
|
|
30
|
+
bottom: centerY + tip.height / 2
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
left: dot.right + gap,
|
|
34
|
+
right: dot.right + gap + tip.width,
|
|
35
|
+
top: centerY - tip.height / 2,
|
|
36
|
+
bottom: centerY + tip.height / 2
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function overlap(a, b) {
|
|
40
|
+
const width = Math.min(a.right, b.right) - Math.max(a.left, b.left);
|
|
41
|
+
const height = Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top);
|
|
42
|
+
return width > 0 && height > 0 ? width * height : 0;
|
|
43
|
+
}
|
|
44
|
+
/** Whether a line passes through the box, by sampling along it. */
|
|
45
|
+
function crosses(box, from, to) {
|
|
46
|
+
const steps = Math.max(4, Math.ceil(Math.hypot(to.x - from.x, to.y - from.y) / 6));
|
|
47
|
+
for (let step = 0; step <= steps; step++) {
|
|
48
|
+
const x = from.x + (to.x - from.x) * step / steps;
|
|
49
|
+
const y = from.y + (to.y - from.y) * step / steps;
|
|
50
|
+
if (x >= box.left && x <= box.right && y >= box.top && y <= box.bottom) return true;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Picks the side of the dot whose tooltip covers the least: leaving the bounds costs most, then covering a
|
|
56
|
+
* line, then covering a page. With nothing in the way (or nothing measured) it stays above.
|
|
57
|
+
*/
|
|
58
|
+
function chooseTooltipSide(input) {
|
|
59
|
+
const area = (box) => (box.right - box.left) * (box.bottom - box.top);
|
|
60
|
+
let best = "top";
|
|
61
|
+
let bestCost = Number.POSITIVE_INFINITY;
|
|
62
|
+
for (const side of SIDES) {
|
|
63
|
+
const box = tooltipBox(side, input);
|
|
64
|
+
let cost = (area(box) - overlap(box, input.bounds)) * 100;
|
|
65
|
+
for (const obstacle of input.obstacles) cost += overlap(box, obstacle) * 4;
|
|
66
|
+
for (const line of input.lines) if (crosses(box, line.from, line.to)) cost += 2e3;
|
|
67
|
+
if (cost < bestCost) {
|
|
68
|
+
best = side;
|
|
69
|
+
bestCost = cost;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return best;
|
|
73
|
+
}
|
|
74
|
+
exports.chooseTooltipSide = chooseTooltipSide;
|
|
75
|
+
exports.tooltipBox = tooltipBox;
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=tooltipSide.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltipSide.cjs.js","names":[],"sources":["../../../../src/domains/knowledge/lib/tooltipSide.ts"],"sourcesContent":["export interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport type TooltipSide = 'top' | 'bottom' | 'right' | 'left';\n\nexport interface TooltipPlacementInput {\n /** The hovered dot, in the same coordinates as everything else (the screen). */\n dot: Box;\n /** The tooltip's size once drawn. */\n tip: { width: number; height: number };\n /** Space between the dot and the tooltip. */\n gap: number;\n /** The tooltip must stay inside this. */\n bounds: Box;\n /** Things the tooltip must not cover: the focused page, the hovered page's neighbours, the legend, buttons. */\n obstacles: readonly Box[];\n /** Lines it must not cover: the hovered page's highlighted edges, as endpoints. */\n lines: ReadonlyArray<{ from: { x: number; y: number }; to: { x: number; y: number } }>;\n}\n\n/** Sides in the order they win a tie: above is the one people expect. */\nconst SIDES: TooltipSide[] = ['top', 'bottom', 'right', 'left'];\n\n/** Where the tooltip would sit on a side of the dot, centred on it. */\nexport function tooltipBox(\n side: TooltipSide,\n { dot, tip, gap }: Pick<TooltipPlacementInput, 'dot' | 'tip' | 'gap'>,\n): Box {\n const centerX = (dot.left + dot.right) / 2;\n const centerY = (dot.top + dot.bottom) / 2;\n if (side === 'top')\n return {\n left: centerX - tip.width / 2,\n right: centerX + tip.width / 2,\n bottom: dot.top - gap,\n top: dot.top - gap - tip.height,\n };\n if (side === 'bottom')\n return {\n left: centerX - tip.width / 2,\n right: centerX + tip.width / 2,\n top: dot.bottom + gap,\n bottom: dot.bottom + gap + tip.height,\n };\n if (side === 'left')\n return {\n right: dot.left - gap,\n left: dot.left - gap - tip.width,\n top: centerY - tip.height / 2,\n bottom: centerY + tip.height / 2,\n };\n return {\n left: dot.right + gap,\n right: dot.right + gap + tip.width,\n top: centerY - tip.height / 2,\n bottom: centerY + tip.height / 2,\n };\n}\n\nfunction overlap(a: Box, b: Box): number {\n const width = Math.min(a.right, b.right) - Math.max(a.left, b.left);\n const height = Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top);\n return width > 0 && height > 0 ? width * height : 0;\n}\n\n/** Whether a line passes through the box, by sampling along it. */\nfunction crosses(box: Box, from: { x: number; y: number }, to: { x: number; y: number }): boolean {\n const steps = Math.max(4, Math.ceil(Math.hypot(to.x - from.x, to.y - from.y) / 6));\n for (let step = 0; step <= steps; step++) {\n const x = from.x + ((to.x - from.x) * step) / steps;\n const y = from.y + ((to.y - from.y) * step) / steps;\n if (x >= box.left && x <= box.right && y >= box.top && y <= box.bottom) return true;\n }\n return false;\n}\n\n/**\n * Picks the side of the dot whose tooltip covers the least: leaving the bounds costs most, then covering a\n * line, then covering a page. With nothing in the way (or nothing measured) it stays above.\n */\nexport function chooseTooltipSide(input: TooltipPlacementInput): TooltipSide {\n const area = (box: Box) => (box.right - box.left) * (box.bottom - box.top);\n let best: TooltipSide = 'top';\n let bestCost = Number.POSITIVE_INFINITY;\n for (const side of SIDES) {\n const box = tooltipBox(side, input);\n const outside = area(box) - overlap(box, input.bounds);\n let cost = outside * 100;\n for (const obstacle of input.obstacles) cost += overlap(box, obstacle) * 4;\n for (const line of input.lines) if (crosses(box, line.from, line.to)) cost += 2000;\n if (cost < bestCost) {\n best = side;\n bestCost = cost;\n }\n }\n return best;\n}\n"],"mappings":";;;AAyBA,IAAM,QAAuB;CAAC;CAAO;CAAU;CAAS;AAAM;;AAG9D,SAAgB,WACd,MACA,EAAE,KAAK,KAAK,OACP;CACL,MAAM,WAAW,IAAI,OAAO,IAAI,SAAS;CACzC,MAAM,WAAW,IAAI,MAAM,IAAI,UAAU;CACzC,IAAI,SAAS,OACX,OAAO;EACL,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,UAAU,IAAI,QAAQ;EAC7B,QAAQ,IAAI,MAAM;EAClB,KAAK,IAAI,MAAM,MAAM,IAAI;CAC3B;CACF,IAAI,SAAS,UACX,OAAO;EACL,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,UAAU,IAAI,QAAQ;EAC7B,KAAK,IAAI,SAAS;EAClB,QAAQ,IAAI,SAAS,MAAM,IAAI;CACjC;CACF,IAAI,SAAS,QACX,OAAO;EACL,OAAO,IAAI,OAAO;EAClB,MAAM,IAAI,OAAO,MAAM,IAAI;EAC3B,KAAK,UAAU,IAAI,SAAS;EAC5B,QAAQ,UAAU,IAAI,SAAS;CACjC;CACF,OAAO;EACL,MAAM,IAAI,QAAQ;EAClB,OAAO,IAAI,QAAQ,MAAM,IAAI;EAC7B,KAAK,UAAU,IAAI,SAAS;EAC5B,QAAQ,UAAU,IAAI,SAAS;CACjC;AACF;AAEA,SAAS,QAAQ,GAAQ,GAAgB;CACvC,MAAM,QAAQ,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;CAClE,MAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,GAAG;CACnE,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,SAAS;AACpD;;AAGA,SAAS,QAAQ,KAAU,MAAgC,IAAuC;CAChG,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;CACjF,KAAK,IAAI,OAAO,GAAG,QAAQ,OAAO,QAAQ;EACxC,MAAM,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,KAAK,OAAQ;EAC9C,MAAM,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,KAAK,OAAQ;EAC9C,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,OAAO;CACjF;CACA,OAAO;AACT;;;;;AAMA,SAAgB,kBAAkB,OAA2C;CAC3E,MAAM,QAAQ,SAAc,IAAI,QAAQ,IAAI,SAAS,IAAI,SAAS,IAAI;CACtE,IAAI,OAAoB;CACxB,IAAI,WAAW,OAAO;CACtB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,WAAW,MAAM,KAAK;EAElC,IAAI,QADY,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,MAAM,KAChC;EACrB,KAAK,MAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,QAAQ,IAAI;EACzE,KAAK,MAAM,QAAQ,MAAM,OAAO,IAAI,QAAQ,KAAK,KAAK,MAAM,KAAK,EAAE,GAAG,QAAQ;EAC9E,IAAI,OAAO,UAAU;GACnB,OAAO;GACP,WAAW;EACb;CACF;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/knowledge/lib/tooltipSide';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// src/domains/knowledge/lib/tooltipSide.ts
|
|
2
|
+
/** Sides in the order they win a tie: above is the one people expect. */
|
|
3
|
+
var SIDES = [
|
|
4
|
+
"top",
|
|
5
|
+
"bottom",
|
|
6
|
+
"right",
|
|
7
|
+
"left"
|
|
8
|
+
];
|
|
9
|
+
/** Where the tooltip would sit on a side of the dot, centred on it. */
|
|
10
|
+
function tooltipBox(side, { dot, tip, gap }) {
|
|
11
|
+
const centerX = (dot.left + dot.right) / 2;
|
|
12
|
+
const centerY = (dot.top + dot.bottom) / 2;
|
|
13
|
+
if (side === "top") return {
|
|
14
|
+
left: centerX - tip.width / 2,
|
|
15
|
+
right: centerX + tip.width / 2,
|
|
16
|
+
bottom: dot.top - gap,
|
|
17
|
+
top: dot.top - gap - tip.height
|
|
18
|
+
};
|
|
19
|
+
if (side === "bottom") return {
|
|
20
|
+
left: centerX - tip.width / 2,
|
|
21
|
+
right: centerX + tip.width / 2,
|
|
22
|
+
top: dot.bottom + gap,
|
|
23
|
+
bottom: dot.bottom + gap + tip.height
|
|
24
|
+
};
|
|
25
|
+
if (side === "left") return {
|
|
26
|
+
right: dot.left - gap,
|
|
27
|
+
left: dot.left - gap - tip.width,
|
|
28
|
+
top: centerY - tip.height / 2,
|
|
29
|
+
bottom: centerY + tip.height / 2
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
left: dot.right + gap,
|
|
33
|
+
right: dot.right + gap + tip.width,
|
|
34
|
+
top: centerY - tip.height / 2,
|
|
35
|
+
bottom: centerY + tip.height / 2
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function overlap(a, b) {
|
|
39
|
+
const width = Math.min(a.right, b.right) - Math.max(a.left, b.left);
|
|
40
|
+
const height = Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top);
|
|
41
|
+
return width > 0 && height > 0 ? width * height : 0;
|
|
42
|
+
}
|
|
43
|
+
/** Whether a line passes through the box, by sampling along it. */
|
|
44
|
+
function crosses(box, from, to) {
|
|
45
|
+
const steps = Math.max(4, Math.ceil(Math.hypot(to.x - from.x, to.y - from.y) / 6));
|
|
46
|
+
for (let step = 0; step <= steps; step++) {
|
|
47
|
+
const x = from.x + (to.x - from.x) * step / steps;
|
|
48
|
+
const y = from.y + (to.y - from.y) * step / steps;
|
|
49
|
+
if (x >= box.left && x <= box.right && y >= box.top && y <= box.bottom) return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Picks the side of the dot whose tooltip covers the least: leaving the bounds costs most, then covering a
|
|
55
|
+
* line, then covering a page. With nothing in the way (or nothing measured) it stays above.
|
|
56
|
+
*/
|
|
57
|
+
function chooseTooltipSide(input) {
|
|
58
|
+
const area = (box) => (box.right - box.left) * (box.bottom - box.top);
|
|
59
|
+
let best = "top";
|
|
60
|
+
let bestCost = Number.POSITIVE_INFINITY;
|
|
61
|
+
for (const side of SIDES) {
|
|
62
|
+
const box = tooltipBox(side, input);
|
|
63
|
+
let cost = (area(box) - overlap(box, input.bounds)) * 100;
|
|
64
|
+
for (const obstacle of input.obstacles) cost += overlap(box, obstacle) * 4;
|
|
65
|
+
for (const line of input.lines) if (crosses(box, line.from, line.to)) cost += 2e3;
|
|
66
|
+
if (cost < bestCost) {
|
|
67
|
+
best = side;
|
|
68
|
+
bestCost = cost;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return best;
|
|
72
|
+
}
|
|
73
|
+
export { chooseTooltipSide, tooltipBox };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=tooltipSide.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltipSide.es.js","names":[],"sources":["../../../../src/domains/knowledge/lib/tooltipSide.ts"],"sourcesContent":["export interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport type TooltipSide = 'top' | 'bottom' | 'right' | 'left';\n\nexport interface TooltipPlacementInput {\n /** The hovered dot, in the same coordinates as everything else (the screen). */\n dot: Box;\n /** The tooltip's size once drawn. */\n tip: { width: number; height: number };\n /** Space between the dot and the tooltip. */\n gap: number;\n /** The tooltip must stay inside this. */\n bounds: Box;\n /** Things the tooltip must not cover: the focused page, the hovered page's neighbours, the legend, buttons. */\n obstacles: readonly Box[];\n /** Lines it must not cover: the hovered page's highlighted edges, as endpoints. */\n lines: ReadonlyArray<{ from: { x: number; y: number }; to: { x: number; y: number } }>;\n}\n\n/** Sides in the order they win a tie: above is the one people expect. */\nconst SIDES: TooltipSide[] = ['top', 'bottom', 'right', 'left'];\n\n/** Where the tooltip would sit on a side of the dot, centred on it. */\nexport function tooltipBox(\n side: TooltipSide,\n { dot, tip, gap }: Pick<TooltipPlacementInput, 'dot' | 'tip' | 'gap'>,\n): Box {\n const centerX = (dot.left + dot.right) / 2;\n const centerY = (dot.top + dot.bottom) / 2;\n if (side === 'top')\n return {\n left: centerX - tip.width / 2,\n right: centerX + tip.width / 2,\n bottom: dot.top - gap,\n top: dot.top - gap - tip.height,\n };\n if (side === 'bottom')\n return {\n left: centerX - tip.width / 2,\n right: centerX + tip.width / 2,\n top: dot.bottom + gap,\n bottom: dot.bottom + gap + tip.height,\n };\n if (side === 'left')\n return {\n right: dot.left - gap,\n left: dot.left - gap - tip.width,\n top: centerY - tip.height / 2,\n bottom: centerY + tip.height / 2,\n };\n return {\n left: dot.right + gap,\n right: dot.right + gap + tip.width,\n top: centerY - tip.height / 2,\n bottom: centerY + tip.height / 2,\n };\n}\n\nfunction overlap(a: Box, b: Box): number {\n const width = Math.min(a.right, b.right) - Math.max(a.left, b.left);\n const height = Math.min(a.bottom, b.bottom) - Math.max(a.top, b.top);\n return width > 0 && height > 0 ? width * height : 0;\n}\n\n/** Whether a line passes through the box, by sampling along it. */\nfunction crosses(box: Box, from: { x: number; y: number }, to: { x: number; y: number }): boolean {\n const steps = Math.max(4, Math.ceil(Math.hypot(to.x - from.x, to.y - from.y) / 6));\n for (let step = 0; step <= steps; step++) {\n const x = from.x + ((to.x - from.x) * step) / steps;\n const y = from.y + ((to.y - from.y) * step) / steps;\n if (x >= box.left && x <= box.right && y >= box.top && y <= box.bottom) return true;\n }\n return false;\n}\n\n/**\n * Picks the side of the dot whose tooltip covers the least: leaving the bounds costs most, then covering a\n * line, then covering a page. With nothing in the way (or nothing measured) it stays above.\n */\nexport function chooseTooltipSide(input: TooltipPlacementInput): TooltipSide {\n const area = (box: Box) => (box.right - box.left) * (box.bottom - box.top);\n let best: TooltipSide = 'top';\n let bestCost = Number.POSITIVE_INFINITY;\n for (const side of SIDES) {\n const box = tooltipBox(side, input);\n const outside = area(box) - overlap(box, input.bounds);\n let cost = outside * 100;\n for (const obstacle of input.obstacles) cost += overlap(box, obstacle) * 4;\n for (const line of input.lines) if (crosses(box, line.from, line.to)) cost += 2000;\n if (cost < bestCost) {\n best = side;\n bestCost = cost;\n }\n }\n return best;\n}\n"],"mappings":";;AAyBA,IAAM,QAAuB;CAAC;CAAO;CAAU;CAAS;AAAM;;AAG9D,SAAgB,WACd,MACA,EAAE,KAAK,KAAK,OACP;CACL,MAAM,WAAW,IAAI,OAAO,IAAI,SAAS;CACzC,MAAM,WAAW,IAAI,MAAM,IAAI,UAAU;CACzC,IAAI,SAAS,OACX,OAAO;EACL,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,UAAU,IAAI,QAAQ;EAC7B,QAAQ,IAAI,MAAM;EAClB,KAAK,IAAI,MAAM,MAAM,IAAI;CAC3B;CACF,IAAI,SAAS,UACX,OAAO;EACL,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,UAAU,IAAI,QAAQ;EAC7B,KAAK,IAAI,SAAS;EAClB,QAAQ,IAAI,SAAS,MAAM,IAAI;CACjC;CACF,IAAI,SAAS,QACX,OAAO;EACL,OAAO,IAAI,OAAO;EAClB,MAAM,IAAI,OAAO,MAAM,IAAI;EAC3B,KAAK,UAAU,IAAI,SAAS;EAC5B,QAAQ,UAAU,IAAI,SAAS;CACjC;CACF,OAAO;EACL,MAAM,IAAI,QAAQ;EAClB,OAAO,IAAI,QAAQ,MAAM,IAAI;EAC7B,KAAK,UAAU,IAAI,SAAS;EAC5B,QAAQ,UAAU,IAAI,SAAS;CACjC;AACF;AAEA,SAAS,QAAQ,GAAQ,GAAgB;CACvC,MAAM,QAAQ,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI;CAClE,MAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,GAAG;CACnE,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,SAAS;AACpD;;AAGA,SAAS,QAAQ,KAAU,MAAgC,IAAuC;CAChG,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;CACjF,KAAK,IAAI,OAAO,GAAG,QAAQ,OAAO,QAAQ;EACxC,MAAM,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,KAAK,OAAQ;EAC9C,MAAM,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,KAAK,OAAQ;EAC9C,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,OAAO;CACjF;CACA,OAAO;AACT;;;;;AAMA,SAAgB,kBAAkB,OAA2C;CAC3E,MAAM,QAAQ,SAAc,IAAI,QAAQ,IAAI,SAAS,IAAI,SAAS,IAAI;CACtE,IAAI,OAAoB;CACxB,IAAI,WAAW,OAAO;CACtB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,WAAW,MAAM,KAAK;EAElC,IAAI,QADY,KAAK,GAAG,IAAI,QAAQ,KAAK,MAAM,MAAM,KAChC;EACrB,KAAK,MAAM,YAAY,MAAM,WAAW,QAAQ,QAAQ,KAAK,QAAQ,IAAI;EACzE,KAAK,MAAM,QAAQ,MAAM,OAAO,IAAI,QAAQ,KAAK,KAAK,MAAM,KAAK,EAAE,GAAG,QAAQ;EAC9E,IAAI,OAAO,UAAU;GACnB,OAAO;GACP,WAAW;EACb;CACF;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let react = require("react");
|
|
3
|
+
// src/domains/knowledge/lib/useLeavingNodes.ts
|
|
4
|
+
/** How long a view change takes: nodes glide, resize and fade over this. */
|
|
5
|
+
var KNOWLEDGE_GRAPH_TRANSITION_MS = 700;
|
|
6
|
+
/** Whether the person has not asked the system to cut motion. Without `matchMedia` (a test DOM) nothing animates. */
|
|
7
|
+
function prefersMotion() {
|
|
8
|
+
return typeof window !== "undefined" && !!window.matchMedia?.("(prefers-reduced-motion: no-preference)").matches;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The nodes plus, for one transition after a view change, the nodes that just left: drawn where they were,
|
|
12
|
+
* then faded out, so a page that is not in the next view fades instead of vanishing. With `enabled` false
|
|
13
|
+
* (reduced motion) it returns the nodes untouched.
|
|
14
|
+
*/
|
|
15
|
+
function useLeavingNodes(nodes, enabled) {
|
|
16
|
+
const key = nodes.map((node) => node.id).join("\0");
|
|
17
|
+
const [previousKey, setPreviousKey] = (0, react.useState)(key);
|
|
18
|
+
const [ghosts, setGhosts] = (0, react.useState)([]);
|
|
19
|
+
const lastNodes = (0, react.useRef)(nodes);
|
|
20
|
+
(0, react.useEffect)(() => {
|
|
21
|
+
lastNodes.current = nodes;
|
|
22
|
+
});
|
|
23
|
+
if (previousKey !== key) {
|
|
24
|
+
setPreviousKey(key);
|
|
25
|
+
if (enabled) {
|
|
26
|
+
const present = new Set(nodes.map((node) => node.id));
|
|
27
|
+
const gone = lastNodes.current.filter((node) => !present.has(node.id));
|
|
28
|
+
setGhosts((current) => [...current.filter((ghost) => !present.has(ghost.node.id)), ...gone.filter((node) => !current.some((ghost) => ghost.node.id === node.id)).map((node) => ({
|
|
29
|
+
node,
|
|
30
|
+
fading: false
|
|
31
|
+
}))]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const waiting = ghosts.some((ghost) => !ghost.fading);
|
|
35
|
+
const removal = (0, react.useRef)(void 0);
|
|
36
|
+
(0, react.useEffect)(() => {
|
|
37
|
+
if (!waiting) return;
|
|
38
|
+
const frame = requestAnimationFrame(() => {
|
|
39
|
+
setGhosts((current) => current.map((ghost) => ({
|
|
40
|
+
...ghost,
|
|
41
|
+
fading: true
|
|
42
|
+
})));
|
|
43
|
+
clearTimeout(removal.current);
|
|
44
|
+
removal.current = setTimeout(() => setGhosts((current) => current.filter((ghost) => !ghost.fading)), 750);
|
|
45
|
+
});
|
|
46
|
+
return () => cancelAnimationFrame(frame);
|
|
47
|
+
}, [waiting, ghosts.length]);
|
|
48
|
+
(0, react.useEffect)(() => () => clearTimeout(removal.current), []);
|
|
49
|
+
if (!enabled || ghosts.length === 0) return nodes;
|
|
50
|
+
return [...nodes, ...ghosts.map(({ node, fading }) => ({
|
|
51
|
+
...node,
|
|
52
|
+
selectable: false,
|
|
53
|
+
focusable: false,
|
|
54
|
+
style: {
|
|
55
|
+
...node.style,
|
|
56
|
+
opacity: fading ? 0 : 1,
|
|
57
|
+
pointerEvents: "none"
|
|
58
|
+
}
|
|
59
|
+
}))];
|
|
60
|
+
}
|
|
61
|
+
exports.KNOWLEDGE_GRAPH_TRANSITION_MS = KNOWLEDGE_GRAPH_TRANSITION_MS;
|
|
62
|
+
exports.prefersMotion = prefersMotion;
|
|
63
|
+
exports.useLeavingNodes = useLeavingNodes;
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=useLeavingNodes.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLeavingNodes.cjs.js","names":["useState","useRef"],"sources":["../../../../src/domains/knowledge/lib/useLeavingNodes.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/** How long a view change takes: nodes glide, resize and fade over this. */\nexport const KNOWLEDGE_GRAPH_TRANSITION_MS = 700;\n\n/** Whether the person has not asked the system to cut motion. Without `matchMedia` (a test DOM) nothing animates. */\nexport function prefersMotion(): boolean {\n return typeof window !== 'undefined' && !!window.matchMedia?.('(prefers-reduced-motion: no-preference)').matches;\n}\n\ninterface Ghost<N> {\n node: N;\n fading: boolean;\n}\n\n/**\n * The nodes plus, for one transition after a view change, the nodes that just left: drawn where they were,\n * then faded out, so a page that is not in the next view fades instead of vanishing. With `enabled` false\n * (reduced motion) it returns the nodes untouched.\n */\nexport function useLeavingNodes<N extends { id: string; style?: CSSProperties }>(nodes: N[], enabled: boolean): N[] {\n // The nodes are rebuilt on many renders, so a change of view is a change in which pages are drawn.\n const key = nodes.map(node => node.id).join('\\u0000');\n const [previousKey, setPreviousKey] = useState(key);\n const [ghosts, setGhosts] = useState<Ghost<N>[]>([]);\n const lastNodes = useRef(nodes);\n useEffect(() => {\n lastNodes.current = nodes;\n });\n // Adjusting state while rendering (not in an effect) keeps the leaving node from unmounting for a frame.\n if (previousKey !== key) {\n setPreviousKey(key);\n if (enabled) {\n const present = new Set(nodes.map(node => node.id));\n const gone = lastNodes.current.filter(node => !present.has(node.id));\n setGhosts(current => [\n ...current.filter(ghost => !present.has(ghost.node.id)),\n ...gone\n .filter(node => !current.some(ghost => ghost.node.id === node.id))\n .map(node => ({ node, fading: false })),\n ]);\n }\n }\n\n const waiting = ghosts.some(ghost => !ghost.fading);\n const removal = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => {\n if (!waiting) return;\n // One frame at full opacity, then the fade; the ghosts go once it has run.\n const frame = requestAnimationFrame(() => {\n setGhosts(current => current.map(ghost => ({ ...ghost, fading: true })));\n clearTimeout(removal.current);\n removal.current = setTimeout(\n () => setGhosts(current => current.filter(ghost => !ghost.fading)),\n KNOWLEDGE_GRAPH_TRANSITION_MS + 50,\n );\n });\n return () => cancelAnimationFrame(frame);\n }, [waiting, ghosts.length]);\n useEffect(() => () => clearTimeout(removal.current), []);\n\n if (!enabled || ghosts.length === 0) return nodes;\n return [\n ...nodes,\n ...ghosts.map(({ node, fading }) => ({\n ...node,\n selectable: false,\n focusable: false,\n style: { ...node.style, opacity: fading ? 0 : 1, pointerEvents: 'none' as const },\n })),\n ];\n}\n"],"mappings":";;;;AAIA,IAAa,gCAAgC;;AAG7C,SAAgB,gBAAyB;CACvC,OAAO,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO,aAAa,yCAAyC,CAAC,CAAC;AAC3G;;;;;;AAYA,SAAgB,gBAAiE,OAAY,SAAuB;CAElH,MAAM,MAAM,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAQ;CACpD,MAAM,CAAC,aAAa,mBAAA,GAAkBA,MAAAA,SAAAA,CAAS,GAAG;CAClD,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAqB,CAAC,CAAC;CACnD,MAAM,aAAA,GAAYC,MAAAA,OAAAA,CAAO,KAAK;CAC9B,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,UAAU,UAAU;CACtB,CAAC;CAED,IAAI,gBAAgB,KAAK;EACvB,eAAe,GAAG;EAClB,IAAI,SAAS;GACX,MAAM,UAAU,IAAI,IAAI,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC;GAClD,MAAM,OAAO,UAAU,QAAQ,QAAO,SAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC;GACnE,WAAU,YAAW,CACnB,GAAG,QAAQ,QAAO,UAAS,CAAC,QAAQ,IAAI,MAAM,KAAK,EAAE,CAAC,GACtD,GAAG,KACA,QAAO,SAAQ,CAAC,QAAQ,MAAK,UAAS,MAAM,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC,CACjE,KAAI,UAAS;IAAE;IAAM,QAAQ;GAAM,EAAE,CAC1C,CAAC;EACH;CACF;CAEA,MAAM,UAAU,OAAO,MAAK,UAAS,CAAC,MAAM,MAAM;CAClD,MAAM,WAAA,GAAUA,MAAAA,OAAAA,CAAsC,KAAA,CAAS;CAC/D,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,SAAS;EAEd,MAAM,QAAQ,4BAA4B;GACxC,WAAU,YAAW,QAAQ,KAAI,WAAU;IAAE,GAAG;IAAO,QAAQ;GAAK,EAAE,CAAC;GACvE,aAAa,QAAQ,OAAO;GAC5B,QAAQ,UAAU,iBACV,WAAU,YAAW,QAAQ,QAAO,UAAS,CAAC,MAAM,MAAM,CAAC,GACjE,GACF;EACF,CAAC;EACD,aAAa,qBAAqB,KAAK;CACzC,GAAG,CAAC,SAAS,OAAO,MAAM,CAAC;CAC3B,CAAA,GAAA,MAAA,UAAA,aAAsB,aAAa,QAAQ,OAAO,GAAG,CAAC,CAAC;CAEvD,IAAI,CAAC,WAAW,OAAO,WAAW,GAAG,OAAO;CAC5C,OAAO,CACL,GAAG,OACH,GAAG,OAAO,KAAK,EAAE,MAAM,cAAc;EACnC,GAAG;EACH,YAAY;EACZ,WAAW;EACX,OAAO;GAAE,GAAG,KAAK;GAAO,SAAS,SAAS,IAAI;GAAG,eAAe;EAAgB;CAClF,EAAE,CACJ;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/knowledge/lib/useLeavingNodes';
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
// src/domains/knowledge/lib/useLeavingNodes.ts
|
|
3
|
+
/** How long a view change takes: nodes glide, resize and fade over this. */
|
|
4
|
+
var KNOWLEDGE_GRAPH_TRANSITION_MS = 700;
|
|
5
|
+
/** Whether the person has not asked the system to cut motion. Without `matchMedia` (a test DOM) nothing animates. */
|
|
6
|
+
function prefersMotion() {
|
|
7
|
+
return typeof window !== "undefined" && !!window.matchMedia?.("(prefers-reduced-motion: no-preference)").matches;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The nodes plus, for one transition after a view change, the nodes that just left: drawn where they were,
|
|
11
|
+
* then faded out, so a page that is not in the next view fades instead of vanishing. With `enabled` false
|
|
12
|
+
* (reduced motion) it returns the nodes untouched.
|
|
13
|
+
*/
|
|
14
|
+
function useLeavingNodes(nodes, enabled) {
|
|
15
|
+
const key = nodes.map((node) => node.id).join("\0");
|
|
16
|
+
const [previousKey, setPreviousKey] = useState(key);
|
|
17
|
+
const [ghosts, setGhosts] = useState([]);
|
|
18
|
+
const lastNodes = useRef(nodes);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
lastNodes.current = nodes;
|
|
21
|
+
});
|
|
22
|
+
if (previousKey !== key) {
|
|
23
|
+
setPreviousKey(key);
|
|
24
|
+
if (enabled) {
|
|
25
|
+
const present = new Set(nodes.map((node) => node.id));
|
|
26
|
+
const gone = lastNodes.current.filter((node) => !present.has(node.id));
|
|
27
|
+
setGhosts((current) => [...current.filter((ghost) => !present.has(ghost.node.id)), ...gone.filter((node) => !current.some((ghost) => ghost.node.id === node.id)).map((node) => ({
|
|
28
|
+
node,
|
|
29
|
+
fading: false
|
|
30
|
+
}))]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const waiting = ghosts.some((ghost) => !ghost.fading);
|
|
34
|
+
const removal = useRef(void 0);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (!waiting) return;
|
|
37
|
+
const frame = requestAnimationFrame(() => {
|
|
38
|
+
setGhosts((current) => current.map((ghost) => ({
|
|
39
|
+
...ghost,
|
|
40
|
+
fading: true
|
|
41
|
+
})));
|
|
42
|
+
clearTimeout(removal.current);
|
|
43
|
+
removal.current = setTimeout(() => setGhosts((current) => current.filter((ghost) => !ghost.fading)), 750);
|
|
44
|
+
});
|
|
45
|
+
return () => cancelAnimationFrame(frame);
|
|
46
|
+
}, [waiting, ghosts.length]);
|
|
47
|
+
useEffect(() => () => clearTimeout(removal.current), []);
|
|
48
|
+
if (!enabled || ghosts.length === 0) return nodes;
|
|
49
|
+
return [...nodes, ...ghosts.map(({ node, fading }) => ({
|
|
50
|
+
...node,
|
|
51
|
+
selectable: false,
|
|
52
|
+
focusable: false,
|
|
53
|
+
style: {
|
|
54
|
+
...node.style,
|
|
55
|
+
opacity: fading ? 0 : 1,
|
|
56
|
+
pointerEvents: "none"
|
|
57
|
+
}
|
|
58
|
+
}))];
|
|
59
|
+
}
|
|
60
|
+
export { KNOWLEDGE_GRAPH_TRANSITION_MS, prefersMotion, useLeavingNodes };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=useLeavingNodes.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLeavingNodes.es.js","names":[],"sources":["../../../../src/domains/knowledge/lib/useLeavingNodes.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/** How long a view change takes: nodes glide, resize and fade over this. */\nexport const KNOWLEDGE_GRAPH_TRANSITION_MS = 700;\n\n/** Whether the person has not asked the system to cut motion. Without `matchMedia` (a test DOM) nothing animates. */\nexport function prefersMotion(): boolean {\n return typeof window !== 'undefined' && !!window.matchMedia?.('(prefers-reduced-motion: no-preference)').matches;\n}\n\ninterface Ghost<N> {\n node: N;\n fading: boolean;\n}\n\n/**\n * The nodes plus, for one transition after a view change, the nodes that just left: drawn where they were,\n * then faded out, so a page that is not in the next view fades instead of vanishing. With `enabled` false\n * (reduced motion) it returns the nodes untouched.\n */\nexport function useLeavingNodes<N extends { id: string; style?: CSSProperties }>(nodes: N[], enabled: boolean): N[] {\n // The nodes are rebuilt on many renders, so a change of view is a change in which pages are drawn.\n const key = nodes.map(node => node.id).join('\\u0000');\n const [previousKey, setPreviousKey] = useState(key);\n const [ghosts, setGhosts] = useState<Ghost<N>[]>([]);\n const lastNodes = useRef(nodes);\n useEffect(() => {\n lastNodes.current = nodes;\n });\n // Adjusting state while rendering (not in an effect) keeps the leaving node from unmounting for a frame.\n if (previousKey !== key) {\n setPreviousKey(key);\n if (enabled) {\n const present = new Set(nodes.map(node => node.id));\n const gone = lastNodes.current.filter(node => !present.has(node.id));\n setGhosts(current => [\n ...current.filter(ghost => !present.has(ghost.node.id)),\n ...gone\n .filter(node => !current.some(ghost => ghost.node.id === node.id))\n .map(node => ({ node, fading: false })),\n ]);\n }\n }\n\n const waiting = ghosts.some(ghost => !ghost.fading);\n const removal = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => {\n if (!waiting) return;\n // One frame at full opacity, then the fade; the ghosts go once it has run.\n const frame = requestAnimationFrame(() => {\n setGhosts(current => current.map(ghost => ({ ...ghost, fading: true })));\n clearTimeout(removal.current);\n removal.current = setTimeout(\n () => setGhosts(current => current.filter(ghost => !ghost.fading)),\n KNOWLEDGE_GRAPH_TRANSITION_MS + 50,\n );\n });\n return () => cancelAnimationFrame(frame);\n }, [waiting, ghosts.length]);\n useEffect(() => () => clearTimeout(removal.current), []);\n\n if (!enabled || ghosts.length === 0) return nodes;\n return [\n ...nodes,\n ...ghosts.map(({ node, fading }) => ({\n ...node,\n selectable: false,\n focusable: false,\n style: { ...node.style, opacity: fading ? 0 : 1, pointerEvents: 'none' as const },\n })),\n ];\n}\n"],"mappings":";;;AAIA,IAAa,gCAAgC;;AAG7C,SAAgB,gBAAyB;CACvC,OAAO,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO,aAAa,yCAAyC,CAAC,CAAC;AAC3G;;;;;;AAYA,SAAgB,gBAAiE,OAAY,SAAuB;CAElH,MAAM,MAAM,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAQ;CACpD,MAAM,CAAC,aAAa,kBAAkB,SAAS,GAAG;CAClD,MAAM,CAAC,QAAQ,aAAa,SAAqB,CAAC,CAAC;CACnD,MAAM,YAAY,OAAO,KAAK;CAC9B,gBAAgB;EACd,UAAU,UAAU;CACtB,CAAC;CAED,IAAI,gBAAgB,KAAK;EACvB,eAAe,GAAG;EAClB,IAAI,SAAS;GACX,MAAM,UAAU,IAAI,IAAI,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC;GAClD,MAAM,OAAO,UAAU,QAAQ,QAAO,SAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC;GACnE,WAAU,YAAW,CACnB,GAAG,QAAQ,QAAO,UAAS,CAAC,QAAQ,IAAI,MAAM,KAAK,EAAE,CAAC,GACtD,GAAG,KACA,QAAO,SAAQ,CAAC,QAAQ,MAAK,UAAS,MAAM,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC,CACjE,KAAI,UAAS;IAAE;IAAM,QAAQ;GAAM,EAAE,CAC1C,CAAC;EACH;CACF;CAEA,MAAM,UAAU,OAAO,MAAK,UAAS,CAAC,MAAM,MAAM;CAClD,MAAM,UAAU,OAAsC,KAAA,CAAS;CAC/D,gBAAgB;EACd,IAAI,CAAC,SAAS;EAEd,MAAM,QAAQ,4BAA4B;GACxC,WAAU,YAAW,QAAQ,KAAI,WAAU;IAAE,GAAG;IAAO,QAAQ;GAAK,EAAE,CAAC;GACvE,aAAa,QAAQ,OAAO;GAC5B,QAAQ,UAAU,iBACV,WAAU,YAAW,QAAQ,QAAO,UAAS,CAAC,MAAM,MAAM,CAAC,GACjE,GACF;EACF,CAAC;EACD,aAAa,qBAAqB,KAAK;CACzC,GAAG,CAAC,SAAS,OAAO,MAAM,CAAC;CAC3B,sBAAsB,aAAa,QAAQ,OAAO,GAAG,CAAC,CAAC;CAEvD,IAAI,CAAC,WAAW,OAAO,WAAW,GAAG,OAAO;CAC5C,OAAO,CACL,GAAG,OACH,GAAG,OAAO,KAAK,EAAE,MAAM,cAAc;EACnC,GAAG;EACH,YAAY;EACZ,WAAW;EACX,OAAO;GAAE,GAAG,KAAK;GAAO,SAAS,SAAS,IAAI;GAAG,eAAe;EAAgB;CAClF,EAAE,CACJ;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let react = require("react");
|
|
3
|
+
// src/domains/knowledge/lib/useStableWhile.ts
|
|
4
|
+
/**
|
|
5
|
+
* The previous value for as long as `equal` says the new one is the same. Hosts hand back fresh arrays
|
|
6
|
+
* every render (a list of query results, say); anything built from them would otherwise change every render.
|
|
7
|
+
*/
|
|
8
|
+
function useStableWhile(next, equal) {
|
|
9
|
+
const previous = (0, react.useRef)(next);
|
|
10
|
+
if (!equal(previous.current, next)) previous.current = next;
|
|
11
|
+
return previous.current;
|
|
12
|
+
}
|
|
13
|
+
exports.useStableWhile = useStableWhile;
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=useStableWhile.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStableWhile.cjs.js","names":["useRef"],"sources":["../../../../src/domains/knowledge/lib/useStableWhile.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * The previous value for as long as `equal` says the new one is the same. Hosts hand back fresh arrays\n * every render (a list of query results, say); anything built from them would otherwise change every render.\n */\nexport function useStableWhile<T>(next: T, equal: (previous: T, next: T) => boolean): T {\n const previous = useRef(next);\n if (!equal(previous.current, next)) previous.current = next;\n return previous.current;\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,eAAkB,MAAS,OAA6C;CACtF,MAAM,YAAA,GAAWA,MAAAA,OAAAA,CAAO,IAAI;CAC5B,IAAI,CAAC,MAAM,SAAS,SAAS,IAAI,GAAG,SAAS,UAAU;CACvD,OAAO,SAAS;AAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../../../src/domains/knowledge/lib/useStableWhile';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
// src/domains/knowledge/lib/useStableWhile.ts
|
|
3
|
+
/**
|
|
4
|
+
* The previous value for as long as `equal` says the new one is the same. Hosts hand back fresh arrays
|
|
5
|
+
* every render (a list of query results, say); anything built from them would otherwise change every render.
|
|
6
|
+
*/
|
|
7
|
+
function useStableWhile(next, equal) {
|
|
8
|
+
const previous = useRef(next);
|
|
9
|
+
if (!equal(previous.current, next)) previous.current = next;
|
|
10
|
+
return previous.current;
|
|
11
|
+
}
|
|
12
|
+
export { useStableWhile };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=useStableWhile.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStableWhile.es.js","names":[],"sources":["../../../../src/domains/knowledge/lib/useStableWhile.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * The previous value for as long as `equal` says the new one is the same. Hosts hand back fresh arrays\n * every render (a list of query results, say); anything built from them would otherwise change every render.\n */\nexport function useStableWhile<T>(next: T, equal: (previous: T, next: T) => boolean): T {\n const previous = useRef(next);\n if (!equal(previous.current, next)) previous.current = next;\n return previous.current;\n}\n"],"mappings":";;;;;;AAMA,SAAgB,eAAkB,MAAS,OAA6C;CACtF,MAAM,WAAW,OAAO,IAAI;CAC5B,IAAI,CAAC,MAAM,SAAS,SAAS,IAAI,GAAG,SAAS,UAAU;CACvD,OAAO,SAAS;AAClB"}
|
|
@@ -2,14 +2,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_domains_metrics_lib_chart_format = require("../lib/chart-format.cjs.js");
|
|
3
3
|
const require_domains_metrics_hooks_use_metrics_filters = require("../hooks/use-metrics-filters.cjs.js");
|
|
4
4
|
const require_domains_metrics_lib_metrics_buckets = require("../lib/metrics-buckets.cjs.js");
|
|
5
|
-
const require_MetricsCard = require("../../../MetricsCard-
|
|
5
|
+
const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
|
|
6
6
|
const require_domains_metrics_components_chart_area = require("./chart-area.cjs.js");
|
|
7
7
|
const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
|
|
8
8
|
const require_domains_metrics_components_chart_card_error = require("./chart-card-error.cjs.js");
|
|
9
9
|
const require_domains_metrics_lib_chart_axis = require("../lib/chart-axis.cjs.js");
|
|
10
10
|
const require_domains_metrics_lib_chart_colors = require("../lib/chart-colors.cjs.js");
|
|
11
|
-
const require_MetricsLineChart = require("../../../MetricsLineChart-
|
|
12
|
-
const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-
|
|
11
|
+
const require_MetricsLineChart = require("../../../MetricsLineChart-tZxsauau.cjs");
|
|
12
|
+
const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-CDLE76IB.cjs");
|
|
13
13
|
const require_domains_metrics_hooks_use_metrics_activity = require("../hooks/use-metrics-activity.cjs.js");
|
|
14
14
|
const require_domains_metrics_components_failure_rate_card = require("./failure-rate-card.cjs.js");
|
|
15
15
|
let react = require("react");
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { formatCount } from "../lib/chart-format.es.js";
|
|
2
2
|
import { useMetricsFilters } from "../hooks/use-metrics-filters.es.js";
|
|
3
3
|
import { bucketPlan, bucketWindow } from "../lib/metrics-buckets.es.js";
|
|
4
|
-
import { t as MetricsCard } from "../../../MetricsCard-
|
|
4
|
+
import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
|
|
5
5
|
import { ChartArea } from "./chart-area.es.js";
|
|
6
6
|
import { ChartCard } from "./chart-card.es.js";
|
|
7
7
|
import { ChartCardError } from "./chart-card-error.es.js";
|
|
8
8
|
import { EDGE_BUCKET_AXIS } from "../lib/chart-axis.es.js";
|
|
9
9
|
import { CHART_COLORS } from "../lib/chart-colors.es.js";
|
|
10
|
-
import { r as MetricsLineChartLegend } from "../../../MetricsLineChart-
|
|
11
|
-
import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-
|
|
10
|
+
import { r as MetricsLineChartLegend } from "../../../MetricsLineChart-4SwxBbQx.js";
|
|
11
|
+
import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-D2QyS4-z.js";
|
|
12
12
|
import { useMetricsActivity } from "../hooks/use-metrics-activity.es.js";
|
|
13
13
|
import { FailureRateCard } from "./failure-rate-card.es.js";
|
|
14
14
|
import { useState } from "react";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_MetricsCard = require("../../../../MetricsCard-
|
|
2
|
+
const require_MetricsCard = require("../../../../MetricsCard-BEwiS7Pe.cjs");
|
|
3
3
|
const require_domains_metrics_lib_breakdown = require("../../lib/breakdown.cjs.js");
|
|
4
4
|
const require_domains_metrics_components_breakdown_breakdown_frame = require("./breakdown-frame.cjs.js");
|
|
5
5
|
const require_domains_metrics_components_breakdown_breakdown_entity_tab = require("./breakdown-entity-tab.cjs.js");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as MetricsCard } from "../../../../MetricsCard-
|
|
1
|
+
import { t as MetricsCard } from "../../../../MetricsCard-ua6C6b8a.js";
|
|
2
2
|
import { isEntityTab } from "../../lib/breakdown.es.js";
|
|
3
3
|
import { BreakdownFrame } from "./breakdown-frame.es.js";
|
|
4
4
|
import { BreakdownEntityTab } from "./breakdown-entity-tab.es.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_metrics_hooks_use_metrics_span_aggregate = require("../hooks/use-metrics-span-aggregate.cjs.js");
|
|
3
3
|
const require_domains_metrics_hooks_use_metrics_trace_aggregate = require("../hooks/use-metrics-trace-aggregate.cjs.js");
|
|
4
|
-
const require_MetricsCard = require("../../../MetricsCard-
|
|
4
|
+
const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
|
|
5
5
|
const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
|
|
6
6
|
const require_domains_metrics_hooks_use_metrics_scope = require("../hooks/use-metrics-scope.cjs.js");
|
|
7
7
|
const require_domains_metrics_components_breakdown_breakdown_frame = require("./breakdown/breakdown-frame.cjs.js");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useSpanAggregateGate } from "../hooks/use-metrics-span-aggregate.es.js";
|
|
2
2
|
import { useTraceAggregateGate } from "../hooks/use-metrics-trace-aggregate.es.js";
|
|
3
|
-
import { t as MetricsCard } from "../../../MetricsCard-
|
|
3
|
+
import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
|
|
4
4
|
import { ChartCard } from "./chart-card.es.js";
|
|
5
5
|
import { useMetricsScope } from "../hooks/use-metrics-scope.es.js";
|
|
6
6
|
import { BREAKDOWN_TITLE } from "./breakdown/breakdown-frame.es.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_MetricsCard = require("../../../MetricsCard-
|
|
2
|
+
const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
// src/domains/metrics/components/chart-area.tsx
|
|
5
5
|
/** A card's chart or list, filling the card body; an empty range shows a message over it. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as MetricsCard } from "../../../MetricsCard-
|
|
1
|
+
import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
// src/domains/metrics/components/chart-area.tsx
|
|
4
4
|
/** A card's chart or list, filling the card body; an empty range shows a message over it. */
|
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_Button = require("../../../Button-DLcMcuUL.cjs");
|
|
3
3
|
const require_domains_auth_components_permission_denied = require("../../auth/components/permission-denied.cjs.js");
|
|
4
4
|
const require_domains_auth_components_session_expired = require("../../auth/components/session-expired.cjs.js");
|
|
5
|
-
const require_MetricsCard = require("../../../MetricsCard-
|
|
5
|
+
const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
let _mastra_react_hooks_query = require("@mastra/react/hooks/query");
|
|
8
8
|
let lucide_react = require("lucide-react");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as Button } from "../../../Button-CLXTbAY8.js";
|
|
2
2
|
import { PermissionDenied } from "../../auth/components/permission-denied.es.js";
|
|
3
3
|
import { SessionExpired } from "../../auth/components/session-expired.es.js";
|
|
4
|
-
import { t as MetricsCard } from "../../../MetricsCard-
|
|
4
|
+
import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { is401UnauthorizedError, is403ForbiddenError } from "@mastra/react/hooks/query";
|
|
7
7
|
import { RotateCcwIcon } from "lucide-react";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_utils = require("../../../utils-uDc1ofX1.cjs");
|
|
3
|
-
const require_MetricsCard = require("../../../MetricsCard-
|
|
3
|
+
const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
let lucide_react = require("lucide-react");
|
|
6
6
|
// src/domains/metrics/components/chart-card.tsx
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as cn } from "../../../utils-DQx8TpNT.js";
|
|
2
|
-
import { t as MetricsCard } from "../../../MetricsCard-
|
|
2
|
+
import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { Maximize2Icon } from "lucide-react";
|
|
5
5
|
// src/domains/metrics/components/chart-card.tsx
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_metrics_hooks_use_metrics = require("../hooks/use-metrics.cjs.js");
|
|
3
|
-
const require_date_time_range_picker = require("../../../date-time-range-picker-
|
|
3
|
+
const require_date_time_range_picker = require("../../../date-time-range-picker-CWGjoR3j.cjs");
|
|
4
4
|
const require_domains_metrics_metrics_date_presets = require("../metrics-date-presets.cjs.js");
|
|
5
5
|
let react = require("react");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useMetrics } from "../hooks/use-metrics.es.js";
|
|
2
|
-
import { t as DateTimeRangePicker } from "../../../date-time-range-picker-
|
|
2
|
+
import { t as DateTimeRangePicker } from "../../../date-time-range-picker-CdSiXwB4.js";
|
|
3
3
|
import { METRICS_PICKER_PRESETS, fromPickerPreset, toPickerPreset } from "../metrics-date-presets.es.js";
|
|
4
4
|
import { useRef } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|