@design.estate/dees-catalog 3.55.2 → 3.55.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +2527 -1286
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-chart/dees-chart-area/styles.js +12 -10
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/component.d.ts +26 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/component.js +200 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/demo.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/demo.js +116 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/index.js +2 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/styles.js +7 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/template.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-bar/template.js +12 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/component.d.ts +25 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/component.js +188 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/demo.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/demo.js +122 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/index.js +2 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/styles.js +11 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/template.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-donut/template.js +12 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-base.d.ts +22 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-base.js +140 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-styles.js +36 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-theme.d.ts +15 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-echarts-theme.js +67 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/component.d.ts +25 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/component.js +224 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/demo.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/demo.js +124 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/index.js +2 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/styles.js +11 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/template.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-gauge/template.js +12 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.js +25 -25
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/component.d.ts +28 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/component.js +176 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/demo.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/demo.js +113 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/index.js +2 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/styles.js +7 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/template.d.ts +3 -0
- package/dist_ts_web/elements/00group-chart/dees-chart-radar/template.js +12 -0
- package/dist_ts_web/elements/00group-chart/index.d.ts +4 -0
- package/dist_ts_web/elements/00group-chart/index.js +5 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js +12 -7
- package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.js +12 -12
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +19 -19
- package/dist_ts_web/elements/00group-dataview/dees-table/styles.js +27 -27
- package/dist_ts_web/elements/00group-input/dees-input-code/dees-input-code.js +16 -16
- package/dist_ts_web/elements/00group-input/dees-input-richtext/styles.js +23 -21
- package/dist_ts_web/elements/00group-layout/dees-tile/dees-tile.js +7 -7
- package/dist_ts_web/elements/00group-media/dees-pdf-viewer/styles.js +5 -3
- package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +11 -11
- package/dist_ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.js +4 -4
- package/dist_ts_web/elements/00group-workspace/dees-workspace-terminal-preview/dees-workspace-terminal-preview.js +6 -6
- package/dist_ts_web/services/DeesServiceLibLoader.d.ts +31 -1
- package/dist_ts_web/services/DeesServiceLibLoader.js +31 -1
- package/dist_ts_web/services/index.d.ts +1 -1
- package/dist_ts_web/services/versions.d.ts +1 -0
- package/dist_ts_web/services/versions.js +2 -1
- package/dist_watch/bundle.js +2527 -1286
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +2 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-chart/dees-chart-area/styles.ts +11 -9
- package/ts_web/elements/00group-chart/dees-chart-bar/component.ts +142 -0
- package/ts_web/elements/00group-chart/dees-chart-bar/demo.ts +120 -0
- package/ts_web/elements/00group-chart/dees-chart-bar/index.ts +1 -0
- package/ts_web/elements/00group-chart/dees-chart-bar/styles.ts +7 -0
- package/ts_web/elements/00group-chart/dees-chart-bar/template.ts +13 -0
- package/ts_web/elements/00group-chart/dees-chart-donut/component.ts +132 -0
- package/ts_web/elements/00group-chart/dees-chart-donut/demo.ts +127 -0
- package/ts_web/elements/00group-chart/dees-chart-donut/index.ts +1 -0
- package/ts_web/elements/00group-chart/dees-chart-donut/styles.ts +11 -0
- package/ts_web/elements/00group-chart/dees-chart-donut/template.ts +13 -0
- package/ts_web/elements/00group-chart/dees-chart-echarts-base.ts +107 -0
- package/ts_web/elements/00group-chart/dees-chart-echarts-styles.ts +36 -0
- package/ts_web/elements/00group-chart/dees-chart-echarts-theme.ts +72 -0
- package/ts_web/elements/00group-chart/dees-chart-gauge/component.ts +161 -0
- package/ts_web/elements/00group-chart/dees-chart-gauge/demo.ts +125 -0
- package/ts_web/elements/00group-chart/dees-chart-gauge/index.ts +1 -0
- package/ts_web/elements/00group-chart/dees-chart-gauge/styles.ts +11 -0
- package/ts_web/elements/00group-chart/dees-chart-gauge/template.ts +13 -0
- package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts +24 -24
- package/ts_web/elements/00group-chart/dees-chart-radar/component.ts +130 -0
- package/ts_web/elements/00group-chart/dees-chart-radar/demo.ts +119 -0
- package/ts_web/elements/00group-chart/dees-chart-radar/index.ts +1 -0
- package/ts_web/elements/00group-chart/dees-chart-radar/styles.ts +7 -0
- package/ts_web/elements/00group-chart/dees-chart-radar/template.ts +13 -0
- package/ts_web/elements/00group-chart/index.ts +4 -0
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts +12 -5
- package/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts +11 -11
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +18 -18
- package/ts_web/elements/00group-dataview/dees-table/styles.ts +26 -26
- package/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +15 -15
- package/ts_web/elements/00group-input/dees-input-richtext/styles.ts +22 -20
- package/ts_web/elements/00group-layout/dees-tile/dees-tile.ts +6 -6
- package/ts_web/elements/00group-media/dees-pdf-viewer/styles.ts +4 -2
- package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +10 -10
- package/ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.ts +3 -3
- package/ts_web/elements/00group-workspace/dees-workspace-terminal-preview/dees-workspace-terminal-preview.ts +5 -5
- package/ts_web/services/DeesServiceLibLoader.ts +58 -1
- package/ts_web/services/index.ts +1 -1
- package/ts_web/services/versions.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design.estate/dees-catalog",
|
|
3
|
-
"version": "3.55.
|
|
3
|
+
"version": "3.55.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
|
|
6
6
|
"main": "dist_ts_web/index.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"@tiptap/extension-underline": "^2.23.0",
|
|
35
35
|
"@tiptap/starter-kit": "^2.23.0",
|
|
36
36
|
"@tsclass/tsclass": "^9.5.0",
|
|
37
|
+
"echarts": "^5.6.0",
|
|
37
38
|
"lightweight-charts": "^5.1.0",
|
|
38
39
|
"highlight.js": "11.11.1",
|
|
39
40
|
"ibantools": "^4.5.1",
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '3.55.
|
|
6
|
+
version: '3.55.4',
|
|
7
7
|
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
|
8
8
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { css, cssManager } from '@design.estate/dees-element';
|
|
2
|
+
import { themeDefaultStyles } from '../../00theme.js';
|
|
2
3
|
|
|
3
4
|
export const chartAreaStyles = [
|
|
5
|
+
themeDefaultStyles,
|
|
4
6
|
cssManager.defaultStyles,
|
|
5
7
|
css`
|
|
6
8
|
:host {
|
|
7
9
|
display: block;
|
|
8
10
|
height: 400px;
|
|
9
11
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
|
|
10
|
-
color:
|
|
12
|
+
color: var(--dees-color-text-primary);
|
|
11
13
|
font-size: 14px;
|
|
12
14
|
}
|
|
13
15
|
dees-tile {
|
|
@@ -24,7 +26,7 @@ export const chartAreaStyles = [
|
|
|
24
26
|
font-size: 14px;
|
|
25
27
|
font-weight: 500;
|
|
26
28
|
letter-spacing: -0.01em;
|
|
27
|
-
color:
|
|
29
|
+
color: var(--dees-color-text-secondary);
|
|
28
30
|
}
|
|
29
31
|
.expandBtn {
|
|
30
32
|
display: flex;
|
|
@@ -36,13 +38,13 @@ export const chartAreaStyles = [
|
|
|
36
38
|
border-radius: 4px;
|
|
37
39
|
background: transparent;
|
|
38
40
|
cursor: pointer;
|
|
39
|
-
color:
|
|
41
|
+
color: var(--dees-color-text-muted);
|
|
40
42
|
transition: all 0.15s ease;
|
|
41
43
|
padding: 0;
|
|
42
44
|
}
|
|
43
45
|
.expandBtn:hover {
|
|
44
|
-
background:
|
|
45
|
-
color:
|
|
46
|
+
background: var(--dees-color-hover);
|
|
47
|
+
color: var(--dees-color-text-secondary);
|
|
46
48
|
}
|
|
47
49
|
.chartContainer {
|
|
48
50
|
position: absolute;
|
|
@@ -64,7 +66,7 @@ export const chartAreaStyles = [
|
|
|
64
66
|
}
|
|
65
67
|
.statsSeries + .statsSeries {
|
|
66
68
|
padding-left: 24px;
|
|
67
|
-
border-left: 1px solid
|
|
69
|
+
border-left: 1px solid var(--dees-color-border-default);
|
|
68
70
|
}
|
|
69
71
|
.statsColor {
|
|
70
72
|
width: 8px;
|
|
@@ -75,15 +77,15 @@ export const chartAreaStyles = [
|
|
|
75
77
|
.statsName {
|
|
76
78
|
font-weight: 500;
|
|
77
79
|
font-size: 11px;
|
|
78
|
-
color:
|
|
80
|
+
color: var(--dees-color-text-secondary);
|
|
79
81
|
margin-right: 4px;
|
|
80
82
|
}
|
|
81
83
|
.statsItem {
|
|
82
84
|
font-size: 11px;
|
|
83
|
-
color:
|
|
85
|
+
color: var(--dees-color-text-muted);
|
|
84
86
|
}
|
|
85
87
|
.statsItem strong {
|
|
86
|
-
color:
|
|
88
|
+
color: var(--dees-color-text-primary);
|
|
87
89
|
}
|
|
88
90
|
.lw-tooltip {
|
|
89
91
|
position: absolute;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import {
|
|
2
|
+
customElement,
|
|
3
|
+
property,
|
|
4
|
+
type TemplateResult,
|
|
5
|
+
} from '@design.estate/dees-element';
|
|
6
|
+
|
|
7
|
+
import { DeesChartEchartsBase } from '../dees-chart-echarts-base.js';
|
|
8
|
+
import { demoFunc } from './demo.js';
|
|
9
|
+
import { barStyles } from './styles.js';
|
|
10
|
+
import { renderChartBar } from './template.js';
|
|
11
|
+
import { getEchartsSeriesColors, getThemeColors } from '../dees-chart-echarts-theme.js';
|
|
12
|
+
|
|
13
|
+
export interface IBarSeriesItem {
|
|
14
|
+
name: string;
|
|
15
|
+
data: number[];
|
|
16
|
+
color?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
'dees-chart-bar': DeesChartBar;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@customElement('dees-chart-bar')
|
|
26
|
+
export class DeesChartBar extends DeesChartEchartsBase {
|
|
27
|
+
public static demo = demoFunc;
|
|
28
|
+
public static demoGroups = ['Chart'];
|
|
29
|
+
|
|
30
|
+
@property({ type: Array })
|
|
31
|
+
accessor categories: string[] = [];
|
|
32
|
+
|
|
33
|
+
@property({ type: Array })
|
|
34
|
+
accessor series: IBarSeriesItem[] = [];
|
|
35
|
+
|
|
36
|
+
@property({ type: Boolean })
|
|
37
|
+
accessor horizontal: boolean = false;
|
|
38
|
+
|
|
39
|
+
@property({ type: Boolean })
|
|
40
|
+
accessor stacked: boolean = false;
|
|
41
|
+
|
|
42
|
+
@property({ type: Boolean })
|
|
43
|
+
accessor showLegend: boolean = true;
|
|
44
|
+
|
|
45
|
+
@property({ attribute: false })
|
|
46
|
+
accessor valueFormatter: (value: number) => string = (val) => `${val}`;
|
|
47
|
+
|
|
48
|
+
public static styles = barStyles;
|
|
49
|
+
|
|
50
|
+
public render(): TemplateResult {
|
|
51
|
+
return renderChartBar(this);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public async updated(changedProperties: Map<string, any>) {
|
|
55
|
+
super.updated(changedProperties);
|
|
56
|
+
if (
|
|
57
|
+
this.chartInstance &&
|
|
58
|
+
(changedProperties.has('categories') ||
|
|
59
|
+
changedProperties.has('series') ||
|
|
60
|
+
changedProperties.has('horizontal') ||
|
|
61
|
+
changedProperties.has('stacked') ||
|
|
62
|
+
changedProperties.has('showLegend'))
|
|
63
|
+
) {
|
|
64
|
+
this.updateChart();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
protected buildOption(): Record<string, any> {
|
|
69
|
+
const colors = getThemeColors(this.goBright);
|
|
70
|
+
const seriesColors = getEchartsSeriesColors(this.goBright);
|
|
71
|
+
const formatter = this.valueFormatter;
|
|
72
|
+
|
|
73
|
+
const categoryAxis: Record<string, any> = {
|
|
74
|
+
type: 'category',
|
|
75
|
+
data: this.categories,
|
|
76
|
+
axisLine: { lineStyle: { color: colors.borderStrong } },
|
|
77
|
+
axisLabel: { color: colors.textMuted },
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const valueAxis: Record<string, any> = {
|
|
81
|
+
type: 'value',
|
|
82
|
+
axisLine: { show: false },
|
|
83
|
+
axisLabel: {
|
|
84
|
+
color: colors.textMuted,
|
|
85
|
+
formatter: (val: number) => formatter(val),
|
|
86
|
+
},
|
|
87
|
+
splitLine: { lineStyle: { color: colors.borderSubtle } },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const seriesData = this.series.map((s, index) => ({
|
|
91
|
+
name: s.name,
|
|
92
|
+
type: 'bar' as const,
|
|
93
|
+
data: s.data,
|
|
94
|
+
stack: this.stacked ? 'total' : undefined,
|
|
95
|
+
itemStyle: {
|
|
96
|
+
color: s.color || seriesColors[index % seriesColors.length],
|
|
97
|
+
borderRadius: this.stacked ? [0, 0, 0, 0] : this.horizontal ? [0, 4, 4, 0] : [4, 4, 0, 0],
|
|
98
|
+
},
|
|
99
|
+
barMaxWidth: 40,
|
|
100
|
+
emphasis: {
|
|
101
|
+
itemStyle: {
|
|
102
|
+
shadowBlur: 6,
|
|
103
|
+
shadowColor: 'rgba(0, 0, 0, 0.15)',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
}));
|
|
107
|
+
|
|
108
|
+
// For stacked bars, round the top corners of the last visible series
|
|
109
|
+
if (this.stacked && seriesData.length > 0) {
|
|
110
|
+
const last = seriesData[seriesData.length - 1];
|
|
111
|
+
last.itemStyle.borderRadius = this.horizontal ? [0, 4, 4, 0] : [4, 4, 0, 0];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
tooltip: {
|
|
116
|
+
trigger: 'axis',
|
|
117
|
+
axisPointer: { type: 'shadow' },
|
|
118
|
+
formatter: (params: any) => {
|
|
119
|
+
const items = Array.isArray(params) ? params : [params];
|
|
120
|
+
let result = `<strong>${items[0].axisValueLabel}</strong><br/>`;
|
|
121
|
+
for (const p of items) {
|
|
122
|
+
result += `${p.marker} ${p.seriesName}: <strong>${formatter(p.value)}</strong><br/>`;
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
legend: this.showLegend && this.series.length > 1
|
|
128
|
+
? { bottom: 8, itemWidth: 10, itemHeight: 10 }
|
|
129
|
+
: { show: false },
|
|
130
|
+
grid: {
|
|
131
|
+
left: 16,
|
|
132
|
+
right: 16,
|
|
133
|
+
top: 16,
|
|
134
|
+
bottom: this.showLegend && this.series.length > 1 ? 40 : 16,
|
|
135
|
+
containLabel: true,
|
|
136
|
+
},
|
|
137
|
+
xAxis: this.horizontal ? valueAxis : categoryAxis,
|
|
138
|
+
yAxis: this.horizontal ? categoryAxis : valueAxis,
|
|
139
|
+
series: seriesData,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { html, css, cssManager } from '@design.estate/dees-element';
|
|
2
|
+
import type { DeesChartBar } from './component.js';
|
|
3
|
+
import '@design.estate/dees-wcctools/demotools';
|
|
4
|
+
import './component.js';
|
|
5
|
+
|
|
6
|
+
export const demoFunc = () => {
|
|
7
|
+
const endpointCategories = ['/api/users', '/api/orders', '/api/products', '/api/auth', '/api/search'];
|
|
8
|
+
const endpointSeries = [
|
|
9
|
+
{ name: 'GET', data: [1240, 890, 720, 2100, 560] },
|
|
10
|
+
{ name: 'POST', data: [320, 450, 180, 890, 40] },
|
|
11
|
+
{ name: 'PUT', data: [90, 210, 150, 30, 10] },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const regionCategories = ['US-East', 'US-West', 'EU', 'Asia', 'Other'];
|
|
15
|
+
const regionSeries = [
|
|
16
|
+
{ name: 'Requests', data: [4500, 3200, 2800, 1900, 600] },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
return html`
|
|
20
|
+
<dees-demowrapper .runAfterRender=${async (elementArg: HTMLElement) => {
|
|
21
|
+
const vertChart = elementArg.querySelector('#vert-chart') as DeesChartBar;
|
|
22
|
+
const horizChart = elementArg.querySelector('#horiz-chart') as DeesChartBar;
|
|
23
|
+
const stackChart = elementArg.querySelector('#stack-chart') as DeesChartBar;
|
|
24
|
+
|
|
25
|
+
const buttons = elementArg.querySelectorAll('dees-button');
|
|
26
|
+
buttons.forEach((button: any) => {
|
|
27
|
+
const text = button.text?.trim();
|
|
28
|
+
if (text === 'Randomize') {
|
|
29
|
+
button.addEventListener('click', () => {
|
|
30
|
+
vertChart.series = endpointSeries.map((s) => ({
|
|
31
|
+
...s,
|
|
32
|
+
data: s.data.map((v) => Math.round(v * (0.5 + Math.random()))),
|
|
33
|
+
}));
|
|
34
|
+
horizChart.series = regionSeries.map((s) => ({
|
|
35
|
+
...s,
|
|
36
|
+
data: s.data.map((v) => Math.round(v * (0.5 + Math.random()))),
|
|
37
|
+
}));
|
|
38
|
+
stackChart.series = endpointSeries.map((s) => ({
|
|
39
|
+
...s,
|
|
40
|
+
data: s.data.map((v) => Math.round(v * (0.5 + Math.random()))),
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}}>
|
|
46
|
+
<style>
|
|
47
|
+
${css`
|
|
48
|
+
.demoBox {
|
|
49
|
+
position: relative;
|
|
50
|
+
background: ${cssManager.bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 9%)')};
|
|
51
|
+
height: 100%;
|
|
52
|
+
width: 100%;
|
|
53
|
+
padding: 40px;
|
|
54
|
+
box-sizing: border-box;
|
|
55
|
+
display: flex;
|
|
56
|
+
flex-direction: column;
|
|
57
|
+
gap: 24px;
|
|
58
|
+
}
|
|
59
|
+
.chartRow {
|
|
60
|
+
display: grid;
|
|
61
|
+
grid-template-columns: 1fr 1fr;
|
|
62
|
+
gap: 24px;
|
|
63
|
+
}
|
|
64
|
+
.controls {
|
|
65
|
+
display: flex;
|
|
66
|
+
gap: 12px;
|
|
67
|
+
margin-bottom: 8px;
|
|
68
|
+
}
|
|
69
|
+
.info {
|
|
70
|
+
color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')};
|
|
71
|
+
font-size: 12px;
|
|
72
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Geist Sans', sans-serif;
|
|
73
|
+
text-align: center;
|
|
74
|
+
margin-top: 8px;
|
|
75
|
+
}
|
|
76
|
+
`}
|
|
77
|
+
</style>
|
|
78
|
+
<div class="demoBox">
|
|
79
|
+
<div class="controls">
|
|
80
|
+
<dees-button-group label="Actions:">
|
|
81
|
+
<dees-button>Randomize</dees-button>
|
|
82
|
+
</dees-button-group>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div class="chartRow">
|
|
86
|
+
<dees-chart-bar
|
|
87
|
+
id="vert-chart"
|
|
88
|
+
.label=${'Requests by Endpoint'}
|
|
89
|
+
.categories=${endpointCategories}
|
|
90
|
+
.series=${endpointSeries}
|
|
91
|
+
.valueFormatter=${(val: number) => `${val} req`}
|
|
92
|
+
></dees-chart-bar>
|
|
93
|
+
|
|
94
|
+
<dees-chart-bar
|
|
95
|
+
id="horiz-chart"
|
|
96
|
+
.label=${'Traffic by Region'}
|
|
97
|
+
.categories=${regionCategories}
|
|
98
|
+
.series=${regionSeries}
|
|
99
|
+
.horizontal=${true}
|
|
100
|
+
.valueFormatter=${(val: number) => `${(val / 1000).toFixed(1)}k`}
|
|
101
|
+
></dees-chart-bar>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<dees-chart-bar
|
|
105
|
+
id="stack-chart"
|
|
106
|
+
.label=${'Stacked: Requests by Endpoint'}
|
|
107
|
+
.categories=${endpointCategories}
|
|
108
|
+
.series=${endpointSeries}
|
|
109
|
+
.stacked=${true}
|
|
110
|
+
.valueFormatter=${(val: number) => `${val} req`}
|
|
111
|
+
></dees-chart-bar>
|
|
112
|
+
|
|
113
|
+
<div class="info">
|
|
114
|
+
Bar chart with vertical, horizontal, and stacked modes •
|
|
115
|
+
Click 'Randomize' to update data with animation
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</dees-demowrapper>
|
|
119
|
+
`;
|
|
120
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './component.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { html, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import type { DeesChartBar } from './component.js';
|
|
3
|
+
|
|
4
|
+
export const renderChartBar = (component: DeesChartBar): TemplateResult => {
|
|
5
|
+
return html`
|
|
6
|
+
<dees-tile>
|
|
7
|
+
<div slot="header" class="chartHeader">
|
|
8
|
+
<span class="chartLabel">${component.label}</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="chartContainer"></div>
|
|
11
|
+
</dees-tile>
|
|
12
|
+
`;
|
|
13
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import {
|
|
2
|
+
customElement,
|
|
3
|
+
property,
|
|
4
|
+
type TemplateResult,
|
|
5
|
+
} from '@design.estate/dees-element';
|
|
6
|
+
|
|
7
|
+
import { DeesChartEchartsBase } from '../dees-chart-echarts-base.js';
|
|
8
|
+
import { demoFunc } from './demo.js';
|
|
9
|
+
import { donutStyles } from './styles.js';
|
|
10
|
+
import { renderChartDonut } from './template.js';
|
|
11
|
+
import { getEchartsSeriesColors, getThemeColors } from '../dees-chart-echarts-theme.js';
|
|
12
|
+
|
|
13
|
+
export interface IDonutDataItem {
|
|
14
|
+
name: string;
|
|
15
|
+
value: number;
|
|
16
|
+
color?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
'dees-chart-donut': DeesChartDonut;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@customElement('dees-chart-donut')
|
|
26
|
+
export class DeesChartDonut extends DeesChartEchartsBase {
|
|
27
|
+
public static demo = demoFunc;
|
|
28
|
+
public static demoGroups = ['Chart'];
|
|
29
|
+
|
|
30
|
+
@property({ type: Array })
|
|
31
|
+
accessor data: IDonutDataItem[] = [];
|
|
32
|
+
|
|
33
|
+
@property({ type: Boolean })
|
|
34
|
+
accessor showLegend: boolean = true;
|
|
35
|
+
|
|
36
|
+
@property({ type: Boolean })
|
|
37
|
+
accessor showLabels: boolean = true;
|
|
38
|
+
|
|
39
|
+
@property({ type: String })
|
|
40
|
+
accessor innerRadiusPercent: string = '55%';
|
|
41
|
+
|
|
42
|
+
@property({ attribute: false })
|
|
43
|
+
accessor valueFormatter: (value: number) => string = (val) => `${val}`;
|
|
44
|
+
|
|
45
|
+
public static styles = donutStyles;
|
|
46
|
+
|
|
47
|
+
public render(): TemplateResult {
|
|
48
|
+
return renderChartDonut(this);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public async updated(changedProperties: Map<string, any>) {
|
|
52
|
+
super.updated(changedProperties);
|
|
53
|
+
if (
|
|
54
|
+
this.chartInstance &&
|
|
55
|
+
(changedProperties.has('data') ||
|
|
56
|
+
changedProperties.has('showLegend') ||
|
|
57
|
+
changedProperties.has('showLabels') ||
|
|
58
|
+
changedProperties.has('innerRadiusPercent'))
|
|
59
|
+
) {
|
|
60
|
+
this.updateChart();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
protected buildOption(): Record<string, any> {
|
|
65
|
+
const colors = getThemeColors(this.goBright);
|
|
66
|
+
const seriesColors = getEchartsSeriesColors(this.goBright);
|
|
67
|
+
const data = this.data.map((item, index) => ({
|
|
68
|
+
name: item.name,
|
|
69
|
+
value: item.value,
|
|
70
|
+
itemStyle: item.color ? { color: item.color } : { color: seriesColors[index % seriesColors.length] },
|
|
71
|
+
}));
|
|
72
|
+
|
|
73
|
+
const formatter = this.valueFormatter;
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
tooltip: {
|
|
77
|
+
trigger: 'item',
|
|
78
|
+
formatter: (params: any) => {
|
|
79
|
+
return `${params.marker} ${params.name}: <strong>${formatter(params.value)}</strong> (${params.percent}%)`;
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
legend: this.showLegend
|
|
83
|
+
? {
|
|
84
|
+
orient: 'vertical',
|
|
85
|
+
right: 16,
|
|
86
|
+
top: 'center',
|
|
87
|
+
itemWidth: 10,
|
|
88
|
+
itemHeight: 10,
|
|
89
|
+
itemGap: 12,
|
|
90
|
+
formatter: (name: string) => {
|
|
91
|
+
const item = this.data.find((d) => d.name === name);
|
|
92
|
+
return item ? `${name} ${formatter(item.value)}` : name;
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
: { show: false },
|
|
96
|
+
series: [
|
|
97
|
+
{
|
|
98
|
+
type: 'pie',
|
|
99
|
+
radius: [this.innerRadiusPercent, '85%'],
|
|
100
|
+
center: this.showLegend ? ['35%', '50%'] : ['50%', '50%'],
|
|
101
|
+
avoidLabelOverlap: true,
|
|
102
|
+
itemStyle: {
|
|
103
|
+
borderRadius: 4,
|
|
104
|
+
borderColor: 'transparent',
|
|
105
|
+
borderWidth: 2,
|
|
106
|
+
},
|
|
107
|
+
label: this.showLabels
|
|
108
|
+
? {
|
|
109
|
+
show: true,
|
|
110
|
+
formatter: '{b}: {d}%',
|
|
111
|
+
fontSize: 11,
|
|
112
|
+
color: colors.textSecondary,
|
|
113
|
+
textBorderColor: 'transparent',
|
|
114
|
+
}
|
|
115
|
+
: { show: false },
|
|
116
|
+
emphasis: {
|
|
117
|
+
itemStyle: {
|
|
118
|
+
shadowBlur: 10,
|
|
119
|
+
shadowOffsetX: 0,
|
|
120
|
+
shadowColor: 'rgba(0, 0, 0, 0.2)',
|
|
121
|
+
},
|
|
122
|
+
label: {
|
|
123
|
+
show: true,
|
|
124
|
+
fontWeight: 'bold',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
data,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { html, css, cssManager } from '@design.estate/dees-element';
|
|
2
|
+
import type { DeesChartDonut } from './component.js';
|
|
3
|
+
import '@design.estate/dees-wcctools/demotools';
|
|
4
|
+
import './component.js';
|
|
5
|
+
|
|
6
|
+
export const demoFunc = () => {
|
|
7
|
+
const diskData = [
|
|
8
|
+
{ name: 'Documents', value: 42 },
|
|
9
|
+
{ name: 'Media', value: 28 },
|
|
10
|
+
{ name: 'Applications', value: 15 },
|
|
11
|
+
{ name: 'System', value: 10 },
|
|
12
|
+
{ name: 'Other', value: 5 },
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const statusData = [
|
|
16
|
+
{ name: 'Healthy', value: 156 },
|
|
17
|
+
{ name: 'Warning', value: 23 },
|
|
18
|
+
{ name: 'Critical', value: 8 },
|
|
19
|
+
{ name: 'Unknown', value: 3 },
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
const trafficData = [
|
|
23
|
+
{ name: 'API', value: 45200 },
|
|
24
|
+
{ name: 'Static Assets', value: 23100 },
|
|
25
|
+
{ name: 'WebSocket', value: 12800 },
|
|
26
|
+
{ name: 'GraphQL', value: 8900 },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
return html`
|
|
30
|
+
<dees-demowrapper .runAfterRender=${async (elementArg: HTMLElement) => {
|
|
31
|
+
const diskChart = elementArg.querySelector('#disk-chart') as DeesChartDonut;
|
|
32
|
+
const statusChart = elementArg.querySelector('#status-chart') as DeesChartDonut;
|
|
33
|
+
const trafficChart = elementArg.querySelector('#traffic-chart') as DeesChartDonut;
|
|
34
|
+
|
|
35
|
+
// Wire up buttons
|
|
36
|
+
const buttons = elementArg.querySelectorAll('dees-button');
|
|
37
|
+
buttons.forEach((button: any) => {
|
|
38
|
+
const text = button.text?.trim();
|
|
39
|
+
if (text === 'Randomize') {
|
|
40
|
+
button.addEventListener('click', () => {
|
|
41
|
+
diskChart.data = diskData.map((d) => ({
|
|
42
|
+
...d,
|
|
43
|
+
value: Math.round(d.value * (0.5 + Math.random())),
|
|
44
|
+
}));
|
|
45
|
+
statusChart.data = statusData.map((d) => ({
|
|
46
|
+
...d,
|
|
47
|
+
value: Math.round(d.value * (0.3 + Math.random() * 1.4)),
|
|
48
|
+
}));
|
|
49
|
+
trafficChart.data = trafficData.map((d) => ({
|
|
50
|
+
...d,
|
|
51
|
+
value: Math.round(d.value * (0.5 + Math.random())),
|
|
52
|
+
}));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}}>
|
|
57
|
+
<style>
|
|
58
|
+
${css`
|
|
59
|
+
.demoBox {
|
|
60
|
+
position: relative;
|
|
61
|
+
background: ${cssManager.bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 9%)')};
|
|
62
|
+
height: 100%;
|
|
63
|
+
width: 100%;
|
|
64
|
+
padding: 40px;
|
|
65
|
+
box-sizing: border-box;
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
gap: 24px;
|
|
69
|
+
}
|
|
70
|
+
.chartRow {
|
|
71
|
+
display: grid;
|
|
72
|
+
grid-template-columns: 1fr 1fr;
|
|
73
|
+
gap: 24px;
|
|
74
|
+
}
|
|
75
|
+
.controls {
|
|
76
|
+
display: flex;
|
|
77
|
+
gap: 12px;
|
|
78
|
+
margin-bottom: 8px;
|
|
79
|
+
}
|
|
80
|
+
.info {
|
|
81
|
+
color: ${cssManager.bdTheme('hsl(215.4 16.3% 56.9%)', 'hsl(215 20.2% 55.1%)')};
|
|
82
|
+
font-size: 12px;
|
|
83
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Geist Sans', sans-serif;
|
|
84
|
+
text-align: center;
|
|
85
|
+
margin-top: 8px;
|
|
86
|
+
}
|
|
87
|
+
`}
|
|
88
|
+
</style>
|
|
89
|
+
<div class="demoBox">
|
|
90
|
+
<div class="controls">
|
|
91
|
+
<dees-button-group label="Actions:">
|
|
92
|
+
<dees-button>Randomize</dees-button>
|
|
93
|
+
</dees-button-group>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<div class="chartRow">
|
|
97
|
+
<dees-chart-donut
|
|
98
|
+
id="disk-chart"
|
|
99
|
+
.label=${'Disk Usage (GB)'}
|
|
100
|
+
.data=${diskData}
|
|
101
|
+
.valueFormatter=${(val: number) => `${val} GB`}
|
|
102
|
+
></dees-chart-donut>
|
|
103
|
+
|
|
104
|
+
<dees-chart-donut
|
|
105
|
+
id="status-chart"
|
|
106
|
+
.label=${'Service Status'}
|
|
107
|
+
.data=${statusData}
|
|
108
|
+
.valueFormatter=${(val: number) => `${val} services`}
|
|
109
|
+
.innerRadiusPercent=${'0%'}
|
|
110
|
+
></dees-chart-donut>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<dees-chart-donut
|
|
114
|
+
id="traffic-chart"
|
|
115
|
+
.label=${'Traffic Distribution'}
|
|
116
|
+
.data=${trafficData}
|
|
117
|
+
.valueFormatter=${(val: number) => `${(val / 1000).toFixed(1)}k req`}
|
|
118
|
+
></dees-chart-donut>
|
|
119
|
+
|
|
120
|
+
<div class="info">
|
|
121
|
+
Donut chart with configurable inner radius (set to 0% for full pie) •
|
|
122
|
+
Click 'Randomize' to update data with animation
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
</dees-demowrapper>
|
|
126
|
+
`;
|
|
127
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './component.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { html, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import type { DeesChartDonut } from './component.js';
|
|
3
|
+
|
|
4
|
+
export const renderChartDonut = (component: DeesChartDonut): TemplateResult => {
|
|
5
|
+
return html`
|
|
6
|
+
<dees-tile>
|
|
7
|
+
<div slot="header" class="chartHeader">
|
|
8
|
+
<span class="chartLabel">${component.label}</span>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="chartContainer"></div>
|
|
11
|
+
</dees-tile>
|
|
12
|
+
`;
|
|
13
|
+
};
|