@burdenoff/microfe-bigconsole 2026.1004.2 → 2026.1004.4

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 (150) hide show
  1. package/dist/bigconsole/BigConsoleRoutes.d.ts +1 -1
  2. package/dist/bigconsole/BigConsoleRoutes.d.ts.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoutes.js +15 -1
  4. package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
  5. package/dist/bigconsole/components/DrilldownModal.d.ts.map +1 -1
  6. package/dist/bigconsole/components/DrilldownModal.js +54 -53
  7. package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
  8. package/dist/bigconsole/components/builder/inspector/DataBindingSection.d.ts +3 -1
  9. package/dist/bigconsole/components/builder/inspector/DataBindingSection.d.ts.map +1 -1
  10. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +40 -39
  11. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  12. package/dist/bigconsole/components/dashboard/DashboardCanvas.d.ts.map +1 -1
  13. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +184 -177
  14. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  15. package/dist/bigconsole/components/dashboard/DashboardGrid.d.ts.map +1 -1
  16. package/dist/bigconsole/components/dashboard/DashboardGrid.js +40 -22
  17. package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
  18. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.d.ts.map +1 -1
  19. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +31 -25
  20. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
  21. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.d.ts +1 -1
  22. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.d.ts.map +1 -1
  23. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +115 -80
  24. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  25. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.d.ts.map +1 -1
  26. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +177 -146
  27. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  28. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.d.ts +1 -1
  29. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.d.ts.map +1 -1
  30. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +375 -325
  31. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  32. package/dist/bigconsole/components/datasink/CacheTTLSelector.d.ts.map +1 -1
  33. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +7 -1
  34. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  35. package/dist/bigconsole/components/parser/ParserSelector.d.ts +3 -1
  36. package/dist/bigconsole/components/parser/ParserSelector.d.ts.map +1 -1
  37. package/dist/bigconsole/components/parser/ParserSelector.js +94 -94
  38. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  39. package/dist/bigconsole/components/pipeline/PipelineCard.d.ts.map +1 -1
  40. package/dist/bigconsole/components/pipeline/PipelineCard.js +111 -89
  41. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  42. package/dist/bigconsole/components/pipeline/PipelineScopePicker.d.ts +8 -0
  43. package/dist/bigconsole/components/pipeline/PipelineScopePicker.d.ts.map +1 -0
  44. package/dist/bigconsole/components/pipeline/PipelineScopePicker.js +52 -0
  45. package/dist/bigconsole/components/pipeline/PipelineScopePicker.js.map +1 -0
  46. package/dist/bigconsole/components/widgets/PropertiesPanel.d.ts.map +1 -1
  47. package/dist/bigconsole/components/widgets/PropertiesPanel.js +257 -221
  48. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  49. package/dist/bigconsole/components/widgets/WidgetHeader.d.ts +1 -0
  50. package/dist/bigconsole/components/widgets/WidgetHeader.d.ts.map +1 -1
  51. package/dist/bigconsole/components/widgets/WidgetHeader.js +29 -29
  52. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  53. package/dist/bigconsole/components/widgets/WidgetWrapper.d.ts +2 -0
  54. package/dist/bigconsole/components/widgets/WidgetWrapper.d.ts.map +1 -1
  55. package/dist/bigconsole/components/widgets/WidgetWrapper.js +247 -239
  56. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  57. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.d.ts.map +1 -1
  58. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +6 -4
  59. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
  60. package/dist/bigconsole/components/widgets/states/EmptyState.d.ts +1 -0
  61. package/dist/bigconsole/components/widgets/states/EmptyState.d.ts.map +1 -1
  62. package/dist/bigconsole/components/widgets/states/EmptyState.js +4 -4
  63. package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
  64. package/dist/bigconsole/components/workflow/WorkflowDesignPreview.d.ts +7 -0
  65. package/dist/bigconsole/components/workflow/WorkflowDesignPreview.d.ts.map +1 -0
  66. package/dist/bigconsole/components/workflow/WorkflowDesignPreview.js +94 -0
  67. package/dist/bigconsole/components/workflow/WorkflowDesignPreview.js.map +1 -0
  68. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.d.ts +7 -0
  69. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.d.ts.map +1 -0
  70. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js +101 -0
  71. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js.map +1 -0
  72. package/dist/bigconsole/hooks/useBigConsoleSettings.d.ts +16 -0
  73. package/dist/bigconsole/hooks/useBigConsoleSettings.d.ts.map +1 -0
  74. package/dist/bigconsole/hooks/useBigConsoleSettings.js +57 -0
  75. package/dist/bigconsole/hooks/useBigConsoleSettings.js.map +1 -0
  76. package/dist/bigconsole/hooks/useDashboardOperations.d.ts.map +1 -1
  77. package/dist/bigconsole/hooks/useDashboardOperations.js +102 -79
  78. package/dist/bigconsole/hooks/useDashboardOperations.js.map +1 -1
  79. package/dist/bigconsole/hooks/useExportDashboard.d.ts +3 -1
  80. package/dist/bigconsole/hooks/useExportDashboard.d.ts.map +1 -1
  81. package/dist/bigconsole/hooks/useExportDashboard.js +23 -13
  82. package/dist/bigconsole/hooks/useExportDashboard.js.map +1 -1
  83. package/dist/bigconsole/hooks/useFilterUrlSync.d.ts +18 -0
  84. package/dist/bigconsole/hooks/useFilterUrlSync.d.ts.map +1 -1
  85. package/dist/bigconsole/hooks/useFilterUrlSync.js +87 -57
  86. package/dist/bigconsole/hooks/useFilterUrlSync.js.map +1 -1
  87. package/dist/bigconsole/hooks/useGlobalFilters.d.ts.map +1 -1
  88. package/dist/bigconsole/hooks/useGlobalFilters.js +39 -29
  89. package/dist/bigconsole/hooks/useGlobalFilters.js.map +1 -1
  90. package/dist/bigconsole/hooks/usePageOperations.d.ts.map +1 -1
  91. package/dist/bigconsole/hooks/usePageOperations.js +1 -0
  92. package/dist/bigconsole/hooks/usePageOperations.js.map +1 -1
  93. package/dist/bigconsole/hooks/usePipelineOperations.d.ts.map +1 -1
  94. package/dist/bigconsole/hooks/usePipelineOperations.js +114 -112
  95. package/dist/bigconsole/hooks/usePipelineOperations.js.map +1 -1
  96. package/dist/bigconsole/hooks/useShareRecipients.d.ts +22 -0
  97. package/dist/bigconsole/hooks/useShareRecipients.d.ts.map +1 -0
  98. package/dist/bigconsole/hooks/useShareRecipients.js +198 -0
  99. package/dist/bigconsole/hooks/useShareRecipients.js.map +1 -0
  100. package/dist/bigconsole/pages/DashboardBuilderPage.d.ts.map +1 -1
  101. package/dist/bigconsole/pages/DashboardBuilderPage.js +198 -193
  102. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  103. package/dist/bigconsole/pages/DashboardViewPage.d.ts.map +1 -1
  104. package/dist/bigconsole/pages/DashboardViewPage.js +171 -167
  105. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  106. package/dist/bigconsole/pages/DashboardsPage.d.ts.map +1 -1
  107. package/dist/bigconsole/pages/DashboardsPage.js +313 -266
  108. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  109. package/dist/bigconsole/pages/DataSinkBuilderPage.d.ts.map +1 -1
  110. package/dist/bigconsole/pages/DataSinkBuilderPage.js +84 -79
  111. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  112. package/dist/bigconsole/pages/DataSinkViewPage.d.ts.map +1 -1
  113. package/dist/bigconsole/pages/DataSinkViewPage.js +267 -257
  114. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  115. package/dist/bigconsole/pages/InsightsPage.d.ts.map +1 -1
  116. package/dist/bigconsole/pages/InsightsPage.js +465 -402
  117. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  118. package/dist/bigconsole/pages/PipelineBuilderPage.d.ts.map +1 -1
  119. package/dist/bigconsole/pages/PipelineBuilderPage.js +169 -157
  120. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  121. package/dist/bigconsole/pages/PipelineViewPage.d.ts.map +1 -1
  122. package/dist/bigconsole/pages/PipelineViewPage.js +370 -230
  123. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  124. package/dist/bigconsole/pages/PipelinesPage.d.ts.map +1 -1
  125. package/dist/bigconsole/pages/PipelinesPage.js +181 -151
  126. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  127. package/dist/bigconsole/pages/SettingsPage.d.ts.map +1 -1
  128. package/dist/bigconsole/pages/SettingsPage.js +188 -208
  129. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  130. package/dist/bigconsole/pages/WidgetDemoPage.d.ts.map +1 -1
  131. package/dist/bigconsole/pages/WidgetDemoPage.js +134 -117
  132. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  133. package/dist/bigconsole/pages/WorkflowViewPage.d.ts.map +1 -1
  134. package/dist/bigconsole/pages/WorkflowViewPage.js +315 -267
  135. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  136. package/dist/bigconsole/pages/WorkflowsPage.d.ts.map +1 -1
  137. package/dist/bigconsole/pages/WorkflowsPage.js +4 -3
  138. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  139. package/dist/bigconsole/types/index.d.ts +4 -0
  140. package/dist/bigconsole/types/index.d.ts.map +1 -1
  141. package/dist/generated/wspace-operations.d.ts +148 -0
  142. package/dist/generated/wspace-operations.d.ts.map +1 -1
  143. package/dist/generated/wspace-operations.js +172 -133
  144. package/dist/generated/wspace-operations.js.map +1 -1
  145. package/dist/generated/wspace-types.d.ts +21 -0
  146. package/dist/generated/wspace-types.d.ts.map +1 -1
  147. package/dist/generated/wspace-types.js.map +1 -1
  148. package/dist/microfe-bigconsole.css +1 -1
  149. package/dist/translations/en.d.ts.map +1 -1
  150. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DataBindingSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Input, Label, Spinner } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { WidgetBinding, WidgetBindingStatus } from '../../../types';\nimport { DataSinkSelector } from '../../parser/DataSinkSelector';\nimport { ParserSelector } from '../../parser/ParserSelector';\nimport { Section, SectionStack, type SectionTone } from '../../common';\n\nexport interface DataBindingSectionProps {\n consoleId: string;\n binding: WidgetBinding;\n dataSinkKey: string | null;\n dataPath?: string;\n status: WidgetBindingStatus;\n missingFields?: string[];\n preview?: unknown;\n error?: string | null;\n onDataSinkChange: (key: string | null) => void;\n onParserChange: (parserId: string | null) => void;\n onDataPathChange: (path: string | undefined) => void;\n}\n\n/**\n * Binding health is the single most important signal on this tab, so it gets a\n * toned section of its own instead of the bare `<p class=\"text-xs\">` it used to\n * be (BOFF-5636).\n */\nconst STATUS_TONES: Record<WidgetBindingStatus, SectionTone> = {\n unbound: 'info',\n loading: 'info',\n bound: 'success',\n no_data: 'warning',\n parser_error: 'danger',\n field_mismatch: 'warning',\n};\n\nexport const DataBindingSection: FC<DataBindingSectionProps> = ({\n consoleId,\n binding,\n dataSinkKey,\n dataPath,\n status,\n missingFields = [],\n preview,\n error,\n onDataSinkChange,\n onParserChange,\n onDataPathChange,\n}) => {\n const { t } = useI18n();\n\n const statusLabels: Record<WidgetBindingStatus, string> = {\n unbound: t('bigconsole.builder.dataBinding.status.unbound', 'Select a DataSink to begin'),\n loading: t('bigconsole.builder.dataBinding.status.loading', 'Testing parser and detecting fields…'),\n bound: t('bigconsole.builder.dataBinding.status.bound', 'Binding ready'),\n no_data: t('bigconsole.builder.dataBinding.status.noData', 'Parser returned no data'),\n parser_error: t('bigconsole.builder.dataBinding.status.parserError', 'Parser test failed'),\n field_mismatch: t('bigconsole.builder.dataBinding.status.fieldMismatch', 'Some mapped fields were not found'),\n };\n\n return (\n <SectionStack>\n <Section\n title=\"Data source\"\n description={t(\n 'bigconsole.builder.dataBinding.intro',\n 'Connect this widget to a DataSink and Parser to display transformed data.'\n )}\n data-testid=\"widget-inspector-data-source\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.dataSinkLabel', 'DataSink')}</Label>\n <DataSinkSelector\n value={dataSinkKey}\n onChange={onDataSinkChange}\n placeholder={t('bigconsole.builder.dataBinding.dataSinkPlaceholder', 'Select a DataSink...')}\n />\n {dataSinkKey && (\n <p className=\"text-xs text-text-secondary\">\n {t('bigconsole.builder.dataBinding.keyLabel', 'Key: {{key}}', { key: dataSinkKey })}\n {binding.source.ref && (\n <span className=\"ml-2 text-text-muted\">\n {t('bigconsole.builder.dataBinding.idLabel', 'ID: {{id}}...', {\n id: binding.source.ref.slice(0, 8),\n })}\n </span>\n )}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.parserLabel', 'Parser')}</Label>\n <ParserSelector\n consoleId={consoleId}\n value={binding.parserId ?? null}\n onChange={onParserChange}\n filterInputSinkKey={dataSinkKey ?? undefined}\n filterStatus={undefined}\n placeholder={\n dataSinkKey\n ? t('bigconsole.builder.dataBinding.parserPlaceholder', 'Select a parser...')\n : t('bigconsole.builder.dataBinding.parserPlaceholderNoSink', 'Select a DataSink first...')\n }\n disabled={!dataSinkKey}\n />\n </div>\n </div>\n </Section>\n\n <Section\n title={statusLabels[status]}\n tone={STATUS_TONES[status]}\n padding=\"compact\"\n headingLevel={3}\n icon={status === 'loading' ? <Spinner style={{ width: '14px', height: '14px' }} /> : undefined}\n data-testid=\"widget-inspector-binding-status\"\n >\n <div role=\"status\" aria-live=\"polite\" className=\"min-w-0 space-y-1\">\n {/*\n The status label is the section heading, which sits OUTSIDE this live\n region — without this echo a screen reader would never hear the binding\n flip from \"loading\" to \"bound\".\n */}\n <p className=\"sr-only\">{statusLabels[status]}</p>\n {error && <p className=\"break-words text-xs text-[var(--color-status-error-text)]\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"break-words text-xs text-[var(--color-status-warning-text)]\">\n {t('bigconsole.builder.dataBinding.missingFields', 'Missing: {{fields}}', {\n fields: missingFields.join(', '),\n })}\n </p>\n )}\n {!error && missingFields.length === 0 && status === 'bound' && (\n <p className=\"text-xs text-text-secondary\">\n The parser ran and its output matches the fields this widget expects.\n </p>\n )}\n </div>\n </Section>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.fieldMappingsConfigured', 'Field mappings configured')}\n headingLevel={3}\n >\n <div className=\"min-w-0 space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name} className=\"break-words\">\n {name}: <code className=\"rounded bg-bg-surface px-1 font-mono\">{path}</code>\n </p>\n ))}\n </div>\n </Section>\n )}\n\n {preview !== undefined && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.livePreviewLabel', 'Live Preview')}\n description=\"Raw parser output, exactly as the widget receives it.\"\n headingLevel={3}\n >\n <pre className=\"max-h-40 min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-surface p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </Section>\n )}\n\n <Section emphasis=\"muted\" padding=\"compact\" title=\"Data path\" headingLevel={3}>\n <div className=\"space-y-2\">\n <Label htmlFor=\"widget-inspector-data-path\">\n {t('bigconsole.builder.dataBinding.dataPathLabel', 'Data Path (Optional)')}\n </Label>\n <Input\n id=\"widget-inspector-data-path\"\n value={dataPath ?? ''}\n onChange={(event) => onDataPathChange(event.target.value || undefined)}\n placeholder={t('bigconsole.builder.dataBinding.dataPathPlaceholder', 'e.g., summary.totalRevenue')}\n />\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'bigconsole.builder.dataBinding.dataPathHelp',\n 'Path to extract specific data from the parser output (dot notation)'\n )}\n </p>\n </div>\n </Section>\n </SectionStack>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataBindingSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Input, Label, Spinner } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { WidgetBinding, WidgetBindingStatus, Parser } from '../../../types';\nimport { DataSinkSelector } from '../../parser/DataSinkSelector';\nimport { ParserSelector } from '../../parser/ParserSelector';\nimport { Section, SectionStack, type SectionTone } from '../../common';\n\nexport interface DataBindingSectionProps {\n consoleId: string;\n binding: WidgetBinding;\n resolvedParser?: Parser;\n dataSinkKey: string | null;\n dataPath?: string;\n status: WidgetBindingStatus;\n resolving?: boolean;\n missingFields?: string[];\n preview?: unknown;\n error?: string | null;\n onDataSinkChange: (key: string | null) => void;\n onParserChange: (parserId: string | null) => void;\n onDataPathChange: (path: string | undefined) => void;\n}\n\n/**\n * Binding health is the single most important signal on this tab, so it gets a\n * toned section of its own instead of the bare `<p class=\"text-xs\">` it used to\n * be (BOFF-5636).\n */\nconst STATUS_TONES: Record<WidgetBindingStatus, SectionTone> = {\n unbound: 'info',\n loading: 'info',\n bound: 'success',\n no_data: 'warning',\n parser_error: 'danger',\n field_mismatch: 'warning',\n};\n\nexport const DataBindingSection: FC<DataBindingSectionProps> = ({\n consoleId,\n binding,\n resolvedParser,\n dataSinkKey,\n dataPath,\n status,\n resolving = false,\n missingFields = [],\n preview,\n error,\n onDataSinkChange,\n onParserChange,\n onDataPathChange,\n}) => {\n const { t } = useI18n();\n\n const statusLabels: Record<WidgetBindingStatus, string> = {\n unbound: t('bigconsole.builder.dataBinding.status.unbound', 'Select a DataSink to begin'),\n loading: resolving\n ? t('bigconsole.parsers.selector.loading', 'Loading parsers...')\n : t('bigconsole.builder.dataBinding.status.loading', 'Testing parser and detecting fields…'),\n bound: t('bigconsole.builder.dataBinding.status.bound', 'Binding ready'),\n no_data: t('bigconsole.builder.dataBinding.status.noData', 'Parser returned no data'),\n parser_error: t('bigconsole.builder.dataBinding.status.parserError', 'Parser test failed'),\n field_mismatch: t('bigconsole.builder.dataBinding.status.fieldMismatch', 'Some mapped fields were not found'),\n };\n\n return (\n <SectionStack>\n <Section\n title=\"Data source\"\n description={t(\n 'bigconsole.builder.dataBinding.intro',\n 'Connect this widget to a DataSink and Parser to display transformed data.'\n )}\n data-testid=\"widget-inspector-data-source\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.dataSinkLabel', 'DataSink')}</Label>\n <DataSinkSelector\n value={dataSinkKey}\n onChange={onDataSinkChange}\n placeholder={t('bigconsole.builder.dataBinding.dataSinkPlaceholder', 'Select a DataSink...')}\n />\n {dataSinkKey && (\n <p className=\"text-xs text-text-secondary\">\n {t('bigconsole.builder.dataBinding.keyLabel', 'Key: {{key}}', { key: dataSinkKey })}\n {binding.source.ref && (\n <span className=\"ml-2 text-text-muted\">\n {t('bigconsole.builder.dataBinding.idLabel', 'ID: {{id}}...', {\n id: binding.source.ref.slice(0, 8),\n })}\n </span>\n )}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.parserLabel', 'Parser')}</Label>\n <ParserSelector\n consoleId={consoleId}\n value={binding.parserId ?? null}\n resolvedParser={resolvedParser}\n onChange={onParserChange}\n filterInputSinkKey={dataSinkKey ?? undefined}\n filterStatus={undefined}\n placeholder={\n dataSinkKey\n ? t('bigconsole.builder.dataBinding.parserPlaceholder', 'Select a parser...')\n : t('bigconsole.builder.dataBinding.parserPlaceholderNoSink', 'Select a DataSink first...')\n }\n disabled={!dataSinkKey}\n />\n </div>\n </div>\n </Section>\n\n <Section\n title={statusLabels[status]}\n tone={STATUS_TONES[status]}\n padding=\"compact\"\n headingLevel={3}\n icon={status === 'loading' ? <Spinner style={{ width: '14px', height: '14px' }} /> : undefined}\n data-testid=\"widget-inspector-binding-status\"\n >\n <div role=\"status\" aria-live=\"polite\" className=\"min-w-0 space-y-1\">\n {/*\n The status label is the section heading, which sits OUTSIDE this live\n region — without this echo a screen reader would never hear the binding\n flip from \"loading\" to \"bound\".\n */}\n <p className=\"sr-only\">{statusLabels[status]}</p>\n {error && <p className=\"break-words text-xs text-[var(--color-status-error-text)]\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"break-words text-xs text-[var(--color-status-warning-text)]\">\n {t('bigconsole.builder.dataBinding.missingFields', 'Missing: {{fields}}', {\n fields: missingFields.join(', '),\n })}\n </p>\n )}\n {!error && missingFields.length === 0 && status === 'bound' && preview !== undefined && (\n <p className=\"text-xs text-text-secondary\">\n The parser ran and its output matches the fields this widget expects.\n </p>\n )}\n </div>\n </Section>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.fieldMappingsConfigured', 'Field mappings configured')}\n headingLevel={3}\n >\n <div className=\"min-w-0 space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name} className=\"break-words\">\n {name}: <code className=\"rounded bg-bg-surface px-1 font-mono\">{path}</code>\n </p>\n ))}\n </div>\n </Section>\n )}\n\n {preview !== undefined && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.livePreviewLabel', 'Live Preview')}\n description=\"Raw parser output, exactly as the widget receives it.\"\n headingLevel={3}\n >\n <pre className=\"max-h-40 min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-surface p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </Section>\n )}\n\n <Section emphasis=\"muted\" padding=\"compact\" title=\"Data path\" headingLevel={3}>\n <div className=\"space-y-2\">\n <Label htmlFor=\"widget-inspector-data-path\">\n {t('bigconsole.builder.dataBinding.dataPathLabel', 'Data Path (Optional)')}\n </Label>\n <Input\n id=\"widget-inspector-data-path\"\n value={dataPath ?? ''}\n onChange={(event) => onDataPathChange(event.target.value || undefined)}\n placeholder={t('bigconsole.builder.dataBinding.dataPathPlaceholder', 'e.g., summary.totalRevenue')}\n />\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'bigconsole.builder.dataBinding.dataPathHelp',\n 'Path to extract specific data from the parser output (dot notation)'\n )}\n </p>\n </div>\n </Section>\n </SectionStack>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardCanvas.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/dashboard/DashboardCanvas.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;AAqBzF,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc3E,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACrD,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,uCAAuC;IACvC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmBD,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAkmBnD,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"DashboardCanvas.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/dashboard/DashboardCanvas.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;AAsBzF,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc3E,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACrD,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,uCAAuC;IACvC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmBD,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAqmBnD,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -13,7 +13,8 @@ import s from "../../hooks/useWidgetOperations.js";
13
13
  import c from "../../hooks/useDashboardOperations.js";
14
14
  import l from "../../hooks/useDashboardImageExport.js";
15
15
  import { BIGCONSOLE_PERMISSIONS as u } from "../../../constants/permissions.js";
16
- import { useInstalledWidgets as d } from "../../hooks/useInstalledWidgets.js";
16
+ import { loadBigConsoleSettings as d } from "../../hooks/useBigConsoleSettings.js";
17
+ import { useInstalledWidgets as f } from "../../hooks/useInstalledWidgets.js";
17
18
  import ee from "./DashboardGrid.js";
18
19
  import te from "./DashboardToolbar.js";
19
20
  import ne from "./GlobalFiltersBar/GlobalFiltersBar.js";
@@ -28,42 +29,42 @@ import se from "./WidgetPalette.js";
28
29
  import { calculatePositionFromDrop as ce, findNextAvailablePosition as le } from "../../utils/widgetPositioning.js";
29
30
  import { WidgetInspector as ue } from "../builder/WidgetInspector.js";
30
31
  import "../builder/index.js";
31
- import { memo as f, useCallback as p, useEffect as de, useMemo as fe, useRef as m, useState as h } from "react";
32
+ import { memo as p, useCallback as m, useEffect as de, useMemo as fe, useRef as h, useState as g } from "react";
32
33
  import { usePermissions as pe } from "@burdenoff/fe-libs/shared/providers/shell";
33
34
  import { Plus as me } from "lucide-react";
34
- import { Button as g } from "@burdenoff/fe-libs/ui";
35
- import { jsx as _, jsxs as v } from "react/jsx-runtime";
35
+ import { Button as _ } from "@burdenoff/fe-libs/ui";
36
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
36
37
  import { useI18n as he } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
37
38
  //#region src/bigconsole/components/dashboard/DashboardCanvas.tsx
38
- var y = f(function({ dashboardId: f, pageId: y, title: b, onPaste: ge, onSave: _e, isSaving: ve = !1, onExport: ye, onPublishTemplate: be, pages: x = [], activePageId: xe, onPageChange: Se, onPagesReorder: S, onPageAdd: Ce, onPageRename: we, onPageDuplicate: Te, onPageDelete: Ee, showFilters: De = !0, showPageTabs: Oe = !0, enableCrossFilter: ke = !0 }) {
39
- let { t: C } = he(), w = m(null), T = m(null), [E, Ae] = h(1200), [je, D] = h(!1), [O, k] = h(null), [A, j] = h(!1), [Me, M] = h(null), [N, Ne] = h(null), P = t((e) => e.viewMode === "edit"), F = t((e) => e.currentDashboard), { updateDashboard: I } = c({ skipFetch: !0 }), { hasPermission: Pe } = pe(), Fe = Pe(u.DASHBOARD_UPDATE), Ie = N?.id === f ? N.value : F?.id === f ? F.visibility : void 0, Le = p(async (e) => {
40
- let t = await I({
41
- id: f,
39
+ var b = p(function({ dashboardId: p, pageId: b, title: x, onPaste: ge, onSave: _e, isSaving: ve = !1, onExport: ye, onPublishTemplate: be, pages: S = [], activePageId: xe, onPageChange: Se, onPagesReorder: C, onPageAdd: Ce, onPageRename: we, onPageDuplicate: Te, onPageDelete: Ee, showFilters: De = !0, showPageTabs: Oe = !0, enableCrossFilter: ke = !0 }) {
40
+ let { t: w } = he(), T = h(null), E = h(null), [D, Ae] = g(1200), [je, O] = g(!1), [k, A] = g(null), [j, M] = g(!1), [Me, N] = g(null), [P, Ne] = g(null), F = t((e) => e.viewMode === "edit"), I = t((e) => e.currentDashboard), L = I?.pages.find((e) => e.id === b)?.gridColumns ?? 12, { updateDashboard: R } = c({ skipFetch: !0 }), { hasPermission: Pe } = pe(), Fe = Pe(u.DASHBOARD_UPDATE), Ie = P?.id === p ? P.value : I?.id === p ? I.visibility : void 0, Le = m(async (e) => {
41
+ let t = await R({
42
+ id: p,
42
43
  visibility: e
43
44
  });
44
45
  if (!t) throw Error("The dashboard service did not accept the change.");
45
46
  Ne({
46
- id: f,
47
+ id: p,
47
48
  value: t.visibility ?? e
48
49
  });
49
- }, [f, I]), { workspaceId: L, apiGatewayUrl: R, authToken: z } = r(), { installedWidgets: Re, loading: ze } = d({
50
- workspaceId: L,
51
- apiGatewayUrl: R,
52
- authToken: z,
53
- enabled: P
50
+ }, [p, R]), { workspaceId: z, apiGatewayUrl: B, authToken: V } = r(), { installedWidgets: Re, loading: ze } = f({
51
+ workspaceId: z,
52
+ apiGatewayUrl: B,
53
+ authToken: V,
54
+ enabled: F
54
55
  }), { definitions: Be } = o({
55
- workspaceId: L,
56
- apiGatewayUrl: R,
57
- authToken: z,
58
- enabled: P
59
- }), B = t((e) => e.zoomLevel), V = t((e) => e.sidebarCollapsed), H = t((e) => e.toggleSidebar), U = !V, W = t((e) => e.setGlobalFilterValues), Ve = p((e) => {
60
- W(e);
61
- }, [W]), { createWidget: G } = s(y, f, { skipFetch: !0 }), K = e((e) => e.widgets), q = fe(() => {
62
- let e = Array.from(K.values());
63
- return y ? e.filter((e) => e.pageId === y) : e;
64
- }, [K, y]), He = e((e) => e.selectedWidgetId), J = e((e) => e.selectWidget), Y = e((e) => e.addWidget), X = e((e) => e.updateWidgetPosition), Z = e((e) => e.configPanelOpen), Ue = e((e) => e.closeConfigPanel);
56
+ workspaceId: z,
57
+ apiGatewayUrl: B,
58
+ authToken: V,
59
+ enabled: F
60
+ }), H = t((e) => e.zoomLevel), U = t((e) => e.sidebarCollapsed), W = t((e) => e.toggleSidebar), G = !U, K = t((e) => e.setGlobalFilterValues), Ve = m((e) => {
61
+ K(e);
62
+ }, [K]), { createWidget: q } = s(b, p, { skipFetch: !0 }), J = e((e) => e.widgets), Y = fe(() => {
63
+ let e = Array.from(J.values());
64
+ return b ? e.filter((e) => e.pageId === b) : e;
65
+ }, [J, b]), He = e((e) => e.selectedWidgetId), X = e((e) => e.selectWidget), Z = e((e) => e.addWidget), Q = e((e) => e.updateWidgetPosition), Ue = e((e) => e.configPanelOpen), We = e((e) => e.closeConfigPanel);
65
66
  de(() => {
66
- let e = w.current;
67
+ let e = T.current;
67
68
  if (!e) return;
68
69
  let t = () => {
69
70
  Ae(e.offsetWidth);
@@ -74,93 +75,94 @@ var y = f(function({ dashboardId: f, pageId: y, title: b, onPaste: ge, onSave: _
74
75
  }
75
76
  return window.addEventListener("resize", t), () => window.removeEventListener("resize", t);
76
77
  }, []);
77
- let We = p((e) => {
78
+ let Ge = m((e) => {
78
79
  e.forEach((e) => {
79
- X(e.i, {
80
+ Q(e.i, {
80
81
  x: e.x,
81
82
  y: e.y,
82
83
  width: e.w,
83
84
  height: e.h
84
85
  });
85
86
  });
86
- }, [X]), Ge = p((e) => {
87
- J(e);
88
- }, [J]), Q = p(async (e, t) => {
89
- k(null);
90
- let n = t?.definition || (e.type ? a(e.type) : null), r = {
91
- width: n?.defaultSize?.width ?? 4,
92
- height: n?.defaultSize?.height ?? 4
93
- }, i;
94
- if (t?.position) i = t.position;
87
+ }, [Q]), Ke = m((e) => {
88
+ X(e);
89
+ }, [X]), $ = m(async (e, t) => {
90
+ A(null);
91
+ let n = t?.definition || (e.type ? a(e.type) : null), r = d(), i = {
92
+ width: Math.min(n?.defaultSize?.width ?? 4, L),
93
+ height: r.defaultWidgetHeight
94
+ }, o;
95
+ if (t?.position) o = t.position;
95
96
  else {
96
- let { x: e, y: t } = le(q, r, { cols: 12 });
97
- i = {
97
+ let { x: e, y: t } = le(Y, i, { cols: L });
98
+ o = {
98
99
  x: e,
99
100
  y: t,
100
- width: r.width,
101
- height: r.height
101
+ width: i.width,
102
+ height: i.height
102
103
  };
103
104
  }
104
- let o = e;
105
- if (y) {
106
- let t = await G({
107
- pageId: y,
108
- dashboardId: f,
105
+ let s = e;
106
+ if (b) {
107
+ let t = await q({
108
+ pageId: b,
109
+ dashboardId: p,
109
110
  type: e.type,
110
- title: e.title || C("bigconsole.dashboards.canvas.untitledWidget", "Untitled Widget"),
111
+ title: e.title || w("bigconsole.dashboards.canvas.untitledWidget", "Untitled Widget"),
111
112
  description: e.description,
112
113
  renderer: e.renderer,
113
114
  template: e.template,
114
115
  config: e.config || {},
115
- position: i,
116
- refreshInterval: e.refreshInterval ?? void 0,
117
- dataSinkId: o.dataSinkId,
118
- parserId: o.parserId
116
+ position: o,
117
+ refreshInterval: e.refreshInterval ?? r.defaultRefreshInterval,
118
+ dataSinkId: s.dataSinkId,
119
+ parserId: s.parserId
119
120
  });
120
121
  if (t) {
121
- J(t.id);
122
+ X(t.id);
122
123
  return;
123
124
  }
124
- k(C("bigconsole.dashboards.canvas.widgetCreateError", "Could not create the widget. Check the connection and try again."));
125
+ A(w("bigconsole.dashboards.canvas.widgetCreateError", "Could not create the widget. Check the connection and try again."));
125
126
  return;
126
127
  }
127
- let s = {
128
+ let c = {
128
129
  id: crypto.randomUUID(),
129
- dashboardId: f,
130
- pageId: y || "local",
130
+ dashboardId: p,
131
+ pageId: b || "local",
131
132
  type: e.type,
132
- title: e.title || C("bigconsole.dashboards.canvas.untitledWidget", "Untitled Widget"),
133
+ title: e.title || w("bigconsole.dashboards.canvas.untitledWidget", "Untitled Widget"),
133
134
  description: e.description,
134
135
  renderer: e.renderer,
135
136
  template: e.template,
136
- refreshInterval: e.refreshInterval,
137
+ refreshInterval: e.refreshInterval ?? r.defaultRefreshInterval,
137
138
  config: e.config || {},
138
- position: i,
139
- positionX: i.x,
140
- positionY: i.y,
141
- positionWidth: i.width,
142
- positionHeight: i.height,
143
- dataSinkId: o.dataSinkId,
144
- parserId: o.parserId,
139
+ position: o,
140
+ positionX: o.x,
141
+ positionY: o.y,
142
+ positionWidth: o.width,
143
+ positionHeight: o.height,
144
+ dataSinkId: s.dataSinkId,
145
+ parserId: s.parserId,
145
146
  translations: [],
146
147
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
147
148
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
148
149
  };
149
- Y(s), J(s.id);
150
+ Z(c), X(c.id);
150
151
  }, [
151
- f,
152
- y,
153
- G,
154
- Y,
155
- J,
152
+ p,
153
+ b,
156
154
  q,
157
- C
158
- ]), Ke = p((e) => {
159
- j(!0), M(e);
160
- }, []), qe = p(() => {
161
- j(!1), M(null);
162
- }, []), Je = p((e) => {
163
- e.preventDefault(), j(!1), M(null);
155
+ Z,
156
+ X,
157
+ Y,
158
+ L,
159
+ w
160
+ ]), qe = m((e) => {
161
+ M(!0), N(e);
162
+ }, []), Je = m(() => {
163
+ M(!1), N(null);
164
+ }, []), Ye = m((e) => {
165
+ e.preventDefault(), M(!1), N(null);
164
166
  try {
165
167
  let t = e.dataTransfer.getData("application/json");
166
168
  if (!t) return;
@@ -174,149 +176,153 @@ var y = f(function({ dashboardId: f, pageId: y, title: b, onPaste: ge, onSave: _
174
176
  defaultConfig: r.defaultConfig,
175
177
  defaultSize: r.defaultSize || i.defaultSize
176
178
  });
177
- let s = w.current?.getBoundingClientRect();
179
+ let s = T.current?.getBoundingClientRect();
178
180
  if (!s) return;
179
181
  let c = {
180
- width: i.defaultSize.width,
181
- height: i.defaultSize.height
182
- }, { x: l, y: u } = ce(e.clientX, e.clientY, s, E, c, { cols: 12 }), d = {
182
+ width: Math.min(i.defaultSize.width, L),
183
+ height: d().defaultWidgetHeight
184
+ }, { x: l, y: u } = ce(e.clientX, e.clientY, s, D, c, { cols: L }), f = {
183
185
  x: l,
184
186
  y: u,
185
187
  width: c.width,
186
188
  height: c.height
187
189
  };
188
- Q({
190
+ $({
189
191
  type: r.type,
190
192
  title: r.name || i.name,
191
193
  config: r.defaultConfig || i.defaultConfig
192
194
  }, {
193
- position: d,
195
+ position: f,
194
196
  definition: o
195
197
  });
196
198
  } catch (e) {
197
199
  console.error("Failed to handle widget drop:", e);
198
200
  }
199
- }, [E, Q]), Ye = p((e) => {
201
+ }, [
202
+ D,
203
+ $,
204
+ L
205
+ ]), Xe = m((e) => {
200
206
  e.preventDefault(), e.dataTransfer.dropEffect = "copy";
201
- }, []), Xe = p((e, t) => {
207
+ }, []), Ze = m((e, t) => {
202
208
  let n = t || a(e);
203
- Q({
209
+ $({
204
210
  type: e,
205
211
  title: n.name,
206
212
  config: n.defaultConfig
207
213
  });
208
- }, [Q]), Ze = p(() => {
209
- H();
210
- }, [H]), Qe = p(() => {
211
- V && H(), window.requestAnimationFrame(() => {
212
- let e = C("bigconsole.dashboards.widgetPalette.searchPlaceholder", "Search widgets...");
214
+ }, [$]), Qe = m(() => {
215
+ W();
216
+ }, [W]), $e = m(() => {
217
+ U && W(), window.requestAnimationFrame(() => {
218
+ let e = w("bigconsole.dashboards.widgetPalette.searchPlaceholder", "Search widgets...");
213
219
  document.querySelector(`input[placeholder="${e}"]`)?.focus();
214
220
  });
215
221
  }, [
216
- V,
217
- H,
218
- C
219
- ]), { exportPNG: $e, exportPDF: $, isExporting: et } = l({
220
- containerRef: T,
221
- name: b || "dashboard"
222
+ U,
223
+ W,
224
+ w
225
+ ]), { exportPNG: et, exportPDF: tt, isExporting: nt } = l({
226
+ containerRef: E,
227
+ name: x || "dashboard"
222
228
  });
223
- return /* @__PURE__ */ v("div", {
229
+ return /* @__PURE__ */ y("div", {
224
230
  className: "flex flex-col h-full min-w-0 overflow-hidden",
225
231
  children: [
226
- /* @__PURE__ */ _(te, {
227
- dashboardId: f,
228
- title: b,
229
- onAddWidget: Qe,
230
- onTogglePalette: Ze,
231
- isPaletteOpen: U,
232
+ /* @__PURE__ */ v(te, {
233
+ dashboardId: p,
234
+ title: x,
235
+ onAddWidget: $e,
236
+ onTogglePalette: Qe,
237
+ isPaletteOpen: G,
232
238
  onPaste: ge,
233
239
  onSave: _e,
234
240
  isSaving: ve,
235
241
  onExport: ye,
236
242
  onPublishTemplate: be,
237
- onExportImage: p(() => {
238
- $e();
239
- }, [$e]),
240
- onExportPdf: p(() => {
241
- $();
242
- }, [$]),
243
- isExportingImage: et,
244
- onShare: () => D(!0)
243
+ onExportImage: m(() => {
244
+ et();
245
+ }, [et]),
246
+ onExportPdf: m(() => {
247
+ tt();
248
+ }, [tt]),
249
+ isExportingImage: nt,
250
+ onShare: () => O(!0)
245
251
  }),
246
- O && /* @__PURE__ */ _("div", {
252
+ k && /* @__PURE__ */ v("div", {
247
253
  role: "alert",
248
254
  className: "mx-card-padding mt-control-gap flex-shrink-0",
249
- children: /* @__PURE__ */ _(i, {
255
+ children: /* @__PURE__ */ v(i, {
250
256
  tone: "danger",
251
257
  padding: "compact",
252
258
  headingLevel: 3,
253
259
  "data-testid": "widget-create-error",
254
260
  title: "Widget not created",
255
- description: O,
256
- actions: /* @__PURE__ */ _(g, {
261
+ description: k,
262
+ actions: /* @__PURE__ */ v(_, {
257
263
  variant: "outline",
258
264
  size: "sm",
259
- onClick: () => k(null),
260
- children: C("bigconsole.dashboards.canvas.dismiss", "Dismiss")
265
+ onClick: () => A(null),
266
+ children: w("bigconsole.dashboards.canvas.dismiss", "Dismiss")
261
267
  })
262
268
  })
263
269
  }),
264
- /* @__PURE__ */ _(ie, {
265
- widgets: q,
266
- isEditMode: P
270
+ /* @__PURE__ */ v(ie, {
271
+ widgets: Y,
272
+ isEditMode: F
267
273
  }),
268
- /* @__PURE__ */ _(re, {
269
- widgets: q,
270
- isEditMode: P
274
+ /* @__PURE__ */ v(re, {
275
+ widgets: Y,
276
+ isEditMode: F
271
277
  }),
272
- De && /* @__PURE__ */ _(ne, {
273
- dashboardId: f,
278
+ De && /* @__PURE__ */ v(ne, {
279
+ dashboardId: p,
274
280
  onFilterChange: Ve,
275
281
  collapsible: !0
276
282
  }),
277
- Oe && (P || x.length > 0) && /* @__PURE__ */ _(ae, {
278
- pages: x,
279
- activePageId: xe || x[0]?.id,
280
- editable: P,
283
+ Oe && (F || S.length > 0) && /* @__PURE__ */ v(ae, {
284
+ pages: S,
285
+ activePageId: xe || S[0]?.id,
286
+ editable: F,
281
287
  onPageSelect: Se || (() => {}),
282
- onPagesReorder: S ? (e) => {
283
- S(e.map((e) => x.find((t) => t.id === e)).filter(Boolean));
288
+ onPagesReorder: C ? (e) => {
289
+ C(e.map((e) => S.find((t) => t.id === e)).filter(Boolean));
284
290
  } : void 0,
285
291
  onPageCreate: Ce,
286
292
  onPageRename: we,
287
293
  onPageDuplicate: Te,
288
294
  onPageDelete: Ee
289
295
  }),
290
- /* @__PURE__ */ v("div", {
296
+ /* @__PURE__ */ y("div", {
291
297
  "data-testid": "dashboard-canvas-panes",
292
- className: `flex flex-1 min-w-0 overflow-hidden ${Z ? "lg:mr-[var(--bc-inspector-width,420px)]" : ""}`,
293
- children: [P && /* @__PURE__ */ _(se, {
294
- isOpen: U,
295
- onClose: Ze,
296
- onWidgetSelect: Xe,
297
- onDragStart: Ke,
298
- onDragEnd: qe,
298
+ className: `flex flex-1 min-w-0 overflow-hidden ${Ue ? "lg:mr-[var(--bc-inspector-width,420px)]" : ""}`,
299
+ children: [F && /* @__PURE__ */ v(se, {
300
+ isOpen: G,
301
+ onClose: Qe,
302
+ onWidgetSelect: Ze,
303
+ onDragStart: qe,
304
+ onDragEnd: Je,
299
305
  installedWidgets: Re,
300
306
  installedWidgetsLoading: ze,
301
307
  definitions: Be
302
- }), /* @__PURE__ */ v("div", {
303
- ref: w,
308
+ }), /* @__PURE__ */ y("div", {
309
+ ref: T,
304
310
  role: "region",
305
311
  "aria-label": "Dashboard board",
306
312
  "data-section-emphasis": "primary",
307
313
  "data-testid": "dashboard-board",
308
314
  className: "relative min-w-0 flex-1 overflow-auto border-2 border-transparent bg-bg-sunken motion-safe:transition-[border-color,background-color]",
309
- onDrop: Je,
310
- onDragOver: Ye,
315
+ onDrop: Ye,
316
+ onDragOver: Xe,
311
317
  onClick: () => {
312
- P && J(null);
318
+ F && X(null);
313
319
  },
314
- style: A ? {
320
+ style: j ? {
315
321
  borderStyle: "dashed",
316
322
  borderColor: "var(--color-action-primary-bg)",
317
323
  backgroundColor: "var(--color-bg-accentSubtle)"
318
324
  } : void 0,
319
- children: [A && /* @__PURE__ */ _("div", {
325
+ children: [j && /* @__PURE__ */ v("div", {
320
326
  style: {
321
327
  position: "absolute",
322
328
  top: "50%",
@@ -330,65 +336,66 @@ var y = f(function({ dashboardId: f, pageId: y, title: b, onPaste: ge, onSave: _
330
336
  pointerEvents: "none",
331
337
  zIndex: 100
332
338
  },
333
- children: /* @__PURE__ */ v("p", {
339
+ children: /* @__PURE__ */ y("p", {
334
340
  style: {
335
341
  fontSize: "var(--font-size-body-md)",
336
342
  color: "var(--color-text-primary)",
337
343
  margin: 0
338
344
  },
339
345
  children: [
340
- C("bigconsole.dashboards.canvas.dropToAddBefore", "Drop to add"),
346
+ w("bigconsole.dashboards.canvas.dropToAddBefore", "Drop to add"),
341
347
  " ",
342
- /* @__PURE__ */ _("strong", { children: Me }),
348
+ /* @__PURE__ */ v("strong", { children: Me }),
343
349
  " ",
344
- C("bigconsole.dashboards.canvas.dropToAddAfter", "widget")
350
+ w("bigconsole.dashboards.canvas.dropToAddAfter", "widget")
345
351
  ]
346
352
  })
347
- }), /* @__PURE__ */ _("div", {
348
- ref: T,
353
+ }), /* @__PURE__ */ v("div", {
354
+ ref: E,
349
355
  className: "min-h-full origin-top-left transition-transform",
350
356
  style: {
351
- transform: `scale(${B / 100})`,
352
- width: `${100 / (B / 100)}%`
357
+ transform: `scale(${H / 100})`,
358
+ width: `${100 / (H / 100)}%`
353
359
  },
354
- children: q.length > 0 ? /* @__PURE__ */ _(n, {
360
+ children: Y.length > 0 ? /* @__PURE__ */ v(n, {
355
361
  enabled: ke,
356
362
  onCrossFilter: (e) => {},
357
- children: /* @__PURE__ */ _(ee, {
358
- widgets: q,
359
- isEditMode: P,
360
- width: E,
361
- onLayoutChange: We,
362
- onWidgetSelect: Ge,
363
+ children: /* @__PURE__ */ v(ee, {
364
+ widgets: Y,
365
+ cols: L,
366
+ isEditMode: F,
367
+ width: D,
368
+ onLayoutChange: Ge,
369
+ onWidgetSelect: Ke,
363
370
  selectedWidgetId: He
364
371
  })
365
- }) : /* @__PURE__ */ _("div", {
372
+ }) : /* @__PURE__ */ v("div", {
366
373
  className: "flex min-h-[min(400px,60vh)] items-center justify-center p-card-padding",
367
- children: /* @__PURE__ */ _(i, {
374
+ children: /* @__PURE__ */ v(i, {
368
375
  headingLevel: 3,
369
376
  className: "w-full max-w-md",
370
377
  "data-testid": "dashboard-empty-board",
371
378
  headerClassName: "mb-form-gap",
372
- title: C("bigconsole.dashboards.canvas.noWidgetsTitle", "No widgets yet"),
373
- description: C("bigconsole.dashboards.canvas.noWidgetsDescription", "Add widgets to build your dashboard. Click the \"Add Widget\" button to get started."),
374
- children: P && /* @__PURE__ */ v(g, {
375
- onClick: Qe,
376
- children: [/* @__PURE__ */ _(me, { className: "size-4" }), C("bigconsole.dashboards.canvas.addWidget", "Add Widget")]
379
+ title: w("bigconsole.dashboards.canvas.noWidgetsTitle", "No widgets yet"),
380
+ description: w("bigconsole.dashboards.canvas.noWidgetsDescription", "Add widgets to build your dashboard. Click the \"Add Widget\" button to get started."),
381
+ children: F && /* @__PURE__ */ y(_, {
382
+ onClick: $e,
383
+ children: [/* @__PURE__ */ v(me, { className: "size-4" }), w("bigconsole.dashboards.canvas.addWidget", "Add Widget")]
377
384
  })
378
385
  })
379
386
  })
380
387
  })]
381
388
  })]
382
389
  }),
383
- /* @__PURE__ */ _(ue, {
384
- isOpen: Z,
385
- onClose: Ue
390
+ /* @__PURE__ */ v(ue, {
391
+ isOpen: Ue,
392
+ onClose: We
386
393
  }),
387
- /* @__PURE__ */ _(oe, {
388
- dashboardId: f,
389
- dashboardName: b || C("bigconsole.dashboards.canvas.dashboardFallbackName", "Dashboard"),
394
+ /* @__PURE__ */ v(oe, {
395
+ dashboardId: p,
396
+ dashboardName: x || w("bigconsole.dashboards.canvas.dashboardFallbackName", "Dashboard"),
390
397
  isOpen: je,
391
- onClose: () => D(!1),
398
+ onClose: () => O(!1),
392
399
  visibility: Ie,
393
400
  onVisibilityChange: Le,
394
401
  canChangeVisibility: Fe
@@ -397,6 +404,6 @@ var y = f(function({ dashboardId: f, pageId: y, title: b, onPaste: ge, onSave: _
397
404
  });
398
405
  });
399
406
  //#endregion
400
- export { y as default };
407
+ export { b as default };
401
408
 
402
409
  //# sourceMappingURL=DashboardCanvas.js.map