@burdenoff/microfe-bigconsole 2026.805.1 → 2026.805.3

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/AdminRoot.js +21 -16
  2. package/dist/bigconsole/AdminRoot.js.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoot.js +44 -39
  4. package/dist/bigconsole/BigConsoleRoot.js.map +1 -1
  5. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +109 -113
  6. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  7. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +115 -113
  8. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  9. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +71 -62
  10. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  11. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +116 -100
  12. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  13. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +56 -54
  14. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  15. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +126 -125
  16. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  17. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +151 -150
  18. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  19. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +77 -76
  20. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  21. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +97 -96
  22. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  23. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +172 -191
  24. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  25. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +100 -98
  26. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  27. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
  28. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
  29. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +151 -154
  30. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  31. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +187 -193
  32. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  33. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
  34. package/dist/bigconsole/components/dashboard/WidgetPalette.js +110 -108
  35. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  36. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +102 -103
  37. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  38. package/dist/bigconsole/components/datasink/DataSinkCard.js +20 -20
  39. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  40. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +36 -41
  41. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  42. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +38 -37
  43. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  44. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
  45. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  46. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +182 -197
  47. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  48. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +166 -168
  49. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  50. package/dist/bigconsole/components/parser/DataSinkSelector.js +87 -86
  51. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  52. package/dist/bigconsole/components/parser/ImportParserDialog.js +196 -211
  53. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  54. package/dist/bigconsole/components/parser/ParserSelector.js +130 -128
  55. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  56. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +66 -63
  57. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  58. package/dist/bigconsole/components/preview/AiPreviewPanel.js +95 -91
  59. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  60. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +243 -230
  61. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  62. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +149 -145
  63. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  64. package/dist/bigconsole/components/widgets/PropertiesPanel.js +504 -470
  65. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  66. package/dist/bigconsole/components/widgets/WidgetMenu.js +87 -76
  67. package/dist/bigconsole/components/widgets/WidgetMenu.js.map +1 -1
  68. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +44 -47
  69. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  70. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +143 -142
  71. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  72. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +101 -88
  73. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  74. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +135 -134
  75. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  76. package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
  77. package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
  78. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +69 -68
  79. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  80. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +64 -72
  81. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  82. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +60 -59
  83. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  84. package/dist/bigconsole/components/widgets/list/ListConfig.js +57 -56
  85. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  86. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +70 -69
  87. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  88. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
  89. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  90. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
  91. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
  92. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +178 -177
  93. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  94. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +76 -75
  95. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  96. package/dist/bigconsole/components/widgets/table/TableConfig.js +183 -168
  97. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  98. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +187 -180
  99. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  100. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +120 -118
  101. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  102. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +40 -38
  103. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  104. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +150 -148
  105. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  106. package/dist/bigconsole/pages/DashboardBuilderPage.js +189 -175
  107. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  108. package/dist/bigconsole/pages/DashboardViewPage.js +200 -187
  109. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  110. package/dist/bigconsole/pages/DashboardsPage.js +379 -324
  111. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  112. package/dist/bigconsole/pages/DataParsersPage.js +185 -178
  113. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  114. package/dist/bigconsole/pages/DataSinkBuilderPage.js +195 -170
  115. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  116. package/dist/bigconsole/pages/DataSinkViewPage.js +224 -200
  117. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  118. package/dist/bigconsole/pages/DataSinksPage.js +281 -268
  119. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  120. package/dist/bigconsole/pages/DataSourcesPage.js +8 -7
  121. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  122. package/dist/bigconsole/pages/InsightsPage.js +238 -208
  123. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  124. package/dist/bigconsole/pages/ParserBuilderPage.js +480 -413
  125. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  126. package/dist/bigconsole/pages/ParserViewPage.js +192 -172
  127. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  128. package/dist/bigconsole/pages/PipelineBuilderPage.js +198 -163
  129. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  130. package/dist/bigconsole/pages/PipelineViewPage.js +138 -133
  131. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  132. package/dist/bigconsole/pages/PipelinesPage.js +162 -136
  133. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  134. package/dist/bigconsole/pages/SettingsPage.js +177 -172
  135. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  136. package/dist/bigconsole/pages/WidgetDemoPage.js +121 -83
  137. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  138. package/dist/bigconsole/pages/WorkflowViewPage.js +269 -242
  139. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  140. package/dist/bigconsole/pages/WorkflowsPage.js +153 -138
  141. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  142. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
  143. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
  144. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
  145. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
  146. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
  147. package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
  148. package/dist/constants/permissions.js +83 -0
  149. package/dist/constants/permissions.js.map +1 -0
  150. package/package.json +2 -1
@@ -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 type { WidgetBinding, WidgetBindingStatus } from '../../../types';\nimport { DataSinkSelector } from '../../parser/DataSinkSelector';\nimport { ParserSelector } from '../../parser/ParserSelector';\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\nconst STATUS_LABELS: Record<WidgetBindingStatus, string> = {\n unbound: 'Select a DataSink to begin',\n loading: 'Testing parser and detecting fields…',\n bound: 'Binding ready',\n no_data: 'Parser returned no data',\n parser_error: 'Parser test failed',\n field_mismatch: 'Some mapped fields were not found',\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 <div className=\"space-y-4\">\n <div className=\"rounded-md border border-border-subtle bg-bg-sunken p-3\">\n <p className=\"text-xs text-text-secondary\">\n Connect this widget to a DataSink and Parser to display transformed data.\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <Label>DataSink</Label>\n <DataSinkSelector value={dataSinkKey} onChange={onDataSinkChange} placeholder=\"Select a DataSink...\" />\n {dataSinkKey && (\n <p className=\"text-xs text-text-secondary\">\n Key: {dataSinkKey}\n {binding.source.ref && (\n <span className=\"ml-2 text-text-tertiary\">ID: {binding.source.ref.slice(0, 8)}...</span>\n )}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label>Parser</Label>\n <ParserSelector\n consoleId={consoleId}\n value={binding.parserId ?? null}\n onChange={onParserChange}\n filterInputSinkKey={dataSinkKey ?? undefined}\n filterStatus={undefined}\n placeholder={dataSinkKey ? 'Select a parser...' : 'Select a DataSink first...'}\n disabled={!dataSinkKey}\n />\n <p className=\"flex items-center gap-1 text-xs text-text-secondary\" role=\"status\">\n {status === 'loading' && <Spinner style={{ width: '12px', height: '12px' }} />}\n {STATUS_LABELS[status]}\n </p>\n {error && <p className=\"text-xs text-status-error-text\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"text-xs text-status-warning-text\">Missing: {missingFields.join(', ')}</p>\n )}\n </div>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <div className=\"rounded-md border border-status-success-border bg-status-success-bg-subtle p-3\">\n <p className=\"mb-2 text-xs font-medium text-status-success-text\">Field mappings configured</p>\n <div className=\"space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name}>\n {name}: <code className=\"rounded bg-bg-sunken px-1\">{path}</code>\n </p>\n ))}\n </div>\n </div>\n )}\n\n {preview !== undefined && (\n <div className=\"space-y-2\">\n <Label>Live Preview</Label>\n <pre className=\"max-h-40 overflow-auto rounded-md border border-border-subtle bg-bg-sunken p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label>Data Path (Optional)</Label>\n <Input\n value={dataPath ?? ''}\n onChange={(event) => onDataPathChange(event.target.value || undefined)}\n placeholder=\"e.g., summary.totalRevenue\"\n />\n <p className=\"text-xs text-text-secondary\">Path to extract specific data from the parser output (dot notation)</p>\n </div>\n </div>\n);\n"],"mappings":";;;;;AAoBA,IAAM,IAAqD;CACzD,SAAS;CACT,SAAS;CACT,OAAO;CACP,SAAS;CACT,cAAc;CACd,gBAAgB;CACjB,EAEY,KAAmD,EAC9D,cACA,YACA,gBACA,aACA,WACA,mBAAgB,EAAE,EAClB,YACA,UACA,qBACA,mBACA,0BAEA,kBAAC,OAAD;CAAK,WAAU;WAAf;EACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAEvC,CAAA;GACA,CAAA;EAEN,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD,EAAA,UAAO,YAAgB,CAAA;IACvB,kBAAC,GAAD;KAAkB,OAAO;KAAa,UAAU;KAAkB,aAAY;KAAyB,CAAA;IACtG,KACC,kBAAC,KAAD;KAAG,WAAU;eAAb;MAA2C;MACnC;MACL,EAAQ,OAAO,OACd,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QAA0C;QAAK,EAAQ,OAAO,IAAI,MAAM,GAAG,EAAE;QAAC;QAAU;;MAExF;;IAEF;;EAEN,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD,EAAA,UAAO,UAAc,CAAA;IACrB,kBAAC,GAAD;KACa;KACX,OAAO,EAAQ,YAAY;KAC3B,UAAU;KACV,oBAAoB,KAAe,KAAA;KACnC,cAAc,KAAA;KACd,aAAa,IAAc,uBAAuB;KAClD,UAAU,CAAC;KACX,CAAA;IACF,kBAAC,KAAD;KAAG,WAAU;KAAsD,MAAK;eAAxE,CACG,MAAW,aAAa,kBAAC,GAAD,EAAS,OAAO;MAAE,OAAO;MAAQ,QAAQ;MAAQ,EAAI,CAAA,EAC7E,EAAc,GACb;;IACH,KAAS,kBAAC,KAAD;KAAG,WAAU;eAAkC;KAAU,CAAA;IAClE,EAAc,SAAS,KACtB,kBAAC,KAAD;KAAG,WAAU;eAAb,CAAgD,aAAU,EAAc,KAAK,KAAK,CAAK;;IAErF;;EAEL,EAAQ,YAAY,OAAO,KAAK,EAAQ,OAAO,CAAC,SAAS,KACxD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAoD;IAA6B,CAAA,EAC9F,kBAAC,OAAD;IAAK,WAAU;cACZ,OAAO,QAAQ,EAAQ,OAAO,CAAC,KAAK,CAAC,GAAM,OAC1C,kBAAC,KAAD,EAAA,UAAA;KACG;KAAK;KAAE,kBAAC,QAAD;MAAM,WAAU;gBAA6B;MAAY,CAAA;KAC/D,EAAA,EAFI,EAEJ,CACJ;IACE,CAAA,CACF;;EAGP,MAAY,KAAA,KACX,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAA,UAAO,gBAAoB,CAAA,EAC3B,kBAAC,OAAD;IAAK,WAAU;cACZ,KAAK,UAAU,GAAS,MAAM,EAAE;IAC7B,CAAA,CACF;;EAGR,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD,EAAA,UAAO,wBAA4B,CAAA;IACnC,kBAAC,GAAD;KACE,OAAO,KAAY;KACnB,WAAW,MAAU,EAAiB,EAAM,OAAO,SAAS,KAAA,EAAU;KACtE,aAAY;KACZ,CAAA;IACF,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAAuE,CAAA;IAC9G;;EACF"}
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';\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\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 <div className=\"space-y-4\">\n <div className=\"rounded-md border border-border-subtle bg-bg-sunken p-3\">\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'bigconsole.builder.dataBinding.intro',\n 'Connect this widget to a DataSink and Parser to display transformed data.'\n )}\n </p>\n </div>\n\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-tertiary\">\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 <p className=\"flex items-center gap-1 text-xs text-text-secondary\" role=\"status\">\n {status === 'loading' && <Spinner style={{ width: '12px', height: '12px' }} />}\n {statusLabels[status]}\n </p>\n {error && <p className=\"text-xs text-status-error-text\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"text-xs text-status-warning-text\">\n {t('bigconsole.builder.dataBinding.missingFields', 'Missing: {{fields}}', {\n fields: missingFields.join(', '),\n })}\n </p>\n )}\n </div>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <div className=\"rounded-md border border-status-success-border bg-status-success-bg-subtle p-3\">\n <p className=\"mb-2 text-xs font-medium text-status-success-text\">\n {t('bigconsole.builder.dataBinding.fieldMappingsConfigured', 'Field mappings configured')}\n </p>\n <div className=\"space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name}>\n {name}: <code className=\"rounded bg-bg-sunken px-1\">{path}</code>\n </p>\n ))}\n </div>\n </div>\n )}\n\n {preview !== undefined && (\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.livePreviewLabel', 'Live Preview')}</Label>\n <pre className=\"max-h-40 overflow-auto rounded-md border border-border-subtle bg-bg-sunken p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.dataPathLabel', 'Data Path (Optional)')}</Label>\n <Input\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 </div>\n );\n};\n"],"mappings":"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"}
@@ -2,63 +2,64 @@ import e from "./StoreTemplatePicker.js";
2
2
  import t from "../../hooks/useStoreDashboardTemplates.js";
3
3
  import { memo as n, useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
4
4
  import { Copy as s, LayoutDashboard as c, Plus as l, Tag as u, X as d } from "lucide-react";
5
- import { Badge as f, Button as p, Dialog as m, DialogContent as h, DialogDescription as g, DialogFooter as _, DialogHeader as v, DialogTitle as y, Input as b, Spinner as x, Textarea as S } from "@burdenoff/fe-libs/ui";
5
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ import { Badge as p, Button as m, Dialog as h, DialogContent as g, DialogDescription as _, DialogFooter as v, DialogHeader as y, DialogTitle as b, Input as x, Spinner as ee, Textarea as S } from "@burdenoff/fe-libs/ui";
6
7
  import { jsx as C, jsxs as w } from "react/jsx-runtime";
7
8
  //#region src/bigconsole/components/dashboard/CreateDashboardDialog.tsx
8
9
  var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, showTemplates: O = !0, onTemplateInstalled: k }) {
9
- let { templates: A, loading: j, error: M, fetchTemplateContent: N, installTemplate: P } = t({ autoLoad: O }), [F, I] = o(!1), [L, R] = o("blank"), [z, B] = o(""), [V, H] = o(""), [U, W] = o([]), [G, K] = o(""), [q, J] = o(null), [Y, X] = o(null), Z = a(null);
10
+ let { t: A } = f(), { templates: j, loading: M, error: N, fetchTemplateContent: P, installTemplate: F } = t({ autoLoad: O }), [I, L] = o(!1), [R, z] = o("blank"), [B, V] = o(""), [H, U] = o(""), [W, G] = o([]), [K, q] = o(""), [J, Y] = o(null), [X, Z] = o(null), Q = a(null);
10
11
  i(() => {
11
- n && (R("blank"), B(""), H(""), W([]), K(""), J(null), X(null), setTimeout(() => {
12
- Z.current?.focus();
12
+ n && (z("blank"), V(""), U(""), G([]), q(""), Y(null), Z(null), setTimeout(() => {
13
+ Q.current?.focus();
13
14
  }, 100));
14
15
  }, [n]);
15
- let Q = r(() => {
16
- let e = G.trim().toLowerCase();
17
- e && !U.includes(e) && U.length < 10 && (W((t) => [...t, e]), K(""));
18
- }, [G, U]), $ = r((e) => {
19
- W((t) => t.filter((t) => t !== e));
20
- }, []), ee = r((e) => {
21
- e.key === "Enter" ? (e.preventDefault(), Q()) : e.key === "Backspace" && !G && U.length > 0 && W((e) => e.slice(0, -1));
16
+ let $ = r(() => {
17
+ let e = K.trim().toLowerCase();
18
+ e && !W.includes(e) && W.length < 10 && (G((t) => [...t, e]), q(""));
19
+ }, [K, W]), te = r((e) => {
20
+ G((t) => t.filter((t) => t !== e));
21
+ }, []), ne = r((e) => {
22
+ e.key === "Enter" ? (e.preventDefault(), $()) : e.key === "Backspace" && !K && W.length > 0 && G((e) => e.slice(0, -1));
22
23
  }, [
23
- Q,
24
- G,
25
- U.length
26
- ]), te = r((e) => {
27
- J(e), B(e.name), H(e.description || "");
28
- }, []), ne = r(async (e) => {
29
- if (e.preventDefault(), L === "template" && !q) {
30
- X("Please select a template");
24
+ $,
25
+ K,
26
+ W.length
27
+ ]), re = r((e) => {
28
+ Y(e), V(e.name), U(e.description || "");
29
+ }, []), ie = r(async (e) => {
30
+ if (e.preventDefault(), R === "template" && !J) {
31
+ Z(A("bigconsole.dashboards.createDialog.error.selectTemplate", "Please select a template"));
31
32
  return;
32
33
  }
33
- let t = z.trim();
34
+ let t = B.trim();
34
35
  if (!t) {
35
- X("Dashboard name is required"), Z.current?.focus();
36
+ Z(A("bigconsole.dashboards.createDialog.error.nameRequired", "Dashboard name is required")), Q.current?.focus();
36
37
  return;
37
38
  }
38
39
  if (t.length < 3) {
39
- X("Dashboard name must be at least 3 characters"), Z.current?.focus();
40
+ Z(A("bigconsole.dashboards.createDialog.error.nameTooShort", "Dashboard name must be at least 3 characters")), Q.current?.focus();
40
41
  return;
41
42
  }
42
43
  if (t.length > 100) {
43
- X("Dashboard name must be less than 100 characters"), Z.current?.focus();
44
+ Z(A("bigconsole.dashboards.createDialog.error.nameTooLong", "Dashboard name must be less than 100 characters")), Q.current?.focus();
44
45
  return;
45
46
  }
46
- if (X(null), L === "template" && q) {
47
- I(!0);
47
+ if (Z(null), R === "template" && J) {
48
+ L(!0);
48
49
  try {
49
- let e = await N(q.id);
50
+ let e = await P(J.id);
50
51
  if (!e) {
51
- X("This template has no dashboard definition attached and cannot be installed.");
52
+ Z(A("bigconsole.dashboards.createDialog.error.noDefinition", "This template has no dashboard definition attached and cannot be installed."));
52
53
  return;
53
54
  }
54
- let n = await P({
55
- templateId: q.id,
56
- templateName: q.name,
55
+ let n = await F({
56
+ templateId: J.id,
57
+ templateName: J.name,
57
58
  content: e,
58
59
  name: t
59
60
  });
60
61
  if (!n.success) {
61
- X(n.errorMessage ?? "Failed to create dashboard from template.");
62
+ Z(n.errorMessage ?? A("bigconsole.dashboards.createDialog.error.installFailed", "Failed to create dashboard from template."));
62
63
  return;
63
64
  }
64
65
  n.dashboardId && k?.({
@@ -66,44 +67,45 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
66
67
  widgetsNeedingData: n.widgetsNeedingData
67
68
  }), E();
68
69
  } catch (e) {
69
- X(e instanceof Error ? e.message : "Failed to create dashboard from template.");
70
+ Z(e instanceof Error ? e.message : A("bigconsole.dashboards.createDialog.error.installFailed", "Failed to create dashboard from template."));
70
71
  } finally {
71
- I(!1);
72
+ L(!1);
72
73
  }
73
74
  return;
74
75
  }
75
76
  try {
76
77
  await D({
77
78
  name: t,
78
- description: V.trim(),
79
+ description: H.trim(),
79
80
  category: "CUSTOM",
80
- tags: U.length > 0 ? U : void 0
81
+ tags: W.length > 0 ? W : void 0
81
82
  });
82
83
  } catch (e) {
83
- X(e instanceof Error ? e.message : "Failed to create dashboard. Please try again.");
84
+ Z(e instanceof Error ? e.message : A("bigconsole.dashboards.createDialog.error.createFailed", "Failed to create dashboard. Please try again."));
84
85
  }
85
86
  }, [
86
- z,
87
- V,
88
- U,
89
- L,
90
- q,
87
+ B,
88
+ H,
89
+ W,
90
+ R,
91
+ J,
91
92
  D,
92
93
  E,
93
- N,
94
94
  P,
95
- k
95
+ F,
96
+ k,
97
+ A
96
98
  ]);
97
- return /* @__PURE__ */ C(m, {
99
+ return /* @__PURE__ */ C(h, {
98
100
  open: n,
99
101
  onOpenChange: (e) => !e && !T && E(),
100
- children: /* @__PURE__ */ w(h, {
102
+ children: /* @__PURE__ */ w(g, {
101
103
  style: {
102
- maxWidth: L === "template" ? "900px" : "480px",
104
+ maxWidth: R === "template" ? "900px" : "480px",
103
105
  padding: 0,
104
106
  transition: "max-width 0.2s ease"
105
107
  },
106
- children: [/* @__PURE__ */ C(v, {
108
+ children: [/* @__PURE__ */ C(y, {
107
109
  style: { padding: "var(--space-pagePadding) var(--space-pagePadding) 0" },
108
110
  children: /* @__PURE__ */ w("div", {
109
111
  style: {
@@ -127,25 +129,25 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
127
129
  width: "var(--size-icon-lg)",
128
130
  color: "var(--color-action-primary-text)"
129
131
  } })
130
- }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(y, {
132
+ }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(b, {
131
133
  style: {
132
134
  fontSize: "var(--font-size-heading-h4)",
133
135
  fontWeight: "var(--font-weight-bold)",
134
136
  color: "var(--color-text-primary)",
135
137
  margin: 0
136
138
  },
137
- children: "Create New Dashboard"
138
- }), /* @__PURE__ */ C(g, {
139
+ children: A("bigconsole.dashboards.createDialog.title", "Create New Dashboard")
140
+ }), /* @__PURE__ */ C(_, {
139
141
  style: {
140
142
  fontSize: "var(--font-size-body-sm)",
141
143
  color: "var(--color-text-secondary)",
142
144
  margin: "var(--space-controlGap) 0 0 0"
143
145
  },
144
- children: "Create a new dashboard to visualize your data"
146
+ children: A("bigconsole.dashboards.createDialog.subtitle", "Create a new dashboard to visualize your data")
145
147
  })] })]
146
148
  })
147
149
  }), /* @__PURE__ */ w("form", {
148
- onSubmit: ne,
150
+ onSubmit: ie,
149
151
  children: [
150
152
  O && /* @__PURE__ */ C("div", {
151
153
  style: { padding: "var(--space-pagePadding) var(--space-pagePadding) 0" },
@@ -160,7 +162,7 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
160
162
  children: [/* @__PURE__ */ w("button", {
161
163
  type: "button",
162
164
  onClick: () => {
163
- R("blank"), J(null);
165
+ z("blank"), Y(null);
164
166
  },
165
167
  style: {
166
168
  flex: 1,
@@ -171,21 +173,21 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
171
173
  padding: "var(--space-controlGap) var(--space-formGap)",
172
174
  borderRadius: "var(--radius-button)",
173
175
  border: "none",
174
- backgroundColor: L === "blank" ? "var(--color-bg-surface)" : "transparent",
175
- color: L === "blank" ? "var(--color-text-primary)" : "var(--color-text-secondary)",
176
- fontWeight: L === "blank" ? "var(--font-weight-semibold)" : "var(--font-weight-regular)",
176
+ backgroundColor: R === "blank" ? "var(--color-bg-surface)" : "transparent",
177
+ color: R === "blank" ? "var(--color-text-primary)" : "var(--color-text-secondary)",
178
+ fontWeight: R === "blank" ? "var(--font-weight-semibold)" : "var(--font-weight-regular)",
177
179
  fontSize: "var(--font-size-body-sm)",
178
180
  cursor: "pointer",
179
- boxShadow: L === "blank" ? "var(--shadow-elevation-1)" : "none",
181
+ boxShadow: R === "blank" ? "var(--shadow-elevation-1)" : "none",
180
182
  transition: "all 0.15s ease"
181
183
  },
182
184
  children: [/* @__PURE__ */ C(l, { style: {
183
185
  height: "var(--size-icon-sm)",
184
186
  width: "var(--size-icon-sm)"
185
- } }), "Blank Dashboard"]
187
+ } }), A("bigconsole.dashboards.createDialog.tab.blank", "Blank Dashboard")]
186
188
  }), /* @__PURE__ */ w("button", {
187
189
  type: "button",
188
- onClick: () => R("template"),
190
+ onClick: () => z("template"),
189
191
  style: {
190
192
  flex: 1,
191
193
  display: "flex",
@@ -195,33 +197,33 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
195
197
  padding: "var(--space-controlGap) var(--space-formGap)",
196
198
  borderRadius: "var(--radius-button)",
197
199
  border: "none",
198
- backgroundColor: L === "template" ? "var(--color-bg-surface)" : "transparent",
199
- color: L === "template" ? "var(--color-text-primary)" : "var(--color-text-secondary)",
200
- fontWeight: L === "template" ? "var(--font-weight-semibold)" : "var(--font-weight-regular)",
200
+ backgroundColor: R === "template" ? "var(--color-bg-surface)" : "transparent",
201
+ color: R === "template" ? "var(--color-text-primary)" : "var(--color-text-secondary)",
202
+ fontWeight: R === "template" ? "var(--font-weight-semibold)" : "var(--font-weight-regular)",
201
203
  fontSize: "var(--font-size-body-sm)",
202
204
  cursor: "pointer",
203
- boxShadow: L === "template" ? "var(--shadow-elevation-1)" : "none",
205
+ boxShadow: R === "template" ? "var(--shadow-elevation-1)" : "none",
204
206
  transition: "all 0.15s ease"
205
207
  },
206
208
  children: [/* @__PURE__ */ C(s, { style: {
207
209
  height: "var(--size-icon-sm)",
208
210
  width: "var(--size-icon-sm)"
209
- } }), "From Template"]
211
+ } }), A("bigconsole.dashboards.createDialog.tab.template", "From Template")]
210
212
  })]
211
213
  })
212
214
  }),
213
- L === "template" && /* @__PURE__ */ C("div", {
215
+ R === "template" && /* @__PURE__ */ C("div", {
214
216
  style: {
215
217
  padding: "var(--space-pagePadding)",
216
218
  maxHeight: "400px",
217
219
  overflowY: "auto"
218
220
  },
219
221
  children: /* @__PURE__ */ C(e, {
220
- templates: A,
221
- loading: j,
222
- error: M,
223
- selectedTemplateId: q?.id,
224
- onSelect: te
222
+ templates: j,
223
+ loading: M,
224
+ error: N,
225
+ selectedTemplateId: J?.id,
226
+ onSelect: re
225
227
  })
226
228
  }),
227
229
  /* @__PURE__ */ w("div", {
@@ -239,7 +241,7 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
239
241
  color: "var(--color-text-primary)",
240
242
  marginBottom: "var(--space-controlGap)"
241
243
  },
242
- children: ["Dashboard Name", /* @__PURE__ */ C("span", {
244
+ children: [A("bigconsole.dashboards.createDialog.field.name", "Dashboard Name"), /* @__PURE__ */ C("span", {
243
245
  style: {
244
246
  color: "var(--color-status-error-text)",
245
247
  marginLeft: "var(--space-controlGap)"
@@ -247,30 +249,30 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
247
249
  children: "*"
248
250
  })]
249
251
  }),
250
- /* @__PURE__ */ C(b, {
251
- ref: Z,
252
+ /* @__PURE__ */ C(x, {
253
+ ref: Q,
252
254
  id: "dashboard-name",
253
255
  type: "text",
254
- value: z,
256
+ value: B,
255
257
  onChange: (e) => {
256
- B(e.target.value), Y && X(null);
258
+ V(e.target.value), X && Z(null);
257
259
  },
258
- placeholder: "Enter dashboard name",
259
- disabled: T || F,
260
+ placeholder: A("bigconsole.dashboards.createDialog.field.namePlaceholder", "Enter dashboard name"),
261
+ disabled: T || I,
260
262
  style: {
261
263
  height: "var(--size-controlHeight-md)",
262
264
  fontSize: "var(--font-size-body-sm)",
263
- borderColor: Y ? "var(--color-status-error-border)" : void 0
265
+ borderColor: X ? "var(--color-status-error-border)" : void 0
264
266
  }
265
267
  }),
266
- Y && /* @__PURE__ */ C("p", {
268
+ X && /* @__PURE__ */ C("p", {
267
269
  style: {
268
270
  fontSize: "var(--font-size-body-sm)",
269
271
  color: "var(--color-status-error-text)",
270
272
  marginTop: "var(--space-controlGap)",
271
273
  fontWeight: "var(--font-weight-medium)"
272
274
  },
273
- children: Y
275
+ children: X
274
276
  })
275
277
  ]
276
278
  }),
@@ -285,21 +287,21 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
285
287
  color: "var(--color-text-primary)",
286
288
  marginBottom: "var(--space-controlGap)"
287
289
  },
288
- children: ["Description", /* @__PURE__ */ C("span", {
290
+ children: [A("bigconsole.dashboards.createDialog.field.description", "Description"), /* @__PURE__ */ C("span", {
289
291
  style: {
290
292
  color: "var(--color-text-muted)",
291
293
  fontWeight: "var(--font-weight-regular)",
292
294
  marginLeft: "var(--space-controlGap)"
293
295
  },
294
- children: "(optional)"
296
+ children: A("bigconsole.dashboards.createDialog.field.optional", "(optional)")
295
297
  })]
296
298
  }), /* @__PURE__ */ C(S, {
297
299
  id: "dashboard-description",
298
- value: V,
299
- onChange: (e) => H(e.target.value),
300
- placeholder: "Enter a brief description for this dashboard",
300
+ value: H,
301
+ onChange: (e) => U(e.target.value),
302
+ placeholder: A("bigconsole.dashboards.createDialog.field.descriptionPlaceholder", "Enter a brief description for this dashboard"),
301
303
  rows: 3,
302
- disabled: T || F,
304
+ disabled: T || I,
303
305
  style: {
304
306
  fontSize: "var(--font-size-body-sm)",
305
307
  resize: "none"
@@ -323,24 +325,24 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
323
325
  height: "var(--size-icon-sm)",
324
326
  width: "var(--size-icon-sm)"
325
327
  } }),
326
- "Tags",
328
+ A("bigconsole.dashboards.createDialog.field.tags", "Tags"),
327
329
  /* @__PURE__ */ C("span", {
328
330
  style: {
329
331
  color: "var(--color-text-muted)",
330
332
  fontWeight: "var(--font-weight-regular)"
331
333
  },
332
- children: "(optional, max 10)"
334
+ children: A("bigconsole.dashboards.createDialog.field.tagsOptional", "(optional, max 10)")
333
335
  })
334
336
  ]
335
337
  }),
336
- U.length > 0 && /* @__PURE__ */ C("div", {
338
+ W.length > 0 && /* @__PURE__ */ C("div", {
337
339
  style: {
338
340
  display: "flex",
339
341
  flexWrap: "wrap",
340
342
  gap: "var(--space-controlGap)",
341
343
  marginBottom: "var(--space-controlGap)"
342
344
  },
343
- children: U.map((e) => /* @__PURE__ */ w(f, {
345
+ children: W.map((e) => /* @__PURE__ */ w(p, {
344
346
  variant: "secondary",
345
347
  style: {
346
348
  display: "flex",
@@ -350,8 +352,8 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
350
352
  },
351
353
  children: [e, /* @__PURE__ */ C("button", {
352
354
  type: "button",
353
- onClick: () => $(e),
354
- disabled: T || F,
355
+ onClick: () => te(e),
356
+ disabled: T || I,
355
357
  style: {
356
358
  display: "flex",
357
359
  alignItems: "center",
@@ -378,26 +380,26 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
378
380
  display: "flex",
379
381
  gap: "var(--space-controlGap)"
380
382
  },
381
- children: [/* @__PURE__ */ C(b, {
383
+ children: [/* @__PURE__ */ C(x, {
382
384
  id: "dashboard-tags",
383
385
  type: "text",
384
- value: G,
385
- onChange: (e) => K(e.target.value),
386
- onKeyDown: ee,
387
- placeholder: U.length >= 10 ? "Max tags reached" : "Type a tag and press Enter",
388
- disabled: T || F || U.length >= 10,
386
+ value: K,
387
+ onChange: (e) => q(e.target.value),
388
+ onKeyDown: ne,
389
+ placeholder: W.length >= 10 ? A("bigconsole.dashboards.createDialog.field.tagsMaxReached", "Max tags reached") : A("bigconsole.dashboards.createDialog.field.tagsInputPlaceholder", "Type a tag and press Enter"),
390
+ disabled: T || I || W.length >= 10,
389
391
  style: {
390
392
  flex: 1,
391
393
  height: "var(--size-controlHeight-md)",
392
394
  fontSize: "var(--font-size-body-sm)"
393
395
  }
394
- }), /* @__PURE__ */ C(p, {
396
+ }), /* @__PURE__ */ C(m, {
395
397
  type: "button",
396
398
  variant: "outline",
397
- onClick: Q,
398
- disabled: T || F || !G.trim() || U.length >= 10,
399
+ onClick: $,
400
+ disabled: T || I || !K.trim() || W.length >= 10,
399
401
  style: { height: "var(--size-controlHeight-md)" },
400
- children: "Add"
402
+ children: A("bigconsole.dashboards.createDialog.action.addTag", "Add")
401
403
  })]
402
404
  }),
403
405
  /* @__PURE__ */ C("p", {
@@ -406,12 +408,12 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
406
408
  color: "var(--color-text-muted)",
407
409
  marginTop: "var(--space-controlGap)"
408
410
  },
409
- children: "Press Enter to add a tag, or click Add"
411
+ children: A("bigconsole.dashboards.createDialog.field.tagsHelp", "Press Enter to add a tag, or click Add")
410
412
  })
411
413
  ] })
412
414
  ]
413
415
  }),
414
- /* @__PURE__ */ w(_, {
416
+ /* @__PURE__ */ w(v, {
415
417
  style: {
416
418
  padding: "var(--space-formGap) var(--space-pagePadding)",
417
419
  borderTop: "1px solid var(--color-border)",
@@ -420,30 +422,30 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
420
422
  justifyContent: "flex-end",
421
423
  gap: "var(--space-controlGap)"
422
424
  },
423
- children: [/* @__PURE__ */ C(p, {
425
+ children: [/* @__PURE__ */ C(m, {
424
426
  type: "button",
425
427
  variant: "outline",
426
428
  onClick: E,
427
- disabled: T || F,
429
+ disabled: T || I,
428
430
  style: { height: "var(--size-controlHeight-md)" },
429
- children: "Cancel"
430
- }), /* @__PURE__ */ C(p, {
431
+ children: A("bigconsole.dashboards.createDialog.action.cancel", "Cancel")
432
+ }), /* @__PURE__ */ C(m, {
431
433
  type: "submit",
432
- disabled: T || F || !z.trim(),
434
+ disabled: T || I || !B.trim(),
433
435
  style: {
434
436
  height: "var(--size-controlHeight-md)",
435
437
  backgroundColor: "var(--color-action-primary-bg)"
436
438
  },
437
- children: T || F ? /* @__PURE__ */ w("span", {
439
+ children: T || I ? /* @__PURE__ */ w("span", {
438
440
  style: {
439
441
  display: "flex",
440
442
  alignItems: "center",
441
443
  gap: "var(--space-iconGap)"
442
444
  },
443
- children: [/* @__PURE__ */ C(x, { style: {
445
+ children: [/* @__PURE__ */ C(ee, { style: {
444
446
  height: "var(--size-icon-sm)",
445
447
  width: "var(--size-icon-sm)"
446
- } }), "Creating..."]
448
+ } }), A("bigconsole.dashboards.createDialog.action.creating", "Creating...")]
447
449
  }) : /* @__PURE__ */ w("span", {
448
450
  style: {
449
451
  display: "flex",
@@ -453,7 +455,7 @@ var T = n(function({ isOpen: n, isCreating: T = !1, onClose: E, onCreate: D, sho
453
455
  children: [/* @__PURE__ */ C(l, { style: {
454
456
  height: "var(--size-icon-sm)",
455
457
  width: "var(--size-icon-sm)"
456
- } }), "Create Dashboard"]
458
+ } }), A("bigconsole.dashboards.createDialog.action.create", "Create Dashboard")]
457
459
  })
458
460
  })]
459
461
  })