@burdenoff/microfe-bigconsole 2026.1012.4 → 2026.1012.6

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 (130) hide show
  1. package/dist/bigconsole/BigConsoleRoutes.js +149 -140
  2. package/dist/bigconsole/assistant/assistantProduct.js +4 -1
  3. package/dist/bigconsole/assistant/displayCopy.d.ts +32 -0
  4. package/dist/bigconsole/assistant/pageContext.d.ts +14 -0
  5. package/dist/bigconsole/assistant/pageContext.js +6 -1
  6. package/dist/bigconsole/assistant/pageControls.d.ts +81 -0
  7. package/dist/bigconsole/assistant/pageControls.js +169 -0
  8. package/dist/bigconsole/assistant/previewControl.d.ts +16 -0
  9. package/dist/bigconsole/assistant/previewControl.js +10 -0
  10. package/dist/bigconsole/assistant/recordAdapters.js +27 -26
  11. package/dist/bigconsole/assistant/usePreviewControl.d.ts +2 -0
  12. package/dist/bigconsole/assistant/usePreviewControl.js +20 -0
  13. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +9 -9
  14. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +31 -31
  15. package/dist/bigconsole/components/common/SortBySelect.d.ts +11 -0
  16. package/dist/bigconsole/components/common/SortBySelect.js +29 -0
  17. package/dist/bigconsole/components/common/index.d.ts +1 -0
  18. package/dist/bigconsole/components/common/index.js +1 -0
  19. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +44 -44
  20. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +36 -36
  21. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +59 -59
  22. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +15 -15
  23. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +30 -30
  24. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +41 -41
  25. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +34 -34
  26. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +34 -34
  27. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +153 -153
  28. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +21 -21
  29. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +46 -46
  30. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +134 -134
  31. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -101
  32. package/dist/bigconsole/components/dashboard/TemplateInstallOptions.js +31 -31
  33. package/dist/bigconsole/components/dashboard/TemplateLayoutPreview.js +15 -15
  34. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -1
  35. package/dist/bigconsole/components/dashboard/WidgetPalette.js +46 -46
  36. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js +37 -37
  37. package/dist/bigconsole/components/datasink/AlertRuleEditor.js +66 -66
  38. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +35 -35
  39. package/dist/bigconsole/components/datasink/DataSinkCard.js +51 -50
  40. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +18 -18
  41. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +20 -20
  42. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +47 -47
  43. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +91 -91
  44. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +35 -35
  45. package/dist/bigconsole/components/parser/DataSinkSelector.js +40 -40
  46. package/dist/bigconsole/components/parser/ImportParserDialog.js +120 -120
  47. package/dist/bigconsole/components/parser/ParserSelector.js +51 -51
  48. package/dist/bigconsole/components/pipeline/PipelineScopePicker.js +10 -10
  49. package/dist/bigconsole/components/preview/AiPreviewContent.js +0 -1
  50. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +77 -76
  51. package/dist/bigconsole/components/preview/AiPreviewPanel.js +96 -95
  52. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +4 -4
  53. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +93 -93
  54. package/dist/bigconsole/components/widgets/PropertiesPanel.js +507 -499
  55. package/dist/bigconsole/components/widgets/advanced/AdvancedWidgetConfig.js +14 -14
  56. package/dist/bigconsole/components/widgets/advanced/AdvancedWidgets.js +68 -67
  57. package/dist/bigconsole/components/widgets/advanced/boxPlotDescription.d.ts +7 -0
  58. package/dist/bigconsole/components/widgets/advanced/boxPlotDescription.js +12 -0
  59. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +4 -4
  60. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +48 -48
  61. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +46 -46
  62. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +61 -61
  63. package/dist/bigconsole/components/widgets/form/FormWidget.js +36 -36
  64. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +42 -42
  65. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +25 -25
  66. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
  67. package/dist/bigconsole/components/widgets/list/ListConfig.js +30 -30
  68. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +38 -38
  69. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +9 -9
  70. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +9 -9
  71. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +49 -49
  72. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +39 -39
  73. package/dist/bigconsole/components/widgets/table/TableConfig.js +73 -73
  74. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +64 -64
  75. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js +15 -15
  76. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js +15 -15
  77. package/dist/bigconsole/constants/backendErrors.js +94 -0
  78. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +10 -10
  79. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +67 -67
  80. package/dist/bigconsole/hooks/useDashboardLayoutBaseline.d.ts +14 -0
  81. package/dist/bigconsole/hooks/useDashboardLayoutBaseline.js +32 -0
  82. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts +23 -0
  83. package/dist/bigconsole/hooks/useDataSinkAlerts.js +138 -113
  84. package/dist/bigconsole/hooks/useDrilldown.js +3 -3
  85. package/dist/bigconsole/hooks/useGlobalFilters.js +3 -3
  86. package/dist/bigconsole/pages/AdminPage.js +130 -130
  87. package/dist/bigconsole/pages/DashboardBuilderPage.js +72 -60
  88. package/dist/bigconsole/pages/DashboardViewPage.js +244 -221
  89. package/dist/bigconsole/pages/DashboardsPage.js +269 -221
  90. package/dist/bigconsole/pages/DataParsersPage.js +180 -157
  91. package/dist/bigconsole/pages/DataSinkAlertsPage.js +62 -55
  92. package/dist/bigconsole/pages/DataSinkBuilderPage.js +252 -234
  93. package/dist/bigconsole/pages/DataSinkViewPage.js +1 -1
  94. package/dist/bigconsole/pages/DataSinksPage.js +335 -299
  95. package/dist/bigconsole/pages/DataSourcesPage.js +5 -5
  96. package/dist/bigconsole/pages/InsightsPage.js +279 -265
  97. package/dist/bigconsole/pages/OverviewPage.js +47 -47
  98. package/dist/bigconsole/pages/ParserBuilderPage.js +229 -213
  99. package/dist/bigconsole/pages/ParserViewPage.js +97 -97
  100. package/dist/bigconsole/pages/PipelineBuilderPage.js +256 -214
  101. package/dist/bigconsole/pages/PipelineViewPage.js +146 -146
  102. package/dist/bigconsole/pages/PipelinesPage.js +107 -88
  103. package/dist/bigconsole/pages/SettingsPage.js +179 -173
  104. package/dist/bigconsole/pages/WidgetDemoPage.js +42 -42
  105. package/dist/bigconsole/pages/WorkflowViewPage.js +1 -1
  106. package/dist/bigconsole/pages/WorkflowsPage.js +141 -141
  107. package/dist/bigconsole/providers/BigConsoleQuotaProvider.js +12 -12
  108. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +34 -34
  109. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +69 -69
  110. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +46 -46
  111. package/dist/bigconsole/store/widgetStore.d.ts +12 -0
  112. package/dist/bigconsole/store/widgetStore.js +3 -1
  113. package/dist/bigconsole/utils/backendError.d.ts +18 -0
  114. package/dist/bigconsole/utils/backendError.js +42 -0
  115. package/dist/bigconsole/utils/dashboardList.d.ts +28 -0
  116. package/dist/bigconsole/utils/dashboardList.js +15 -0
  117. package/dist/bigconsole/utils/dataSinkList.d.ts +15 -0
  118. package/dist/bigconsole/utils/dataSinkList.js +15 -0
  119. package/dist/bigconsole/utils/formDirty.d.ts +82 -0
  120. package/dist/bigconsole/utils/formDirty.js +21 -0
  121. package/dist/bigconsole/utils/insightsDraft.d.ts +29 -0
  122. package/dist/bigconsole/utils/insightsDraft.js +8 -0
  123. package/dist/bigconsole/utils/layoutBaseline.d.ts +130 -0
  124. package/dist/bigconsole/utils/layoutBaseline.js +96 -0
  125. package/dist/bigconsole/utils/listSort.d.ts +80 -0
  126. package/dist/bigconsole/utils/listSort.js +85 -0
  127. package/dist/bigconsole/utils/widgetFormDirty.d.ts +16 -0
  128. package/dist/bigconsole/utils/widgetFormDirty.js +13 -0
  129. package/dist/bigconsole/workflowOpen.js +15 -14
  130. package/package.json +3 -3
@@ -1,9 +1,9 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { useI18n as r } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
1
+ import { useI18n as e } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
2
+ import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
3
3
  //#region src/bigconsole/components/widgets/advanced/AdvancedWidgetConfig.tsx
4
4
  function i({ type: i, config: a, onChange: o }) {
5
- let { t: s } = r();
6
- return /* @__PURE__ */ n("div", {
5
+ let { t: s } = e();
6
+ return /* @__PURE__ */ r("div", {
7
7
  className: "space-y-form-gap",
8
8
  children: [
9
9
  (i === "map" ? [
@@ -59,9 +59,9 @@ function i({ type: i, config: a, onChange: o }) {
59
59
  "valueField",
60
60
  "Value field",
61
61
  "value"
62
- ]]).map(([e = "", r = "", i = ""]) => /* @__PURE__ */ n("label", {
62
+ ]]).map(([e = "", t = "", i = ""]) => /* @__PURE__ */ r("label", {
63
63
  className: "block text-sm text-text-primary",
64
- children: [s(`bigconsole.widget.advanced.${e}`, r), /* @__PURE__ */ t("input", {
64
+ children: [s(`bigconsole.widget.advanced.${e}`, t), /* @__PURE__ */ n("input", {
65
65
  className: "mt-1 w-full rounded-md border border-border-default bg-bg-base px-3 py-2",
66
66
  value: typeof a[e] == "string" ? a[e] : i,
67
67
  onChange: (t) => o({
@@ -70,30 +70,30 @@ function i({ type: i, config: a, onChange: o }) {
70
70
  })
71
71
  })]
72
72
  }, e)),
73
- i === "box_plot" && /* @__PURE__ */ n(e, { children: [/* @__PURE__ */ n("label", {
73
+ i === "box_plot" && /* @__PURE__ */ r(t, { children: [/* @__PURE__ */ r("label", {
74
74
  className: "block text-sm text-text-primary",
75
- children: [s("bigconsole.widget.boxPlot.mode", "Input format"), /* @__PURE__ */ n("select", {
75
+ children: [s("bigconsole.widget.boxPlot.mode", "Input format"), /* @__PURE__ */ r("select", {
76
76
  className: "mt-1 w-full rounded-md border border-border-default bg-bg-base px-3 py-2",
77
77
  value: a.mode === "summary" ? "summary" : "observations",
78
78
  onChange: (e) => o({
79
79
  ...a,
80
80
  mode: e.target.value
81
81
  }),
82
- children: [/* @__PURE__ */ t("option", {
82
+ children: [/* @__PURE__ */ n("option", {
83
83
  value: "observations",
84
84
  children: s("bigconsole.widget.boxPlot.observations", "Individual observations")
85
- }), /* @__PURE__ */ t("option", {
85
+ }), /* @__PURE__ */ n("option", {
86
86
  value: "summary",
87
87
  children: s("bigconsole.widget.boxPlot.summary", "Five-number summaries")
88
88
  })]
89
89
  })]
90
- }), /* @__PURE__ */ t("p", {
90
+ }), /* @__PURE__ */ n("p", {
91
91
  className: "text-xs text-text-secondary",
92
92
  children: s("bigconsole.widget.boxPlot.summaryHelp", "Summary rows require min, q1, median, q3 and max. Observation rows require the configured group and numeric value fields.")
93
93
  })] }),
94
- i === "waterfall" && /* @__PURE__ */ n("label", {
94
+ i === "waterfall" && /* @__PURE__ */ r("label", {
95
95
  className: "flex items-center gap-2 text-sm text-text-primary",
96
- children: [/* @__PURE__ */ t("input", {
96
+ children: [/* @__PURE__ */ n("input", {
97
97
  type: "checkbox",
98
98
  checked: a.showTotal !== !1,
99
99
  onChange: (e) => o({
@@ -102,7 +102,7 @@ function i({ type: i, config: a, onChange: o }) {
102
102
  })
103
103
  }), s("bigconsole.widget.waterfall.showTotal", "Show cumulative total")]
104
104
  }),
105
- i === "sankey" && /* @__PURE__ */ t("p", {
105
+ i === "sankey" && /* @__PURE__ */ n("p", {
106
106
  className: "text-xs text-text-secondary",
107
107
  children: s("bigconsole.widget.sankey.inputHelp", "Each row connects a source to a target with a nonnegative numeric value. Circular flows cannot be displayed.")
108
108
  })
@@ -1,53 +1,54 @@
1
1
  import e from "../chart/ChartWidget.js";
2
2
  import { normalizeBoxPlot as t, normalizeSankey as n } from "./data.js";
3
- import { memo as r, useMemo as i } from "react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
- import { ResponsiveContainer as c, Sankey as l, Tooltip as u } from "recharts";
3
+ import { boxPlotDescription as r } from "./boxPlotDescription.js";
4
+ import { memo as i, useMemo as a } from "react";
5
+ import { useI18n as o } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ import { ResponsiveContainer as l, Sankey as u, Tooltip as d } from "recharts";
7
8
  //#region src/bigconsole/components/widgets/advanced/AdvancedWidgets.tsx
8
- function d(e) {
9
+ function f(e) {
9
10
  try {
10
11
  return { data: e() };
11
12
  } catch (e) {
12
13
  return { error: e instanceof Error ? e.message : "Invalid chart data." };
13
14
  }
14
15
  }
15
- function f({ message: e, error: t = !1 }) {
16
- return /* @__PURE__ */ a("div", {
16
+ function p({ message: e, error: t = !1 }) {
17
+ return /* @__PURE__ */ s("div", {
17
18
  role: t ? "alert" : "status",
18
19
  className: "h-full flex items-center justify-center p-4 text-sm text-secondary",
19
20
  children: e
20
21
  });
21
22
  }
22
- function p({ x: e, y: t, width: n, height: r, payload: i }) {
23
- return /* @__PURE__ */ o("g", { children: [/* @__PURE__ */ a("rect", {
23
+ function m({ x: e, y: t, width: n, height: r, payload: i }) {
24
+ return /* @__PURE__ */ c("g", { children: [/* @__PURE__ */ s("rect", {
24
25
  x: e,
25
26
  y: t,
26
27
  width: n,
27
28
  height: r,
28
29
  fill: "var(--color-chart-1)"
29
- }), /* @__PURE__ */ o("text", {
30
+ }), /* @__PURE__ */ c("text", {
30
31
  x: e + n + 6,
31
32
  y: t + r / 2,
32
33
  dominantBaseline: "middle",
33
34
  fill: "var(--color-text-primary)",
34
35
  fontSize: 12,
35
- children: [i.name.length > 24 ? i.name.slice(0, 23) + "…" : i.name, /* @__PURE__ */ a("title", { children: i.name })]
36
+ children: [i.name.length > 24 ? i.name.slice(0, 23) + "…" : i.name, /* @__PURE__ */ s("title", { children: i.name })]
36
37
  })] });
37
38
  }
38
- var m = r(function({ widget: e, data: t = [] }) {
39
- let { t: r } = s(), m = e.config, h = i(() => d(() => n(t, m)), [t, m]);
40
- return h.error ? /* @__PURE__ */ a(f, {
39
+ var h = i(function({ widget: e, data: t = [] }) {
40
+ let { t: r } = o(), i = e.config, h = a(() => f(() => n(t, i)), [t, i]);
41
+ return h.error ? /* @__PURE__ */ s(p, {
41
42
  message: h.error,
42
43
  error: !0
43
- }) : h.data?.links.length ? /* @__PURE__ */ o("div", {
44
+ }) : h.data?.links.length ? /* @__PURE__ */ c("div", {
44
45
  role: "img",
45
46
  "aria-label": `${r("bigconsole.widget.sankey.label", "Sankey flow chart")}: ${e.title}`,
46
47
  className: "h-full w-full",
47
- children: [/* @__PURE__ */ a(c, {
48
+ children: [/* @__PURE__ */ s(l, {
48
49
  width: "100%",
49
50
  height: "100%",
50
- children: /* @__PURE__ */ a(l, {
51
+ children: /* @__PURE__ */ s(u, {
51
52
  data: h.data,
52
53
  nodePadding: 24,
53
54
  nodeWidth: 12,
@@ -61,40 +62,40 @@ var m = r(function({ widget: e, data: t = [] }) {
61
62
  stroke: "var(--color-chart-1)",
62
63
  strokeOpacity: .35
63
64
  },
64
- node: p,
65
- children: /* @__PURE__ */ a(u, {})
65
+ node: m,
66
+ children: /* @__PURE__ */ s(d, {})
66
67
  })
67
- }), /* @__PURE__ */ a("span", {
68
+ }), /* @__PURE__ */ s("span", {
68
69
  className: "sr-only",
69
70
  children: h.data.links.map((e) => `${h.data.nodes[e.source]?.name} to ${h.data.nodes[e.target]?.name}: ${e.value}`).join("; ")
70
71
  })]
71
- }) : /* @__PURE__ */ a(f, { message: r("bigconsole.widget.sankey.empty", "No positive flows to display.") });
72
- }), h = r(function({ widget: e, data: n = [] }) {
73
- let { t: r } = s(), c = e.config, l = i(() => d(() => t(n, c)), [n, c]);
74
- if (l.error) return /* @__PURE__ */ a(f, {
75
- message: l.error,
72
+ }) : /* @__PURE__ */ s(p, { message: r("bigconsole.widget.sankey.empty", "No positive flows to display.") });
73
+ }), g = i(function({ widget: e, data: n = [] }) {
74
+ let { t: i } = o(), l = e.config, u = r(l.mode), d = a(() => f(() => t(n, l)), [n, l]);
75
+ if (d.error) return /* @__PURE__ */ s(p, {
76
+ message: d.error,
76
77
  error: !0
77
78
  });
78
- if (!l.data?.length) return /* @__PURE__ */ a(f, { message: r("bigconsole.widget.boxPlot.empty", "No observations to display.") });
79
- let u = l.data, p = u.flatMap((e) => [
79
+ if (!d.data?.length) return /* @__PURE__ */ s(p, { message: i("bigconsole.widget.boxPlot.empty", "No observations to display.") });
80
+ let m = d.data, h = m.flatMap((e) => [
80
81
  e.min,
81
82
  e.max,
82
83
  ...e.outliers
83
- ]), m = p.reduce((e, t) => Math.min(e, t), Infinity), h = p.reduce((e, t) => Math.max(e, t), -Infinity), g = h / 2 - m / 2 || 1, _ = (e) => 140 + (e / 2 - m / 2) / g * 610, v = Math.max(160, u.length * 65 + 55);
84
- return /* @__PURE__ */ o("svg", {
84
+ ]), g = h.reduce((e, t) => Math.min(e, t), Infinity), _ = h.reduce((e, t) => Math.max(e, t), -Infinity), v = _ / 2 - g / 2 || 1, y = (e) => 140 + (e / 2 - g / 2) / v * 610, b = Math.max(160, m.length * 65 + 55);
85
+ return /* @__PURE__ */ c("svg", {
85
86
  role: "img",
86
- "aria-label": `${r("bigconsole.widget.boxPlot.label", "Box plot")}: ${e.title}`,
87
- viewBox: `0 0 800 ${v}`,
87
+ "aria-label": `${i("bigconsole.widget.boxPlot.label", "Box plot")}: ${e.title}`,
88
+ viewBox: `0 0 800 ${b}`,
88
89
  className: "h-full w-full",
89
90
  preserveAspectRatio: "xMidYMid meet",
90
91
  children: [
91
- /* @__PURE__ */ a("title", { children: e.title }),
92
- /* @__PURE__ */ a("desc", { children: r("bigconsole.widget.boxPlot.description", "Boxes show the first and third quartiles with the median. Whiskers use the 1.5 interquartile-range rule; circles show outliers.") }),
93
- u.map((e, t) => {
92
+ /* @__PURE__ */ s("title", { children: e.title }),
93
+ /* @__PURE__ */ s("desc", { children: i(u.key, u.fallback) }),
94
+ m.map((e, t) => {
94
95
  let n = t * 65 + 40;
95
- return /* @__PURE__ */ o("g", { children: [
96
- /* @__PURE__ */ a("title", { children: `${e.label}: min ${e.min}, Q1 ${e.q1}, median ${e.median}, Q3 ${e.q3}, max ${e.max}${e.count === void 0 ? "" : `; ${e.count} observations`}` }),
97
- /* @__PURE__ */ a("text", {
96
+ return /* @__PURE__ */ c("g", { children: [
97
+ /* @__PURE__ */ s("title", { children: `${e.label}: min ${e.min}, Q1 ${e.q1}, median ${e.median}, Q3 ${e.q3}, max ${e.max}${e.count === void 0 ? "" : `; ${e.count} observations`}` }),
98
+ /* @__PURE__ */ s("text", {
98
99
  x: 130,
99
100
  y: n + 5,
100
101
  textAnchor: "end",
@@ -102,85 +103,85 @@ var m = r(function({ widget: e, data: t = [] }) {
102
103
  fontSize: 13,
103
104
  children: e.label
104
105
  }),
105
- /* @__PURE__ */ a("line", {
106
- x1: _(e.min),
107
- x2: _(e.max),
106
+ /* @__PURE__ */ s("line", {
107
+ x1: y(e.min),
108
+ x2: y(e.max),
108
109
  y1: n,
109
110
  y2: n,
110
111
  stroke: "var(--color-chart-1)"
111
112
  }),
112
- /* @__PURE__ */ a("line", {
113
- x1: _(e.min),
114
- x2: _(e.min),
113
+ /* @__PURE__ */ s("line", {
114
+ x1: y(e.min),
115
+ x2: y(e.min),
115
116
  y1: n - 10,
116
117
  y2: n + 10,
117
118
  stroke: "var(--color-chart-1)"
118
119
  }),
119
- /* @__PURE__ */ a("line", {
120
- x1: _(e.max),
121
- x2: _(e.max),
120
+ /* @__PURE__ */ s("line", {
121
+ x1: y(e.max),
122
+ x2: y(e.max),
122
123
  y1: n - 10,
123
124
  y2: n + 10,
124
125
  stroke: "var(--color-chart-1)"
125
126
  }),
126
- /* @__PURE__ */ a("rect", {
127
- x: _(e.q1),
127
+ /* @__PURE__ */ s("rect", {
128
+ x: y(e.q1),
128
129
  y: n - 16,
129
- width: Math.max(1, _(e.q3) - _(e.q1)),
130
+ width: Math.max(1, y(e.q3) - y(e.q1)),
130
131
  height: 32,
131
132
  fill: "var(--color-chart-1)",
132
133
  fillOpacity: .25,
133
134
  stroke: "var(--color-chart-1)"
134
135
  }),
135
- /* @__PURE__ */ a("line", {
136
- x1: _(e.median),
137
- x2: _(e.median),
136
+ /* @__PURE__ */ s("line", {
137
+ x1: y(e.median),
138
+ x2: y(e.median),
138
139
  y1: n - 16,
139
140
  y2: n + 16,
140
141
  stroke: "var(--color-text-primary)",
141
142
  strokeWidth: 2
142
143
  }),
143
- e.outliers.map((e, t) => /* @__PURE__ */ a("circle", {
144
- cx: _(e),
144
+ e.outliers.map((e, t) => /* @__PURE__ */ s("circle", {
145
+ cx: y(e),
145
146
  cy: n,
146
147
  r: 3,
147
148
  fill: "var(--color-chart-2)",
148
- children: /* @__PURE__ */ a("title", { children: `${r("bigconsole.widget.boxPlot.outlier", "Outlier")}: ${e}` })
149
+ children: /* @__PURE__ */ s("title", { children: `${i("bigconsole.widget.boxPlot.outlier", "Outlier")}: ${e}` })
149
150
  }, t))
150
151
  ] }, `${e.label}-${t}`);
151
152
  }),
152
- /* @__PURE__ */ a("text", {
153
+ /* @__PURE__ */ s("text", {
153
154
  x: 140,
154
- y: v - 12,
155
+ y: b - 12,
155
156
  fill: "var(--color-text-secondary)",
156
157
  fontSize: 12,
157
- children: m
158
+ children: g
158
159
  }),
159
- /* @__PURE__ */ a("text", {
160
+ /* @__PURE__ */ s("text", {
160
161
  x: 750,
161
- y: v - 12,
162
+ y: b - 12,
162
163
  textAnchor: "end",
163
164
  fill: "var(--color-text-secondary)",
164
165
  fontSize: 12,
165
- children: h
166
+ children: _
166
167
  })
167
168
  ]
168
169
  });
169
- }), g = r(function({ widget: t, data: n = [] }) {
170
- let { t: r } = s(), o = i(() => ({
170
+ }), _ = i(function({ widget: t, data: n = [] }) {
171
+ let { t: r } = o(), i = a(() => ({
171
172
  ...t,
172
173
  config: {
173
174
  ...t.config,
174
175
  chartType: "waterfall"
175
176
  }
176
177
  }), [t]), c = n && typeof n == "object" && !Array.isArray(n) && "rows" in n ? n.rows : n;
177
- return Array.isArray(c) ? /* @__PURE__ */ a(e, {
178
- widget: o,
178
+ return Array.isArray(c) ? /* @__PURE__ */ s(e, {
179
+ widget: i,
179
180
  data: c
180
- }) : /* @__PURE__ */ a(f, {
181
+ }) : /* @__PURE__ */ s(p, {
181
182
  message: r("bigconsole.widget.waterfall.invalidData", "Waterfall data must be an array of rows."),
182
183
  error: !0
183
184
  });
184
185
  });
185
186
  //#endregion
186
- export { h as BoxPlotWidget, m as SankeyWidget, g as WaterfallWidget };
187
+ export { g as BoxPlotWidget, h as SankeyWidget, _ as WaterfallWidget };
@@ -0,0 +1,7 @@
1
+ import { BoxPlotFields } from './data';
2
+
3
+ /** Explain the same input mode used by the governed-row normalizer. */
4
+ export declare function boxPlotDescription(mode: BoxPlotFields['mode']): {
5
+ key: string;
6
+ fallback: string;
7
+ };
@@ -0,0 +1,12 @@
1
+ //#region src/bigconsole/components/widgets/advanced/boxPlotDescription.ts
2
+ function e(e) {
3
+ return e === "summary" ? {
4
+ key: "bigconsole.widget.boxPlot.summaryDescription",
5
+ fallback: "Boxes use the supplied first quartile, median and third quartile. Whiskers use the supplied minimum and maximum; no outliers are inferred."
6
+ } : {
7
+ key: "bigconsole.widget.boxPlot.description",
8
+ fallback: "Boxes show the first and third quartiles with the median. Whiskers use the 1.5 interquartile-range rule; circles show outliers."
9
+ };
10
+ }
11
+ //#endregion
12
+ export { e as boxPlotDescription };
@@ -1,11 +1,11 @@
1
1
  import e from "./CalendarView.js";
2
2
  import { memo as t } from "react";
3
- import { jsx as n } from "react/jsx-runtime";
4
- import { useI18n as r } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
+ import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
+ import { jsx as r } from "react/jsx-runtime";
5
5
  //#region src/bigconsole/components/widgets/calendar/CalendarWidget.tsx
6
6
  var i = t(function(t) {
7
- let { t: i } = r();
8
- return /* @__PURE__ */ n(e, {
7
+ let { t: i } = n();
8
+ return /* @__PURE__ */ r(e, {
9
9
  ...t,
10
10
  t: i
11
11
  });
@@ -1,9 +1,9 @@
1
1
  import { memo as e, useCallback as t, useMemo as n } from "react";
2
- import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
3
- import { useI18n as o } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
2
+ import { useI18n as r } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
+ import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
4
4
  //#region src/bigconsole/components/widgets/chart/ChartConfig.tsx
5
5
  var s = e(function({ config: e, onChange: s }) {
6
- let { t: c } = o(), l = n(() => [
6
+ let { t: c } = r(), l = n(() => [
7
7
  {
8
8
  value: "line",
9
9
  label: c("bigconsole.widget.config.chart.type.line", "Line Chart")
@@ -64,47 +64,47 @@ var s = e(function({ config: e, onChange: s }) {
64
64
  [t]: n
65
65
  });
66
66
  }, [e, s]), p = e.chartType === "pie" || e.chartType === "funnel";
67
- return /* @__PURE__ */ a("div", {
67
+ return /* @__PURE__ */ o("div", {
68
68
  className: "min-w-0 space-y-form-gap",
69
69
  children: [
70
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
70
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
71
71
  className: "block text-sm font-medium text-text-primary mb-1",
72
72
  children: c("bigconsole.widget.config.chart.chartTypeLabel", "Chart Type")
73
- }), /* @__PURE__ */ i("select", {
73
+ }), /* @__PURE__ */ a("select", {
74
74
  value: e.chartType || "line",
75
75
  onChange: (e) => f("chartType", e.target.value),
76
76
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n ",
77
- children: l.map((e) => /* @__PURE__ */ i("option", {
77
+ children: l.map((e) => /* @__PURE__ */ a("option", {
78
78
  value: e.value,
79
79
  children: e.label
80
80
  }, e.value))
81
81
  })] }),
82
- !p && /* @__PURE__ */ a(r, { children: [
83
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
82
+ !p && /* @__PURE__ */ o(i, { children: [
83
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
84
84
  className: "block text-sm font-medium text-text-primary mb-1",
85
85
  children: c("bigconsole.widget.config.chart.xAxisFieldLabel", "X-Axis Field")
86
- }), /* @__PURE__ */ i("input", {
86
+ }), /* @__PURE__ */ a("input", {
87
87
  type: "text",
88
88
  value: e.xAxisField || "",
89
89
  onChange: (e) => f("xAxisField", e.target.value),
90
90
  placeholder: c("bigconsole.widget.config.chart.xAxisFieldPlaceholder", "e.g., date, category"),
91
91
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
92
92
  })] }),
93
- /* @__PURE__ */ a("div", {
93
+ /* @__PURE__ */ o("div", {
94
94
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
95
- children: [/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
95
+ children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
96
96
  className: "block text-sm font-medium text-text-primary mb-1",
97
97
  children: c("bigconsole.widget.config.chart.xAxisLabelLabel", "X-Axis Label")
98
- }), /* @__PURE__ */ i("input", {
98
+ }), /* @__PURE__ */ a("input", {
99
99
  type: "text",
100
100
  value: e.xAxisLabel || "",
101
101
  onChange: (e) => f("xAxisLabel", e.target.value),
102
102
  placeholder: c("bigconsole.widget.config.chart.optionalPlaceholder", "Optional"),
103
103
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
104
- })] }), /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
104
+ })] }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
105
105
  className: "block text-sm font-medium text-text-primary mb-1",
106
106
  children: c("bigconsole.widget.config.chart.yAxisLabelLabel", "Y-Axis Label")
107
- }), /* @__PURE__ */ i("input", {
107
+ }), /* @__PURE__ */ a("input", {
108
108
  type: "text",
109
109
  value: e.yAxisLabel || "",
110
110
  onChange: (e) => f("yAxisLabel", e.target.value),
@@ -112,74 +112,74 @@ var s = e(function({ config: e, onChange: s }) {
112
112
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
113
113
  })] })]
114
114
  }),
115
- (e.chartType === "line" || e.chartType === "area") && /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
115
+ (e.chartType === "line" || e.chartType === "area") && /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
116
116
  className: "block text-sm font-medium text-text-primary mb-1",
117
117
  children: c("bigconsole.widget.config.chart.curveTypeLabel", "Curve Type")
118
- }), /* @__PURE__ */ i("select", {
118
+ }), /* @__PURE__ */ a("select", {
119
119
  value: e.curveType || "monotone",
120
120
  onChange: (e) => f("curveType", e.target.value),
121
121
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n ",
122
- children: u.map((e) => /* @__PURE__ */ i("option", {
122
+ children: u.map((e) => /* @__PURE__ */ a("option", {
123
123
  value: e.value,
124
124
  children: e.label
125
125
  }, e.value))
126
126
  })] })
127
127
  ] }),
128
- p && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ a("div", {
128
+ p && /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ o("div", {
129
129
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
130
- children: [/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
130
+ children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
131
131
  className: "block text-sm font-medium text-text-primary mb-1",
132
132
  children: c("bigconsole.widget.config.chart.valueFieldLabel", "Value Field")
133
- }), /* @__PURE__ */ i("input", {
133
+ }), /* @__PURE__ */ a("input", {
134
134
  type: "text",
135
135
  value: e.valueField || "",
136
136
  onChange: (e) => f("valueField", e.target.value),
137
137
  placeholder: c("bigconsole.widget.config.chart.valueFieldPlaceholder", "e.g., value"),
138
138
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
139
- })] }), /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
139
+ })] }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
140
140
  className: "block text-sm font-medium text-text-primary mb-1",
141
141
  children: c("bigconsole.widget.config.chart.labelFieldLabel", "Label Field")
142
- }), /* @__PURE__ */ i("input", {
142
+ }), /* @__PURE__ */ a("input", {
143
143
  type: "text",
144
144
  value: e.labelField || "",
145
145
  onChange: (e) => f("labelField", e.target.value),
146
146
  placeholder: c("bigconsole.widget.config.chart.labelFieldPlaceholder", "e.g., name"),
147
147
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
148
148
  })] })]
149
- }), e.chartType === "pie" && /* @__PURE__ */ a("label", {
149
+ }), e.chartType === "pie" && /* @__PURE__ */ o("label", {
150
150
  className: "flex items-center gap-3",
151
- children: [/* @__PURE__ */ i("input", {
151
+ children: [/* @__PURE__ */ a("input", {
152
152
  type: "checkbox",
153
153
  checked: e.showAsDonut === !0,
154
154
  onChange: (e) => f("showAsDonut", e.target.checked),
155
155
  className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
156
- }), /* @__PURE__ */ i("span", {
156
+ }), /* @__PURE__ */ a("span", {
157
157
  className: "text-sm text-text-primary",
158
158
  children: c("bigconsole.widget.config.chart.showAsDonut", "Show as Donut")
159
159
  })]
160
160
  })] }),
161
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
161
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("label", {
162
162
  className: "block text-sm font-medium text-text-primary mb-1",
163
163
  children: c("bigconsole.widget.config.chart.legendPositionLabel", "Legend Position")
164
- }), /* @__PURE__ */ i("select", {
164
+ }), /* @__PURE__ */ a("select", {
165
165
  value: e.legendPosition || "bottom",
166
166
  onChange: (e) => f("legendPosition", e.target.value),
167
167
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n ",
168
- children: d.map((e) => /* @__PURE__ */ i("option", {
168
+ children: d.map((e) => /* @__PURE__ */ a("option", {
169
169
  value: e.value,
170
170
  children: e.label
171
171
  }, e.value))
172
172
  })] }),
173
- !p && /* @__PURE__ */ a("div", { children: [
174
- /* @__PURE__ */ i("label", {
173
+ !p && /* @__PURE__ */ o("div", { children: [
174
+ /* @__PURE__ */ a("label", {
175
175
  className: "block text-sm font-medium text-text-primary mb-1",
176
176
  children: c("bigconsole.widget.config.chart.fieldsToDisplayLabel", "Fields to Display")
177
177
  }),
178
- /* @__PURE__ */ i("p", {
178
+ /* @__PURE__ */ a("p", {
179
179
  className: "text-xs text-text-secondary mb-2",
180
180
  children: c("bigconsole.widget.config.chart.fieldsToDisplayHelp", "Select which numeric fields to show as chart series. Leave empty to show all.")
181
181
  }),
182
- /* @__PURE__ */ i("input", {
182
+ /* @__PURE__ */ a("input", {
183
183
  type: "text",
184
184
  value: e.selectedFields?.join(", ") || "",
185
185
  onChange: (e) => {
@@ -189,63 +189,63 @@ var s = e(function({ config: e, onChange: s }) {
189
189
  placeholder: c("bigconsole.widget.config.chart.fieldsToDisplayPlaceholder", "e.g., revenue, orders, users (comma-separated)"),
190
190
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
191
191
  }),
192
- /* @__PURE__ */ i("p", {
192
+ /* @__PURE__ */ a("p", {
193
193
  className: "text-xs text-text-muted mt-1",
194
194
  children: c("bigconsole.widget.config.chart.fieldsToDisplayHint", "Enter field names separated by commas")
195
195
  })
196
196
  ] }),
197
- /* @__PURE__ */ a("div", {
197
+ /* @__PURE__ */ o("div", {
198
198
  role: "group",
199
199
  "aria-label": "Display options",
200
200
  className: "space-y-3 border-t border-[var(--color-border-subtle)] pt-form-gap",
201
201
  children: [
202
- /* @__PURE__ */ i("p", {
202
+ /* @__PURE__ */ a("p", {
203
203
  className: "text-xs font-bold uppercase tracking-wider text-text-secondary",
204
204
  children: "Display options"
205
205
  }),
206
- /* @__PURE__ */ a("label", {
206
+ /* @__PURE__ */ o("label", {
207
207
  className: "flex items-center gap-3",
208
- children: [/* @__PURE__ */ i("input", {
208
+ children: [/* @__PURE__ */ a("input", {
209
209
  type: "checkbox",
210
210
  checked: e.showGrid !== !1,
211
211
  onChange: (e) => f("showGrid", e.target.checked),
212
212
  className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
213
- }), /* @__PURE__ */ i("span", {
213
+ }), /* @__PURE__ */ a("span", {
214
214
  className: "text-sm text-text-primary",
215
215
  children: c("bigconsole.widget.config.chart.showGrid", "Show Grid")
216
216
  })]
217
217
  }),
218
- /* @__PURE__ */ a("label", {
218
+ /* @__PURE__ */ o("label", {
219
219
  className: "flex items-center gap-3",
220
- children: [/* @__PURE__ */ i("input", {
220
+ children: [/* @__PURE__ */ a("input", {
221
221
  type: "checkbox",
222
222
  checked: e.showLegend !== !1,
223
223
  onChange: (e) => f("showLegend", e.target.checked),
224
224
  className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
225
- }), /* @__PURE__ */ i("span", {
225
+ }), /* @__PURE__ */ a("span", {
226
226
  className: "text-sm text-text-primary",
227
227
  children: c("bigconsole.widget.config.chart.showLegend", "Show Legend")
228
228
  })]
229
229
  }),
230
- !p && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ a("label", {
230
+ !p && /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ o("label", {
231
231
  className: "flex items-center gap-3",
232
- children: [/* @__PURE__ */ i("input", {
232
+ children: [/* @__PURE__ */ a("input", {
233
233
  type: "checkbox",
234
234
  checked: e.showDataPoints === !0,
235
235
  onChange: (e) => f("showDataPoints", e.target.checked),
236
236
  className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
237
- }), /* @__PURE__ */ i("span", {
237
+ }), /* @__PURE__ */ a("span", {
238
238
  className: "text-sm text-text-primary",
239
239
  children: c("bigconsole.widget.config.chart.showDataPoints", "Show Data Points")
240
240
  })]
241
- }), (e.chartType === "bar" || e.chartType === "area") && /* @__PURE__ */ a("label", {
241
+ }), (e.chartType === "bar" || e.chartType === "area") && /* @__PURE__ */ o("label", {
242
242
  className: "flex items-center gap-3",
243
- children: [/* @__PURE__ */ i("input", {
243
+ children: [/* @__PURE__ */ a("input", {
244
244
  type: "checkbox",
245
245
  checked: e.stacked === !0,
246
246
  onChange: (e) => f("stacked", e.target.checked),
247
247
  className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
248
- }), /* @__PURE__ */ i("span", {
248
+ }), /* @__PURE__ */ a("span", {
249
249
  className: "text-sm text-text-primary",
250
250
  children: c("bigconsole.widget.config.chart.stacked", "Stacked")
251
251
  })]