@burdenoff/microfe-bigconsole 2026.624.2 → 2026.626.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/bigconsole/BigConsoleRoutes.js +175 -118
  2. package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
  3. package/dist/bigconsole/assistant/assistantApi.js +215 -0
  4. package/dist/bigconsole/assistant/assistantApi.js.map +1 -0
  5. package/dist/bigconsole/assistant/createSandboxAssistantTransport.js +119 -0
  6. package/dist/bigconsole/assistant/createSandboxAssistantTransport.js.map +1 -0
  7. package/dist/bigconsole/assistant/index.js +2 -0
  8. package/dist/bigconsole/assistant/pageContext.js +51 -0
  9. package/dist/bigconsole/assistant/pageContext.js.map +1 -0
  10. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +48 -48
  11. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +52 -52
  12. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  13. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +33 -33
  14. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +179 -179
  15. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  16. package/dist/bigconsole/components/dashboard/WidgetPalette.js +38 -38
  17. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +32 -32
  18. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +31 -31
  19. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +98 -98
  20. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  21. package/dist/bigconsole/components/parser/ExportParserDialog.js +31 -31
  22. package/dist/bigconsole/components/parser/ImportParserDialog.js +162 -162
  23. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  24. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +79 -79
  25. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  26. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  27. package/dist/bigconsole/components/widgets/PropertiesPanel.js +307 -307
  28. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  29. package/dist/bigconsole/components/widgets/WidgetConfigDialog.js +222 -222
  30. package/dist/bigconsole/components/widgets/WidgetConfigDialog.js.map +1 -1
  31. package/dist/bigconsole/components/widgets/WidgetTypeSelector.js +23 -23
  32. package/dist/bigconsole/index.js +3 -0
  33. package/dist/bigconsole/pages/DashboardBuilderPage.js +74 -74
  34. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  35. package/dist/bigconsole/pages/DashboardViewPage.js +168 -189
  36. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  37. package/dist/bigconsole/pages/DashboardsPage.js +266 -310
  38. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  39. package/dist/bigconsole/pages/DataParsersPage.js +148 -194
  40. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  41. package/dist/bigconsole/pages/DataSinkBuilderPage.js +252 -246
  42. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  43. package/dist/bigconsole/pages/DataSinkViewPage.js +256 -231
  44. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  45. package/dist/bigconsole/pages/DataSinksPage.js +173 -219
  46. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  47. package/dist/bigconsole/pages/HomePage.js +125 -141
  48. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  49. package/dist/bigconsole/pages/InsightsPage.js +159 -184
  50. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  51. package/dist/bigconsole/pages/ParserBuilderPage.js +401 -393
  52. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  53. package/dist/bigconsole/pages/ParserViewPage.js +220 -201
  54. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  55. package/dist/bigconsole/pages/PipelineBuilderPage.js +212 -206
  56. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  57. package/dist/bigconsole/pages/PipelineViewPage.js +204 -181
  58. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  59. package/dist/bigconsole/pages/PipelinesPage.js +107 -150
  60. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  61. package/dist/bigconsole/pages/SettingsPage.js +184 -171
  62. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  63. package/dist/bigconsole/pages/WidgetDemoPage.js +69 -81
  64. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  65. package/dist/bigconsole/pages/WorkflowViewPage.js +230 -216
  66. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  67. package/dist/bigconsole/pages/WorkflowsPage.js +106 -149
  68. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  69. package/dist/generated/wspace-operations.js +87 -36
  70. package/dist/generated/wspace-operations.js.map +1 -1
  71. package/dist/index.js +3 -1
  72. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/PipelineViewPage.tsx"],"sourcesContent":["/**\n * Pipeline View Page\n *\n * Display Pipeline details, stages, and execution history.\n * Supports testing pipeline with sample input.\n */\n\nimport { memo, useState, useCallback, useEffect } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { usePipelineOperations } from '../hooks/usePipelineOperations';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { PipelineStatusBadge } from '../components/pipeline/PipelineStatusBadge';\nimport { PipelineDeleteDialog } from '../components/pipeline/PipelineDeleteDialog';\nimport type { Pipeline, PipelineExecution, PipelineStage } from '../types';\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst BackIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n);\n\nconst DeleteIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n);\n\nconst PlayIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst ErrorIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n);\n\n// ============================================================================\n// STAGE ERROR BADGE\n// ============================================================================\n\nconst StageErrorBadge = ({ handling }: { handling: string }) => {\n const config = {\n fail: { label: 'Fail', className: 'bg-state-error/10 text-state-error' },\n skip: { label: 'Skip', className: 'bg-state-warning/10 text-state-warning' },\n fallback: { label: 'Fallback', className: 'bg-action-primary-bg/10 text-action-primary-bg' },\n };\n const c = config[handling as keyof typeof config] || config.fail;\n return <span className={`px-1.5 py-0.5 text-xs font-medium rounded ${c.className}`}>{c.label}</span>;\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineViewPage = memo(function PipelineViewPage() {\n const { pipelineId } = useParams<{ pipelineId: string }>();\n const navigate = useAppNavigate();\n // Use default consoleId for now (should come from context in production)\n const consoleId = 'default';\n const [searchParams] = useSearchParams();\n\n // Local state\n const [pipeline, setPipeline] = useState<Pipeline | null>(null);\n const [testInput, setTestInput] = useState('{\\n \"data\": \"sample\"\\n}');\n const [testResult, setTestResult] = useState<PipelineExecution | null>(null);\n const [showTestPanel, setShowTestPanel] = useState(searchParams.get('test') === 'true');\n\n // Store state\n const deleteDialogOpen = usePipelineStore((state) => state.deleteDialogOpen);\n const openDeleteDialog = usePipelineStore((state) => state.openDeleteDialog);\n const closeDeleteDialog = usePipelineStore((state) => state.closeDeleteDialog);\n\n // Operations\n const { loading, error, fetchPipeline, deletePipeline, testPipeline } = usePipelineOperations({\n consoleId,\n skipFetch: true,\n });\n\n // Fetch pipeline on mount\n useEffect(() => {\n if (pipelineId) {\n fetchPipeline(pipelineId).then((result) => {\n if (result) {\n setPipeline(result);\n }\n });\n }\n }, [pipelineId, fetchPipeline]);\n\n // Handlers\n const handleBack = useCallback(() => {\n navigate(`/pipelines`);\n }, [navigate]);\n\n const handleEdit = useCallback(() => {\n navigate(`/pipelines/${pipelineId}/edit`);\n }, [navigate, pipelineId]);\n\n const handleDeleteClick = useCallback(() => {\n if (pipeline) {\n openDeleteDialog(pipeline);\n }\n }, [pipeline, openDeleteDialog]);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (pipeline) {\n const success = await deletePipeline(pipeline.id);\n if (success) {\n if (isNative()) void nativeNotify('success');\n closeDeleteDialog();\n navigate(`/pipelines`);\n } else if (isNative()) {\n void nativeNotify('error');\n }\n }\n }, [pipeline, deletePipeline, closeDeleteDialog, navigate]);\n\n const handleViewParser = useCallback(\n (parserId: string) => {\n navigate(`/dashboards/${consoleId}/parsers/${parserId}`);\n },\n [navigate, consoleId]\n );\n\n const handleTest = useCallback(async () => {\n if (!pipeline) return;\n\n try {\n const result = await testPipeline({\n pipelineId: pipeline.id,\n inputData: testInput,\n });\n if (result) {\n setTestResult(result);\n }\n } catch (err) {}\n }, [pipeline, testPipeline, testInput]);\n\n // Loading state\n if (loading && !pipeline) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16\">\n <svg className=\"w-8 h-8 text-action-primary-bg animate-spin mb-4\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">Loading Pipeline...</p>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"p-3 rounded-full bg-state-error/10 mb-4\">\n <ErrorIcon className=\"w-8 h-8 text-state-error\" />\n </div>\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">Failed to load Pipeline</h3>\n <p className=\"text-sm text-text-secondary mb-4\">{error.message}</p>\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors\"\n >\n Back to Pipelines\n </button>\n </div>\n </div>\n );\n }\n\n // Not found state\n if (!pipeline) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">Pipeline not found</h3>\n <p className=\"text-sm text-text-secondary mb-4\">\n The pipeline you&apos;re looking for doesn&apos;t exist or has been deleted.\n </p>\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors\"\n >\n Back to Pipelines\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"p-6\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-md transition-colors\"\n >\n <BackIcon className=\"w-5 h-5\" />\n </button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold text-text-primary\">{pipeline.name}</h1>\n <PipelineStatusBadge status={pipeline.status} />\n </div>\n {pipeline.description && <p className=\"text-sm text-text-secondary mt-1\">{pipeline.description}</p>}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setShowTestPanel(!showTestPanel)}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-state-success bg-state-success/10 hover:bg-state-success/20 rounded-md transition-colors\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n Test\n </button>\n <button\n type=\"button\"\n onClick={handleEdit}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors\"\n >\n <EditIcon className=\"w-4 h-4\" />\n Edit\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-state-error bg-state-error/10 hover:bg-state-error/20 rounded-md transition-colors\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n Delete\n </button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main Content */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Stages */}\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n Pipeline Stages ({pipeline.stages?.length || 0})\n </h2>\n\n {!pipeline.stages || pipeline.stages.length === 0 ? (\n <p className=\"text-sm text-text-secondary py-8 text-center\">\n No stages defined. Edit the pipeline to add stages.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {pipeline.stages.map((stage: PipelineStage, index: number) => (\n <div key={stage.id} className=\"flex items-center gap-3\">\n {/* Stage Card */}\n <div\n className={`\n flex-1 p-4 rounded-lg border\n ${stage.enabled ? 'bg-bg-surface border-border-default' : 'bg-bg-sunken border-border-default opacity-60'}\n `}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"w-6 h-6 flex items-center justify-center text-xs font-medium bg-action-primary-bg/10 text-action-primary-bg rounded-full\">\n {index + 1}\n </span>\n <span className=\"font-medium text-text-primary\">\n {stage.parserName || `Stage ${index + 1}`}\n </span>\n {stage.parserType && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n {stage.parserType.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <StageErrorBadge handling={stage.onError} />\n {!stage.enabled && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n Disabled\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 text-xs text-text-secondary\">\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.inputKey}</span>\n <ArrowRightIcon className=\"w-3 h-3\" />\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.outputKey}</span>\n </div>\n\n {stage.description && <p className=\"text-xs text-text-secondary mt-2\">{stage.description}</p>}\n\n {stage.parserId && (\n <button\n type=\"button\"\n onClick={() => handleViewParser(stage.parserId)}\n className=\"mt-2 text-xs text-action-primary-bg hover:underline\"\n >\n View Parser\n </button>\n )}\n </div>\n\n {/* Arrow to next stage */}\n {index < (pipeline.stages?.length || 0) - 1 && (\n <ArrowRightIcon className=\"w-5 h-5 text-text-secondary flex-shrink-0 hidden md:block\" />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Test Panel */}\n {showTestPanel && (\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Test Pipeline</h2>\n\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Input JSON</label>\n <textarea\n value={testInput}\n onChange={(e) => setTestInput(e.target.value)}\n className=\"w-full h-32 px-3 py-2 text-sm font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none\"\n placeholder='{\"key\": \"value\"}'\n />\n </div>\n\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={loading}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors disabled:opacity-50\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n {loading ? 'Running...' : 'Run Test'}\n </button>\n\n {testResult && (\n <div className=\"mt-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n {testResult.status === 'completed' ? (\n <>\n <CheckIcon className=\"w-4 h-4 text-state-success\" />\n <span className=\"text-sm font-medium text-state-success\">Test Passed</span>\n </>\n ) : (\n <>\n <ErrorIcon className=\"w-4 h-4 text-state-error\" />\n <span className=\"text-sm font-medium text-state-error\">Test Failed</span>\n </>\n )}\n {testResult.totalExecutionTimeMs && (\n <span className=\"text-xs text-text-secondary\">({testResult.totalExecutionTimeMs}ms)</span>\n )}\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Output</label>\n <pre className=\"w-full p-3 text-xs font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md overflow-auto max-h-48\">\n {JSON.stringify(testResult.outputData, null, 2) || 'null'}\n </pre>\n </div>\n\n {testResult.error && (\n <div className=\"mt-2\">\n <label className=\"block text-sm font-medium text-state-error mb-2\">Error</label>\n <pre className=\"w-full p-3 text-xs font-mono text-state-error bg-state-error/10 border border-state-error/20 rounded-md overflow-auto\">\n {testResult.error}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* Details */}\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Details</h2>\n\n <dl className=\"space-y-3\">\n <div>\n <dt className=\"text-xs text-text-secondary\">Status</dt>\n <dd className=\"mt-1\">\n <PipelineStatusBadge status={pipeline.status} />\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Stages</dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.stages?.length || 0}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Last Executed</dt>\n <dd className=\"text-sm text-text-primary\">\n {pipeline.lastExecutedAt ? new Date(pipeline.lastExecutedAt).toLocaleString() : 'Never'}\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Version</dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.version}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Created</dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.createdAt).toLocaleString()}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Updated</dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.updatedAt).toLocaleString()}</dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n {/* Delete Dialog */}\n {pipeline && (\n <PipelineDeleteDialog\n pipeline={pipeline}\n isOpen={deleteDialogOpen}\n onClose={closeDeleteDialog}\n onConfirm={handleDeleteConfirm}\n />\n )}\n </div>\n );\n});\n\nexport default PipelineViewPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/PipelineViewPage.tsx"],"sourcesContent":["/**\n * Pipeline View Page\n *\n * Display Pipeline details, stages, and execution history.\n * Supports testing pipeline with sample input.\n */\n\nimport { memo, useState, useCallback, useEffect } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { GlassCard, IllustratedEmptyState, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { usePipelineOperations } from '../hooks/usePipelineOperations';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { PipelineStatusBadge } from '../components/pipeline/PipelineStatusBadge';\nimport { PipelineDeleteDialog } from '../components/pipeline/PipelineDeleteDialog';\nimport type { Pipeline, PipelineExecution, PipelineStage } from '../types';\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst BackIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n);\n\nconst DeleteIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n);\n\nconst PlayIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst ErrorIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n);\n\n// ============================================================================\n// STAGE ERROR BADGE\n// ============================================================================\n\nconst StageErrorBadge = ({ handling }: { handling: string }) => {\n const config = {\n fail: { label: 'Fail', className: 'bg-state-error/10 text-state-error' },\n skip: { label: 'Skip', className: 'bg-state-warning/10 text-state-warning' },\n fallback: { label: 'Fallback', className: 'bg-action-primary-bg/10 text-action-primary-bg' },\n };\n const c = config[handling as keyof typeof config] || config.fail;\n return <span className={`px-1.5 py-0.5 text-xs font-medium rounded ${c.className}`}>{c.label}</span>;\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineViewPage = memo(function PipelineViewPage() {\n const { pipelineId } = useParams<{ pipelineId: string }>();\n const navigate = useAppNavigate();\n // Use default consoleId for now (should come from context in production)\n const consoleId = 'default';\n const [searchParams] = useSearchParams();\n\n // Local state\n const [pipeline, setPipeline] = useState<Pipeline | null>(null);\n const [testInput, setTestInput] = useState('{\\n \"data\": \"sample\"\\n}');\n const [testResult, setTestResult] = useState<PipelineExecution | null>(null);\n const [showTestPanel, setShowTestPanel] = useState(searchParams.get('test') === 'true');\n\n // Store state\n const deleteDialogOpen = usePipelineStore((state) => state.deleteDialogOpen);\n const openDeleteDialog = usePipelineStore((state) => state.openDeleteDialog);\n const closeDeleteDialog = usePipelineStore((state) => state.closeDeleteDialog);\n\n // Operations\n const { loading, error, fetchPipeline, deletePipeline, testPipeline } = usePipelineOperations({\n consoleId,\n skipFetch: true,\n });\n\n // Fetch pipeline on mount\n useEffect(() => {\n if (pipelineId) {\n fetchPipeline(pipelineId).then((result) => {\n if (result) {\n setPipeline(result);\n }\n });\n }\n }, [pipelineId, fetchPipeline]);\n\n // Handlers\n const handleBack = useCallback(() => {\n navigate(`/pipelines`);\n }, [navigate]);\n\n const handleEdit = useCallback(() => {\n navigate(`/pipelines/${pipelineId}/edit`);\n }, [navigate, pipelineId]);\n\n const handleDeleteClick = useCallback(() => {\n if (pipeline) {\n openDeleteDialog(pipeline);\n }\n }, [pipeline, openDeleteDialog]);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (pipeline) {\n const success = await deletePipeline(pipeline.id);\n if (success) {\n if (isNative()) void nativeNotify('success');\n closeDeleteDialog();\n navigate(`/pipelines`);\n } else if (isNative()) {\n void nativeNotify('error');\n }\n }\n }, [pipeline, deletePipeline, closeDeleteDialog, navigate]);\n\n const handleViewParser = useCallback(\n (parserId: string) => {\n navigate(`/dashboards/${consoleId}/parsers/${parserId}`);\n },\n [navigate, consoleId]\n );\n\n const handleTest = useCallback(async () => {\n if (!pipeline) return;\n\n try {\n const result = await testPipeline({\n pipelineId: pipeline.id,\n inputData: testInput,\n });\n if (result) {\n setTestResult(result);\n }\n } catch (err) {}\n }, [pipeline, testPipeline, testInput]);\n\n // Loading state\n if (loading && !pipeline) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16\">\n <svg className=\"w-8 h-8 text-action-primary-bg animate-spin mb-4\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">Loading Pipeline...</p>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"p-3 rounded-full bg-state-error/10 mb-4\">\n <ErrorIcon className=\"w-8 h-8 text-state-error\" />\n </div>\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">Failed to load Pipeline</h3>\n <p className=\"text-sm text-text-secondary mb-4\">{error.message}</p>\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors\"\n >\n Back to Pipelines\n </button>\n </div>\n </div>\n );\n }\n\n // Not found state\n if (!pipeline) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"Pipeline not found\"\n description=\"The pipeline you're looking for doesn't exist or has been deleted.\"\n action={\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors\"\n >\n Back to Pipelines\n </button>\n }\n />\n </div>\n );\n }\n\n return (\n <div className=\"p-6\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-md transition-colors\"\n >\n <BackIcon className=\"w-5 h-5\" />\n </button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold text-text-primary\">{pipeline.name}</h1>\n <PipelineStatusBadge status={pipeline.status} />\n </div>\n {pipeline.description && <p className=\"text-sm text-text-secondary mt-1\">{pipeline.description}</p>}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setShowTestPanel(!showTestPanel)}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-state-success bg-state-success/10 hover:bg-state-success/20 rounded-md transition-colors\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n Test\n </button>\n <button\n type=\"button\"\n onClick={handleEdit}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors\"\n >\n <EditIcon className=\"w-4 h-4\" />\n Edit\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-state-error bg-state-error/10 hover:bg-state-error/20 rounded-md transition-colors\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n Delete\n </button>\n </div>\n </div>\n\n <PagePurpose className=\"mb-6\">\n A pipeline chains parsers and a data sink into a repeatable flow. Review its stages here, test it with sample\n input to confirm the output, then edit the stages or run it to process real data into the connected sink.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"bigconsole-pipeline-view\"\n steps={[\n {\n id: 'test',\n label: 'Test with sample input',\n description: 'Run the pipeline against a sample to verify each stage.',\n onClick: () => setShowTestPanel(true),\n },\n {\n id: 'edit',\n label: 'Edit the stages',\n description: 'Add, reorder, or configure the parsers in this pipeline.',\n onClick: handleEdit,\n },\n {\n id: 'sinks',\n label: 'Review the target data sink',\n description: 'See where the processed data lands.',\n onClick: () => navigate('/datasinks'),\n },\n ]}\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main Content */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Stages — primary emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n Pipeline Stages ({pipeline.stages?.length || 0})\n </h2>\n\n {!pipeline.stages || pipeline.stages.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No stages defined\"\n description=\"Edit the pipeline to add parser stages.\"\n />\n ) : (\n <div className=\"space-y-3\">\n {pipeline.stages.map((stage: PipelineStage, index: number) => (\n <div key={stage.id} className=\"flex items-center gap-3\">\n {/* Stage Card */}\n <div\n className={`\n flex-1 p-4 rounded-lg border\n ${stage.enabled ? 'bg-bg-surface border-border-default' : 'bg-bg-sunken border-border-default opacity-60'}\n `}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"w-6 h-6 flex items-center justify-center text-xs font-medium bg-action-primary-bg/10 text-action-primary-bg rounded-full\">\n {index + 1}\n </span>\n <span className=\"font-medium text-text-primary\">\n {stage.parserName || `Stage ${index + 1}`}\n </span>\n {stage.parserType && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n {stage.parserType.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <StageErrorBadge handling={stage.onError} />\n {!stage.enabled && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n Disabled\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 text-xs text-text-secondary\">\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.inputKey}</span>\n <ArrowRightIcon className=\"w-3 h-3\" />\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.outputKey}</span>\n </div>\n\n {stage.description && <p className=\"text-xs text-text-secondary mt-2\">{stage.description}</p>}\n\n {stage.parserId && (\n <button\n type=\"button\"\n onClick={() => handleViewParser(stage.parserId)}\n className=\"mt-2 text-xs text-action-primary-bg hover:underline\"\n >\n View Parser\n </button>\n )}\n </div>\n\n {/* Arrow to next stage */}\n {index < (pipeline.stages?.length || 0) - 1 && (\n <ArrowRightIcon className=\"w-5 h-5 text-text-secondary flex-shrink-0 hidden md:block\" />\n )}\n </div>\n ))}\n </div>\n )}\n </GlassCard>\n\n {/* Test Panel */}\n {showTestPanel && (\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Test Pipeline</h2>\n\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Input JSON</label>\n <textarea\n value={testInput}\n onChange={(e) => setTestInput(e.target.value)}\n className=\"w-full h-32 px-3 py-2 text-sm font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none\"\n placeholder='{\"key\": \"value\"}'\n />\n </div>\n\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={loading}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors disabled:opacity-50\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n {loading ? 'Running...' : 'Run Test'}\n </button>\n\n {testResult && (\n <div className=\"mt-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n {testResult.status === 'completed' ? (\n <>\n <CheckIcon className=\"w-4 h-4 text-state-success\" />\n <span className=\"text-sm font-medium text-state-success\">Test Passed</span>\n </>\n ) : (\n <>\n <ErrorIcon className=\"w-4 h-4 text-state-error\" />\n <span className=\"text-sm font-medium text-state-error\">Test Failed</span>\n </>\n )}\n {testResult.totalExecutionTimeMs && (\n <span className=\"text-xs text-text-secondary\">({testResult.totalExecutionTimeMs}ms)</span>\n )}\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">Output</label>\n <pre className=\"w-full p-3 text-xs font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md overflow-auto max-h-48\">\n {JSON.stringify(testResult.outputData, null, 2) || 'null'}\n </pre>\n </div>\n\n {testResult.error && (\n <div className=\"mt-2\">\n <label className=\"block text-sm font-medium text-state-error mb-2\">Error</label>\n <pre className=\"w-full p-3 text-xs font-mono text-state-error bg-state-error/10 border border-state-error/20 rounded-md overflow-auto\">\n {testResult.error}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* Details */}\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Details</h2>\n\n <dl className=\"space-y-3\">\n <div>\n <dt className=\"text-xs text-text-secondary\">Status</dt>\n <dd className=\"mt-1\">\n <PipelineStatusBadge status={pipeline.status} />\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Stages</dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.stages?.length || 0}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Last Executed</dt>\n <dd className=\"text-sm text-text-primary\">\n {pipeline.lastExecutedAt ? new Date(pipeline.lastExecutedAt).toLocaleString() : 'Never'}\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Version</dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.version}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Created</dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.createdAt).toLocaleString()}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">Updated</dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.updatedAt).toLocaleString()}</dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n {/* Delete Dialog */}\n {pipeline && (\n <PipelineDeleteDialog\n pipeline={pipeline}\n isOpen={deleteDialogOpen}\n onClose={closeDeleteDialog}\n onConfirm={handleDeleteConfirm}\n />\n )}\n </div>\n );\n});\n\nexport default PipelineViewPage;\n"],"mappings":";;;;;;;;;;;;AAsBA,IAAM,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAgC,CAAA;CACjG,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAc,EAAE,mBACpB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WAArE,CACE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA,EACF,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAuC,CAAA,CACxG;IAGF,KAAa,EAAE,mBACnB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAa,EAAE,mBACnB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAmB,CAAA;CACpF,CAAA,EAGF,KAAkB,EAAE,mBACxB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAA6B,CAAA;CAC9F,CAAA,EAOF,KAAmB,EAAE,kBAAqC;CAC9D,IAAM,IAAS;EACb,MAAM;GAAE,OAAO;GAAQ,WAAW;GAAsC;EACxE,MAAM;GAAE,OAAO;GAAQ,WAAW;GAA0C;EAC5E,UAAU;GAAE,OAAO;GAAY,WAAW;GAAkD;EAC7F,EACK,IAAI,EAAO,MAAoC,EAAO;AAC5D,QAAO,kBAAC,QAAD;EAAM,WAAW,6CAA6C,EAAE;YAAc,EAAE;EAAa,CAAA;GAOzF,IAAmB,EAAK,WAA4B;CAC/D,IAAM,EAAE,kBAAe,GAAmC,EACpD,IAAW,GAAgB,EAE3B,IAAY,WACZ,CAAC,KAAgB,GAAiB,EAGlC,CAAC,GAAU,KAAe,EAA0B,KAAK,EACzD,CAAC,GAAW,KAAgB,EAAS,+BAA2B,EAChE,CAAC,GAAY,KAAiB,EAAmC,KAAK,EACtE,CAAC,GAAe,KAAoB,EAAS,EAAa,IAAI,OAAO,KAAK,OAAO,EAGjF,IAAmB,GAAkB,MAAU,EAAM,iBAAiB,EACtE,IAAmB,GAAkB,MAAU,EAAM,iBAAiB,EACtE,IAAoB,GAAkB,MAAU,EAAM,kBAAkB,EAGxE,EAAE,YAAS,UAAO,kBAAe,mBAAgB,oBAAiB,EAAsB;EAC5F;EACA,WAAW;EACZ,CAAC;AAGF,SAAgB;AACd,EAAI,KACF,EAAc,EAAW,CAAC,MAAM,MAAW;AACzC,GAAI,KACF,EAAY,EAAO;IAErB;IAEH,CAAC,GAAY,EAAc,CAAC;CAG/B,IAAM,IAAa,QAAkB;AACnC,IAAS,aAAa;IACrB,CAAC,EAAS,CAAC,EAER,IAAa,QAAkB;AACnC,IAAS,cAAc,EAAW,OAAO;IACxC,CAAC,GAAU,EAAW,CAAC,EAEpB,IAAoB,QAAkB;AAC1C,EAAI,KACF,EAAiB,EAAS;IAE3B,CAAC,GAAU,EAAiB,CAAC,EAE1B,IAAsB,EAAY,YAAY;AAClD,EAAI,MACc,MAAM,EAAe,EAAS,GAAG,IAE3C,GAAU,IAAO,EAAa,UAAU,EAC5C,GAAmB,EACnB,EAAS,aAAa,IACb,GAAU,IACd,EAAa,QAAQ;IAG7B;EAAC;EAAU;EAAgB;EAAmB;EAAS,CAAC,EAErD,IAAmB,GACtB,MAAqB;AACpB,IAAS,eAAe,EAAU,WAAW,IAAW;IAE1D,CAAC,GAAU,EAAU,CACtB,EAEK,IAAa,EAAY,YAAY;AACpC,QAEL,KAAI;GACF,IAAM,IAAS,MAAM,EAAa;IAChC,YAAY,EAAS;IACrB,WAAW;IACZ,CAAC;AACF,GAAI,KACF,EAAc,EAAO;UAEX;IACb;EAAC;EAAU;EAAc;EAAU,CAAC;AAiEvC,QA9DI,KAAW,CAAC,IAEZ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;IAAmD,MAAK;IAAO,SAAQ;cAAtF,CACE,kBAAC,UAAD;KAAQ,WAAU;KAAa,IAAG;KAAK,IAAG;KAAK,GAAE;KAAK,QAAO;KAAe,aAAY;KAAM,CAAA,EAC9F,kBAAC,QAAD;KACE,WAAU;KACV,MAAK;KACL,GAAE;KACF,CAAA,CACE;OACN,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAuB,CAAA,CAC9D;;EACF,CAAA,GAKN,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD,EAAW,WAAU,4BAA6B,CAAA;KAC9C,CAAA;IACN,kBAAC,MAAD;KAAI,WAAU;eAA6C;KAA4B,CAAA;IACvF,kBAAC,KAAD;KAAG,WAAU;eAAoC,EAAM;KAAY,CAAA;IACnE,kBAAC,UAAD;KACE,MAAK;KACL,SAAS;KACT,WAAU;eACX;KAEQ,CAAA;IACL;;EACF,CAAA,GAKL,IAsBH,kBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,WAAU;gBAEV,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;MACzB,CAAA,EACT,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAwC,EAAS;OAAU,CAAA,EACzE,kBAAC,GAAD,EAAqB,QAAQ,EAAS,QAAU,CAAA,CAC5C;SACL,EAAS,eAAe,kBAAC,KAAD;MAAG,WAAU;gBAAoC,EAAS;MAAgB,CAAA,CAC/F,EAAA,CAAA,CACF;QAEN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAiB,CAAC,EAAc;OAC/C,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAAA,OAEzB;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAAA,OAEzB;;MACT,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,EAAA,SAE3B;;MACL;OACF;;GAEN,kBAAC,GAAD;IAAa,WAAU;cAAO;IAGhB,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,eAAe,EAAiB,GAAK;MACtC;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,SAAS;MACV;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,eAAe,EAAS,aAAa;MACtC;KACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,GAAD;MAAW,WAAU;MAAQ,MAAA;MAAK,WAAU;gBAA5C,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QAA6D;QACzC,EAAS,QAAQ,UAAU;QAAE;QAC5C;UAEJ,CAAC,EAAS,UAAU,EAAS,OAAO,WAAW,IAC9C,kBAAC,GAAD;OACE,cAAa;OACb,OAAM;OACN,aAAY;OACZ,CAAA,GAEF,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAS,OAAO,KAAK,GAAsB,MAC1C,kBAAC,OAAD;QAAoB,WAAU;kBAA9B,CAEE,kBAAC,OAAD;SACE,WAAW;;0BAEP,EAAM,UAAU,wCAAwC,gDAAgD;;mBAH9G;UAME,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,OAAD;YAAK,WAAU;sBAAf;aACE,kBAAC,QAAD;cAAM,WAAU;wBACb,IAAQ;cACJ,CAAA;aACP,kBAAC,QAAD;cAAM,WAAU;wBACb,EAAM,cAAc,SAAS,IAAQ;cACjC,CAAA;aACN,EAAM,cACL,kBAAC,QAAD;cAAM,WAAU;wBACb,EAAM,WAAW,aAAa;cAC1B,CAAA;aAEL;eACN,kBAAC,OAAD;YAAK,WAAU;sBAAf,CACE,kBAAC,GAAD,EAAiB,UAAU,EAAM,SAAW,CAAA,EAC3C,CAAC,EAAM,WACN,kBAAC,QAAD;aAAM,WAAU;uBAA6E;aAEtF,CAAA,CAEL;cACF;;UAEN,kBAAC,OAAD;WAAK,WAAU;qBAAf;YACE,kBAAC,QAAD;aAAM,WAAU;uBAAgD,EAAM;aAAgB,CAAA;YACtF,kBAAC,GAAD,EAAgB,WAAU,WAAY,CAAA;YACtC,kBAAC,QAAD;aAAM,WAAU;uBAAgD,EAAM;aAAiB,CAAA;YACnF;;UAEL,EAAM,eAAe,kBAAC,KAAD;WAAG,WAAU;qBAAoC,EAAM;WAAgB,CAAA;UAE5F,EAAM,YACL,kBAAC,UAAD;WACE,MAAK;WACL,eAAe,EAAiB,EAAM,SAAS;WAC/C,WAAU;qBACX;WAEQ,CAAA;UAEP;YAGL,KAAS,EAAS,QAAQ,UAAU,KAAK,KACxC,kBAAC,GAAD,EAAgB,WAAU,6DAA8D,CAAA,CAEtF;UAvDI,EAAM,GAuDV,CACN;OACE,CAAA,CAEE;SAGX,KACC,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAA+C;OAAkB,CAAA,EAE/E,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,WAAU;mBAAmD;SAAkB,CAAA,EACtF,kBAAC,YAAD;SACE,OAAO;SACP,WAAW,MAAM,EAAa,EAAE,OAAO,MAAM;SAC7C,WAAU;SACV,aAAY;SACZ,CAAA,CACE,EAAA,CAAA;QAEN,kBAAC,UAAD;SACE,MAAK;SACL,SAAS;SACT,UAAU;SACV,WAAU;mBAJZ,CAME,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAC/B,IAAU,eAAe,WACnB;;QAER,KACC,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACG,EAAW,WAAW,cACrB,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAW,WAAU,8BAA+B,CAAA,EACpD,kBAAC,QAAD;YAAM,WAAU;sBAAyC;YAAkB,CAAA,CAC1E,EAAA,CAAA,GAEH,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAW,WAAU,4BAA6B,CAAA,EAClD,kBAAC,QAAD;YAAM,WAAU;sBAAuC;YAAkB,CAAA,CACxE,EAAA,CAAA,EAEJ,EAAW,wBACV,kBAAC,QAAD;YAAM,WAAU;sBAAhB;aAA8C;aAAE,EAAW;aAAqB;aAAU;cAExF;;UAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WAAO,WAAU;qBAAmD;WAAc,CAAA,EAClF,kBAAC,OAAD;WAAK,WAAU;qBACZ,KAAK,UAAU,EAAW,YAAY,MAAM,EAAE,IAAI;WAC/C,CAAA,CACF,EAAA,CAAA;UAEL,EAAW,SACV,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,SAAD;YAAO,WAAU;sBAAkD;YAAa,CAAA,EAChF,kBAAC,OAAD;YAAK,WAAU;sBACZ,EAAW;YACR,CAAA,CACF;;UAEJ;;QAEJ;SACF;QAEJ;QAGN,kBAAC,OAAD;KAAK,WAAU;eAEb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAA+C;OAAY,CAAA,EAEzE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAW,CAAA,EACvD,kBAAC,MAAD;SAAI,WAAU;mBACZ,kBAAC,GAAD,EAAqB,QAAQ,EAAS,QAAU,CAAA;SAC7C,CAAA,CACD,EAAA,CAAA;QAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAW,CAAA,EACvD,kBAAC,MAAD;SAAI,WAAU;mBAA6B,EAAS,QAAQ,UAAU;SAAO,CAAA,CACzE,EAAA,CAAA;QAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAkB,CAAA,EAC9D,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAS,iBAAiB,IAAI,KAAK,EAAS,eAAe,CAAC,gBAAgB,GAAG;SAC7E,CAAA,CACD,EAAA,CAAA;QAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAY,CAAA,EACxD,kBAAC,MAAD;SAAI,WAAU;mBAA6B,EAAS;SAAa,CAAA,CAC7D,EAAA,CAAA;QAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAY,CAAA,EACxD,kBAAC,MAAD;SAAI,WAAU;mBAA6B,IAAI,KAAK,EAAS,UAAU,CAAC,gBAAgB;SAAM,CAAA,CAC1F,EAAA,CAAA;QAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBAA8B;SAAY,CAAA,EACxD,kBAAC,MAAD;SAAI,WAAU;mBAA6B,IAAI,KAAK,EAAS,UAAU,CAAC,gBAAgB;SAAM,CAAA,CAC1F,EAAA,CAAA;QACH;SACD;;KACF,CAAA,CACF;;GAGL,KACC,kBAAC,GAAD;IACY;IACV,QAAQ;IACR,SAAS;IACT,WAAW;IACX,CAAA;GAEA;MAzSJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,cAAa;GACb,OAAM;GACN,aAAY;GACZ,QACE,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,WAAU;cACX;IAEQ,CAAA;GAEX,CAAA;EACE,CAAA;EA4RV"}
@@ -6,57 +6,57 @@ import { isNative as r, nativeNotify as i } from "../../utils/nativeBridge.js";
6
6
  import a from "../components/pipeline/PipelineDeleteDialog.js";
7
7
  import o from "../components/pipeline/PipelineCard.js";
8
8
  import { memo as s, useCallback as c, useMemo as l, useState as u } from "react";
9
- import { AlertCircle as d, FolderOpen as f, GitBranch as p, Plus as m, Search as h } from "lucide-react";
10
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
11
- import { Button as v, Card as y, CardContent as b, Input as x, Spinner as S } from "@burdenoff/fe-libs/ui";
9
+ import { AlertCircle as d, GitBranch as f, Plus as p, Search as m } from "lucide-react";
10
+ import { AuroraBackground as h, Button as g, Card as _, CardContent as v, GlassCard as y, GradientText as b, IllustratedEmptyState as x, Input as S, PagePurpose as C, Spinner as w } from "@burdenoff/fe-libs/ui";
11
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
12
12
  //#region src/bigconsole/pages/PipelinesPage.tsx
13
- var C = s(function() {
14
- let s = t(), [C, w] = u("all"), T = e((e) => e.searchQuery), E = e((e) => e.setSearchQuery), D = e((e) => e.deleteDialogOpen), O = e((e) => e.currentPipeline), k = e((e) => e.openDeleteDialog), A = e((e) => e.closeDeleteDialog), { loading: j, error: M, pipelines: N, deletePipeline: P, refetch: F } = n({ consoleId: "default" }), I = l(() => {
15
- let e = [...N];
16
- if (C !== "all" && (e = e.filter((e) => e.status === C)), T.trim()) {
17
- let t = T.toLowerCase();
13
+ var D = s(function() {
14
+ let s = t(), [D, O] = u("all"), k = e((e) => e.searchQuery), A = e((e) => e.setSearchQuery), j = e((e) => e.deleteDialogOpen), M = e((e) => e.currentPipeline), N = e((e) => e.openDeleteDialog), P = e((e) => e.closeDeleteDialog), { loading: F, error: I, pipelines: L, deletePipeline: R, refetch: z } = n({ consoleId: "default" }), B = l(() => {
15
+ let e = [...L];
16
+ if (D !== "all" && (e = e.filter((e) => e.status === D)), k.trim()) {
17
+ let t = k.toLowerCase();
18
18
  e = e.filter((e) => e.name.toLowerCase().includes(t) || e.description?.toLowerCase().includes(t));
19
19
  }
20
20
  return e.sort((e, t) => new Date(t.updatedAt).getTime() - new Date(e.updatedAt).getTime());
21
21
  }, [
22
- N,
23
- C,
24
- T
25
- ]), L = c(() => {
22
+ L,
23
+ D,
24
+ k
25
+ ]), V = c(() => {
26
26
  s("/pipelines/new");
27
- }, [s]), R = c((e) => {
27
+ }, [s]), H = c((e) => {
28
28
  s(`/pipelines/${e}`);
29
- }, [s]), z = c((e) => {
29
+ }, [s]), U = c((e) => {
30
30
  s(`/pipelines/${e}/edit`);
31
- }, [s]), B = c((e) => {
31
+ }, [s]), W = c((e) => {
32
32
  s(`/pipelines/${e}?test=true`);
33
- }, [s]), V = c((e) => {
34
- let t = N.find((t) => t.id === e);
35
- t && k(t);
36
- }, [N, k]), H = c(async () => {
37
- if (O) {
33
+ }, [s]), G = c((e) => {
34
+ let t = L.find((t) => t.id === e);
35
+ t && N(t);
36
+ }, [L, N]), K = c(async () => {
37
+ if (M) {
38
38
  try {
39
- await P(O.id), r() && i("success");
39
+ await R(M.id), r() && i("success");
40
40
  } catch (e) {
41
41
  throw r() && i("error"), e;
42
42
  }
43
- A();
43
+ P();
44
44
  }
45
45
  }, [
46
- O,
47
- P,
48
- A
46
+ M,
47
+ R,
48
+ P
49
49
  ]);
50
- return M ? /* @__PURE__ */ g("div", {
50
+ return I ? /* @__PURE__ */ T("div", {
51
51
  style: { padding: "var(--space-pagePadding)" },
52
- children: /* @__PURE__ */ g(y, {
52
+ children: /* @__PURE__ */ T(_, {
53
53
  style: {
54
54
  borderColor: "var(--color-status-error-border)",
55
55
  backgroundColor: "var(--color-status-error-bgSubtle)"
56
56
  },
57
- children: /* @__PURE__ */ g(b, {
57
+ children: /* @__PURE__ */ T(v, {
58
58
  style: { padding: "var(--space-pagePadding)" },
59
- children: /* @__PURE__ */ _("div", {
59
+ children: /* @__PURE__ */ E("div", {
60
60
  style: {
61
61
  display: "flex",
62
62
  flexDirection: "column",
@@ -64,20 +64,20 @@ var C = s(function() {
64
64
  textAlign: "center"
65
65
  },
66
66
  children: [
67
- /* @__PURE__ */ g("div", {
67
+ /* @__PURE__ */ T("div", {
68
68
  style: {
69
69
  padding: "var(--space-controlGap)",
70
70
  borderRadius: "50%",
71
71
  backgroundColor: "var(--color-status-error-bgSubtle)",
72
72
  marginBottom: "var(--space-formGap)"
73
73
  },
74
- children: /* @__PURE__ */ g(d, { style: {
74
+ children: /* @__PURE__ */ T(d, { style: {
75
75
  height: "var(--size-icon-xl)",
76
76
  width: "var(--size-icon-xl)",
77
77
  color: "var(--color-status-error-text)"
78
78
  } })
79
79
  }),
80
- /* @__PURE__ */ g("h3", {
80
+ /* @__PURE__ */ T("h3", {
81
81
  style: {
82
82
  fontSize: "var(--font-size-body-lg)",
83
83
  fontWeight: "var(--font-weight-medium)",
@@ -86,49 +86,46 @@ var C = s(function() {
86
86
  },
87
87
  children: "Failed to load Pipelines"
88
88
  }),
89
- /* @__PURE__ */ g("p", {
89
+ /* @__PURE__ */ T("p", {
90
90
  style: {
91
91
  fontSize: "var(--font-size-body-sm)",
92
92
  color: "var(--color-text-secondary)",
93
93
  marginBottom: "var(--space-formGap)"
94
94
  },
95
- children: M.message
95
+ children: I.message
96
96
  }),
97
- /* @__PURE__ */ g(v, {
97
+ /* @__PURE__ */ T(g, {
98
98
  size: "sm",
99
- onClick: () => F(),
99
+ onClick: () => z(),
100
100
  children: "Try Again"
101
101
  })
102
102
  ]
103
103
  })
104
104
  })
105
105
  })
106
- }) : /* @__PURE__ */ _("div", {
106
+ }) : /* @__PURE__ */ E("div", {
107
107
  style: {
108
108
  minHeight: "100vh",
109
109
  backgroundColor: "var(--color-bg-canvas)"
110
110
  },
111
111
  children: [
112
- /* @__PURE__ */ g("div", {
113
- style: {
114
- borderBottom: "1px solid var(--color-border)",
115
- backgroundColor: "var(--color-bg-surface)"
116
- },
117
- children: /* @__PURE__ */ g("div", {
112
+ /* @__PURE__ */ E("div", {
113
+ className: "relative overflow-hidden border-b border-border-seam bg-gloss-card",
114
+ children: [/* @__PURE__ */ T(h, { intensity: "subtle" }), /* @__PURE__ */ T("div", {
118
115
  style: { padding: "var(--space-pagePadding)" },
119
- children: /* @__PURE__ */ _("div", {
116
+ children: /* @__PURE__ */ E("div", {
120
117
  style: {
121
118
  display: "flex",
122
119
  alignItems: "center",
123
120
  justifyContent: "space-between"
124
121
  },
125
- children: [/* @__PURE__ */ _("div", {
122
+ children: [/* @__PURE__ */ E("div", {
126
123
  style: {
127
124
  display: "flex",
128
125
  alignItems: "center",
129
126
  gap: "var(--space-formGap)"
130
127
  },
131
- children: [/* @__PURE__ */ g("div", {
128
+ children: [/* @__PURE__ */ T("div", {
132
129
  style: {
133
130
  display: "flex",
134
131
  height: "var(--size-controlHeight-lg)",
@@ -138,20 +135,20 @@ var C = s(function() {
138
135
  borderRadius: "var(--radius-card)",
139
136
  backgroundColor: "var(--color-action-primary-bg)"
140
137
  },
141
- children: /* @__PURE__ */ g(p, { style: {
138
+ children: /* @__PURE__ */ T(f, { style: {
142
139
  height: "var(--size-icon-lg)",
143
140
  width: "var(--size-icon-lg)",
144
141
  color: "var(--color-action-primary-text)"
145
142
  } })
146
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
143
+ }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("h1", {
147
144
  style: {
148
145
  fontSize: "var(--font-size-heading-h4)",
149
146
  fontWeight: "var(--font-weight-bold)",
150
147
  margin: 0,
151
148
  color: "var(--color-text-primary)"
152
149
  },
153
- children: "Pipelines"
154
- }), /* @__PURE__ */ g("p", {
150
+ children: /* @__PURE__ */ T(b, { children: "Pipelines" })
151
+ }), /* @__PURE__ */ T("p", {
155
152
  style: {
156
153
  fontSize: "var(--font-size-body-sm)",
157
154
  color: "var(--color-text-secondary)",
@@ -159,23 +156,27 @@ var C = s(function() {
159
156
  },
160
157
  children: "Create and manage sequential parser chains for data transformation"
161
158
  })] })]
162
- }), /* @__PURE__ */ _(v, {
163
- onClick: L,
164
- children: [/* @__PURE__ */ g(m, { style: {
159
+ }), /* @__PURE__ */ E(g, {
160
+ onClick: V,
161
+ children: [/* @__PURE__ */ T(p, { style: {
165
162
  marginRight: "var(--space-iconGap)",
166
163
  height: "var(--size-icon-sm)",
167
164
  width: "var(--size-icon-sm)"
168
165
  } }), "Create Pipeline"]
169
166
  })]
170
167
  })
171
- })
168
+ })]
172
169
  }),
173
- /* @__PURE__ */ _("div", {
170
+ /* @__PURE__ */ E("div", {
174
171
  style: { padding: "var(--space-pagePadding)" },
175
172
  children: [
176
- /* @__PURE__ */ g("div", {
173
+ /* @__PURE__ */ T(C, {
174
+ className: "mb-[var(--space-sectionGap)]",
175
+ children: "Pipelines chain parsers and data sinks into a repeatable flow — they take raw input, run it through your parsers, and route the structured result into a sink. Use them to turn messy logs, files, or API payloads into clean, queryable data your dashboards can use."
176
+ }),
177
+ /* @__PURE__ */ T("div", {
177
178
  style: { marginBottom: "var(--space-formGap)" },
178
- children: /* @__PURE__ */ g("div", {
179
+ children: /* @__PURE__ */ T("div", {
179
180
  style: {
180
181
  display: "flex",
181
182
  alignItems: "center",
@@ -206,9 +207,9 @@ var C = s(function() {
206
207
  value: "error",
207
208
  label: "Error"
208
209
  }
209
- ].map((e) => /* @__PURE__ */ g("button", {
210
+ ].map((e) => /* @__PURE__ */ T("button", {
210
211
  type: "button",
211
- onClick: () => w(e.value),
212
+ onClick: () => O(e.value),
212
213
  style: {
213
214
  padding: "var(--space-controlGap) var(--space-formGap)",
214
215
  fontSize: "var(--font-size-body-sm)",
@@ -217,22 +218,22 @@ var C = s(function() {
217
218
  border: "none",
218
219
  cursor: "pointer",
219
220
  transition: "all 0.2s ease",
220
- backgroundColor: C === e.value ? "var(--color-bg-surface)" : "transparent",
221
- color: C === e.value ? "var(--color-text-primary)" : "var(--color-text-secondary)",
222
- boxShadow: C === e.value ? "0 1px 2px rgba(0,0,0,0.05)" : "none"
221
+ backgroundColor: D === e.value ? "var(--color-bg-surface)" : "transparent",
222
+ color: D === e.value ? "var(--color-text-primary)" : "var(--color-text-secondary)",
223
+ boxShadow: D === e.value ? "0 1px 2px rgba(0,0,0,0.05)" : "none"
223
224
  },
224
225
  children: e.label
225
226
  }, e.value))
226
227
  })
227
228
  }),
228
- /* @__PURE__ */ g("div", {
229
+ /* @__PURE__ */ T("div", {
229
230
  style: { marginBottom: "var(--space-sectionGap)" },
230
- children: /* @__PURE__ */ _("div", {
231
+ children: /* @__PURE__ */ E("div", {
231
232
  style: {
232
233
  position: "relative",
233
234
  maxWidth: "400px"
234
235
  },
235
- children: [/* @__PURE__ */ g(h, { style: {
236
+ children: [/* @__PURE__ */ T(m, { style: {
236
237
  position: "absolute",
237
238
  left: "var(--space-controlGap)",
238
239
  top: "50%",
@@ -240,11 +241,11 @@ var C = s(function() {
240
241
  height: "var(--size-icon-sm)",
241
242
  width: "var(--size-icon-sm)",
242
243
  color: "var(--color-text-muted)"
243
- } }), /* @__PURE__ */ g(x, {
244
+ } }), /* @__PURE__ */ T(S, {
244
245
  type: "text",
245
246
  placeholder: "Search pipelines...",
246
- value: T,
247
- onChange: (e) => E(e.target.value),
247
+ value: k,
248
+ onChange: (e) => A(e.target.value),
248
249
  style: {
249
250
  paddingLeft: "var(--size-controlHeight-md)",
250
251
  height: "var(--size-controlHeight-md)"
@@ -252,20 +253,20 @@ var C = s(function() {
252
253
  })]
253
254
  })
254
255
  }),
255
- j && N.length === 0 && /* @__PURE__ */ g("div", {
256
+ F && L.length === 0 && /* @__PURE__ */ T("div", {
256
257
  style: {
257
258
  display: "flex",
258
259
  alignItems: "center",
259
260
  justifyContent: "center",
260
261
  padding: "80px 0"
261
262
  },
262
- children: /* @__PURE__ */ _("div", {
263
+ children: /* @__PURE__ */ E("div", {
263
264
  style: { textAlign: "center" },
264
- children: [/* @__PURE__ */ g(S, { style: {
265
+ children: [/* @__PURE__ */ T(w, { style: {
265
266
  height: "var(--size-icon-xl)",
266
267
  width: "var(--size-icon-xl)",
267
268
  margin: "0 auto var(--space-formGap)"
268
- } }), /* @__PURE__ */ g("p", {
269
+ } }), /* @__PURE__ */ T("p", {
269
270
  style: {
270
271
  fontSize: "var(--font-size-body-sm)",
271
272
  color: "var(--color-text-muted)"
@@ -274,102 +275,58 @@ var C = s(function() {
274
275
  })]
275
276
  })
276
277
  }),
277
- !j && N.length === 0 && /* @__PURE__ */ g(y, {
278
- className: "border-dashed",
279
- children: /* @__PURE__ */ _(b, {
280
- style: {
281
- display: "flex",
282
- flexDirection: "column",
283
- alignItems: "center",
284
- justifyContent: "center",
285
- padding: "64px var(--space-pagePadding)"
286
- },
287
- children: [
288
- /* @__PURE__ */ g("div", {
289
- style: {
290
- display: "flex",
291
- height: "80px",
292
- width: "80px",
293
- alignItems: "center",
294
- justifyContent: "center",
295
- borderRadius: "50%",
296
- backgroundColor: "var(--color-bg-sunken)",
297
- marginBottom: "var(--space-sectionGap)"
298
- },
299
- children: /* @__PURE__ */ g(f, { style: {
300
- height: "var(--size-icon-xl)",
301
- width: "var(--size-icon-xl)",
302
- color: "var(--color-text-muted)"
303
- } })
304
- }),
305
- /* @__PURE__ */ g("h3", {
306
- style: {
307
- fontSize: "var(--font-size-heading-h4)",
308
- fontWeight: "var(--font-weight-semibold)",
309
- marginBottom: "var(--space-controlGap)"
310
- },
311
- children: "No Pipelines yet"
312
- }),
313
- /* @__PURE__ */ g("p", {
314
- style: {
315
- fontSize: "var(--font-size-body-sm)",
316
- color: "var(--color-text-muted)",
317
- marginBottom: "var(--space-sectionGap)",
318
- textAlign: "center",
319
- maxWidth: "400px"
320
- },
321
- children: "Create a pipeline to chain parsers together for sequential data transformation. Each stage processes the output of the previous stage."
322
- }),
323
- /* @__PURE__ */ _(v, {
324
- onClick: L,
325
- children: [/* @__PURE__ */ g(m, { style: {
326
- marginRight: "var(--space-iconGap)",
327
- height: "var(--size-icon-sm)",
328
- width: "var(--size-icon-sm)"
329
- } }), "Create Pipeline"]
330
- })
331
- ]
278
+ !F && L.length === 0 && /* @__PURE__ */ T(y, {
279
+ treatment: "insight",
280
+ className: "border-border-seam",
281
+ children: /* @__PURE__ */ T(x, {
282
+ illustration: "empty-data",
283
+ title: "No Pipelines yet",
284
+ description: "Create a pipeline to chain parsers together for sequential data transformation. Each stage processes the output of the previous stage.",
285
+ action: /* @__PURE__ */ E(g, {
286
+ onClick: V,
287
+ children: [/* @__PURE__ */ T(p, { style: {
288
+ marginRight: "var(--space-iconGap)",
289
+ height: "var(--size-icon-sm)",
290
+ width: "var(--size-icon-sm)"
291
+ } }), "Create Pipeline"]
292
+ })
332
293
  })
333
294
  }),
334
- !j && I.length === 0 && N.length > 0 && /* @__PURE__ */ g("div", {
335
- style: {
336
- padding: "64px 0",
337
- textAlign: "center"
338
- },
339
- children: /* @__PURE__ */ g("p", {
340
- style: {
341
- fontSize: "var(--font-size-body-sm)",
342
- color: "var(--color-text-muted)"
343
- },
344
- children: "No pipelines match your filters"
295
+ !F && B.length === 0 && L.length > 0 && /* @__PURE__ */ T(y, {
296
+ treatment: "insight",
297
+ className: "border-border-seam",
298
+ children: /* @__PURE__ */ T(x, {
299
+ illustration: "empty-search",
300
+ title: "No matching pipelines",
301
+ description: "No pipelines match your filters"
345
302
  })
346
303
  }),
347
- I.length > 0 && /* @__PURE__ */ g("div", {
304
+ B.length > 0 && /* @__PURE__ */ T("div", {
348
305
  style: {
349
306
  display: "grid",
350
307
  gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))",
351
308
  gap: "var(--space-formGap)"
352
309
  },
353
- children: I.map((e) => /* @__PURE__ */ g(o, {
310
+ children: B.map((e) => /* @__PURE__ */ T(o, {
354
311
  pipeline: e,
355
- onView: R,
356
- onEdit: z,
357
- onTest: B,
358
- onDelete: V
312
+ onView: H,
313
+ onEdit: U,
314
+ onTest: W,
315
+ onDelete: G
359
316
  }, e.id))
360
317
  })
361
318
  ]
362
319
  }),
363
- O && /* @__PURE__ */ g(a, {
364
- pipeline: O,
365
- isOpen: D,
366
- onClose: A,
367
- onConfirm: H
320
+ M && /* @__PURE__ */ T(a, {
321
+ pipeline: M,
322
+ isOpen: j,
323
+ onClose: P,
324
+ onConfirm: K
368
325
  })
369
326
  ]
370
327
  });
371
328
  });
372
329
  //#endregion
373
- export { C as PipelinesPage, C as default };
330
+ export { D as PipelinesPage, D as default };
374
331
 
375
332
  //# sourceMappingURL=PipelinesPage.js.map