@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.
Files changed (247) hide show
  1. package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
  2. package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
  3. package/dist/bigconsole/components/DrilldownModal.js +54 -50
  4. package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
  5. package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
  6. package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
  8. package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
  9. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
  10. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
  11. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
  12. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
  13. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
  14. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  15. package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
  16. package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
  17. package/dist/bigconsole/components/common/Section.js +70 -0
  18. package/dist/bigconsole/components/common/Section.js.map +1 -0
  19. package/dist/bigconsole/components/common/index.js +2 -0
  20. package/dist/bigconsole/components/common/sectionStyles.js +42 -0
  21. package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
  22. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
  23. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  24. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
  25. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  26. package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
  27. package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
  28. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
  29. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  30. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
  31. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  32. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
  33. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
  34. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
  35. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  36. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
  37. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  38. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
  39. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  40. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
  41. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  42. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
  43. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  44. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
  45. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
  46. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
  47. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  48. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
  49. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  50. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
  51. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  52. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
  53. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
  54. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
  55. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
  56. package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
  57. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  58. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
  59. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  60. package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
  61. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  62. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
  63. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
  64. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
  65. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  66. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
  67. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  68. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
  69. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  70. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
  71. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
  72. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
  73. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
  74. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
  75. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  76. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
  77. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
  78. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
  79. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
  80. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
  81. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  82. package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
  83. package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
  84. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
  85. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
  86. package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
  87. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  88. package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
  89. package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
  90. package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
  91. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  92. package/dist/bigconsole/components/parser/ParserCard.js +133 -114
  93. package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
  94. package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
  95. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  96. package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
  97. package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
  98. package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
  99. package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
  100. package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
  101. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  102. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
  103. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
  104. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
  105. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
  106. package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
  107. package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
  108. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
  109. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  110. package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
  111. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  112. package/dist/bigconsole/components/preview/previewShared.js +41 -23
  113. package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
  114. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
  115. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  116. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
  117. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  118. package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
  119. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  120. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
  121. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
  122. package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
  123. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  124. package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
  125. package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
  126. package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
  127. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  128. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
  129. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
  130. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
  131. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  132. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
  133. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  134. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
  135. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  136. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
  137. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  138. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
  139. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
  140. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
  141. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  142. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
  143. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
  144. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
  145. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
  146. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
  147. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  148. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
  149. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
  150. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
  151. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  152. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
  153. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
  154. package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
  155. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  156. package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
  157. package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
  158. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
  159. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
  160. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
  161. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  162. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
  163. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
  164. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
  165. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  166. package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
  167. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
  168. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  169. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
  170. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  171. package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
  172. package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
  173. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
  174. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
  175. package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
  176. package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
  177. package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
  178. package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
  179. package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
  180. package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
  181. package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
  182. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  183. package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
  184. package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
  185. package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
  186. package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
  187. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
  188. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
  189. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
  190. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
  191. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
  192. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
  193. package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
  194. package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
  195. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
  196. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  197. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
  198. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  199. package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
  200. package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
  201. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
  202. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
  203. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
  204. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
  205. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
  206. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  207. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
  208. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  209. package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
  210. package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
  211. package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
  212. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  213. package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
  214. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  215. package/dist/bigconsole/pages/DashboardsPage.js +838 -800
  216. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  217. package/dist/bigconsole/pages/DataParsersPage.js +263 -315
  218. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  219. package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
  220. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  221. package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
  222. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  223. package/dist/bigconsole/pages/DataSinksPage.js +356 -458
  224. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  225. package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
  226. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  227. package/dist/bigconsole/pages/HomePage.js +186 -193
  228. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  229. package/dist/bigconsole/pages/InsightsPage.js +887 -740
  230. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  231. package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
  232. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  233. package/dist/bigconsole/pages/ParserViewPage.js +368 -342
  234. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  235. package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
  236. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  237. package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
  238. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  239. package/dist/bigconsole/pages/PipelinesPage.js +248 -298
  240. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  241. package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
  242. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  243. package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
  244. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  245. package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
  246. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  247. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ParserViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/ParserViewPage.tsx"],"sourcesContent":["/**\n * Parser View Page\n *\n * Page for viewing Parser details, expression, and test execution.\n */\n\nimport { memo, useState, useEffect, useCallback } from 'react';\nimport { useParams } from 'react-router';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeCopyText, nativeImpact, nativeNotify, nativeToast } from '../../utils/nativeBridge';\nimport { formatDistanceToNow } from 'date-fns';\nimport { useParserOperations } from '../hooks/useParserOperations';\nimport { useParserStore } from '../store/parserStore';\nimport { useDataSinkOperations } from '../hooks/useDataSinkOperations';\nimport { ParserStatusBadge } from '../components/parser/ParserStatusBadge';\nimport { ParserTypeBadge } from '../components/parser/ParserTypeBadge';\nimport { ExpressionEditor } from '../components/parser/ExpressionEditor';\nimport { ExportParserDialog } from '../components/parser/ExportParserDialog';\n\n// RBAC\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { AccessDenied, PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\n\n// i18n\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\n// fe-libs UI components\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Badge } from '@burdenoff/fe-libs/ui';\nimport { GlassCard, IllustratedEmptyState, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@burdenoff/fe-libs/ui';\n\n// Lucide icons\nimport {\n ArrowLeft,\n Edit,\n Play,\n Trash2,\n Copy,\n Check,\n FileCode2,\n Database,\n ArrowDown,\n Loader2,\n AlertCircle,\n AlertTriangle,\n Download,\n} from 'lucide-react';\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n// Default console ID for standalone parser viewing\nconst DEFAULT_CONSOLE_ID = 'default';\n\nexport const ParserViewPage = memo(function ParserViewPage() {\n const { parserId, consoleId: urlConsoleId } = useParams<{ parserId: string; consoleId?: string }>();\n const navigate = useAppNavigate();\n const { t } = useI18n();\n\n // Use URL consoleId or fall back to default\n const consoleId = urlConsoleId || DEFAULT_CONSOLE_ID;\n\n // Permissions\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canRead = hasPermission(BIGCONSOLE_PERMISSIONS.PARSER_READ);\n\n // Local state\n const [isDeleting, setIsDeleting] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [expressionCopied, setExpressionCopied] = useState(false);\n const [isTesting, setIsTesting] = useState(false);\n const [isExportDialogOpen, setIsExportDialogOpen] = useState(false);\n const [testResult, setTestResult] = useState<{\n success: boolean;\n output: unknown;\n error: string | null;\n executionTimeMs: number;\n } | null>(null);\n\n // Store\n const parser = useParserStore((state) => (parserId ? state.parsers.get(parserId) : undefined));\n\n // Operations - use consoleId from URL or default\n const { loading, error, fetchParser, deleteParser, executeParser } = useParserOperations({\n consoleId,\n skipFetch: true,\n });\n\n // DataSink operations for source datasink info\n const { dataSinks, fetchDataSinks } = useDataSinkOperations({ skipFetch: true });\n\n // Load parser on mount - always fetch full data to get expression\n useEffect(() => {\n if (parserId) {\n fetchParser(parserId);\n }\n }, [parserId, fetchParser]);\n\n // Fetch datasinks to show source name\n useEffect(() => {\n fetchDataSinks();\n }, [fetchDataSinks]);\n\n // Get source datasink name\n const sourceDataSink = parser?.inputSinkKey ? dataSinks.find((ds) => ds.key === parser.inputSinkKey) : null;\n\n // Handle back navigation\n const handleBack = useCallback(() => {\n // Navigate to dashboard-scoped parsers list if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers`);\n } else {\n navigate(`/parsers`);\n }\n }, [navigate, urlConsoleId]);\n\n // Handle edit\n const handleEdit = useCallback(() => {\n // Navigate to dashboard-scoped parser edit if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers/${parserId}/edit`);\n } else {\n navigate(`/parsers/${parserId}/edit`);\n }\n }, [navigate, parserId, urlConsoleId]);\n\n // Handle delete\n const handleDelete = useCallback(async () => {\n if (!parserId) return;\n setIsDeleting(true);\n try {\n const success = await deleteParser(parserId);\n if (success) {\n if (isNative()) void nativeNotify('success');\n // Navigate to dashboard-scoped parsers list if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers`);\n } else {\n navigate(`/parsers`);\n }\n } else if (isNative()) {\n void nativeNotify('error');\n }\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n } finally {\n setIsDeleting(false);\n setShowDeleteConfirm(false);\n }\n }, [parserId, deleteParser, navigate, urlConsoleId]);\n\n // Handle copy expression\n const handleCopyExpression = useCallback(async () => {\n if (!parser?.expression) return;\n try {\n await nativeCopyText(parser.expression);\n setExpressionCopied(true);\n if (isNative()) void nativeToast(t('bigconsole.parsers.view.expressionCopied', 'Expression copied'));\n setTimeout(() => setExpressionCopied(false), 2000);\n } catch (err) {}\n }, [parser?.expression, t]);\n\n // Handle test execution\n const handleTestExecute = useCallback(async () => {\n if (!parserId) return;\n setIsTesting(true);\n setTestResult(null);\n try {\n const result = await executeParser(parserId);\n if (result) {\n setTestResult({\n success: result.success,\n output: result.output,\n error: result.error,\n executionTimeMs: result.executionTimeMs,\n });\n }\n } catch (err) {\n setTestResult({\n success: false,\n output: null,\n error: err instanceof Error ? err.message : t('bigconsole.parsers.view.executionFailed', 'Execution failed'),\n executionTimeMs: 0,\n });\n } finally {\n setIsTesting(false);\n }\n }, [parserId, executeParser, t]);\n\n // Navigate to source datasink\n const handleViewSourceDataSink = useCallback(() => {\n if (sourceDataSink) {\n navigate(`/datasinks/${sourceDataSink.id}`);\n }\n }, [navigate, sourceDataSink]);\n\n // Handle export\n const handleExport = useCallback(() => {\n setIsExportDialogOpen(true);\n }, []);\n\n const handleExportClose = useCallback(() => {\n setIsExportDialogOpen(false);\n }, []);\n\n // Loading state (wait for both the parser fetch and the permission load)\n if ((loading && !parser) || permissionsLoading) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <Loader2 className=\"w-8 h-8 text-text-secondary animate-spin\" />\n </div>\n );\n }\n\n // Read gate — no permission to view this parser\n if (!canRead) {\n return (\n <AccessDenied\n title={t('bigconsole.parsers.accessDenied.title', 'Access Denied')}\n description={t('bigconsole.parsers.accessDenied.view', \"You don't have permission to view this parser.\")}\n />\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px] p-card-padding\">\n <div className=\"text-center\">\n <AlertCircle className=\"w-12 h-12 text-status-error-text mx-auto mb-4\" />\n <p className=\"text-status-error-text text-body-sm font-medium mb-2\">\n {t('bigconsole.parsers.errors.viewLoadFailed', 'Failed to load Parser')}\n </p>\n <p className=\"text-text-tertiary text-body-xs mb-6\">{error.message}</p>\n <Button onClick={handleBack} variant=\"ghost\" size=\"sm\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.goBack', 'Go back')}\n </Button>\n </div>\n </div>\n );\n }\n\n // Not found state\n if (!parser) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px] p-card-padding\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('bigconsole.parsers.view.notFoundTitle', 'Parser not found')}\n description={t(\n 'bigconsole.parsers.view.notFoundDescription',\n \"The Parser you're looking for doesn't exist or has been deleted.\"\n )}\n action={\n <Button onClick={handleBack} variant=\"default\" size=\"default\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.goBackToParsers', 'Go back to Parsers')}\n </Button>\n }\n />\n </div>\n );\n }\n\n return (\n <div className=\"p-card-padding space-y-6\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4\">\n <div className=\"flex-1\">\n <Button onClick={handleBack} variant=\"ghost\" size=\"sm\" className=\"mb-4\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.view.backToParsers', 'Back to Parsers')}\n </Button>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h1 className=\"text-heading-h1 font-bold text-text-primary\">\n {parser.name || t('bigconsole.parsers.view.untitled', 'Untitled')}\n </h1>\n <ParserTypeBadge type={parser.type} />\n <ParserStatusBadge status={parser.status} />\n </div>\n {parser.description && <p className=\"text-body-sm text-text-secondary mt-2\">{parser.description}</p>}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_EXECUTE} deniedBehavior=\"disable\">\n <Button onClick={handleTestExecute} disabled={isTesting} variant=\"secondary\" size=\"default\">\n <Play className=\"w-4 h-4 mr-2\" />\n {isTesting\n ? t('bigconsole.parsers.view.running', 'Running...')\n : t('bigconsole.parsers.actions.execute', 'Execute')}\n </Button>\n </PermissionButton>\n <Button onClick={handleExport} variant=\"secondary\" size=\"default\">\n <Download className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.export', 'Export')}\n </Button>\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_UPDATE} deniedBehavior=\"disable\">\n <Button onClick={handleEdit} variant=\"secondary\" size=\"default\">\n <Edit className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.edit', 'Edit')}\n </Button>\n </PermissionButton>\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_DELETE} deniedBehavior=\"hide\">\n <Button\n onClick={() => setShowDeleteConfirm(true)}\n disabled={isDeleting}\n variant=\"destructive\"\n size=\"default\"\n >\n <Trash2 className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.delete', 'Delete')}\n </Button>\n </PermissionButton>\n </div>\n </div>\n\n <PagePurpose>\n {t(\n 'bigconsole.parsers.view.purpose',\n 'A parser turns raw input into structured fields using its expression. Review or copy the expression, run it against a sample to see the output, then edit it or use it inside a pipeline to shape incoming data.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"bigconsole-parser-view\"\n steps={[\n {\n id: 'execute',\n label: t('bigconsole.parsers.view.nextSteps.executeLabel', 'Run a test execution'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.executeDescription',\n 'Check the expression produces the fields you expect.'\n ),\n onClick: handleTestExecute,\n },\n {\n id: 'edit',\n label: t('bigconsole.parsers.view.nextSteps.editLabel', 'Edit the expression'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.editDescription',\n 'Refine how this parser maps your input.'\n ),\n onClick: handleEdit,\n },\n {\n id: 'pipeline',\n label: t('bigconsole.parsers.view.nextSteps.pipelineLabel', 'Use it in a pipeline'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.pipelineDescription',\n 'Chain this parser with a data sink to process data end to end.'\n ),\n onClick: () => navigate('/pipelines'),\n },\n ]}\n />\n\n {/* Main Content Grid */}\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Expression Panel (2/3 width) — primary emphasis zone */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Expression */}\n <GlassCard treatment=\"glass\" glow>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0\">\n <CardTitle className=\"flex items-center gap-2\">\n <FileCode2 className=\"w-4 h-4 text-text-secondary\" />\n {t('bigconsole.parsers.view.expression', 'Expression')}\n <Badge variant=\"secondary\" className=\"text-xs uppercase\">\n {parser.type}\n </Badge>\n </CardTitle>\n <Button onClick={handleCopyExpression} variant=\"ghost\" size=\"sm\">\n {expressionCopied ? (\n <>\n <Check className=\"w-3.5 h-3.5 text-status-success-text mr-2\" />\n {t('bigconsole.parsers.view.copied', 'Copied!')}\n </>\n ) : (\n <>\n <Copy className=\"w-3.5 h-3.5 mr-2\" />\n {t('bigconsole.parsers.actions.copy', 'Copy')}\n </>\n )}\n </Button>\n </CardHeader>\n <CardContent>\n <ExpressionEditor value={parser.expression} type={parser.type} readOnly height=\"300px\" />\n </CardContent>\n </GlassCard>\n\n {/* Test Result Panel */}\n {testResult && (\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0\">\n <CardTitle className=\"flex items-center gap-2\">\n {t('bigconsole.parsers.view.executionResult', 'Execution Result')}\n <Badge variant={testResult.success ? 'default' : 'destructive'}>\n {testResult.success\n ? t('bigconsole.parsers.view.success', 'Success')\n : t('bigconsole.parsers.view.failed', 'Failed')}\n </Badge>\n </CardTitle>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {testResult.executionTimeMs}ms\n </Badge>\n </CardHeader>\n <CardContent>\n {testResult.error ? (\n <div className=\"bg-status-error-bg/5 border border-status-error-border/20 rounded-md p-4\">\n <p className=\"text-body-sm text-status-error-text font-mono\">{testResult.error}</p>\n </div>\n ) : (\n <pre className=\"text-body-sm text-text-primary font-mono bg-bg-sunken rounded-md p-4 overflow-auto max-h-[300px]\">\n {JSON.stringify(testResult.output, null, 2)}\n </pre>\n )}\n </CardContent>\n </Card>\n )}\n </div>\n\n {/* Side Panel (1/3 width) */}\n <div className=\"space-y-6\">\n {/* Data Flow */}\n <Card>\n <CardHeader>\n <CardTitle>{t('bigconsole.parsers.view.dataFlow', 'Data Flow')}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Source DataSink */}\n <div>\n <label className=\"text-xs font-medium text-text-secondary\">\n {t('bigconsole.parsers.view.sourceDataSink', 'Source DataSink')}\n </label>\n {parser.inputSinkKey ? (\n <div className=\"mt-1\">\n <p className=\"text-body-sm text-text-primary font-mono\">{parser.inputSinkKey}</p>\n {sourceDataSink && (\n <Button onClick={handleViewSourceDataSink} variant=\"link\" size=\"sm\" className=\"mt-1 p-0 h-auto\">\n <Database className=\"w-3 h-3 mr-1\" />\n {t('bigconsole.parsers.view.viewDataSink', 'View {{name}}', {\n name: sourceDataSink.name || t('bigconsole.parsers.view.dataSinkFallback', 'DataSink'),\n })}\n </Button>\n )}\n </div>\n ) : (\n <p className=\"text-body-sm text-text-tertiary mt-1\">\n {t('bigconsole.parsers.view.noneConfigured', 'None configured')}\n </p>\n )}\n </div>\n\n {/* Arrow */}\n <div className=\"flex items-center justify-center py-1\">\n <ArrowDown className=\"w-4 h-4 text-text-tertiary\" />\n </div>\n\n {/* Output Key */}\n <div>\n <label className=\"text-xs font-medium text-text-secondary\">\n {t('bigconsole.parsers.view.outputKey', 'Output Key')}\n </label>\n <p className=\"text-body-sm text-text-primary font-mono mt-1\">\n {parser.outputKey || t('bigconsole.parsers.view.notConfigured', 'Not configured')}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Configuration */}\n <Card>\n <CardHeader>\n <CardTitle>{t('bigconsole.parsers.view.configuration', 'Configuration')}</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-4 text-body-sm\">\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.status', 'Status')}</dt>\n <dd>\n <ParserStatusBadge status={parser.status} />\n </dd>\n </div>\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.type', 'Type')}</dt>\n <dd>\n <ParserTypeBadge type={parser.type} />\n </dd>\n </div>\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.cacheTtl', 'Cache TTL')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.ttl\n ? t('bigconsole.parsers.view.ttlSeconds', '{{ttl}}s', { ttl: parser.ttl })\n : t('bigconsole.parsers.view.noCaching', 'No caching')}\n </dd>\n </div>\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.version', 'Version')}</dt>\n <dd className=\"text-text-primary font-medium\">{parser.version || 1}</dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n\n {/* Timestamps */}\n <Card>\n <CardHeader>\n <CardTitle>{t('bigconsole.parsers.view.timestamps', 'Timestamps')}</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-4 text-body-sm\">\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.created', 'Created')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.createdAt\n ? formatDistanceToNow(new Date(parser.createdAt), { addSuffix: true })\n : t('bigconsole.parsers.view.unknown', 'Unknown')}\n </dd>\n </div>\n <div className=\"flex justify-between items-center\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.updated', 'Updated')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.updatedAt\n ? formatDistanceToNow(new Date(parser.updatedAt), { addSuffix: true })\n : t('bigconsole.parsers.view.unknown', 'Unknown')}\n </dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n </div>\n </div>\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('bigconsole.parsers.view.deleteDialogTitle', 'Delete Parser')}</DialogTitle>\n <DialogDescription>\n {t('bigconsole.parsers.view.deleteConfirmPrefix', 'Are you sure you want to delete')}{' '}\n <strong>{parser.name}</strong>\n {t('bigconsole.parsers.view.deleteConfirmSuffix', '? This action cannot be undone.')}\n </DialogDescription>\n </DialogHeader>\n <div className=\"bg-status-warning-bg/10 border border-status-warning-border/20 rounded-md p-4 flex items-start gap-2\">\n <AlertTriangle className=\"w-4 h-4 text-status-warning-text flex-shrink-0 mt-0.5\" />\n <p className=\"text-body-xs text-status-warning-text\">\n {t(\n 'bigconsole.parsers.view.deleteWarning',\n 'Widgets and pipelines using this parser may stop working correctly after deletion.'\n )}\n </p>\n </div>\n <DialogFooter>\n <Button onClick={() => setShowDeleteConfirm(false)} variant=\"secondary\">\n {t('bigconsole.parsers.actions.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n disabled={isDeleting}\n variant=\"destructive\"\n >\n {isDeleting\n ? t('bigconsole.parsers.view.deleting', 'Deleting...')\n : t('bigconsole.parsers.view.deleteDialogTitle', 'Delete Parser')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Export Parser Dialog */}\n <ExportParserDialog\n isOpen={isExportDialogOpen}\n parserId={parserId || null}\n parserName={parser.name}\n onClose={handleExportClose}\n />\n </div>\n );\n});\n\nexport default ParserViewPage;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+DA,IAAM,KAAqB,WAEd,IAAiB,EAAK,WAA0B;CAC3D,IAAM,EAAE,aAAU,WAAW,MAAiB,IAAqD,EAC7F,IAAW,IAAgB,EAC3B,EAAE,SAAM,IAAS,EAGjB,KAAY,KAAgB,IAG5B,EAAE,mBAAe,WAAW,OAAuB,GAAgB,EACnE,KAAU,GAAc,EAAuB,YAAY,EAG3D,CAAC,GAAY,KAAiB,EAAS,GAAM,EAC7C,CAAC,IAAmB,KAAwB,EAAS,GAAM,EAC3D,CAAC,IAAkB,KAAuB,EAAS,GAAM,EACzD,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,IAAoB,KAAyB,EAAS,GAAM,EAC7D,CAAC,GAAY,KAAiB,EAK1B,KAAK,EAGT,IAAS,GAAgB,MAAW,IAAW,EAAM,QAAQ,IAAI,EAAS,GAAG,KAAA,EAAW,EAGxF,EAAE,aAAS,UAAO,gBAAa,iBAAc,qBAAkB,EAAoB;EACvF;EACA,WAAW;EACZ,CAAC,EAGI,EAAE,eAAW,sBAAmB,GAAsB,EAAE,WAAW,IAAM,CAAC;AAUhF,CAPA,QAAgB;AACd,EAAI,KACF,EAAY,EAAS;IAEtB,CAAC,GAAU,EAAY,CAAC,EAG3B,QAAgB;AACd,KAAgB;IACf,CAAC,EAAe,CAAC;CAGpB,IAAM,IAAiB,GAAQ,eAAe,GAAU,MAAM,MAAO,EAAG,QAAQ,EAAO,aAAa,GAAG,MAGjG,IAAa,QAAkB;AAEnC,EACE,EADE,IACO,eAAe,EAAa,YAE5B,WAAW;IAErB,CAAC,GAAU,EAAa,CAAC,EAGtB,IAAa,QAAkB;AAEnC,EACE,EADE,IACO,eAAe,EAAa,WAAW,EAAS,SAEhD,YAAY,EAAS,OAAO;IAEtC;EAAC;EAAU;EAAU;EAAa,CAAC,EAGhC,KAAe,EAAY,YAAY;AACtC,SACL;KAAc,GAAK;AACnB,OAAI;AAEF,IADgB,MAAM,EAAa,EAAS,IAEtC,GAAU,IAAO,EAAa,UAAU,EAG1C,EADE,IACO,eAAe,EAAa,YAE5B,WAAW,IAEb,GAAU,IACd,EAAa,QAAQ;WAEhB;AACZ,IAAI,GAAU,IAAO,EAAa,QAAQ;aAClC;AAER,IADA,EAAc,GAAM,EACpB,EAAqB,GAAM;;;IAE5B;EAAC;EAAU;EAAc;EAAU;EAAa,CAAC,EAG9C,KAAuB,EAAY,YAAY;AAC9C,SAAQ,WACb,KAAI;AAIF,GAHA,MAAM,GAAe,EAAO,WAAW,EACvC,EAAoB,GAAK,EACrB,GAAU,IAAO,GAAY,EAAE,4CAA4C,oBAAoB,CAAC,EACpG,iBAAiB,EAAoB,GAAM,EAAE,IAAK;UACtC;IACb,CAAC,GAAQ,YAAY,EAAE,CAAC,EAGrB,IAAoB,EAAY,YAAY;AAC3C,SAEL;GADA,EAAa,GAAK,EAClB,EAAc,KAAK;AACnB,OAAI;IACF,IAAM,IAAS,MAAM,EAAc,EAAS;AAC5C,IAAI,KACF,EAAc;KACZ,SAAS,EAAO;KAChB,QAAQ,EAAO;KACf,OAAO,EAAO;KACd,iBAAiB,EAAO;KACzB,CAAC;YAEG,GAAK;AACZ,MAAc;KACZ,SAAS;KACT,QAAQ;KACR,OAAO,aAAe,QAAQ,EAAI,UAAU,EAAE,2CAA2C,mBAAmB;KAC5G,iBAAiB;KAClB,CAAC;aACM;AACR,MAAa,GAAM;;;IAEpB;EAAC;EAAU;EAAe;EAAE,CAAC,EAG1B,KAA2B,QAAkB;AACjD,EAAI,KACF,EAAS,cAAc,EAAe,KAAK;IAE5C,CAAC,GAAU,EAAe,CAAC,EAGxB,KAAe,QAAkB;AACrC,IAAsB,GAAK;IAC1B,EAAE,CAAC,EAEA,KAAoB,QAAkB;AAC1C,IAAsB,GAAM;IAC3B,EAAE,CAAC;AA8DN,QA3DK,MAAW,CAAC,KAAW,KAExB,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAS,WAAU,4CAA6C,CAAA;EAC5D,CAAA,GAKL,KAUD,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,IAAD,EAAa,WAAU,iDAAkD,CAAA;IACzE,kBAAC,KAAD;KAAG,WAAU;eACV,EAAE,4CAA4C,wBAAwB;KACrE,CAAA;IACJ,kBAAC,KAAD;KAAG,WAAU;eAAwC,EAAM;KAAY,CAAA;IACvE,kBAAC,GAAD;KAAQ,SAAS;KAAY,SAAQ;KAAQ,MAAK;eAAlD,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,qCAAqC,UAAU,CAC3C;;IACL;;EACF,CAAA,GAKL,IAsBH,kBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAQ,SAAS;OAAY,SAAQ;OAAQ,MAAK;OAAK,WAAU;iBAAjE,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,yCAAyC,kBAAkB,CACvD;;MACT,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAO,QAAQ,EAAE,oCAAoC,WAAW;SAC9D,CAAA;QACL,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA;QACtC,kBAAC,GAAD,EAAmB,QAAQ,EAAO,QAAU,CAAA;QACxC;;MACL,EAAO,eAAe,kBAAC,KAAD;OAAG,WAAU;iBAAyC,EAAO;OAAgB,CAAA;MAChG;QAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAkB,YAAY,EAAuB;OAAgB,gBAAe;iBAClF,kBAAC,GAAD;QAAQ,SAAS;QAAmB,UAAU;QAAW,SAAQ;QAAY,MAAK;kBAAlF,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,IACG,EAAE,mCAAmC,aAAa,GAClD,EAAE,sCAAsC,UAAU,CAC/C;;OACQ,CAAA;MACnB,kBAAC,GAAD;OAAQ,SAAS;OAAc,SAAQ;OAAY,MAAK;iBAAxD,CACE,kBAAC,IAAD,EAAU,WAAU,gBAAiB,CAAA,EACpC,EAAE,qCAAqC,SAAS,CAC1C;;MACT,kBAAC,GAAD;OAAkB,YAAY,EAAuB;OAAe,gBAAe;iBACjF,kBAAC,GAAD;QAAQ,SAAS;QAAY,SAAQ;QAAY,MAAK;kBAAtD,CACE,kBAAC,IAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAE,mCAAmC,OAAO,CACtC;;OACQ,CAAA;MACnB,kBAAC,GAAD;OAAkB,YAAY,EAAuB;OAAe,gBAAe;iBACjF,kBAAC,GAAD;QACE,eAAe,EAAqB,GAAK;QACzC,UAAU;QACV,SAAQ;QACR,MAAK;kBAJP,CAME,kBAAC,IAAD,EAAQ,WAAU,gBAAiB,CAAA,EAClC,EAAE,qCAAqC,SAAS,CAC1C;;OACQ,CAAA;MACf;OACF;;GAEN,kBAAC,GAAD,EAAA,UACG,EACC,mCACA,mNACD,EACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO;KACL;MACE,IAAI;MACJ,OAAO,EAAE,kDAAkD,uBAAuB;MAClF,aAAa,EACX,wDACA,uDACD;MACD,SAAS;MACV;KACD;MACE,IAAI;MACJ,OAAO,EAAE,+CAA+C,sBAAsB;MAC9E,aAAa,EACX,qDACA,0CACD;MACD,SAAS;MACV;KACD;MACE,IAAI;MACJ,OAAO,EAAE,mDAAmD,uBAAuB;MACnF,aAAa,EACX,yDACA,iEACD;MACD,eAAe,EAAS,aAAa;MACtC;KACF;IACD,CAAA;GAGF,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,GAAD;MAAW,WAAU;MAAQ,MAAA;gBAA7B,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAArB;SACE,kBAAC,IAAD,EAAW,WAAU,+BAAgC,CAAA;SACpD,EAAE,sCAAsC,aAAa;SACtD,kBAAC,GAAD;UAAO,SAAQ;UAAY,WAAU;oBAClC,EAAO;UACF,CAAA;SACE;WACZ,kBAAC,GAAD;QAAQ,SAAS;QAAsB,SAAQ;QAAQ,MAAK;kBACzD,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD,EAAO,WAAU,6CAA8C,CAAA,EAC9D,EAAE,kCAAkC,UAAU,CAC9C,EAAA,CAAA,GAEH,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD,EAAM,WAAU,oBAAqB,CAAA,EACpC,EAAE,mCAAmC,OAAO,CAC5C,EAAA,CAAA;QAEE,CAAA,CACE;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,IAAD;OAAkB,OAAO,EAAO;OAAY,MAAM,EAAO;OAAM,UAAA;OAAS,QAAO;OAAU,CAAA,EAC7E,CAAA,CACJ;SAGX,KACC,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAArB,CACG,EAAE,2CAA2C,mBAAmB,EACjE,kBAAC,GAAD;QAAO,SAAS,EAAW,UAAU,YAAY;kBAC9C,EAAW,UACR,EAAE,mCAAmC,UAAU,GAC/C,EAAE,kCAAkC,SAAS;QAC3C,CAAA,CACE;UACZ,kBAAC,GAAD;OAAO,SAAQ;OAAY,WAAU;iBAArC,CACG,EAAW,iBAAgB,KACtB;SACG;SACb,kBAAC,GAAD,EAAA,UACG,EAAW,QACV,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,KAAD;OAAG,WAAU;iBAAiD,EAAW;OAAU,CAAA;MAC/E,CAAA,GAEN,kBAAC,OAAD;MAAK,WAAU;gBACZ,KAAK,UAAU,EAAW,QAAQ,MAAM,EAAE;MACvC,CAAA,EAEI,CAAA,CACT,EAAA,CAAA,CAEL;QAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAY,EAAE,oCAAoC,YAAY,EAAa,CAAA,EAChE,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QAEE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,WAAU;mBACd,EAAE,0CAA0C,kBAAkB;SACzD,CAAA,EACP,EAAO,eACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,KAAD;UAAG,WAAU;oBAA4C,EAAO;UAAiB,CAAA,EAChF,KACC,kBAAC,GAAD;UAAQ,SAAS;UAA0B,SAAQ;UAAO,MAAK;UAAK,WAAU;oBAA9E,CACE,kBAAC,IAAD,EAAU,WAAU,gBAAiB,CAAA,EACpC,EAAE,wCAAwC,iBAAiB,EAC1D,MAAM,EAAe,QAAQ,EAAE,4CAA4C,WAAW,EACvF,CAAC,CACK;YAEP;aAEN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAE,0CAA0C,kBAAkB;SAC7D,CAAA,CAEF,EAAA,CAAA;QAGN,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,IAAD,EAAW,WAAU,8BAA+B,CAAA;SAChD,CAAA;QAGN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,WAAU;mBACd,EAAE,qCAAqC,aAAa;SAC/C,CAAA,EACR,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAO,aAAa,EAAE,yCAAyC,iBAAiB;SAC/E,CAAA,CACA,EAAA,CAAA;QACF;UACM,CAAA,CACT,EAAA,CAAA;MAGP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAY,EAAE,yCAAyC,gBAAgB,EAAa,CAAA,EACzE,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAuB,EAAE,kCAAkC,SAAS;UAAM,CAAA,EACxF,kBAAC,MAAD,EAAA,UACE,kBAAC,GAAD,EAAmB,QAAQ,EAAO,QAAU,CAAA,EACzC,CAAA,CACD;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAuB,EAAE,gCAAgC,OAAO;UAAM,CAAA,EACpF,kBAAC,MAAD,EAAA,UACE,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA,EACnC,CAAA,CACD;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAuB,EAAE,oCAAoC,YAAY;UAAM,CAAA,EAC7F,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAO,MACJ,EAAE,sCAAsC,YAAY,EAAE,KAAK,EAAO,KAAK,CAAC,GACxE,EAAE,qCAAqC,aAAa;UACrD,CAAA,CACD;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,MAAD;UAAI,WAAU;oBAAuB,EAAE,mCAAmC,UAAU;UAAM,CAAA,EAC1F,kBAAC,MAAD;UAAI,WAAU;oBAAiC,EAAO,WAAW;UAAO,CAAA,CACpE;;QACH;UACO,CAAA,CACT,EAAA,CAAA;MAGP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAY,EAAE,sCAAsC,aAAa,EAAa,CAAA,EACnE,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,MAAD;OAAI,WAAU;iBAAd,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAuB,EAAE,mCAAmC,UAAU;SAAM,CAAA,EAC1F,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAO,YACJ,EAAoB,IAAI,KAAK,EAAO,UAAU,EAAE,EAAE,WAAW,IAAM,CAAC,GACpE,EAAE,mCAAmC,UAAU;SAChD,CAAA,CACD;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAuB,EAAE,mCAAmC,UAAU;SAAM,CAAA,EAC1F,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAO,YACJ,EAAoB,IAAI,KAAK,EAAO,UAAU,EAAE,EAAE,WAAW,IAAM,CAAC,GACpE,EAAE,mCAAmC,UAAU;SAChD,CAAA,CACD;UACH;UACO,CAAA,CACT,EAAA,CAAA;MACH;OACF;;GAGN,kBAAC,IAAD;IAAQ,MAAM;IAAmB,cAAc;cAC7C,kBAAC,IAAD,EAAA,UAAA;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAc,EAAE,6CAA6C,gBAAgB,EAAe,CAAA,EAC5F,kBAAC,IAAD,EAAA,UAAA;MACG,EAAE,+CAA+C,kCAAkC;MAAE;MACtF,kBAAC,UAAD,EAAA,UAAS,EAAO,MAAc,CAAA;MAC7B,EAAE,+CAA+C,kCAAkC;MAClE,EAAA,CAAA,CACP,EAAA,CAAA;KACf,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,IAAD,EAAe,WAAU,yDAA0D,CAAA,EACnF,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,yCACA,qFACD;OACC,CAAA,CACA;;KACN,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAQ,eAAe,EAAqB,GAAM;MAAE,SAAQ;gBACzD,EAAE,qCAAqC,SAAS;MAC1C,CAAA,EACT,kBAAC,GAAD;MACE,eAAe;AAER,OADL,GAAa,SAAS,EACjB,IAAc;;MAErB,UAAU;MACV,SAAQ;gBAEP,IACG,EAAE,oCAAoC,cAAc,GACpD,EAAE,6CAA6C,gBAAgB;MAC5D,CAAA,CACI,EAAA,CAAA;KACD,EAAA,CAAA;IACT,CAAA;GAGT,kBAAC,IAAD;IACE,QAAQ;IACR,UAAU,KAAY;IACtB,YAAY,EAAO;IACnB,SAAS;IACT,CAAA;GACE;MAlVJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,yCAAyC,mBAAmB;GACrE,aAAa,EACX,+CACA,mEACD;GACD,QACE,kBAAC,GAAD;IAAQ,SAAS;IAAY,SAAQ;IAAU,MAAK;cAApD,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,8CAA8C,qBAAqB,CAC/D;;GAEX,CAAA;EACE,CAAA,GA5CN,kBAAC,IAAD;EACE,OAAO,EAAE,yCAAyC,gBAAgB;EAClE,aAAa,EAAE,wCAAwC,iDAAiD;EACxG,CAAA;EA8WN"}
1
+ {"version":3,"file":"ParserViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/ParserViewPage.tsx"],"sourcesContent":["/**\n * Parser View Page\n *\n * Page for viewing Parser details, expression, and test execution.\n */\n\nimport { memo, useState, useEffect, useCallback } from 'react';\nimport { useParams } from 'react-router';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeCopyText, nativeImpact, nativeNotify, nativeToast } from '../../utils/nativeBridge';\nimport { formatDistanceToNow } from 'date-fns';\nimport { useParserOperations } from '../hooks/useParserOperations';\nimport { useParserStore } from '../store/parserStore';\nimport { useDataSinkOperations } from '../hooks/useDataSinkOperations';\nimport { ParserStatusBadge } from '../components/parser/ParserStatusBadge';\nimport { ParserTypeBadge } from '../components/parser/ParserTypeBadge';\nimport { ExpressionEditor } from '../components/parser/ExpressionEditor';\nimport { ExportParserDialog } from '../components/parser/ExportParserDialog';\nimport { Section, SectionStack } from '../components/common';\n\n// RBAC\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { AccessDenied, PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\n\n// i18n\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\n// fe-libs UI components\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Badge } from '@burdenoff/fe-libs/ui';\nimport { IllustratedEmptyState, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport {\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n} from '@burdenoff/fe-libs/ui';\n\n// Lucide icons\nimport {\n ArrowLeft,\n Edit,\n Play,\n Trash2,\n Copy,\n Check,\n FileCode2,\n Database,\n ArrowDown,\n Loader2,\n AlertCircle,\n AlertTriangle,\n Download,\n} from 'lucide-react';\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n// Default console ID for standalone parser viewing\nconst DEFAULT_CONSOLE_ID = 'default';\n\nexport const ParserViewPage = memo(function ParserViewPage() {\n const { parserId, consoleId: urlConsoleId } = useParams<{ parserId: string; consoleId?: string }>();\n const navigate = useAppNavigate();\n const { t } = useI18n();\n\n // Use URL consoleId or fall back to default\n const consoleId = urlConsoleId || DEFAULT_CONSOLE_ID;\n\n // Permissions\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canRead = hasPermission(BIGCONSOLE_PERMISSIONS.PARSER_READ);\n\n // Local state\n const [isDeleting, setIsDeleting] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [expressionCopied, setExpressionCopied] = useState(false);\n const [isTesting, setIsTesting] = useState(false);\n const [isExportDialogOpen, setIsExportDialogOpen] = useState(false);\n const [testResult, setTestResult] = useState<{\n success: boolean;\n output: unknown;\n error: string | null;\n executionTimeMs: number;\n } | null>(null);\n\n // Store\n const parser = useParserStore((state) => (parserId ? state.parsers.get(parserId) : undefined));\n\n // Operations - use consoleId from URL or default\n const { loading, error, fetchParser, deleteParser, executeParser } = useParserOperations({\n consoleId,\n skipFetch: true,\n });\n\n // DataSink operations for source datasink info\n const { dataSinks, fetchDataSinks } = useDataSinkOperations({ skipFetch: true });\n\n // Load parser on mount - always fetch full data to get expression\n useEffect(() => {\n if (parserId) {\n fetchParser(parserId);\n }\n }, [parserId, fetchParser]);\n\n // Fetch datasinks to show source name\n useEffect(() => {\n fetchDataSinks();\n }, [fetchDataSinks]);\n\n // Get source datasink name\n const sourceDataSink = parser?.inputSinkKey ? dataSinks.find((ds) => ds.key === parser.inputSinkKey) : null;\n\n // Handle back navigation\n const handleBack = useCallback(() => {\n // Navigate to dashboard-scoped parsers list if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers`);\n } else {\n navigate(`/parsers`);\n }\n }, [navigate, urlConsoleId]);\n\n // Handle edit\n const handleEdit = useCallback(() => {\n // Navigate to dashboard-scoped parser edit if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers/${parserId}/edit`);\n } else {\n navigate(`/parsers/${parserId}/edit`);\n }\n }, [navigate, parserId, urlConsoleId]);\n\n // Handle delete\n const handleDelete = useCallback(async () => {\n if (!parserId) return;\n setIsDeleting(true);\n try {\n const success = await deleteParser(parserId);\n if (success) {\n if (isNative()) void nativeNotify('success');\n // Navigate to dashboard-scoped parsers list if consoleId is provided\n if (urlConsoleId) {\n navigate(`/dashboards/${urlConsoleId}/parsers`);\n } else {\n navigate(`/parsers`);\n }\n } else if (isNative()) {\n void nativeNotify('error');\n }\n } catch {\n if (isNative()) void nativeNotify('error');\n } finally {\n setIsDeleting(false);\n setShowDeleteConfirm(false);\n }\n }, [parserId, deleteParser, navigate, urlConsoleId]);\n\n // Handle copy expression\n const handleCopyExpression = useCallback(async () => {\n if (!parser?.expression) return;\n try {\n await nativeCopyText(parser.expression);\n setExpressionCopied(true);\n if (isNative()) void nativeToast(t('bigconsole.parsers.view.expressionCopied', 'Expression copied'));\n setTimeout(() => setExpressionCopied(false), 2000);\n } catch {\n // Clipboard access is best-effort; the expression stays visible either way.\n }\n }, [parser?.expression, t]);\n\n // Handle test execution\n const handleTestExecute = useCallback(async () => {\n if (!parserId) return;\n setIsTesting(true);\n setTestResult(null);\n try {\n const result = await executeParser(parserId);\n if (result) {\n setTestResult({\n success: result.success,\n output: result.output,\n error: result.error,\n executionTimeMs: result.executionTimeMs,\n });\n }\n } catch (err) {\n setTestResult({\n success: false,\n output: null,\n error: err instanceof Error ? err.message : t('bigconsole.parsers.view.executionFailed', 'Execution failed'),\n executionTimeMs: 0,\n });\n } finally {\n setIsTesting(false);\n }\n }, [parserId, executeParser, t]);\n\n // Navigate to source datasink\n const handleViewSourceDataSink = useCallback(() => {\n if (sourceDataSink) {\n navigate(`/datasinks/${sourceDataSink.id}`);\n }\n }, [navigate, sourceDataSink]);\n\n // Handle export\n const handleExport = useCallback(() => {\n setIsExportDialogOpen(true);\n }, []);\n\n const handleExportClose = useCallback(() => {\n setIsExportDialogOpen(false);\n }, []);\n\n // Loading state (wait for both the parser fetch and the permission load)\n if ((loading && !parser) || permissionsLoading) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <Loader2 className=\"w-8 h-8 text-text-secondary animate-spin\" />\n </div>\n );\n }\n\n // Read gate — no permission to view this parser\n if (!canRead) {\n return (\n <AccessDenied\n title={t('bigconsole.parsers.accessDenied.title', 'Access Denied')}\n description={t('bigconsole.parsers.accessDenied.view', \"You don't have permission to view this parser.\")}\n />\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-card-padding\">\n <Section\n tone=\"danger\"\n headingLevel={2}\n title={t('bigconsole.parsers.errors.viewLoadFailed', 'Failed to load Parser')}\n description=\"The parser could not be fetched. Go back to the list and try again.\"\n icon={<AlertCircle className=\"h-icon-md w-icon-md text-[var(--color-status-error-text)]\" />}\n actions={\n <Button onClick={handleBack} variant=\"secondary\" size=\"sm\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.goBack', 'Go back')}\n </Button>\n }\n data-testid=\"parser-load-error\"\n >\n <p className=\"font-mono text-xs break-words text-text-secondary\">{error.message}</p>\n </Section>\n </div>\n );\n }\n\n // Not found state\n if (!parser) {\n return (\n <div className=\"flex items-center justify-center min-h-[400px] p-card-padding\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('bigconsole.parsers.view.notFoundTitle', 'Parser not found')}\n description={t(\n 'bigconsole.parsers.view.notFoundDescription',\n \"The Parser you're looking for doesn't exist or has been deleted.\"\n )}\n action={\n <Button onClick={handleBack} variant=\"default\" size=\"default\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.goBackToParsers', 'Go back to Parsers')}\n </Button>\n }\n />\n </div>\n );\n }\n\n // The route exists to show the expression — until a run produces output. Once\n // it does, the freshly produced result becomes the page's primary block and\n // the (static) expression steps down to `standard`, so only one block is ever\n // promoted at a time.\n const hasResult = testResult !== null;\n\n return (\n <div className=\"p-card-padding\">\n <SectionStack>\n {/* Page header strip — structural, no surface of its own */}\n <div className=\"flex flex-col gap-form-gap border-b border-[var(--color-border-subtle)] pb-form-gap sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0 flex-1\">\n <Button onClick={handleBack} variant=\"ghost\" size=\"sm\" className=\"mb-4\">\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.view.backToParsers', 'Back to Parsers')}\n </Button>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h1 className=\"text-2xl font-bold text-text-primary sm:text-3xl\">\n {parser.name || t('bigconsole.parsers.view.untitled', 'Untitled')}\n </h1>\n <ParserTypeBadge type={parser.type} />\n <ParserStatusBadge status={parser.status} />\n </div>\n {parser.description && <p className=\"text-sm text-text-secondary mt-2\">{parser.description}</p>}\n </div>\n\n {/* Actions — Execute is the page's primary verb, so it is the only filled button */}\n <div className=\"flex shrink-0 flex-wrap items-center gap-control-gap\">\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_EXECUTE} deniedBehavior=\"disable\">\n <Button onClick={handleTestExecute} disabled={isTesting} variant=\"default\" size=\"default\">\n <Play className=\"w-4 h-4 mr-2\" />\n {isTesting\n ? t('bigconsole.parsers.view.running', 'Running...')\n : t('bigconsole.parsers.actions.execute', 'Execute')}\n </Button>\n </PermissionButton>\n <Button onClick={handleExport} variant=\"secondary\" size=\"default\">\n <Download className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.export', 'Export')}\n </Button>\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_UPDATE} deniedBehavior=\"disable\">\n <Button onClick={handleEdit} variant=\"secondary\" size=\"default\">\n <Edit className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.edit', 'Edit')}\n </Button>\n </PermissionButton>\n <PermissionButton permission={BIGCONSOLE_PERMISSIONS.PARSER_DELETE} deniedBehavior=\"hide\">\n <Button\n onClick={() => setShowDeleteConfirm(true)}\n disabled={isDeleting}\n variant=\"destructive\"\n size=\"default\"\n >\n <Trash2 className=\"w-4 h-4 mr-2\" />\n {t('bigconsole.parsers.actions.delete', 'Delete')}\n </Button>\n </PermissionButton>\n </div>\n </div>\n\n <PagePurpose className=\"max-w-[80ch]\">\n {t(\n 'bigconsole.parsers.view.purpose',\n 'A parser turns raw input into structured fields using its expression. Review or copy the expression, run it against a sample to see the output, then edit it or use it inside a pipeline to shape incoming data.'\n )}\n </PagePurpose>\n\n {/* Main Content Grid */}\n <div className=\"grid gap-section-gap md:grid-cols-2 lg:grid-cols-3\">\n {/* Expression + result column */}\n <div className=\"flex min-w-0 flex-col gap-section-gap md:col-span-2\">\n {/* Execution result — rendered first once it exists so the outcome of\n the primary action is visible without scrolling past the editor. */}\n {testResult && (\n <Section\n id=\"parser-execution-result\"\n emphasis=\"primary\"\n tone={testResult.success ? 'success' : 'danger'}\n headingLevel={2}\n title={t('bigconsole.parsers.view.executionResult', 'Execution Result')}\n description={\n testResult.success\n ? 'Output produced by the latest run of this parser.'\n : 'The latest run did not complete. Fix the expression or the input and run again.'\n }\n meta={\n <Badge variant={testResult.success ? 'default' : 'destructive'}>\n {testResult.success\n ? t('bigconsole.parsers.view.success', 'Success')\n : t('bigconsole.parsers.view.failed', 'Failed')}\n </Badge>\n }\n actions={\n <Badge variant=\"secondary\" className=\"text-xs\">\n {testResult.executionTimeMs}ms\n </Badge>\n }\n data-testid=\"parser-execution-result\"\n >\n <pre className=\"max-h-[300px] min-w-0 overflow-auto rounded-md bg-bg-sunken p-4 font-mono text-sm text-text-primary\">\n {testResult.error ?? JSON.stringify(testResult.output, null, 2)}\n </pre>\n </Section>\n )}\n\n {/* Expression */}\n <Section\n emphasis={hasResult ? 'standard' : 'primary'}\n headingLevel={2}\n title={t('bigconsole.parsers.view.expression', 'Expression')}\n description=\"The JQ or JSONata program this parser runs against every input record.\"\n icon={<FileCode2 className=\"h-icon-sm w-icon-sm\" />}\n meta={\n <Badge variant=\"secondary\" className=\"text-xs uppercase\">\n {parser.type}\n </Badge>\n }\n actions={\n <Button onClick={handleCopyExpression} variant=\"ghost\" size=\"sm\">\n {expressionCopied ? (\n <>\n <Check className=\"w-3.5 h-3.5 text-status-success-text mr-2\" />\n {t('bigconsole.parsers.view.copied', 'Copied!')}\n </>\n ) : (\n <>\n <Copy className=\"w-3.5 h-3.5 mr-2\" />\n {t('bigconsole.parsers.actions.copy', 'Copy')}\n </>\n )}\n </Button>\n }\n data-testid=\"parser-expression\"\n >\n <ExpressionEditor\n value={parser.expression}\n type={parser.type}\n readOnly\n height=\"clamp(180px, 40vh, 300px)\"\n />\n </Section>\n </div>\n\n {/* Supporting column — steps down from the expression/result column */}\n <div className=\"grid min-w-0 gap-section-gap md:col-span-2 md:grid-cols-2 lg:col-span-1 lg:grid-cols-1\">\n {/* Data Flow */}\n <Section\n headingLevel={2}\n title={t('bigconsole.parsers.view.dataFlow', 'Data Flow')}\n description=\"Where this parser reads from and what it writes.\"\n data-testid=\"parser-data-flow\"\n >\n <dl className=\"space-y-3\">\n {/* Source DataSink */}\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">\n {t('bigconsole.parsers.view.sourceDataSink', 'Source DataSink')}\n </dt>\n {parser.inputSinkKey ? (\n <dd className=\"mt-1\">\n <p className=\"break-words font-mono text-sm font-medium text-text-primary\">\n {parser.inputSinkKey}\n </p>\n {sourceDataSink && (\n <Button onClick={handleViewSourceDataSink} variant=\"link\" size=\"sm\" className=\"mt-1 p-0 h-auto\">\n <Database className=\"w-3 h-3 mr-1\" />\n {t('bigconsole.parsers.view.viewDataSink', 'View {{name}}', {\n name: sourceDataSink.name || t('bigconsole.parsers.view.dataSinkFallback', 'DataSink'),\n })}\n </Button>\n )}\n </dd>\n ) : (\n <dd className=\"mt-1 text-sm text-text-muted\">\n {t('bigconsole.parsers.view.noneConfigured', 'None configured')}\n </dd>\n )}\n </div>\n\n {/* Arrow */}\n <div aria-hidden=\"true\" className=\"flex items-center justify-center py-1\">\n <ArrowDown className=\"w-4 h-4 text-text-muted\" />\n </div>\n\n {/* Output Key */}\n <div>\n <dt className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">\n {t('bigconsole.parsers.view.outputKey', 'Output Key')}\n </dt>\n <dd className=\"mt-1 break-words font-mono text-sm font-medium text-text-primary\">\n {parser.outputKey || t('bigconsole.parsers.view.notConfigured', 'Not configured')}\n </dd>\n </div>\n </dl>\n </Section>\n\n {/* Configuration */}\n <Section\n headingLevel={2}\n title={t('bigconsole.parsers.view.configuration', 'Configuration')}\n data-testid=\"parser-configuration\"\n >\n <dl className=\"space-y-4 text-sm\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.status', 'Status')}</dt>\n <dd>\n <ParserStatusBadge status={parser.status} />\n </dd>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.type', 'Type')}</dt>\n <dd>\n <ParserTypeBadge type={parser.type} />\n </dd>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.cacheTtl', 'Cache TTL')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.ttl\n ? t('bigconsole.parsers.view.ttlSeconds', '{{ttl}}s', { ttl: parser.ttl })\n : t('bigconsole.parsers.view.noCaching', 'No caching')}\n </dd>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.version', 'Version')}</dt>\n <dd className=\"text-text-primary font-medium\">{parser.version || 1}</dd>\n </div>\n </dl>\n </Section>\n\n {/* Timestamps — least important block on the page, so it is recessed */}\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n headingLevel={2}\n title={t('bigconsole.parsers.view.timestamps', 'Timestamps')}\n data-testid=\"parser-history\"\n >\n <dl className=\"space-y-4 text-sm\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.created', 'Created')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.createdAt\n ? formatDistanceToNow(new Date(parser.createdAt), { addSuffix: true })\n : t('bigconsole.parsers.view.unknown', 'Unknown')}\n </dd>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <dt className=\"text-text-secondary\">{t('bigconsole.parsers.view.updated', 'Updated')}</dt>\n <dd className=\"text-text-primary font-medium\">\n {parser.updatedAt\n ? formatDistanceToNow(new Date(parser.updatedAt), { addSuffix: true })\n : t('bigconsole.parsers.view.unknown', 'Unknown')}\n </dd>\n </div>\n </dl>\n </Section>\n </div>\n </div>\n\n {/* Guidance sits after the data it talks about */}\n <NextSteps\n storageKey=\"bigconsole-parser-view\"\n steps={[\n {\n id: 'execute',\n label: t('bigconsole.parsers.view.nextSteps.executeLabel', 'Run a test execution'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.executeDescription',\n 'Check the expression produces the fields you expect.'\n ),\n onClick: handleTestExecute,\n },\n {\n id: 'edit',\n label: t('bigconsole.parsers.view.nextSteps.editLabel', 'Edit the expression'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.editDescription',\n 'Refine how this parser maps your input.'\n ),\n onClick: handleEdit,\n },\n {\n id: 'pipeline',\n label: t('bigconsole.parsers.view.nextSteps.pipelineLabel', 'Use it in a pipeline'),\n description: t(\n 'bigconsole.parsers.view.nextSteps.pipelineDescription',\n 'Chain this parser with a data sink to process data end to end.'\n ),\n onClick: () => navigate('/pipelines'),\n },\n ]}\n />\n </SectionStack>\n\n {/* Delete Confirmation ResponsiveDialog */}\n <ResponsiveDialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>\n {t('bigconsole.parsers.view.deleteDialogTitle', 'Delete Parser')}\n </ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n {t('bigconsole.parsers.view.deleteConfirmPrefix', 'Are you sure you want to delete')}{' '}\n <strong>{parser.name}</strong>\n {t('bigconsole.parsers.view.deleteConfirmSuffix', '? This action cannot be undone.')}\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <Section\n tone=\"warning\"\n padding=\"compact\"\n headingLevel={3}\n title=\"Check dependents first\"\n description={t(\n 'bigconsole.parsers.view.deleteWarning',\n 'Widgets and pipelines using this parser may stop working correctly after deletion.'\n )}\n icon={<AlertTriangle className=\"h-icon-sm w-icon-sm text-[var(--color-status-warning-text)]\" />}\n data-testid=\"parser-delete-warning\"\n />\n <ResponsiveDialogFooter>\n <Button onClick={() => setShowDeleteConfirm(false)} variant=\"secondary\">\n {t('bigconsole.parsers.actions.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n disabled={isDeleting}\n variant=\"destructive\"\n >\n {isDeleting\n ? t('bigconsole.parsers.view.deleting', 'Deleting...')\n : t('bigconsole.parsers.view.deleteDialogTitle', 'Delete Parser')}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n\n {/* Export Parser ResponsiveDialog */}\n <ExportParserDialog\n isOpen={isExportDialogOpen}\n parserId={parserId || null}\n parserName={parser.name}\n onClose={handleExportClose}\n />\n </div>\n );\n});\n\nexport default ParserViewPage;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA+DA,IAAM,IAAqB,WAEd,IAAiB,EAAK,WAA0B;CAC3D,IAAM,EAAE,aAAU,WAAW,MAAiB,IAAqD,EAC7F,IAAW,IAAgB,EAC3B,EAAE,SAAM,IAAS,EAGjB,KAAY,KAAgB,GAG5B,EAAE,mBAAe,WAAW,OAAuB,IAAgB,EACnE,KAAU,GAAc,EAAuB,YAAY,EAG3D,CAAC,GAAY,KAAiB,EAAS,GAAM,EAC7C,CAAC,IAAmB,KAAwB,EAAS,GAAM,EAC3D,CAAC,IAAkB,KAAuB,EAAS,GAAM,EACzD,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,IAAoB,KAAyB,EAAS,GAAM,EAC7D,CAAC,GAAY,KAAiB,EAK1B,KAAK,EAGT,IAAS,GAAgB,MAAW,IAAW,EAAM,QAAQ,IAAI,EAAS,GAAG,KAAA,EAAW,EAGxF,EAAE,aAAS,UAAO,gBAAa,iBAAc,qBAAkB,EAAoB;EACvF;EACA,WAAW;EACZ,CAAC,EAGI,EAAE,eAAW,sBAAmB,EAAsB,EAAE,WAAW,IAAM,CAAC;AAUhF,CAPA,QAAgB;AACd,EAAI,KACF,EAAY,EAAS;IAEtB,CAAC,GAAU,EAAY,CAAC,EAG3B,QAAgB;AACd,KAAgB;IACf,CAAC,EAAe,CAAC;CAGpB,IAAM,IAAiB,GAAQ,eAAe,GAAU,MAAM,MAAO,EAAG,QAAQ,EAAO,aAAa,GAAG,MAGjG,IAAa,QAAkB;AAEnC,EACE,EADE,IACO,eAAe,EAAa,YAE5B,WAAW;IAErB,CAAC,GAAU,EAAa,CAAC,EAGtB,IAAa,QAAkB;AAEnC,EACE,EADE,IACO,eAAe,EAAa,WAAW,EAAS,SAEhD,YAAY,EAAS,OAAO;IAEtC;EAAC;EAAU;EAAU;EAAa,CAAC,EAGhC,KAAe,EAAY,YAAY;AACtC,SACL;KAAc,GAAK;AACnB,OAAI;AAEF,IADgB,MAAM,EAAa,EAAS,IAEtC,GAAU,IAAO,EAAa,UAAU,EAG1C,EADE,IACO,eAAe,EAAa,YAE5B,WAAW,IAEb,GAAU,IACd,EAAa,QAAQ;WAEtB;AACN,IAAI,GAAU,IAAO,EAAa,QAAQ;aAClC;AAER,IADA,EAAc,GAAM,EACpB,EAAqB,GAAM;;;IAE5B;EAAC;EAAU;EAAc;EAAU;EAAa,CAAC,EAG9C,KAAuB,EAAY,YAAY;AAC9C,SAAQ,WACb,KAAI;AAIF,GAHA,MAAM,GAAe,EAAO,WAAW,EACvC,EAAoB,GAAK,EACrB,GAAU,IAAO,GAAY,EAAE,4CAA4C,oBAAoB,CAAC,EACpG,iBAAiB,EAAoB,GAAM,EAAE,IAAK;UAC5C;IAGP,CAAC,GAAQ,YAAY,EAAE,CAAC,EAGrB,IAAoB,EAAY,YAAY;AAC3C,SAEL;GADA,EAAa,GAAK,EAClB,EAAc,KAAK;AACnB,OAAI;IACF,IAAM,IAAS,MAAM,EAAc,EAAS;AAC5C,IAAI,KACF,EAAc;KACZ,SAAS,EAAO;KAChB,QAAQ,EAAO;KACf,OAAO,EAAO;KACd,iBAAiB,EAAO;KACzB,CAAC;YAEG,GAAK;AACZ,MAAc;KACZ,SAAS;KACT,QAAQ;KACR,OAAO,aAAe,QAAQ,EAAI,UAAU,EAAE,2CAA2C,mBAAmB;KAC5G,iBAAiB;KAClB,CAAC;aACM;AACR,MAAa,GAAM;;;IAEpB;EAAC;EAAU;EAAe;EAAE,CAAC,EAG1B,KAA2B,QAAkB;AACjD,EAAI,KACF,EAAS,cAAc,EAAe,KAAK;IAE5C,CAAC,GAAU,EAAe,CAAC,EAGxB,KAAe,QAAkB;AACrC,IAAsB,GAAK;IAC1B,EAAE,CAAC,EAEA,KAAoB,QAAkB;AAC1C,IAAsB,GAAM;IAC3B,EAAE,CAAC;AAGN,KAAK,MAAW,CAAC,KAAW,GAC1B,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,IAAD,EAAS,WAAU,4CAA6C,CAAA;EAC5D,CAAA;AAKV,KAAI,CAAC,GACH,QACE,kBAAC,IAAD;EACE,OAAO,EAAE,yCAAyC,gBAAgB;EAClE,aAAa,EAAE,wCAAwC,iDAAiD;EACxG,CAAA;AAKN,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,MAAK;GACL,cAAc;GACd,OAAO,EAAE,4CAA4C,wBAAwB;GAC7E,aAAY;GACZ,MAAM,kBAAC,IAAD,EAAa,WAAU,6DAA8D,CAAA;GAC3F,SACE,kBAAC,GAAD;IAAQ,SAAS;IAAY,SAAQ;IAAY,MAAK;cAAtD,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,qCAAqC,UAAU,CAC3C;;GAEX,eAAY;aAEZ,kBAAC,KAAD;IAAG,WAAU;cAAqD,EAAM;IAAY,CAAA;GAC5E,CAAA;EACN,CAAA;AAKV,KAAI,CAAC,EACH,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,IAAD;GACE,cAAa;GACb,OAAO,EAAE,yCAAyC,mBAAmB;GACrE,aAAa,EACX,+CACA,mEACD;GACD,QACE,kBAAC,GAAD;IAAQ,SAAS;IAAY,SAAQ;IAAU,MAAK;cAApD,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,8CAA8C,qBAAqB,CAC/D;;GAEX,CAAA;EACE,CAAA;CAQV,IAAM,KAAY,MAAe;AAEjC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,IAAD,EAAA,UAAA;IAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD;QAAQ,SAAS;QAAY,SAAQ;QAAQ,MAAK;QAAK,WAAU;kBAAjE,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAE,yCAAyC,kBAAkB,CACvD;;OACT,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,MAAD;UAAI,WAAU;oBACX,EAAO,QAAQ,EAAE,oCAAoC,WAAW;UAC9D,CAAA;SACL,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA;SACtC,kBAAC,GAAD,EAAmB,QAAQ,EAAO,QAAU,CAAA;SACxC;;OACL,EAAO,eAAe,kBAAC,KAAD;QAAG,WAAU;kBAAoC,EAAO;QAAgB,CAAA;OAC3F;SAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD;QAAkB,YAAY,EAAuB;QAAgB,gBAAe;kBAClF,kBAAC,GAAD;SAAQ,SAAS;SAAmB,UAAU;SAAW,SAAQ;SAAU,MAAK;mBAAhF,CACE,kBAAC,IAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,IACG,EAAE,mCAAmC,aAAa,GAClD,EAAE,sCAAsC,UAAU,CAC/C;;QACQ,CAAA;OACnB,kBAAC,GAAD;QAAQ,SAAS;QAAc,SAAQ;QAAY,MAAK;kBAAxD,CACE,kBAAC,IAAD,EAAU,WAAU,gBAAiB,CAAA,EACpC,EAAE,qCAAqC,SAAS,CAC1C;;OACT,kBAAC,GAAD;QAAkB,YAAY,EAAuB;QAAe,gBAAe;kBACjF,kBAAC,GAAD;SAAQ,SAAS;SAAY,SAAQ;SAAY,MAAK;mBAAtD,CACE,kBAAC,IAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAE,mCAAmC,OAAO,CACtC;;QACQ,CAAA;OACnB,kBAAC,GAAD;QAAkB,YAAY,EAAuB;QAAe,gBAAe;kBACjF,kBAAC,GAAD;SACE,eAAe,EAAqB,GAAK;SACzC,UAAU;SACV,SAAQ;SACR,MAAK;mBAJP,CAME,kBAAC,IAAD,EAAQ,WAAU,gBAAiB,CAAA,EAClC,EAAE,qCAAqC,SAAS,CAC1C;;QACQ,CAAA;OACf;QACF;;IAEN,kBAAC,IAAD;KAAa,WAAU;eACpB,EACC,mCACA,mNACD;KACW,CAAA;IAGd,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CAGG,KACC,kBAAC,GAAD;OACE,IAAG;OACH,UAAS;OACT,MAAM,EAAW,UAAU,YAAY;OACvC,cAAc;OACd,OAAO,EAAE,2CAA2C,mBAAmB;OACvE,aACE,EAAW,UACP,sDACA;OAEN,MACE,kBAAC,GAAD;QAAO,SAAS,EAAW,UAAU,YAAY;kBAC9C,EAAW,UACR,EAAE,mCAAmC,UAAU,GAC/C,EAAE,kCAAkC,SAAS;QAC3C,CAAA;OAEV,SACE,kBAAC,GAAD;QAAO,SAAQ;QAAY,WAAU;kBAArC,CACG,EAAW,iBAAgB,KACtB;;OAEV,eAAY;iBAEZ,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAW,SAAS,KAAK,UAAU,EAAW,QAAQ,MAAM,EAAE;QAC3D,CAAA;OACE,CAAA,EAIZ,kBAAC,GAAD;OACE,UAAU,KAAY,aAAa;OACnC,cAAc;OACd,OAAO,EAAE,sCAAsC,aAAa;OAC5D,aAAY;OACZ,MAAM,kBAAC,IAAD,EAAW,WAAU,uBAAwB,CAAA;OACnD,MACE,kBAAC,GAAD;QAAO,SAAQ;QAAY,WAAU;kBAClC,EAAO;QACF,CAAA;OAEV,SACE,kBAAC,GAAD;QAAQ,SAAS;QAAsB,SAAQ;QAAQ,MAAK;kBACzD,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAO,WAAU,6CAA8C,CAAA,EAC9D,EAAE,kCAAkC,UAAU,CAC9C,EAAA,CAAA,GAEH,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD,EAAM,WAAU,oBAAqB,CAAA,EACpC,EAAE,mCAAmC,OAAO,CAC5C,EAAA,CAAA;QAEE,CAAA;OAEX,eAAY;iBAEZ,kBAAC,GAAD;QACE,OAAO,EAAO;QACd,MAAM,EAAO;QACb,UAAA;QACA,QAAO;QACP,CAAA;OACM,CAAA,CACN;SAGN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEE,kBAAC,GAAD;QACE,cAAc;QACd,OAAO,EAAE,oCAAoC,YAAY;QACzD,aAAY;QACZ,eAAY;kBAEZ,kBAAC,MAAD;SAAI,WAAU;mBAAd;UAEE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAE,0CAA0C,kBAAkB;WAC5D,CAAA,EACJ,EAAO,eACN,kBAAC,MAAD;WAAI,WAAU;qBAAd,CACE,kBAAC,KAAD;YAAG,WAAU;sBACV,EAAO;YACN,CAAA,EACH,KACC,kBAAC,GAAD;YAAQ,SAAS;YAA0B,SAAQ;YAAO,MAAK;YAAK,WAAU;sBAA9E,CACE,kBAAC,IAAD,EAAU,WAAU,gBAAiB,CAAA,EACpC,EAAE,wCAAwC,iBAAiB,EAC1D,MAAM,EAAe,QAAQ,EAAE,4CAA4C,WAAW,EACvF,CAAC,CACK;cAER;eAEL,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAE,0CAA0C,kBAAkB;WAC5D,CAAA,CAEH,EAAA,CAAA;UAGN,kBAAC,OAAD;WAAK,eAAY;WAAO,WAAU;qBAChC,kBAAC,IAAD,EAAW,WAAU,2BAA4B,CAAA;WAC7C,CAAA;UAGN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAE,qCAAqC,aAAa;WAClD,CAAA,EACL,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAO,aAAa,EAAE,yCAAyC,iBAAiB;WAC9E,CAAA,CACD,EAAA,CAAA;UACH;;QACG,CAAA;OAGV,kBAAC,GAAD;QACE,cAAc;QACd,OAAO,EAAE,yCAAyC,gBAAgB;QAClE,eAAY;kBAEZ,kBAAC,MAAD;SAAI,WAAU;mBAAd;UACE,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBAAuB,EAAE,kCAAkC,SAAS;YAAM,CAAA,EACxF,kBAAC,MAAD,EAAA,UACE,kBAAC,GAAD,EAAmB,QAAQ,EAAO,QAAU,CAAA,EACzC,CAAA,CACD;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBAAuB,EAAE,gCAAgC,OAAO;YAAM,CAAA,EACpF,kBAAC,MAAD,EAAA,UACE,kBAAC,GAAD,EAAiB,MAAM,EAAO,MAAQ,CAAA,EACnC,CAAA,CACD;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBAAuB,EAAE,oCAAoC,YAAY;YAAM,CAAA,EAC7F,kBAAC,MAAD;YAAI,WAAU;sBACX,EAAO,MACJ,EAAE,sCAAsC,YAAY,EAAE,KAAK,EAAO,KAAK,CAAC,GACxE,EAAE,qCAAqC,aAAa;YACrD,CAAA,CACD;;UACN,kBAAC,OAAD;WAAK,WAAU;qBAAf,CACE,kBAAC,MAAD;YAAI,WAAU;sBAAuB,EAAE,mCAAmC,UAAU;YAAM,CAAA,EAC1F,kBAAC,MAAD;YAAI,WAAU;sBAAiC,EAAO,WAAW;YAAO,CAAA,CACpE;;UACH;;QACG,CAAA;OAGV,kBAAC,GAAD;QACE,UAAS;QACT,SAAQ;QACR,cAAc;QACd,OAAO,EAAE,sCAAsC,aAAa;QAC5D,eAAY;kBAEZ,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAuB,EAAE,mCAAmC,UAAU;WAAM,CAAA,EAC1F,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAO,YACJ,EAAoB,IAAI,KAAK,EAAO,UAAU,EAAE,EAAE,WAAW,IAAM,CAAC,GACpE,EAAE,mCAAmC,UAAU;WAChD,CAAA,CACD;aACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAuB,EAAE,mCAAmC,UAAU;WAAM,CAAA,EAC1F,kBAAC,MAAD;WAAI,WAAU;qBACX,EAAO,YACJ,EAAoB,IAAI,KAAK,EAAO,UAAU,EAAE,EAAE,WAAW,IAAM,CAAC,GACpE,EAAE,mCAAmC,UAAU;WAChD,CAAA,CACD;YACH;;QACG,CAAA;OACN;QACF;;IAGN,kBAAC,IAAD;KACE,YAAW;KACX,OAAO;MACL;OACE,IAAI;OACJ,OAAO,EAAE,kDAAkD,uBAAuB;OAClF,aAAa,EACX,wDACA,uDACD;OACD,SAAS;OACV;MACD;OACE,IAAI;OACJ,OAAO,EAAE,+CAA+C,sBAAsB;OAC9E,aAAa,EACX,qDACA,0CACD;OACD,SAAS;OACV;MACD;OACE,IAAI;OACJ,OAAO,EAAE,mDAAmD,uBAAuB;OACnF,aAAa,EACX,yDACA,iEACD;OACD,eAAe,EAAS,aAAa;OACtC;MACF;KACD,CAAA;IACW,EAAA,CAAA;GAGf,kBAAC,GAAD;IAAkB,MAAM;IAAmB,cAAc;cACvD,kBAAC,GAAD,EAAA,UAAA;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACG,EAAE,6CAA6C,gBAAgB,EAC1C,CAAA,EACxB,kBAAC,GAAD,EAAA,UAAA;MACG,EAAE,+CAA+C,kCAAkC;MAAE;MACtF,kBAAC,UAAD,EAAA,UAAS,EAAO,MAAc,CAAA;MAC7B,EAAE,+CAA+C,kCAAkC;MACxD,EAAA,CAAA,CACP,EAAA,CAAA;KACzB,kBAAC,GAAD;MACE,MAAK;MACL,SAAQ;MACR,cAAc;MACd,OAAM;MACN,aAAa,EACX,yCACA,qFACD;MACD,MAAM,kBAAC,IAAD,EAAe,WAAU,+DAAgE,CAAA;MAC/F,eAAY;MACZ,CAAA;KACF,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAQ,eAAe,EAAqB,GAAM;MAAE,SAAQ;gBACzD,EAAE,qCAAqC,SAAS;MAC1C,CAAA,EACT,kBAAC,GAAD;MACE,eAAe;AAER,OADL,EAAa,SAAS,EACjB,IAAc;;MAErB,UAAU;MACV,SAAQ;gBAEP,IACG,EAAE,oCAAoC,cAAc,GACpD,EAAE,6CAA6C,gBAAgB;MAC5D,CAAA,CACc,EAAA,CAAA;KACD,EAAA,CAAA;IACT,CAAA;GAGnB,kBAAC,GAAD;IACE,QAAQ;IACR,UAAU,KAAY;IACtB,YAAY,EAAO;IACnB,SAAS;IACT,CAAA;GACE;;EAER"}