@burdenoff/fluidgrids-fe-sdk 2026.730.2 → 2026.730.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExecutionDetailPage-MKSTHEIY.js +8 -0
- package/dist/{ExecutionDetailPage-H2KAEHLX.js.map → ExecutionDetailPage-MKSTHEIY.js.map} +1 -1
- package/dist/ExecutionsListPage-6ZJICORE.js +8 -0
- package/dist/{ExecutionsListPage-ONF5IUB4.js.map → ExecutionsListPage-6ZJICORE.js.map} +1 -1
- package/dist/{chunk-ECX7WKZ3.js → chunk-ES223BPI.js} +3 -3
- package/dist/chunk-ES223BPI.js.map +1 -0
- package/dist/{chunk-EPFS7HOM.js → chunk-PBGTVA6U.js} +14 -3
- package/dist/chunk-PBGTVA6U.js.map +1 -0
- package/dist/{chunk-GWO5RZQX.js → chunk-RBCW2KZY.js} +3 -3
- package/dist/{chunk-GWO5RZQX.js.map → chunk-RBCW2KZY.js.map} +1 -1
- package/dist/index.js +5 -5
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-H2KAEHLX.js +0 -8
- package/dist/ExecutionsListPage-ONF5IUB4.js +0 -8
- package/dist/chunk-ECX7WKZ3.js.map +0 -1
- package/dist/chunk-EPFS7HOM.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ExecutionDetailPage } from './chunk-PBGTVA6U.js';
|
|
2
|
+
import './chunk-ES223BPI.js';
|
|
3
|
+
import './chunk-UIY2HBWA.js';
|
|
4
|
+
import './chunk-3ZYUGTIT.js';
|
|
5
|
+
import './chunk-IU65EQOS.js';
|
|
6
|
+
import './chunk-5BDQNSP3.js';
|
|
7
|
+
//# sourceMappingURL=ExecutionDetailPage-MKSTHEIY.js.map
|
|
8
|
+
//# sourceMappingURL=ExecutionDetailPage-MKSTHEIY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-MKSTHEIY.js"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ExecutionsListPage } from './chunk-RBCW2KZY.js';
|
|
2
|
+
import './chunk-ES223BPI.js';
|
|
3
|
+
import './chunk-42PCKNPK.js';
|
|
4
|
+
import './chunk-IU65EQOS.js';
|
|
5
|
+
import './chunk-5BDQNSP3.js';
|
|
6
|
+
import './chunk-WWU2O2SR.js';
|
|
7
|
+
//# sourceMappingURL=ExecutionsListPage-6ZJICORE.js.map
|
|
8
|
+
//# sourceMappingURL=ExecutionsListPage-6ZJICORE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-6ZJICORE.js"}
|
|
@@ -1851,7 +1851,7 @@ function RunLogViewer({
|
|
|
1851
1851
|
{
|
|
1852
1852
|
onClick: onLoadMore,
|
|
1853
1853
|
className: "text-action-primary-text hover:underline",
|
|
1854
|
-
children: "Load
|
|
1854
|
+
children: "Load more lines"
|
|
1855
1855
|
}
|
|
1856
1856
|
)
|
|
1857
1857
|
] }),
|
|
@@ -2406,5 +2406,5 @@ function useAutoRefresh(refetchFn, enabled = true, interval = 5e3) {
|
|
|
2406
2406
|
}
|
|
2407
2407
|
|
|
2408
2408
|
export { ExecutionCards, ExecutionFilters, ExecutionStats, ExecutionStatusBadge, ExecutionTable, ExecutionTimeline, NodeTimeline, Pagination, RunLogViewer, useAutoRefresh, useExecution, useExecutionActions, useExecutionStats, useExecutionsStore, useExecutionsWithStore };
|
|
2409
|
-
//# sourceMappingURL=chunk-
|
|
2410
|
-
//# sourceMappingURL=chunk-
|
|
2409
|
+
//# sourceMappingURL=chunk-ES223BPI.js.map
|
|
2410
|
+
//# sourceMappingURL=chunk-ES223BPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/executions/types/index.ts","../src/modules/executions/components/ExecutionStatusBadge.tsx","../src/modules/executions/store/executionsStore.ts","../src/modules/executions/components/ExecutionFilters.tsx","../src/modules/executions/components/ExecutionStats.tsx","../src/modules/executions/components/ExecutionTable.tsx","../src/modules/executions/components/ExecutionCards.tsx","../src/modules/executions/components/ExecutionTimeline.tsx","../src/modules/executions/components/NodeTimeline.tsx","../src/modules/executions/components/RunLogViewer.tsx","../src/modules/executions/components/Pagination.tsx","../src/stubs/subscription-stubs.ts","../src/modules/executions/hooks/useExecutions.ts"],"names":["jsxs","jsx","Icon","formatDuration","formatDate","Button","useState","formatTime","useMemo","useCallback","useRef","useEffect"],"mappings":"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","file":"chunk-ES223BPI.js","sourcesContent":["/**\n * Workflow Execution Types\n * Comprehensive type definitions for workflow runs, executions, and node states\n */\n\n// ============================================================================\n// Enums & Status Types\n// ============================================================================\n\nexport type RunStatus =\n | \"PENDING\"\n | \"RUNNING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"CANCELLED\"\n | \"WAITING\"\n | \"TERMINATED\";\n\nexport type NodeStatus =\n | \"PENDING\"\n | \"RUNNING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"SKIPPED\"\n | \"DELAYED\"\n | \"CANCELLED\"\n | \"TIMEOUT\"\n | \"WAITING_SUBWORKFLOW\";\n\nexport type ErrorType =\n | \"TIMEOUT\"\n | \"TRANSIENT\"\n | \"DEPENDENCY\"\n | \"AUTHORIZATION\"\n | \"VALIDATION\"\n | \"PERMANENT\"\n | \"UNKNOWN\";\n\n/** Severity of a run log line. */\nexport type RunLogLevel = \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\";\n\n/**\n * Where a run log line came from.\n *\n * `SYSTEM` is the executor narrating the run; `STDOUT`/`STDERR` is output the\n * workflow author's own code produced (a Log node's message, `console.log` or\n * `print` in a Code node, or the node container's stdout). The viewer styles\n * the two differently so \"what the platform did\" reads apart from \"what my\n * workflow printed\".\n */\nexport type RunLogStream = \"SYSTEM\" | \"STDOUT\" | \"STDERR\";\n\n/** One line of a workflow run's execution log. */\nexport interface RunLogLine {\n id: string;\n runId: string;\n /** Null for run-level lines (run started, run completed, ...). */\n nodeId?: string | null;\n nodeStateId?: string | null;\n /** Retry attempt of the node execution that produced this line. */\n attempt: number;\n level: RunLogLevel;\n stream: RunLogStream;\n /** Coarse stage within the node execution (\"node-start\", \"node-stdout\", ...). */\n phase?: string | null;\n message: string;\n data?: unknown;\n truncated: boolean;\n timestamp: string;\n}\n\n// ============================================================================\n// Core Entity Types\n// ============================================================================\n\nexport interface WorkflowRun {\n id: string;\n workflowId: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n triggerData?: unknown;\n status: RunStatus;\n context?: unknown;\n triggeredById?: string;\n parentRunId?: string;\n createdAt: string;\n updatedAt: string;\n startedAt?: string;\n completedAt?: string;\n duration?: number;\n errorMessage?: string;\n errorType?: ErrorType;\n totalNodes?: number;\n completedNodes?: number;\n failedNodes?: number;\n skippedNodes?: number;\n progress: number;\n nodeStates?: NodeState[];\n workflow?: {\n id: string;\n name: string;\n description?: string;\n };\n}\n\nexport interface NodeState {\n id: string;\n runId: string;\n nodeId: string;\n nodeType: string;\n nodeVersion: string;\n status: NodeStatus;\n attemptCount: number;\n inputArgs?: unknown;\n output?: unknown;\n error?: string;\n errorType?: ErrorType;\n startTime?: string;\n endTime?: string;\n duration?: number;\n resumeTime?: string;\n childRunId?: string;\n instanceKey?: string;\n context?: unknown;\n metadata?: unknown;\n}\n\nexport interface ExecutionLog {\n id: string;\n runId: string;\n level: \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\";\n message: string;\n nodeId?: string;\n nodeType?: string;\n timestamp: string;\n metadata?: unknown;\n}\n\n// ============================================================================\n// Filter & Pagination Types\n// ============================================================================\n\nexport interface ExecutionsFilter {\n status: RunStatus | \"all\";\n workflowKey: string;\n dateRange: DateRange;\n search: string;\n}\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n preset:\n \"today\" | \"yesterday\" | \"7days\" | \"30days\" | \"90days\" | \"custom\" | \"all\";\n}\n\nexport interface ListExecutionsInput {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n workflowKey?: string;\n workspaceId?: string;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface ExecutionsListResponse {\n items: WorkflowRun[];\n total: number;\n hasMore: boolean;\n}\n\n// ============================================================================\n// UI State Types\n// ============================================================================\n\nexport type ExecutionsViewMode = \"table\" | \"timeline\" | \"cards\";\n\nexport interface ExecutionSelection {\n runIds: string[];\n allSelected: boolean;\n}\n\nexport interface ExecutionsPagination {\n page: number;\n pageSize: number;\n total: number;\n}\n\n// ============================================================================\n// Dashboard & Stats Types\n// ============================================================================\n\nexport interface ExecutionStats {\n total: number;\n running: number;\n completed: number;\n failed: number;\n cancelled: number;\n pending: number;\n waiting: number;\n successRate: number;\n avgDuration: number;\n}\n\nexport interface TimeSeriesDataPoint {\n timestamp: string;\n workflowRuns: number;\n successfulRuns: number;\n failedRuns: number;\n cancelledRuns: number;\n nodeExecutions: number;\n totalDuration?: number;\n averageDuration?: number;\n}\n\nexport interface NodeUsageStat {\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime: number;\n}\n\n// ============================================================================\n// Action Types\n// ============================================================================\n\nexport type ExecutionAction = \"cancel\" | \"pause\" | \"resume\" | \"retry\" | \"view\";\n\nexport interface BulkExecutionAction {\n action: ExecutionAction;\n runIds: string[];\n}\n\n// ============================================================================\n// Helper Types\n// ============================================================================\n\nexport interface StatusConfig {\n label: string;\n color: string;\n bgColor: string;\n borderColor: string;\n icon: string;\n}\n\nexport const RUN_STATUS_CONFIG: Record<RunStatus, StatusConfig> = {\n PENDING: {\n label: \"Pending\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-200 dark:border-gray-700\",\n icon: \"mdi:clock-outline\",\n },\n RUNNING: {\n label: \"Running\",\n color: \"text-blue-600 dark:text-blue-400\",\n bgColor: \"bg-blue-50 dark:bg-blue-900/20\",\n borderColor: \"border-blue-200 dark:border-blue-800\",\n icon: \"mdi:play-circle-outline\",\n },\n COMPLETED: {\n label: \"Completed\",\n color: \"text-green-600 dark:text-green-400\",\n bgColor: \"bg-green-50 dark:bg-green-900/20\",\n borderColor: \"border-green-200 dark:border-green-800\",\n icon: \"mdi:check-circle-outline\",\n },\n FAILED: {\n label: \"Failed\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:alert-circle-outline\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n color: \"text-orange-600 dark:text-orange-400\",\n bgColor: \"bg-orange-50 dark:bg-orange-900/20\",\n borderColor: \"border-orange-200 dark:border-orange-800\",\n icon: \"mdi:cancel\",\n },\n WAITING: {\n label: \"Waiting\",\n color: \"text-purple-600 dark:text-purple-400\",\n bgColor: \"bg-purple-50 dark:bg-purple-900/20\",\n borderColor: \"border-purple-200 dark:border-purple-800\",\n icon: \"mdi:timer-sand\",\n },\n TERMINATED: {\n label: \"Terminated\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-300 dark:border-gray-600\",\n icon: \"mdi:stop-circle-outline\",\n },\n};\n\nexport const NODE_STATUS_CONFIG: Record<NodeStatus, StatusConfig> = {\n PENDING: {\n label: \"Pending\",\n color: \"text-gray-600 dark:text-gray-400\",\n bgColor: \"bg-gray-50 dark:bg-gray-800\",\n borderColor: \"border-gray-200 dark:border-gray-700\",\n icon: \"mdi:clock-outline\",\n },\n RUNNING: {\n label: \"Running\",\n color: \"text-blue-600 dark:text-blue-400\",\n bgColor: \"bg-blue-50 dark:bg-blue-900/20\",\n borderColor: \"border-blue-200 dark:border-blue-800\",\n icon: \"mdi:play-circle-outline\",\n },\n COMPLETED: {\n label: \"Completed\",\n color: \"text-green-600 dark:text-green-400\",\n bgColor: \"bg-green-50 dark:bg-green-900/20\",\n borderColor: \"border-green-200 dark:border-green-800\",\n icon: \"mdi:check-circle-outline\",\n },\n FAILED: {\n label: \"Failed\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:alert-circle-outline\",\n },\n SKIPPED: {\n label: \"Skipped\",\n color: \"text-gray-500 dark:text-gray-500\",\n bgColor: \"bg-gray-100 dark:bg-gray-700\",\n borderColor: \"border-gray-200 dark:border-gray-600\",\n icon: \"mdi:skip-next\",\n },\n DELAYED: {\n label: \"Delayed\",\n color: \"text-yellow-600 dark:text-yellow-400\",\n bgColor: \"bg-yellow-50 dark:bg-yellow-900/20\",\n borderColor: \"border-yellow-200 dark:border-yellow-800\",\n icon: \"mdi:clock-alert-outline\",\n },\n CANCELLED: {\n label: \"Cancelled\",\n color: \"text-orange-600 dark:text-orange-400\",\n bgColor: \"bg-orange-50 dark:bg-orange-900/20\",\n borderColor: \"border-orange-200 dark:border-orange-800\",\n icon: \"mdi:cancel\",\n },\n TIMEOUT: {\n label: \"Timeout\",\n color: \"text-red-600 dark:text-red-400\",\n bgColor: \"bg-red-50 dark:bg-red-900/20\",\n borderColor: \"border-red-200 dark:border-red-800\",\n icon: \"mdi:timer-off-outline\",\n },\n WAITING_SUBWORKFLOW: {\n label: \"Waiting\",\n color: \"text-purple-600 dark:text-purple-400\",\n bgColor: \"bg-purple-50 dark:bg-purple-900/20\",\n borderColor: \"border-purple-200 dark:border-purple-800\",\n icon: \"mdi:subdirectory-arrow-right\",\n },\n};\n","import { Icon } from \"@iconify/react\";\nimport type { RunStatus, NodeStatus } from \"../types\";\nimport { RUN_STATUS_CONFIG, NODE_STATUS_CONFIG } from \"../types\";\n\ninterface ExecutionStatusBadgeProps {\n status: RunStatus;\n size?: \"sm\" | \"md\" | \"lg\";\n showIcon?: boolean;\n showLabel?: boolean;\n animated?: boolean;\n}\n\nexport function ExecutionStatusBadge({\n status,\n size = \"md\",\n showIcon = true,\n showLabel = true,\n animated = true,\n}: ExecutionStatusBadgeProps) {\n const config = RUN_STATUS_CONFIG[status];\n\n const sizeClasses = {\n sm: \"px-1.5 py-0.5 text-xs gap-1\",\n md: \"px-2 py-1 text-sm gap-1.5\",\n lg: \"px-3 py-1.5 text-base gap-2\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 14,\n lg: 16,\n };\n\n const isRunning = status === \"RUNNING\";\n\n return (\n <span\n className={`\n inline-flex items-center rounded-full font-medium\n ${config.bgColor} ${config.color} border ${config.borderColor}\n ${sizeClasses[size]}\n ${animated && isRunning ? \"animate-pulse\" : \"\"}\n `}\n >\n {showIcon && (\n <Icon\n icon={config.icon}\n width={iconSizes[size]}\n height={iconSizes[size]}\n className={animated && isRunning ? \"animate-spin\" : \"\"}\n />\n )}\n {showLabel && <span>{config.label}</span>}\n </span>\n );\n}\n\ninterface NodeStatusBadgeProps {\n status: NodeStatus;\n size?: \"sm\" | \"md\" | \"lg\";\n showIcon?: boolean;\n showLabel?: boolean;\n animated?: boolean;\n}\n\nexport function NodeStatusBadge({\n status,\n size = \"md\",\n showIcon = true,\n showLabel = true,\n animated = true,\n}: NodeStatusBadgeProps) {\n const config = NODE_STATUS_CONFIG[status];\n\n const sizeClasses = {\n sm: \"px-1.5 py-0.5 text-xs gap-1\",\n md: \"px-2 py-1 text-sm gap-1.5\",\n lg: \"px-3 py-1.5 text-base gap-2\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 14,\n lg: 16,\n };\n\n const isRunning = status === \"RUNNING\";\n\n return (\n <span\n className={`\n inline-flex items-center rounded-full font-medium\n ${config.bgColor} ${config.color} border ${config.borderColor}\n ${sizeClasses[size]}\n ${animated && isRunning ? \"animate-pulse\" : \"\"}\n `}\n >\n {showIcon && (\n <Icon\n icon={config.icon}\n width={iconSizes[size]}\n height={iconSizes[size]}\n className={animated && isRunning ? \"animate-spin\" : \"\"}\n />\n )}\n {showLabel && <span>{config.label}</span>}\n </span>\n );\n}\n","import { create } from \"zustand\";\nimport type {\n RunStatus,\n ExecutionsFilter,\n ExecutionsViewMode,\n ExecutionSelection,\n ExecutionsPagination,\n DateRange,\n WorkflowRun,\n} from \"../types\";\n\ninterface ExecutionsState {\n // View state\n viewMode: ExecutionsViewMode;\n selectedExecution: WorkflowRun | null;\n expandedRows: Set<string>;\n\n // Selection\n selection: ExecutionSelection;\n\n // Filters\n filter: ExecutionsFilter;\n\n // Pagination\n pagination: ExecutionsPagination;\n\n // UI state\n isFilterPanelOpen: boolean;\n isDetailsPanelOpen: boolean;\n autoRefresh: boolean;\n autoRefreshInterval: number;\n\n // Real-time\n liveRunIds: Set<string>;\n\n // Actions - View\n setViewMode: (mode: ExecutionsViewMode) => void;\n setSelectedExecution: (execution: WorkflowRun | null) => void;\n toggleRowExpanded: (runId: string) => void;\n\n // Actions - Selection\n setSelection: (selection: ExecutionSelection) => void;\n toggleSelectRun: (runId: string) => void;\n selectAll: (runIds: string[]) => void;\n clearSelection: () => void;\n\n // Actions - Filter\n updateFilter: (filter: Partial<ExecutionsFilter>) => void;\n setStatusFilter: (status: RunStatus | \"all\") => void;\n setWorkflowFilter: (workflowKey: string) => void;\n setDateRange: (dateRange: DateRange) => void;\n setSearchQuery: (search: string) => void;\n resetFilters: () => void;\n\n // Actions - Pagination\n setPage: (page: number) => void;\n setPageSize: (pageSize: number) => void;\n setTotal: (total: number) => void;\n\n // Actions - UI\n toggleFilterPanel: () => void;\n toggleDetailsPanel: () => void;\n setAutoRefresh: (enabled: boolean) => void;\n setAutoRefreshInterval: (interval: number) => void;\n\n // Actions - Real-time\n addLiveRun: (runId: string) => void;\n removeLiveRun: (runId: string) => void;\n clearLiveRuns: () => void;\n}\n\nconst defaultFilter: ExecutionsFilter = {\n status: \"all\",\n workflowKey: \"\",\n dateRange: {\n start: null,\n end: null,\n preset: \"all\",\n },\n search: \"\",\n};\n\nconst defaultPagination: ExecutionsPagination = {\n page: 1,\n pageSize: 25,\n total: 0,\n};\n\nexport const useExecutionsStore = create<ExecutionsState>((set) => ({\n // Initial state\n viewMode: \"table\",\n selectedExecution: null,\n expandedRows: new Set(),\n\n selection: {\n runIds: [],\n allSelected: false,\n },\n\n filter: defaultFilter,\n pagination: defaultPagination,\n\n isFilterPanelOpen: false,\n isDetailsPanelOpen: false,\n autoRefresh: true,\n autoRefreshInterval: 5000,\n\n liveRunIds: new Set(),\n\n // Actions - View\n setViewMode: (mode) => set({ viewMode: mode }),\n\n setSelectedExecution: (execution) =>\n set({\n selectedExecution: execution,\n isDetailsPanelOpen: execution !== null,\n }),\n\n toggleRowExpanded: (runId) =>\n set((state) => {\n const newExpanded = new Set(state.expandedRows);\n if (newExpanded.has(runId)) {\n newExpanded.delete(runId);\n } else {\n newExpanded.add(runId);\n }\n return { expandedRows: newExpanded };\n }),\n\n // Actions - Selection\n setSelection: (selection) => set({ selection }),\n\n toggleSelectRun: (runId) =>\n set((state) => {\n const isSelected = state.selection.runIds.includes(runId);\n const newRunIds = isSelected\n ? state.selection.runIds.filter((id) => id !== runId)\n : [...state.selection.runIds, runId];\n return {\n selection: {\n runIds: newRunIds,\n allSelected: false,\n },\n };\n }),\n\n selectAll: (runIds) =>\n set((state) => ({\n selection: {\n runIds: state.selection.allSelected ? [] : runIds,\n allSelected: !state.selection.allSelected,\n },\n })),\n\n clearSelection: () =>\n set({\n selection: {\n runIds: [],\n allSelected: false,\n },\n }),\n\n // Actions - Filter\n updateFilter: (filterUpdate) =>\n set((state) => ({\n filter: { ...state.filter, ...filterUpdate },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setStatusFilter: (status) =>\n set((state) => ({\n filter: { ...state.filter, status },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setWorkflowFilter: (workflowKey) =>\n set((state) => ({\n filter: { ...state.filter, workflowKey },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setDateRange: (dateRange) =>\n set((state) => ({\n filter: { ...state.filter, dateRange },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n setSearchQuery: (search) =>\n set((state) => ({\n filter: { ...state.filter, search },\n pagination: { ...state.pagination, page: 1 },\n })),\n\n resetFilters: () =>\n set({\n filter: defaultFilter,\n pagination: { ...defaultPagination },\n }),\n\n // Actions - Pagination\n setPage: (page) =>\n set((state) => ({\n pagination: { ...state.pagination, page },\n })),\n\n setPageSize: (pageSize) =>\n set((state) => ({\n pagination: { ...state.pagination, pageSize, page: 1 },\n })),\n\n setTotal: (total) =>\n set((state) => ({\n pagination: { ...state.pagination, total },\n })),\n\n // Actions - UI\n toggleFilterPanel: () =>\n set((state) => ({\n isFilterPanelOpen: !state.isFilterPanelOpen,\n })),\n\n toggleDetailsPanel: () =>\n set((state) => ({\n isDetailsPanelOpen: !state.isDetailsPanelOpen,\n })),\n\n setAutoRefresh: (enabled) => set({ autoRefresh: enabled }),\n\n setAutoRefreshInterval: (interval) => set({ autoRefreshInterval: interval }),\n\n // Actions - Real-time\n addLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.add(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n removeLiveRun: (runId) =>\n set((state) => {\n const newLiveRunIds = new Set(state.liveRunIds);\n newLiveRunIds.delete(runId);\n return { liveRunIds: newLiveRunIds };\n }),\n\n clearLiveRuns: () => set({ liveRunIds: new Set() }),\n}));\n","import { useState, useCallback } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport type { RunStatus, DateRange } from \"../types\";\n\nconst STATUS_OPTIONS: Array<{ value: RunStatus | \"all\"; label: string }> = [\n { value: \"all\", label: \"All Statuses\" },\n { value: \"RUNNING\", label: \"Running\" },\n { value: \"COMPLETED\", label: \"Completed\" },\n { value: \"FAILED\", label: \"Failed\" },\n { value: \"PENDING\", label: \"Pending\" },\n { value: \"CANCELLED\", label: \"Cancelled\" },\n { value: \"WAITING\", label: \"Waiting\" },\n { value: \"TERMINATED\", label: \"Terminated\" },\n];\n\nconst DATE_PRESETS: Array<{ value: DateRange[\"preset\"]; label: string }> = [\n { value: \"all\", label: \"All Time\" },\n { value: \"today\", label: \"Today\" },\n { value: \"yesterday\", label: \"Yesterday\" },\n { value: \"7days\", label: \"Last 7 Days\" },\n { value: \"30days\", label: \"Last 30 Days\" },\n { value: \"90days\", label: \"Last 90 Days\" },\n { value: \"custom\", label: \"Custom Range\" },\n];\n\ninterface ExecutionFiltersProps {\n workflows?: Array<{ workflowKey: string; name: string }>;\n onRefresh?: () => void;\n}\n\nexport function ExecutionFilters({\n workflows = [],\n onRefresh,\n}: ExecutionFiltersProps) {\n const {\n filter,\n setStatusFilter,\n setWorkflowFilter,\n setDateRange,\n setSearchQuery,\n resetFilters,\n autoRefresh,\n setAutoRefresh,\n } = useExecutionsStore();\n\n const [showCustomDate, setShowCustomDate] = useState(false);\n\n const handleDatePresetChange = useCallback(\n (preset: DateRange[\"preset\"]) => {\n const now = new Date();\n let start: Date | null = null;\n let end: Date | null = null;\n\n switch (preset) {\n case \"today\":\n start = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n end = now;\n break;\n case \"yesterday\":\n start = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - 1,\n );\n end = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n break;\n case \"7days\":\n start = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"30days\":\n start = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"90days\":\n start = new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000);\n end = now;\n break;\n case \"custom\":\n setShowCustomDate(true);\n return;\n default:\n start = null;\n end = null;\n }\n\n setShowCustomDate(false);\n setDateRange({ start, end, preset });\n },\n [setDateRange],\n );\n\n const activeFiltersCount = [\n filter.status !== \"all\",\n filter.workflowKey !== \"\",\n filter.dateRange.preset !== \"all\",\n filter.search !== \"\",\n ].filter(Boolean).length;\n\n return (\n <div className=\"space-y-4\">\n {/* Search and Quick Filters Row */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n {/* Search */}\n <div className=\"relative flex-1\">\n <Icon\n icon=\"mdi:magnify\"\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary\"\n width={18}\n />\n <input\n type=\"text\"\n placeholder=\"Search by workflow name or run ID...\"\n value={filter.search}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full pl-[3.25rem] pr-4 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-action-primary-bg focus:border-transparent\"\n />\n {filter.search && (\n <button\n onClick={() => setSearchQuery(\"\")}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n <Icon icon=\"mdi:close\" width={18} />\n </button>\n )}\n </div>\n\n {/* Status Filter */}\n <select\n value={filter.status}\n onChange={(e) => setStatusFilter(e.target.value as RunStatus | \"all\")}\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n >\n {STATUS_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n {/* Workflow Filter */}\n {workflows.length > 0 && (\n <select\n value={filter.workflowKey}\n onChange={(e) => setWorkflowFilter(e.target.value)}\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg max-w-[200px]\"\n >\n <option value=\"\">All Workflows</option>\n {workflows.map((wf) => (\n <option key={wf.workflowKey} value={wf.workflowKey}>\n {wf.name}\n </option>\n ))}\n </select>\n )}\n\n {/* Date Range */}\n <select\n value={filter.dateRange.preset}\n onChange={(e) =>\n handleDatePresetChange(e.target.value as DateRange[\"preset\"])\n }\n className=\"px-3 py-2 bg-background-secondary border border-border-secondary rounded-lg text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n >\n {DATE_PRESETS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Custom Date Range Inputs */}\n {showCustomDate && (\n <div className=\"flex flex-wrap gap-3 items-center p-3 bg-background-secondary rounded-lg border border-border-secondary\">\n <label className=\"text-sm text-text-secondary\">From:</label>\n <input\n type=\"datetime-local\"\n value={filter.dateRange.start?.toISOString().slice(0, 16) ?? \"\"}\n onChange={(e) =>\n setDateRange({\n ...filter.dateRange,\n start: e.target.value ? new Date(e.target.value) : null,\n preset: \"custom\",\n })\n }\n className=\"px-3 py-1.5 bg-background-primary border border-border-secondary rounded text-text-primary text-sm\"\n />\n <label className=\"text-sm text-text-secondary\">To:</label>\n <input\n type=\"datetime-local\"\n value={filter.dateRange.end?.toISOString().slice(0, 16) ?? \"\"}\n onChange={(e) =>\n setDateRange({\n ...filter.dateRange,\n end: e.target.value ? new Date(e.target.value) : null,\n preset: \"custom\",\n })\n }\n className=\"px-3 py-1.5 bg-background-primary border border-border-secondary rounded text-text-primary text-sm\"\n />\n <button\n onClick={() => setShowCustomDate(false)}\n className=\"text-text-secondary hover:text-text-primary\"\n >\n <Icon icon=\"mdi:close\" width={18} />\n </button>\n </div>\n )}\n\n {/* Actions Row */}\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {/* Auto-refresh Toggle */}\n <label className=\"inline-flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={autoRefresh}\n onChange={(e) => setAutoRefresh(e.target.checked)}\n className=\"w-4 h-4 rounded border-border-secondary text-action-primary-bg focus:ring-action-primary-bg\"\n />\n <span className=\"text-sm text-text-secondary\">Auto-refresh</span>\n </label>\n\n {/* Refresh Button */}\n {onRefresh && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRefresh}\n className=\"gap-1.5\"\n >\n <Icon icon=\"mdi:refresh\" width={16} />\n Refresh\n </Button>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n {/* Active Filters Count */}\n {activeFiltersCount > 0 && (\n <span className=\"text-sm text-text-secondary\">\n {activeFiltersCount} filter{activeFiltersCount > 1 ? \"s\" : \"\"}{\" \"}\n active\n </span>\n )}\n\n {/* Reset Filters */}\n {activeFiltersCount > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={resetFilters}\n className=\"gap-1.5\"\n >\n <Icon icon=\"mdi:filter-remove\" width={16} />\n Clear Filters\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { Icon } from \"@iconify/react\";\nimport type { RunStatus } from \"../types\";\n\ninterface StatCardProps {\n label: string;\n value: number | string;\n icon: string;\n color: string;\n trend?: {\n value: number;\n isPositive: boolean;\n };\n onClick?: () => void;\n}\n\nfunction StatCard({\n label,\n value,\n icon,\n color,\n trend,\n onClick,\n}: StatCardProps) {\n return (\n <button\n onClick={onClick}\n disabled={!onClick}\n className={`\n flex flex-col p-4 bg-background-secondary rounded-lg border border-border-secondary\n hover:border-border-primary transition-colors\n ${onClick ? \"cursor-pointer\" : \"cursor-default\"}\n text-left w-full\n `}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <Icon icon={icon} className={color} width={24} />\n {trend && (\n <span\n className={`text-xs font-medium ${\n trend.isPositive\n ? \"text-[var(--color-status-success-text)]\"\n : \"text-[var(--color-status-error-text)]\"\n }`}\n >\n {trend.isPositive ? \"+\" : \"-\"}\n {Math.abs(trend.value)}%\n </span>\n )}\n </div>\n <div className=\"text-2xl font-bold text-text-primary\">{value}</div>\n <div className=\"text-sm text-text-secondary mt-1\">{label}</div>\n </button>\n );\n}\n\ninterface ExecutionStatsProps {\n stats: {\n total: number;\n running: number;\n completed: number;\n failed: number;\n cancelled: number;\n pending: number;\n waiting: number;\n successRate: number;\n avgDuration: number;\n } | null;\n loading?: boolean;\n onFilterByStatus?: (status: RunStatus | \"all\") => void;\n}\n\nexport function ExecutionStats({\n stats,\n loading,\n onFilterByStatus,\n}: ExecutionStatsProps) {\n if (loading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 lg:grid-cols-6 gap-4\">\n {[...Array(6)].map((_, i) => (\n <div\n key={i}\n className=\"h-24 bg-background-secondary rounded-lg border border-border-secondary animate-pulse\"\n />\n ))}\n </div>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${Math.round(seconds)}s`;\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`;\n return `${Math.round(seconds / 3600)}h`;\n };\n\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-4\">\n <StatCard\n label=\"Total Runs\"\n value={stats.total.toLocaleString()}\n icon=\"mdi:play-box-multiple\"\n color=\"text-text-primary\"\n onClick={() => onFilterByStatus?.(\"all\")}\n />\n <StatCard\n label=\"Running\"\n value={stats.running}\n icon=\"mdi:play-circle\"\n color=\"text-[var(--color-status-info-text)]\"\n onClick={() => onFilterByStatus?.(\"RUNNING\")}\n />\n <StatCard\n label=\"Completed\"\n value={stats.completed.toLocaleString()}\n icon=\"mdi:check-circle\"\n color=\"text-[var(--color-status-success-text)]\"\n onClick={() => onFilterByStatus?.(\"COMPLETED\")}\n />\n <StatCard\n label=\"Failed\"\n value={stats.failed}\n icon=\"mdi:alert-circle\"\n color=\"text-[var(--color-status-error-text)]\"\n onClick={() => onFilterByStatus?.(\"FAILED\")}\n />\n <StatCard\n label=\"Success Rate\"\n value={`${(stats.successRate ?? 0).toFixed(1)}%`}\n icon=\"mdi:percent\"\n color=\"text-accent\"\n />\n <StatCard\n label=\"Avg Duration\"\n value={formatDuration(stats.avgDuration ?? 0)}\n icon=\"mdi:timer\"\n color=\"text-[var(--color-status-warning-text)]\"\n />\n </div>\n );\n}\n\ninterface ExecutionMiniStatsProps {\n running: number;\n completed: number;\n failed: number;\n}\n\nexport function ExecutionMiniStats({\n running,\n completed,\n failed,\n}: ExecutionMiniStatsProps) {\n return (\n <div className=\"flex items-center gap-4 text-sm\">\n {running > 0 && (\n <span className=\"flex items-center gap-1 text-[var(--color-status-info-text)]\">\n <Icon icon=\"mdi:play-circle\" width={14} className=\"animate-pulse\" />\n {running} running\n </span>\n )}\n <span className=\"flex items-center gap-1 text-[var(--color-status-success-text)]\">\n <Icon icon=\"mdi:check-circle\" width={14} />\n {completed}\n </span>\n {failed > 0 && (\n <span className=\"flex items-center gap-1 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={14} />\n {failed}\n </span>\n )}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport type { WorkflowRun } from \"../types\";\n\ninterface ExecutionTableProps {\n executions: WorkflowRun[];\n loading?: boolean;\n onRowClick?: (execution: WorkflowRun) => void;\n onAction?: (\n action: \"cancel\" | \"pause\" | \"resume\" | \"retry\",\n execution: WorkflowRun,\n ) => void;\n}\n\nexport function ExecutionTable({\n executions,\n loading,\n onRowClick,\n onAction,\n}: ExecutionTableProps) {\n const navigate = useNavigate();\n const {\n selection,\n toggleSelectRun,\n selectAll,\n expandedRows,\n toggleRowExpanded,\n } = useExecutionsStore();\n\n const allRunIds = useMemo(() => executions.map((e) => e.id), [executions]);\n\n const formatDuration = (ms?: number): string => {\n if (!ms) return \"-\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000)\n return `${Math.round(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n return `${Math.round(ms / 3600000)}h ${Math.round((ms % 3600000) / 60000)}m`;\n };\n\n const formatDate = (dateStr?: string): string => {\n if (!dateStr) return \"-\";\n const date = new Date(dateStr);\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60000) return \"Just now\";\n // Less than 1 hour\n if (diff < 3600000) return `${Math.round(diff / 60000)}m ago`;\n // Less than 24 hours\n if (diff < 86400000) return `${Math.round(diff / 3600000)}h ago`;\n // Less than 7 days\n if (diff < 604800000) return `${Math.round(diff / 86400000)}d ago`;\n\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n };\n\n const getRowActions = (execution: WorkflowRun) => {\n const actions: Array<{\n icon: string;\n label: string;\n action: \"cancel\" | \"pause\" | \"resume\" | \"retry\";\n disabled?: boolean;\n }> = [];\n\n switch (execution.status) {\n case \"RUNNING\":\n actions.push({ icon: \"mdi:pause\", label: \"Pause\", action: \"pause\" });\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n case \"WAITING\":\n actions.push({ icon: \"mdi:play\", label: \"Resume\", action: \"resume\" });\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n case \"FAILED\":\n actions.push({ icon: \"mdi:refresh\", label: \"Retry\", action: \"retry\" });\n break;\n case \"PENDING\":\n actions.push({ icon: \"mdi:stop\", label: \"Cancel\", action: \"cancel\" });\n break;\n }\n\n return actions;\n };\n\n if (loading && executions.length === 0) {\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[800px]\">\n <thead className=\"bg-background-tertiary border-b border-border-secondary\">\n <tr>\n <th className=\"w-10 px-4 py-3\"></th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Workflow\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Run ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Started\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Duration\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase\">\n Progress\n </th>\n <th className=\"px-4 py-3\"></th>\n </tr>\n </thead>\n <tbody>\n {[...Array(5)].map((_, i) => (\n <tr key={i} className=\"border-b border-border-secondary\">\n <td colSpan={8} className=\"px-4 py-4\">\n <div className=\"h-8 bg-background-tertiary rounded animate-pulse\" />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary p-12 text-center\">\n <Icon\n icon=\"mdi:play-box-outline\"\n className=\"mx-auto text-text-secondary mb-4\"\n width={48}\n />\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">\n No executions found\n </h3>\n <p className=\"text-text-secondary mb-4\">\n There are no workflow executions matching your filters.\n </p>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n View Workflows\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"bg-background-secondary rounded-lg border border-border-secondary overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full min-w-[800px]\">\n <thead className=\"bg-background-tertiary border-b border-border-secondary\">\n <tr>\n <th className=\"w-10 px-4 py-3\">\n <input\n type=\"checkbox\"\n checked={selection.allSelected}\n onChange={() => selectAll(allRunIds)}\n className=\"w-4 h-4 rounded border-border-secondary\"\n />\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Workflow\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Run ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Started\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Duration\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Progress\n </th>\n <th className=\"px-4 py-3 w-32\"></th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border-secondary\">\n {executions.map((execution) => {\n const isSelected = selection.runIds.includes(execution.id);\n const isExpanded = expandedRows.has(execution.id);\n const actions = getRowActions(execution);\n\n return (\n <>\n <tr\n key={execution.id}\n className={`\n hover:bg-background-tertiary/50 cursor-pointer transition-colors\n ${isSelected ? \"bg-action-primary-bg/10\" : \"\"}\n `}\n onClick={() => onRowClick?.(execution)}\n >\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggleSelectRun(execution.id)}\n className=\"w-4 h-4 rounded border-border-secondary\"\n />\n </td>\n <td className=\"px-4 py-3\">\n <ExecutionStatusBadge\n status={execution.status}\n size=\"sm\"\n />\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-text-primary\">\n {execution.workflow?.name || execution.workflowKey}\n </span>\n <span className=\"text-xs text-text-secondary\">\n v{execution.version}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm font-mono text-text-secondary\">\n {execution.id.slice(0, 8)}...\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm text-text-secondary\">\n {formatDate(execution.startedAt || execution.createdAt)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm text-text-secondary\">\n {formatDuration(execution.duration)}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-background-tertiary rounded-full overflow-hidden max-w-[100px]\">\n <div\n className={`h-full transition-all ${\n execution.status === \"FAILED\"\n ? \"bg-[var(--color-status-error-bg)]\"\n : execution.status === \"COMPLETED\"\n ? \"bg-[var(--color-status-success-bg)]\"\n : \"bg-[var(--color-status-info-bg)]\"\n }`}\n style={{ width: `${execution.progress}%` }}\n />\n </div>\n <span className=\"text-xs text-text-secondary min-w-[45px]\">\n {execution.completedNodes ?? 0}/\n {execution.totalNodes ?? 0}\n </span>\n </div>\n </td>\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-1\">\n {/* Expand/Collapse */}\n <button\n onClick={() => toggleRowExpanded(execution.id)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n >\n <Icon\n icon={\n isExpanded ? \"mdi:chevron-up\" : \"mdi:chevron-down\"\n }\n width={18}\n />\n </button>\n\n {/* Quick Actions */}\n {actions.slice(0, 2).map((action) => (\n <button\n key={action.action}\n onClick={() => onAction?.(action.action, execution)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n title={action.label}\n >\n <Icon icon={action.icon} width={18} />\n </button>\n ))}\n\n {/* View Details */}\n <button\n onClick={() => navigate(`../runs/${execution.id}`)}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary\"\n title=\"View Details\"\n >\n <Icon icon=\"mdi:arrow-right\" width={18} />\n </button>\n </div>\n </td>\n </tr>\n\n {/* Expanded Row Content */}\n {isExpanded && (\n <tr key={`${execution.id}-expanded`}>\n <td\n colSpan={8}\n className=\"px-4 py-4 bg-background-tertiary/30\"\n >\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n {/* Trigger Info */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Trigger Node\n </div>\n <div className=\"text-sm text-text-primary font-medium\">\n {execution.triggerNodeId}\n </div>\n </div>\n\n {/* Node Stats */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Node Stats\n </div>\n <div className=\"flex gap-2 text-sm\">\n <span className=\"text-[var(--color-status-success-text)]\">\n {execution.completedNodes ?? 0} completed\n </span>\n {(execution.failedNodes ?? 0) > 0 && (\n <span className=\"text-[var(--color-status-error-text)]\">\n {execution.failedNodes} failed\n </span>\n )}\n {(execution.skippedNodes ?? 0) > 0 && (\n <span className=\"text-tertiary\">\n {execution.skippedNodes} skipped\n </span>\n )}\n </div>\n </div>\n\n {/* Error Message */}\n {execution.errorMessage && (\n <div className=\"col-span-2\">\n <div className=\"text-xs text-text-secondary mb-1\">\n Error\n </div>\n <div className=\"text-sm text-[var(--color-status-error-text)] bg-[var(--color-status-error-bg-subtle)] p-2 rounded\">\n {execution.errorMessage}\n </div>\n </div>\n )}\n\n {/* Full Run ID */}\n <div>\n <div className=\"text-xs text-text-secondary mb-1\">\n Full Run ID\n </div>\n <div className=\"text-sm font-mono text-text-secondary break-all\">\n {execution.id}\n </div>\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Mobile scroll hint */}\n <div className=\"sm:hidden px-4 py-2 bg-background-tertiary border-t border-border-secondary text-xs text-text-secondary text-center\">\n Swipe to see more columns\n </div>\n </div>\n );\n}\n","/**\n * ExecutionCards — Card-grid view for workflow executions.\n * Displays each execution as a card with status badge, timing info, and progress bar.\n * Used when viewMode is 'cards' in ExecutionsListPage.\n */\nimport { Icon } from \"@iconify/react\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { RUN_STATUS_CONFIG } from \"../types\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\n\ninterface ExecutionCardsProps {\n executions: WorkflowRun[];\n loading: boolean;\n onCardClick: (execution: WorkflowRun) => void;\n onAction: (action: ExecutionAction, execution: WorkflowRun) => void;\n}\n\nfunction formatDuration(ms?: number): string {\n if (!ms) return \"--\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const mins = Math.floor(ms / 60000);\n const secs = Math.floor((ms % 60000) / 1000);\n return `${mins}m ${secs}s`;\n}\n\nfunction formatRelativeTime(dateStr?: string): string {\n if (!dateStr) return \"--\";\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return \"just now\";\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n}\n\nfunction getProgressColor(status: RunStatus): string {\n switch (status) {\n case \"COMPLETED\":\n return \"bg-green-500\";\n case \"FAILED\":\n case \"TERMINATED\":\n return \"bg-red-500\";\n case \"RUNNING\":\n return \"bg-blue-500\";\n case \"CANCELLED\":\n return \"bg-orange-500\";\n default:\n return \"bg-gray-400\";\n }\n}\n\nexport function ExecutionCards({\n executions,\n loading,\n onCardClick,\n onAction,\n}: ExecutionCardsProps) {\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div\n key={i}\n className=\"rounded-lg border border-border-secondary bg-background-secondary p-4 animate-pulse\"\n >\n <div className=\"flex justify-between mb-3\">\n <div className=\"h-4 bg-background-tertiary rounded w-32\" />\n <div className=\"h-5 bg-background-tertiary rounded-full w-20\" />\n </div>\n <div className=\"h-3 bg-background-tertiary rounded w-48 mb-2\" />\n <div className=\"h-2 bg-background-tertiary rounded w-full mb-3\" />\n <div className=\"flex justify-between\">\n <div className=\"h-3 bg-background-tertiary rounded w-16\" />\n <div className=\"h-3 bg-background-tertiary rounded w-24\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-text-secondary\">\n <Icon\n icon=\"mdi:play-circle-outline\"\n width={48}\n className=\"mb-3 opacity-40\"\n />\n <p className=\"text-lg font-medium\">No executions found</p>\n <p className=\"text-sm mt-1\">Run a workflow to see results here</p>\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {executions.map((execution) => {\n const config = RUN_STATUS_CONFIG[execution.status];\n const canCancel =\n execution.status === \"RUNNING\" || execution.status === \"PENDING\";\n const canPause = execution.status === \"RUNNING\";\n\n return (\n <div\n key={execution.id}\n onClick={() => onCardClick(execution)}\n className={`\n rounded-lg border bg-background-secondary p-4 cursor-pointer\n transition-all duration-200 hover:shadow-md hover:border-border-primary\n ${config.borderColor}\n `}\n >\n {/* Header: workflow key + status */}\n <div className=\"flex items-start justify-between mb-3\">\n <div className=\"min-w-0 flex-1 mr-2\">\n <p className=\"text-sm font-semibold text-text-primary truncate\">\n {execution.workflowKey}\n </p>\n <p className=\"text-xs text-text-tertiary mt-0.5\">\n v{execution.version}\n </p>\n </div>\n <ExecutionStatusBadge status={execution.status} size=\"sm\" />\n </div>\n\n {/* Progress bar */}\n <div className=\"mb-3\">\n <div className=\"flex justify-between text-xs text-text-tertiary mb-1\">\n <span>Progress</span>\n <span>{Math.round(execution.progress)}%</span>\n </div>\n <div className=\"h-1.5 bg-background-tertiary rounded-full overflow-hidden\">\n <div\n className={`h-full rounded-full transition-all duration-500 ${getProgressColor(execution.status)}`}\n style={{ width: `${Math.min(execution.progress, 100)}%` }}\n />\n </div>\n </div>\n\n {/* Node stats */}\n {(execution.totalNodes ?? 0) > 0 && (\n <div className=\"flex gap-3 text-xs text-text-secondary mb-3\">\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:check-circle\"\n width={12}\n className=\"text-green-500\"\n />\n {execution.completedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:alert-circle\"\n width={12}\n className=\"text-red-500\"\n />\n {execution.failedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon\n icon=\"mdi:skip-next\"\n width={12}\n className=\"text-gray-400\"\n />\n {execution.skippedNodes ?? 0}\n </span>\n <span className=\"flex items-center gap-1 ml-auto\">\n <Icon icon=\"mdi:sigma\" width={12} />\n {execution.totalNodes}\n </span>\n </div>\n )}\n\n {/* Footer: duration + time */}\n <div className=\"flex items-center justify-between text-xs text-text-tertiary pt-2 border-t border-border-secondary\">\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:timer-outline\" width={12} />\n {formatDuration(execution.duration ?? undefined)}\n </span>\n <span>\n {formatRelativeTime(execution.startedAt ?? execution.createdAt)}\n </span>\n </div>\n\n {/* Quick actions on hover */}\n {(canCancel || canPause) && (\n <div className=\"flex gap-1 mt-2 pt-2 border-t border-border-secondary\">\n {canPause && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"pause\", execution);\n }}\n className=\"flex items-center gap-1 text-xs px-2 py-1 rounded bg-background-tertiary hover:bg-yellow-50 dark:hover:bg-yellow-900/20 text-text-secondary hover:text-yellow-600 transition-colors\"\n >\n <Icon icon=\"mdi:pause\" width={12} /> Pause\n </button>\n )}\n {canCancel && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"cancel\", execution);\n }}\n className=\"flex items-center gap-1 text-xs px-2 py-1 rounded bg-background-tertiary hover:bg-red-50 dark:hover:bg-red-900/20 text-text-secondary hover:text-red-600 transition-colors\"\n >\n <Icon icon=\"mdi:stop\" width={12} /> Cancel\n </button>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * ExecutionTimeline — Chronological timeline view for workflow executions.\n * Displays executions as a vertical timeline with status indicators and duration bars.\n * Used when viewMode is 'timeline' in ExecutionsListPage.\n */\nimport { Icon } from \"@iconify/react\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { RUN_STATUS_CONFIG } from \"../types\";\nimport { ExecutionStatusBadge } from \"./ExecutionStatusBadge\";\n\ninterface ExecutionTimelineProps {\n executions: WorkflowRun[];\n loading: boolean;\n onItemClick: (execution: WorkflowRun) => void;\n onAction: (action: ExecutionAction, execution: WorkflowRun) => void;\n}\n\nfunction formatTime(dateStr?: string): string {\n if (!dateStr) return \"--\";\n return new Date(dateStr).toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n}\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return \"\";\n return new Date(dateStr).toLocaleDateString(undefined, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatDuration(ms?: number): string {\n if (!ms) return \"--\";\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const mins = Math.floor(ms / 60000);\n const secs = Math.floor((ms % 60000) / 1000);\n return `${mins}m ${secs}s`;\n}\n\nfunction getStatusDotColor(status: RunStatus): string {\n switch (status) {\n case \"COMPLETED\":\n return \"bg-green-500\";\n case \"FAILED\":\n case \"TERMINATED\":\n return \"bg-red-500\";\n case \"RUNNING\":\n return \"bg-blue-500 animate-pulse\";\n case \"CANCELLED\":\n return \"bg-orange-500\";\n case \"WAITING\":\n return \"bg-purple-500\";\n case \"PENDING\":\n default:\n return \"bg-gray-400\";\n }\n}\n\n/** Group executions by date for timeline sections */\nfunction groupByDate(executions: WorkflowRun[]): Map<string, WorkflowRun[]> {\n const groups = new Map<string, WorkflowRun[]>();\n for (const exec of executions) {\n const dateKey = formatDate(exec.startedAt ?? exec.createdAt);\n if (!groups.has(dateKey)) {\n groups.set(dateKey, []);\n }\n groups.get(dateKey)!.push(exec);\n }\n return groups;\n}\n\nexport function ExecutionTimeline({\n executions,\n loading,\n onItemClick,\n onAction,\n}: ExecutionTimelineProps) {\n if (loading) {\n return (\n <div className=\"space-y-6 pl-8\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-3 h-3 rounded-full bg-background-tertiary mt-1.5 shrink-0\" />\n <div className=\"flex-1\">\n <div className=\"h-4 bg-background-tertiary rounded w-48 mb-2\" />\n <div className=\"h-3 bg-background-tertiary rounded w-32 mb-1\" />\n <div className=\"h-3 bg-background-tertiary rounded w-24\" />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (executions.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-text-secondary\">\n <Icon icon=\"mdi:timeline\" width={48} className=\"mb-3 opacity-40\" />\n <p className=\"text-lg font-medium\">No executions found</p>\n <p className=\"text-sm mt-1\">Run a workflow to see the timeline</p>\n </div>\n );\n }\n\n const grouped = groupByDate(executions);\n\n return (\n <div className=\"space-y-8\">\n {Array.from(grouped.entries()).map(([dateLabel, dateExecutions]) => (\n <div key={dateLabel}>\n {/* Date header */}\n <div className=\"flex items-center gap-2 mb-4\">\n <Icon\n icon=\"mdi:calendar\"\n width={14}\n className=\"text-text-tertiary\"\n />\n <span className=\"text-xs font-semibold text-text-tertiary uppercase tracking-wider\">\n {dateLabel}\n </span>\n <div className=\"flex-1 h-px bg-border-secondary\" />\n <span className=\"text-xs text-text-tertiary\">\n {dateExecutions.length} runs\n </span>\n </div>\n\n {/* Timeline items */}\n <div className=\"relative ml-4\">\n {/* Vertical line */}\n <div className=\"absolute left-[5px] top-0 bottom-0 w-px bg-border-secondary\" />\n\n <div className=\"space-y-4\">\n {dateExecutions.map((execution, idx) => {\n const isLast = idx === dateExecutions.length - 1;\n const canCancel =\n execution.status === \"RUNNING\" ||\n execution.status === \"PENDING\";\n\n return (\n <div\n key={execution.id}\n onClick={() => onItemClick(execution)}\n className=\"relative flex gap-4 cursor-pointer group\"\n >\n {/* Timeline dot */}\n <div className=\"relative z-10 shrink-0 mt-1.5\">\n <div\n className={`w-[11px] h-[11px] rounded-full border-2 border-background-primary ${getStatusDotColor(execution.status)}`}\n />\n </div>\n\n {/* Content */}\n <div\n className={`\n flex-1 rounded-lg border border-border-secondary bg-background-secondary p-3\n transition-all duration-200 group-hover:shadow-sm group-hover:border-border-primary\n ${isLast ? \"\" : \"mb-0\"}\n `}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-text-primary truncate\">\n {execution.workflowKey}\n </span>\n <span className=\"text-xs text-text-tertiary\">\n v{execution.version}\n </span>\n </div>\n <div className=\"flex items-center gap-3 mt-1 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:clock-outline\" width={12} />\n {formatTime(\n execution.startedAt ?? execution.createdAt,\n )}\n </span>\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:timer-outline\" width={12} />\n {formatDuration(execution.duration ?? undefined)}\n </span>\n {(execution.totalNodes ?? 0) > 0 && (\n <span className=\"flex items-center gap-1\">\n <Icon icon=\"mdi:puzzle-outline\" width={12} />\n {execution.completedNodes ?? 0}/\n {execution.totalNodes} nodes\n </span>\n )}\n </div>\n {execution.errorMessage && (\n <p className=\"mt-1.5 text-xs text-red-500 dark:text-red-400 truncate max-w-sm\">\n {execution.errorMessage}\n </p>\n )}\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n <ExecutionStatusBadge\n status={execution.status}\n size=\"sm\"\n />\n {canCancel && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onAction(\"cancel\", execution);\n }}\n className=\"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-red-50 dark:hover:bg-red-900/20 text-text-tertiary hover:text-red-600 transition-all\"\n title=\"Cancel execution\"\n >\n <Icon icon=\"mdi:stop\" width={14} />\n </button>\n )}\n </div>\n </div>\n\n {/* Progress bar */}\n {execution.status === \"RUNNING\" && (\n <div className=\"mt-2\">\n <div className=\"h-1 bg-background-tertiary rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-blue-500 rounded-full transition-all duration-500 animate-pulse\"\n style={{\n width: `${Math.min(execution.progress, 100)}%`,\n }}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { NodeStatusBadge } from \"./ExecutionStatusBadge\";\nimport type { NodeState } from \"../types\";\n\ninterface NodeTimelineProps {\n nodeStates: NodeState[];\n loading?: boolean;\n onRetryNode?: (nodeId: string) => void;\n onViewChildRun?: (childRunId: string) => void;\n}\n\nexport function NodeTimeline({\n nodeStates,\n loading,\n onRetryNode,\n onViewChildRun,\n}: NodeTimelineProps) {\n const [expandedNodes, setExpandedNodes] = useState<Set<string>>(new Set());\n const [selectedTab, setSelectedTab] = useState<\"input\" | \"output\">(\"output\");\n\n const toggleNode = (nodeId: string) => {\n setExpandedNodes((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(nodeId)) {\n newSet.delete(nodeId);\n } else {\n newSet.add(nodeId);\n }\n return newSet;\n });\n };\n\n const formatDuration = (ms?: number): string => {\n if (!ms) return \"-\";\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n };\n\n const formatTime = (dateStr?: string): string => {\n if (!dateStr) return \"-\";\n const date = new Date(dateStr);\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n };\n\n // Helper function to safely format JSON data for display\n const formatJsonData = (data: NodeState[\"metadata\"]): string => {\n if (data === null || data === undefined) return \"No data\";\n try {\n return JSON.stringify(data, null, 2);\n } catch {\n return \"Unable to display data\";\n }\n };\n\n // Check if metadata has content\n const hasMetadata = (metadata: NodeState[\"metadata\"]): boolean => {\n if (!metadata || typeof metadata !== \"object\") return false;\n return (\n Object.keys(metadata as Record<string, NodeState[\"metadata\"]>).length > 0\n );\n };\n\n const sortedNodes: NodeState[] = [...nodeStates].sort((a, b) => {\n if (!a.startTime && !b.startTime) return 0;\n if (!a.startTime) return 1;\n if (!b.startTime) return -1;\n return new Date(a.startTime).getTime() - new Date(b.startTime).getTime();\n });\n\n if (loading) {\n return (\n <div className=\"space-y-4\">\n {[...Array(4)].map((_, i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-8 h-8 bg-background-tertiary rounded-full\" />\n <div className=\"flex-1 h-20 bg-background-tertiary rounded-lg\" />\n </div>\n ))}\n </div>\n );\n }\n\n if (nodeStates.length === 0) {\n return (\n <div className=\"text-center py-8 text-text-secondary\">\n <Icon icon=\"mdi:timeline-outline\" className=\"mx-auto mb-2\" width={32} />\n <p>No node executions yet</p>\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n {/* Timeline line */}\n <div className=\"absolute left-4 top-8 bottom-8 w-0.5 bg-border-secondary\" />\n\n <div className=\"space-y-4\">\n {sortedNodes.map((node: NodeState, index: number) => {\n const isExpanded = expandedNodes.has(node.id);\n const nodeError: string | undefined = node.error;\n const hasError = node.status === \"FAILED\" || Boolean(nodeError);\n const isRunning = node.status === \"RUNNING\";\n const isWaitingSubworkflow = node.status === \"WAITING_SUBWORKFLOW\";\n const hasChildRun = Boolean(node.childRunId);\n\n return (\n <div key={node.id} className=\"relative flex gap-4\">\n {/* Timeline dot */}\n <div\n className={`\n relative z-10 w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0\n ${\n node.status === \"COMPLETED\"\n ? \"bg-[var(--color-status-success-bg-subtle)] text-[var(--color-status-success-text)]\"\n : node.status === \"FAILED\"\n ? \"bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)]\"\n : node.status === \"RUNNING\"\n ? \"bg-[var(--color-status-info-bg-subtle)] text-[var(--color-status-info-text)]\"\n : node.status === \"SKIPPED\"\n ? \"bg-muted text-tertiary\"\n : \"bg-muted text-tertiary\"\n }\n `}\n >\n <span className=\"text-xs font-bold\">{index + 1}</span>\n {isRunning && (\n <span className=\"absolute inset-0 rounded-full border-2 border-[var(--color-status-info-text)] animate-ping\" />\n )}\n </div>\n\n {/* Node card */}\n <div\n className={`\n flex-1 rounded-lg border transition-all\n ${\n hasError\n ? \"bg-[var(--color-status-error-bg-subtle)] border-[var(--color-status-error-border)]\"\n : isRunning\n ? \"bg-[var(--color-status-info-bg-subtle)] border-[var(--color-status-info-border)]\"\n : \"bg-background-secondary border-border-secondary\"\n }\n `}\n >\n {/* Header */}\n <button\n onClick={() => toggleNode(node.id)}\n className=\"w-full px-4 py-3 flex items-center justify-between text-left\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"flex-shrink-0\">\n <NodeStatusBadge\n status={node.status}\n size=\"sm\"\n showLabel={false}\n />\n </div>\n <div className=\"min-w-0\">\n <div className=\"font-medium text-text-primary truncate\">\n {node.nodeId}\n </div>\n <div className=\"text-xs text-text-secondary\">\n {node.nodeType} v{node.nodeVersion}\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4 flex-shrink-0\">\n {/* Timing info */}\n <div className=\"text-right text-xs text-text-secondary hidden sm:block\">\n <div>{formatTime(node.startTime)}</div>\n <div>{formatDuration(node.duration)}</div>\n </div>\n\n {/* Sub-workflow indicator */}\n {hasChildRun && (\n <span className=\"px-2 py-0.5 text-xs bg-indigo-100 text-indigo-700 rounded flex items-center gap-1\">\n <Icon icon=\"mdi:sitemap\" width={12} />\n Sub-workflow\n </span>\n )}\n\n {/* Waiting for subworkflow indicator */}\n {isWaitingSubworkflow && (\n <span className=\"px-2 py-0.5 text-xs bg-purple-100 text-purple-700 rounded animate-pulse\">\n Waiting...\n </span>\n )}\n\n {/* Attempt count */}\n {node.attemptCount > 1 && (\n <span className=\"px-2 py-0.5 text-xs bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)] rounded\">\n Attempt {node.attemptCount}\n </span>\n )}\n\n {/* Expand icon */}\n <Icon\n icon={isExpanded ? \"mdi:chevron-up\" : \"mdi:chevron-down\"}\n className=\"text-text-secondary\"\n width={20}\n />\n </div>\n </button>\n\n {/* Expanded content */}\n {isExpanded && (\n <div className=\"px-4 pb-4 border-t border-border-secondary/50\">\n {/* Tabs for Input/Output */}\n <div className=\"flex gap-2 mt-3 mb-3\">\n <button\n onClick={() => setSelectedTab(\"output\")}\n className={`px-3 py-1.5 text-sm rounded ${\n selectedTab === \"output\"\n ? \"bg-action-primary-bg text-white\"\n : \"bg-background-tertiary text-text-secondary\"\n }`}\n >\n Output\n </button>\n <button\n onClick={() => setSelectedTab(\"input\")}\n className={`px-3 py-1.5 text-sm rounded ${\n selectedTab === \"input\"\n ? \"bg-action-primary-bg text-white\"\n : \"bg-background-tertiary text-text-secondary\"\n }`}\n >\n Input\n </button>\n </div>\n\n {/* Data display */}\n <div className=\"bg-background-primary rounded p-3 max-h-64 overflow-auto\">\n <pre className=\"text-xs text-text-primary whitespace-pre-wrap break-words font-mono\">\n {selectedTab === \"output\"\n ? formatJsonData(node.output)\n : formatJsonData(node.inputArgs)}\n </pre>\n </div>\n\n {/* Error display */}\n {node.error && (\n <div className=\"mt-3 p-3 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)] mb-1\">\n <Icon icon=\"mdi:alert-circle\" width={16} />\n <span className=\"font-medium text-sm\">Error</span>\n {node.errorType && (\n <span className=\"text-xs bg-[var(--color-status-error-bg)] px-2 py-0.5 rounded\">\n {node.errorType}\n </span>\n )}\n </div>\n <p className=\"text-sm text-[var(--color-status-error-text)]\">\n {node.error}\n </p>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"mt-3 flex justify-end gap-2\">\n {/* Sub-workflow drill-down */}\n {hasChildRun && onViewChildRun && (\n <button\n onClick={() => onViewChildRun(node.childRunId!)}\n className=\"px-3 py-1.5 text-sm bg-indigo-600 text-white rounded hover:bg-indigo-700 flex items-center gap-1.5\"\n >\n <Icon icon=\"mdi:sitemap\" width={16} />\n View Sub-Workflow Run\n </button>\n )}\n\n {node.status === \"FAILED\" && onRetryNode && (\n <button\n onClick={() => onRetryNode(node.nodeId)}\n className=\"px-3 py-1.5 text-sm bg-action-primary-bg text-white rounded hover:bg-action-primary-bg/90 flex items-center gap-1.5\"\n >\n <Icon icon=\"mdi:refresh\" width={16} />\n Retry Node\n </button>\n )}\n </div>\n\n {/* Metadata */}\n {hasMetadata(node.metadata) && (\n <details className=\"mt-3\">\n <summary className=\"text-xs text-text-secondary cursor-pointer hover:text-text-primary\">\n Metadata\n </summary>\n <pre className=\"mt-2 text-xs text-text-secondary bg-background-tertiary p-2 rounded overflow-auto max-h-32\">\n {formatJsonData(node.metadata)}\n </pre>\n </details>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * RunLogViewer — the run's execution log, shaped like a GitHub Actions job log.\n *\n * Lines are grouped by the node that produced them (a node is this platform's\n * equivalent of an Actions step). A node that finished cleanly is folded away;\n * whatever is running, whatever failed, and the run's own lines are open,\n * because those are what a reader came for. Run-level lines sit in their own\n * group at the top.\n *\n * Deliberately not virtualised: the server caps a run at 10,000 lines and\n * successful groups are folded by default, so the DOM stays small without\n * pulling in a windowing dependency that would fight the collapse behaviour.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\n\nimport type { NodeState, RunLogLevel, RunLogLine } from \"../types\";\n\ninterface RunLogViewerProps {\n runId: string;\n lines: RunLogLine[];\n /** Node states, used to label groups and show each node's status. */\n nodeStates: NodeState[];\n loading: boolean;\n error: Error | null;\n hasMore: boolean;\n limitReached: boolean;\n /** True while a live subscription is delivering, as opposed to polling. */\n streaming: boolean;\n /** True while the run can still produce more lines. */\n active: boolean;\n minLevel: RunLogLevel | null;\n onMinLevelChange: (level: RunLogLevel | null) => void;\n onLoadMore: () => void;\n}\n\n/** Group of lines belonging to one node execution (or to the run itself). */\ninterface LogGroup {\n key: string;\n nodeId: string | null;\n label: string;\n status?: NodeState[\"status\"];\n lines: RunLogLine[];\n hasError: boolean;\n}\n\nconst LEVEL_ORDER: RunLogLevel[] = [\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"];\n\n/**\n * Semantic token per level. Raw colours are banned in this codebase, and these\n * are the same status tokens the rest of the run detail page uses, so the log\n * reads as part of the page rather than as an embedded terminal.\n */\nconst LEVEL_TEXT_CLASS: Record<RunLogLevel, string> = {\n DEBUG: \"text-text-secondary\",\n INFO: \"text-text-primary\",\n WARN: \"text-[var(--color-status-warning-text)]\",\n ERROR: \"text-[var(--color-status-error-text)]\",\n};\n\nconst LEVEL_BADGE_CLASS: Record<RunLogLevel, string> = {\n DEBUG: \"bg-muted text-tertiary\",\n INFO: \"bg-[var(--color-status-info-bg)] text-[var(--color-status-info-text)]\",\n WARN: \"bg-[var(--color-status-warning-bg)] text-[var(--color-status-warning-text)]\",\n ERROR:\n \"bg-[var(--color-status-error-bg)] text-[var(--color-status-error-text)]\",\n};\n\nfunction formatTimestamp(iso: string): string {\n const date = new Date(iso);\n const time = date.toLocaleTimeString(\"en-US\", {\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n return `${time}.${String(date.getMilliseconds()).padStart(3, \"0\")}`;\n}\n\n/**\n * Split lines into per-node groups, preserving first-seen order.\n *\n * Grouping is by `nodeId` rather than by node STATE id so a retried node keeps\n * one group; the attempt number is shown on the individual lines instead.\n */\nfunction groupLines(lines: RunLogLine[], nodeStates: NodeState[]): LogGroup[] {\n const byNode = new Map<string, LogGroup>();\n const order: string[] = [];\n\n for (const line of lines) {\n const key = line.nodeId ?? \"__run__\";\n let group = byNode.get(key);\n\n if (!group) {\n const state = line.nodeId\n ? nodeStates.find((ns) => ns.nodeId === line.nodeId)\n : undefined;\n group = {\n key,\n nodeId: line.nodeId ?? null,\n label: line.nodeId\n ? `${line.nodeId}${state?.nodeType ? ` · ${state.nodeType}` : \"\"}`\n : \"Run\",\n status: state?.status,\n lines: [],\n hasError: false,\n };\n byNode.set(key, group);\n order.push(key);\n }\n\n group.lines.push(line);\n if (line.level === \"ERROR\") group.hasError = true;\n }\n\n return order.map((key) => byNode.get(key)!);\n}\n\nexport function RunLogViewer({\n runId,\n lines,\n nodeStates,\n loading,\n error,\n hasMore,\n limitReached,\n streaming,\n active,\n minLevel,\n onMinLevelChange,\n onLoadMore,\n}: RunLogViewerProps): React.ReactElement {\n const [search, setSearch] = useState(\"\");\n const [showTimestamps, setShowTimestamps] = useState(true);\n const [wrap, setWrap] = useState(true);\n const [follow, setFollow] = useState(true);\n /** Groups the reader explicitly collapsed / expanded; overrides the default. */\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n /** Line targeted by a #L<id> deep link, highlighted once scrolled to. */\n const [highlighted, setHighlighted] = useState<string | null>(null);\n\n const scrollRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n const visible = useMemo(() => {\n if (!search.trim()) return lines;\n const needle = search.toLowerCase();\n return lines.filter((line) => line.message.toLowerCase().includes(needle));\n }, [lines, search]);\n\n const groups = useMemo(\n () => groupLines(visible, nodeStates),\n [visible, nodeStates],\n );\n\n /**\n * Default open/closed state for a group, GitHub-Actions style: a node that\n * finished cleanly is folded away, and the ones a reader actually came for —\n * whatever is running, whatever failed, and the run's own lines — are open.\n *\n * `expanded`/`collapsed` hold only the groups the reader has toggled, so an\n * explicit choice always wins and a node changing status later never yanks a\n * group closed under them.\n */\n const isCollapsed = useCallback(\n (group: LogGroup): boolean => {\n if (collapsed.has(group.key)) return true;\n if (expanded.has(group.key)) return false;\n if (group.nodeId === null) return false;\n return !group.hasError && group.status !== \"RUNNING\";\n },\n [collapsed, expanded],\n );\n\n const toggleGroup = useCallback(\n (key: string, currentlyCollapsed: boolean) => {\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (currentlyCollapsed) next.delete(key);\n else next.add(key);\n return next;\n });\n setExpanded((prev) => {\n const next = new Set(prev);\n if (currentlyCollapsed) next.add(key);\n else next.delete(key);\n return next;\n });\n },\n [],\n );\n\n // Follow mode, GitHub Actions style: keep pinned to the newest line, but\n // disengage the moment the reader scrolls up to look at something.\n useEffect(() => {\n if (!follow) return;\n bottomRef.current?.scrollIntoView({ block: \"end\" });\n }, [visible.length, follow]);\n\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;\n setFollow(atBottom);\n }, []);\n\n // Deep link: /workflows/runs/<id>#L<lineId> scrolls to and highlights a line,\n // so a log line can be pasted into a ticket or a chat and still be findable.\n useEffect(() => {\n const hash = window.location.hash;\n if (!hash.startsWith(\"#L\")) return;\n const target = hash.slice(2);\n if (!lines.some((line) => line.id === target)) return;\n\n setHighlighted(target);\n setFollow(false);\n // Defer to let the row render before scrolling to it.\n const timer = setTimeout(() => {\n document\n .getElementById(`L${target}`)\n ?.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }, 50);\n return () => clearTimeout(timer);\n }, [lines]);\n\n const copyLineLink = useCallback((lineId: string) => {\n const url = `${window.location.origin}${window.location.pathname}#L${lineId}`;\n void navigator.clipboard?.writeText(url);\n setHighlighted(lineId);\n }, []);\n\n /** Download the log as plain text — the same shape a terminal would show. */\n const downloadRaw = useCallback(() => {\n const body = lines\n .map((line) => {\n const node = line.nodeId ? ` [${line.nodeId}]` : \"\";\n return `${line.timestamp} ${line.level.padEnd(5)}${node} ${line.message}`;\n })\n .join(\"\\n\");\n\n const url = URL.createObjectURL(\n new Blob([body], { type: \"text/plain;charset=utf-8\" }),\n );\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = `run-${runId}.log`;\n anchor.click();\n URL.revokeObjectURL(url);\n }, [lines, runId]);\n\n if (loading && lines.length === 0) {\n return (\n <div className=\"space-y-2\" data-testid=\"run-log-loading\">\n {[...Array(6)].map((_, i) => (\n <div\n key={i}\n className=\"h-6 bg-background-tertiary rounded animate-pulse\"\n />\n ))}\n </div>\n );\n }\n\n if (error && lines.length === 0) {\n return (\n <div className=\"bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg p-6 text-center\">\n <Icon\n icon=\"mdi:alert-circle\"\n className=\"mx-auto text-[var(--color-status-error-text)] mb-3\"\n width={32}\n />\n <p className=\"text-[var(--color-status-error-text)]\">{error.message}</p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\" data-testid=\"run-log-viewer\">\n {/* Toolbar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"relative flex-1 min-w-[200px]\">\n <Icon\n icon=\"mdi:magnify\"\n className=\"absolute left-2 top-1/2 -translate-y-1/2 text-text-secondary\"\n width={16}\n />\n <input\n type=\"search\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search log\"\n aria-label=\"Search log\"\n className=\"w-full pl-8 pr-3 py-1.5 text-sm rounded border border-border-secondary bg-background-primary text-text-primary\"\n />\n </div>\n\n <select\n value={minLevel ?? \"ALL\"}\n onChange={(e) =>\n onMinLevelChange(\n e.target.value === \"ALL\" ? null : (e.target.value as RunLogLevel),\n )\n }\n aria-label=\"Minimum log level\"\n className=\"px-2 py-1.5 text-sm rounded border border-border-secondary bg-background-primary text-text-primary\"\n >\n <option value=\"ALL\">All levels</option>\n {LEVEL_ORDER.map((level) => (\n <option key={level} value={level}>\n {level} and above\n </option>\n ))}\n </select>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowTimestamps((v) => !v)}\n aria-pressed={showTimestamps}\n >\n <Icon icon=\"mdi:clock-outline\" className=\"mr-1\" width={16} />\n Timestamps\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setWrap((v) => !v)}\n aria-pressed={wrap}\n >\n <Icon icon=\"mdi:wrap\" className=\"mr-1\" width={16} />\n Wrap\n </Button>\n\n {active && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setFollow((v) => !v)}\n aria-pressed={follow}\n >\n <Icon\n icon={follow ? \"mdi:pause\" : \"mdi:arrow-down-bold\"}\n className=\"mr-1\"\n width={16}\n />\n {follow ? \"Following\" : \"Follow\"}\n </Button>\n )}\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={downloadRaw}\n disabled={lines.length === 0}\n >\n <Icon icon=\"mdi:download\" className=\"mr-1\" width={16} />\n Raw\n </Button>\n </div>\n\n {/* Status strip */}\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-secondary\">\n <span>\n {visible.length} line{visible.length === 1 ? \"\" : \"s\"}\n {search.trim() && ` matching “${search}”`}\n </span>\n {active && (\n <span className=\"flex items-center gap-1\">\n <span\n className={`inline-block w-2 h-2 rounded-full ${\n streaming\n ? \"bg-[var(--color-status-success-bg)]\"\n : \"bg-[var(--color-status-info-bg)]\"\n }`}\n />\n {streaming ? \"Streaming\" : \"Polling\"}\n </span>\n )}\n {hasMore && (\n <button\n onClick={onLoadMore}\n className=\"text-action-primary-text hover:underline\"\n >\n {/* Paging runs FORWARD from the oldest line, so there is more of the\n run still to load — not older history behind it. */}\n Load more lines\n </button>\n )}\n </div>\n\n {limitReached && (\n <div className=\"px-3 py-2 rounded border border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bg-subtle)] text-[var(--color-status-warning-text)] text-sm\">\n This run hit its log limit — later lines were dropped. Reduce logging\n inside loops, or split the workflow into sub-workflows.\n </div>\n )}\n\n {/* Log body */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"max-h-[600px] overflow-auto rounded-lg border border-border-secondary bg-background-primary\"\n >\n {groups.length === 0 ? (\n <div className=\"text-center py-10 text-text-secondary\">\n <Icon\n icon=\"mdi:text-box-outline\"\n className=\"mx-auto mb-2\"\n width={32}\n />\n <p>\n {search.trim()\n ? \"No lines match your search\"\n : active\n ? \"Waiting for the first log line…\"\n : \"This run produced no log output\"}\n </p>\n </div>\n ) : (\n groups.map((group) => {\n const groupCollapsed = isCollapsed(group);\n return (\n <div\n key={group.key}\n className=\"border-b border-border-secondary last:border-b-0\"\n >\n <button\n onClick={() => toggleGroup(group.key, groupCollapsed)}\n aria-expanded={!groupCollapsed}\n className=\"w-full flex items-center gap-2 px-3 py-2 text-left hover:bg-background-tertiary transition-colors\"\n >\n <Icon\n icon={\n groupCollapsed ? \"mdi:chevron-right\" : \"mdi:chevron-down\"\n }\n width={18}\n className=\"text-text-secondary flex-shrink-0\"\n />\n <span\n className={`text-sm font-medium truncate ${\n group.hasError\n ? \"text-[var(--color-status-error-text)]\"\n : \"text-text-primary\"\n }`}\n >\n {group.label}\n </span>\n {group.status === \"RUNNING\" && (\n <Icon\n icon=\"mdi:loading\"\n className=\"animate-spin text-[var(--color-status-info-text)] flex-shrink-0\"\n width={14}\n />\n )}\n <span className=\"ml-auto text-xs text-text-secondary flex-shrink-0\">\n {group.lines.length}\n </span>\n </button>\n\n {!groupCollapsed && (\n <div className=\"font-mono text-xs\">\n {group.lines.map((line) => (\n <div\n key={line.id}\n id={`L${line.id}`}\n className={`group flex items-start gap-2 px-3 py-0.5 hover:bg-background-tertiary ${\n highlighted === line.id\n ? \"bg-[var(--color-status-info-bg-subtle)]\"\n : \"\"\n }`}\n >\n {showTimestamps && (\n <span className=\"text-text-secondary whitespace-nowrap select-none\">\n {formatTimestamp(line.timestamp)}\n </span>\n )}\n <span\n className={`px-1 rounded uppercase text-[10px] leading-4 font-medium flex-shrink-0 ${LEVEL_BADGE_CLASS[line.level]}`}\n >\n {line.level}\n </span>\n {line.attempt > 1 && (\n <span\n className=\"text-text-secondary flex-shrink-0\"\n title={`Attempt ${line.attempt}`}\n >\n #{line.attempt}\n </span>\n )}\n <span\n className={`flex-1 ${LEVEL_TEXT_CLASS[line.level]} ${\n wrap\n ? \"whitespace-pre-wrap break-words\"\n : \"whitespace-pre overflow-x-auto\"\n }`}\n >\n {line.message}\n {line.truncated && (\n <span className=\"text-text-secondary\">\n {\" \"}\n (truncated)\n </span>\n )}\n </span>\n <button\n onClick={() => copyLineLink(line.id)}\n title=\"Copy link to this line\"\n aria-label=\"Copy link to this line\"\n className=\"opacity-0 group-hover:opacity-100 text-text-secondary hover:text-text-primary flex-shrink-0\"\n >\n <Icon icon=\"mdi:link-variant\" width={14} />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })\n )}\n <div ref={bottomRef} />\n </div>\n </div>\n );\n}\n","import { Icon } from \"@iconify/react\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\n\ninterface PaginationProps {\n totalItems?: number;\n showPageSize?: boolean;\n}\n\nexport function Pagination({\n totalItems,\n showPageSize = true,\n}: PaginationProps) {\n const { pagination, setPage, setPageSize } = useExecutionsStore();\n\n const { page, pageSize, total } = pagination;\n const totalPages = Math.ceil((totalItems ?? total) / pageSize);\n const startItem = (page - 1) * pageSize + 1;\n const endItem = Math.min(page * pageSize, totalItems ?? total);\n\n const pageSizeOptions = [10, 25, 50, 100];\n\n const goToPage = (newPage: number) => {\n if (newPage >= 1 && newPage <= totalPages) {\n setPage(newPage);\n }\n };\n\n // Generate page numbers to show\n const getPageNumbers = () => {\n const pages: (number | \"ellipsis\")[] = [];\n const showEllipsisThreshold = 7;\n\n if (totalPages <= showEllipsisThreshold) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n if (page > 3) {\n pages.push(\"ellipsis\");\n }\n\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (page < totalPages - 2) {\n pages.push(\"ellipsis\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n if (totalPages <= 1 && !showPageSize) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4 py-4\">\n {/* Results info */}\n <div className=\"text-sm text-text-secondary\">\n Showing{\" \"}\n <span className=\"font-medium text-text-primary\">{startItem}</span> to{\" \"}\n <span className=\"font-medium text-text-primary\">{endItem}</span> of{\" \"}\n <span className=\"font-medium text-text-primary\">\n {totalItems ?? total}\n </span>{\" \"}\n results\n </div>\n\n <div className=\"flex items-center gap-4\">\n {/* Page size selector */}\n {showPageSize && (\n <div className=\"flex items-center gap-2\">\n <label className=\"text-sm text-text-secondary\">Show</label>\n <select\n value={pageSize}\n onChange={(e) => setPageSize(Number(e.target.value))}\n className=\"px-2 py-1 bg-background-secondary border border-border-secondary rounded text-sm text-text-primary\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Page navigation */}\n {totalPages > 1 && (\n <nav className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n onClick={() => goToPage(page - 1)}\n disabled={page === 1}\n className=\"p-2 rounded hover:bg-background-tertiary disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Icon\n icon=\"mdi:chevron-left\"\n width={20}\n className=\"text-text-secondary\"\n />\n </button>\n\n {/* Page numbers */}\n <div className=\"hidden sm:flex items-center gap-1\">\n {getPageNumbers().map((pageNum, index) =>\n pageNum === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n className=\"px-2 text-text-secondary\"\n >\n ...\n </span>\n ) : (\n <button\n key={pageNum}\n onClick={() => goToPage(pageNum)}\n className={`\n min-w-[32px] h-8 px-2 rounded text-sm font-medium\n ${\n pageNum === page\n ? \"bg-action-primary-bg text-white\"\n : \"hover:bg-background-tertiary text-text-secondary\"\n }\n `}\n >\n {pageNum}\n </button>\n ),\n )}\n </div>\n\n {/* Mobile page indicator */}\n <span className=\"sm:hidden px-3 text-sm text-text-secondary\">\n {page} / {totalPages}\n </span>\n\n {/* Next button */}\n <button\n onClick={() => goToPage(page + 1)}\n disabled={page === totalPages}\n className=\"p-2 rounded hover:bg-background-tertiary disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Icon\n icon=\"mdi:chevron-right\"\n width={20}\n className=\"text-text-secondary\"\n />\n </button>\n </nav>\n )}\n </div>\n </div>\n );\n}\n","/**\n * Stub document nodes for subscription operations not yet in the supergraph schema.\n * These will be replaced by codegen-generated documents once the subscription\n * fields are added to the gateway schema.\n *\n * See: src/operations/workflows/subscriptions/ and src/operations/executions/subscriptions/\n */\nimport { gql } from \"@apollo/client\";\n\n// Workflow subscription stubs\nexport const NodeStateUpdatedDocument = gql`\n subscription NodeStateUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const WorkflowCompletedDocument = gql`\n subscription WorkflowCompleted($runId: String!) {\n _empty\n }\n`;\n\nexport const WorkflowErrorDocument = gql`\n subscription WorkflowError($runId: String!) {\n _empty\n }\n`;\n\n// Execution subscription stubs\nexport const ExecutionUpdatedDocument = gql`\n subscription ExecutionUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionNodeStateUpdatedDocument = gql`\n subscription ExecutionNodeStateUpdated($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionCompletedDocument = gql`\n subscription ExecutionCompleted($runId: String!) {\n _empty\n }\n`;\n\nexport const ExecutionErrorDocument = gql`\n subscription ExecutionError($runId: String!) {\n _empty\n }\n`;\n","import { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n EXECUTIONS_LIST,\n EXECUTION_DETAIL,\n NODE_STATES,\n EXECUTION_LOGS,\n ACTIVE_EXECUTIONS,\n EXECUTION_STATS,\n PAUSE_EXECUTION,\n RESUME_EXECUTION,\n CANCEL_EXECUTION,\n RETRY_NODE,\n TERMINATE_EXECUTION,\n} from \"../graphql/operations\";\nimport type {\n WorkflowRun,\n NodeState,\n ExecutionLog,\n ListExecutionsInput,\n ExecutionsListResponse,\n RunStatus,\n} from \"../types\";\nimport type {\n PauseExecutionMutation,\n ResumeExecutionMutation,\n CancelExecutionMutation,\n RetryNodeMutation,\n TerminateExecutionMutation,\n} from \"../../../generated/operations\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\n\nimport { throwIfResultError } from \"../../../graphql/errors\";\n\n// ============================================================================\n// Type Definitions for GraphQL Responses\n// ============================================================================\n\ninterface ExecutionsListData {\n workflowRuns: ExecutionsListResponse;\n}\n\ninterface ExecutionDetailData {\n workflowRun: WorkflowRun | null;\n}\n\ninterface NodeStatesData {\n nodeStates: NodeState[];\n}\n\ninterface ExecutionLogsData {\n workflowExecutionLogs: ExecutionLog[];\n}\n\ninterface ActiveExecutionsData {\n activeWorkflows: Array<{\n runId: string;\n workflowKey: string;\n version: string;\n status: RunStatus;\n startedAt: string;\n duration: number;\n progress: number;\n currentNode?: string;\n }>;\n}\n\ninterface ExecutionStatsData {\n dashboardSummary: {\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n runsCancelledCount: number;\n runsWaitingCount: number;\n runsCompletedLast24h: number;\n runsFailedLast24h: number;\n runsCompletedLast7d: number;\n runsFailedLast7d: number;\n avgWorkflowExecutionTimeSeconds: number;\n workflowSuccessRate: number;\n nodeUsageStats: Array<{\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime: number;\n }>;\n recentRuns: WorkflowRun[];\n };\n}\n\n// ============================================================================\n// Hook: useExecutions - List executions with filters\n// ============================================================================\n\nexport function useExecutions(input: ListExecutionsInput = {}) {\n const [executions, setExecutions] = useState<WorkflowRun[]>([]);\n const [total, setTotal] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const inputKey = JSON.stringify(input);\n\n // Monotonic request id: when the input changes rapidly (e.g. a URL workflow\n // filter is applied right after mount), an earlier, less-filtered request can\n // resolve after the latest one. Only the latest request may write state, so\n // stale responses can't clobber the filtered results.\n const reqIdRef = useRef(0);\n\n const fetchData = useCallback(async () => {\n const reqId = ++reqIdRef.current;\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionsListData>({\n query: EXECUTIONS_LIST,\n variables: { input: JSON.parse(inputKey) },\n fetchPolicy: \"network-only\",\n });\n if (reqId !== reqIdRef.current) return; // superseded by a newer request\n setExecutions(result.data?.workflowRuns?.items ?? []);\n setTotal(result.data?.workflowRuns?.total ?? 0);\n setHasMore(result.data?.workflowRuns?.hasMore ?? false);\n } catch (err) {\n if (reqId !== reqIdRef.current) return;\n setError(err as Error);\n } finally {\n if (reqId === reqIdRef.current) setLoading(false);\n }\n }, [inputKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n executions,\n total,\n hasMore,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecution - Single execution details\n// ============================================================================\n\nexport function useExecution(id: string | undefined) {\n const [execution, setExecution] = useState<WorkflowRun | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!id) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionDetailData>({\n query: EXECUTION_DETAIL,\n variables: { id },\n fetchPolicy: \"network-only\",\n });\n setExecution(result.data?.workflowRun ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [id]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n execution,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useLazyExecution - Fetch execution on demand\n// ============================================================================\n\nexport function useLazyExecution() {\n const [execution, setExecution] = useState<WorkflowRun | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionDetailData>({\n query: EXECUTION_DETAIL,\n variables: { id },\n fetchPolicy: \"network-only\",\n });\n const data = result.data?.workflowRun ?? null;\n setExecution(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return {\n getExecution,\n execution,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Hook: useNodeStates - Node states for a run\n// ============================================================================\n\nexport function useNodeStates(runId: string | undefined) {\n const [nodeStates, setNodeStates] = useState<NodeState[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!runId) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<NodeStatesData>({\n query: NODE_STATES,\n variables: { runId },\n fetchPolicy: \"network-only\",\n });\n setNodeStates(result.data?.nodeStates ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [runId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n nodeStates,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionLogs - Execution logs\n// ============================================================================\n\nexport function useExecutionLogs(\n runId: string | undefined,\n limit: number = 100,\n) {\n const [logs, setLogs] = useState<ExecutionLog[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!runId) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionLogsData>({\n query: EXECUTION_LOGS,\n variables: { runId, limit },\n fetchPolicy: \"network-only\",\n });\n setLogs(result.data?.workflowExecutionLogs ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [runId, limit]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n logs,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useActiveExecutions - Running workflows\n// ============================================================================\n\nexport function useActiveExecutions(\n options: { limit?: number; userId?: string } = {},\n) {\n const [executions, setExecutions] = useState<\n ActiveExecutionsData[\"activeWorkflows\"]\n >([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const optionsKey = JSON.stringify(options);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ActiveExecutionsData>({\n query: ACTIVE_EXECUTIONS,\n variables: JSON.parse(optionsKey),\n fetchPolicy: \"network-only\",\n });\n setExecutions(result.data?.activeWorkflows ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [optionsKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n executions,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionStats - Dashboard statistics\n// ============================================================================\n\nexport function useExecutionStats(\n options: {\n workspaceId?: string;\n tenantId?: string;\n projectId?: string;\n } = {},\n) {\n const [stats, setStats] = useState<\n ExecutionStatsData[\"dashboardSummary\"] | null\n >(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const optionsKey = JSON.stringify(options);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<ExecutionStatsData>({\n query: EXECUTION_STATS,\n variables: JSON.parse(optionsKey),\n fetchPolicy: \"network-only\",\n });\n setStats(result.data?.dashboardSummary ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [optionsKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n stats,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionActions - Mutations for execution control\n// ============================================================================\n\nexport function useExecutionActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const pauseExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<PauseExecutionMutation>({\n mutation: PAUSE_EXECUTION,\n variables: { id },\n }),\n );\n return result.data?.pauseWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const resumeExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<ResumeExecutionMutation>({\n mutation: RESUME_EXECUTION,\n variables: { id },\n }),\n );\n return result.data?.resumeWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const cancelExecution = useCallback(async (id: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<CancelExecutionMutation>({\n mutation: CANCEL_EXECUTION,\n variables: { id },\n }),\n );\n return result.data?.cancelWorkflowRun ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const retryNode = useCallback(async (runId: string, nodeId: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<RetryNodeMutation>({\n mutation: RETRY_NODE,\n variables: { id: runId, nodeId },\n }),\n );\n return result.data?.retryNode ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const terminateExecution = useCallback(\n async (runId: string, reason?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = throwIfResultError(\n await client.mutate<TerminateExecutionMutation>({\n mutation: TERMINATE_EXECUTION,\n variables: { runId, reason },\n }),\n );\n return result.data?.terminateWorkflow ?? null;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n pauseExecution,\n resumeExecution,\n cancelExecution,\n retryNode,\n terminateExecution,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Hook: useExecutionsWithStore - Combined hook with store integration\n// ============================================================================\n\nexport function useExecutionsWithStore() {\n const { filter, pagination, setTotal } = useExecutionsStore();\n\n const input = useMemo<ListExecutionsInput>(() => {\n const baseInput: ListExecutionsInput = {\n limit: pagination.pageSize,\n offset: (pagination.page - 1) * pagination.pageSize,\n };\n\n if (filter.status !== \"all\") {\n baseInput.status = filter.status;\n }\n\n if (filter.workflowKey) {\n baseInput.workflowKey = filter.workflowKey;\n }\n\n if (filter.dateRange.start) {\n baseInput.startDate = filter.dateRange.start.toISOString();\n }\n\n if (filter.dateRange.end) {\n baseInput.endDate = filter.dateRange.end.toISOString();\n }\n\n return baseInput;\n }, [filter, pagination.page, pagination.pageSize]);\n\n const result = useExecutions(input);\n\n useEffect(() => {\n if (result.total !== pagination.total) {\n setTotal(result.total);\n }\n }, [result.total, pagination.total, setTotal]);\n\n return result;\n}\n\n// ============================================================================\n// Hook: useAutoRefresh - Auto-refresh executions\n// ============================================================================\n\nexport function useAutoRefresh(\n refetchFn: () => void,\n enabled: boolean = true,\n interval: number = 5000,\n) {\n useEffect(() => {\n if (!enabled) return;\n\n const timer = setInterval(() => {\n refetchFn();\n }, interval);\n\n return () => clearInterval(timer);\n }, [enabled, interval, refetchFn]);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useExecution, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, NodeTimeline, RunLogViewer } from './chunk-
|
|
1
|
+
import { useExecution, useExecutionActions, useAutoRefresh, ExecutionStatusBadge, NodeTimeline, RunLogViewer } from './chunk-ES223BPI.js';
|
|
2
2
|
import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-UIY2HBWA.js';
|
|
3
3
|
import { RunLogsDocument, throwIfResultError, RunLogAppendedDocument } from './chunk-IU65EQOS.js';
|
|
4
4
|
import { getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
|
|
@@ -131,6 +131,17 @@ function useRunLogs(runId, options = {}) {
|
|
|
131
131
|
setStreaming(false);
|
|
132
132
|
};
|
|
133
133
|
}, [runId, live, fetchPage, append]);
|
|
134
|
+
const wasLive = useRef(false);
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
if (live) {
|
|
137
|
+
wasLive.current = true;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (!wasLive.current) return;
|
|
141
|
+
wasLive.current = false;
|
|
142
|
+
void fetchPage(cursor.current).catch(() => {
|
|
143
|
+
});
|
|
144
|
+
}, [live, fetchPage]);
|
|
134
145
|
const filtered = useMemo(() => {
|
|
135
146
|
if (!minLevel) return lines;
|
|
136
147
|
const order = ["DEBUG", "INFO", "WARN", "ERROR"];
|
|
@@ -636,5 +647,5 @@ function ExecutionDetailPage() {
|
|
|
636
647
|
}
|
|
637
648
|
|
|
638
649
|
export { ExecutionDetailPage };
|
|
639
|
-
//# sourceMappingURL=chunk-
|
|
640
|
-
//# sourceMappingURL=chunk-
|
|
650
|
+
//# sourceMappingURL=chunk-PBGTVA6U.js.map
|
|
651
|
+
//# sourceMappingURL=chunk-PBGTVA6U.js.map
|