@fusedashlabs/widgets 0.4.4 → 0.4.5

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 (78) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/components/bar-chart/element/styles.js +3 -3
  3. package/dist/components/bar-chart/element/styles.js.map +1 -1
  4. package/dist/components/box-plot-chart/element/styles.js +3 -3
  5. package/dist/components/box-plot-chart/element/styles.js.map +1 -1
  6. package/dist/components/chart-renderer/element/styles.d.ts.map +1 -1
  7. package/dist/components/chart-renderer/element/styles.js +4 -1
  8. package/dist/components/chart-renderer/element/styles.js.map +1 -1
  9. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
  10. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +12 -0
  11. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
  12. package/dist/components/chart-renderer/metadata.json.d.ts +6 -1
  13. package/dist/components/chart-renderer/metadata.json.js +1 -1
  14. package/dist/components/custom-widget/element/styles.d.ts +2 -0
  15. package/dist/components/custom-widget/element/styles.d.ts.map +1 -0
  16. package/dist/components/custom-widget/element/styles.js +286 -0
  17. package/dist/components/custom-widget/element/styles.js.map +1 -0
  18. package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts +48 -0
  19. package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts.map +1 -0
  20. package/dist/components/custom-widget/element/ui9000-custom-widget.js +265 -0
  21. package/dist/components/custom-widget/element/ui9000-custom-widget.js.map +1 -0
  22. package/dist/components/custom-widget/index.d.ts +4 -0
  23. package/dist/components/custom-widget/index.d.ts.map +1 -0
  24. package/dist/components/custom-widget/index.js +19 -0
  25. package/dist/components/custom-widget/index.js.map +1 -0
  26. package/dist/components/custom-widget/lib/content.d.ts +13 -0
  27. package/dist/components/custom-widget/lib/content.d.ts.map +1 -0
  28. package/dist/components/custom-widget/lib/content.js +22 -0
  29. package/dist/components/custom-widget/lib/content.js.map +1 -0
  30. package/dist/components/custom-widget/lib/index.d.ts +8 -0
  31. package/dist/components/custom-widget/lib/index.d.ts.map +1 -0
  32. package/dist/components/custom-widget/lib/layout.d.ts +35 -0
  33. package/dist/components/custom-widget/lib/layout.d.ts.map +1 -0
  34. package/dist/components/custom-widget/lib/layout.js +13 -0
  35. package/dist/components/custom-widget/lib/layout.js.map +1 -0
  36. package/dist/components/custom-widget/lib/markdown.d.ts +4 -0
  37. package/dist/components/custom-widget/lib/markdown.d.ts.map +1 -0
  38. package/dist/components/custom-widget/lib/markdown.js +125 -0
  39. package/dist/components/custom-widget/lib/markdown.js.map +1 -0
  40. package/dist/components/custom-widget/lib/normalize.d.ts +6 -0
  41. package/dist/components/custom-widget/lib/normalize.d.ts.map +1 -0
  42. package/dist/components/custom-widget/lib/normalize.js +144 -0
  43. package/dist/components/custom-widget/lib/normalize.js.map +1 -0
  44. package/dist/components/custom-widget/lib/table.d.ts +55 -0
  45. package/dist/components/custom-widget/lib/table.d.ts.map +1 -0
  46. package/dist/components/custom-widget/lib/table.js +181 -0
  47. package/dist/components/custom-widget/lib/table.js.map +1 -0
  48. package/dist/components/custom-widget/lib/types.d.ts +55 -0
  49. package/dist/components/custom-widget/lib/types.d.ts.map +1 -0
  50. package/dist/components/custom-widget/metadata.json.d.ts +96 -0
  51. package/dist/components/custom-widget/metadata.json.js +42 -0
  52. package/dist/components/custom-widget/metadata.json.js.map +1 -0
  53. package/dist/components/histogram-chart/element/styles.js +2 -2
  54. package/dist/components/histogram-chart/element/styles.js.map +1 -1
  55. package/dist/components/line-chart/element/styles.js +2 -2
  56. package/dist/components/line-chart/element/styles.js.map +1 -1
  57. package/dist/components/lollipop/element/styles.js +3 -3
  58. package/dist/components/lollipop/element/styles.js.map +1 -1
  59. package/dist/components/step-line-chart/element/styles.js +2 -2
  60. package/dist/components/step-line-chart/element/styles.js.map +1 -1
  61. package/dist/element/chart-shell-styles.d.ts.map +1 -1
  62. package/dist/element/chart-shell-styles.js +11 -4
  63. package/dist/element/chart-shell-styles.js.map +1 -1
  64. package/dist/element/ui9000-chart-base.d.ts +5 -0
  65. package/dist/element/ui9000-chart-base.d.ts.map +1 -1
  66. package/dist/element/ui9000-chart-base.js +7 -1
  67. package/dist/element/ui9000-chart-base.js.map +1 -1
  68. package/dist/index.d.ts +4 -2
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/lazy/custom-widget.d.ts +4 -0
  73. package/dist/lazy/custom-widget.d.ts.map +1 -0
  74. package/dist/lazy/index.d.ts +2 -1
  75. package/dist/lazy/index.d.ts.map +1 -1
  76. package/dist/lazy/index.js +8 -0
  77. package/dist/lazy/index.js.map +1 -1
  78. package/package.json +9 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.4.5 — 2026-09-08
6
+
7
+ ### Added
8
+
9
+ - Custom widget panes now render **table**, **text**, and **image** (plus existing KPI band and chart panes). Table columns follow FuseDash `headers[].contains.source` (`dataset` via `tablePreviewRows`, `chart` via `data`, `static` via `tableData`). Text is read-only markdown; images require an `http(s)` URL.
10
+
5
11
  ## 0.4.4 — 2026-09-08
6
12
 
7
13
  ### Fixed
@@ -12,13 +12,13 @@ const barChartStyles = css`
12
12
  }
13
13
  .chart-body {
14
14
  flex: 1 1 auto;
15
- min-height: 240px;
15
+ min-height: var(--ui9000-plot-min-height, 240px);
16
16
  display: flex;
17
17
  flex-direction: column;
18
18
  }
19
19
  .chart-scroll {
20
20
  flex: 1 1 auto;
21
- min-height: 200px;
21
+ min-height: var(--ui9000-plot-min-height, 200px);
22
22
  overflow-y: auto;
23
23
  overflow-x: hidden;
24
24
  position: relative;
@@ -31,7 +31,7 @@ const barChartStyles = css`
31
31
  }
32
32
  .chart-root {
33
33
  width: 100%;
34
- min-height: 240px;
34
+ min-height: var(--ui9000-plot-min-height, 240px);
35
35
  }
36
36
  .tooltip {
37
37
  position: absolute;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/bar-chart/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const barChartStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\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 .chart-body {\n flex: 1 1 auto;\n min-height: 240px;\n display: flex;\n flex-direction: column;\n }\n .chart-scroll {\n flex: 1 1 auto;\n min-height: 200px;\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n }\n .chart-x-axis {\n flex-shrink: 0;\n width: 100%;\n min-height: 21px;\n overflow: hidden;\n }\n .chart-root {\n width: 100%;\n min-height: 240px;\n }\n .tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 2;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.35;\n background: var(--ui9000-color-text, #111827);\n color: #fff;\n box-shadow: 0 4px 12px rgb(0 0 0 / 18%);\n transform: translate(-50%, calc(-100% - 12px));\n white-space: nowrap;\n }\n .tooltip .category {\n font-weight: 600;\n margin-bottom: 2px;\n }\n .tooltip .row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .tooltip .swatch {\n width: 8px;\n height: 8px;\n border-radius: 2px;\n flex: none;\n }\n .tooltip .value {\n margin-left: auto;\n font-variant-numeric: tabular-nums;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/bar-chart/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const barChartStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\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 .chart-body {\n flex: 1 1 auto;\n min-height: var(--ui9000-plot-min-height, 240px);\n display: flex;\n flex-direction: column;\n }\n .chart-scroll {\n flex: 1 1 auto;\n min-height: var(--ui9000-plot-min-height, 200px);\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n }\n .chart-x-axis {\n flex-shrink: 0;\n width: 100%;\n min-height: 21px;\n overflow: hidden;\n }\n .chart-root {\n width: 100%;\n min-height: var(--ui9000-plot-min-height, 240px);\n }\n .tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 2;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.35;\n background: var(--ui9000-color-text, #111827);\n color: #fff;\n box-shadow: 0 4px 12px rgb(0 0 0 / 18%);\n transform: translate(-50%, calc(-100% - 12px));\n white-space: nowrap;\n }\n .tooltip .category {\n font-weight: 600;\n margin-bottom: 2px;\n }\n .tooltip .row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .tooltip .swatch {\n width: 8px;\n height: 8px;\n border-radius: 2px;\n flex: none;\n }\n .tooltip .value {\n margin-left: auto;\n font-variant-numeric: tabular-nums;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -12,13 +12,13 @@ const boxPlotStyles = css`
12
12
  }
13
13
  .chart-body {
14
14
  flex: 1 1 auto;
15
- min-height: 240px;
15
+ min-height: var(--ui9000-plot-min-height, 240px);
16
16
  display: flex;
17
17
  flex-direction: column;
18
18
  }
19
19
  .chart-scroll {
20
20
  flex: 1 1 auto;
21
- min-height: 200px;
21
+ min-height: var(--ui9000-plot-min-height, 200px);
22
22
  overflow-y: auto;
23
23
  overflow-x: hidden;
24
24
  position: relative;
@@ -31,7 +31,7 @@ const boxPlotStyles = css`
31
31
  }
32
32
  .chart-root {
33
33
  width: 100%;
34
- min-height: 240px;
34
+ min-height: var(--ui9000-plot-min-height, 240px);
35
35
  }
36
36
  .chart-root svg .bin-quartile {
37
37
  filter: drop-shadow(0 2px 2px rgb(3 4 4 / 6%))
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/box-plot-chart/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const boxPlotStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\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 .chart-body {\n flex: 1 1 auto;\n min-height: 240px;\n display: flex;\n flex-direction: column;\n }\n .chart-scroll {\n flex: 1 1 auto;\n min-height: 200px;\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n }\n .chart-x-axis {\n flex-shrink: 0;\n width: 100%;\n min-height: 21px;\n overflow: hidden;\n }\n .chart-root {\n width: 100%;\n min-height: 240px;\n }\n .chart-root svg .bin-quartile {\n filter: drop-shadow(0 2px 2px rgb(3 4 4 / 6%))\n drop-shadow(0 2px 4px rgb(3 4 4 / 6%));\n }\n .tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 2;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.35;\n background: var(--ui9000-color-text, #111827);\n color: #fff;\n box-shadow: 0 4px 12px rgb(0 0 0 / 18%);\n transform: translate(-50%, calc(-100% - 10px));\n white-space: nowrap;\n }\n .tooltip .name {\n font-weight: 600;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/box-plot-chart/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const boxPlotStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\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 .chart-body {\n flex: 1 1 auto;\n min-height: var(--ui9000-plot-min-height, 240px);\n display: flex;\n flex-direction: column;\n }\n .chart-scroll {\n flex: 1 1 auto;\n min-height: var(--ui9000-plot-min-height, 200px);\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n }\n .chart-x-axis {\n flex-shrink: 0;\n width: 100%;\n min-height: 21px;\n overflow: hidden;\n }\n .chart-root {\n width: 100%;\n min-height: var(--ui9000-plot-min-height, 240px);\n }\n .chart-root svg .bin-quartile {\n filter: drop-shadow(0 2px 2px rgb(3 4 4 / 6%))\n drop-shadow(0 2px 4px rgb(3 4 4 / 6%));\n }\n .tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 2;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.35;\n background: var(--ui9000-color-text, #111827);\n color: #fff;\n box-shadow: 0 4px 12px rgb(0 0 0 / 18%);\n transform: translate(-50%, calc(-100% - 10px));\n white-space: nowrap;\n }\n .tooltip .name {\n font-weight: 600;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,yBAiC/B,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,yBAoC/B,CAAC"}
@@ -5,9 +5,12 @@ const chartRendererStyles = css`
5
5
  position: relative;
6
6
  width: 100%;
7
7
  height: 100%;
8
- min-height: 220px;
8
+ min-height: var(--ui9000-host-min-height, 220px);
9
9
  box-sizing: border-box;
10
10
  }
11
+ :host([embedded]) {
12
+ min-height: 0;
13
+ }
11
14
  .host {
12
15
  display: block;
13
16
  width: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/chart-renderer/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const chartRendererStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\n box-sizing: border-box;\n }\n .host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: inherit;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n padding: 1rem;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n font-size: 0.875rem;\n line-height: 1.4;\n }\n .empty strong {\n display: block;\n margin-bottom: 0.25rem;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/chart-renderer/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const chartRendererStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: var(--ui9000-host-min-height, 220px);\n box-sizing: border-box;\n }\n :host([embedded]) {\n min-height: 0;\n }\n .host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: inherit;\n }\n .empty {\n display: grid;\n place-items: center;\n height: 100%;\n min-height: inherit;\n padding: 1rem;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n font-size: 0.875rem;\n line-height: 1.4;\n }\n .empty strong {\n display: block;\n margin-bottom: 0.25rem;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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 +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,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;CAqFzB;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,CAexC;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;CAgGzB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,mBAAmB,CAAC;KAC9C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
@@ -30,6 +30,7 @@ class Ui9000ChartRenderer extends HTMLElement {
30
30
  "show-legend",
31
31
  "show-tooltip",
32
32
  "show-header",
33
+ "embedded",
33
34
  "chart-title",
34
35
  "mapbox-token",
35
36
  "geojson-base-url",
@@ -131,6 +132,9 @@ class Ui9000ChartRenderer extends HTMLElement {
131
132
  el.setAttribute("scale", this.scale);
132
133
  if (title) el.setAttribute("chart-title", title);
133
134
  else el.removeAttribute("chart-title");
135
+ if (this.getAttribute("show-header") === "false")
136
+ el.setAttribute("show-header", "false");
137
+ else el.removeAttribute("show-header");
134
138
  const showGrid = this.boolAttr("show-grid");
135
139
  const showLegend = this.boolAttr("show-legend");
136
140
  const showTooltip = this.boolAttr("show-tooltip");
@@ -157,6 +161,14 @@ class Ui9000ChartRenderer extends HTMLElement {
157
161
  el.style.display = "block";
158
162
  el.style.width = "100%";
159
163
  el.style.height = "100%";
164
+ if (this.hasAttribute("embedded")) {
165
+ el.setAttribute("embedded", "");
166
+ el.style.minHeight = "0";
167
+ el.style.setProperty("--ui9000-host-min-height", "0");
168
+ el.style.setProperty("--ui9000-plot-min-height", "0");
169
+ } else {
170
+ el.removeAttribute("embedded");
171
+ }
160
172
  if (!reuse) {
161
173
  this._host.replaceChildren();
162
174
  this._host.appendChild(el);
@@ -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 '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 const reuse = !!el && el.tagName.toLowerCase() === target.tag;\n if (!reuse) {\n el = document.createElement(target.tag);\n }\n if (!el) return;\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 if (!reuse) {\n this._host.replaceChildren();\n this._host.appendChild(el);\n }\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":"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"}
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 'embedded',\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 const reuse = !!el && el.tagName.toLowerCase() === target.tag;\n if (!reuse) {\n el = document.createElement(target.tag);\n }\n if (!el) return;\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 if (this.getAttribute('show-header') === 'false')\n el.setAttribute('show-header', 'false');\n else el.removeAttribute('show-header');\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 if (this.hasAttribute('embedded')) {\n el.setAttribute('embedded', '');\n el.style.minHeight = '0';\n el.style.setProperty('--ui9000-host-min-height', '0');\n el.style.setProperty('--ui9000-plot-min-height', '0');\n } else {\n el.removeAttribute('embedded');\n }\n\n if (!reuse) {\n this._host.replaceChildren();\n this._host.appendChild(el);\n }\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":"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"}
@@ -34,7 +34,12 @@ declare const _default: {
34
34
  "showGrid": { "type": "boolean" },
35
35
  "showLegend": { "type": "boolean" },
36
36
  "showTooltip": { "type": "boolean" },
37
- "chartTitle": { "type": "string" }
37
+ "chartTitle": { "type": "string" },
38
+ "showHeader": {
39
+ "type": "boolean",
40
+ "default": true,
41
+ "description": "Set false when the host renders its own title (custom-widget) — suppresses the mounted chart's header"
42
+ }
38
43
  },
39
44
  "required": ["data"]
40
45
  }
@@ -9,7 +9,7 @@ const lazyImport = "@ui9000/widgets/lazy/chart-renderer";
9
9
  const entry = "@ui9000/widgets/chart-renderer";
10
10
  const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
11
11
  const allowedActions = ["resize"];
12
- const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "type": "object", "description": "FuseDash WidgetItem JSON (must include chartType unless chart-type attribute is set)" }, "chartType": { "type": "string", "description": "Optional override — wins over widget.chartType (matches FuseDash ChartRenderer chartType prop)" }, "scale": { "type": "string", "enum": ["compact", "default", "comfortable"], "default": "default" }, "showGrid": { "type": "boolean" }, "showLegend": { "type": "boolean" }, "showTooltip": { "type": "boolean" }, "chartTitle": { "type": "string" } }, "required": ["data"] };
12
+ const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "type": "object", "description": "FuseDash WidgetItem JSON (must include chartType unless chart-type attribute is set)" }, "chartType": { "type": "string", "description": "Optional override — wins over widget.chartType (matches FuseDash ChartRenderer chartType prop)" }, "scale": { "type": "string", "enum": ["compact", "default", "comfortable"], "default": "default" }, "showGrid": { "type": "boolean" }, "showLegend": { "type": "boolean" }, "showTooltip": { "type": "boolean" }, "chartTitle": { "type": "string" }, "showHeader": { "type": "boolean", "default": true, "description": "Set false when the host renders its own title (custom-widget) — suppresses the mounted chart's header" } }, "required": ["data"] };
13
13
  const metadata = {
14
14
  id,
15
15
  tag,
@@ -0,0 +1,2 @@
1
+ export declare const customWidgetStyles: import('lit').CSSResult;
2
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/custom-widget/element/styles.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,yBAuR9B,CAAC"}
@@ -0,0 +1,286 @@
1
+ import { css } from "lit";
2
+ import { KPI_ROW_HEIGHT, PANE_GAP } from "../lib/layout.js";
3
+ const customWidgetStyles = css`
4
+ :host {
5
+ display: block;
6
+ position: relative;
7
+ width: 100%;
8
+ height: 100%;
9
+ min-height: 220px;
10
+ overflow: hidden;
11
+ border-radius: 8px;
12
+ color: var(--ui9000-color-text, #111827);
13
+ font-family: var(--ui9000-font-family, system-ui, sans-serif);
14
+ box-sizing: border-box;
15
+ }
16
+
17
+ .custom-root {
18
+ display: flex;
19
+ flex-direction: column;
20
+ width: 100%;
21
+ height: 100%;
22
+ min-height: inherit;
23
+ overflow: hidden;
24
+ }
25
+
26
+ /* Nested charts keep plot chrome; the pane is the rounded zone */
27
+ .pane ui9000-chart-renderer {
28
+ min-height: 0;
29
+ }
30
+
31
+ .kpi-band {
32
+ flex: 0 0 auto;
33
+ height: ${KPI_ROW_HEIGHT}px;
34
+ min-height: ${KPI_ROW_HEIGHT}px;
35
+ max-height: ${KPI_ROW_HEIGHT}px;
36
+ width: 100%;
37
+ overflow: hidden;
38
+ }
39
+
40
+ .custom-content {
41
+ display: flex;
42
+ flex: 1 1 auto;
43
+ min-height: 0;
44
+ min-width: 0;
45
+ width: 100%;
46
+ gap: ${PANE_GAP}px;
47
+ overflow: hidden;
48
+ box-sizing: border-box;
49
+ }
50
+
51
+ .pane {
52
+ display: flex;
53
+ align-items: stretch;
54
+ justify-content: center;
55
+ min-width: 0;
56
+ min-height: 0;
57
+ flex: 1 1 0;
58
+ overflow: hidden;
59
+ --ui9000-host-min-height: 0;
60
+ --ui9000-plot-min-height: 0;
61
+ }
62
+
63
+ .pane[data-kind='chartWidget'],
64
+ .pane[data-kind='tableWidget'],
65
+ .pane[data-kind='textWidget'],
66
+ .pane[data-kind='imageWidget'] {
67
+ border: 1px solid var(--ui9000-color-border, #e5e7eb);
68
+ border-radius: 8px;
69
+ background: var(--ui9000-color-surface, #fff);
70
+ }
71
+
72
+ .custom-content[data-direction='vertical'][data-panes='2'] .pane {
73
+ flex: 1 1 50%;
74
+ max-width: 50%;
75
+ }
76
+
77
+ .custom-content[data-direction='horizontal'][data-panes='2'] .pane {
78
+ flex: 1 1 0;
79
+ min-height: 0;
80
+ }
81
+
82
+ .pane > * {
83
+ display: block;
84
+ width: 100%;
85
+ height: 100%;
86
+ min-width: 0;
87
+ min-height: 0;
88
+ }
89
+
90
+ .pane-empty,
91
+ .default-state {
92
+ display: grid;
93
+ place-items: center;
94
+ align-content: center;
95
+ width: 100%;
96
+ height: 100%;
97
+ padding: 1rem;
98
+ text-align: center;
99
+ color: var(--ui9000-color-text-muted, #6b7280);
100
+ font-size: 0.875rem;
101
+ line-height: 1.4;
102
+ box-sizing: border-box;
103
+ }
104
+
105
+ .pane-empty strong,
106
+ .default-state strong {
107
+ display: block;
108
+ margin-bottom: 0.25rem;
109
+ color: var(--ui9000-color-text, #111827);
110
+ font-weight: 600;
111
+ }
112
+
113
+ .default-state span,
114
+ .pane-empty span {
115
+ max-width: 34ch;
116
+ }
117
+
118
+ .table-root {
119
+ display: flex;
120
+ flex-direction: column;
121
+ width: 100%;
122
+ height: 100%;
123
+ min-height: 0;
124
+ overflow: hidden;
125
+ box-sizing: border-box;
126
+ }
127
+
128
+ .table-scroll {
129
+ flex: 1 1 auto;
130
+ min-height: 0;
131
+ width: 100%;
132
+ overflow: auto;
133
+ scrollbar-width: thin;
134
+ }
135
+
136
+ .table {
137
+ width: 100%;
138
+ /* collapse lets tbody text paint through sticky headers */
139
+ border-collapse: separate;
140
+ border-spacing: 0;
141
+ table-layout: fixed;
142
+ }
143
+
144
+ .table thead {
145
+ position: sticky;
146
+ top: 0;
147
+ z-index: 2;
148
+ background: var(--ui9000-color-surface, #ffffff);
149
+ }
150
+
151
+ .table thead th {
152
+ position: sticky;
153
+ top: 0;
154
+ z-index: 2;
155
+ background: var(--ui9000-color-surface, #ffffff);
156
+ background-clip: padding-box;
157
+ color: var(--ui9000-color-text, #111827);
158
+ font-weight: 600;
159
+ font-size: 13px;
160
+ letter-spacing: 0.01em;
161
+ text-transform: capitalize;
162
+ box-shadow: 0 1px 0 var(--ui9000-color-grid, #e5e7eb);
163
+ }
164
+
165
+ .table th,
166
+ .table td {
167
+ padding: 10px 12px;
168
+ vertical-align: middle;
169
+ overflow: hidden;
170
+ text-overflow: ellipsis;
171
+ white-space: nowrap;
172
+ border-bottom: 1px solid var(--ui9000-color-grid, #e5e7eb);
173
+ color: var(--ui9000-color-text-muted, #6b7280);
174
+ font-size: 14px;
175
+ font-weight: 400;
176
+ line-height: 20px;
177
+ text-align: left;
178
+ }
179
+
180
+ .table tbody tr:last-child td {
181
+ border-bottom: none;
182
+ }
183
+
184
+ .table-badge {
185
+ display: inline-block;
186
+ padding: 2px 8px;
187
+ border-radius: 999px;
188
+ font-size: 12px;
189
+ font-weight: 600;
190
+ line-height: 16px;
191
+ }
192
+
193
+ .table-badge[data-type='success'] {
194
+ color: #0f7b4a;
195
+ background: #d9f5e7;
196
+ }
197
+
198
+ .table-badge[data-type='error'] {
199
+ color: #b42318;
200
+ background: #fde8e6;
201
+ }
202
+
203
+ .text-pane {
204
+ width: 100%;
205
+ height: 100%;
206
+ min-height: 0;
207
+ overflow: auto;
208
+ padding: 8px;
209
+ box-sizing: border-box;
210
+ font-size: 14px;
211
+ font-weight: 400;
212
+ line-height: 20px;
213
+ color: var(--ui9000-color-text, #111827);
214
+ text-align: left;
215
+ }
216
+
217
+ .text-pane .md p {
218
+ margin: 0 0 10px;
219
+ }
220
+
221
+ .text-pane .md h1,
222
+ .text-pane .md h2,
223
+ .text-pane .md h3 {
224
+ margin: 0 0 8px;
225
+ font-weight: 600;
226
+ color: var(--ui9000-color-text, #111827);
227
+ }
228
+
229
+ .text-pane .md h1 {
230
+ font-size: 1.25rem;
231
+ }
232
+
233
+ .text-pane .md h2 {
234
+ font-size: 1.1rem;
235
+ }
236
+
237
+ .text-pane .md h3 {
238
+ font-size: 1rem;
239
+ }
240
+
241
+ .text-pane .md ul,
242
+ .text-pane .md ol {
243
+ margin: 0 0 10px;
244
+ padding-left: 16px;
245
+ }
246
+
247
+ .text-pane .md li {
248
+ margin: 1px 0;
249
+ padding-bottom: 5px;
250
+ }
251
+
252
+ .text-pane .md code {
253
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
254
+ font-size: 0.9em;
255
+ }
256
+
257
+ .text-pane .md pre {
258
+ margin: 0 0 10px;
259
+ padding: 8px;
260
+ overflow: auto;
261
+ background: var(--ui9000-color-background, #f3f4f6);
262
+ border-radius: 6px;
263
+ }
264
+
265
+ .text-pane .md a {
266
+ color: var(--ui9000-color-primary, #473dd9);
267
+ }
268
+
269
+ .image-pane {
270
+ display: flex;
271
+ width: 100%;
272
+ height: 100%;
273
+ border-radius: 6px;
274
+ overflow: hidden;
275
+ }
276
+
277
+ .image-pane img {
278
+ width: 100%;
279
+ height: 100%;
280
+ object-fit: cover;
281
+ }
282
+ `;
283
+ export {
284
+ customWidgetStyles
285
+ };
286
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sources":["../../../../src/components/custom-widget/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nimport { KPI_ROW_HEIGHT, PANE_GAP } from '../lib/layout.js';\n\nexport const customWidgetStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 220px;\n overflow: hidden;\n border-radius: 8px;\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 .custom-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: inherit;\n overflow: hidden;\n }\n\n /* Nested charts keep plot chrome; the pane is the rounded zone */\n .pane ui9000-chart-renderer {\n min-height: 0;\n }\n\n .kpi-band {\n flex: 0 0 auto;\n height: ${KPI_ROW_HEIGHT}px;\n min-height: ${KPI_ROW_HEIGHT}px;\n max-height: ${KPI_ROW_HEIGHT}px;\n width: 100%;\n overflow: hidden;\n }\n\n .custom-content {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n width: 100%;\n gap: ${PANE_GAP}px;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .pane {\n display: flex;\n align-items: stretch;\n justify-content: center;\n min-width: 0;\n min-height: 0;\n flex: 1 1 0;\n overflow: hidden;\n --ui9000-host-min-height: 0;\n --ui9000-plot-min-height: 0;\n }\n\n .pane[data-kind='chartWidget'],\n .pane[data-kind='tableWidget'],\n .pane[data-kind='textWidget'],\n .pane[data-kind='imageWidget'] {\n border: 1px solid var(--ui9000-color-border, #e5e7eb);\n border-radius: 8px;\n background: var(--ui9000-color-surface, #fff);\n }\n\n .custom-content[data-direction='vertical'][data-panes='2'] .pane {\n flex: 1 1 50%;\n max-width: 50%;\n }\n\n .custom-content[data-direction='horizontal'][data-panes='2'] .pane {\n flex: 1 1 0;\n min-height: 0;\n }\n\n .pane > * {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n }\n\n .pane-empty,\n .default-state {\n display: grid;\n place-items: center;\n align-content: center;\n width: 100%;\n height: 100%;\n padding: 1rem;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n line-height: 1.4;\n box-sizing: border-box;\n }\n\n .pane-empty strong,\n .default-state strong {\n display: block;\n margin-bottom: 0.25rem;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n }\n\n .default-state span,\n .pane-empty span {\n max-width: 34ch;\n }\n\n .table-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .table-scroll {\n flex: 1 1 auto;\n min-height: 0;\n width: 100%;\n overflow: auto;\n scrollbar-width: thin;\n }\n\n .table {\n width: 100%;\n /* collapse lets tbody text paint through sticky headers */\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n }\n\n .table thead {\n position: sticky;\n top: 0;\n z-index: 2;\n background: var(--ui9000-color-surface, #ffffff);\n }\n\n .table thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background: var(--ui9000-color-surface, #ffffff);\n background-clip: padding-box;\n color: var(--ui9000-color-text, #111827);\n font-weight: 600;\n font-size: 13px;\n letter-spacing: 0.01em;\n text-transform: capitalize;\n box-shadow: 0 1px 0 var(--ui9000-color-grid, #e5e7eb);\n }\n\n .table th,\n .table td {\n padding: 10px 12px;\n vertical-align: middle;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n border-bottom: 1px solid var(--ui9000-color-grid, #e5e7eb);\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n text-align: left;\n }\n\n .table tbody tr:last-child td {\n border-bottom: none;\n }\n\n .table-badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 12px;\n font-weight: 600;\n line-height: 16px;\n }\n\n .table-badge[data-type='success'] {\n color: #0f7b4a;\n background: #d9f5e7;\n }\n\n .table-badge[data-type='error'] {\n color: #b42318;\n background: #fde8e6;\n }\n\n .text-pane {\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: auto;\n padding: 8px;\n box-sizing: border-box;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n color: var(--ui9000-color-text, #111827);\n text-align: left;\n }\n\n .text-pane .md p {\n margin: 0 0 10px;\n }\n\n .text-pane .md h1,\n .text-pane .md h2,\n .text-pane .md h3 {\n margin: 0 0 8px;\n font-weight: 600;\n color: var(--ui9000-color-text, #111827);\n }\n\n .text-pane .md h1 {\n font-size: 1.25rem;\n }\n\n .text-pane .md h2 {\n font-size: 1.1rem;\n }\n\n .text-pane .md h3 {\n font-size: 1rem;\n }\n\n .text-pane .md ul,\n .text-pane .md ol {\n margin: 0 0 10px;\n padding-left: 16px;\n }\n\n .text-pane .md li {\n margin: 1px 0;\n padding-bottom: 5px;\n }\n\n .text-pane .md code {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 0.9em;\n }\n\n .text-pane .md pre {\n margin: 0 0 10px;\n padding: 8px;\n overflow: auto;\n background: var(--ui9000-color-background, #f3f4f6);\n border-radius: 6px;\n }\n\n .text-pane .md a {\n color: var(--ui9000-color-primary, #473dd9);\n }\n\n .image-pane {\n display: flex;\n width: 100%;\n height: 100%;\n border-radius: 6px;\n overflow: hidden;\n }\n\n .image-pane img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`;\n"],"names":[],"mappings":";;AAIO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cA8BpB,cAAc;AAAA,kBACV,cAAc;AAAA,kBACd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWrB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,48 @@
1
+ import { PropertyValues, TemplateResult } from 'lit';
2
+ import { Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';
3
+ import { WidgetScale } from '../../../types/index.js';
4
+ import { ArrangingDirection } from '../lib/index.js';
5
+ /**
6
+ * FuseDash CustomWidget shell: title, optional KPI band, and up to two arranged
7
+ * panes. Chart panes mount `ui9000-chart-renderer`, the KPI band mounts
8
+ * `ui9000-kpi-widget`; table / text / image panes render inline. Child charts
9
+ * are lazy-loaded so this entry stays small.
10
+ */
11
+ export declare class Ui9000CustomWidget extends Ui9000ChartElement {
12
+ static styles: import('lit').CSSResult[];
13
+ scale: WidgetScale;
14
+ /** Overrides `arranging.direction` from the payload */
15
+ direction: ArrangingDirection | '';
16
+ showGrid: boolean;
17
+ showLegend: boolean;
18
+ showTooltip: boolean;
19
+ private _model;
20
+ connectedCallback(): void;
21
+ willUpdate(changed: PropertyValues): void;
22
+ /** Register the child elements this model actually uses. */
23
+ private loadPaneElements;
24
+ private get resolvedDirection();
25
+ /** chart-renderer reads absent as "unset", so forward an explicit value */
26
+ private flag;
27
+ /**
28
+ * Inner FuseDash chartType for the chart pane. Must be forwarded as
29
+ * `chart-type` so the renderer does not treat `isCustom` as customWidget.
30
+ */
31
+ private paneChartType;
32
+ /** KPI cards only — omit widget `name` so the band does not repeat the shell title */
33
+ private kpiDataJson;
34
+ private renderEmpty;
35
+ private renderTable;
36
+ private renderText;
37
+ private renderImage;
38
+ private renderPane;
39
+ private renderKpiBand;
40
+ render(): TemplateResult<1>;
41
+ }
42
+ export declare function registerCustomWidget(): void;
43
+ declare global {
44
+ interface HTMLElementTagNameMap {
45
+ 'ui9000-custom-widget': Ui9000CustomWidget;
46
+ }
47
+ }
48
+ //# sourceMappingURL=ui9000-custom-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui9000-custom-widget.d.ts","sourceRoot":"","sources":["../../../../src/components/custom-widget/element/ui9000-custom-widget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAI9E,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,iBAAiB,CAAC;AA0BzB;;;;;GAKG;AACH,qBACa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAgB,MAAM,4BAA0C;IAGhE,KAAK,EAAE,WAAW,CAAa;IAE/B,uDAAuD;IAEvD,SAAS,EAAE,kBAAkB,GAAG,EAAE,CAAM;IAGxC,QAAQ,UAAQ;IAGhB,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,MAAM,CAAkC;IAEvC,iBAAiB,IAAI,IAAI;IAMzB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAOlD,4DAA4D;YAC9C,gBAAgB;IAS9B,OAAO,KAAK,iBAAiB,GAI5B;IAED,2EAA2E;IAC3E,OAAO,CAAC,IAAI;IAIZ;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB,sFAAsF;IACtF,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,aAAa;IAYZ,MAAM;CAyBhB;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}