@burdenoff/microfe-bigconsole 2026.803.3 → 2026.803.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,71 @@
1
+ //#region src/bigconsole/components/widgets/text-widget/textData.ts
2
+ var e = new Set([
3
+ "markdown",
4
+ "html",
5
+ "plain"
6
+ ]), t = new Set([
7
+ "left",
8
+ "center",
9
+ "right",
10
+ "justify"
11
+ ]);
12
+ function n(t) {
13
+ return typeof t == "string" && e.has(t);
14
+ }
15
+ function r(e) {
16
+ return typeof e == "string" && t.has(e);
17
+ }
18
+ function i(e) {
19
+ return e == null ? "" : typeof e == "string" ? e : String(e);
20
+ }
21
+ function a(e) {
22
+ let t = [];
23
+ for (let [n, r] of Object.entries(e)) if (r && typeof r == "object" && !Array.isArray(r)) {
24
+ t.push(`### ${n}`);
25
+ for (let [e, n] of Object.entries(r)) t.push(`- **${e}:** ${n}`);
26
+ } else Array.isArray(r) ? (t.push(`### ${n}`), r.slice(0, 10).forEach((e) => {
27
+ if (e && typeof e == "object") {
28
+ let n = Object.entries(e);
29
+ t.push(`- ${n.map(([e, t]) => `**${e}:** ${t}`).join(" | ")}`);
30
+ } else t.push(`- ${e}`);
31
+ })) : t.push(`- **${n}:** ${r}`);
32
+ return t.join("\n");
33
+ }
34
+ function o(e, t) {
35
+ let o = e ?? {}, s = i(o.content), c = n(o.format) ? o.format : "markdown", l = r(o.alignment) ? o.alignment : "left";
36
+ if (typeof t == "string") return {
37
+ content: t,
38
+ format: c,
39
+ alignment: l,
40
+ hasContent: t.length > 0
41
+ };
42
+ if (t && typeof t == "object" && !Array.isArray(t)) {
43
+ let e = t;
44
+ if ("content" in e) {
45
+ let t = i(e.content);
46
+ return {
47
+ content: t,
48
+ format: n(e.format) ? e.format : c,
49
+ alignment: r(e.alignment) ? e.alignment : l,
50
+ hasContent: t.length > 0
51
+ };
52
+ }
53
+ let o = a(e);
54
+ return {
55
+ content: o,
56
+ format: "markdown",
57
+ alignment: l,
58
+ hasContent: o.length > 0
59
+ };
60
+ }
61
+ return {
62
+ content: s,
63
+ format: c,
64
+ alignment: l,
65
+ hasContent: s.length > 0
66
+ };
67
+ }
68
+ //#endregion
69
+ export { o as resolveTextData };
70
+
71
+ //# sourceMappingURL=textData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textData.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/text-widget/textData.ts"],"sourcesContent":["/**\n * Text widget data contract (BOFF-5555).\n *\n * Centralises how raw parser / DataSink output and static widget configuration\n * are merged into the shape the TextWidget renderer expects. Keeping this logic\n * pure makes the DataSink → Parser → Widget contract testable and keeps the\n * React component thin.\n */\n\nexport type TextFormat = 'markdown' | 'html' | 'plain';\nexport type TextAlignment = 'left' | 'center' | 'right' | 'justify';\n\nexport interface TextData {\n content?: string;\n format?: TextFormat;\n alignment?: TextAlignment;\n}\n\nconst VALID_FORMATS = new Set<TextFormat>(['markdown', 'html', 'plain']);\nconst VALID_ALIGNMENTS = new Set<TextAlignment>(['left', 'center', 'right', 'justify']);\n\nfunction isValidFormat(value: unknown): value is TextFormat {\n return typeof value === 'string' && VALID_FORMATS.has(value as TextFormat);\n}\n\nfunction isValidAlignment(value: unknown): value is TextAlignment {\n return typeof value === 'string' && VALID_ALIGNMENTS.has(value as TextAlignment);\n}\n\nfunction asString(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n return String(value);\n}\n\n/**\n * Convert an arbitrary object (e.g. parser output that forgot to wrap text in\n * a `content` field) into a reasonable markdown representation.\n */\nfunction objectToMarkdown(obj: Record<string, unknown>): string {\n const lines: string[] = [];\n\n for (const [key, val] of Object.entries(obj)) {\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n lines.push(`### ${key}`);\n for (const [k2, v2] of Object.entries(val as Record<string, unknown>)) {\n lines.push(`- **${k2}:** ${v2}`);\n }\n } else if (Array.isArray(val)) {\n lines.push(`### ${key}`);\n val.slice(0, 10).forEach((item: unknown) => {\n if (item && typeof item === 'object') {\n const entries = Object.entries(item as Record<string, unknown>);\n lines.push(`- ${entries.map(([k, v]) => `**${k}:** ${v}`).join(' | ')}`);\n } else {\n lines.push(`- ${item}`);\n }\n });\n } else {\n lines.push(`- **${key}:** ${val}`);\n }\n }\n\n return lines.join('\\n');\n}\n\nexport interface ResolvedTextData extends TextData {\n /** Whether any renderable text content is available. */\n hasContent: boolean;\n}\n\n/**\n * Resolve the effective text widget data.\n *\n * Priority (highest first):\n * 1. Parser-provided `data` fields (`content`, `format`, `alignment`).\n * - If `data` is a plain string it becomes `content`.\n * - If `data` is an object without a `content` key it is auto-formatted as\n * markdown so arbitrary parser output still renders.\n * 2. Static `widgetConfig` fields (`content`, `format`, `alignment`).\n * 3. Safe defaults (`content: ''`, `format: 'markdown'`, `alignment: 'left'`).\n */\nexport function resolveTextData(widgetConfig: Record<string, unknown> | undefined, rawData: unknown): ResolvedTextData {\n const cfg = widgetConfig ?? {};\n const cfgContent = asString(cfg.content);\n const cfgFormat: TextFormat = isValidFormat(cfg.format) ? cfg.format : 'markdown';\n const cfgAlignment: TextAlignment = isValidAlignment(cfg.alignment) ? cfg.alignment : 'left';\n\n // Parser provided a plain string — common for simple text sinks.\n if (typeof rawData === 'string') {\n return {\n content: rawData,\n format: cfgFormat,\n alignment: cfgAlignment,\n hasContent: rawData.length > 0,\n };\n }\n\n // Parser provided a structured object.\n if (rawData && typeof rawData === 'object' && !Array.isArray(rawData)) {\n const obj = rawData as Record<string, unknown>;\n\n if ('content' in obj) {\n const content = asString(obj.content);\n return {\n content,\n format: isValidFormat(obj.format) ? obj.format : cfgFormat,\n alignment: isValidAlignment(obj.alignment) ? obj.alignment : cfgAlignment,\n hasContent: content.length > 0,\n };\n }\n\n // Object without an explicit content key — render it as markdown.\n const content = objectToMarkdown(obj);\n return {\n content,\n format: 'markdown' as TextFormat,\n alignment: cfgAlignment,\n hasContent: content.length > 0,\n };\n }\n\n // No parser data — fall back to static configuration.\n return {\n content: cfgContent,\n format: cfgFormat,\n alignment: cfgAlignment,\n hasContent: cfgContent.length > 0,\n };\n}\n"],"mappings":";AAkBA,IAAM,IAAgB,IAAI,IAAgB;CAAC;CAAY;CAAQ;CAAQ,CAAC,EAClE,IAAmB,IAAI,IAAmB;CAAC;CAAQ;CAAU;CAAS;CAAU,CAAC;AAEvF,SAAS,EAAc,GAAqC;AAC1D,QAAO,OAAO,KAAU,YAAY,EAAc,IAAI,EAAoB;;AAG5E,SAAS,EAAiB,GAAwC;AAChE,QAAO,OAAO,KAAU,YAAY,EAAiB,IAAI,EAAuB;;AAGlF,SAAS,EAAS,GAAwB;AAGxC,QAFI,KAAU,OAAoC,KAC9C,OAAO,KAAU,WAAiB,IAC/B,OAAO,EAAM;;AAOtB,SAAS,EAAiB,GAAsC;CAC9D,IAAM,IAAkB,EAAE;AAE1B,MAAK,IAAM,CAAC,GAAK,MAAQ,OAAO,QAAQ,EAAI,CAC1C,KAAI,KAAO,OAAO,KAAQ,YAAY,CAAC,MAAM,QAAQ,EAAI,EAAE;AACzD,IAAM,KAAK,OAAO,IAAM;AACxB,OAAK,IAAM,CAAC,GAAI,MAAO,OAAO,QAAQ,EAA+B,CACnE,GAAM,KAAK,OAAO,EAAG,MAAM,IAAK;QAEzB,MAAM,QAAQ,EAAI,IAC3B,EAAM,KAAK,OAAO,IAAM,EACxB,EAAI,MAAM,GAAG,GAAG,CAAC,SAAS,MAAkB;AAC1C,MAAI,KAAQ,OAAO,KAAS,UAAU;GACpC,IAAM,IAAU,OAAO,QAAQ,EAAgC;AAC/D,KAAM,KAAK,KAAK,EAAQ,KAAK,CAAC,GAAG,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,MAAM,GAAG;QAExE,GAAM,KAAK,KAAK,IAAO;GAEzB,IAEF,EAAM,KAAK,OAAO,EAAI,MAAM,IAAM;AAItC,QAAO,EAAM,KAAK,KAAK;;AAmBzB,SAAgB,EAAgB,GAAmD,GAAoC;CACrH,IAAM,IAAM,KAAgB,EAAE,EACxB,IAAa,EAAS,EAAI,QAAQ,EAClC,IAAwB,EAAc,EAAI,OAAO,GAAG,EAAI,SAAS,YACjE,IAA8B,EAAiB,EAAI,UAAU,GAAG,EAAI,YAAY;AAGtF,KAAI,OAAO,KAAY,SACrB,QAAO;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX,YAAY,EAAQ,SAAS;EAC9B;AAIH,KAAI,KAAW,OAAO,KAAY,YAAY,CAAC,MAAM,QAAQ,EAAQ,EAAE;EACrE,IAAM,IAAM;AAEZ,MAAI,aAAa,GAAK;GACpB,IAAM,IAAU,EAAS,EAAI,QAAQ;AACrC,UAAO;IACL;IACA,QAAQ,EAAc,EAAI,OAAO,GAAG,EAAI,SAAS;IACjD,WAAW,EAAiB,EAAI,UAAU,GAAG,EAAI,YAAY;IAC7D,YAAY,EAAQ,SAAS;IAC9B;;EAIH,IAAM,IAAU,EAAiB,EAAI;AACrC,SAAO;GACL;GACA,QAAQ;GACR,WAAW;GACX,YAAY,EAAQ,SAAS;GAC9B;;AAIH,QAAO;EACL,SAAS;EACT,QAAQ;EACR,WAAW;EACX,YAAY,EAAW,SAAS;EACjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-bigconsole",
3
- "version": "2026.803.3",
3
+ "version": "2026.803.4",
4
4
  "description": "BigConsole - AI-powered analytics and dashboard platform",
5
5
  "type": "module",
6
6
  "files": [