@burdenoff/microfe-bigconsole 2026.805.3 → 2026.812.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +54 -50
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
- package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
- package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
- package/dist/bigconsole/components/common/Section.js +70 -0
- package/dist/bigconsole/components/common/Section.js.map +1 -0
- package/dist/bigconsole/components/common/index.js +2 -0
- package/dist/bigconsole/components/common/sectionStyles.js +42 -0
- package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
- package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
- package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
- package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserCard.js +133 -114
- package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
- package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
- package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
- package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/previewShared.js +41 -23
- package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
- package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
- package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
- package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
- package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
- package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
- package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +838 -800
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +263 -315
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +356 -458
- package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/HomePage.js +186 -193
- package/dist/bigconsole/pages/HomePage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +887 -740
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +368 -342
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +248 -298
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParserCard.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserCard.tsx"],"sourcesContent":["/**\n * Parser Card\n *\n * Card component displaying parser information with action buttons.\n */\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { ParserStatusBadge } from './ParserStatusBadge';\nimport { ParserTypeBadge } from './ParserTypeBadge';\nimport type { Parser } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserCardProps {\n /** Parser to display */\n parser: Parser;\n /** Callback when card is clicked (view) */\n onView?: (id: string) => void;\n /** Callback to edit parser */\n onEdit?: (id: string) => void;\n /** Callback to test parser */\n onTest?: (id: string) => void;\n /** Callback to execute parser */\n onExecute?: (id: string) => void;\n /** Callback to export parser */\n onExport?: (id: string) => void;\n /** Callback to delete parser */\n onDelete?: (id: string) => void;\n /** Whether this card's delete action is in progress */\n isDeleting?: boolean;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/**\n * Format date to locale string\n */\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(date);\n}\n\n/**\n * Format relative time from date string\n */\nfunction formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n const diff = Date.now() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n\n return formatDate(dateString);\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst JqIcon = ({ 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={1.5}\n d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n);\n\nconst JsonataIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n);\n\nconst DefaultIcon = ({ 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={1.5}\n d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\"\n />\n </svg>\n);\n\nconst TestIcon = ({ 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=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\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 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 ExportIcon = ({ 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=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const ParserCard = memo(function ParserCard({\n parser,\n onView,\n onEdit,\n onTest,\n onExecute,\n onExport,\n onDelete,\n}: ParserCardProps) {\n // Handle card click\n const handleCardClick = useCallback(() => {\n onView?.(parser.id);\n }, [onView, parser.id]);\n\n // Handle action button clicks (stop propagation)\n const handleTest = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onTest?.(parser.id);\n },\n [onTest, parser.id]\n );\n\n const handleExecute = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onExecute?.(parser.id);\n },\n [onExecute, parser.id]\n );\n\n const handleEdit = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(parser.id);\n },\n [onEdit, parser.id]\n );\n\n const handleExport = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onExport?.(parser.id);\n },\n [onExport, parser.id]\n );\n\n const handleDelete = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(parser.id);\n },\n [onDelete, parser.id]\n );\n\n // Get type icon - memoized to avoid creating component during render\n const typeIcon = useMemo(() => {\n const iconClass = 'w-10 h-10 text-text-secondary/50';\n switch (parser.type) {\n case 'jq':\n return <JqIcon className={iconClass} />;\n case 'jsonata':\n return <JsonataIcon className={iconClass} />;\n default:\n return <DefaultIcon className={iconClass} />;\n }\n }, [parser.type]);\n\n return (\n <div\n onClick={handleCardClick}\n className={`\n bg-bg-surface\n border border-border-default\n rounded-lg\n overflow-hidden\n cursor-pointer\n hover:border-action-primary-bg\n transition-colors\n `}\n >\n {/* Header with icon and badges */}\n <div className=\"h-24 bg-bg-sunken flex items-center justify-center relative\">\n {typeIcon}\n\n {/* Type badge */}\n <div className=\"absolute top-2 left-2\">\n <ParserTypeBadge type={parser.type} size=\"sm\" />\n </div>\n\n {/* Status badge */}\n <div className=\"absolute top-2 right-2\">\n <ParserStatusBadge status={parser.status} size=\"sm\" />\n </div>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {/* Title and actions */}\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-text-primary truncate\">{parser.name || 'Untitled Parser'}</h3>\n <p className=\"text-xs text-text-secondary truncate mt-0.5\">\n {parser.inputSinkKey} → {parser.outputKey}\n </p>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1 ml-2\">\n {onTest && (\n <button\n type=\"button\"\n onClick={handleTest}\n className={`\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n `}\n title=\"Test Parser\"\n >\n <TestIcon className=\"w-4 h-4\" />\n </button>\n )}\n\n {onExecute && (\n <button\n type=\"button\"\n onClick={handleExecute}\n className={`\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n `}\n title=\"Execute Parser\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n </button>\n )}\n\n {onEdit && (\n <button\n type=\"button\"\n onClick={handleEdit}\n className={`\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n `}\n title=\"Edit Parser\"\n >\n <EditIcon className=\"w-4 h-4\" />\n </button>\n )}\n\n {onExport && (\n <button\n type=\"button\"\n onClick={handleExport}\n className={`\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n `}\n title=\"Export Parser\"\n >\n <ExportIcon className=\"w-4 h-4\" />\n </button>\n )}\n\n {onDelete && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className={`\n p-1 rounded-md\n text-text-secondary\n hover:text-status-error-text\n hover:bg-status-error-bg/10\n transition-colors\n `}\n title=\"Delete Parser\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Description */}\n {parser.description && <p className=\"text-xs text-text-secondary mb-3 line-clamp-2\">{parser.description}</p>}\n\n {/* Footer with version and timestamps */}\n <div className=\"flex items-center justify-between text-xs text-text-secondary\">\n <div className=\"flex items-center gap-3\">\n <span>v{parser.version}</span>\n {parser.ttl && <span title={`Cache TTL: ${parser.ttl} seconds`}>TTL: {parser.ttl}s</span>}\n </div>\n <span title={`Last updated: ${formatDate(parser.updatedAt)}`}>{formatRelativeTime(parser.updatedAt)}</span>\n </div>\n </div>\n </div>\n );\n});\n\nexport default ParserCard;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ParserCard.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserCard.tsx"],"sourcesContent":["/**\n * Parser Card\n *\n * Card component displaying parser information with action buttons.\n */\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { ParserStatusBadge } from './ParserStatusBadge';\nimport { ParserTypeBadge } from './ParserTypeBadge';\nimport { SECTION_FOCUS_RING } from '../common';\nimport type { Parser } from '../../types';\n\n/**\n * Icon-only card actions are 40×40 so they clear the mobile touch minimum, and\n * they keep a visible focus ring because the card body is itself clickable.\n */\nconst CARD_ACTION_CLASSES = `inline-flex h-control-md aspect-square items-center justify-center rounded-md text-text-secondary motion-safe:transition-colors hover:bg-bg-sunken hover:text-text-primary ${SECTION_FOCUS_RING}`;\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserCardProps {\n /** Parser to display */\n parser: Parser;\n /** Callback when card is clicked (view) */\n onView?: (id: string) => void;\n /** Callback to edit parser */\n onEdit?: (id: string) => void;\n /** Callback to test parser */\n onTest?: (id: string) => void;\n /** Callback to execute parser */\n onExecute?: (id: string) => void;\n /** Callback to export parser */\n onExport?: (id: string) => void;\n /** Callback to delete parser */\n onDelete?: (id: string) => void;\n /** Whether this card's delete action is in progress */\n isDeleting?: boolean;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/**\n * Format date to locale string\n */\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(date);\n}\n\n/**\n * Format relative time from date string\n */\nfunction formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n const diff = Date.now() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n\n return formatDate(dateString);\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst JqIcon = ({ 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={1.5}\n d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n);\n\nconst JsonataIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n);\n\nconst DefaultIcon = ({ 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={1.5}\n d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\"\n />\n </svg>\n);\n\nconst TestIcon = ({ 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=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\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 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 ExportIcon = ({ 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=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const ParserCard = memo(function ParserCard({\n parser,\n onView,\n onEdit,\n onTest,\n onExecute,\n onExport,\n onDelete,\n}: ParserCardProps) {\n // Handle card click\n const handleCardClick = useCallback(() => {\n onView?.(parser.id);\n }, [onView, parser.id]);\n\n // Title button — same action as the card surface, but must not double-fire\n const handleTitleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onView?.(parser.id);\n },\n [onView, parser.id]\n );\n\n // Handle action button clicks (stop propagation)\n const handleTest = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onTest?.(parser.id);\n },\n [onTest, parser.id]\n );\n\n const handleExecute = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onExecute?.(parser.id);\n },\n [onExecute, parser.id]\n );\n\n const handleEdit = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(parser.id);\n },\n [onEdit, parser.id]\n );\n\n const handleExport = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onExport?.(parser.id);\n },\n [onExport, parser.id]\n );\n\n const handleDelete = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(parser.id);\n },\n [onDelete, parser.id]\n );\n\n // Get type icon - memoized to avoid creating component during render\n const typeIcon = useMemo(() => {\n const iconClass = 'w-icon-sm h-icon-sm text-text-secondary';\n switch (parser.type) {\n case 'jq':\n return <JqIcon className={iconClass} />;\n case 'jsonata':\n return <JsonataIcon className={iconClass} />;\n default:\n return <DefaultIcon className={iconClass} />;\n }\n }, [parser.type]);\n\n return (\n <div\n onClick={handleCardClick}\n className={`\n flex h-full flex-col\n bg-bg-elevated\n border border-[var(--color-border-default)]\n rounded-card\n overflow-hidden\n cursor-pointer\n hover:border-action-primary-bg\n motion-safe:transition-colors\n `}\n >\n {/* Identity strip — type + status, the two keys people scan a grid by */}\n <div className=\"flex flex-wrap items-center justify-between gap-icon-gap border-b border-[var(--color-border-subtle)] bg-bg-sunken px-4 py-2\">\n <span className=\"flex min-w-0 items-center gap-icon-gap\">\n {typeIcon}\n <ParserTypeBadge type={parser.type} size=\"sm\" />\n </span>\n <ParserStatusBadge status={parser.status} size=\"sm\" />\n </div>\n\n {/* Content */}\n <div className=\"flex flex-1 flex-col p-4\">\n {/* Title and actions */}\n <div className=\"flex flex-wrap items-start justify-between gap-icon-gap mb-2\">\n <div className=\"flex-1 min-w-0\">\n {/* The title is the card's keyboard-reachable \"open\" affordance. The card\n surface stays mouse-clickable, but it is NOT a `role=\"button\"` — that\n would nest the action buttons below inside another interactive element. */}\n <h3 className=\"min-w-0 text-sm font-semibold text-text-primary\">\n <button\n type=\"button\"\n onClick={handleTitleClick}\n className={`block w-full truncate rounded-sm text-left ${SECTION_FOCUS_RING}`}\n >\n {parser.name || 'Untitled Parser'}\n </button>\n </h3>\n <p\n className=\"text-xs font-mono text-text-secondary truncate mt-0.5\"\n title={`${parser.inputSinkKey} → ${parser.outputKey}`}\n >\n {parser.inputSinkKey} → {parser.outputKey}\n </p>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex flex-wrap items-center gap-icon-gap\">\n {onTest && (\n <button type=\"button\" onClick={handleTest} className={CARD_ACTION_CLASSES} title=\"Test Parser\">\n <span className=\"sr-only\">Test parser</span>\n <TestIcon className=\"w-icon-sm h-icon-sm\" />\n </button>\n )}\n\n {onExecute && (\n <button type=\"button\" onClick={handleExecute} className={CARD_ACTION_CLASSES} title=\"Execute Parser\">\n <span className=\"sr-only\">Execute parser</span>\n <PlayIcon className=\"w-icon-sm h-icon-sm\" />\n </button>\n )}\n\n {onEdit && (\n <button type=\"button\" onClick={handleEdit} className={CARD_ACTION_CLASSES} title=\"Edit Parser\">\n <span className=\"sr-only\">Edit parser</span>\n <EditIcon className=\"w-icon-sm h-icon-sm\" />\n </button>\n )}\n\n {onExport && (\n <button type=\"button\" onClick={handleExport} className={CARD_ACTION_CLASSES} title=\"Export Parser\">\n <span className=\"sr-only\">Export parser</span>\n <ExportIcon className=\"w-icon-sm h-icon-sm\" />\n </button>\n )}\n\n {onDelete && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className={`${CARD_ACTION_CLASSES} hover:text-[var(--color-status-error-text)]`}\n title=\"Delete Parser\"\n >\n <span className=\"sr-only\">Delete parser</span>\n <DeleteIcon className=\"w-icon-sm h-icon-sm\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Description */}\n {parser.description && <p className=\"text-xs text-text-secondary mb-3 line-clamp-2\">{parser.description}</p>}\n\n {/* Footer — supporting metadata, separated from the identity block above */}\n <div className=\"mt-auto flex flex-wrap items-center justify-between gap-x-3 gap-y-1 border-t border-[var(--color-border-subtle)] pt-2 text-xs text-text-muted\">\n <span className=\"flex flex-wrap items-center gap-3\">\n <span>v{parser.version}</span>\n {parser.ttl ? <span title={`Cache TTL: ${parser.ttl} seconds`}>TTL: {parser.ttl}s</span> : null}\n </span>\n <span title={`Last updated: ${formatDate(parser.updatedAt)}`}>{formatRelativeTime(parser.updatedAt)}</span>\n </div>\n </div>\n </div>\n );\n});\n\nexport default ParserCard;\n"],"mappings":"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"}
|
|
@@ -1,296 +1,313 @@
|
|
|
1
1
|
import { useBuildPath as e } from "../../contexts/NavigationContext.js";
|
|
2
2
|
import "../../contexts/index.js";
|
|
3
|
-
import t from "
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
3
|
+
import { SECTION_FOCUS_RING as t } from "../common/sectionStyles.js";
|
|
4
|
+
import "../common/index.js";
|
|
5
|
+
import n from "../../hooks/useParserOperations.js";
|
|
6
|
+
import r from "./ParserTypeBadge.js";
|
|
7
|
+
import i from "./ParserStatusBadge.js";
|
|
8
|
+
import { Fragment as a, memo as o, useCallback as s, useEffect as c, useMemo as l, useState as u } from "react";
|
|
9
|
+
import { Plus as d } from "lucide-react";
|
|
10
|
+
import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
11
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
10
12
|
//#region src/bigconsole/components/parser/ParserSelector.tsx
|
|
11
|
-
var
|
|
13
|
+
var h = "default", g = "sticky top-0 z-[1] bg-bg-sunken px-3 py-1.5 border-y border-[var(--color-border-default)]", _ = "text-xs font-semibold uppercase tracking-wide text-text-secondary", v = ({ className: e }) => /* @__PURE__ */ p("svg", {
|
|
12
14
|
className: e,
|
|
13
15
|
fill: "none",
|
|
14
16
|
stroke: "currentColor",
|
|
15
17
|
viewBox: "0 0 24 24",
|
|
16
|
-
children: /* @__PURE__ */
|
|
18
|
+
children: /* @__PURE__ */ p("path", {
|
|
17
19
|
strokeLinecap: "round",
|
|
18
20
|
strokeLinejoin: "round",
|
|
19
21
|
strokeWidth: 2,
|
|
20
22
|
d: "M19 9l-7 7-7-7"
|
|
21
23
|
})
|
|
22
|
-
}),
|
|
24
|
+
}), y = ({ className: e }) => /* @__PURE__ */ m("svg", {
|
|
23
25
|
className: e,
|
|
24
26
|
fill: "none",
|
|
25
27
|
stroke: "currentColor",
|
|
26
28
|
viewBox: "0 0 24 24",
|
|
27
29
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
30
|
+
/* @__PURE__ */ p("path", {
|
|
29
31
|
strokeLinecap: "round",
|
|
30
32
|
strokeLinejoin: "round",
|
|
31
33
|
strokeWidth: 2,
|
|
32
34
|
d: "M12 21a9 9 0 100-18 9 9 0 000 18z"
|
|
33
35
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
36
|
+
/* @__PURE__ */ p("path", {
|
|
35
37
|
strokeLinecap: "round",
|
|
36
38
|
strokeLinejoin: "round",
|
|
37
39
|
strokeWidth: 2,
|
|
38
40
|
d: "M3.6 9h16.8M3.6 15h16.8"
|
|
39
41
|
}),
|
|
40
|
-
/* @__PURE__ */
|
|
42
|
+
/* @__PURE__ */ p("path", {
|
|
41
43
|
strokeLinecap: "round",
|
|
42
44
|
strokeLinejoin: "round",
|
|
43
45
|
strokeWidth: 2,
|
|
44
46
|
d: "M12 3a15 15 0 014 9 15 15 0 01-4 9 15 15 0 01-4-9 15 15 0 014-9z"
|
|
45
47
|
})
|
|
46
48
|
]
|
|
47
|
-
}),
|
|
48
|
-
let { t:
|
|
49
|
-
return /* @__PURE__ */
|
|
49
|
+
}), b = o(function({ parser: e, isSelected: n, onSelect: a, isGlobal: o = !1 }) {
|
|
50
|
+
let { t: s } = f();
|
|
51
|
+
return /* @__PURE__ */ p("button", {
|
|
50
52
|
type: "button",
|
|
51
|
-
onClick: () =>
|
|
53
|
+
onClick: () => a(e.id),
|
|
52
54
|
className: `
|
|
53
|
-
w-full px-3 py-2.5
|
|
55
|
+
w-full min-h-control-md px-3 py-2.5
|
|
54
56
|
text-left
|
|
55
57
|
hover:bg-bg-sunken
|
|
56
|
-
transition-colors
|
|
57
|
-
border-b border-border-default last:border-b-0
|
|
58
|
-
${t
|
|
58
|
+
motion-safe:transition-colors
|
|
59
|
+
border-b border-[var(--color-border-default)] last:border-b-0
|
|
60
|
+
${t}
|
|
61
|
+
${n ? "bg-action-primary-bg/10" : ""}
|
|
59
62
|
`,
|
|
60
|
-
children: /* @__PURE__ */
|
|
63
|
+
children: /* @__PURE__ */ m("div", {
|
|
61
64
|
className: "flex items-start justify-between gap-2",
|
|
62
|
-
children: [/* @__PURE__ */
|
|
65
|
+
children: [/* @__PURE__ */ m("div", {
|
|
63
66
|
className: "flex-1 min-w-0",
|
|
64
67
|
children: [
|
|
65
|
-
/* @__PURE__ */
|
|
68
|
+
/* @__PURE__ */ m("div", {
|
|
66
69
|
className: "flex items-center gap-2 mb-1",
|
|
67
70
|
children: [
|
|
68
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ p(r, {
|
|
69
72
|
type: e.type,
|
|
70
73
|
size: "sm"
|
|
71
74
|
}),
|
|
72
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ p("span", {
|
|
73
76
|
className: "text-sm font-medium text-text-primary truncate",
|
|
74
77
|
children: e.name
|
|
75
78
|
}),
|
|
76
|
-
|
|
79
|
+
o && /* @__PURE__ */ m("span", {
|
|
77
80
|
className: "inline-flex items-center gap-1 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
|
|
78
|
-
children: [/* @__PURE__ */
|
|
81
|
+
children: [/* @__PURE__ */ p(y, { className: "w-3 h-3" }), s("bigconsole.parsers.selector.globalBadge", "Global")]
|
|
79
82
|
})
|
|
80
83
|
]
|
|
81
84
|
}),
|
|
82
|
-
e.description && /* @__PURE__ */
|
|
85
|
+
e.description && /* @__PURE__ */ p("p", {
|
|
83
86
|
className: "text-xs text-text-secondary line-clamp-1 mb-1",
|
|
84
87
|
children: e.description
|
|
85
88
|
}),
|
|
86
|
-
/* @__PURE__ */
|
|
87
|
-
className: "flex items-center gap-2 text-xs text-text-
|
|
88
|
-
children: /* @__PURE__ */
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
/* @__PURE__ */ p("div", {
|
|
90
|
+
className: "flex min-w-0 items-center gap-2 text-xs text-text-muted",
|
|
91
|
+
children: /* @__PURE__ */ m("span", {
|
|
92
|
+
className: "truncate font-mono",
|
|
93
|
+
children: [
|
|
94
|
+
e.inputSinkKey,
|
|
95
|
+
" → ",
|
|
96
|
+
e.outputKey
|
|
97
|
+
]
|
|
98
|
+
})
|
|
93
99
|
})
|
|
94
100
|
]
|
|
95
|
-
}), /* @__PURE__ */
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
}), /* @__PURE__ */ p("div", {
|
|
102
|
+
className: "shrink-0",
|
|
103
|
+
children: /* @__PURE__ */ p(i, {
|
|
104
|
+
status: e.status,
|
|
105
|
+
size: "sm",
|
|
106
|
+
showIcon: !1
|
|
107
|
+
})
|
|
108
|
+
})]
|
|
100
109
|
})
|
|
101
110
|
});
|
|
102
|
-
}),
|
|
103
|
-
let { t:
|
|
104
|
-
consoleId:
|
|
105
|
-
skipFetch:
|
|
106
|
-
}), { parsers:
|
|
107
|
-
consoleId:
|
|
108
|
-
skipFetch:
|
|
109
|
-
}),
|
|
110
|
-
if (
|
|
111
|
-
let e = new Set(
|
|
112
|
-
return [...
|
|
111
|
+
}), x = o(function({ consoleId: i, value: o, onChange: y, filterType: x, filterStatus: S = "active", filterInputSinkKey: C, placeholder: w, disabled: T = !1, error: E = !1, errorMessage: D }) {
|
|
112
|
+
let { t: O } = f(), [k, A] = u(!1), [j, M] = u(""), N = w ?? O("bigconsole.parsers.selector.placeholder", "Select a parser..."), P = e(), F = i === h, { parsers: I, loading: L, fetchParsers: R } = n({
|
|
113
|
+
consoleId: i,
|
|
114
|
+
skipFetch: F
|
|
115
|
+
}), { parsers: z, loading: B, fetchParsers: V } = n({
|
|
116
|
+
consoleId: h,
|
|
117
|
+
skipFetch: F
|
|
118
|
+
}), H = l(() => {
|
|
119
|
+
if (F) return I;
|
|
120
|
+
let e = new Set(I.map((e) => e.id)), t = z.filter((t) => !e.has(t.id));
|
|
121
|
+
return [...I, ...t];
|
|
113
122
|
}, [
|
|
114
|
-
N,
|
|
115
123
|
I,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (
|
|
120
|
-
|
|
124
|
+
z,
|
|
125
|
+
F
|
|
126
|
+
]), U = L || B, W = l(() => H.filter((e) => {
|
|
127
|
+
if (x && e.type !== x || S && e.status !== S || C && e.inputSinkKey !== C) return !1;
|
|
128
|
+
if (j) {
|
|
129
|
+
let t = j.toLowerCase();
|
|
121
130
|
return e.name.toLowerCase().includes(t) || e.description?.toLowerCase().includes(t) || e.inputSinkKey.toLowerCase().includes(t) || e.outputKey.toLowerCase().includes(t);
|
|
122
131
|
}
|
|
123
132
|
return !0;
|
|
124
133
|
}), [
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
]), { dashboardScopedParsers:
|
|
131
|
-
dashboardScopedParsers:
|
|
132
|
-
globalScopedParsers:
|
|
133
|
-
}), [
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
type:
|
|
137
|
-
status:
|
|
138
|
-
}),
|
|
139
|
-
type:
|
|
140
|
-
status:
|
|
134
|
+
H,
|
|
135
|
+
x,
|
|
136
|
+
S,
|
|
137
|
+
C,
|
|
138
|
+
j
|
|
139
|
+
]), { dashboardScopedParsers: G, globalScopedParsers: K } = l(() => ({
|
|
140
|
+
dashboardScopedParsers: W.filter((e) => e.consoleId !== h),
|
|
141
|
+
globalScopedParsers: W.filter((e) => e.consoleId === h)
|
|
142
|
+
}), [W]), q = H.find((e) => e.id === o);
|
|
143
|
+
c(() => {
|
|
144
|
+
i && (R({
|
|
145
|
+
type: x,
|
|
146
|
+
status: S ?? void 0
|
|
147
|
+
}), F || V({
|
|
148
|
+
type: x,
|
|
149
|
+
status: S ?? void 0
|
|
141
150
|
}));
|
|
142
151
|
}, [
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
F,
|
|
152
|
+
i,
|
|
153
|
+
x,
|
|
154
|
+
S,
|
|
155
|
+
C,
|
|
148
156
|
R,
|
|
149
|
-
|
|
157
|
+
V,
|
|
158
|
+
F
|
|
150
159
|
]);
|
|
151
|
-
let
|
|
152
|
-
|
|
153
|
-
}, [
|
|
154
|
-
if (
|
|
155
|
-
let e = !
|
|
156
|
-
e && (
|
|
157
|
-
type:
|
|
158
|
-
status:
|
|
159
|
-
}),
|
|
160
|
-
type:
|
|
161
|
-
status:
|
|
162
|
-
})),
|
|
160
|
+
let J = s((e) => {
|
|
161
|
+
y(e), A(!1), M("");
|
|
162
|
+
}, [y]), Y = s(() => {
|
|
163
|
+
if (T) return;
|
|
164
|
+
let e = !k;
|
|
165
|
+
e && (R({
|
|
166
|
+
type: x,
|
|
167
|
+
status: S ?? void 0
|
|
168
|
+
}), F || V({
|
|
169
|
+
type: x,
|
|
170
|
+
status: S ?? void 0
|
|
171
|
+
})), A(e);
|
|
163
172
|
}, [
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
F,
|
|
173
|
+
T,
|
|
174
|
+
k,
|
|
167
175
|
R,
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
V,
|
|
177
|
+
x,
|
|
178
|
+
S,
|
|
179
|
+
F
|
|
180
|
+
]), X = s(() => {
|
|
181
|
+
A(!1);
|
|
182
|
+
}, []), Z = s(() => {
|
|
183
|
+
A(!1);
|
|
184
|
+
let e = F ? "/parsers/new" : `/dashboards/${i}/parsers/new`;
|
|
185
|
+
window.open(P(e), "_blank", "noopener,noreferrer");
|
|
177
186
|
}, [
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
187
|
+
P,
|
|
188
|
+
i,
|
|
189
|
+
F
|
|
181
190
|
]);
|
|
182
|
-
return /* @__PURE__ */
|
|
191
|
+
return /* @__PURE__ */ m("div", {
|
|
183
192
|
className: "relative",
|
|
184
193
|
children: [
|
|
185
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ m("button", {
|
|
186
195
|
type: "button",
|
|
187
|
-
onClick:
|
|
188
|
-
disabled:
|
|
196
|
+
onClick: Y,
|
|
197
|
+
disabled: T,
|
|
198
|
+
"aria-haspopup": "listbox",
|
|
199
|
+
"aria-expanded": k,
|
|
189
200
|
className: `
|
|
190
|
-
w-full
|
|
201
|
+
w-full min-w-0 min-h-control-md
|
|
191
202
|
px-3 py-2
|
|
192
203
|
bg-bg-surface
|
|
193
204
|
border rounded-md
|
|
194
205
|
text-left
|
|
195
206
|
flex items-center justify-between gap-2
|
|
196
|
-
transition-colors
|
|
197
|
-
${
|
|
198
|
-
${
|
|
199
|
-
${E ? "border-
|
|
207
|
+
motion-safe:transition-colors
|
|
208
|
+
${t}
|
|
209
|
+
${T ? "opacity-50 cursor-not-allowed" : "hover:border-action-primary-bg cursor-pointer"}
|
|
210
|
+
${E ? "border-status-error-border" : "border-[var(--color-border-default)]"}
|
|
211
|
+
${k ? "border-action-primary-bg ring-2 ring-action-primary-bg/20" : ""}
|
|
200
212
|
`,
|
|
201
|
-
children: [/* @__PURE__ */
|
|
213
|
+
children: [/* @__PURE__ */ p("div", {
|
|
202
214
|
className: "flex-1 min-w-0",
|
|
203
|
-
children:
|
|
204
|
-
className: "flex items-center gap-2",
|
|
205
|
-
children: [/* @__PURE__ */
|
|
206
|
-
type:
|
|
215
|
+
children: q ? /* @__PURE__ */ m("div", {
|
|
216
|
+
className: "flex min-w-0 items-center gap-2",
|
|
217
|
+
children: [/* @__PURE__ */ p(r, {
|
|
218
|
+
type: q.type,
|
|
207
219
|
size: "sm"
|
|
208
|
-
}), /* @__PURE__ */
|
|
220
|
+
}), /* @__PURE__ */ p("span", {
|
|
209
221
|
className: "text-sm text-text-primary truncate",
|
|
210
|
-
children:
|
|
222
|
+
children: q.name
|
|
211
223
|
})]
|
|
212
|
-
}) : /* @__PURE__ */
|
|
213
|
-
className: "text-sm text-text-
|
|
214
|
-
children:
|
|
224
|
+
}) : /* @__PURE__ */ p("span", {
|
|
225
|
+
className: "text-sm text-text-muted",
|
|
226
|
+
children: N
|
|
215
227
|
})
|
|
216
|
-
}), /* @__PURE__ */
|
|
228
|
+
}), /* @__PURE__ */ p(v, {
|
|
229
|
+
"aria-hidden": "true",
|
|
230
|
+
className: `w-4 h-4 shrink-0 text-text-secondary motion-safe:transition-transform ${k ? "transform rotate-180" : ""}`
|
|
231
|
+
})]
|
|
217
232
|
}),
|
|
218
|
-
|
|
233
|
+
E && D && /* @__PURE__ */ p("p", {
|
|
219
234
|
className: "mt-1 text-xs text-status-error-text",
|
|
220
|
-
children:
|
|
235
|
+
children: D
|
|
221
236
|
}),
|
|
222
|
-
|
|
237
|
+
k && /* @__PURE__ */ m(a, { children: [/* @__PURE__ */ p("div", {
|
|
223
238
|
className: "fixed inset-0 z-10",
|
|
224
|
-
onClick:
|
|
225
|
-
}), /* @__PURE__ */
|
|
226
|
-
className: "absolute left-0 right-0 top-full mt-1 z-20 bg-bg-surface border border-border-default rounded-md shadow-lg max-h-80 flex flex-col overflow-hidden",
|
|
239
|
+
onClick: X
|
|
240
|
+
}), /* @__PURE__ */ m("div", {
|
|
241
|
+
className: "absolute left-0 right-0 top-full mt-1 z-20 bg-bg-surface border border-[var(--color-border-default)] rounded-md shadow-lg max-h-80 flex flex-col overflow-hidden",
|
|
227
242
|
children: [
|
|
228
|
-
/* @__PURE__ */
|
|
229
|
-
className: "p-2 border-b border-border-default",
|
|
230
|
-
children: /* @__PURE__ */
|
|
243
|
+
/* @__PURE__ */ p("div", {
|
|
244
|
+
className: "p-2 border-b border-[var(--color-border-default)]",
|
|
245
|
+
children: /* @__PURE__ */ p("input", {
|
|
231
246
|
type: "text",
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
247
|
+
"aria-label": O("bigconsole.parsers.selector.searchPlaceholder", "Search parsers..."),
|
|
248
|
+
placeholder: O("bigconsole.parsers.selector.searchPlaceholder", "Search parsers..."),
|
|
249
|
+
value: j,
|
|
250
|
+
onChange: (e) => M(e.target.value),
|
|
251
|
+
className: "\n w-full min-w-0 min-h-control-md px-3 py-2\n bg-bg-sunken\n border border-[var(--color-border-default)]\n rounded-md\n text-sm text-text-primary\n placeholder:text-text-muted\n focus:outline-none\n focus:border-action-primary-bg\n focus:ring-2\n focus:ring-action-primary-bg/20\n "
|
|
236
252
|
})
|
|
237
253
|
}),
|
|
238
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ p("div", {
|
|
239
255
|
className: "overflow-y-auto flex-1",
|
|
240
|
-
children:
|
|
256
|
+
children: U ? /* @__PURE__ */ p("div", {
|
|
241
257
|
className: "p-4 text-center text-sm text-text-secondary",
|
|
242
|
-
children:
|
|
243
|
-
}) :
|
|
258
|
+
children: O("bigconsole.parsers.selector.loading", "Loading parsers...")
|
|
259
|
+
}) : W.length === 0 ? /* @__PURE__ */ p("div", {
|
|
244
260
|
className: "p-4 text-center text-sm text-text-secondary",
|
|
245
|
-
children:
|
|
246
|
-
}) : /* @__PURE__ */
|
|
247
|
-
/* @__PURE__ */
|
|
261
|
+
children: O("bigconsole.parsers.selector.empty", "No parsers found")
|
|
262
|
+
}) : /* @__PURE__ */ m(a, { children: [
|
|
263
|
+
/* @__PURE__ */ p("button", {
|
|
248
264
|
type: "button",
|
|
249
|
-
onClick: () =>
|
|
265
|
+
onClick: () => J(null),
|
|
250
266
|
className: `
|
|
251
|
-
w-full px-3 py-2
|
|
267
|
+
w-full min-h-control-md px-3 py-2
|
|
252
268
|
text-left text-sm
|
|
253
269
|
hover:bg-bg-sunken
|
|
254
|
-
transition-colors
|
|
255
|
-
|
|
270
|
+
motion-safe:transition-colors
|
|
271
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface
|
|
272
|
+
${o === null ? "bg-action-primary-bg/10 text-action-primary-bg" : "text-text-secondary"}
|
|
256
273
|
`,
|
|
257
|
-
children: /* @__PURE__ */
|
|
274
|
+
children: /* @__PURE__ */ p("span", {
|
|
258
275
|
className: "italic",
|
|
259
|
-
children:
|
|
276
|
+
children: O("bigconsole.parsers.selector.none", "None")
|
|
260
277
|
})
|
|
261
278
|
}),
|
|
262
|
-
|
|
263
|
-
className:
|
|
264
|
-
children: /* @__PURE__ */
|
|
265
|
-
className:
|
|
266
|
-
children:
|
|
279
|
+
G.length > 0 && /* @__PURE__ */ m(a, { children: [/* @__PURE__ */ p("div", {
|
|
280
|
+
className: g,
|
|
281
|
+
children: /* @__PURE__ */ p("span", {
|
|
282
|
+
className: _,
|
|
283
|
+
children: O("bigconsole.parsers.selector.dashboardParsers", "Dashboard Parsers")
|
|
267
284
|
})
|
|
268
|
-
}),
|
|
285
|
+
}), G.map((e) => /* @__PURE__ */ p(b, {
|
|
269
286
|
parser: e,
|
|
270
|
-
isSelected:
|
|
271
|
-
onSelect:
|
|
287
|
+
isSelected: o === e.id,
|
|
288
|
+
onSelect: J
|
|
272
289
|
}, e.id))] }),
|
|
273
|
-
|
|
274
|
-
className:
|
|
275
|
-
children: /* @__PURE__ */
|
|
276
|
-
className:
|
|
277
|
-
children:
|
|
290
|
+
K.length > 0 && /* @__PURE__ */ m(a, { children: [/* @__PURE__ */ p("div", {
|
|
291
|
+
className: g,
|
|
292
|
+
children: /* @__PURE__ */ p("span", {
|
|
293
|
+
className: _,
|
|
294
|
+
children: O("bigconsole.parsers.selector.globalParsers", "Global Parsers")
|
|
278
295
|
})
|
|
279
|
-
}),
|
|
296
|
+
}), K.map((e) => /* @__PURE__ */ p(b, {
|
|
280
297
|
parser: e,
|
|
281
|
-
isSelected:
|
|
282
|
-
onSelect:
|
|
298
|
+
isSelected: o === e.id,
|
|
299
|
+
onSelect: J,
|
|
283
300
|
isGlobal: !0
|
|
284
301
|
}, e.id))] })
|
|
285
302
|
] })
|
|
286
303
|
}),
|
|
287
|
-
/* @__PURE__ */
|
|
304
|
+
/* @__PURE__ */ p("div", {
|
|
288
305
|
className: "p-2 border-t border-border-default",
|
|
289
|
-
children: /* @__PURE__ */
|
|
306
|
+
children: /* @__PURE__ */ m("button", {
|
|
290
307
|
type: "button",
|
|
291
|
-
onClick:
|
|
308
|
+
onClick: Z,
|
|
292
309
|
className: "\n w-full flex items-center gap-2\n px-3 py-2\n text-sm font-medium text-action-primary-bg\n rounded-md\n hover:bg-action-primary-bg/10\n transition-colors\n ",
|
|
293
|
-
children: [/* @__PURE__ */
|
|
310
|
+
children: [/* @__PURE__ */ p(d, { className: "w-4 h-4" }), O("bigconsole.parsers.selector.createNew", "Create new parser")]
|
|
294
311
|
})
|
|
295
312
|
})
|
|
296
313
|
]
|
|
@@ -299,6 +316,6 @@ var m = "default", h = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
|
299
316
|
});
|
|
300
317
|
});
|
|
301
318
|
//#endregion
|
|
302
|
-
export {
|
|
319
|
+
export { x as default };
|
|
303
320
|
|
|
304
321
|
//# sourceMappingURL=ParserSelector.js.map
|