@burdenoff/microfe-bigconsole 2026.1010.12 → 2026.1012.1

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 (161) hide show
  1. package/README.md +19 -0
  2. package/dist/bigconsole/BigConsoleRoot.js +88 -82
  3. package/dist/bigconsole/BigConsoleRoutes.js +163 -136
  4. package/dist/bigconsole/assistant/assistantProduct.js +1 -4
  5. package/dist/bigconsole/assistant/pageContext.d.ts +0 -14
  6. package/dist/bigconsole/assistant/pageContext.js +1 -6
  7. package/dist/bigconsole/assistant/recordAdapters.js +26 -27
  8. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +31 -31
  9. package/dist/bigconsole/components/common/index.d.ts +0 -1
  10. package/dist/bigconsole/components/common/index.js +0 -1
  11. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +44 -44
  12. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +36 -36
  13. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +59 -59
  14. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +58 -57
  15. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +30 -30
  16. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +41 -41
  17. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +34 -34
  18. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +34 -34
  19. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +110 -110
  20. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +21 -21
  21. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +46 -46
  22. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +164 -173
  23. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -101
  24. package/dist/bigconsole/components/dashboard/TemplateInstallOptions.js +31 -31
  25. package/dist/bigconsole/components/dashboard/TemplateLayoutPreview.js +15 -15
  26. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -1
  27. package/dist/bigconsole/components/dashboard/WidgetPalette.js +165 -163
  28. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js +37 -37
  29. package/dist/bigconsole/components/datasink/AlertRuleEditor.js +66 -66
  30. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +35 -35
  31. package/dist/bigconsole/components/datasink/DataSinkCard.js +50 -51
  32. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +18 -18
  33. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +20 -20
  34. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +47 -47
  35. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +91 -91
  36. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +35 -35
  37. package/dist/bigconsole/components/parser/DataSinkSelector.js +40 -40
  38. package/dist/bigconsole/components/parser/ImportParserDialog.js +120 -120
  39. package/dist/bigconsole/components/parser/ParserSelector.js +51 -51
  40. package/dist/bigconsole/components/pipeline/PipelineScopePicker.js +10 -10
  41. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +76 -77
  42. package/dist/bigconsole/components/preview/AiPreviewPanel.js +95 -96
  43. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +4 -4
  44. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +93 -93
  45. package/dist/bigconsole/components/widgets/PropertiesPanel.js +499 -507
  46. package/dist/bigconsole/components/widgets/WidgetRegistry.js +0 -1
  47. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +4 -4
  48. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +48 -48
  49. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +46 -46
  50. package/dist/bigconsole/components/widgets/custom/CustomWidget.js +73 -131
  51. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +61 -61
  52. package/dist/bigconsole/components/widgets/form/FormWidget.js +36 -36
  53. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +42 -42
  54. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +25 -25
  55. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.d.ts +28 -9
  56. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +115 -42
  57. package/dist/bigconsole/components/widgets/iframe-widget/framePolicy.d.ts +20 -0
  58. package/dist/bigconsole/components/widgets/iframe-widget/framePolicy.js +10 -0
  59. package/dist/bigconsole/components/widgets/iframe-widget/index.d.ts +2 -1
  60. package/dist/bigconsole/components/widgets/iframe-widget/index.js +3 -2
  61. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
  62. package/dist/bigconsole/components/widgets/list/ListConfig.js +30 -30
  63. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +38 -38
  64. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +9 -9
  65. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +9 -9
  66. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +49 -49
  67. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +39 -39
  68. package/dist/bigconsole/components/widgets/table/TableConfig.js +73 -73
  69. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +110 -27
  70. package/dist/bigconsole/components/widgets/text-widget/textData.d.ts +6 -0
  71. package/dist/bigconsole/components/widgets/text-widget/textData.js +17 -14
  72. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +64 -64
  73. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js +15 -15
  74. package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js +15 -15
  75. package/dist/bigconsole/context/BigConsoleContext.d.ts +10 -0
  76. package/dist/bigconsole/context/BigConsoleContext.js +47 -30
  77. package/dist/bigconsole/context/index.d.ts +1 -1
  78. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +58 -49
  79. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +74 -72
  80. package/dist/bigconsole/customWidget/proposalPreview.d.ts +5 -0
  81. package/dist/bigconsole/customWidget/proposalPreview.js +31 -0
  82. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts +0 -23
  83. package/dist/bigconsole/hooks/useDataSinkAlerts.js +113 -138
  84. package/dist/bigconsole/hooks/useDataSinkOperations.d.ts +7 -0
  85. package/dist/bigconsole/hooks/useDataSinkOperations.js +109 -98
  86. package/dist/bigconsole/hooks/useDataSinkSubscription.js +0 -1
  87. package/dist/bigconsole/hooks/useDrilldown.js +68 -67
  88. package/dist/bigconsole/hooks/useExportDataSink.js +1 -1
  89. package/dist/bigconsole/hooks/useGlobalFilters.js +3 -3
  90. package/dist/bigconsole/hooks/useImportDataSink.js +102 -90
  91. package/dist/bigconsole/pages/AdminPage.js +130 -130
  92. package/dist/bigconsole/pages/DashboardBuilderPage.js +60 -72
  93. package/dist/bigconsole/pages/DashboardViewPage.js +235 -258
  94. package/dist/bigconsole/pages/DashboardsPage.js +221 -269
  95. package/dist/bigconsole/pages/DataParsersPage.js +157 -180
  96. package/dist/bigconsole/pages/DataSinkAlertsPage.js +55 -62
  97. package/dist/bigconsole/pages/DataSinkBuilderPage.js +318 -295
  98. package/dist/bigconsole/pages/DataSinkViewPage.js +256 -255
  99. package/dist/bigconsole/pages/DataSinksPage.js +216 -251
  100. package/dist/bigconsole/pages/DataSourcesPage.js +5 -5
  101. package/dist/bigconsole/pages/InsightsPage.js +265 -279
  102. package/dist/bigconsole/pages/OverviewPage.js +47 -47
  103. package/dist/bigconsole/pages/ParserBuilderPage.js +213 -229
  104. package/dist/bigconsole/pages/ParserViewPage.js +97 -97
  105. package/dist/bigconsole/pages/PipelineBuilderPage.js +214 -256
  106. package/dist/bigconsole/pages/PipelineViewPage.js +146 -146
  107. package/dist/bigconsole/pages/PipelinesPage.js +88 -107
  108. package/dist/bigconsole/pages/SettingsPage.js +173 -179
  109. package/dist/bigconsole/pages/WidgetDemoPage.js +42 -42
  110. package/dist/bigconsole/pages/WorkflowViewPage.js +1 -1
  111. package/dist/bigconsole/pages/WorkflowsPage.js +141 -141
  112. package/dist/bigconsole/providers/BigConsoleQuotaProvider.js +12 -12
  113. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +235 -122
  114. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.d.ts +6 -1
  115. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +151 -151
  116. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +46 -46
  117. package/dist/bigconsole/renderers/adapters/adaptiveCardContent.d.ts +29 -0
  118. package/dist/bigconsole/renderers/adapters/adaptiveCardContent.js +51 -0
  119. package/dist/bigconsole/store/widgetStore.d.ts +0 -12
  120. package/dist/bigconsole/store/widgetStore.js +1 -3
  121. package/dist/bigconsole/types/index.d.ts +17 -2
  122. package/dist/bigconsole/utils/backendError.d.ts +0 -18
  123. package/dist/bigconsole/utils/dataSinkPayload.d.ts +48 -0
  124. package/dist/bigconsole/utils/dataSinkPayload.js +38 -0
  125. package/dist/bigconsole/utils/index.d.ts +2 -0
  126. package/dist/bigconsole/utils/safeUrl.d.ts +79 -0
  127. package/dist/bigconsole/utils/safeUrl.js +93 -0
  128. package/dist/bigconsole/utils/sanitizeHtml.d.ts +16 -0
  129. package/dist/bigconsole/utils/sanitizeHtml.js +67 -0
  130. package/dist/bigconsole/workflowOpen.js +14 -15
  131. package/dist/generated/wspace-operations.d.ts +138 -8
  132. package/dist/generated/wspace-operations.js +281 -240
  133. package/dist/node_modules/dompurify/dist/purify.es.js +800 -0
  134. package/package.json +9 -5
  135. package/dist/bigconsole/assistant/displayCopy.d.ts +0 -32
  136. package/dist/bigconsole/assistant/pageControls.d.ts +0 -81
  137. package/dist/bigconsole/assistant/pageControls.js +0 -169
  138. package/dist/bigconsole/assistant/previewControl.d.ts +0 -16
  139. package/dist/bigconsole/assistant/previewControl.js +0 -10
  140. package/dist/bigconsole/assistant/usePreviewControl.d.ts +0 -2
  141. package/dist/bigconsole/assistant/usePreviewControl.js +0 -20
  142. package/dist/bigconsole/components/common/SortBySelect.d.ts +0 -11
  143. package/dist/bigconsole/components/common/SortBySelect.js +0 -29
  144. package/dist/bigconsole/constants/backendErrors.js +0 -94
  145. package/dist/bigconsole/hooks/useDashboardLayoutBaseline.d.ts +0 -14
  146. package/dist/bigconsole/hooks/useDashboardLayoutBaseline.js +0 -32
  147. package/dist/bigconsole/utils/backendError.js +0 -42
  148. package/dist/bigconsole/utils/dashboardList.d.ts +0 -28
  149. package/dist/bigconsole/utils/dashboardList.js +0 -15
  150. package/dist/bigconsole/utils/dataSinkList.d.ts +0 -15
  151. package/dist/bigconsole/utils/dataSinkList.js +0 -15
  152. package/dist/bigconsole/utils/formDirty.d.ts +0 -82
  153. package/dist/bigconsole/utils/formDirty.js +0 -21
  154. package/dist/bigconsole/utils/insightsDraft.d.ts +0 -29
  155. package/dist/bigconsole/utils/insightsDraft.js +0 -8
  156. package/dist/bigconsole/utils/layoutBaseline.d.ts +0 -130
  157. package/dist/bigconsole/utils/layoutBaseline.js +0 -96
  158. package/dist/bigconsole/utils/listSort.d.ts +0 -80
  159. package/dist/bigconsole/utils/listSort.js +0 -85
  160. package/dist/bigconsole/utils/widgetFormDirty.d.ts +0 -16
  161. package/dist/bigconsole/utils/widgetFormDirty.js +0 -13
@@ -1,7 +1,7 @@
1
1
  import { memo as e, useCallback as t, useMemo as n, useState as r } from "react";
2
2
  import { AlertCircle as i, CheckCircle as a, Loader2 as o, RotateCcw as s, Send as c, Settings as l } from "lucide-react";
3
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
3
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
4
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
5
5
  //#region src/bigconsole/components/widgets/form/FormWidget.tsx
6
6
  function p(e, t, n) {
7
7
  let r = String(e ?? ""), i = e == null || r.trim() === "";
@@ -211,7 +211,7 @@ var g = {
211
211
  textAlign: "center"
212
212
  }
213
213
  }, _ = e(function({ widget: e, data: _ = {}, onDrilldown: v, onSubmit: y }) {
214
- let { t: b } = u(), x = {
214
+ let { t: b } = f(), x = {
215
215
  fields: [],
216
216
  layout: "vertical",
217
217
  submitLabel: "Submit",
@@ -292,7 +292,7 @@ var g = {
292
292
  ...n ? g.inputError : {}
293
293
  };
294
294
  switch (e.type) {
295
- case "textarea": return /* @__PURE__ */ d("textarea", {
295
+ case "textarea": return /* @__PURE__ */ u("textarea", {
296
296
  id: e.name,
297
297
  name: e.name,
298
298
  value: String(t ?? ""),
@@ -310,7 +310,7 @@ var g = {
310
310
  });
311
311
  case "select": {
312
312
  let n = C.fieldOptions[e.name] ?? e.options ?? [];
313
- return /* @__PURE__ */ f("select", {
313
+ return /* @__PURE__ */ d("select", {
314
314
  id: e.name,
315
315
  name: e.name,
316
316
  value: String(t ?? ""),
@@ -322,19 +322,19 @@ var g = {
322
322
  },
323
323
  onChange: (t) => F(e.name, t.target.value),
324
324
  onBlur: () => I(e.name),
325
- children: [/* @__PURE__ */ d("option", {
325
+ children: [/* @__PURE__ */ u("option", {
326
326
  value: "",
327
327
  children: e.placeholder || b("bigconsole.widget.form.selectPlaceholder", "Select {{label}}...", { label: e.label ?? "" })
328
- }), n.map((e) => /* @__PURE__ */ d("option", {
328
+ }), n.map((e) => /* @__PURE__ */ u("option", {
329
329
  value: e.value,
330
330
  disabled: e.disabled,
331
331
  children: e.label
332
332
  }, e.value))]
333
333
  });
334
334
  }
335
- case "checkbox": return /* @__PURE__ */ f("div", {
335
+ case "checkbox": return /* @__PURE__ */ d("div", {
336
336
  style: g.checkbox,
337
- children: [/* @__PURE__ */ d("input", {
337
+ children: [/* @__PURE__ */ u("input", {
338
338
  type: "checkbox",
339
339
  id: e.name,
340
340
  name: e.name,
@@ -343,7 +343,7 @@ var g = {
343
343
  style: g.checkboxInput,
344
344
  onChange: (t) => F(e.name, t.target.checked),
345
345
  onBlur: () => I(e.name)
346
- }), /* @__PURE__ */ d("label", {
346
+ }), /* @__PURE__ */ u("label", {
347
347
  htmlFor: e.name,
348
348
  style: {
349
349
  fontSize: "14px",
@@ -352,15 +352,15 @@ var g = {
352
352
  children: e.label
353
353
  })]
354
354
  });
355
- case "radio": return /* @__PURE__ */ d("div", {
355
+ case "radio": return /* @__PURE__ */ u("div", {
356
356
  style: {
357
357
  display: "flex",
358
358
  flexDirection: "column",
359
359
  gap: "8px"
360
360
  },
361
- children: (C.fieldOptions[e.name] ?? e.options ?? []).map((n) => /* @__PURE__ */ f("div", {
361
+ children: (C.fieldOptions[e.name] ?? e.options ?? []).map((n) => /* @__PURE__ */ d("div", {
362
362
  style: g.checkbox,
363
- children: [/* @__PURE__ */ d("input", {
363
+ children: [/* @__PURE__ */ u("input", {
364
364
  type: "radio",
365
365
  id: `${e.name}-${n.value}`,
366
366
  name: e.name,
@@ -370,7 +370,7 @@ var g = {
370
370
  style: g.checkboxInput,
371
371
  onChange: (t) => F(e.name, t.target.value),
372
372
  onBlur: () => I(e.name)
373
- }), /* @__PURE__ */ d("label", {
373
+ }), /* @__PURE__ */ u("label", {
374
374
  htmlFor: `${e.name}-${n.value}`,
375
375
  style: {
376
376
  fontSize: "14px",
@@ -380,12 +380,12 @@ var g = {
380
380
  })]
381
381
  }, n.value))
382
382
  });
383
- case "hidden": return /* @__PURE__ */ d("input", {
383
+ case "hidden": return /* @__PURE__ */ u("input", {
384
384
  type: "hidden",
385
385
  name: e.name,
386
386
  value: String(t ?? "")
387
387
  });
388
- default: return /* @__PURE__ */ d("input", {
388
+ default: return /* @__PURE__ */ u("input", {
389
389
  type: e.type,
390
390
  id: e.name,
391
391
  name: e.name,
@@ -413,20 +413,20 @@ var g = {
413
413
  C,
414
414
  b
415
415
  ]);
416
- if (S.fields.length === 0) return /* @__PURE__ */ f("div", {
416
+ if (S.fields.length === 0) return /* @__PURE__ */ d("div", {
417
417
  style: g.emptyState,
418
418
  children: [
419
- /* @__PURE__ */ d(l, { style: {
419
+ /* @__PURE__ */ u(l, { style: {
420
420
  width: "48px",
421
421
  height: "48px",
422
422
  marginBottom: "16px",
423
423
  opacity: .5
424
424
  } }),
425
- /* @__PURE__ */ d("p", {
425
+ /* @__PURE__ */ u("p", {
426
426
  style: { fontSize: "14px" },
427
427
  children: b("bigconsole.widget.form.configureTitle", "Configure Form Fields")
428
428
  }),
429
- /* @__PURE__ */ d("p", {
429
+ /* @__PURE__ */ u("p", {
430
430
  style: {
431
431
  fontSize: "12px",
432
432
  marginTop: "4px"
@@ -440,45 +440,45 @@ var g = {
440
440
  gridTemplateColumns: `repeat(${S.columns || 2}, 1fr)`,
441
441
  gap: "16px"
442
442
  } : {};
443
- return /* @__PURE__ */ f("div", {
443
+ return /* @__PURE__ */ d("div", {
444
444
  style: g.container,
445
- children: [/* @__PURE__ */ f("form", {
445
+ children: [/* @__PURE__ */ d("form", {
446
446
  onSubmit: L,
447
447
  style: {
448
448
  ...g.form,
449
449
  ...B
450
450
  },
451
- children: [N && S.successMessage && /* @__PURE__ */ f("div", {
451
+ children: [N && S.successMessage && /* @__PURE__ */ d("div", {
452
452
  style: {
453
453
  ...g.successMessage,
454
454
  gridColumn: "1 / -1"
455
455
  },
456
- children: [/* @__PURE__ */ d(a, { style: {
456
+ children: [/* @__PURE__ */ u(a, { style: {
457
457
  width: "18px",
458
458
  height: "18px"
459
459
  } }), S.successMessage]
460
460
  }), S.fields.map((e) => {
461
461
  if (e.type === "hidden") return z(e);
462
462
  let t = k.has(e.name) ? D[e.name] : null;
463
- return /* @__PURE__ */ f("div", {
463
+ return /* @__PURE__ */ d("div", {
464
464
  style: g.fieldWrapper,
465
465
  children: [
466
- e.type !== "checkbox" && /* @__PURE__ */ f("label", {
466
+ e.type !== "checkbox" && /* @__PURE__ */ d("label", {
467
467
  htmlFor: e.name,
468
468
  style: g.label,
469
- children: [e.label, e.required && /* @__PURE__ */ d("span", {
469
+ children: [e.label, e.required && /* @__PURE__ */ u("span", {
470
470
  style: g.required,
471
471
  children: "*"
472
472
  })]
473
473
  }),
474
474
  z(e),
475
- e.helpText && !t && /* @__PURE__ */ d("p", {
475
+ e.helpText && !t && /* @__PURE__ */ u("p", {
476
476
  style: g.helpText,
477
477
  children: e.helpText
478
478
  }),
479
- t && /* @__PURE__ */ f("p", {
479
+ t && /* @__PURE__ */ d("p", {
480
480
  style: g.errorText,
481
- children: [/* @__PURE__ */ d(i, { style: {
481
+ children: [/* @__PURE__ */ u(i, { style: {
482
482
  width: "14px",
483
483
  height: "14px"
484
484
  } }), t]
@@ -486,9 +486,9 @@ var g = {
486
486
  ]
487
487
  }, e.name);
488
488
  })]
489
- }), /* @__PURE__ */ f("div", {
489
+ }), /* @__PURE__ */ d("div", {
490
490
  style: g.footer,
491
- children: [S.showReset !== !1 && /* @__PURE__ */ f("button", {
491
+ children: [S.showReset !== !1 && /* @__PURE__ */ d("button", {
492
492
  type: "button",
493
493
  onClick: R,
494
494
  disabled: j,
@@ -497,11 +497,11 @@ var g = {
497
497
  ...g.resetButton,
498
498
  opacity: j ? .6 : 1
499
499
  },
500
- children: [/* @__PURE__ */ d(s, { style: {
500
+ children: [/* @__PURE__ */ u(s, { style: {
501
501
  width: "16px",
502
502
  height: "16px"
503
503
  } }), S.resetLabel || b("bigconsole.widget.form.reset", "Reset")]
504
- }), /* @__PURE__ */ f("button", {
504
+ }), /* @__PURE__ */ d("button", {
505
505
  type: "submit",
506
506
  onClick: L,
507
507
  disabled: j,
@@ -510,11 +510,11 @@ var g = {
510
510
  ...g.submitButton,
511
511
  opacity: j ? .6 : 1
512
512
  },
513
- children: [j ? /* @__PURE__ */ d(o, { style: {
513
+ children: [j ? /* @__PURE__ */ u(o, { style: {
514
514
  width: "16px",
515
515
  height: "16px",
516
516
  animation: "spin 1s linear infinite"
517
- } }) : /* @__PURE__ */ d(c, { style: {
517
+ } }) : /* @__PURE__ */ u(c, { style: {
518
518
  width: "16px",
519
519
  height: "16px"
520
520
  } }), S.submitLabel || b("bigconsole.widget.form.submit", "Submit")]
@@ -1,6 +1,6 @@
1
1
  import { memo as e, useCallback as t } from "react";
2
- import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
2
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
+ import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
4
  //#region src/bigconsole/components/widgets/gauge/GaugeConfig.tsx
5
5
  var a = [
6
6
  {
@@ -16,7 +16,7 @@ var a = [
16
16
  color: "success"
17
17
  }
18
18
  ], o = e(function({ config: e, onChange: o }) {
19
- let { t: s } = n(), c = t((t, n) => {
19
+ let { t: s } = i(), c = t((t, n) => {
20
20
  o({
21
21
  ...e,
22
22
  [t]: n
@@ -37,97 +37,97 @@ var a = [
37
37
  };
38
38
  c("thresholds", r);
39
39
  }, [e.thresholds, c]);
40
- return /* @__PURE__ */ i("div", {
40
+ return /* @__PURE__ */ r("div", {
41
41
  className: "min-w-0 space-y-form-gap",
42
42
  children: [
43
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
43
+ /* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("label", {
44
44
  className: "block text-sm font-medium text-text-primary mb-1",
45
45
  children: s("bigconsole.widget.config.gauge.gaugeType", "Gauge Type")
46
- }), /* @__PURE__ */ i("select", {
46
+ }), /* @__PURE__ */ r("select", {
47
47
  value: e.variant || "circular",
48
48
  onChange: (e) => c("variant", e.target.value),
49
49
  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 ",
50
- children: [/* @__PURE__ */ r("option", {
50
+ children: [/* @__PURE__ */ n("option", {
51
51
  value: "circular",
52
52
  children: s("bigconsole.widget.config.gauge.variant.circular", "Circular")
53
- }), /* @__PURE__ */ r("option", {
53
+ }), /* @__PURE__ */ n("option", {
54
54
  value: "linear",
55
55
  children: s("bigconsole.widget.config.gauge.variant.linear", "Linear")
56
56
  })]
57
57
  })] }),
58
- /* @__PURE__ */ i("div", {
58
+ /* @__PURE__ */ r("div", {
59
59
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
60
- children: [/* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
60
+ children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("label", {
61
61
  className: "block text-sm font-medium text-text-primary mb-1",
62
62
  children: s("bigconsole.widget.config.gauge.minimum", "Minimum")
63
- }), /* @__PURE__ */ r("input", {
63
+ }), /* @__PURE__ */ n("input", {
64
64
  type: "number",
65
65
  value: e.min ?? 0,
66
66
  onChange: (e) => c("min", Number(e.target.value)),
67
67
  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 "
68
- })] }), /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
68
+ })] }), /* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("label", {
69
69
  className: "block text-sm font-medium text-text-primary mb-1",
70
70
  children: s("bigconsole.widget.config.gauge.maximum", "Maximum")
71
- }), /* @__PURE__ */ r("input", {
71
+ }), /* @__PURE__ */ n("input", {
72
72
  type: "number",
73
73
  value: e.max ?? 100,
74
74
  onChange: (e) => c("max", Number(e.target.value)),
75
75
  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 "
76
76
  })] })]
77
77
  }),
78
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
78
+ /* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("label", {
79
79
  className: "block text-sm font-medium text-text-primary mb-1",
80
80
  children: s("bigconsole.widget.config.gauge.unitLabel", "Unit Label")
81
- }), /* @__PURE__ */ r("input", {
81
+ }), /* @__PURE__ */ n("input", {
82
82
  type: "text",
83
83
  value: e.unit || "",
84
84
  onChange: (e) => c("unit", e.target.value),
85
85
  placeholder: s("bigconsole.widget.config.gauge.unitPlaceholder", "e.g., %, ms, users"),
86
86
  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 "
87
87
  })] }),
88
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
88
+ /* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("label", {
89
89
  className: "block text-sm font-medium text-text-primary mb-1",
90
90
  children: s("bigconsole.widget.config.gauge.valueFormat", "Value Format")
91
- }), /* @__PURE__ */ i("select", {
91
+ }), /* @__PURE__ */ r("select", {
92
92
  value: e.format || "number",
93
93
  onChange: (e) => c("format", e.target.value),
94
94
  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 ",
95
95
  children: [
96
- /* @__PURE__ */ r("option", {
96
+ /* @__PURE__ */ n("option", {
97
97
  value: "number",
98
98
  children: s("bigconsole.widget.config.gauge.format.number", "Number")
99
99
  }),
100
- /* @__PURE__ */ r("option", {
100
+ /* @__PURE__ */ n("option", {
101
101
  value: "percentage",
102
102
  children: s("bigconsole.widget.config.gauge.format.percentage", "Percentage")
103
103
  }),
104
- /* @__PURE__ */ r("option", {
104
+ /* @__PURE__ */ n("option", {
105
105
  value: "currency",
106
106
  children: s("bigconsole.widget.config.gauge.format.currency", "Currency")
107
107
  })
108
108
  ]
109
109
  })] }),
110
- /* @__PURE__ */ i("div", { children: [
111
- /* @__PURE__ */ r("label", {
110
+ /* @__PURE__ */ r("div", { children: [
111
+ /* @__PURE__ */ n("label", {
112
112
  className: "block text-sm font-medium text-text-primary mb-2",
113
113
  children: s("bigconsole.widget.config.gauge.colorThresholds", "Color Thresholds")
114
114
  }),
115
- /* @__PURE__ */ r("p", {
115
+ /* @__PURE__ */ n("p", {
116
116
  className: "text-xs text-text-secondary mb-3",
117
117
  children: s("bigconsole.widget.config.gauge.colorThresholdsHelp", "Define color zones based on value ranges. Values up to each threshold will use that color.")
118
118
  }),
119
- /* @__PURE__ */ i("div", {
119
+ /* @__PURE__ */ r("div", {
120
120
  className: "space-y-2",
121
121
  children: [
122
- /* @__PURE__ */ i("div", {
122
+ /* @__PURE__ */ r("div", {
123
123
  className: "flex items-center gap-2",
124
124
  children: [
125
- /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-error-bg" }),
126
- /* @__PURE__ */ r("span", {
125
+ /* @__PURE__ */ n("div", { className: "w-4 h-4 rounded bg-status-error-bg" }),
126
+ /* @__PURE__ */ n("span", {
127
127
  className: "text-sm text-text-primary flex-1",
128
128
  children: s("bigconsole.widget.config.gauge.threshold.danger", "Danger (Red)")
129
129
  }),
130
- /* @__PURE__ */ r("input", {
130
+ /* @__PURE__ */ n("input", {
131
131
  type: "number",
132
132
  value: e.thresholds?.[0]?.value ?? 33,
133
133
  onChange: (e) => l(0, e.target.value),
@@ -135,15 +135,15 @@ var a = [
135
135
  })
136
136
  ]
137
137
  }),
138
- /* @__PURE__ */ i("div", {
138
+ /* @__PURE__ */ r("div", {
139
139
  className: "flex items-center gap-2",
140
140
  children: [
141
- /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-warning-bg" }),
142
- /* @__PURE__ */ r("span", {
141
+ /* @__PURE__ */ n("div", { className: "w-4 h-4 rounded bg-status-warning-bg" }),
142
+ /* @__PURE__ */ n("span", {
143
143
  className: "text-sm text-text-primary flex-1",
144
144
  children: s("bigconsole.widget.config.gauge.threshold.warning", "Warning (Yellow)")
145
145
  }),
146
- /* @__PURE__ */ r("input", {
146
+ /* @__PURE__ */ n("input", {
147
147
  type: "number",
148
148
  value: e.thresholds?.[1]?.value ?? 66,
149
149
  onChange: (e) => l(1, e.target.value),
@@ -151,15 +151,15 @@ var a = [
151
151
  })
152
152
  ]
153
153
  }),
154
- /* @__PURE__ */ i("div", {
154
+ /* @__PURE__ */ r("div", {
155
155
  className: "flex items-center gap-2",
156
156
  children: [
157
- /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-success-bg" }),
158
- /* @__PURE__ */ r("span", {
157
+ /* @__PURE__ */ n("div", { className: "w-4 h-4 rounded bg-status-success-bg" }),
158
+ /* @__PURE__ */ n("span", {
159
159
  className: "text-sm text-text-primary flex-1",
160
160
  children: s("bigconsole.widget.config.gauge.threshold.good", "Good (Green)")
161
161
  }),
162
- /* @__PURE__ */ r("input", {
162
+ /* @__PURE__ */ n("input", {
163
163
  type: "number",
164
164
  value: e.thresholds?.[2]?.value ?? 100,
165
165
  onChange: (e) => l(2, e.target.value),
@@ -170,28 +170,28 @@ var a = [
170
170
  ]
171
171
  })
172
172
  ] }),
173
- /* @__PURE__ */ i("div", {
173
+ /* @__PURE__ */ r("div", {
174
174
  role: "group",
175
175
  "aria-label": "Display options",
176
176
  className: "space-y-3 border-t border-[var(--color-border-subtle)] pt-form-gap",
177
177
  children: [
178
- /* @__PURE__ */ r("p", {
178
+ /* @__PURE__ */ n("p", {
179
179
  className: "text-xs font-bold uppercase tracking-wider text-text-secondary",
180
180
  children: "Display options"
181
181
  }),
182
- e.variant === "linear" && /* @__PURE__ */ i("label", {
182
+ e.variant === "linear" && /* @__PURE__ */ r("label", {
183
183
  className: "flex items-center gap-3",
184
- children: [/* @__PURE__ */ r("input", {
184
+ children: [/* @__PURE__ */ n("input", {
185
185
  type: "checkbox",
186
186
  checked: e.showZones === !0,
187
187
  onChange: (e) => c("showZones", e.target.checked),
188
188
  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 "
189
- }), /* @__PURE__ */ r("span", {
189
+ }), /* @__PURE__ */ n("span", {
190
190
  className: "text-sm text-text-primary",
191
191
  children: s("bigconsole.widget.config.gauge.showZones", "Show color zones in background")
192
192
  })]
193
193
  }),
194
- e.variant !== "linear" && /* @__PURE__ */ r("p", {
194
+ e.variant !== "linear" && /* @__PURE__ */ n("p", {
195
195
  className: "text-xs text-text-secondary",
196
196
  children: s("bigconsole.widget.config.gauge.noCircularOptions", "No display options for the circular gauge.")
197
197
  })
@@ -1,9 +1,9 @@
1
1
  import { memo as e, useCallback as t, useMemo as n } from "react";
2
- import { useI18n as r } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
2
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
4
  //#region src/bigconsole/components/widgets/heatmap/HeatmapConfig.tsx
5
5
  var o = "\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", s = e(function({ config: e, onChange: s }) {
6
- let { t: c } = r(), l = n(() => [
6
+ let { t: c } = a(), l = n(() => [
7
7
  {
8
8
  value: "blue",
9
9
  label: c("bigconsole.widget.config.heatmap.colorScheme.blue", "Blue")
@@ -22,62 +22,62 @@ var o = "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n b
22
22
  [t]: n
23
23
  });
24
24
  }, [e, s]);
25
- return /* @__PURE__ */ a("div", {
25
+ return /* @__PURE__ */ i("div", {
26
26
  className: "min-w-0 space-y-form-gap",
27
27
  children: [
28
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
28
+ /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
29
29
  className: "block text-sm font-medium text-text-primary mb-1",
30
30
  children: c("bigconsole.widget.config.heatmap.xAxisFieldLabel", "X-Axis Field")
31
- }), /* @__PURE__ */ i("input", {
31
+ }), /* @__PURE__ */ r("input", {
32
32
  type: "text",
33
33
  value: e.xAxisField || "",
34
34
  onChange: (e) => u("xAxisField", e.target.value),
35
35
  placeholder: c("bigconsole.widget.config.heatmap.xAxisFieldPlaceholder", "e.g., hour, column"),
36
36
  className: o
37
37
  })] }),
38
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
38
+ /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
39
39
  className: "block text-sm font-medium text-text-primary mb-1",
40
40
  children: c("bigconsole.widget.config.heatmap.yAxisFieldLabel", "Y-Axis Field")
41
- }), /* @__PURE__ */ i("input", {
41
+ }), /* @__PURE__ */ r("input", {
42
42
  type: "text",
43
43
  value: e.yAxisField || "",
44
44
  onChange: (e) => u("yAxisField", e.target.value),
45
45
  placeholder: c("bigconsole.widget.config.heatmap.yAxisFieldPlaceholder", "e.g., day, row"),
46
46
  className: o
47
47
  })] }),
48
- /* @__PURE__ */ a("div", { children: [
49
- /* @__PURE__ */ i("label", {
48
+ /* @__PURE__ */ i("div", { children: [
49
+ /* @__PURE__ */ r("label", {
50
50
  className: "block text-sm font-medium text-text-primary mb-1",
51
51
  children: c("bigconsole.widget.config.heatmap.valueFieldLabel", "Value Field")
52
52
  }),
53
- /* @__PURE__ */ i("input", {
53
+ /* @__PURE__ */ r("input", {
54
54
  type: "text",
55
55
  value: e.valueField || "",
56
56
  onChange: (e) => u("valueField", e.target.value),
57
57
  placeholder: c("bigconsole.widget.config.heatmap.valueFieldPlaceholder", "e.g., tickets, count"),
58
58
  className: o
59
59
  }),
60
- /* @__PURE__ */ i("p", {
60
+ /* @__PURE__ */ r("p", {
61
61
  className: "mt-1 text-xs text-text-secondary",
62
62
  children: c("bigconsole.widget.config.heatmap.valueFieldHelp", "Left empty, the widget reads the parser's rows / columns / cells output directly.")
63
63
  })
64
64
  ] }),
65
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
65
+ /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
66
66
  className: "block text-sm font-medium text-text-primary mb-1",
67
67
  children: c("bigconsole.widget.config.heatmap.colorSchemeLabel", "Color Scheme")
68
- }), /* @__PURE__ */ i("select", {
68
+ }), /* @__PURE__ */ r("select", {
69
69
  value: e.colorScheme || "blue",
70
70
  onChange: (e) => u("colorScheme", e.target.value),
71
71
  className: o,
72
- children: l.map((e) => /* @__PURE__ */ i("option", {
72
+ children: l.map((e) => /* @__PURE__ */ r("option", {
73
73
  value: e.value,
74
74
  children: e.label
75
75
  }, e.value))
76
76
  })] }),
77
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
77
+ /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
78
78
  className: "block text-sm font-medium text-text-primary mb-1",
79
79
  children: c("bigconsole.widget.config.heatmap.decimalPlacesLabel", "Decimal Places")
80
- }), /* @__PURE__ */ i("input", {
80
+ }), /* @__PURE__ */ r("input", {
81
81
  type: "number",
82
82
  min: 0,
83
83
  max: 6,
@@ -85,35 +85,35 @@ var o = "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n b
85
85
  onChange: (e) => u("decimals", Number(e.target.value)),
86
86
  className: o
87
87
  })] }),
88
- /* @__PURE__ */ a("div", {
88
+ /* @__PURE__ */ i("div", {
89
89
  role: "group",
90
90
  "aria-label": "Display options",
91
91
  className: "space-y-3 border-t border-[var(--color-border-subtle)] pt-form-gap",
92
92
  children: [
93
- /* @__PURE__ */ i("p", {
93
+ /* @__PURE__ */ r("p", {
94
94
  className: "text-xs font-bold uppercase tracking-wider text-text-secondary",
95
95
  children: "Display options"
96
96
  }),
97
- /* @__PURE__ */ a("label", {
97
+ /* @__PURE__ */ i("label", {
98
98
  className: "flex items-center gap-3",
99
- children: [/* @__PURE__ */ i("input", {
99
+ children: [/* @__PURE__ */ r("input", {
100
100
  type: "checkbox",
101
101
  checked: e.showValues !== !1,
102
102
  onChange: (e) => u("showValues", e.target.checked),
103
103
  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 "
104
- }), /* @__PURE__ */ i("span", {
104
+ }), /* @__PURE__ */ r("span", {
105
105
  className: "text-sm text-text-primary",
106
106
  children: c("bigconsole.widget.config.heatmap.showValues", "Show cell values")
107
107
  })]
108
108
  }),
109
- /* @__PURE__ */ a("label", {
109
+ /* @__PURE__ */ i("label", {
110
110
  className: "flex items-center gap-3",
111
- children: [/* @__PURE__ */ i("input", {
111
+ children: [/* @__PURE__ */ r("input", {
112
112
  type: "checkbox",
113
113
  checked: e.showLegend !== !1,
114
114
  onChange: (e) => u("showLegend", e.target.checked),
115
115
  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 "
116
- }), /* @__PURE__ */ i("span", {
116
+ }), /* @__PURE__ */ r("span", {
117
117
  className: "text-sm text-text-primary",
118
118
  children: c("bigconsole.widget.config.heatmap.showLegend", "Show color legend")
119
119
  })]
@@ -1,30 +1,49 @@
1
1
  import { FC } from 'react';
2
2
  import { Widget } from '../../../types';
3
+ import { FrameSrcContext, FrameSrcRejection } from '../../../utils/safeUrl';
4
+ import { FRAME_REFERRER_POLICY } from './framePolicy';
3
5
 
4
6
  export interface IframeWidgetProps {
5
7
  widget: Widget;
6
8
  data?: IframeData;
7
9
  }
10
+ /** Fields parser output may provide. Only `url` and `title` are used. */
8
11
  export interface IframeData {
9
12
  url?: string;
10
13
  title?: string;
14
+ /** Ignored: fullscreen is a widget configuration setting. */
11
15
  allowFullscreen?: boolean;
16
+ /** Ignored: the sandbox is fixed by the frame policy. */
12
17
  sandbox?: string;
18
+ /** Ignored: loading is a widget configuration setting. */
13
19
  loading?: 'lazy' | 'eager';
14
20
  }
21
+ export interface ResolvedIframeConfig {
22
+ /** Validated frame source, or `null` when none was given or it was rejected. */
23
+ src: string | null;
24
+ title: string;
25
+ sandbox: string;
26
+ referrerPolicy: typeof FRAME_REFERRER_POLICY;
27
+ allowFullscreen: boolean;
28
+ /** Permissions Policy for the frame (`allow` attribute). */
29
+ allow: string | undefined;
30
+ loading: 'lazy' | 'eager';
31
+ /** Whether a URL was supplied at all. */
32
+ hasUrl: boolean;
33
+ /** Why the supplied URL cannot be embedded; `null` when it can (or none was given). */
34
+ rejection: FrameSrcRejection | null;
35
+ }
15
36
  /**
16
37
  * Resolve the effective iframe configuration.
17
38
  *
18
- * Priority (highest first):
19
- * 1. Parser-provided `data` fields
20
- * 2. User-configured `widget.config` fields
21
- * 3. Safe defaults (empty URL, restricted sandbox, no fullscreen)
39
+ * - `url` and `title`: parser `data` first, then `widget.config`.
40
+ * - `allowFullscreen` and `loading`: `widget.config` only.
41
+ * - `sandbox`, referrer policy and permissions: fixed by the frame policy;
42
+ * any `sandbox` value in data or config is ignored.
22
43
  *
23
- * This is the function the widget tests exercise directly; keeping the merge
24
- * logic pure makes the DataSink → Parser → Widget contract explicit.
44
+ * The URL is validated by {@link resolveFrameSrc}; `context` supplies the app
45
+ * origin and the optional origin allowlist.
25
46
  */
26
- export declare function resolveIframeConfig(widgetConfig: Record<string, unknown> | undefined, data: IframeData | undefined): Required<IframeData> & {
27
- hasUrl: boolean;
28
- };
47
+ export declare function resolveIframeConfig(widgetConfig: Record<string, unknown> | undefined, data: IframeData | undefined, context?: FrameSrcContext): ResolvedIframeConfig;
29
48
  export declare const IframeWidget: FC<IframeWidgetProps>;
30
49
  export default IframeWidget;