@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.
- package/CHANGELOG.md +6 -0
- package/dist/components/bar-chart/element/styles.js +3 -3
- package/dist/components/bar-chart/element/styles.js.map +1 -1
- package/dist/components/box-plot-chart/element/styles.js +3 -3
- package/dist/components/box-plot-chart/element/styles.js.map +1 -1
- package/dist/components/chart-renderer/element/styles.d.ts.map +1 -1
- package/dist/components/chart-renderer/element/styles.js +4 -1
- package/dist/components/chart-renderer/element/styles.js.map +1 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +12 -0
- package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
- package/dist/components/chart-renderer/metadata.json.d.ts +6 -1
- package/dist/components/chart-renderer/metadata.json.js +1 -1
- package/dist/components/custom-widget/element/styles.d.ts +2 -0
- package/dist/components/custom-widget/element/styles.d.ts.map +1 -0
- package/dist/components/custom-widget/element/styles.js +286 -0
- package/dist/components/custom-widget/element/styles.js.map +1 -0
- package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts +48 -0
- package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts.map +1 -0
- package/dist/components/custom-widget/element/ui9000-custom-widget.js +265 -0
- package/dist/components/custom-widget/element/ui9000-custom-widget.js.map +1 -0
- package/dist/components/custom-widget/index.d.ts +4 -0
- package/dist/components/custom-widget/index.d.ts.map +1 -0
- package/dist/components/custom-widget/index.js +19 -0
- package/dist/components/custom-widget/index.js.map +1 -0
- package/dist/components/custom-widget/lib/content.d.ts +13 -0
- package/dist/components/custom-widget/lib/content.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/content.js +22 -0
- package/dist/components/custom-widget/lib/content.js.map +1 -0
- package/dist/components/custom-widget/lib/index.d.ts +8 -0
- package/dist/components/custom-widget/lib/index.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/layout.d.ts +35 -0
- package/dist/components/custom-widget/lib/layout.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/layout.js +13 -0
- package/dist/components/custom-widget/lib/layout.js.map +1 -0
- package/dist/components/custom-widget/lib/markdown.d.ts +4 -0
- package/dist/components/custom-widget/lib/markdown.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/markdown.js +125 -0
- package/dist/components/custom-widget/lib/markdown.js.map +1 -0
- package/dist/components/custom-widget/lib/normalize.d.ts +6 -0
- package/dist/components/custom-widget/lib/normalize.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/normalize.js +144 -0
- package/dist/components/custom-widget/lib/normalize.js.map +1 -0
- package/dist/components/custom-widget/lib/table.d.ts +55 -0
- package/dist/components/custom-widget/lib/table.d.ts.map +1 -0
- package/dist/components/custom-widget/lib/table.js +181 -0
- package/dist/components/custom-widget/lib/table.js.map +1 -0
- package/dist/components/custom-widget/lib/types.d.ts +55 -0
- package/dist/components/custom-widget/lib/types.d.ts.map +1 -0
- package/dist/components/custom-widget/metadata.json.d.ts +96 -0
- package/dist/components/custom-widget/metadata.json.js +42 -0
- package/dist/components/custom-widget/metadata.json.js.map +1 -0
- package/dist/components/histogram-chart/element/styles.js +2 -2
- package/dist/components/histogram-chart/element/styles.js.map +1 -1
- package/dist/components/line-chart/element/styles.js +2 -2
- package/dist/components/line-chart/element/styles.js.map +1 -1
- package/dist/components/lollipop/element/styles.js +3 -3
- package/dist/components/lollipop/element/styles.js.map +1 -1
- package/dist/components/step-line-chart/element/styles.js +2 -2
- package/dist/components/step-line-chart/element/styles.js.map +1 -1
- package/dist/element/chart-shell-styles.d.ts.map +1 -1
- package/dist/element/chart-shell-styles.js +11 -4
- package/dist/element/chart-shell-styles.js.map +1 -1
- package/dist/element/ui9000-chart-base.d.ts +5 -0
- package/dist/element/ui9000-chart-base.d.ts.map +1 -1
- package/dist/element/ui9000-chart-base.js +7 -1
- package/dist/element/ui9000-chart-base.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/lazy/custom-widget.d.ts +4 -0
- package/dist/lazy/custom-widget.d.ts.map +1 -0
- package/dist/lazy/index.d.ts +2 -1
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +8 -0
- package/dist/lazy/index.js.map +1 -1
- 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,
|
|
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,
|
|
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 @@
|
|
|
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"}
|