@xyne/workflow-ui 0.4.0 → 0.4.1

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.
Files changed (80) hide show
  1. package/dist/components/analytics/AnalyticsDashboard.d.ts.map +1 -1
  2. package/dist/components/analytics/AnalyticsDashboard.js +30 -7
  3. package/dist/components/analytics/AnalyticsDashboard.js.map +1 -1
  4. package/dist/components/analytics/FilteredRunsPanel.d.ts +8 -0
  5. package/dist/components/analytics/FilteredRunsPanel.d.ts.map +1 -0
  6. package/dist/components/analytics/FilteredRunsPanel.js +64 -0
  7. package/dist/components/analytics/FilteredRunsPanel.js.map +1 -0
  8. package/dist/components/analytics/RecentFailuresPanel.d.ts +9 -0
  9. package/dist/components/analytics/RecentFailuresPanel.d.ts.map +1 -0
  10. package/dist/components/analytics/RecentFailuresPanel.js +27 -0
  11. package/dist/components/analytics/RecentFailuresPanel.js.map +1 -0
  12. package/dist/components/analytics/StatCard.d.ts +3 -1
  13. package/dist/components/analytics/StatCard.d.ts.map +1 -1
  14. package/dist/components/analytics/StatCard.js +2 -2
  15. package/dist/components/analytics/StatCard.js.map +1 -1
  16. package/dist/components/analytics/TopErrorsPanel.d.ts +4 -5
  17. package/dist/components/analytics/TopErrorsPanel.d.ts.map +1 -1
  18. package/dist/components/analytics/TopErrorsPanel.js +18 -45
  19. package/dist/components/analytics/TopErrorsPanel.js.map +1 -1
  20. package/dist/components/analytics/WorkflowsTable.d.ts.map +1 -1
  21. package/dist/components/analytics/WorkflowsTable.js +25 -8
  22. package/dist/components/analytics/WorkflowsTable.js.map +1 -1
  23. package/dist/components/builder/v3/AiBuilderPanel.d.ts +12 -0
  24. package/dist/components/builder/v3/AiBuilderPanel.d.ts.map +1 -0
  25. package/dist/components/builder/v3/AiBuilderPanel.js +119 -0
  26. package/dist/components/builder/v3/AiBuilderPanel.js.map +1 -0
  27. package/dist/components/builder/v3/BuilderToolbar.d.ts +3 -1
  28. package/dist/components/builder/v3/BuilderToolbar.d.ts.map +1 -1
  29. package/dist/components/builder/v3/BuilderToolbar.js +5 -3
  30. package/dist/components/builder/v3/BuilderToolbar.js.map +1 -1
  31. package/dist/components/builder/v3/WorkflowBuilderV3.d.ts +4 -1
  32. package/dist/components/builder/v3/WorkflowBuilderV3.d.ts.map +1 -1
  33. package/dist/components/builder/v3/WorkflowBuilderV3.js +7 -2
  34. package/dist/components/builder/v3/WorkflowBuilderV3.js.map +1 -1
  35. package/dist/components/builder/v3/WorkflowTree.d.ts.map +1 -1
  36. package/dist/components/builder/v3/WorkflowTree.js +1 -1
  37. package/dist/components/builder/v3/WorkflowTree.js.map +1 -1
  38. package/dist/components/dashboard/WorkflowDashboard.d.ts +4 -1
  39. package/dist/components/dashboard/WorkflowDashboard.d.ts.map +1 -1
  40. package/dist/components/dashboard/WorkflowDashboard.js +2 -2
  41. package/dist/components/dashboard/WorkflowDashboard.js.map +1 -1
  42. package/dist/components/execution/ExecutionTree.d.ts.map +1 -1
  43. package/dist/components/execution/ExecutionTree.js +1 -1
  44. package/dist/components/execution/ExecutionTree.js.map +1 -1
  45. package/dist/components/execution/StepAgentPanels.d.ts +9 -0
  46. package/dist/components/execution/StepAgentPanels.d.ts.map +1 -0
  47. package/dist/components/execution/StepAgentPanels.js +133 -0
  48. package/dist/components/execution/StepAgentPanels.js.map +1 -0
  49. package/dist/components/execution/StepDetailPanel.d.ts.map +1 -1
  50. package/dist/components/execution/StepDetailPanel.js +3 -3
  51. package/dist/components/execution/StepDetailPanel.js.map +1 -1
  52. package/dist/components/index.d.ts +2 -0
  53. package/dist/components/index.d.ts.map +1 -1
  54. package/dist/components/index.js +1 -0
  55. package/dist/components/index.js.map +1 -1
  56. package/dist/components/runs/RunsTable.d.ts.map +1 -1
  57. package/dist/components/runs/RunsTable.js +23 -7
  58. package/dist/components/runs/RunsTable.js.map +1 -1
  59. package/dist/components/shared/JsonTreeViewer.d.ts +9 -0
  60. package/dist/components/shared/JsonTreeViewer.d.ts.map +1 -0
  61. package/dist/components/shared/JsonTreeViewer.js +46 -0
  62. package/dist/components/shared/JsonTreeViewer.js.map +1 -0
  63. package/dist/hooks/use-ai-builder.d.ts +13 -0
  64. package/dist/hooks/use-ai-builder.d.ts.map +1 -0
  65. package/dist/hooks/use-ai-builder.js +35 -0
  66. package/dist/hooks/use-ai-builder.js.map +1 -0
  67. package/dist/hooks/use-analytics.d.ts +0 -2
  68. package/dist/hooks/use-analytics.d.ts.map +1 -1
  69. package/dist/hooks/use-analytics.js +21 -118
  70. package/dist/hooks/use-analytics.js.map +1 -1
  71. package/dist/hooks/use-workflow-builder.d.ts +2 -0
  72. package/dist/hooks/use-workflow-builder.d.ts.map +1 -1
  73. package/dist/hooks/use-workflow-builder.js +8 -0
  74. package/dist/hooks/use-workflow-builder.js.map +1 -1
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +1 -0
  78. package/dist/index.js.map +1 -1
  79. package/dist/styles.css +1 -1
  80. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/AnalyticsDashboard.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgFD,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,uBAAuB,+BAsLxE"}
1
+ {"version":3,"file":"AnalyticsDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/AnalyticsDashboard.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgFD,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,uBAAuB,+BAgNxE"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
2
+ import { useState, useMemo } from 'react';
3
3
  import { useAnalytics } from '../../hooks/use-analytics.js';
4
4
  import { LoadingSpinner } from '../shared/LoadingSpinner.js';
5
5
  import { cn } from '../shared/cn.js';
@@ -8,8 +8,10 @@ import { TimeRangeSelector } from './TimeRangeSelector.js';
8
8
  import { RunsTimeSeries } from './RunsTimeSeries.js';
9
9
  import { StatusPieChart } from './StatusPieChart.js';
10
10
  import { TopErrorsPanel } from './TopErrorsPanel.js';
11
+ import { RecentFailuresPanel } from './RecentFailuresPanel.js';
11
12
  import { WorkflowsTable } from './WorkflowsTable.js';
12
13
  import { WorkflowRunsPanel } from './WorkflowRunsPanel.js';
14
+ import { FilteredRunsPanel } from './FilteredRunsPanel.js';
13
15
  import { ExecutionViewer } from '../execution/ExecutionViewer.js';
14
16
  function SectionCard({ title, children, className, }) {
15
17
  return (_jsxs("div", { className: cn('flex flex-col gap-3 rounded-lg border border-[var(--wui-border)] bg-[var(--wui-bg)] p-4', className), children: [_jsx("h3", { className: "text-xs font-semibold uppercase tracking-wider text-[var(--wui-fg-muted)]", children: title }), children] }));
@@ -38,6 +40,20 @@ export function AnalyticsDashboard({ className }) {
38
40
  const [range, setRange] = useState(7);
39
41
  const [view, setView] = useState({ level: 'workflows' });
40
42
  const [workflowSearch, setWorkflowSearch] = useState('');
43
+ const [activeFilter, setActiveFilter] = useState(null);
44
+ const [hasTopErrors, setHasTopErrors] = useState(true);
45
+ const topErrorsSince = useMemo(() => new Date(Date.now() - range * 24 * 60 * 60 * 1000).toISOString(), [range]);
46
+ function handleRangeChange(r) {
47
+ setRange(r);
48
+ setHasTopErrors(true); // re-show while loading the new range
49
+ }
50
+ function handleStatClick(label, status) {
51
+ setActiveFilter((prev) => {
52
+ if (prev?.label === label)
53
+ return null;
54
+ return status ? { label, status } : { label };
55
+ });
56
+ }
41
57
  const { data, isLoading, error } = useAnalytics(range);
42
58
  if (isLoading) {
43
59
  return (_jsx("div", { className: "flex h-full items-center justify-center", "aria-label": "Loading", children: _jsx(LoadingSpinner, { size: "lg" }) }));
@@ -49,12 +65,19 @@ export function AnalyticsDashboard({ className }) {
49
65
  if (view.level === 'steps') {
50
66
  return (_jsxs("div", { className: cn('flex h-full flex-col', className), children: [_jsxs("div", { className: "flex shrink-0 items-center gap-3 border-b border-[var(--wui-border)] bg-[var(--wui-bg)] px-4 py-2.5", children: [_jsxs("button", { type: "button", onClick: () => setView({ level: 'runs', workflowId: view.workflowId, workflowName: view.workflowName }), className: "flex items-center gap-1.5 rounded-md border border-[var(--wui-border)] px-2.5 py-1.5 text-xs font-medium text-[var(--wui-fg-muted)] transition-colors hover:border-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]", children: [_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("polyline", { points: "15 18 9 12 15 6" }) }), "Back to Analytics"] }), _jsxs("div", { className: "flex items-center gap-1.5 text-xs text-[var(--wui-fg-muted)]", children: [_jsx("span", { children: view.workflowName }), _jsx("span", { children: "/" }), _jsx("span", { className: "font-mono font-medium text-[var(--wui-fg)]", children: view.executionId.slice(0, 8) })] })] }), _jsx("div", { className: "flex-1 overflow-hidden", children: _jsx(ExecutionViewer, { executionId: view.executionId }) })] }));
51
67
  }
52
- return (_jsxs("div", { className: cn('flex flex-col gap-4 p-6', className), children: [_jsx("div", { className: "flex justify-end", children: _jsx(TimeRangeSelector, { value: range, onChange: setRange }) }), _jsxs("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6", children: [_jsx(StatCard, { label: "Total Runs", value: data.totalRuns, color: "var(--wui-primary)" }), _jsx(StatCard, { label: "Success Rate", value: data.successRate, percent: true, color: "var(--wui-status-completed)" }), _jsx(StatCard, { label: "Failed", value: data.byStatus['FAILED'] ?? 0, color: "var(--wui-status-failed)" }), _jsx(StatCard, { label: "Running", value: data.byStatus['RUNNING'] ?? 0, color: "var(--wui-status-running)" }), _jsx(StatCard, { label: "Cancelled", value: data.byStatus['CANCELLED'] ?? 0, color: "var(--wui-fg-muted)" }), _jsx(StatCard, { label: "Active Workflows", value: data.activeWorkflows, total: data.totalWorkflows, color: "var(--wui-cat-integration)" })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-[1fr_280px]", children: [_jsx(SectionCard, { title: "Runs per day", children: _jsx(RunsTimeSeries, { data: data.runsByDay, height: 200 }) }), _jsx(SectionCard, { title: "Status breakdown", children: _jsx(StatusPieChart, { byStatus: data.byStatus, height: 200 }) })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: [data.recentFailures.length > 0 && (_jsx(SectionCard, { title: "Recent Failures", children: _jsx("div", { className: "flex flex-col divide-y divide-[var(--wui-border)]", children: data.recentFailures.map((f) => (_jsxs("button", { type: "button", onClick: () => setView({
53
- level: 'steps',
54
- workflowId: f.workflowId,
55
- workflowName: f.workflowName,
56
- executionId: f.executionId,
57
- }), className: "flex items-center gap-3 py-2.5 text-left transition-colors hover:bg-[var(--wui-bg-subtle)] px-1 rounded", children: [_jsx("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-[var(--wui-status-failed)]" }), _jsxs("span", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "block text-xs font-medium text-[var(--wui-fg)] truncate", children: f.workflowName }), _jsx("span", { className: "block text-[11px] text-[var(--wui-fg-muted)] font-mono", children: f.executionId.slice(0, 8) })] }), _jsx("span", { className: "text-[11px] text-[var(--wui-fg-muted)] shrink-0", children: f.createdAt.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }) }), _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-[var(--wui-fg-muted)] shrink-0", children: _jsx("polyline", { points: "9 18 15 12 9 6" }) })] }, f.executionId))) }) })), data.recentFailures.length > 0 && (_jsx(SectionCard, { title: "Top Errors", children: _jsx(TopErrorsPanel, { failures: data.recentFailures }) }))] }), _jsxs(SectionCard, { title: "Explore", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Breadcrumb, { view: view, onNavigate: setView }), view.level === 'workflows' && (_jsxs("div", { className: "relative w-full max-w-xs", children: [_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--wui-fg-muted)]", children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }), _jsx("input", { type: "text", value: workflowSearch, onChange: (e) => setWorkflowSearch(e.target.value), placeholder: "Search workflows...", className: "w-full rounded-md border border-[var(--wui-border)] bg-[var(--wui-bg)] py-1.5 pl-8 pr-3 text-xs text-[var(--wui-fg)] outline-none transition-colors placeholder:text-[var(--wui-fg-muted)] focus:border-[var(--wui-primary)]" })] }))] }), view.level === 'workflows' && (_jsx(WorkflowsTable, { data: data.byWorkflow, search: workflowSearch, onSelectWorkflow: (workflowId) => {
68
+ return (_jsxs("div", { className: cn('flex flex-col gap-4 p-6', className), children: [_jsx("div", { className: "flex justify-end", children: _jsx(TimeRangeSelector, { value: range, onChange: handleRangeChange }) }), _jsxs("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-7", children: [_jsx(StatCard, { label: "Total Runs", value: data.totalRuns, color: "var(--wui-primary)", active: activeFilter?.label === 'Total Runs', onClick: () => handleStatClick('Total Runs', undefined) }), _jsx(StatCard, { label: "Success Rate", value: data.successRate, percent: true, color: "var(--wui-status-completed)", active: activeFilter?.label === 'Success Rate', onClick: () => handleStatClick('Success Rate', 'COMPLETED') }), _jsx(StatCard, { label: "Failed", value: data.byStatus['FAILED'] ?? 0, color: "var(--wui-status-failed)", active: activeFilter?.label === 'Failed', onClick: () => handleStatClick('Failed', 'FAILED') }), _jsx(StatCard, { label: "Running", value: data.byStatus['RUNNING'] ?? 0, color: "var(--wui-status-running)", active: activeFilter?.label === 'Running', onClick: () => handleStatClick('Running', 'RUNNING') }), _jsx(StatCard, { label: "Waiting", value: data.byStatus['EXTERNAL_WAIT'] ?? 0, color: "var(--wui-status-paused)", active: activeFilter?.label === 'Waiting', onClick: () => handleStatClick('Waiting', 'EXTERNAL_WAIT') }), _jsx(StatCard, { label: "Cancelled", value: data.byStatus['CANCELLED'] ?? 0, color: "var(--wui-fg-muted)", active: activeFilter?.label === 'Cancelled', onClick: () => handleStatClick('Cancelled', 'CANCELLED') }), _jsx(StatCard, { label: "Active Workflows", value: data.activeWorkflows, total: data.totalWorkflows, color: "var(--wui-cat-integration)" })] }), activeFilter && (_jsx(FilteredRunsPanel, { label: activeFilter.label, ...('status' in activeFilter ? { status: activeFilter.status } : {}), onClose: () => setActiveFilter(null), onSelectExecution: (executionId, workflowId) => {
69
+ const wf = data.byWorkflow.find((w) => w.workflowId === workflowId);
70
+ setActiveFilter(null);
71
+ setView({ level: 'steps', workflowId, workflowName: wf?.name ?? workflowId, executionId });
72
+ } })), _jsxs("div", { className: "flex gap-4", children: [_jsx(SectionCard, { title: "Runs per day", className: "min-w-0 flex-1 overflow-hidden", children: _jsx(RunsTimeSeries, { data: data.runsByDay, height: 200 }) }), _jsx(SectionCard, { title: "Status breakdown", className: "w-[280px] shrink-0", children: _jsx(StatusPieChart, { byStatus: data.byStatus, height: 200 }) })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: [data.recentFailures.length > 0 && (_jsx(SectionCard, { title: "Recent Failures", children: _jsx(RecentFailuresPanel, { failures: data.recentFailures, onSelect: (f) => setView({
73
+ level: 'steps',
74
+ workflowId: f.workflowId,
75
+ workflowName: f.workflowName,
76
+ executionId: f.executionId,
77
+ }) }) })), _jsx(SectionCard, { title: "Top Errors", className: hasTopErrors ? '' : 'hidden', children: _jsx(TopErrorsPanel, { since: topErrorsSince, onLoad: setHasTopErrors, onSelectRun: (executionId, workflowId) => {
78
+ const wf = data.byWorkflow.find((w) => w.workflowId === workflowId);
79
+ setView({ level: 'steps', workflowId, workflowName: wf?.name ?? workflowId, executionId });
80
+ } }) })] }), _jsxs(SectionCard, { title: "Explore", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Breadcrumb, { view: view, onNavigate: setView }), view.level === 'workflows' && (_jsxs("div", { className: "relative w-full max-w-xs", children: [_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--wui-fg-muted)]", children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }), _jsx("input", { type: "text", value: workflowSearch, onChange: (e) => setWorkflowSearch(e.target.value), placeholder: "Search workflows...", className: "w-full rounded-md border border-[var(--wui-border)] bg-[var(--wui-bg)] py-1.5 pl-8 pr-3 text-xs text-[var(--wui-fg)] outline-none transition-colors placeholder:text-[var(--wui-fg-muted)] focus:border-[var(--wui-primary)]" })] }))] }), view.level === 'workflows' && (_jsx(WorkflowsTable, { data: data.byWorkflow, search: workflowSearch, onSelectWorkflow: (workflowId) => {
58
81
  const wf = data.byWorkflow.find((w) => w.workflowId === workflowId);
59
82
  setView({ level: 'runs', workflowId, workflowName: wf?.name ?? workflowId });
60
83
  } })), view.level === 'runs' && (_jsx(WorkflowRunsPanel, { workflowId: view.workflowId, onSelectExecution: (executionId) => setView({
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsDashboard.js","sourceRoot":"","sources":["../../../src/components/analytics/AnalyticsDashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AnalyticsDashboard.js","sourceRoot":"","sources":["../../../src/components/analytics/AnalyticsDashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface FilteredRunsPanelProps {
2
+ label: string;
3
+ status?: string | undefined;
4
+ onSelectExecution: (executionId: string, workflowId: string) => void;
5
+ onClose: () => void;
6
+ }
7
+ export declare function FilteredRunsPanel({ label, status, onSelectExecution, onClose }: FilteredRunsPanelProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=FilteredRunsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilteredRunsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/FilteredRunsPanel.tsx"],"names":[],"mappings":"AA+BA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,sBAAsB,+BAuGtG"}
@@ -0,0 +1,64 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ import { useVirtualizer } from '@tanstack/react-virtual';
4
+ import { useRunsList } from '../../hooks/use-runs-list.js';
5
+ import { StatusBadge } from '../shared/StatusBadge.js';
6
+ import { LoadingSpinner } from '../shared/LoadingSpinner.js';
7
+ const ROW_HEIGHT = 48;
8
+ const PANEL_HEIGHT = 380;
9
+ function mapStatus(status) {
10
+ switch (status) {
11
+ case 'COMPLETED': return 'completed';
12
+ case 'FAILED': return 'failed';
13
+ case 'RUNNING': return 'running';
14
+ case 'EXTERNAL_WAIT': return 'paused';
15
+ case 'CANCELLED': return 'cancelled';
16
+ default: return 'pending';
17
+ }
18
+ }
19
+ function timeAgo(date) {
20
+ const d = date instanceof Date ? date : new Date(date);
21
+ const sec = Math.floor((Date.now() - d.getTime()) / 1000);
22
+ if (sec < 60)
23
+ return `${sec}s ago`;
24
+ const min = Math.floor(sec / 60);
25
+ if (min < 60)
26
+ return `${min}m ago`;
27
+ const hr = Math.floor(min / 60);
28
+ if (hr < 24)
29
+ return `${hr}h ago`;
30
+ return `${Math.floor(hr / 24)}d ago`;
31
+ }
32
+ export function FilteredRunsPanel({ label, status, onSelectExecution, onClose }) {
33
+ const { executions, isLoading, error, hasMore, loadMore } = useRunsList(status ? { status } : {});
34
+ const scrollRef = useRef(null);
35
+ const rowVirtualizer = useVirtualizer({
36
+ count: executions.length,
37
+ getScrollElement: () => scrollRef.current,
38
+ estimateSize: () => ROW_HEIGHT,
39
+ overscan: 5,
40
+ });
41
+ // Load more when scrolled near the bottom
42
+ useEffect(() => {
43
+ const el = scrollRef.current;
44
+ if (!el)
45
+ return;
46
+ const onScroll = () => {
47
+ if (hasMore && el.scrollTop + el.clientHeight >= el.scrollHeight - ROW_HEIGHT * 2) {
48
+ loadMore();
49
+ }
50
+ };
51
+ el.addEventListener('scroll', onScroll, { passive: true });
52
+ return () => el.removeEventListener('scroll', onScroll);
53
+ }, [hasMore, loadMore]);
54
+ const virtualRows = rowVirtualizer.getVirtualItems();
55
+ const totalSize = rowVirtualizer.getTotalSize();
56
+ const paddingTop = virtualRows[0]?.start ?? 0;
57
+ const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows[virtualRows.length - 1]?.end ?? 0) : 0;
58
+ return (_jsxs("div", { className: "flex flex-col gap-3 rounded-lg border border-[var(--wui-border)] bg-[var(--wui-bg)] p-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("h3", { className: "text-xs font-semibold uppercase tracking-wider text-[var(--wui-fg-muted)]", children: [label, " \u2014 Latest Runs"] }), _jsx("button", { type: "button", onClick: onClose, className: "rounded p-1 text-[var(--wui-fg-muted)] transition-colors hover:bg-[var(--wui-bg-subtle)] hover:text-[var(--wui-fg)]", "aria-label": "Close", children: _jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }), isLoading ? (_jsx("div", { className: "flex items-center justify-center", style: { height: PANEL_HEIGHT }, children: _jsx(LoadingSpinner, { size: "sm" }) })) : error ? (_jsx("div", { className: "flex items-center justify-center text-xs text-[var(--wui-status-failed)]", style: { height: PANEL_HEIGHT }, children: "Failed to load runs" })) : executions.length === 0 ? (_jsx("div", { className: "flex items-center justify-center text-xs text-[var(--wui-fg-muted)]", style: { height: PANEL_HEIGHT }, children: "No runs found" })) : (_jsxs("div", { ref: scrollRef, style: { height: PANEL_HEIGHT, overflowY: 'auto' }, className: "rounded-md border border-[var(--wui-border)]", children: [_jsx("div", { className: "sticky top-0 z-10 grid grid-cols-[2fr_1fr_1fr_1fr] border-b border-[var(--wui-border)] bg-[var(--wui-bg)] px-3 py-2", children: ['Status', 'Execution ID', 'Workflow', 'Started'].map((col) => (_jsx("span", { className: "text-[10px] font-semibold uppercase tracking-widest text-[var(--wui-fg-muted)]", children: col }, col))) }), _jsxs("div", { style: { height: totalSize, position: 'relative' }, children: [paddingTop > 0 && _jsx("div", { style: { height: paddingTop } }), virtualRows.map((vRow) => {
59
+ const exec = executions[vRow.index];
60
+ const variant = mapStatus(exec.status);
61
+ return (_jsxs("div", { onClick: () => onSelectExecution(exec.id, exec.workflowId), style: { position: 'absolute', top: 0, left: 0, width: '100%', height: ROW_HEIGHT, transform: `translateY(${vRow.start}px)` }, className: "grid cursor-pointer grid-cols-[2fr_1fr_1fr_1fr] items-center border-b border-[var(--wui-border)] px-3 transition-colors hover:bg-[var(--wui-bg-subtle)]", children: [_jsx(StatusBadge, { status: variant }), _jsx("code", { className: "font-mono text-[11px] text-[var(--wui-fg-muted)]", children: exec.id.slice(0, 8) }), _jsx("span", { className: "truncate text-[12px] text-[var(--wui-fg)]", children: exec.workflowId }), _jsx("span", { className: "text-[11px] text-[var(--wui-fg-muted)]", children: timeAgo(exec.createdAt) })] }, exec.id));
62
+ }), paddingBottom > 0 && _jsx("div", { style: { height: paddingBottom } })] }), hasMore && (_jsx("div", { className: "flex items-center justify-center py-2 text-[11px] text-[var(--wui-fg-muted)]", children: "Loading more\u2026" }))] }))] }));
63
+ }
64
+ //# sourceMappingURL=FilteredRunsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilteredRunsPanel.js","sourceRoot":"","sources":["../../../src/components/analytics/FilteredRunsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AnalyticsData } from '../../hooks/use-analytics.js';
2
+ type RecentFailure = AnalyticsData['recentFailures'][number];
3
+ export interface RecentFailuresPanelProps {
4
+ failures: RecentFailure[];
5
+ onSelect: (failure: RecentFailure) => void;
6
+ }
7
+ export declare function RecentFailuresPanel({ failures, onSelect }: RecentFailuresPanelProps): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=RecentFailuresPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecentFailuresPanel.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/RecentFailuresPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,KAAK,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5C;AAKD,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,wBAAwB,+BAiDnF"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { useVirtualizer } from '@tanstack/react-virtual';
4
+ const ROW_HEIGHT = 46;
5
+ const MAX_VISIBLE_ROWS = 6;
6
+ export function RecentFailuresPanel({ failures, onSelect }) {
7
+ const parentRef = useRef(null);
8
+ const virtualizer = useVirtualizer({
9
+ count: failures.length,
10
+ getScrollElement: () => parentRef.current,
11
+ estimateSize: () => ROW_HEIGHT,
12
+ overscan: 3,
13
+ });
14
+ const containerHeight = Math.min(failures.length, MAX_VISIBLE_ROWS) * ROW_HEIGHT;
15
+ return (_jsx("div", { ref: parentRef, style: { height: containerHeight, overflowY: 'auto' }, children: _jsx("div", { style: { height: virtualizer.getTotalSize(), position: 'relative' }, children: virtualizer.getVirtualItems().map((vItem) => {
16
+ const f = failures[vItem.index];
17
+ return (_jsxs("button", { type: "button", onClick: () => onSelect(f), style: {
18
+ position: 'absolute',
19
+ top: 0,
20
+ left: 0,
21
+ width: '100%',
22
+ height: ROW_HEIGHT,
23
+ transform: `translateY(${vItem.start}px)`,
24
+ }, className: "flex items-center gap-3 border-b border-[var(--wui-border)] px-1 text-left transition-colors hover:bg-[var(--wui-bg-subtle)]", children: [_jsx("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-[var(--wui-status-failed)]" }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate text-xs font-medium text-[var(--wui-fg)]", children: f.workflowName }), _jsx("span", { className: "block font-mono text-[11px] text-[var(--wui-fg-muted)]", children: f.executionId.slice(0, 8) })] }), _jsx("span", { className: "shrink-0 text-[11px] text-[var(--wui-fg-muted)]", children: f.createdAt.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }) }), _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-[var(--wui-fg-muted)]", children: _jsx("polyline", { points: "9 18 15 12 9 6" }) })] }, f.executionId));
25
+ }) }) }));
26
+ }
27
+ //# sourceMappingURL=RecentFailuresPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecentFailuresPanel.js","sourceRoot":"","sources":["../../../src/components/analytics/RecentFailuresPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAUzD,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAA4B;IAClF,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;QACzC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU;QAC9B,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,UAAU,CAAC;IAEjF,OAAO,CACL,cAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,YACxE,cAAK,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,YACrE,WAAW,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;gBACjC,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,cAAc,KAAK,CAAC,KAAK,KAAK;qBAC1C,EACD,SAAS,EAAC,8HAA8H,aAExI,eAAM,SAAS,EAAC,iEAAiE,GAAG,EACpF,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,yDAAyD,YAAE,CAAC,CAAC,YAAY,GAAQ,EACjG,eAAM,SAAS,EAAC,wDAAwD,YAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAQ,IACtG,EACP,eAAM,SAAS,EAAC,iDAAiD,YAC9D,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GACzG,EACP,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAC,qCAAqC,YAC5L,mBAAU,MAAM,EAAC,gBAAgB,GAAG,GAChC,KAvBD,CAAC,CAAC,WAAW,CAwBX,CACV,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -5,6 +5,8 @@ export interface StatCardProps {
5
5
  total?: number;
6
6
  color?: string;
7
7
  className?: string;
8
+ active?: boolean;
9
+ onClick?: () => void;
8
10
  }
9
- export declare function StatCard({ label, value, percent, total, color, className }: StatCardProps): import("react").JSX.Element;
11
+ export declare function StatCard({ label, value, percent, total, color, className, active, onClick }: StatCardProps): import("react").JSX.Element;
10
12
  //# sourceMappingURL=StatCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/StatCard.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,SAAS,EAAE,EAAE,aAAa,+BAuBhH"}
1
+ {"version":3,"file":"StatCard.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/StatCard.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,+BAsCjI"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../shared/cn.js';
3
- export function StatCard({ label, value, percent, total, color = 'var(--wui-primary)', className }) {
3
+ export function StatCard({ label, value, percent, total, color = 'var(--wui-primary)', className, active, onClick }) {
4
4
  const display = total !== undefined
5
5
  ? `${value}/${total}`
6
6
  : percent
7
7
  ? `${value}%`
8
8
  : String(value);
9
- return (_jsxs("div", { className: cn('flex flex-col justify-center gap-1.5 rounded-lg border border-[var(--wui-border)] bg-[var(--wui-bg)] px-4 py-5', className), children: [_jsx("span", { className: "text-3xl font-bold tabular-nums leading-none", style: { color }, children: display }), _jsx("span", { className: "text-xs text-[var(--wui-fg-muted)]", children: label })] }));
9
+ return (_jsxs("div", { onClick: onClick, className: cn('relative flex flex-col justify-center gap-1.5 overflow-hidden rounded-lg border bg-[var(--wui-bg)] px-4 py-5 transition-all duration-150', onClick && 'cursor-pointer', active ? 'border-[var(--wui-border)] shadow-md' : 'border-[var(--wui-border)]', className), style: active ? { boxShadow: `0 0 0 2px ${color}40, 0 4px 12px ${color}20` } : undefined, children: [_jsx("div", { className: "absolute left-0 top-0 h-[3px] w-full rounded-t-lg opacity-70", style: { background: `linear-gradient(90deg, ${color}, transparent)` } }), _jsx("div", { className: "absolute -left-4 -top-4 h-16 w-16 rounded-full opacity-10 blur-2xl", style: { background: color } }), _jsx("span", { className: "relative text-3xl font-bold tabular-nums leading-none", style: { color }, children: display }), _jsx("span", { className: "relative text-xs text-[var(--wui-fg-muted)]", children: label })] }));
10
10
  }
11
11
  //# sourceMappingURL=StatCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.js","sourceRoot":"","sources":["../../../src/components/analytics/StatCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,oBAAoB,EAAE,SAAS,EAAiB;IAC/G,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS;QACjC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE;QACrB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,GAAG,KAAK,GAAG;YACb,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,gHAAgH,EAChH,SAAS,CACV,aAED,eACE,SAAS,EAAC,8CAA8C,EACxD,KAAK,EAAE,EAAE,KAAK,EAAE,YAEf,OAAO,GACH,EACP,eAAM,SAAS,EAAC,oCAAoC,YAAE,KAAK,GAAQ,IAC/D,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"StatCard.js","sourceRoot":"","sources":["../../../src/components/analytics/StatCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAarC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAiB;IAChI,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS;QACjC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE;QACrB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,GAAG,KAAK,GAAG;YACb,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO,CACL,eACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,0IAA0I,EAC1I,OAAO,IAAI,gBAAgB,EAC3B,MAAM,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,4BAA4B,EAC9E,SAAS,CACV,EACD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,KAAK,kBAAkB,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,aAGxF,cACE,SAAS,EAAC,8DAA8D,EACxE,KAAK,EAAE,EAAE,UAAU,EAAE,0BAA0B,KAAK,gBAAgB,EAAE,GACtE,EAEF,cACE,SAAS,EAAC,oEAAoE,EAC9E,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAC5B,EAEF,eACE,SAAS,EAAC,uDAAuD,EACjE,KAAK,EAAE,EAAE,KAAK,EAAE,YAEf,OAAO,GACH,EACP,eAAM,SAAS,EAAC,6CAA6C,YAAE,KAAK,GAAQ,IACxE,CACP,CAAC;AACJ,CAAC"}
@@ -1,8 +1,7 @@
1
- import type { AnalyticsData } from '../../hooks/use-analytics.js';
2
- type RecentFailure = AnalyticsData['recentFailures'][number];
3
1
  export interface TopErrorsPanelProps {
4
- failures: RecentFailure[];
2
+ since: string;
3
+ onSelectRun?: (executionId: string, workflowId: string) => void;
4
+ onLoad?: (hasErrors: boolean) => void;
5
5
  }
6
- export declare function TopErrorsPanel({ failures }: TopErrorsPanelProps): import("react").JSX.Element;
7
- export {};
6
+ export declare function TopErrorsPanel({ since, onSelectRun, onLoad }: TopErrorsPanelProps): import("react").JSX.Element;
8
7
  //# sourceMappingURL=TopErrorsPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TopErrorsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/TopErrorsPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,KAAK,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAqB7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,+BAoG/D"}
1
+ {"version":3,"file":"TopErrorsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/TopErrorsPanel.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,mBAAmB,+BA+FjF"}
@@ -2,62 +2,32 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { useWorkflowClient } from '../../hooks/use-workflow-client.js';
4
4
  import { LoadingSpinner } from '../shared/LoadingSpinner.js';
5
- function parseFailedStepError(data) {
6
- if (!data)
7
- return undefined;
8
- try {
9
- return JSON.parse(data).error;
10
- }
11
- catch {
12
- return undefined;
13
- }
14
- }
15
5
  function truncate(str, max) {
16
6
  return str.length > max ? str.slice(0, max) + '…' : str;
17
7
  }
18
- export function TopErrorsPanel({ failures }) {
8
+ export function TopErrorsPanel({ since, onSelectRun, onLoad }) {
19
9
  const client = useWorkflowClient();
20
10
  const [groups, setGroups] = useState([]);
21
11
  const [isLoading, setIsLoading] = useState(true);
12
+ const [expandedIndex, setExpandedIndex] = useState(null);
22
13
  useEffect(() => {
23
- if (failures.length === 0) {
24
- setGroups([]);
25
- setIsLoading(false);
26
- return;
27
- }
28
14
  let cancelled = false;
29
15
  setIsLoading(true);
30
- void Promise.all(failures.map((f) => client.executions.get(f.executionId).then((detail) => {
31
- const failedStep = detail.steps.find((s) => s.status === 'FAILED');
32
- const error = failedStep ? parseFailedStepError(failedStep.data) : undefined;
33
- return { workflowName: f.workflowName, error: error ?? 'Unknown error' };
34
- }).catch(() => ({ workflowName: f.workflowName, error: 'Unknown error' })))).then((results) => {
35
- if (cancelled)
36
- return;
37
- const map = new Map();
38
- for (const { workflowName, error } of results) {
39
- const existing = map.get(error);
40
- if (existing) {
41
- existing.count++;
42
- existing.workflows.add(workflowName);
43
- }
44
- else {
45
- map.set(error, { count: 1, workflows: new Set([workflowName]) });
46
- }
16
+ setExpandedIndex(null);
17
+ void client.analytics.topErrors({ since, limit: 5 }).then((res) => {
18
+ if (!cancelled) {
19
+ setGroups(res.topErrors);
20
+ setIsLoading(false);
21
+ onLoad?.(res.topErrors.length > 0);
22
+ }
23
+ }).catch(() => {
24
+ if (!cancelled) {
25
+ setIsLoading(false);
26
+ onLoad?.(false);
47
27
  }
48
- const sorted = Array.from(map.entries())
49
- .map(([message, { count, workflows }]) => ({
50
- message,
51
- count,
52
- workflows: Array.from(workflows),
53
- }))
54
- .sort((a, b) => b.count - a.count)
55
- .slice(0, 5);
56
- setGroups(sorted);
57
- setIsLoading(false);
58
28
  });
59
29
  return () => { cancelled = true; };
60
- }, [client, failures]);
30
+ }, [client, since]);
61
31
  if (isLoading) {
62
32
  return (_jsx("div", { className: "flex h-32 items-center justify-center", children: _jsx(LoadingSpinner, { size: "sm" }) }));
63
33
  }
@@ -65,6 +35,9 @@ export function TopErrorsPanel({ failures }) {
65
35
  return (_jsx("div", { className: "flex h-16 items-center justify-center text-xs text-[var(--wui-fg-muted)]", children: "No errors in this period" }));
66
36
  }
67
37
  const maxCount = groups[0]?.count ?? 1;
68
- return (_jsx("div", { className: "flex flex-col gap-2.5", children: groups.map((g, i) => (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] font-medium text-[var(--wui-fg)]", title: g.message, children: truncate(g.message, 60) }), _jsxs("span", { className: "shrink-0 rounded-full bg-[var(--wui-status-failed)]/15 px-2 py-0.5 text-[11px] font-semibold text-[var(--wui-status-failed)]", children: ["\u00D7", g.count] })] }), _jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-[var(--wui-bg-subtle)]", children: _jsx("div", { className: "h-full rounded-full bg-[var(--wui-status-failed)]/60", style: { width: `${Math.round((g.count / maxCount) * 100)}%` } }) }), _jsx("span", { className: "text-[10px] text-[var(--wui-fg-muted)]", children: g.workflows.join(', ') })] }, i))) }));
38
+ return (_jsx("div", { className: "flex flex-col gap-2", children: groups.map((g, i) => {
39
+ const isExpanded = expandedIndex === i;
40
+ return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("button", { type: "button", onClick: () => setExpandedIndex(isExpanded ? null : i), className: "flex w-full items-center gap-2 text-left", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] font-medium text-[var(--wui-fg)]", title: g.message, children: truncate(g.message, 60) }), _jsxs("span", { className: "shrink-0 rounded-full bg-[var(--wui-status-failed)]/15 px-2 py-0.5 text-[11px] font-semibold text-[var(--wui-status-failed)]", children: ["\u00D7", g.count] }), _jsx("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", className: `shrink-0 text-[var(--wui-fg-muted)] transition-transform ${isExpanded ? 'rotate-180' : ''}`, children: _jsx("polyline", { points: "6 9 12 15 18 9" }) })] }), _jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-[var(--wui-bg-subtle)]", children: _jsx("div", { className: "h-full rounded-full bg-[var(--wui-status-failed)]/60", style: { width: `${Math.round((g.count / maxCount) * 100)}%` } }) }), isExpanded && (_jsx("div", { className: "mt-1 flex max-h-[120px] flex-wrap gap-1 overflow-y-auto", children: g.runs.map((run) => (_jsx("button", { type: "button", onClick: () => onSelectRun?.(run.id, run.workflowId), className: "rounded-md border border-[var(--wui-border)] bg-[var(--wui-bg-subtle)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--wui-fg-muted)] transition-colors hover:border-[var(--wui-primary)] hover:text-[var(--wui-primary)]", children: run.id.slice(0, 8) }, run.id))) }))] }, i));
41
+ }) }));
69
42
  }
70
43
  //# sourceMappingURL=TopErrorsPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TopErrorsPanel.js","sourceRoot":"","sources":["../../../src/components/analytics/TopErrorsPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopErrorsPanel.js","sourceRoot":"","sources":["../../../src/components/analytics/TopErrorsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowsTable.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/WorkflowsTable.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,KAAK,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmCD,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAW,EAAE,SAAS,EAAE,EAAE,mBAAmB,+BAoGrG"}
1
+ {"version":3,"file":"WorkflowsTable.d.ts","sourceRoot":"","sources":["../../../src/components/analytics/WorkflowsTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,KAAK,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsCD,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAW,EAAE,SAAS,EAAE,EAAE,mBAAmB,+BAsIrG"}
@@ -1,5 +1,6 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { useMemo, useState } from 'react';
2
+ import { useMemo, useRef, useState } from 'react';
3
+ import { useVirtualizer } from '@tanstack/react-virtual';
3
4
  import { StatusBadge } from '../shared/StatusBadge.js';
4
5
  import { cn } from '../shared/cn.js';
5
6
  const STATUS_VARIANTS = {
@@ -32,10 +33,23 @@ function formatLastRun(date) {
32
33
  minute: '2-digit',
33
34
  });
34
35
  }
36
+ const ROW_HEIGHT = 36;
37
+ const VISIBLE_ROWS = 10;
35
38
  export function WorkflowsTable({ data, onSelectWorkflow, search = '', className }) {
36
39
  const statuses = useMemo(() => Array.from(new Set(data.map((r) => r.status))).sort(), [data]);
37
40
  const [activeTab, setActiveTab] = useState('ALL');
38
41
  const rows = (activeTab === 'ALL' ? data : data.filter((r) => r.status === activeTab)).filter((r) => r.name.toLowerCase().includes(search.trim().toLowerCase()));
42
+ const scrollRef = useRef(null);
43
+ const rowVirtualizer = useVirtualizer({
44
+ count: rows.length,
45
+ getScrollElement: () => scrollRef.current,
46
+ estimateSize: () => ROW_HEIGHT,
47
+ overscan: 5,
48
+ });
49
+ const virtualRows = rowVirtualizer.getVirtualItems();
50
+ const totalSize = rowVirtualizer.getTotalSize();
51
+ const paddingTop = virtualRows[0]?.start ?? 0;
52
+ const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows[virtualRows.length - 1]?.end ?? 0) : 0;
39
53
  return (_jsxs("div", { className: cn('flex flex-col gap-3', className), children: [_jsxs("div", { className: "flex items-center gap-1 border-b border-[var(--wui-border)]", children: [_jsxs("button", { onClick: () => setActiveTab('ALL'), className: cn('px-3 py-1.5 text-xs font-medium transition-colors', activeTab === 'ALL'
40
54
  ? 'border-b-2 border-[var(--wui-primary)] text-[var(--wui-fg)]'
41
55
  : 'text-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]'), children: ["All (", data.length, ")"] }), statuses.map((status) => {
@@ -43,12 +57,15 @@ export function WorkflowsTable({ data, onSelectWorkflow, search = '', className
43
57
  return (_jsxs("button", { onClick: () => setActiveTab(status), className: cn('px-3 py-1.5 text-xs font-medium transition-colors', activeTab === status
44
58
  ? 'border-b-2 border-[var(--wui-primary)] text-[var(--wui-fg)]'
45
59
  : 'text-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]'), children: [statusLabel(status), " (", count, ")"] }, status));
46
- })] }), rows.length === 0 ? (_jsx("div", { className: "flex h-24 items-center justify-center text-xs text-[var(--wui-fg-muted)]", children: "No workflows" })) : (_jsxs("table", { className: "w-full text-left text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-[10px] uppercase tracking-wider text-[var(--wui-fg-muted)]", children: [_jsx("th", { className: "py-1.5 font-medium", children: "Workflow" }), _jsx("th", { className: "py-1.5 font-medium", children: "Status" }), _jsx("th", { className: "py-1.5 font-medium", children: "Trigger" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Total Runs" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Failed" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Failure Rate" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Last Run" })] }) }), _jsx("tbody", { children: rows.map((row) => (_jsxs("tr", { onClick: () => onSelectWorkflow?.(row.workflowId), className: cn('border-t border-[var(--wui-border)]', onSelectWorkflow && 'cursor-pointer hover:bg-[var(--wui-bg-subtle)]'), children: [_jsx("td", { className: "py-2 font-medium text-[var(--wui-fg)]", children: row.name }), _jsx("td", { className: "py-2", children: _jsx(StatusBadge, { status: statusVariant(row.status), label: statusLabel(row.status) }) }), _jsx("td", { className: "py-2 text-[var(--wui-fg-muted)]", children: row.eventType }), _jsx("td", { className: "py-2 text-right tabular-nums text-[var(--wui-fg)]", children: row.totalRuns }), _jsx("td", { className: "py-2 text-right tabular-nums text-[var(--wui-fg)]", children: row.failedRuns }), _jsx("td", { className: "py-2 text-right tabular-nums", children: _jsxs("span", { style: {
47
- color: row.failureRate > 20
48
- ? 'var(--wui-status-failed)'
49
- : row.failureRate > 5
50
- ? 'var(--wui-status-paused)'
51
- : 'var(--wui-status-completed)',
52
- }, children: [row.failureRate, "%"] }) }), _jsx("td", { className: "py-2 text-right text-[var(--wui-fg-muted)]", children: formatLastRun(row.lastRunAt) })] }, row.workflowId))) })] }))] }));
60
+ })] }), rows.length === 0 ? (_jsx("div", { className: "flex h-24 items-center justify-center text-xs text-[var(--wui-fg-muted)]", children: "No workflows" })) : (_jsx("div", { ref: scrollRef, style: { height: VISIBLE_ROWS * ROW_HEIGHT, overflowY: 'auto' }, children: _jsxs("table", { className: "w-full text-left text-xs", style: { tableLayout: 'fixed', borderCollapse: 'collapse' }, children: [_jsxs("colgroup", { children: [_jsx("col", { style: { width: '30%' } }), _jsx("col", { style: { width: '14%' } }), _jsx("col", { style: { width: '14%' } }), _jsx("col", { style: { width: '10%' } }), _jsx("col", { style: { width: '9%' } }), _jsx("col", { style: { width: '12%' } }), _jsx("col", { style: { width: '11%' } })] }), _jsx("thead", { className: "sticky top-0 z-10 bg-[var(--wui-bg)]", children: _jsxs("tr", { className: "text-[10px] uppercase tracking-wider text-[var(--wui-fg-muted)]", children: [_jsx("th", { className: "py-1.5 font-medium", children: "Workflow" }), _jsx("th", { className: "py-1.5 font-medium", children: "Status" }), _jsx("th", { className: "py-1.5 font-medium", children: "Trigger" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Total Runs" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Failed" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Failure Rate" }), _jsx("th", { className: "py-1.5 font-medium text-right", children: "Last Run" })] }) }), _jsxs("tbody", { children: [paddingTop > 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 7, style: { height: paddingTop, padding: 0, border: 'none' } }) })), virtualRows.map((vRow) => {
61
+ const row = rows[vRow.index];
62
+ return (_jsxs("tr", { onClick: () => onSelectWorkflow?.(row.workflowId), style: { height: ROW_HEIGHT }, className: cn('border-t border-[var(--wui-border)]', onSelectWorkflow && 'cursor-pointer hover:bg-[var(--wui-bg-subtle)]'), children: [_jsx("td", { className: "overflow-hidden text-ellipsis whitespace-nowrap py-2 font-medium text-[var(--wui-fg)]", children: row.name }), _jsx("td", { className: "py-2", children: _jsx(StatusBadge, { status: statusVariant(row.status), label: statusLabel(row.status) }) }), _jsx("td", { className: "overflow-hidden text-ellipsis whitespace-nowrap py-2 text-[var(--wui-fg-muted)]", children: row.eventType }), _jsx("td", { className: "py-2 text-right tabular-nums text-[var(--wui-fg)]", children: row.totalRuns }), _jsx("td", { className: "py-2 text-right tabular-nums text-[var(--wui-fg)]", children: row.failedRuns }), _jsx("td", { className: "py-2 text-right tabular-nums", children: _jsxs("span", { style: {
63
+ color: row.failureRate > 20
64
+ ? 'var(--wui-status-failed)'
65
+ : row.failureRate > 5
66
+ ? 'var(--wui-status-paused)'
67
+ : 'var(--wui-status-completed)',
68
+ }, children: [row.failureRate, "%"] }) }), _jsx("td", { className: "py-2 text-right text-[var(--wui-fg-muted)]", children: formatLastRun(row.lastRunAt) })] }, row.workflowId));
69
+ }), paddingBottom > 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 7, style: { height: paddingBottom, padding: 0, border: 'none' } }) }))] })] }) }))] }));
53
70
  }
54
71
  //# sourceMappingURL=WorkflowsTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowsTable.js","sourceRoot":"","sources":["../../../src/components/analytics/WorkflowsTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowsTable.js","sourceRoot":"","sources":["../../../src/components/analytics/WorkflowsTable.tsx"],"names":[],"mappings":"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"}