@burdenoff/fluidgrids-fe-sdk 2026.716.8 → 2026.716.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/ExecutionDetailPage-4RT4QFRT.js +6 -0
  2. package/dist/{ExecutionDetailPage-2HRRVYS3.js.map → ExecutionDetailPage-4RT4QFRT.js.map} +1 -1
  3. package/dist/ExecutionsListPage-I63SHREF.js +8 -0
  4. package/dist/{ExecutionsListPage-MEWGRSFS.js.map → ExecutionsListPage-I63SHREF.js.map} +1 -1
  5. package/dist/WorkflowBuilder-OX66PGQF.js +14 -0
  6. package/dist/{WorkflowBuilder-434XQXAL.js.map → WorkflowBuilder-OX66PGQF.js.map} +1 -1
  7. package/dist/WorkflowsList-4RBTKPUJ.js +8 -0
  8. package/dist/{WorkflowsList-W5JQQNLC.js.map → WorkflowsList-4RBTKPUJ.js.map} +1 -1
  9. package/dist/{blocks-3SRVXNOP.js → blocks-SUGKRWWO.js} +4 -4
  10. package/dist/{blocks-3SRVXNOP.js.map → blocks-SUGKRWWO.js.map} +1 -1
  11. package/dist/{chunk-HU3YI534.js → chunk-2WM6MEUY.js} +127 -117
  12. package/dist/chunk-2WM6MEUY.js.map +1 -0
  13. package/dist/{chunk-423UETZP.js → chunk-4J3LA5VT.js} +141 -115
  14. package/dist/chunk-4J3LA5VT.js.map +1 -0
  15. package/dist/{chunk-NAC4WYE5.js → chunk-4NTHFDKQ.js} +41 -3
  16. package/dist/chunk-4NTHFDKQ.js.map +1 -0
  17. package/dist/{chunk-7L75LV5R.js → chunk-5W4EAURJ.js} +3 -3
  18. package/dist/{chunk-7L75LV5R.js.map → chunk-5W4EAURJ.js.map} +1 -1
  19. package/dist/{chunk-T7PRWFLD.js → chunk-6MZFOWEO.js} +33 -23
  20. package/dist/chunk-6MZFOWEO.js.map +1 -0
  21. package/dist/{chunk-UJWICZR2.js → chunk-JXH7PRTS.js} +4 -4
  22. package/dist/{chunk-UJWICZR2.js.map → chunk-JXH7PRTS.js.map} +1 -1
  23. package/dist/{chunk-ZZFYYL2I.js → chunk-OHIRHNRJ.js} +61 -43
  24. package/dist/chunk-OHIRHNRJ.js.map +1 -0
  25. package/dist/{chunk-EIYBPBSN.js → chunk-WTKD76BY.js} +3 -3
  26. package/dist/{chunk-EIYBPBSN.js.map → chunk-WTKD76BY.js.map} +1 -1
  27. package/dist/index.d.ts +37 -18
  28. package/dist/index.js +15 -15
  29. package/dist/index.js.map +1 -1
  30. package/package.json +1 -1
  31. package/dist/ExecutionDetailPage-2HRRVYS3.js +0 -6
  32. package/dist/ExecutionsListPage-MEWGRSFS.js +0 -8
  33. package/dist/WorkflowBuilder-434XQXAL.js +0 -14
  34. package/dist/WorkflowsList-W5JQQNLC.js +0 -8
  35. package/dist/chunk-423UETZP.js.map +0 -1
  36. package/dist/chunk-HU3YI534.js.map +0 -1
  37. package/dist/chunk-NAC4WYE5.js.map +0 -1
  38. package/dist/chunk-T7PRWFLD.js.map +0 -1
  39. package/dist/chunk-ZZFYYL2I.js.map +0 -1
@@ -1 +0,0 @@
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/Pagination.tsx","../src/stubs/subscription-stubs.ts","../src/modules/executions/hooks/useExecutions.ts"],"names":["jsxs","jsx","Icon","formatDuration","formatDate","Button","useState","formatTime","useCallback","useMemo"],"mappings":"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","file":"chunk-T7PRWFLD.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// ============================================================================\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 =\n \"cancel\" | \"pause\" | \"resume\" | \"retry\" | \"view\" | \"delete\";\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","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\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 = await client.mutate<PauseExecutionMutation>({\n mutation: PAUSE_EXECUTION,\n variables: { id },\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 = await client.mutate<ResumeExecutionMutation>({\n mutation: RESUME_EXECUTION,\n variables: { id },\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 = await client.mutate<CancelExecutionMutation>({\n mutation: CANCEL_EXECUTION,\n variables: { id },\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 = await client.mutate<RetryNodeMutation>({\n mutation: RETRY_NODE,\n variables: { id: runId, nodeId },\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 = await client.mutate<TerminateExecutionMutation>({\n mutation: TERMINATE_EXECUTION,\n variables: { runId, reason },\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 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useWorkflows.ts"],"names":[],"mappings":"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","file":"chunk-ZZFYYL2I.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { getFluidGridsClient } from \"../graphql/client\";\nimport { getFluidGridsConfig } from \"../config\";\nimport {\n WorkflowDefinitionsDocument,\n WorkflowDefinitionDocument,\n WorkflowVersionsDocument,\n CreateWorkflowDefinitionDocument,\n UpdateWorkflowDefinitionDocument,\n CreateWorkflowVersionDocument,\n DeleteWorkflowDefinitionDocument,\n DuplicateWorkflowDocument,\n TriggerWorkflowDocument,\n WorkflowRunsDocument,\n WorkflowRunDocument,\n DashboardSummaryDocument,\n RestoreWorkflowVersionDocument,\n ActivateWorkflowDefinitionDocument,\n DeactivateWorkflowDefinitionDocument,\n} from \"../generated/operations\";\nimport type {\n ActivateWorkflowDefinitionMutation,\n DeactivateWorkflowDefinitionMutation,\n} from \"../generated/operations\";\nimport type {\n WorkflowDefinition,\n ListWorkflowDefinitionsInput,\n CreateWorkflowDefinitionInput,\n UpdateWorkflowDefinitionInput,\n TriggerWorkflowInput,\n} from \"../generated/graphql-types\";\n\n// Alias for backward compatibility\nconst WORKFLOW_DEFINITIONS = WorkflowDefinitionsDocument;\nconst WORKFLOW_DEFINITION = WorkflowDefinitionDocument;\nconst WORKFLOW_VERSIONS = WorkflowVersionsDocument;\nconst CREATE_WORKFLOW_DEFINITION = CreateWorkflowDefinitionDocument;\nconst UPDATE_WORKFLOW_DEFINITION = UpdateWorkflowDefinitionDocument;\nconst CREATE_WORKFLOW_VERSION = CreateWorkflowVersionDocument;\nconst DELETE_WORKFLOW_DEFINITION = DeleteWorkflowDefinitionDocument;\nconst DUPLICATE_WORKFLOW = DuplicateWorkflowDocument;\nconst TRIGGER_WORKFLOW = TriggerWorkflowDocument;\nconst WORKFLOW_RUNS = WorkflowRunsDocument;\nconst WORKFLOW_RUN = WorkflowRunDocument;\nconst DASHBOARD_SUMMARY = DashboardSummaryDocument;\nconst RESTORE_WORKFLOW_VERSION = RestoreWorkflowVersionDocument;\n\n// ============================================================================\n// Workflow Definition Hooks\n// ============================================================================\n\ninterface WorkflowDefinitionsData {\n workflowDefinitions: {\n items: WorkflowDefinition[];\n total: number;\n hasMore: boolean;\n };\n}\n\ninterface WorkflowDefinitionData {\n workflowDefinition: WorkflowDefinition | null;\n}\n\ninterface WorkflowVersionsData {\n workflowVersions: WorkflowDefinition[];\n}\n\n/**\n * Check if an error is Apollo's \"Store reset while query was in flight\" error (error 89)\n * This happens when the shell's MultiGatewayProvider cleans up during re-renders\n */\nfunction isStoreResetError(err: unknown): boolean {\n if (err instanceof Error) {\n // Check for error 89 in the message URL or error text\n return (\n err.message.includes(\"message%22%3A89\") ||\n err.message.includes(\"Store reset while query was in flight\")\n );\n }\n return false;\n}\n\n/**\n * Hook to fetch list of workflow definitions\n * Uses Apollo Client with the WORKFLOW_DEFINITIONS query\n * Automatically filters by productId if configured\n */\nexport function useWorkflowDefinitions(\n input: ListWorkflowDefinitionsInput = {},\n) {\n const [workflows, setWorkflows] = useState<WorkflowDefinition[]>([]);\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 const [retryCount, setRetryCount] = useState(0);\n\n // Add productId filter if configured\n const config = getFluidGridsConfig();\n const inputWithProductFilter = {\n ...input,\n customFilters: {\n ...(input.customFilters || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n },\n };\n\n // Stringify input to use as stable dependency\n const inputKey = JSON.stringify(inputWithProductFilter);\n\n const fetchData = useCallback(\n async (isRetry = false) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowDefinitionsData>({\n query: WORKFLOW_DEFINITIONS,\n variables: { input: JSON.parse(inputKey) },\n fetchPolicy: \"network-only\",\n });\n setWorkflows(result.data?.workflowDefinitions?.items ?? []);\n setTotal(result.data?.workflowDefinitions?.total ?? 0);\n setHasMore(result.data?.workflowDefinitions?.hasMore ?? false);\n // Reset retry count on success\n if (isRetry) setRetryCount(0);\n } catch (err) {\n // Handle Apollo error 89 \"Store reset while query was in flight\"\n // This occurs when shell's MultiGatewayProvider cleans up during re-renders\n // Retry after a short delay to allow client to stabilize\n if (isStoreResetError(err)) {\n console.warn(\n \"[useWorkflowDefinitions] Store reset error - will retry\",\n );\n if (retryCount < 3) {\n setRetryCount((prev) => prev + 1);\n // Don't set loading to false, will retry\n return;\n }\n console.warn(\"[useWorkflowDefinitions] Max retries reached\");\n }\n console.error(\"[useWorkflowDefinitions] Error:\", err);\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [inputKey, retryCount],\n );\n\n // Initial fetch and retry on store reset\n useEffect(() => {\n fetchData(retryCount > 0);\n }, [fetchData, retryCount]);\n\n // Retry with delay when retryCount increases\n useEffect(() => {\n if (retryCount > 0 && retryCount <= 3) {\n const timer = setTimeout(() => {\n fetchData(true);\n }, 500 * retryCount); // Exponential backoff: 500ms, 1000ms, 1500ms\n return () => clearTimeout(timer);\n }\n }, [retryCount, fetchData]);\n\n return {\n workflows,\n total,\n hasMore,\n loading,\n error,\n refetch: () => fetchData(false),\n };\n}\n\n/**\n * Hook to fetch a single workflow definition\n */\nexport function useWorkflowDefinition(workflowKey?: string, id?: string) {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!workflowKey && !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<WorkflowDefinitionData>({\n query: WORKFLOW_DEFINITION,\n variables: { workflowKey, id },\n fetchPolicy: \"cache-first\",\n });\n setWorkflow(result.data?.workflowDefinition ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [workflowKey, id]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n workflow,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Lazy hook to fetch workflow definition on demand\n */\nexport function useLazyWorkflowDefinition() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const getWorkflow = useCallback(\n async (workflowKey?: string, id?: string, version?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowDefinitionData>({\n query: WORKFLOW_DEFINITION,\n variables: { workflowKey, id, ...(version ? { version } : {}) },\n fetchPolicy: \"network-only\",\n });\n const data = result.data?.workflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n getWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to fetch workflow versions\n */\nexport function useWorkflowVersions(workflowKey: string) {\n const [versions, setVersions] = useState<WorkflowDefinition[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!workflowKey) {\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<WorkflowVersionsData>({\n query: WORKFLOW_VERSIONS,\n variables: { workflowKey },\n fetchPolicy: \"network-only\",\n });\n setVersions(result.data?.workflowVersions ?? []);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [workflowKey]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n versions,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Workflow Mutation Hooks\n// ============================================================================\n\ninterface CreateWorkflowData {\n createWorkflowDefinition: WorkflowDefinition;\n}\n\ninterface UpdateWorkflowData {\n updateWorkflowDefinition: WorkflowDefinition;\n}\n\ninterface CreateVersionData {\n createWorkflowVersion: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n}\n\ninterface DuplicateWorkflowData {\n duplicateWorkflow: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n}\n\ninterface TriggerWorkflowData {\n triggerWorkflow: {\n runId: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n status: string;\n };\n}\n\n/**\n * Hook to create a new workflow definition\n * Automatically adds productId and productName to context if configured\n */\nexport function useCreateWorkflow() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createWorkflow = useCallback(\n async (input: CreateWorkflowDefinitionInput) => {\n setLoading(true);\n setError(null);\n try {\n const config = getFluidGridsConfig();\n\n // Add productId to context for product-level isolation\n const inputWithProductContext = {\n ...input,\n context: {\n ...(input.context || {}),\n ...(config.productId ? { productId: config.productId } : {}),\n ...(config.productName ? { productName: config.productName } : {}),\n },\n };\n\n const client = getFluidGridsClient();\n const result = await client.mutate<CreateWorkflowData>({\n mutation: CREATE_WORKFLOW_DEFINITION,\n variables: { input: inputWithProductContext },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n });\n const data = result.data?.createWorkflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n createWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to update a workflow definition\n */\nexport function useUpdateWorkflow() {\n const [workflow, setWorkflow] = useState<WorkflowDefinition | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const updateWorkflow = useCallback(\n async (id: string, input: UpdateWorkflowDefinitionInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<UpdateWorkflowData>({\n mutation: UPDATE_WORKFLOW_DEFINITION,\n variables: { id, input },\n });\n const data = result.data?.updateWorkflowDefinition ?? null;\n setWorkflow(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n updateWorkflow,\n workflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to create a new workflow version\n */\nexport function useCreateWorkflowVersion() {\n const [result, setResult] = useState<\n CreateVersionData[\"createWorkflowVersion\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const createVersion = useCallback(\n async (\n workflowKey: string,\n input: { version: string; definitionJson: unknown; description?: string },\n ) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = await client.mutate<CreateVersionData>({\n mutation: CREATE_WORKFLOW_VERSION,\n variables: { workflowKey, input },\n });\n const data = response.data?.createWorkflowVersion ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n createVersion,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to delete a workflow definition.\n * - If version is provided: deletes that specific version only.\n * - If version is omitted: deletes ALL versions for the workflowKey (removes the entire workflow).\n */\nexport function useDeleteWorkflow() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const deleteWorkflow = useCallback(\n async (workflowKey: string, version?: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate({\n mutation: DELETE_WORKFLOW_DEFINITION,\n variables: { workflowKey, ...(version ? { version } : {}) },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n });\n return (\n (result.data as { deleteWorkflowDefinition?: boolean })\n ?.deleteWorkflowDefinition ?? false\n );\n } catch (err) {\n setError(err as Error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n deleteWorkflow,\n loading,\n error,\n };\n}\n\n/**\n * Hook to duplicate a workflow\n */\nexport function useDuplicateWorkflow() {\n const [result, setResult] = useState<\n DuplicateWorkflowData[\"duplicateWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const duplicateWorkflow = useCallback(\n async (\n workflowKey: string,\n version: string,\n input: { newWorkflowKey: string; newVersion?: string },\n ) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = await client.mutate<DuplicateWorkflowData>({\n mutation: DUPLICATE_WORKFLOW,\n variables: { workflowKey, version, input },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n });\n const data = response.data?.duplicateWorkflow ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n duplicateWorkflow,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to restore a previous workflow version (creates a new DRAFT from the old version's definitionJson)\n */\nexport function useRestoreWorkflowVersion() {\n const [result, setResult] = useState<{\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n } | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const restoreVersion = useCallback(\n async (workflowKey: string, version: string) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = await client.mutate<{\n restoreWorkflowVersion: {\n success: boolean;\n message?: string;\n workflow?: WorkflowDefinition;\n };\n }>({\n mutation: RESTORE_WORKFLOW_VERSION,\n variables: { workflowKey, version },\n refetchQueries: [{ query: WORKFLOW_DEFINITIONS }],\n });\n const data = response.data?.restoreWorkflowVersion ?? null;\n setResult(data);\n return data;\n } catch (err) {\n setError(err as Error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n return {\n restoreVersion,\n result,\n loading,\n error,\n };\n}\n\n/**\n * Hook to trigger a workflow execution\n */\nexport function useTriggerWorkflow() {\n const [result, setResult] = useState<\n TriggerWorkflowData[\"triggerWorkflow\"] | null\n >(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const triggerWorkflow = useCallback(async (input: TriggerWorkflowInput) => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const response = await client.mutate<TriggerWorkflowData>({\n mutation: TRIGGER_WORKFLOW,\n variables: { input },\n });\n const data = response.data?.triggerWorkflow ?? null;\n setResult(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 triggerWorkflow,\n result,\n loading,\n error,\n };\n}\n\n// ============================================================================\n// Workflow Runs Hooks\n// ============================================================================\n\ninterface WorkflowRunsData {\n workflowRuns: {\n items: unknown[];\n total: number;\n hasMore: boolean;\n };\n}\n\ninterface WorkflowRunData {\n workflowRun: unknown;\n}\n\n/**\n * Hook to fetch workflow runs\n */\nexport function useWorkflowRuns(\n input: {\n workflowKey?: string;\n status?: string;\n limit?: number;\n offset?: number;\n } = {},\n) {\n const [runs, setRuns] = useState<unknown[]>([]);\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 fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<WorkflowRunsData>({\n query: WORKFLOW_RUNS,\n variables: { input },\n fetchPolicy: \"cache-first\",\n });\n setRuns(result.data?.workflowRuns?.items ?? []);\n setTotal(result.data?.workflowRuns?.total ?? 0);\n setHasMore(result.data?.workflowRuns?.hasMore ?? false);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [input]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n runs,\n total,\n hasMore,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n/**\n * Hook to fetch a single workflow run with node states\n */\nexport function useWorkflowRun(id: string) {\n const [run, setRun] = useState<unknown>(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<WorkflowRunData>({\n query: WORKFLOW_RUN,\n variables: { id },\n fetchPolicy: \"cache-first\",\n });\n setRun(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 run,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Dashboard Hook\n// ============================================================================\n\ninterface DashboardSummaryData {\n dashboardSummary: {\n workflowsCount: number;\n activeWorkflowsCount: number;\n archivedWorkflowsCount: number;\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n workflowSuccessRate: number;\n nodeUsageStats: unknown[];\n recentRuns: unknown[];\n recentWorkflows: unknown[];\n };\n}\n\n/**\n * Hook to fetch dashboard summary\n */\nexport function useDashboardSummary(\n options: { workspaceId?: string; tenantId?: string; projectId?: string } = {},\n) {\n const [summary, setSummary] = useState<\n DashboardSummaryData[\"dashboardSummary\"] | null\n >(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const client = getFluidGridsClient();\n const result = await client.query<DashboardSummaryData>({\n query: DASHBOARD_SUMMARY,\n variables: options,\n fetchPolicy: \"cache-first\",\n });\n setSummary(result.data?.dashboardSummary ?? null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [options]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return {\n summary,\n loading,\n error,\n refetch: fetchData,\n };\n}\n\n// ============================================================================\n// Activate / Deactivate Workflow Hooks\n// ============================================================================\n\nconst ACTIVATE_WORKFLOW_DEFINITION = ActivateWorkflowDefinitionDocument;\nconst DEACTIVATE_WORKFLOW_DEFINITION = DeactivateWorkflowDefinitionDocument;\n\n/**\n * Hook to activate a workflow definition (set status to ACTIVE)\n */\nexport function useActivateWorkflow() {\n const [loading, setLoading] = useState(false);\n\n const activateWorkflow = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<ActivateWorkflowDefinitionMutation>({\n mutation: ACTIVATE_WORKFLOW_DEFINITION,\n variables: { id },\n });\n return result.data?.activateWorkflowDefinition ?? null;\n } catch (err) {\n console.error(\"Error activating workflow:\", err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { activateWorkflow, loading };\n}\n\n/**\n * Hook to deactivate a workflow definition (set status back to DRAFT)\n */\nexport function useDeactivateWorkflow() {\n const [loading, setLoading] = useState(false);\n\n const deactivateWorkflow = useCallback(async (id: string) => {\n setLoading(true);\n try {\n const client = getFluidGridsClient();\n const result = await client.mutate<DeactivateWorkflowDefinitionMutation>({\n mutation: DEACTIVATE_WORKFLOW_DEFINITION,\n variables: { id },\n });\n return result.data?.deactivateWorkflowDefinition ?? null;\n } catch (err) {\n console.error(\"Error deactivating workflow:\", err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { deactivateWorkflow, loading };\n}\n"]}