@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,83 +1,87 @@
1
1
  import { useAppNavigate as e } from "../contexts/NavigationContext.js";
2
2
  import "../contexts/index.js";
3
3
  import t from "../hooks/useDataSinkOperations.js";
4
- import { isNative as n, nativeCopyText as ee, nativeToast as te } from "../../utils/nativeBridge.js";
4
+ import { BIGCONSOLE_PERMISSIONS as n } from "../../constants/permissions.js";
5
+ import { isNative as ee, nativeCopyText as te, nativeToast as ne } from "../../utils/nativeBridge.js";
5
6
  import r from "../components/datasink/CacheTTLSelector.js";
6
- import ne from "../components/datasink/RefreshTypeSelector.js";
7
- import { memo as i, useCallback as a, useEffect as o, useMemo as re, useState as s } from "react";
8
- import { useParams as ie } from "react-router";
9
- import { AlertCircle as c, ArrowLeft as l, Check as ae, Copy as oe, Database as u, Eye as d, Loader2 as f, Save as se, Settings as ce } from "lucide-react";
10
- import { Button as p, Card as m, CardContent as h, CardHeader as g, CardTitle as _, GlassCard as le, IllustratedEmptyState as v, Input as y, Label as b, PagePurpose as ue, Textarea as x } from "@burdenoff/fe-libs/ui";
7
+ import re from "../components/datasink/RefreshTypeSelector.js";
8
+ import { memo as i, useCallback as a, useEffect as o, useMemo as s, useState as c } from "react";
9
+ import { useParams as l } from "react-router";
10
+ import { AccessDenied as ie, PermissionButton as ae } from "@burdenoff/fe-libs/shared/components";
11
+ import { usePermissions as oe } from "@burdenoff/fe-libs/shared/providers/shell";
12
+ import { AlertCircle as u, ArrowLeft as se, Check as ce, Copy as le, Database as d, Eye as f, Loader2 as p, Save as ue, Settings as de } from "lucide-react";
13
+ import { useI18n as fe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
14
+ import { Button as m, Card as h, CardContent as g, CardHeader as _, CardTitle as v, GlassCard as pe, IllustratedEmptyState as me, Input as y, Label as b, PagePurpose as he, Textarea as x } from "@burdenoff/fe-libs/ui";
11
15
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
12
16
  //#region src/bigconsole/pages/DataSinkBuilderPage.tsx
13
- function de(e) {
17
+ function ge(e) {
14
18
  return e.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "").substring(0, 64);
15
19
  }
16
- function T(e) {
17
- let t = {};
18
- if (e.name.trim() ? e.name.length < 2 ? t.name = "Name must be at least 2 characters" : e.name.length > 100 && (t.name = "Name must be less than 100 characters") : t.name = "Name is required", e.key.trim() ? /^[a-z0-9_]+$/.test(e.key) ? e.key.length > 64 && (t.key = "Key must be less than 64 characters") : t.key = "Key can only contain lowercase letters, numbers, and underscores" : t.key = "Key is required", e.data && e.data.trim()) try {
20
+ function _e(e, t) {
21
+ let n = {};
22
+ if (e.name.trim() ? e.name.length < 2 ? n.name = t("bigconsole.dataSinks.builder.validation.nameMinLength", "Name must be at least 2 characters") : e.name.length > 100 && (n.name = t("bigconsole.dataSinks.builder.validation.nameMaxLength", "Name must be less than 100 characters")) : n.name = t("bigconsole.dataSinks.builder.validation.nameRequired", "Name is required"), e.key.trim() ? /^[a-z0-9_]+$/.test(e.key) ? e.key.length > 64 && (n.key = t("bigconsole.dataSinks.builder.validation.keyMaxLength", "Key must be less than 64 characters")) : n.key = t("bigconsole.dataSinks.builder.validation.keyFormat", "Key can only contain lowercase letters, numbers, and underscores") : n.key = t("bigconsole.dataSinks.builder.validation.keyRequired", "Key is required"), e.data && e.data.trim()) try {
19
23
  JSON.parse(e.data);
20
24
  } catch {
21
- t.data = "Invalid JSON format";
25
+ n.data = t("bigconsole.dataSinks.builder.validation.invalidJson", "Invalid JSON format");
22
26
  }
23
- return t;
27
+ return n;
24
28
  }
25
- var E = i(function() {
26
- let { dataSinkId: i } = ie(), E = e(), D = i !== "new" && !!i, [O, k] = s({
29
+ var T = i(function() {
30
+ let { dataSinkId: i } = l(), T = e(), { t: E } = fe(), D = i !== "new" && !!i, { hasPermission: ve, isLoading: ye } = oe(), be = ve(n.DATASINK_READ), xe = D ? n.DATASINK_UPDATE : n.DATASINK_CREATE, [O, k] = c({
27
31
  name: "",
28
32
  key: "",
29
33
  description: "",
30
34
  ttl: 300,
31
35
  refresh: { type: "manual" },
32
36
  data: "{}"
33
- }), [A, j] = s({}), [M, N] = s(!1), [P, F] = s(!1), [I, L] = s(null), [R, z] = s(!1), [B, V] = s(!1), [H, U] = s(null), [W, G] = s(null), { loading: fe, error: K, dataSinks: pe, fetchDataSink: q, createDataSink: J, updateDataSink: Y, getDataSinkData: X } = t({ skipFetch: !0 }), Z = D ? pe.find((e) => e.id === i) : null;
37
+ }), [A, j] = c({}), [M, N] = c(!1), [P, F] = c(!1), [I, L] = c(null), [Se, R] = c(!1), [z, B] = c(!1), [V, H] = c(null), [U, W] = c(null), { loading: Ce, error: G, dataSinks: we, fetchDataSink: K, createDataSink: q, updateDataSink: J, getDataSinkData: Y } = t({ skipFetch: !0 }), X = D ? we.find((e) => e.id === i) : null;
34
38
  o(() => {
35
- D && i && !Z && q(i);
39
+ D && i && !X && K(i);
36
40
  }, [
37
41
  D,
38
42
  i,
39
- Z,
40
- q
43
+ X,
44
+ K
41
45
  ]);
42
- let [Q, me] = s(!1);
46
+ let [Z, Te] = c(!1);
43
47
  o(() => {
44
- if (Z && !Q) {
48
+ if (X && !Z) {
45
49
  let e = "";
46
- if (Z.data) try {
47
- if (typeof Z.data == "string") {
48
- let t = JSON.parse(Z.data);
50
+ if (X.data) try {
51
+ if (typeof X.data == "string") {
52
+ let t = JSON.parse(X.data);
49
53
  e = JSON.stringify(t, null, 2);
50
- } else e = JSON.stringify(Z.data, null, 2);
54
+ } else e = JSON.stringify(X.data, null, 2);
51
55
  } catch {
52
- e = typeof Z.data == "string" ? Z.data : "";
56
+ e = typeof X.data == "string" ? X.data : "";
53
57
  }
54
58
  k({
55
- name: Z.name || "",
56
- key: Z.key || "",
57
- description: Z.description || "",
58
- ttl: Z.ttl || 300,
59
- refresh: Z.refresh ? {
60
- type: Z.refresh.type === "scheduled" ? "scheduled" : "manual",
61
- schedule: Z.refresh.schedule ? {
62
- cron: Z.refresh.schedule.cron,
63
- timezone: Z.refresh.schedule.timezone
59
+ name: X.name || "",
60
+ key: X.key || "",
61
+ description: X.description || "",
62
+ ttl: X.ttl || 300,
63
+ refresh: X.refresh ? {
64
+ type: X.refresh.type === "scheduled" ? "scheduled" : "manual",
65
+ schedule: X.refresh.schedule ? {
66
+ cron: X.refresh.schedule.cron,
67
+ timezone: X.refresh.schedule.timezone
64
68
  } : void 0
65
69
  } : { type: "manual" },
66
70
  data: e
67
- }), N(!0), me(!0), j({});
71
+ }), N(!0), Te(!0), j({});
68
72
  }
69
- }, [Z, Q]);
70
- let he = a((e) => {
73
+ }, [X, Z]);
74
+ let Ee = a((e) => {
71
75
  let t = e.target.value;
72
76
  k((e) => ({
73
77
  ...e,
74
78
  name: t,
75
- key: M ? e.key : de(t)
79
+ key: M ? e.key : ge(t)
76
80
  })), j((e) => ({
77
81
  ...e,
78
82
  name: void 0
79
83
  }));
80
- }, [M]), ge = a((e) => {
84
+ }, [M]), De = a((e) => {
81
85
  let t = e.target.value.toLowerCase().replace(/[^a-z0-9_]/g, "");
82
86
  k((e) => ({
83
87
  ...e,
@@ -86,22 +90,22 @@ var E = i(function() {
86
90
  ...e,
87
91
  key: void 0
88
92
  }));
89
- }, []), _e = a((e) => {
93
+ }, []), Oe = a((e) => {
90
94
  k((t) => ({
91
95
  ...t,
92
96
  description: e.target.value
93
97
  }));
94
- }, []), ve = a((e) => {
98
+ }, []), Q = a((e) => {
95
99
  k((t) => ({
96
100
  ...t,
97
101
  ttl: e || 0
98
102
  }));
99
- }, []), ye = a((e) => {
103
+ }, []), ke = a((e) => {
100
104
  k((t) => ({
101
105
  ...t,
102
106
  refresh: e
103
107
  }));
104
- }, []), be = a((e) => {
108
+ }, []), Ae = a((e) => {
105
109
  k((t) => ({
106
110
  ...t,
107
111
  data: e.target.value
@@ -109,7 +113,7 @@ var E = i(function() {
109
113
  ...e,
110
114
  data: void 0
111
115
  }));
112
- }, []), xe = a(() => {
116
+ }, []), je = a(() => {
113
117
  try {
114
118
  let e = JSON.parse(O.data);
115
119
  k((t) => ({
@@ -122,32 +126,33 @@ var E = i(function() {
122
126
  } catch {
123
127
  j((e) => ({
124
128
  ...e,
125
- data: "Invalid JSON format"
129
+ data: E("bigconsole.dataSinks.builder.validation.invalidJson", "Invalid JSON format")
126
130
  }));
127
131
  }
128
- }, [O.data]), Se = a(async () => {
129
- O.key && (await ee(O.key), z(!0), n() && te("Key copied"), setTimeout(() => z(!1), 2e3));
130
- }, [O.key]), $ = a(() => {
131
- E("/datasinks");
132
- }, [E]), Ce = a(async () => {
133
- if (!(!D || !Z)) {
134
- V(!0), G(null);
132
+ }, [O.data, E]), Me = a(async () => {
133
+ O.key && (await te(O.key), R(!0), ee() && ne(E("bigconsole.dataSinks.builder.toolbar.keyCopied", "Key copied")), setTimeout(() => R(!1), 2e3));
134
+ }, [O.key, E]), $ = a(() => {
135
+ T("/datasinks");
136
+ }, [T]), Ne = a(async () => {
137
+ if (!(!D || !X)) {
138
+ B(!0), W(null);
135
139
  try {
136
- let e = await X({ key: Z.key });
137
- e?.raw ? U(Array.isArray(e.raw) ? e.raw.slice(0, 20) : [e.raw]) : U([]);
140
+ let e = await Y({ key: X.key });
141
+ e?.raw ? H(Array.isArray(e.raw) ? e.raw.slice(0, 20) : [e.raw]) : H([]);
138
142
  } catch (e) {
139
- G(e instanceof Error ? e.message : "Failed to load data");
143
+ W(e instanceof Error ? e.message : E("bigconsole.dataSinks.builder.errors.loadDataFailed", "Failed to load data"));
140
144
  } finally {
141
- V(!1);
145
+ B(!1);
142
146
  }
143
147
  }
144
148
  }, [
145
149
  D,
146
- Z,
147
- X
148
- ]), we = a(async (e) => {
150
+ X,
151
+ Y,
152
+ E
153
+ ]), Pe = a(async (e) => {
149
154
  e.preventDefault(), L(null);
150
- let t = T(O);
155
+ let t = _e(O, E);
151
156
  if (Object.keys(t).length > 0) {
152
157
  j(t);
153
158
  return;
@@ -160,14 +165,14 @@ var E = i(function() {
160
165
  } catch {
161
166
  j((e) => ({
162
167
  ...e,
163
- data: "Invalid JSON format"
168
+ data: E("bigconsole.dataSinks.builder.validation.invalidJson", "Invalid JSON format")
164
169
  })), F(!1);
165
170
  return;
166
171
  }
167
- if (D && Z) {
168
- if (!await Y({
169
- id: Z.id,
170
- version: Z.version,
172
+ if (D && X) {
173
+ if (!await J({
174
+ id: X.id,
175
+ version: X.version,
171
176
  name: O.name,
172
177
  description: O.description || void 0,
173
178
  ttl: O.ttl,
@@ -176,8 +181,8 @@ var E = i(function() {
176
181
  schedule: O.refresh.schedule
177
182
  },
178
183
  data: e
179
- })) throw Error("Failed to update DataSink");
180
- } else if (!await J({
184
+ })) throw Error(E("bigconsole.dataSinks.builder.errors.updateFailed", "Failed to update DataSink"));
185
+ } else if (!await q({
181
186
  key: O.key,
182
187
  name: O.name,
183
188
  description: O.description || void 0,
@@ -187,21 +192,22 @@ var E = i(function() {
187
192
  schedule: O.refresh.schedule
188
193
  },
189
194
  data: e
190
- })) throw Error("Failed to create DataSink");
191
- E("/datasinks");
195
+ })) throw Error(E("bigconsole.dataSinks.builder.errors.createFailed", "Failed to create DataSink"));
196
+ T("/datasinks");
192
197
  } catch (e) {
193
- L(e instanceof Error ? e.message : "Failed to save DataSink");
198
+ L(e instanceof Error ? e.message : E("bigconsole.dataSinks.builder.errors.saveFailed", "Failed to save DataSink"));
194
199
  } finally {
195
200
  F(!1);
196
201
  }
197
202
  }, [
198
203
  O,
199
204
  D,
200
- Z,
205
+ X,
206
+ q,
201
207
  J,
202
- Y,
208
+ T,
203
209
  E
204
- ]), Te = re(() => {
210
+ ]), Fe = s(() => {
205
211
  let e = O.name.trim().length >= 2, t = O.key.trim().length > 0, n = !0;
206
212
  if (O.data && O.data.trim()) try {
207
213
  JSON.parse(O.data);
@@ -214,25 +220,28 @@ var E = i(function() {
214
220
  O.key,
215
221
  O.data
216
222
  ]);
217
- return fe && D ? /* @__PURE__ */ C("div", {
223
+ return Ce && D ? /* @__PURE__ */ C("div", {
218
224
  className: "flex items-center justify-center min-h-[400px]",
219
- children: /* @__PURE__ */ C(f, { className: "w-8 h-8 text-text-secondary animate-spin" })
220
- }) : K ? /* @__PURE__ */ C("div", {
225
+ children: /* @__PURE__ */ C(p, { className: "w-8 h-8 text-text-secondary animate-spin" })
226
+ }) : G ? /* @__PURE__ */ C("div", {
221
227
  className: "flex items-center justify-center min-h-[400px] p-card-padding",
222
228
  children: /* @__PURE__ */ w("div", {
223
229
  className: "text-center",
224
230
  children: [
225
- /* @__PURE__ */ C(c, { className: "w-12 h-12 text-status-error-text mx-auto mb-4" }),
231
+ /* @__PURE__ */ C(u, { className: "w-12 h-12 text-status-error-text mx-auto mb-4" }),
226
232
  /* @__PURE__ */ C("p", {
227
233
  className: "text-status-error-text text-body-sm font-medium mb-2",
228
- children: "Failed to load DataSink"
234
+ children: E("bigconsole.dataSinks.builder.errors.loadFailed", "Failed to load DataSink")
229
235
  }),
230
236
  /* @__PURE__ */ C("p", {
231
237
  className: "text-text-tertiary text-body-xs",
232
- children: K.message
238
+ children: G.message
233
239
  })
234
240
  ]
235
241
  })
242
+ }) : D && !ye && !be ? /* @__PURE__ */ C(ie, {
243
+ title: E("bigconsole.dataSinks.builder.accessDenied.title", "Access Denied"),
244
+ description: E("bigconsole.dataSinks.builder.accessDenied.description", "You don't have permission to view this data sink.")
236
245
  }) : /* @__PURE__ */ C("div", {
237
246
  className: "min-h-screen bg-bg-canvas",
238
247
  children: /* @__PURE__ */ w("div", {
@@ -241,60 +250,60 @@ var E = i(function() {
241
250
  /* @__PURE__ */ w("div", {
242
251
  className: "mb-6",
243
252
  children: [
244
- /* @__PURE__ */ w(p, {
253
+ /* @__PURE__ */ w(m, {
245
254
  onClick: $,
246
255
  variant: "ghost",
247
256
  size: "sm",
248
257
  className: "mb-4",
249
- children: [/* @__PURE__ */ C(l, { className: "w-4 h-4 mr-2" }), "Back to DataSinks"]
258
+ children: [/* @__PURE__ */ C(se, { className: "w-4 h-4 mr-2" }), E("bigconsole.dataSinks.builder.header.backToDataSinks", "Back to DataSinks")]
250
259
  }),
251
260
  /* @__PURE__ */ C("h1", {
252
261
  className: "text-heading-h1 font-bold text-text-primary",
253
- children: D ? "Edit DataSink" : "Create DataSink"
262
+ children: D ? E("bigconsole.dataSinks.builder.header.editTitle", "Edit DataSink") : E("bigconsole.dataSinks.builder.header.createTitle", "Create DataSink")
254
263
  }),
255
264
  /* @__PURE__ */ C("p", {
256
265
  className: "text-body-sm text-text-secondary mt-1",
257
- children: D ? "Update the DataSink configuration." : "Create a new DataSink to store and cache data. Use the unique key to connect workflows."
266
+ children: D ? E("bigconsole.dataSinks.builder.header.editSubtitle", "Update the DataSink configuration.") : E("bigconsole.dataSinks.builder.header.createSubtitle", "Create a new DataSink to store and cache data. Use the unique key to connect workflows.")
258
267
  })
259
268
  ]
260
269
  }),
261
270
  I && /* @__PURE__ */ w("div", {
262
271
  className: "mb-6 p-4 bg-status-error-bg/10 border border-status-error-border/30 rounded-lg flex items-start gap-3",
263
- children: [/* @__PURE__ */ C(c, { className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
272
+ children: [/* @__PURE__ */ C(u, { className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5" }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
264
273
  className: "text-sm font-medium text-status-error-text",
265
- children: "Failed to save DataSink"
274
+ children: E("bigconsole.dataSinks.builder.errors.saveFailed", "Failed to save DataSink")
266
275
  }), /* @__PURE__ */ C("p", {
267
276
  className: "text-xs text-status-error-text/80 mt-1",
268
277
  children: I
269
278
  })] })]
270
279
  }),
271
- /* @__PURE__ */ C(ue, {
280
+ /* @__PURE__ */ C(he, {
272
281
  className: "mb-6",
273
- children: "A data sink is the named, structured store your dashboards read from. Give it a unique key, configure how long data is cached and how it refreshes, then point a workflow at that key to push data in. Get the basics right here and everything downstream connects to it."
282
+ children: E("bigconsole.dataSinks.builder.header.purpose", "A data sink is the named, structured store your dashboards read from. Give it a unique key, configure how long data is cached and how it refreshes, then point a workflow at that key to push data in. Get the basics right here and everything downstream connects to it.")
274
283
  }),
275
284
  /* @__PURE__ */ w("form", {
276
- onSubmit: we,
285
+ onSubmit: Pe,
277
286
  className: "space-y-6",
278
287
  children: [
279
- /* @__PURE__ */ w(le, {
288
+ /* @__PURE__ */ w(pe, {
280
289
  treatment: "glass",
281
290
  glow: !0,
282
- children: [/* @__PURE__ */ C(g, {
291
+ children: [/* @__PURE__ */ C(_, {
283
292
  className: "pb-4",
284
293
  children: /* @__PURE__ */ w("div", {
285
294
  className: "flex items-center gap-3",
286
295
  children: [/* @__PURE__ */ C("div", {
287
296
  className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
288
- children: /* @__PURE__ */ C(u, { className: "w-4 h-4 text-action-primary-bg" })
289
- }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(_, {
297
+ children: /* @__PURE__ */ C(d, { className: "w-4 h-4 text-action-primary-bg" })
298
+ }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(v, {
290
299
  className: "text-base",
291
- children: "Basic Information"
300
+ children: E("bigconsole.dataSinks.builder.basicInfo.title", "Basic Information")
292
301
  }), /* @__PURE__ */ C("p", {
293
302
  className: "text-xs text-text-secondary mt-0.5",
294
- children: "Essential details for your DataSink"
303
+ children: E("bigconsole.dataSinks.builder.basicInfo.subtitle", "Essential details for your DataSink")
295
304
  })] })]
296
305
  })
297
- }), /* @__PURE__ */ w(h, {
306
+ }), /* @__PURE__ */ w(g, {
298
307
  className: "space-y-5",
299
308
  children: [
300
309
  /* @__PURE__ */ w("div", {
@@ -302,17 +311,21 @@ var E = i(function() {
302
311
  children: [
303
312
  /* @__PURE__ */ w(b, {
304
313
  htmlFor: "name",
305
- children: ["Name ", /* @__PURE__ */ C("span", {
306
- className: "text-status-error-text",
307
- children: "*"
308
- })]
314
+ children: [
315
+ E("bigconsole.dataSinks.builder.basicInfo.nameLabel", "Name"),
316
+ " ",
317
+ /* @__PURE__ */ C("span", {
318
+ className: "text-status-error-text",
319
+ children: "*"
320
+ })
321
+ ]
309
322
  }),
310
323
  /* @__PURE__ */ C(y, {
311
324
  id: "name",
312
325
  type: "text",
313
326
  value: O.name,
314
- onChange: he,
315
- placeholder: "e.g., Sales Metrics",
327
+ onChange: Ee,
328
+ placeholder: E("bigconsole.dataSinks.builder.basicInfo.namePlaceholder", "e.g., Sales Metrics"),
316
329
  className: A.name ? "border-status-error-border" : ""
317
330
  }),
318
331
  A.name && /* @__PURE__ */ C("p", {
@@ -326,10 +339,14 @@ var E = i(function() {
326
339
  children: [
327
340
  /* @__PURE__ */ w(b, {
328
341
  htmlFor: "key",
329
- children: ["Unique Key ", /* @__PURE__ */ C("span", {
330
- className: "text-status-error-text",
331
- children: "*"
332
- })]
342
+ children: [
343
+ E("bigconsole.dataSinks.builder.basicInfo.keyLabel", "Unique Key"),
344
+ " ",
345
+ /* @__PURE__ */ C("span", {
346
+ className: "text-status-error-text",
347
+ children: "*"
348
+ })
349
+ ]
333
350
  }),
334
351
  /* @__PURE__ */ w("div", {
335
352
  className: "flex gap-2",
@@ -337,17 +354,17 @@ var E = i(function() {
337
354
  id: "key",
338
355
  type: "text",
339
356
  value: O.key,
340
- onChange: ge,
341
- placeholder: "sales_metrics",
357
+ onChange: De,
358
+ placeholder: E("bigconsole.dataSinks.builder.basicInfo.keyPlaceholder", "sales_metrics"),
342
359
  disabled: D,
343
360
  className: `font-mono flex-1 ${A.key ? "border-status-error-border" : ""}`
344
- }), O.key && /* @__PURE__ */ C(p, {
361
+ }), O.key && /* @__PURE__ */ C(m, {
345
362
  type: "button",
346
- onClick: Se,
363
+ onClick: Me,
347
364
  variant: "outline",
348
365
  size: "sm",
349
366
  className: "px-3",
350
- children: R ? /* @__PURE__ */ C(ae, { className: "w-4 h-4 text-status-success-text" }) : /* @__PURE__ */ C(oe, { className: "w-4 h-4" })
367
+ children: Se ? /* @__PURE__ */ C(ce, { className: "w-4 h-4 text-status-success-text" }) : /* @__PURE__ */ C(le, { className: "w-4 h-4" })
351
368
  })]
352
369
  }),
353
370
  A.key && /* @__PURE__ */ C("p", {
@@ -356,7 +373,7 @@ var E = i(function() {
356
373
  }),
357
374
  /* @__PURE__ */ C("p", {
358
375
  className: "text-body-xs text-text-tertiary",
359
- children: D ? "Key cannot be changed. Use this key in your workflows to push data." : "Auto-generated from name. This key will be used by workflows to push data."
376
+ children: D ? E("bigconsole.dataSinks.builder.basicInfo.keyHelpEdit", "Key cannot be changed. Use this key in your workflows to push data.") : E("bigconsole.dataSinks.builder.basicInfo.keyHelpCreate", "Auto-generated from name. This key will be used by workflows to push data.")
360
377
  })
361
378
  ]
362
379
  }),
@@ -364,12 +381,12 @@ var E = i(function() {
364
381
  className: "space-y-2",
365
382
  children: [/* @__PURE__ */ C(b, {
366
383
  htmlFor: "description",
367
- children: "Description"
384
+ children: E("bigconsole.dataSinks.builder.basicInfo.descriptionLabel", "Description")
368
385
  }), /* @__PURE__ */ C(x, {
369
386
  id: "description",
370
387
  value: O.description,
371
- onChange: _e,
372
- placeholder: "Describe what data this sink stores...",
388
+ onChange: Oe,
389
+ placeholder: E("bigconsole.dataSinks.builder.basicInfo.descriptionPlaceholder", "Describe what data this sink stores..."),
373
390
  rows: 2,
374
391
  className: "resize-none"
375
392
  })]
@@ -377,42 +394,42 @@ var E = i(function() {
377
394
  ]
378
395
  })]
379
396
  }),
380
- /* @__PURE__ */ w(m, { children: [/* @__PURE__ */ C(g, {
397
+ /* @__PURE__ */ w(h, { children: [/* @__PURE__ */ C(_, {
381
398
  className: "pb-4",
382
399
  children: /* @__PURE__ */ w("div", {
383
400
  className: "flex items-center gap-3",
384
401
  children: [/* @__PURE__ */ C("div", {
385
402
  className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
386
- children: /* @__PURE__ */ C(ce, { className: "w-4 h-4 text-action-primary-bg" })
387
- }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(_, {
403
+ children: /* @__PURE__ */ C(de, { className: "w-4 h-4 text-action-primary-bg" })
404
+ }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(v, {
388
405
  className: "text-base",
389
- children: "Configuration"
406
+ children: E("bigconsole.dataSinks.builder.config.title", "Configuration")
390
407
  }), /* @__PURE__ */ C("p", {
391
408
  className: "text-xs text-text-secondary mt-0.5",
392
- children: "Cache and refresh settings"
409
+ children: E("bigconsole.dataSinks.builder.config.subtitle", "Cache and refresh settings")
393
410
  })] })]
394
411
  })
395
- }), /* @__PURE__ */ w(h, {
412
+ }), /* @__PURE__ */ w(g, {
396
413
  className: "space-y-5",
397
414
  children: [/* @__PURE__ */ w("div", {
398
415
  className: "space-y-2",
399
416
  children: [
400
- /* @__PURE__ */ C(b, { children: "Cache Duration" }),
417
+ /* @__PURE__ */ C(b, { children: E("bigconsole.dataSinks.builder.config.cacheDurationLabel", "Cache Duration") }),
401
418
  /* @__PURE__ */ C(r, {
402
419
  value: O.ttl,
403
- onChange: ve
420
+ onChange: Q
404
421
  }),
405
422
  /* @__PURE__ */ C("p", {
406
423
  className: "text-body-xs text-text-tertiary",
407
- children: "How long cached data remains valid before requiring refresh."
424
+ children: E("bigconsole.dataSinks.builder.config.cacheDurationHelp", "How long cached data remains valid before requiring refresh.")
408
425
  })
409
426
  ]
410
- }), /* @__PURE__ */ C(ne, {
427
+ }), /* @__PURE__ */ C(re, {
411
428
  value: O.refresh,
412
- onChange: ye
429
+ onChange: ke
413
430
  })]
414
431
  })] }),
415
- /* @__PURE__ */ w(m, { children: [/* @__PURE__ */ C(g, {
432
+ /* @__PURE__ */ w(h, { children: [/* @__PURE__ */ C(_, {
416
433
  className: "pb-4",
417
434
  children: /* @__PURE__ */ w("div", {
418
435
  className: "flex items-center justify-between",
@@ -420,29 +437,29 @@ var E = i(function() {
420
437
  className: "flex items-center gap-3",
421
438
  children: [/* @__PURE__ */ C("div", {
422
439
  className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
423
- children: /* @__PURE__ */ C(u, { className: "w-4 h-4 text-action-primary-bg" })
424
- }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(_, {
440
+ children: /* @__PURE__ */ C(d, { className: "w-4 h-4 text-action-primary-bg" })
441
+ }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(v, {
425
442
  className: "text-base",
426
- children: "Data Payload"
443
+ children: E("bigconsole.dataSinks.builder.dataPayload.title", "Data Payload")
427
444
  }), /* @__PURE__ */ C("p", {
428
445
  className: "text-xs text-text-secondary mt-0.5",
429
- children: D ? "Edit the JSON data stored in this DataSink" : "Optional initial data (JSON format)"
446
+ children: D ? E("bigconsole.dataSinks.builder.dataPayload.subtitleEdit", "Edit the JSON data stored in this DataSink") : E("bigconsole.dataSinks.builder.dataPayload.subtitleCreate", "Optional initial data (JSON format)")
430
447
  })] })]
431
- }), /* @__PURE__ */ C(p, {
448
+ }), /* @__PURE__ */ C(m, {
432
449
  type: "button",
433
- onClick: xe,
450
+ onClick: je,
434
451
  variant: "outline",
435
452
  size: "sm",
436
- children: "Format JSON"
453
+ children: E("bigconsole.dataSinks.builder.dataPayload.formatJson", "Format JSON")
437
454
  })]
438
455
  })
439
- }), /* @__PURE__ */ C(h, { children: /* @__PURE__ */ w("div", {
456
+ }), /* @__PURE__ */ C(g, { children: /* @__PURE__ */ w("div", {
440
457
  className: "space-y-2",
441
458
  children: [
442
459
  /* @__PURE__ */ C(x, {
443
460
  value: O.data,
444
- onChange: be,
445
- placeholder: "{\"key\": \"value\"}",
461
+ onChange: Ae,
462
+ placeholder: E("bigconsole.dataSinks.builder.dataPayload.dataPlaceholder", "{\"key\": \"value\"}"),
446
463
  rows: 10,
447
464
  className: `font-mono text-xs resize-y ${A.data ? "border-status-error-border" : ""}`
448
465
  }),
@@ -452,11 +469,11 @@ var E = i(function() {
452
469
  }),
453
470
  /* @__PURE__ */ C("p", {
454
471
  className: "text-body-xs text-text-tertiary",
455
- children: "Enter valid JSON data. This data will be stored and can be accessed by widgets via parsers."
472
+ children: E("bigconsole.dataSinks.builder.dataPayload.help", "Enter valid JSON data. This data will be stored and can be accessed by widgets via parsers.")
456
473
  })
457
474
  ]
458
475
  }) })] }),
459
- D && Z && /* @__PURE__ */ w(m, { children: [/* @__PURE__ */ C(g, {
476
+ D && X && /* @__PURE__ */ w(h, { children: [/* @__PURE__ */ C(_, {
460
477
  className: "pb-4",
461
478
  children: /* @__PURE__ */ w("div", {
462
479
  className: "flex items-center justify-between",
@@ -464,49 +481,53 @@ var E = i(function() {
464
481
  className: "flex items-center gap-3",
465
482
  children: [/* @__PURE__ */ C("div", {
466
483
  className: "w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center",
467
- children: /* @__PURE__ */ C(d, { className: "w-4 h-4 text-action-primary-bg" })
468
- }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(_, {
484
+ children: /* @__PURE__ */ C(f, { className: "w-4 h-4 text-action-primary-bg" })
485
+ }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C(v, {
469
486
  className: "text-base",
470
- children: "Data Preview"
487
+ children: E("bigconsole.dataSinks.builder.preview.title", "Data Preview")
471
488
  }), /* @__PURE__ */ C("p", {
472
489
  className: "text-xs text-text-secondary mt-0.5",
473
- children: "Preview the first 20 records"
490
+ children: E("bigconsole.dataSinks.builder.preview.subtitle", "Preview the first 20 records")
474
491
  })] })]
475
- }), /* @__PURE__ */ C(p, {
492
+ }), /* @__PURE__ */ C(m, {
476
493
  type: "button",
477
- onClick: Ce,
494
+ onClick: Ne,
478
495
  variant: "outline",
479
496
  size: "sm",
480
- disabled: B,
481
- children: B ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(f, { className: "w-4 h-4 mr-2 animate-spin" }), "Loading..."] }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(d, { className: "w-4 h-4 mr-2" }), "Show Data"] })
497
+ disabled: z,
498
+ children: z ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(p, { className: "w-4 h-4 mr-2 animate-spin" }), E("bigconsole.dataSinks.builder.preview.loading", "Loading...")] }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(f, { className: "w-4 h-4 mr-2" }), E("bigconsole.dataSinks.builder.preview.showData", "Show Data")] })
482
499
  })]
483
500
  })
484
- }), (H || W) && /* @__PURE__ */ C(h, { children: W ? /* @__PURE__ */ C("div", {
501
+ }), (V || U) && /* @__PURE__ */ C(g, { children: U ? /* @__PURE__ */ C("div", {
485
502
  className: "p-4 bg-status-error-bg/10 border border-status-error-border/30 rounded-md",
486
503
  children: /* @__PURE__ */ C("p", {
487
504
  className: "text-sm text-status-error-text",
488
- children: W
505
+ children: U
489
506
  })
490
- }) : H && H.length > 0 ? /* @__PURE__ */ C("pre", {
507
+ }) : V && V.length > 0 ? /* @__PURE__ */ C("pre", {
491
508
  className: "p-4 bg-bg-sunken rounded-md overflow-auto max-h-[300px] text-xs font-mono",
492
- children: JSON.stringify(H, null, 2)
493
- }) : /* @__PURE__ */ C(v, {
509
+ children: JSON.stringify(V, null, 2)
510
+ }) : /* @__PURE__ */ C(me, {
494
511
  illustration: "empty-generic",
495
- title: "No data available yet",
496
- description: "Connect a workflow to this sink's key to start pushing data."
512
+ title: E("bigconsole.dataSinks.builder.preview.emptyTitle", "No data available yet"),
513
+ description: E("bigconsole.dataSinks.builder.preview.emptyDescription", "Connect a workflow to this sink's key to start pushing data.")
497
514
  }) })] }),
498
515
  /* @__PURE__ */ w("div", {
499
516
  className: "flex items-center justify-end gap-4 pt-4",
500
- children: [/* @__PURE__ */ C(p, {
517
+ children: [/* @__PURE__ */ C(m, {
501
518
  type: "button",
502
519
  onClick: $,
503
520
  variant: "secondary",
504
- children: "Cancel"
505
- }), /* @__PURE__ */ C(p, {
506
- type: "submit",
507
- disabled: !Te || P,
508
- variant: "default",
509
- children: P ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(f, { className: "w-4 h-4 mr-2 animate-spin" }), "Saving..."] }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(se, { className: "w-4 h-4 mr-2" }), D ? "Save Changes" : "Create DataSink"] })
521
+ children: E("bigconsole.dataSinks.builder.actions.cancel", "Cancel")
522
+ }), /* @__PURE__ */ C(ae, {
523
+ permission: xe,
524
+ deniedBehavior: "disable",
525
+ children: /* @__PURE__ */ C(m, {
526
+ type: "submit",
527
+ disabled: !Fe || P,
528
+ variant: "default",
529
+ children: P ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(p, { className: "w-4 h-4 mr-2 animate-spin" }), E("bigconsole.dataSinks.builder.actions.saving", "Saving...")] }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(ue, { className: "w-4 h-4 mr-2" }), D ? E("bigconsole.dataSinks.builder.actions.saveChanges", "Save Changes") : E("bigconsole.dataSinks.builder.actions.create", "Create DataSink")] })
530
+ })
510
531
  })]
511
532
  })
512
533
  ]
@@ -515,21 +536,25 @@ var E = i(function() {
515
536
  className: "mt-6 p-4 bg-bg-sunken rounded-lg border border-border-default",
516
537
  children: [/* @__PURE__ */ C("h3", {
517
538
  className: "text-sm font-medium text-text-primary mb-2",
518
- children: "What's Next?"
539
+ children: E("bigconsole.dataSinks.builder.whatsNext.title", "What's Next?")
519
540
  }), /* @__PURE__ */ w("ol", {
520
541
  className: "list-decimal list-inside text-xs text-text-secondary space-y-1",
521
542
  children: [
522
- /* @__PURE__ */ C("li", { children: "Create this DataSink to get your unique key" }),
543
+ /* @__PURE__ */ C("li", { children: E("bigconsole.dataSinks.builder.whatsNext.step1", "Create this DataSink to get your unique key") }),
523
544
  /* @__PURE__ */ w("li", { children: [
524
- "Go to ",
525
- /* @__PURE__ */ C("strong", { children: "Workflows" }),
526
- " and create a FluidGrids workflow"
545
+ E("bigconsole.dataSinks.builder.whatsNext.step2Prefix", "Go to"),
546
+ " ",
547
+ /* @__PURE__ */ C("strong", { children: E("bigconsole.dataSinks.builder.whatsNext.workflows", "Workflows") }),
548
+ " ",
549
+ E("bigconsole.dataSinks.builder.whatsNext.step2Suffix", "and create a FluidGrids workflow")
527
550
  ] }),
528
- /* @__PURE__ */ C("li", { children: "Use the unique key in your workflow to push data to this DataSink" }),
551
+ /* @__PURE__ */ C("li", { children: E("bigconsole.dataSinks.builder.whatsNext.step3", "Use the unique key in your workflow to push data to this DataSink") }),
529
552
  /* @__PURE__ */ w("li", { children: [
530
- "Create ",
531
- /* @__PURE__ */ C("strong", { children: "Parsers" }),
532
- " to transform the data using JQ or JSONata"
553
+ E("bigconsole.dataSinks.builder.whatsNext.step4Prefix", "Create"),
554
+ " ",
555
+ /* @__PURE__ */ C("strong", { children: E("bigconsole.dataSinks.builder.whatsNext.parsers", "Parsers") }),
556
+ " ",
557
+ E("bigconsole.dataSinks.builder.whatsNext.step4Suffix", "to transform the data using JQ or JSONata")
533
558
  ] })
534
559
  ]
535
560
  })]
@@ -539,6 +564,6 @@ var E = i(function() {
539
564
  });
540
565
  });
541
566
  //#endregion
542
- export { E as DataSinkBuilderPage, E as default };
567
+ export { T as DataSinkBuilderPage, T as default };
543
568
 
544
569
  //# sourceMappingURL=DataSinkBuilderPage.js.map