@fusedashlabs/widgets 0.4.0 → 0.4.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 (110) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +1 -0
  4. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
  5. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +11 -1
  6. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
  7. package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
  8. package/dist/components/chart-renderer/lib/registry.js +3 -1
  9. package/dist/components/chart-renderer/lib/registry.js.map +1 -1
  10. package/dist/components/kpi-widget/element/styles.d.ts.map +1 -1
  11. package/dist/components/kpi-widget/element/styles.js +268 -5
  12. package/dist/components/kpi-widget/element/styles.js.map +1 -1
  13. package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts +10 -1
  14. package/dist/components/kpi-widget/element/ui9000-kpi-widget.d.ts.map +1 -1
  15. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +154 -27
  16. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js.map +1 -1
  17. package/dist/components/kpi-widget/index.d.ts +1 -1
  18. package/dist/components/kpi-widget/index.d.ts.map +1 -1
  19. package/dist/components/kpi-widget/index.js +7 -4
  20. package/dist/components/kpi-widget/lib/extract.d.ts +5 -1
  21. package/dist/components/kpi-widget/lib/extract.d.ts.map +1 -1
  22. package/dist/components/kpi-widget/lib/extract.js +110 -34
  23. package/dist/components/kpi-widget/lib/extract.js.map +1 -1
  24. package/dist/components/kpi-widget/lib/format.d.ts +5 -0
  25. package/dist/components/kpi-widget/lib/format.d.ts.map +1 -1
  26. package/dist/components/kpi-widget/lib/format.js +10 -1
  27. package/dist/components/kpi-widget/lib/format.js.map +1 -1
  28. package/dist/components/kpi-widget/lib/grid.d.ts +5 -0
  29. package/dist/components/kpi-widget/lib/grid.d.ts.map +1 -1
  30. package/dist/components/kpi-widget/lib/grid.js +18 -0
  31. package/dist/components/kpi-widget/lib/grid.js.map +1 -1
  32. package/dist/components/kpi-widget/lib/index.d.ts +5 -5
  33. package/dist/components/kpi-widget/lib/index.d.ts.map +1 -1
  34. package/dist/components/kpi-widget/lib/normalize.d.ts +2 -0
  35. package/dist/components/kpi-widget/lib/normalize.d.ts.map +1 -1
  36. package/dist/components/kpi-widget/lib/normalize.js +73 -12
  37. package/dist/components/kpi-widget/lib/normalize.js.map +1 -1
  38. package/dist/components/kpi-widget/lib/types.d.ts +41 -0
  39. package/dist/components/kpi-widget/lib/types.d.ts.map +1 -1
  40. package/dist/components/kpi-widget/metadata.json.d.ts +1 -1
  41. package/dist/components/kpi-widget/metadata.json.js +1 -1
  42. package/dist/components/map-chart/metadata.json.d.ts +1 -1
  43. package/dist/components/map-chart/metadata.json.js +1 -1
  44. package/dist/components/map-chart/render/draw.d.ts.map +1 -1
  45. package/dist/components/map-chart/render/draw.js +2 -1
  46. package/dist/components/map-chart/render/draw.js.map +1 -1
  47. package/dist/components/partial-dependence-chart/element/styles.d.ts +2 -0
  48. package/dist/components/partial-dependence-chart/element/styles.d.ts.map +1 -0
  49. package/dist/components/partial-dependence-chart/element/styles.js +48 -0
  50. package/dist/components/partial-dependence-chart/element/styles.js.map +1 -0
  51. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts +30 -0
  52. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts.map +1 -0
  53. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js +163 -0
  54. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js.map +1 -0
  55. package/dist/components/partial-dependence-chart/index.d.ts +5 -0
  56. package/dist/components/partial-dependence-chart/index.d.ts.map +1 -0
  57. package/dist/components/partial-dependence-chart/index.js +18 -0
  58. package/dist/components/partial-dependence-chart/index.js.map +1 -0
  59. package/dist/components/partial-dependence-chart/lib/domain.d.ts +6 -0
  60. package/dist/components/partial-dependence-chart/lib/domain.d.ts.map +1 -0
  61. package/dist/components/partial-dependence-chart/lib/domain.js +16 -0
  62. package/dist/components/partial-dependence-chart/lib/domain.js.map +1 -0
  63. package/dist/components/partial-dependence-chart/lib/index.d.ts +5 -0
  64. package/dist/components/partial-dependence-chart/lib/index.d.ts.map +1 -0
  65. package/dist/components/partial-dependence-chart/lib/normalize.d.ts +4 -0
  66. package/dist/components/partial-dependence-chart/lib/normalize.d.ts.map +1 -0
  67. package/dist/components/partial-dependence-chart/lib/normalize.js +167 -0
  68. package/dist/components/partial-dependence-chart/lib/normalize.js.map +1 -0
  69. package/dist/components/partial-dependence-chart/lib/series.d.ts +15 -0
  70. package/dist/components/partial-dependence-chart/lib/series.d.ts.map +1 -0
  71. package/dist/components/partial-dependence-chart/lib/series.js +63 -0
  72. package/dist/components/partial-dependence-chart/lib/series.js.map +1 -0
  73. package/dist/components/partial-dependence-chart/lib/types.d.ts +50 -0
  74. package/dist/components/partial-dependence-chart/lib/types.d.ts.map +1 -0
  75. package/dist/components/partial-dependence-chart/metadata.json.d.ts +80 -0
  76. package/dist/components/partial-dependence-chart/metadata.json.js +42 -0
  77. package/dist/components/partial-dependence-chart/metadata.json.js.map +1 -0
  78. package/dist/components/partial-dependence-chart/render/draw.d.ts +34 -0
  79. package/dist/components/partial-dependence-chart/render/draw.d.ts.map +1 -0
  80. package/dist/components/partial-dependence-chart/render/draw.js +95 -0
  81. package/dist/components/partial-dependence-chart/render/draw.js.map +1 -0
  82. package/dist/components/partial-dependence-chart/render/index.d.ts +2 -0
  83. package/dist/components/partial-dependence-chart/render/index.d.ts.map +1 -0
  84. package/dist/index.d.ts +5 -3
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +25 -10
  87. package/dist/index.js.map +1 -1
  88. package/dist/lazy/index.d.ts +2 -1
  89. package/dist/lazy/index.d.ts.map +1 -1
  90. package/dist/lazy/index.js +8 -0
  91. package/dist/lazy/index.js.map +1 -1
  92. package/dist/lazy/partial-dependence-chart.d.ts +4 -0
  93. package/dist/lazy/partial-dependence-chart.d.ts.map +1 -0
  94. package/dist/lazy/partial-dependence-chart.js +5 -0
  95. package/dist/lazy/partial-dependence-chart.js.map +1 -0
  96. package/dist/utils/chart-helpers.d.ts +2 -0
  97. package/dist/utils/chart-helpers.d.ts.map +1 -1
  98. package/dist/utils/chart-helpers.js +15 -0
  99. package/dist/utils/chart-helpers.js.map +1 -1
  100. package/dist/utils/fusedash-visual.d.ts +12 -0
  101. package/dist/utils/fusedash-visual.d.ts.map +1 -1
  102. package/dist/utils/fusedash-visual.js +7 -0
  103. package/dist/utils/fusedash-visual.js.map +1 -1
  104. package/package.json +11 -2
  105. package/dist/node_modules/lit-html/directive.js +0 -28
  106. package/dist/node_modules/lit-html/directive.js.map +0 -1
  107. package/dist/node_modules/lit-html/directives/style-map.js +0 -37
  108. package/dist/node_modules/lit-html/directives/style-map.js.map +0 -1
  109. package/dist/node_modules/lit-html/lit-html.js +0 -231
  110. package/dist/node_modules/lit-html/lit-html.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.4.1 — 2026-09-07
6
+
7
+ ### Added
8
+
9
+ - KPI widget layouts now match FuseDash: **single**, **grid**, and **advanced** (nested chart + supporting KPIs underneath). Storybook stories are the client types: `single_value`, `trend`, `overall`, `comparison`, `high/low`, `high/low_overall`, `high/low_trend`, plus advanced with supporting KPIs.
10
+ - `<ui9000-partial-dependence-chart>` — D3 port of FuseDash PartialDependenceChart (ICE curves + dashed average) for MCP chat (FUS-4004).
11
+
12
+ ### Changed
13
+
14
+ - Map `usageConditions.hostReady` is now `true`. `canRenderChartType('mapChart' | 'UniversalMap')` is open so MCP hosts can inline `<ui9000-map-chart>` once they pass `mapbox-token` / `geojson-base-url` / `pmtiles-base-url`.
15
+
16
+ ### Fixed
17
+
18
+ - Keep every `lit` / `lit/*` import external in the published dist. KPI's `style-map` directive was missing from the Rollup externals list, so Vite rewrote it to `../../../node_modules/lit-html/...` and FuseDash / pnpm hosts failed to resolve it.
19
+
5
20
  ## 0.4.0 — 2026-09-04
6
21
 
7
22
  ### Removed
package/README.md CHANGED
@@ -80,7 +80,7 @@ https://github.com/fuselab-creative/ui9000-widgets
80
80
 
81
81
  ```bash
82
82
  yarn build && yarn test
83
- git tag v0.4.0
83
+ git tag v0.4.1
84
84
  git push origin main --tags
85
85
  ```
86
86
 
@@ -8,6 +8,7 @@ export declare class Ui9000ChartRenderer extends HTMLElement {
8
8
  private get dataJson();
9
9
  private get chartTypeAttr();
10
10
  private get scale();
11
+ private applyBoolProp;
11
12
  private copyHostAttr;
12
13
  private boolAttr;
13
14
  private showEmpty;
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"AAsBA,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAaxC;IAED,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAK;IAExB,iBAAiB,IAAI,IAAI;IAqBzB,wBAAwB,IAAI,IAAI;IAIhC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;YAgBH,UAAU;CA0EzB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
1
+ {"version":3,"file":"ui9000-chart-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"names":[],"mappings":"AAsBA,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAcxC;IAED,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAK;IAExB,iBAAiB,IAAI,IAAI;IAqBzB,wBAAwB,IAAI,IAAI;IAIhC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;YAgBH,UAAU;CAgFzB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
@@ -29,6 +29,7 @@ class Ui9000ChartRenderer extends HTMLElement {
29
29
  "show-grid",
30
30
  "show-legend",
31
31
  "show-tooltip",
32
+ "show-header",
32
33
  "chart-title",
33
34
  "mapbox-token",
34
35
  "geojson-base-url",
@@ -64,6 +65,11 @@ class Ui9000ChartRenderer extends HTMLElement {
64
65
  get scale() {
65
66
  return this.getAttribute("scale") || "default";
66
67
  }
68
+ applyBoolProp(el, attr, prop) {
69
+ if (!this.hasAttribute(attr)) return;
70
+ const on = this.getAttribute(attr) !== "false";
71
+ el[prop] = on;
72
+ }
67
73
  copyHostAttr(el, name) {
68
74
  const value = this.getAttribute(name);
69
75
  if (value) el.setAttribute(name, value);
@@ -114,7 +120,7 @@ class Ui9000ChartRenderer extends HTMLElement {
114
120
  }
115
121
  if (token !== this._mountToken) return;
116
122
  const widget = parseJsonAttr(this.dataJson, null);
117
- const title = ((_a = this.getAttribute("chart-title")) == null ? void 0 : _a.trim()) || (widget && typeof widget === "object" ? (_b = widget.name) == null ? void 0 : _b.trim() : "") || "";
123
+ const title = this.getAttribute("show-header") === "false" ? "" : ((_a = this.getAttribute("chart-title")) == null ? void 0 : _a.trim()) || (widget && typeof widget === "object" ? (_b = widget.name) == null ? void 0 : _b.trim() : "") || "";
118
124
  let el = this._host.firstElementChild;
119
125
  if (!el || el.tagName.toLowerCase() !== target.tag) {
120
126
  this._host.replaceChildren();
@@ -140,6 +146,10 @@ class Ui9000ChartRenderer extends HTMLElement {
140
146
  if (showTooltip) el.setAttribute("show-tooltip", "");
141
147
  else el.setAttribute("show-tooltip", "false");
142
148
  }
149
+ this.applyBoolProp(el, "show-header", "showHeader");
150
+ this.applyBoolProp(el, "show-grid", "showGrid");
151
+ this.applyBoolProp(el, "show-legend", "showLegend");
152
+ this.applyBoolProp(el, "show-tooltip", "showTooltip");
143
153
  applyTargetAttrs(el, target.attrs);
144
154
  this.copyHostAttr(el, "mapbox-token");
145
155
  this.copyHostAttr(el, "geojson-base-url");
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'chart-title',\n 'mapbox-token',\n 'geojson-base-url',\n 'pmtiles-base-url',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n private get dataJson(): string {\n return this.getAttribute('data') ?? '{}';\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private copyHostAttr(el: HTMLElement, name: string): void {\n const value = this.getAttribute(name);\n if (value) el.setAttribute(name, value);\n else el.removeAttribute(name);\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n if (!el || el.tagName.toLowerCase() !== target.tag) {\n this._host.replaceChildren();\n el = document.createElement(target.tag);\n this._host.appendChild(el);\n }\n\n el.setAttribute('data', this.dataJson);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n\n applyTargetAttrs(el, target.attrs);\n this.copyHostAttr(el, 'mapbox-token');\n this.copyHostAttr(el, 'geojson-base-url');\n this.copyHostAttr(el, 'pmtiles-base-url');\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":";;;;;AAUA,SAAS,iBAAiB,IAAiB,OAAgC;AACzE,MAAI,CAAC,MAAO;AACZ,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,OAAO,UAAU,WAAW;AAC9B,UAAI,MAAO,IAAG,aAAa,KAAK,EAAE;AAAA,UAC7B,IAAG,gBAAgB,GAAG;AAAA,IAC7B,OAAO;AACL,SAAG,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,IACpC;AAAA,EACF;AACF;AAEO,MAAM,4BAA4B,YAAY;AAAA,EAA9C,cAAA;AAAA,UAAA,GAAA,SAAA;AAgBL,SAAQ,QAA+B;AACvC,SAAQ,SAAgC;AACxC,SAAQ,cAAc;AAAA,EAAA;AAAA,EAjBtB,WAAW,qBAA+B;AACxC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAMA,oBAA0B;AACxB,QAAI,KAAK,MAAO;AAChB,UAAM,OAAO,KAAK,aAAa,EAAE,MAAM,QAAQ;AAC/C,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc,oBAAoB;AACxC,SAAK,YAAY,KAAK;AAEtB,SAAK,QAAQ,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,OAAO;AAClB,SAAK,YAAY,KAAK,KAAK;AAE3B,SAAK,SAAS,SAAS,cAAc,KAAK;AAC1C,SAAK,OAAO,YAAY;AACxB,SAAK,OAAO,OAAO;AACnB,SAAK,OAAO,SAAS;AACrB,SAAK,YAAY,KAAK,MAAM;AAE5B,SAAK,KAAK,WAAA;AAAA,EACZ;AAAA,EAEA,2BAAiC;AAC/B,QAAI,KAAK,MAAO,MAAK,KAAK,WAAA;AAAA,EAC5B;AAAA,EAEA,IAAY,WAAmB;AAC7B,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACtC;AAAA,EAEA,IAAY,gBAAwB;AAClC,WAAO,KAAK,aAAa,YAAY,KAAK;AAAA,EAC5C;AAAA,EAEA,IAAY,QAAqB;AAC/B,WAAQ,KAAK,aAAa,OAAO,KAAqB;AAAA,EACxD;AAAA,EAEQ,aAAa,IAAiB,MAAoB;AACxD,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,MAAO,IAAG,aAAa,MAAM,KAAK;AAAA,QACjC,IAAG,gBAAgB,IAAI;AAAA,EAC9B;AAAA,EAEQ,SAAS,MAAmC;AAClD,QAAI,CAAC,KAAK,aAAa,IAAI,EAAG,QAAO;AACrC,WAAO,KAAK,aAAa,IAAI,MAAM;AAAA,EACrC;AAAA,EAEQ,UAAU,SAAiB,QAAuB;AACxD,QAAI,CAAC,KAAK,UAAU,CAAC,KAAK,MAAO;AACjC,SAAK,MAAM,gBAAA;AACX,SAAK,MAAM,SAAS;AACpB,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,gBAAA;AACZ,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,cAAc;AACrB,SAAK,OAAO,YAAY,MAAM;AAC9B,QAAI,QAAQ;AACV,YAAM,IAAI,SAAS,cAAc,MAAM;AACvC,QAAE,cAAc;AAChB,WAAK,OAAO,YAAY,CAAC;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,aAA4B;;AACxC,QAAI,CAAC,KAAK,SAAS,CAAC,KAAK,OAAQ;AACjC,UAAM,QAAQ,EAAE,KAAK;AAErB,UAAM,YAAY,uBAAuB,KAAK,UAAU,KAAK,aAAa;AAC1E,QAAI,CAAC,WAAW;AACd,WAAK,UAAU,iBAAiB,qDAAqD;AACrF;AAAA,IACF;AAEA,UAAM,SAAS,mBAAmB,SAAS;AAC3C,QAAI,CAAC,QAAQ;AACX,WAAK;AAAA,QACH;AAAA,QACA,IAAI,SAAS;AAAA,MAAA;AAEf;AAAA,IACF;AAEA,QAAI;AACF,YAAM,UAAU,OAAO,IAAI;AAAA,IAC7B,QAAQ;AACN,UAAI,UAAU,KAAK,YAAa;AAChC,WAAK,UAAU,wBAAwB,OAAO,IAAI;AAClD;AAAA,IACF;AAEA,QAAI,UAAU,KAAK,YAAa;AAEhC,UAAM,SAAS,cAAwC,KAAK,UAAU,IAAI;AAC1E,UAAM,UACJ,UAAK,aAAa,aAAa,MAA/B,mBAAkC,YACjC,UAAU,OAAO,WAAW,YAAW,YAAO,SAAP,mBAAa,SAAS,OAC9D;AAEF,QAAI,KAAK,KAAK,MAAM;AACpB,QAAI,CAAC,MAAM,GAAG,QAAQ,YAAA,MAAkB,OAAO,KAAK;AAClD,WAAK,MAAM,gBAAA;AACX,WAAK,SAAS,cAAc,OAAO,GAAG;AACtC,WAAK,MAAM,YAAY,EAAE;AAAA,IAC3B;AAEA,OAAG,aAAa,QAAQ,KAAK,QAAQ;AACrC,OAAG,aAAa,SAAS,KAAK,KAAK;AACnC,QAAI,MAAO,IAAG,aAAa,eAAe,KAAK;AAAA,QAC1C,IAAG,gBAAgB,aAAa;AAErC,UAAM,WAAW,KAAK,SAAS,WAAW;AAC1C,UAAM,aAAa,KAAK,SAAS,aAAa;AAC9C,UAAM,cAAc,KAAK,SAAS,cAAc;AAChD,QAAI,aAAa,QAAW;AAC1B,UAAI,SAAU,IAAG,aAAa,aAAa,EAAE;AAAA,UACxC,IAAG,aAAa,aAAa,OAAO;AAAA,IAC3C;AACA,QAAI,eAAe,QAAW;AAC5B,UAAI,WAAY,IAAG,aAAa,eAAe,EAAE;AAAA,UAC5C,IAAG,aAAa,eAAe,OAAO;AAAA,IAC7C;AACA,QAAI,gBAAgB,QAAW;AAC7B,UAAI,YAAa,IAAG,aAAa,gBAAgB,EAAE;AAAA,UAC9C,IAAG,aAAa,gBAAgB,OAAO;AAAA,IAC9C;AAEA,qBAAiB,IAAI,OAAO,KAAK;AACjC,SAAK,aAAa,IAAI,cAAc;AACpC,SAAK,aAAa,IAAI,kBAAkB;AACxC,SAAK,aAAa,IAAI,kBAAkB;AACxC,OAAG,MAAM,UAAU;AACnB,OAAG,MAAM,QAAQ;AACjB,OAAG,MAAM,SAAS;AAElB,SAAK,OAAO,SAAS;AACrB,SAAK,MAAM,SAAS;AAAA,EACtB;AACF;AAQO,SAAS,wBAA8B;AAC5C,MAAI,CAAC,eAAe,IAAI,uBAAuB,GAAG;AAChD,mBAAe,OAAO,yBAAyB,mBAAmB;AAAA,EACpE;AACF;AAEA,sBAAA;"}
1
+ {"version":3,"file":"ui9000-chart-renderer.js","sources":["../../../../src/components/chart-renderer/element/ui9000-chart-renderer.ts"],"sourcesContent":["import { loadChart } from '../../../lazy/index.js';\nimport type { WidgetScale } from '../../../types/index.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n resolveChartTarget,\n resolveWidgetChartType,\n type ChartTargetAttrs,\n} from '../lib/index.js';\nimport { chartRendererStyles } from './styles.js';\n\nfunction applyTargetAttrs(el: HTMLElement, attrs?: ChartTargetAttrs): void {\n if (!attrs) return;\n for (const [key, value] of Object.entries(attrs)) {\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\nexport class Ui9000ChartRenderer extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n 'data',\n 'chart-type',\n 'scale',\n 'show-grid',\n 'show-legend',\n 'show-tooltip',\n 'show-header',\n 'chart-title',\n 'mapbox-token',\n 'geojson-base-url',\n 'pmtiles-base-url',\n ];\n }\n\n private _host: HTMLDivElement | null = null;\n private _empty: HTMLDivElement | null = null;\n private _mountToken = 0;\n\n connectedCallback(): void {\n if (this._host) return;\n const root = this.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = chartRendererStyles.cssText;\n root.appendChild(style);\n\n this._host = document.createElement('div');\n this._host.className = 'host';\n this._host.part = 'chart';\n root.appendChild(this._host);\n\n this._empty = document.createElement('div');\n this._empty.className = 'empty';\n this._empty.part = 'empty';\n this._empty.hidden = true;\n root.appendChild(this._empty);\n\n void this.mountChart();\n }\n\n attributeChangedCallback(): void {\n if (this._host) void this.mountChart();\n }\n\n private get dataJson(): string {\n return this.getAttribute('data') ?? '{}';\n }\n\n private get chartTypeAttr(): string {\n return this.getAttribute('chart-type') ?? '';\n }\n\n private get scale(): WidgetScale {\n return (this.getAttribute('scale') as WidgetScale) || 'default';\n }\n\n private applyBoolProp(el: HTMLElement, attr: string, prop: string): void {\n if (!this.hasAttribute(attr)) return;\n const on = this.getAttribute(attr) !== 'false';\n (el as unknown as Record<string, unknown>)[prop] = on;\n }\n\n private copyHostAttr(el: HTMLElement, name: string): void {\n const value = this.getAttribute(name);\n if (value) el.setAttribute(name, value);\n else el.removeAttribute(name);\n }\n\n private boolAttr(name: string): boolean | undefined {\n if (!this.hasAttribute(name)) return undefined;\n return this.getAttribute(name) !== 'false';\n }\n\n private showEmpty(message: string, detail?: string): void {\n if (!this._empty || !this._host) return;\n this._host.replaceChildren();\n this._host.hidden = true;\n this._empty.hidden = false;\n this._empty.replaceChildren();\n const strong = document.createElement('strong');\n strong.textContent = message;\n this._empty.appendChild(strong);\n if (detail) {\n const p = document.createElement('span');\n p.textContent = detail;\n this._empty.appendChild(p);\n }\n }\n\n private async mountChart(): Promise<void> {\n if (!this._host || !this._empty) return;\n const token = ++this._mountToken;\n\n const chartType = resolveWidgetChartType(this.dataJson, this.chartTypeAttr);\n if (!chartType) {\n this.showEmpty('No chart type', 'Pass chart-type or a widget payload with chartType.');\n return;\n }\n\n const target = resolveChartTarget(chartType);\n if (!target) {\n this.showEmpty(\n 'Unsupported chart type',\n `\"${chartType}\" is not available in @ui9000/widgets yet.`,\n );\n return;\n }\n\n try {\n await loadChart(target.kind);\n } catch {\n if (token !== this._mountToken) return;\n this.showEmpty('Failed to load chart', target.kind);\n return;\n }\n\n if (token !== this._mountToken) return;\n\n const widget = parseJsonAttr<{ name?: string } | null>(this.dataJson, null);\n const title =\n this.getAttribute('show-header') === 'false'\n ? ''\n : this.getAttribute('chart-title')?.trim() ||\n (widget && typeof widget === 'object' ? widget.name?.trim() : '') ||\n '';\n\n let el = this._host.firstElementChild as HTMLElement | null;\n if (!el || el.tagName.toLowerCase() !== target.tag) {\n this._host.replaceChildren();\n el = document.createElement(target.tag);\n this._host.appendChild(el);\n }\n\n el.setAttribute('data', this.dataJson);\n el.setAttribute('scale', this.scale);\n if (title) el.setAttribute('chart-title', title);\n else el.removeAttribute('chart-title');\n\n const showGrid = this.boolAttr('show-grid');\n const showLegend = this.boolAttr('show-legend');\n const showTooltip = this.boolAttr('show-tooltip');\n if (showGrid !== undefined) {\n if (showGrid) el.setAttribute('show-grid', '');\n else el.setAttribute('show-grid', 'false');\n }\n if (showLegend !== undefined) {\n if (showLegend) el.setAttribute('show-legend', '');\n else el.setAttribute('show-legend', 'false');\n }\n if (showTooltip !== undefined) {\n if (showTooltip) el.setAttribute('show-tooltip', '');\n else el.setAttribute('show-tooltip', 'false');\n }\n this.applyBoolProp(el, 'show-header', 'showHeader');\n this.applyBoolProp(el, 'show-grid', 'showGrid');\n this.applyBoolProp(el, 'show-legend', 'showLegend');\n this.applyBoolProp(el, 'show-tooltip', 'showTooltip');\n\n applyTargetAttrs(el, target.attrs);\n this.copyHostAttr(el, 'mapbox-token');\n this.copyHostAttr(el, 'geojson-base-url');\n this.copyHostAttr(el, 'pmtiles-base-url');\n el.style.display = 'block';\n el.style.width = '100%';\n el.style.height = '100%';\n\n this._empty.hidden = true;\n this._host.hidden = false;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-chart-renderer': Ui9000ChartRenderer;\n }\n}\n\nexport function registerChartRenderer(): void {\n if (!customElements.get('ui9000-chart-renderer')) {\n customElements.define('ui9000-chart-renderer', Ui9000ChartRenderer);\n }\n}\n\nregisterChartRenderer();\n"],"names":[],"mappings":";;;;;AAUA,SAAS,iBAAiB,IAAiB,OAAgC;AACzE,MAAI,CAAC,MAAO;AACZ,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,OAAO,UAAU,WAAW;AAC9B,UAAI,MAAO,IAAG,aAAa,KAAK,EAAE;AAAA,UAC7B,IAAG,gBAAgB,GAAG;AAAA,IAC7B,OAAO;AACL,SAAG,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,IACpC;AAAA,EACF;AACF;AAEO,MAAM,4BAA4B,YAAY;AAAA,EAA9C,cAAA;AAAA,UAAA,GAAA,SAAA;AAiBL,SAAQ,QAA+B;AACvC,SAAQ,SAAgC;AACxC,SAAQ,cAAc;AAAA,EAAA;AAAA,EAlBtB,WAAW,qBAA+B;AACxC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAMA,oBAA0B;AACxB,QAAI,KAAK,MAAO;AAChB,UAAM,OAAO,KAAK,aAAa,EAAE,MAAM,QAAQ;AAC/C,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc,oBAAoB;AACxC,SAAK,YAAY,KAAK;AAEtB,SAAK,QAAQ,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,OAAO;AAClB,SAAK,YAAY,KAAK,KAAK;AAE3B,SAAK,SAAS,SAAS,cAAc,KAAK;AAC1C,SAAK,OAAO,YAAY;AACxB,SAAK,OAAO,OAAO;AACnB,SAAK,OAAO,SAAS;AACrB,SAAK,YAAY,KAAK,MAAM;AAE5B,SAAK,KAAK,WAAA;AAAA,EACZ;AAAA,EAEA,2BAAiC;AAC/B,QAAI,KAAK,MAAO,MAAK,KAAK,WAAA;AAAA,EAC5B;AAAA,EAEA,IAAY,WAAmB;AAC7B,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACtC;AAAA,EAEA,IAAY,gBAAwB;AAClC,WAAO,KAAK,aAAa,YAAY,KAAK;AAAA,EAC5C;AAAA,EAEA,IAAY,QAAqB;AAC/B,WAAQ,KAAK,aAAa,OAAO,KAAqB;AAAA,EACxD;AAAA,EAEQ,cAAc,IAAiB,MAAc,MAAoB;AACvE,QAAI,CAAC,KAAK,aAAa,IAAI,EAAG;AAC9B,UAAM,KAAK,KAAK,aAAa,IAAI,MAAM;AACtC,OAA0C,IAAI,IAAI;AAAA,EACrD;AAAA,EAEQ,aAAa,IAAiB,MAAoB;AACxD,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,QAAI,MAAO,IAAG,aAAa,MAAM,KAAK;AAAA,QACjC,IAAG,gBAAgB,IAAI;AAAA,EAC9B;AAAA,EAEQ,SAAS,MAAmC;AAClD,QAAI,CAAC,KAAK,aAAa,IAAI,EAAG,QAAO;AACrC,WAAO,KAAK,aAAa,IAAI,MAAM;AAAA,EACrC;AAAA,EAEQ,UAAU,SAAiB,QAAuB;AACxD,QAAI,CAAC,KAAK,UAAU,CAAC,KAAK,MAAO;AACjC,SAAK,MAAM,gBAAA;AACX,SAAK,MAAM,SAAS;AACpB,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,gBAAA;AACZ,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,cAAc;AACrB,SAAK,OAAO,YAAY,MAAM;AAC9B,QAAI,QAAQ;AACV,YAAM,IAAI,SAAS,cAAc,MAAM;AACvC,QAAE,cAAc;AAChB,WAAK,OAAO,YAAY,CAAC;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,aAA4B;;AACxC,QAAI,CAAC,KAAK,SAAS,CAAC,KAAK,OAAQ;AACjC,UAAM,QAAQ,EAAE,KAAK;AAErB,UAAM,YAAY,uBAAuB,KAAK,UAAU,KAAK,aAAa;AAC1E,QAAI,CAAC,WAAW;AACd,WAAK,UAAU,iBAAiB,qDAAqD;AACrF;AAAA,IACF;AAEA,UAAM,SAAS,mBAAmB,SAAS;AAC3C,QAAI,CAAC,QAAQ;AACX,WAAK;AAAA,QACH;AAAA,QACA,IAAI,SAAS;AAAA,MAAA;AAEf;AAAA,IACF;AAEA,QAAI;AACF,YAAM,UAAU,OAAO,IAAI;AAAA,IAC7B,QAAQ;AACN,UAAI,UAAU,KAAK,YAAa;AAChC,WAAK,UAAU,wBAAwB,OAAO,IAAI;AAClD;AAAA,IACF;AAEA,QAAI,UAAU,KAAK,YAAa;AAEhC,UAAM,SAAS,cAAwC,KAAK,UAAU,IAAI;AAC1E,UAAM,QACJ,KAAK,aAAa,aAAa,MAAM,UACjC,OACA,UAAK,aAAa,aAAa,MAA/B,mBAAkC,YACjC,UAAU,OAAO,WAAW,YAAW,YAAO,SAAP,mBAAa,SAAS,OAC9D;AAEN,QAAI,KAAK,KAAK,MAAM;AACpB,QAAI,CAAC,MAAM,GAAG,QAAQ,YAAA,MAAkB,OAAO,KAAK;AAClD,WAAK,MAAM,gBAAA;AACX,WAAK,SAAS,cAAc,OAAO,GAAG;AACtC,WAAK,MAAM,YAAY,EAAE;AAAA,IAC3B;AAEA,OAAG,aAAa,QAAQ,KAAK,QAAQ;AACrC,OAAG,aAAa,SAAS,KAAK,KAAK;AACnC,QAAI,MAAO,IAAG,aAAa,eAAe,KAAK;AAAA,QAC1C,IAAG,gBAAgB,aAAa;AAErC,UAAM,WAAW,KAAK,SAAS,WAAW;AAC1C,UAAM,aAAa,KAAK,SAAS,aAAa;AAC9C,UAAM,cAAc,KAAK,SAAS,cAAc;AAChD,QAAI,aAAa,QAAW;AAC1B,UAAI,SAAU,IAAG,aAAa,aAAa,EAAE;AAAA,UACxC,IAAG,aAAa,aAAa,OAAO;AAAA,IAC3C;AACA,QAAI,eAAe,QAAW;AAC5B,UAAI,WAAY,IAAG,aAAa,eAAe,EAAE;AAAA,UAC5C,IAAG,aAAa,eAAe,OAAO;AAAA,IAC7C;AACA,QAAI,gBAAgB,QAAW;AAC7B,UAAI,YAAa,IAAG,aAAa,gBAAgB,EAAE;AAAA,UAC9C,IAAG,aAAa,gBAAgB,OAAO;AAAA,IAC9C;AACA,SAAK,cAAc,IAAI,eAAe,YAAY;AAClD,SAAK,cAAc,IAAI,aAAa,UAAU;AAC9C,SAAK,cAAc,IAAI,eAAe,YAAY;AAClD,SAAK,cAAc,IAAI,gBAAgB,aAAa;AAEpD,qBAAiB,IAAI,OAAO,KAAK;AACjC,SAAK,aAAa,IAAI,cAAc;AACpC,SAAK,aAAa,IAAI,kBAAkB;AACxC,SAAK,aAAa,IAAI,kBAAkB;AACxC,OAAG,MAAM,UAAU;AACnB,OAAG,MAAM,QAAQ;AACjB,OAAG,MAAM,SAAS;AAElB,SAAK,OAAO,SAAS;AACrB,SAAK,MAAM,SAAS;AAAA,EACtB;AACF;AAQO,SAAS,wBAA8B;AAC5C,MAAI,CAAC,eAAe,IAAI,uBAAuB,GAAG;AAChD,mBAAe,OAAO,yBAAyB,mBAAmB;AAAA,EACpE;AACF;AAEA,sBAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAqB,WAAW,EAAoB,MAAM,YAAY,CAAC;AAEnF,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/D,CAAC;AA8EF,eAAO,MAAM,qBAAqB,mBAA8C,CAAC;AAEjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3F;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAI3F;AAMD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAIhF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAqB,WAAW,EAAoB,MAAM,YAAY,CAAC;AAEnF,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/D,CAAC;AA+EF,eAAO,MAAM,qBAAqB,mBAA8C,CAAC;AAEjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3F;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAI3F;AAMD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAIhF"}
@@ -28,6 +28,7 @@ import stepLineMeta from "../../step-line-chart/metadata.json.js";
28
28
  import treemapMeta from "../../treemap-chart/metadata.json.js";
29
29
  import violinMeta from "../../violin-chart/metadata.json.js";
30
30
  import waterfallMeta from "../../waterfall-chart/metadata.json.js";
31
+ import partialDependenceMeta from "../../partial-dependence-chart/metadata.json.js";
31
32
  const CHART_TYPE_ALIASES = {
32
33
  barGroupedChart: "barGrouped",
33
34
  barStackedChart: "barStacked",
@@ -75,7 +76,8 @@ const METADATA = [
75
76
  stepLineMeta,
76
77
  treemapMeta,
77
78
  violinMeta,
78
- waterfallMeta
79
+ waterfallMeta,
80
+ partialDependenceMeta
79
81
  ];
80
82
  function toDomAttr(camelKey) {
81
83
  return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport biasVarianceTradeoffMeta from '../../bias-variance-tradeoff-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport giniImpurityEntropyMeta from '../../gini-impurity-entropy-chart/metadata.json';\nimport histogramMeta from '../../histogram-chart/metadata.json';\nimport kpiMeta from '../../kpi-widget/metadata.json';\nimport lineMeta from '../../line-chart/metadata.json';\nimport lollipopMeta from '../../lollipop/metadata.json';\nimport mapChartMeta from '../../map-chart/metadata.json';\nimport matrixMeta from '../../matrix-chart/metadata.json';\nimport networkGraphMeta from '../../network-graph/metadata.json';\nimport parallelCoordinatesMeta from '../../parallel-coordinates-chart/metadata.json';\nimport pieMeta from '../../pie-chart/metadata.json';\nimport polarAreaMeta from '../../polar-area-chart/metadata.json';\nimport punchcardMeta from '../../punchcard-chart/metadata.json';\nimport radarMeta from '../../radar-chart/metadata.json';\nimport radialBarMeta from '../../radial-bar-chart/metadata.json';\nimport sankeyMeta from '../../sankey-chart/metadata.json';\nimport scatterPlotMeta from '../../scatter-plot-chart/metadata.json';\nimport scatterSparklineMeta from '../../scatter-sparkline-chart/metadata.json';\nimport sparkAreaMeta from '../../spark-area-chart/metadata.json';\nimport sparkLineMeta from '../../spark-line-chart/metadata.json';\nimport stepLineMeta from '../../step-line-chart/metadata.json';\nimport treemapMeta from '../../treemap-chart/metadata.json';\nimport violinMeta from '../../violin-chart/metadata.json';\nimport waterfallMeta from '../../waterfall-chart/metadata.json';\nimport type { ChartMetadataLike, ChartTarget, ChartTargetAttrs } from './types.js';\n\n/** FuseDash variant / legacy chartType → registry key (mirrors client chartTypeRegistry). */\nexport const CHART_TYPE_ALIASES: Readonly<Record<string, string>> = {\n barGroupedChart: 'barGrouped',\n barStackedChart: 'barStacked',\n cumulativeBarChart: 'cumulativeBar',\n barHorizontalChart: 'barHorizontal',\n barHorizontalGroupedChart: 'barHorizontalGrouped',\n barHorizontalStackedChart: 'barHorizontalStacked',\n lollipopGroupedChart: 'lollipopGroupedChart',\n lollipopStackedChart: 'lollipopStackedChart',\n lineGroupedChart: 'lineGroupedChart',\n areaStackedChart: 'areaStackedChart',\n qqPlot: 'qqPlot',\n radarChartGrouped: 'radarGroupedChart',\n /** Client charts mock / MCP spelling */\n rocPlotChart: 'rocCurveChart',\n UniversalMap: 'mapChart',\n};\n\nconst METADATA: ChartMetadataLike[] = [\n areaChartMeta,\n areaGroupedBarMeta,\n barChartMeta,\n biasVarianceTradeoffMeta,\n boxPlotMeta,\n bubbleMeta,\n donutMeta,\n giniImpurityEntropyMeta,\n histogramMeta,\n kpiMeta,\n lineMeta,\n lollipopMeta,\n mapChartMeta,\n matrixMeta,\n networkGraphMeta,\n parallelCoordinatesMeta,\n pieMeta,\n polarAreaMeta,\n punchcardMeta,\n radarMeta,\n radialBarMeta,\n sankeyMeta,\n scatterPlotMeta,\n scatterSparklineMeta,\n sparkAreaMeta,\n sparkLineMeta,\n stepLineMeta,\n treemapMeta,\n violinMeta,\n waterfallMeta,\n];\n\nfunction toDomAttr(camelKey: string): string {\n return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\nfunction attrsFromMap(raw?: Record<string, unknown>): ChartTargetAttrs | undefined {\n if (!raw) return undefined;\n const out: ChartTargetAttrs = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n out[toDomAttr(key)] = value;\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction entriesFromMeta(meta: ChartMetadataLike): Record<string, ChartTarget> {\n const kind = meta.id as ChartKind;\n const out: Record<string, ChartTarget> = {};\n for (const chartType of meta.chartTypeKeys ?? []) {\n out[chartType] = {\n kind,\n tag: meta.tag,\n attrs: attrsFromMap(meta.chartTypeMap?.[chartType]),\n };\n }\n return out;\n}\n\nconst REGISTRY: Record<string, ChartTarget> = METADATA.reduce(\n (acc, meta) => Object.assign(acc, entriesFromMeta(meta)),\n {} as Record<string, ChartTarget>,\n);\n\n/** KS / ROC overlays map to step-line `graf-type`. */\nREGISTRY.ksPlotChart = {\n ...REGISTRY.ksPlotChart,\n attrs: { 'graf-type': 'curve' },\n};\nREGISTRY.rocCurveChart = {\n ...REGISTRY.rocCurveChart,\n attrs: { 'graf-type': 'line' },\n};\n\nexport const SUPPORTED_CHART_TYPES = Object.freeze(Object.keys(REGISTRY).sort());\n\nexport function resolveRegistryKey(chartType: string | undefined | null): string | undefined {\n if (!chartType?.trim()) return undefined;\n const trimmed = chartType.trim();\n return CHART_TYPE_ALIASES[trimmed] ?? trimmed;\n}\n\n/** Resolve FuseDash chartType → lazy ChartKind + host tag + optional attrs. */\nexport function resolveChartTarget(chartType: string | undefined | null): ChartTarget | null {\n const key = resolveRegistryKey(chartType);\n if (!key) return null;\n return REGISTRY[key] ?? null;\n}\n\nconst HOST_NOT_READY = new Set(\n METADATA.filter((meta) => meta.usageConditions?.hostReady === false).map((meta) => meta.id),\n);\n\nexport function canRenderChartType(chartType: string | undefined | null): boolean {\n const target = resolveChartTarget(chartType);\n if (!target) return false;\n return !HOST_NOT_READY.has(target.kind);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,MAAM,qBAAuD;AAAA,EAClE,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,mBAAmB;AAAA;AAAA,EAEnB,cAAc;AAAA,EACd,cAAc;AAChB;AAEA,MAAM,WAAgC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,UAAU,UAA0B;AAC3C,SAAO,SAAS,QAAQ,UAAU,CAAC,MAAM,IAAI,EAAE,YAAA,CAAa,EAAE;AAChE;AAEA,SAAS,aAAa,KAA6D;AACjF,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,MAAwB,CAAA;AAC9B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,OAAO,UAAU,UAAU;AACxF,UAAI,UAAU,GAAG,CAAC,IAAI;AAAA,IACxB;AAAA,EACF;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEA,SAAS,gBAAgB,MAAsD;;AAC7E,QAAM,OAAO,KAAK;AAClB,QAAM,MAAmC,CAAA;AACzC,aAAW,aAAa,KAAK,iBAAiB,CAAA,GAAI;AAChD,QAAI,SAAS,IAAI;AAAA,MACf;AAAA,MACA,KAAK,KAAK;AAAA,MACV,OAAO,cAAa,UAAK,iBAAL,mBAAoB,UAAU;AAAA,IAAA;AAAA,EAEtD;AACA,SAAO;AACT;AAEA,MAAM,WAAwC,SAAS;AAAA,EACrD,CAAC,KAAK,SAAS,OAAO,OAAO,KAAK,gBAAgB,IAAI,CAAC;AAAA,EACvD,CAAA;AACF;AAGA,SAAS,cAAc;AAAA,EACrB,GAAG,SAAS;AAAA,EACZ,OAAO,EAAE,aAAa,QAAA;AACxB;AACA,SAAS,gBAAgB;AAAA,EACvB,GAAG,SAAS;AAAA,EACZ,OAAO,EAAE,aAAa,OAAA;AACxB;AAEO,MAAM,wBAAwB,OAAO,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM;AAExE,SAAS,mBAAmB,WAA0D;AAC3F,MAAI,EAAC,uCAAW,QAAQ,QAAO;AAC/B,QAAM,UAAU,UAAU,KAAA;AAC1B,SAAO,mBAAmB,OAAO,KAAK;AACxC;AAGO,SAAS,mBAAmB,WAA0D;AAC3F,QAAM,MAAM,mBAAmB,SAAS;AACxC,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,SAAS,GAAG,KAAK;AAC1B;AAEA,MAAM,iBAAiB,IAAI;AAAA,EACzB,SAAS,OAAO,CAAC,SAAA;;AAAS,uBAAK,oBAAL,mBAAsB,eAAc;AAAA,GAAK,EAAE,IAAI,CAAC,SAAS,KAAK,EAAE;AAC5F;AAEO,SAAS,mBAAmB,WAA+C;AAChF,QAAM,SAAS,mBAAmB,SAAS;AAC3C,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,CAAC,eAAe,IAAI,OAAO,IAAI;AACxC;"}
1
+ {"version":3,"file":"registry.js","sources":["../../../../src/components/chart-renderer/lib/registry.ts"],"sourcesContent":["import type { ChartKind } from '../../../lazy/index.js';\nimport areaChartMeta from '../../area-chart/metadata.json';\nimport areaGroupedBarMeta from '../../area-grouped-bar-chart/metadata.json';\nimport barChartMeta from '../../bar-chart/metadata.json';\nimport biasVarianceTradeoffMeta from '../../bias-variance-tradeoff-chart/metadata.json';\nimport boxPlotMeta from '../../box-plot-chart/metadata.json';\nimport bubbleMeta from '../../bubble-chart/metadata.json';\nimport donutMeta from '../../donut-chart/metadata.json';\nimport giniImpurityEntropyMeta from '../../gini-impurity-entropy-chart/metadata.json';\nimport histogramMeta from '../../histogram-chart/metadata.json';\nimport kpiMeta from '../../kpi-widget/metadata.json';\nimport lineMeta from '../../line-chart/metadata.json';\nimport lollipopMeta from '../../lollipop/metadata.json';\nimport mapChartMeta from '../../map-chart/metadata.json';\nimport matrixMeta from '../../matrix-chart/metadata.json';\nimport networkGraphMeta from '../../network-graph/metadata.json';\nimport parallelCoordinatesMeta from '../../parallel-coordinates-chart/metadata.json';\nimport pieMeta from '../../pie-chart/metadata.json';\nimport polarAreaMeta from '../../polar-area-chart/metadata.json';\nimport punchcardMeta from '../../punchcard-chart/metadata.json';\nimport radarMeta from '../../radar-chart/metadata.json';\nimport radialBarMeta from '../../radial-bar-chart/metadata.json';\nimport sankeyMeta from '../../sankey-chart/metadata.json';\nimport scatterPlotMeta from '../../scatter-plot-chart/metadata.json';\nimport scatterSparklineMeta from '../../scatter-sparkline-chart/metadata.json';\nimport sparkAreaMeta from '../../spark-area-chart/metadata.json';\nimport sparkLineMeta from '../../spark-line-chart/metadata.json';\nimport stepLineMeta from '../../step-line-chart/metadata.json';\nimport treemapMeta from '../../treemap-chart/metadata.json';\nimport violinMeta from '../../violin-chart/metadata.json';\nimport waterfallMeta from '../../waterfall-chart/metadata.json';\nimport partialDependenceMeta from '../../partial-dependence-chart/metadata.json';\nimport type { ChartMetadataLike, ChartTarget, ChartTargetAttrs } from './types.js';\n\n/** FuseDash variant / legacy chartType → registry key (mirrors client chartTypeRegistry). */\nexport const CHART_TYPE_ALIASES: Readonly<Record<string, string>> = {\n barGroupedChart: 'barGrouped',\n barStackedChart: 'barStacked',\n cumulativeBarChart: 'cumulativeBar',\n barHorizontalChart: 'barHorizontal',\n barHorizontalGroupedChart: 'barHorizontalGrouped',\n barHorizontalStackedChart: 'barHorizontalStacked',\n lollipopGroupedChart: 'lollipopGroupedChart',\n lollipopStackedChart: 'lollipopStackedChart',\n lineGroupedChart: 'lineGroupedChart',\n areaStackedChart: 'areaStackedChart',\n qqPlot: 'qqPlot',\n radarChartGrouped: 'radarGroupedChart',\n /** Client charts mock / MCP spelling */\n rocPlotChart: 'rocCurveChart',\n UniversalMap: 'mapChart',\n};\n\nconst METADATA: ChartMetadataLike[] = [\n areaChartMeta,\n areaGroupedBarMeta,\n barChartMeta,\n biasVarianceTradeoffMeta,\n boxPlotMeta,\n bubbleMeta,\n donutMeta,\n giniImpurityEntropyMeta,\n histogramMeta,\n kpiMeta,\n lineMeta,\n lollipopMeta,\n mapChartMeta,\n matrixMeta,\n networkGraphMeta,\n parallelCoordinatesMeta,\n pieMeta,\n polarAreaMeta,\n punchcardMeta,\n radarMeta,\n radialBarMeta,\n sankeyMeta,\n scatterPlotMeta,\n scatterSparklineMeta,\n sparkAreaMeta,\n sparkLineMeta,\n stepLineMeta,\n treemapMeta,\n violinMeta,\n waterfallMeta,\n partialDependenceMeta,\n];\n\nfunction toDomAttr(camelKey: string): string {\n return camelKey.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n}\n\nfunction attrsFromMap(raw?: Record<string, unknown>): ChartTargetAttrs | undefined {\n if (!raw) return undefined;\n const out: ChartTargetAttrs = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {\n out[toDomAttr(key)] = value;\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction entriesFromMeta(meta: ChartMetadataLike): Record<string, ChartTarget> {\n const kind = meta.id as ChartKind;\n const out: Record<string, ChartTarget> = {};\n for (const chartType of meta.chartTypeKeys ?? []) {\n out[chartType] = {\n kind,\n tag: meta.tag,\n attrs: attrsFromMap(meta.chartTypeMap?.[chartType]),\n };\n }\n return out;\n}\n\nconst REGISTRY: Record<string, ChartTarget> = METADATA.reduce(\n (acc, meta) => Object.assign(acc, entriesFromMeta(meta)),\n {} as Record<string, ChartTarget>,\n);\n\n/** KS / ROC overlays map to step-line `graf-type`. */\nREGISTRY.ksPlotChart = {\n ...REGISTRY.ksPlotChart,\n attrs: { 'graf-type': 'curve' },\n};\nREGISTRY.rocCurveChart = {\n ...REGISTRY.rocCurveChart,\n attrs: { 'graf-type': 'line' },\n};\n\nexport const SUPPORTED_CHART_TYPES = Object.freeze(Object.keys(REGISTRY).sort());\n\nexport function resolveRegistryKey(chartType: string | undefined | null): string | undefined {\n if (!chartType?.trim()) return undefined;\n const trimmed = chartType.trim();\n return CHART_TYPE_ALIASES[trimmed] ?? trimmed;\n}\n\n/** Resolve FuseDash chartType → lazy ChartKind + host tag + optional attrs. */\nexport function resolveChartTarget(chartType: string | undefined | null): ChartTarget | null {\n const key = resolveRegistryKey(chartType);\n if (!key) return null;\n return REGISTRY[key] ?? null;\n}\n\nconst HOST_NOT_READY = new Set(\n METADATA.filter((meta) => meta.usageConditions?.hostReady === false).map((meta) => meta.id),\n);\n\nexport function canRenderChartType(chartType: string | undefined | null): boolean {\n const target = resolveChartTarget(chartType);\n if (!target) return false;\n return !HOST_NOT_READY.has(target.kind);\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,yBA6I3B,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,yBAoZ3B,CAAC"}
@@ -11,22 +11,43 @@ const kpiWidgetStyles = css`
11
11
  box-sizing: border-box;
12
12
  }
13
13
 
14
- .kpi-root[data-single='true'] {
14
+ .kpi-root[data-layout='single'] {
15
15
  min-height: 120px;
16
16
  }
17
17
 
18
+ .kpi-root[data-layout='advanced'] {
19
+ min-height: 220px;
20
+ }
21
+
18
22
  .kpi-root {
19
23
  display: flex;
20
24
  flex-direction: column;
21
25
  width: 100%;
22
26
  height: 100%;
23
27
  min-height: inherit;
28
+ min-width: 0;
29
+ overflow: hidden;
30
+ }
31
+
32
+ .kpi-section-title {
33
+ flex: 0 0 auto;
34
+ width: 100%;
35
+ min-width: 0;
36
+ padding: 8px 14px 4px;
37
+ font-size: 14px;
38
+ line-height: 20px;
39
+ font-weight: 600;
40
+ color: var(--ui9000-color-text, #111827);
41
+ white-space: nowrap;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
24
44
  }
25
45
 
26
46
  .kpi-grid {
27
47
  flex: 1;
28
48
  min-height: 0;
29
49
  width: 100%;
50
+ scrollbar-width: thin;
30
51
  }
31
52
 
32
53
  .kpi-grid[data-layout='grid'] {
@@ -57,10 +78,109 @@ const kpiWidgetStyles = css`
57
78
  overflow: auto;
58
79
  }
59
80
 
60
- .kpi-grid {
81
+ .kpi-advanced {
82
+ display: flex;
83
+ flex-direction: column;
84
+ flex: 1;
85
+ min-width: 0;
86
+ min-height: 0;
87
+ overflow: hidden;
88
+ }
89
+
90
+ .kpi-advanced-main {
91
+ display: flex;
92
+ flex-direction: column;
93
+ flex: 1 1 0;
94
+ width: 100%;
95
+ min-width: 0;
96
+ min-height: 80px;
97
+ overflow: hidden;
98
+ }
99
+
100
+ .kpi-advanced-main .kpi-card {
101
+ flex: 1;
102
+ min-height: 0;
103
+ padding: 14px 16px 8px;
104
+ }
105
+
106
+ .kpi-advanced-split {
107
+ display: flex;
108
+ flex: 1;
109
+ min-width: 0;
110
+ min-height: 0;
111
+ align-items: stretch;
112
+ }
113
+
114
+ .kpi-advanced-split[data-split='horizontal'] {
115
+ flex-direction: row;
116
+ }
117
+
118
+ .kpi-advanced-split[data-split='stacked'] {
119
+ flex-direction: column;
120
+ }
121
+
122
+ .kpi-advanced-value {
123
+ display: flex;
124
+ flex-direction: column;
125
+ justify-content: center;
126
+ min-width: 0;
127
+ }
128
+
129
+ .kpi-advanced-split[data-split='horizontal'] .kpi-advanced-value {
130
+ flex: 0 0 25%;
131
+ width: 25%;
132
+ padding-right: 8px;
133
+ }
134
+
135
+ .kpi-advanced-split[data-split='stacked'] .kpi-advanced-value {
136
+ flex: 0 0 auto;
137
+ width: 100%;
138
+ margin-bottom: 8px;
139
+ }
140
+
141
+ .kpi-advanced-chart {
142
+ min-width: 0;
143
+ min-height: 0;
144
+ flex: 1 1 0;
145
+ position: relative;
146
+ overflow: hidden;
147
+ }
148
+
149
+ .kpi-advanced-chart ui9000-chart-renderer {
150
+ display: block;
151
+ width: 100%;
152
+ height: 100%;
153
+ }
154
+
155
+ .kpi-supporting {
156
+ display: grid;
157
+ grid-auto-rows: minmax(72px, 1fr);
158
+ gap: 0;
159
+ flex: 0 1 auto;
160
+ min-width: 0;
161
+ min-height: 72px;
162
+ max-height: 50%;
163
+ width: 100%;
164
+ align-content: start;
165
+ border-top: 1px solid var(--ui9000-color-border, #e5e7eb);
166
+ padding-top: 4px;
61
167
  scrollbar-width: thin;
62
168
  }
63
169
 
170
+ .kpi-supporting[data-scroll='vertical'] {
171
+ overflow-x: hidden;
172
+ overflow-y: auto;
173
+ }
174
+
175
+ .kpi-supporting[data-scroll='horizontal'] {
176
+ overflow-x: auto;
177
+ overflow-y: hidden;
178
+ }
179
+
180
+ .kpi-supporting[data-scroll='both'] {
181
+ overflow: auto;
182
+ }
183
+
64
184
  .kpi-card {
65
185
  display: flex;
66
186
  flex-direction: column;
@@ -74,15 +194,78 @@ const kpiWidgetStyles = css`
74
194
  padding: 14px;
75
195
  }
76
196
 
197
+ .kpi-header {
198
+ display: flex;
199
+ justify-content: space-between;
200
+ align-items: center;
201
+ width: 100%;
202
+ min-width: 0;
203
+ gap: 8px;
204
+ margin-bottom: 6px;
205
+ }
206
+
207
+ .kpi-grid[data-layout='single'] .kpi-header,
208
+ .kpi-advanced-main .kpi-header {
209
+ margin-bottom: 10px;
210
+ }
211
+
77
212
  .kpi-name {
78
- margin: 0 0 4px;
213
+ margin: 0;
79
214
  font-size: 12px;
80
- font-weight: 500;
215
+ font-weight: 600;
81
216
  line-height: 1.3;
82
217
  color: var(--ui9000-color-text-muted, #6b7280);
83
218
  overflow: hidden;
84
219
  text-overflow: ellipsis;
85
220
  white-space: nowrap;
221
+ flex: 1;
222
+ min-width: 0;
223
+ }
224
+
225
+ .kpi-grid[data-layout='single'] .kpi-name,
226
+ .kpi-advanced-main .kpi-name {
227
+ font-size: 14px;
228
+ line-height: 20px;
229
+ color: var(--ui9000-color-text, #111827);
230
+ }
231
+
232
+ .kpi-badge {
233
+ flex-shrink: 0;
234
+ width: fit-content;
235
+ display: inline-flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ font-size: 12px;
239
+ line-height: 16px;
240
+ font-weight: 400;
241
+ padding: 1px 6px;
242
+ border-radius: 14px;
243
+ color: var(--ui9000-color-text-muted, #6b7280);
244
+ background: var(--ui9000-color-surface-muted, #f3f4f6);
245
+ }
246
+
247
+ .kpi-grid[data-layout='single'] .kpi-badge,
248
+ .kpi-advanced-main .kpi-badge {
249
+ font-size: 14px;
250
+ line-height: 20px;
251
+ padding: 3px 9px;
252
+ }
253
+
254
+ .kpi-badge[data-variant='Good'],
255
+ .kpi-badge[data-variant='OnTarget'] {
256
+ color: #0e8a5b;
257
+ background: rgba(14, 138, 91, 0.12);
258
+ }
259
+
260
+ .kpi-badge[data-variant='Low'],
261
+ .kpi-badge[data-variant='OffTarget'] {
262
+ color: #d92d20;
263
+ background: rgba(217, 45, 32, 0.12);
264
+ }
265
+
266
+ .kpi-badge[data-variant='Mission'] {
267
+ color: #fff;
268
+ background: #111827;
86
269
  }
87
270
 
88
271
  .kpi-value-row {
@@ -92,6 +275,10 @@ const kpiWidgetStyles = css`
92
275
  flex-wrap: wrap;
93
276
  }
94
277
 
278
+ .kpi-advanced-main .kpi-value-row {
279
+ flex-wrap: nowrap;
280
+ }
281
+
95
282
  .kpi-value {
96
283
  margin: 0;
97
284
  font-size: 24px;
@@ -100,17 +287,63 @@ const kpiWidgetStyles = css`
100
287
  color: var(--ui9000-color-text, #111827);
101
288
  }
102
289
 
103
- .kpi-unit {
290
+ .kpi-grid[data-layout='single'] .kpi-value {
291
+ font-size: clamp(28px, 8vw, 48px);
292
+ }
293
+
294
+ .kpi-advanced-main .kpi-value {
295
+ font-size: clamp(18px, 5vw, 42px);
296
+ }
297
+
298
+ :host([scale='compact']) .kpi-value {
299
+ font-size: 18px;
300
+ }
301
+
302
+ :host([scale='compact']) .kpi-grid[data-layout='single'] .kpi-value {
303
+ font-size: clamp(20px, 6vw, 32px);
304
+ }
305
+
306
+ :host([scale='comfortable']) .kpi-value {
307
+ font-size: 28px;
308
+ }
309
+
310
+ :host([scale='comfortable']) .kpi-grid[data-layout='single'] .kpi-value {
311
+ font-size: clamp(32px, 9vw, 56px);
312
+ }
313
+
314
+ .kpi-unit,
315
+ .kpi-suffix {
104
316
  font-size: 14px;
105
317
  font-weight: 300;
318
+ color: var(--ui9000-color-text, #111827);
106
319
  }
107
320
 
108
321
  .kpi-indicator {
322
+ display: inline-flex;
323
+ align-items: center;
324
+ gap: 2px;
109
325
  font-size: 12px;
110
326
  font-weight: 600;
111
327
  color: var(--ui9000-color-text-muted, #6b7280);
112
328
  }
113
329
 
330
+ .kpi-indicator-arrow {
331
+ font-size: 11px;
332
+ line-height: 1;
333
+ }
334
+
335
+ .kpi-subtitle-row {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: 6px;
339
+ min-width: 0;
340
+ margin-top: 4px;
341
+ }
342
+
343
+ .kpi-subtitle-row .kpi-subtitle {
344
+ margin-top: 0;
345
+ }
346
+
114
347
  .kpi-subtitle {
115
348
  margin: 6px 0 0;
116
349
  padding-left: 15px;
@@ -132,6 +365,36 @@ const kpiWidgetStyles = css`
132
365
  background: var(--ui9000-color-text-muted, #6b7280);
133
366
  }
134
367
 
368
+ .kpi-footer {
369
+ flex: 0 0 auto;
370
+ display: flex;
371
+ justify-content: space-between;
372
+ align-items: center;
373
+ gap: 12px;
374
+ width: 100%;
375
+ padding: 6px 14px 8px;
376
+ border-top: 1px solid var(--ui9000-color-border, #e5e7eb);
377
+ box-sizing: border-box;
378
+ }
379
+
380
+ .kpi-footer-block {
381
+ display: flex;
382
+ gap: 4px;
383
+ min-width: 0;
384
+ font-size: 13px;
385
+ line-height: 20px;
386
+ }
387
+
388
+ .kpi-footer-label {
389
+ font-weight: 400;
390
+ color: var(--ui9000-color-text-muted, #6b7280);
391
+ }
392
+
393
+ .kpi-footer-value {
394
+ font-weight: 400;
395
+ color: var(--ui9000-color-text, #111827);
396
+ }
397
+
135
398
  .empty {
136
399
  display: grid;
137
400
  place-items: center;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/kpi-widget/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const kpiWidgetStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 95px;\n color: var(--ui9000-color-text, #111827);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n box-sizing: border-box;\n }\n\n .kpi-root[data-single='true'] {\n min-height: 120px;\n }\n\n .kpi-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: inherit;\n }\n\n .kpi-grid {\n flex: 1;\n min-height: 0;\n width: 100%;\n }\n\n .kpi-grid[data-layout='grid'] {\n display: grid;\n grid-auto-rows: minmax(72px, 1fr);\n gap: 0;\n align-content: start;\n }\n\n .kpi-grid[data-layout='single'] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: stretch;\n }\n\n .kpi-grid[data-scroll='vertical'] {\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .kpi-grid[data-scroll='horizontal'] {\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .kpi-grid[data-scroll='both'] {\n overflow: auto;\n }\n\n .kpi-grid {\n scrollbar-width: thin;\n }\n\n .kpi-card {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n padding: 10px 12px;\n box-sizing: border-box;\n }\n\n .kpi-grid[data-layout='single'] .kpi-card {\n padding: 14px;\n }\n\n .kpi-name {\n margin: 0 0 4px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1.3;\n color: var(--ui9000-color-text-muted, #6b7280);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .kpi-value-row {\n display: flex;\n align-items: baseline;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n .kpi-value {\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n line-height: 1.15;\n color: var(--ui9000-color-text, #111827);\n }\n\n .kpi-unit {\n font-size: 14px;\n font-weight: 300;\n }\n\n .kpi-indicator {\n font-size: 12px;\n font-weight: 600;\n color: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-subtitle {\n margin: 6px 0 0;\n padding-left: 15px;\n position: relative;\n font-size: 12px;\n line-height: 1.35;\n color: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-subtitle::before {\n content: '';\n position: absolute;\n left: 0;\n top: 50%;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n transform: translateY(-50%);\n background: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .empty {\n display: grid;\n place-items: center;\n flex: 1;\n min-height: 72px;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 13px;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
1
+ {"version":3,"file":"styles.js","sources":["../../../../src/components/kpi-widget/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const kpiWidgetStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 95px;\n color: var(--ui9000-color-text, #111827);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n box-sizing: border-box;\n }\n\n .kpi-root[data-layout='single'] {\n min-height: 120px;\n }\n\n .kpi-root[data-layout='advanced'] {\n min-height: 220px;\n }\n\n .kpi-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: inherit;\n min-width: 0;\n overflow: hidden;\n }\n\n .kpi-section-title {\n flex: 0 0 auto;\n width: 100%;\n min-width: 0;\n padding: 8px 14px 4px;\n font-size: 14px;\n line-height: 20px;\n font-weight: 600;\n color: var(--ui9000-color-text, #111827);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .kpi-grid {\n flex: 1;\n min-height: 0;\n width: 100%;\n scrollbar-width: thin;\n }\n\n .kpi-grid[data-layout='grid'] {\n display: grid;\n grid-auto-rows: minmax(72px, 1fr);\n gap: 0;\n align-content: start;\n }\n\n .kpi-grid[data-layout='single'] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: stretch;\n }\n\n .kpi-grid[data-scroll='vertical'] {\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .kpi-grid[data-scroll='horizontal'] {\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .kpi-grid[data-scroll='both'] {\n overflow: auto;\n }\n\n .kpi-advanced {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n }\n\n .kpi-advanced-main {\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: 80px;\n overflow: hidden;\n }\n\n .kpi-advanced-main .kpi-card {\n flex: 1;\n min-height: 0;\n padding: 14px 16px 8px;\n }\n\n .kpi-advanced-split {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n align-items: stretch;\n }\n\n .kpi-advanced-split[data-split='horizontal'] {\n flex-direction: row;\n }\n\n .kpi-advanced-split[data-split='stacked'] {\n flex-direction: column;\n }\n\n .kpi-advanced-value {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n }\n\n .kpi-advanced-split[data-split='horizontal'] .kpi-advanced-value {\n flex: 0 0 25%;\n width: 25%;\n padding-right: 8px;\n }\n\n .kpi-advanced-split[data-split='stacked'] .kpi-advanced-value {\n flex: 0 0 auto;\n width: 100%;\n margin-bottom: 8px;\n }\n\n .kpi-advanced-chart {\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n position: relative;\n overflow: hidden;\n }\n\n .kpi-advanced-chart ui9000-chart-renderer {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .kpi-supporting {\n display: grid;\n grid-auto-rows: minmax(72px, 1fr);\n gap: 0;\n flex: 0 1 auto;\n min-width: 0;\n min-height: 72px;\n max-height: 50%;\n width: 100%;\n align-content: start;\n border-top: 1px solid var(--ui9000-color-border, #e5e7eb);\n padding-top: 4px;\n scrollbar-width: thin;\n }\n\n .kpi-supporting[data-scroll='vertical'] {\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .kpi-supporting[data-scroll='horizontal'] {\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n .kpi-supporting[data-scroll='both'] {\n overflow: auto;\n }\n\n .kpi-card {\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n padding: 10px 12px;\n box-sizing: border-box;\n }\n\n .kpi-grid[data-layout='single'] .kpi-card {\n padding: 14px;\n }\n\n .kpi-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n min-width: 0;\n gap: 8px;\n margin-bottom: 6px;\n }\n\n .kpi-grid[data-layout='single'] .kpi-header,\n .kpi-advanced-main .kpi-header {\n margin-bottom: 10px;\n }\n\n .kpi-name {\n margin: 0;\n font-size: 12px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--ui9000-color-text-muted, #6b7280);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n }\n\n .kpi-grid[data-layout='single'] .kpi-name,\n .kpi-advanced-main .kpi-name {\n font-size: 14px;\n line-height: 20px;\n color: var(--ui9000-color-text, #111827);\n }\n\n .kpi-badge {\n flex-shrink: 0;\n width: fit-content;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n line-height: 16px;\n font-weight: 400;\n padding: 1px 6px;\n border-radius: 14px;\n color: var(--ui9000-color-text-muted, #6b7280);\n background: var(--ui9000-color-surface-muted, #f3f4f6);\n }\n\n .kpi-grid[data-layout='single'] .kpi-badge,\n .kpi-advanced-main .kpi-badge {\n font-size: 14px;\n line-height: 20px;\n padding: 3px 9px;\n }\n\n .kpi-badge[data-variant='Good'],\n .kpi-badge[data-variant='OnTarget'] {\n color: #0e8a5b;\n background: rgba(14, 138, 91, 0.12);\n }\n\n .kpi-badge[data-variant='Low'],\n .kpi-badge[data-variant='OffTarget'] {\n color: #d92d20;\n background: rgba(217, 45, 32, 0.12);\n }\n\n .kpi-badge[data-variant='Mission'] {\n color: #fff;\n background: #111827;\n }\n\n .kpi-value-row {\n display: flex;\n align-items: baseline;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n .kpi-advanced-main .kpi-value-row {\n flex-wrap: nowrap;\n }\n\n .kpi-value {\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n line-height: 1.15;\n color: var(--ui9000-color-text, #111827);\n }\n\n .kpi-grid[data-layout='single'] .kpi-value {\n font-size: clamp(28px, 8vw, 48px);\n }\n\n .kpi-advanced-main .kpi-value {\n font-size: clamp(18px, 5vw, 42px);\n }\n\n :host([scale='compact']) .kpi-value {\n font-size: 18px;\n }\n\n :host([scale='compact']) .kpi-grid[data-layout='single'] .kpi-value {\n font-size: clamp(20px, 6vw, 32px);\n }\n\n :host([scale='comfortable']) .kpi-value {\n font-size: 28px;\n }\n\n :host([scale='comfortable']) .kpi-grid[data-layout='single'] .kpi-value {\n font-size: clamp(32px, 9vw, 56px);\n }\n\n .kpi-unit,\n .kpi-suffix {\n font-size: 14px;\n font-weight: 300;\n color: var(--ui9000-color-text, #111827);\n }\n\n .kpi-indicator {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n font-size: 12px;\n font-weight: 600;\n color: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-indicator-arrow {\n font-size: 11px;\n line-height: 1;\n }\n\n .kpi-subtitle-row {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n margin-top: 4px;\n }\n\n .kpi-subtitle-row .kpi-subtitle {\n margin-top: 0;\n }\n\n .kpi-subtitle {\n margin: 6px 0 0;\n padding-left: 15px;\n position: relative;\n font-size: 12px;\n line-height: 1.35;\n color: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-subtitle::before {\n content: '';\n position: absolute;\n left: 0;\n top: 50%;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n transform: translateY(-50%);\n background: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-footer {\n flex: 0 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 6px 14px 8px;\n border-top: 1px solid var(--ui9000-color-border, #e5e7eb);\n box-sizing: border-box;\n }\n\n .kpi-footer-block {\n display: flex;\n gap: 4px;\n min-width: 0;\n font-size: 13px;\n line-height: 20px;\n }\n\n .kpi-footer-label {\n font-weight: 400;\n color: var(--ui9000-color-text-muted, #6b7280);\n }\n\n .kpi-footer-value {\n font-weight: 400;\n color: var(--ui9000-color-text, #111827);\n }\n\n .empty {\n display: grid;\n place-items: center;\n flex: 1;\n min-height: 72px;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 13px;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -4,16 +4,25 @@ import { WidgetScale } from '../../../types/index.js';
4
4
  export declare class Ui9000KpiWidget extends Ui9000ChartElement {
5
5
  static styles: import('lit').CSSResult[];
6
6
  scale: WidgetScale;
7
- private _cards;
7
+ private _model;
8
8
  private _gridColumns;
9
9
  private _scrollAxis;
10
+ private _advancedSplit;
10
11
  private _resizeObserver?;
12
+ private _raf;
13
+ private _rendererLoading;
11
14
  connectedCallback(): void;
12
15
  disconnectedCallback(): void;
13
16
  updated(changed: PropertyValues): void;
17
+ /** Nested viz uses `<ui9000-chart-renderer>` — load it only for advanced KPIs. */
18
+ private ensureChartRenderer;
19
+ private scheduleLayout;
14
20
  private updateGridLayout;
21
+ private renderBadge;
15
22
  private renderValue;
16
23
  private renderCard;
24
+ private renderFooter;
25
+ private renderAdvanced;
17
26
  render(): import('lit-html').TemplateResult<1>;
18
27
  }
19
28
  export declare function registerKpiWidget(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-kpi-widget.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/element/ui9000-kpi-widget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAa3D,qBACa,eAAgB,SAAQ,kBAAkB;IACrD,OAAgB,MAAM,4BAAuC;IAG7D,KAAK,EAAE,WAAW,CAAa;IAG/B,OAAO,CAAC,MAAM,CAAsB;IAGpC,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,WAAW,CAAiC;IAEpD,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEhC,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAQ/C,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAUT,MAAM;CA6BhB;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
1
+ {"version":3,"file":"ui9000-kpi-widget.d.ts","sourceRoot":"","sources":["../../../../src/components/kpi-widget/element/ui9000-kpi-widget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAkB3D,qBACa,eAAgB,SAAQ,kBAAkB;IACrD,OAAgB,MAAM,4BAAuC;IAG7D,KAAK,EAAE,WAAW,CAAa;IAG/B,OAAO,CAAC,MAAM,CAAkE;IAGhF,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,WAAW,CAAiC;IAGpD,OAAO,CAAC,cAAc,CAAqC;IAE3D,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,gBAAgB,CAAS;IAExB,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAQ/C,kFAAkF;IAClF,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,cAAc;IA2Db,MAAM;CAqChB;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}