@kubex/zinc 1.0.106 → 1.0.108
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/custom-elements.json +231 -83
- package/dist/vscode.html-custom-data.json +21 -10
- package/dist/web-types.json +66 -45
- package/dist/zn.d.ts +68 -34
- package/dist/zn.min.css +1 -1
- package/dist/zn.min.js +1020 -1907
- package/docs/_includes/sidebar.njk +1 -0
- package/docs/pages/components/chart.md +134 -8
- package/docs/pages/components/simple-chart.md +20 -5
- package/docs/pages/components/stat.md +531 -401
- package/docs/pages/getting-started/shimmer-text.md +81 -0
- package/package.json +5 -6
- package/scss/shared/index.scss +1 -0
- package/scss/shared/shimmer.scss +98 -0
- package/src/components/chart/builders.test.ts +211 -0
- package/src/components/chart/builders.ts +221 -0
- package/src/components/chart/chart.component.ts +182 -173
- package/src/components/chart/chart.scss +0 -1
- package/src/components/chart/chart.test.ts +48 -4
- package/src/components/editor/modules/context-menu/context-menu.ts +2 -1
- package/src/components/markdown-editor/markdown-editor.component.ts +21 -0
- package/src/components/markdown-editor/markdown-editor.scss +24 -1
- package/src/components/rating/rating.component.ts +2 -1
- package/src/components/simple-chart/simple-chart.component.ts +72 -180
- package/src/components/tabs/tabs.component.ts +6 -2
|
@@ -1,204 +1,96 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as echarts from 'echarts/core';
|
|
2
|
+
import { BarChart } from 'echarts/charts';
|
|
3
|
+
import { CanvasRenderer } from 'echarts/renderers';
|
|
2
4
|
import { type CSSResultGroup, html, unsafeCSS } from 'lit';
|
|
3
|
-
import {
|
|
5
|
+
import { GridComponent, TooltipComponent } from 'echarts/components';
|
|
6
|
+
import { property } from 'lit/decorators.js';
|
|
7
|
+
import styles from './simple-chart.scss';
|
|
4
8
|
import ZincElement from '../../internal/zinc-element';
|
|
9
|
+
import type { ECharts } from 'echarts/core';
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
echarts.use([BarChart, GridComponent, TooltipComponent, CanvasRenderer]);
|
|
12
|
+
|
|
13
|
+
const DEFAULT_LABELS = [
|
|
14
|
+
'Jun 2016', 'Jul 2016', 'Aug 2016', 'Sep 2016', 'Oct 2016', 'Nov 2016',
|
|
15
|
+
'Dec 2016', 'Jan 2017', 'Feb 2017', 'Mar 2017', 'Apr 2017', 'May 2017',
|
|
16
|
+
];
|
|
17
|
+
const DEFAULT_DATA = [56.4, 39.8, 66.8, 66.4, 40.6, 55.2, 77.4, 69.8, 57.8, 76, 110.8, 142.6];
|
|
7
18
|
|
|
8
19
|
/**
|
|
9
|
-
* @summary
|
|
20
|
+
* @summary A simple, pre-styled bar chart.
|
|
10
21
|
* @documentation https://zinc.style/components/simple-chart
|
|
11
22
|
* @status experimental
|
|
12
23
|
* @since 1.0
|
|
13
|
-
*
|
|
14
|
-
* @dependency zn-example
|
|
15
|
-
*
|
|
16
|
-
* @event zn-event-name - Emitted as an example.
|
|
17
|
-
*
|
|
18
|
-
* @slot - The default slot.
|
|
19
|
-
* @slot example - An example slot.
|
|
20
|
-
*
|
|
21
|
-
* @csspart base - The component's base wrapper.
|
|
22
|
-
*
|
|
23
|
-
* @cssproperty --example - An example CSS custom property.
|
|
24
24
|
*/
|
|
25
25
|
export default class ZnSimpleChart extends ZincElement {
|
|
26
26
|
static styles: CSSResultGroup = unsafeCSS(styles);
|
|
27
27
|
|
|
28
|
-
@property({ attribute: 'datasets', type: Array }) datasets:
|
|
29
|
-
@property({ attribute: 'labels', type: Array }) labels
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
@property({ attribute: 'datasets', type: Array }) datasets?: { data: number[] }[];
|
|
29
|
+
@property({ attribute: 'labels', type: Array }) labels?: string[];
|
|
30
|
+
@property({
|
|
31
|
+
attribute: 'enable-animations',
|
|
32
|
+
converter: {
|
|
33
|
+
fromAttribute: (value: string | null) => {
|
|
34
|
+
if (value === null) return false;
|
|
35
|
+
if (value === '' || value === 'true') return true;
|
|
36
|
+
const num = parseFloat(value);
|
|
37
|
+
return Number.isNaN(num) ? true : num;
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
}) enableAnimations: boolean | number = false;
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Chart.register(...registerables);
|
|
36
|
-
}
|
|
42
|
+
private chart?: ECharts;
|
|
43
|
+
private resizeObserver?: ResizeObserver;
|
|
37
44
|
|
|
38
45
|
firstUpdated() {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"Apr 2017",
|
|
56
|
-
"May 2017"
|
|
57
|
-
],
|
|
58
|
-
datasets: [
|
|
59
|
-
{
|
|
60
|
-
data: [
|
|
61
|
-
56.4,
|
|
62
|
-
39.8,
|
|
63
|
-
66.8,
|
|
64
|
-
66.4,
|
|
65
|
-
40.6,
|
|
66
|
-
55.2,
|
|
67
|
-
77.4,
|
|
68
|
-
69.8,
|
|
69
|
-
57.8,
|
|
70
|
-
76,
|
|
71
|
-
110.8,
|
|
72
|
-
142.6
|
|
73
|
-
],
|
|
74
|
-
}
|
|
75
|
-
]
|
|
46
|
+
const host = this.shadowRoot?.getElementById('chart') as HTMLElement | null;
|
|
47
|
+
if (!host) return;
|
|
48
|
+
this.chart = echarts.init(host);
|
|
49
|
+
const data = this.datasets?.[0]?.data ?? DEFAULT_DATA;
|
|
50
|
+
const labels = this.labels ?? DEFAULT_LABELS;
|
|
51
|
+
const animEnabled = this.enableAnimations !== false && this.enableAnimations !== 0;
|
|
52
|
+
const animDuration = typeof this.enableAnimations === 'number' ? this.enableAnimations : 1500;
|
|
53
|
+
this.chart.setOption({
|
|
54
|
+
animation: animEnabled,
|
|
55
|
+
animationDuration: animDuration,
|
|
56
|
+
animationEasing: 'cubicOut',
|
|
57
|
+
tooltip: {
|
|
58
|
+
trigger: 'axis',
|
|
59
|
+
backgroundColor: 'rgba(0,0,0,0.7)',
|
|
60
|
+
borderWidth: 0,
|
|
61
|
+
textStyle: { color: '#fff' },
|
|
76
62
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// Tooltip Element
|
|
88
|
-
let tooltipEl = document.getElementById("chartjs-tooltip");
|
|
89
|
-
|
|
90
|
-
// Create element on first render
|
|
91
|
-
if (!tooltipEl) {
|
|
92
|
-
tooltipEl = document.createElement("div");
|
|
93
|
-
tooltipEl.id = "chartjs-tooltip";
|
|
94
|
-
tooltipEl.innerHTML = "<table></table>";
|
|
95
|
-
document.body.appendChild(tooltipEl);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Hide if no tooltip
|
|
99
|
-
const tooltipModel = context.tooltip;
|
|
100
|
-
if (tooltipModel.opacity === 0) {
|
|
101
|
-
tooltipEl.style.opacity = "0";
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Set caret Position
|
|
106
|
-
tooltipEl.classList.remove("above", "below", "no-transform");
|
|
107
|
-
if (tooltipModel.yAlign) {
|
|
108
|
-
tooltipEl.classList.add(tooltipModel.yAlign);
|
|
109
|
-
} else {
|
|
110
|
-
tooltipEl.classList.add("no-transform");
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function getBody(bodyItem: any) {
|
|
114
|
-
return bodyItem.lines;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Set Text
|
|
118
|
-
if (tooltipModel.body) {
|
|
119
|
-
const titleLines = tooltipModel.title || [];
|
|
120
|
-
const bodyLines = tooltipModel.body.map(getBody);
|
|
121
|
-
|
|
122
|
-
let innerHtml = "<thead>";
|
|
123
|
-
|
|
124
|
-
titleLines.forEach(function (title: any) {
|
|
125
|
-
innerHtml += "<tr><th>" + title + "</th></tr>";
|
|
126
|
-
});
|
|
127
|
-
innerHtml += "</thead><tbody>";
|
|
128
|
-
|
|
129
|
-
bodyLines.forEach(function (body: any, i: any) {
|
|
130
|
-
const colors = tooltipModel.labelColors[i];
|
|
131
|
-
let style = "background:" + colors.backgroundColor;
|
|
132
|
-
style += "; border-color:" + colors.borderColor;
|
|
133
|
-
style += "; border-width: 2px";
|
|
134
|
-
const span = '<span style="' + style + '"></span>';
|
|
135
|
-
innerHtml += "<tr><td>" + span + body + "</td></tr>";
|
|
136
|
-
});
|
|
137
|
-
innerHtml += "</tbody>";
|
|
138
|
-
|
|
139
|
-
const tableRoot = tooltipEl.querySelector("table");
|
|
140
|
-
if (tableRoot) {
|
|
141
|
-
tableRoot.innerHTML = innerHtml;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const position = context.chart.canvas.getBoundingClientRect();
|
|
146
|
-
const bodyFont = Chart.defaults.font;
|
|
147
|
-
|
|
148
|
-
tooltipModel.padding = 3;
|
|
149
|
-
|
|
150
|
-
// Display, position, and set styles for font
|
|
151
|
-
tooltipEl.style.opacity = "1";
|
|
152
|
-
tooltipEl.style.position = "absolute";
|
|
153
|
-
tooltipEl.style.left =
|
|
154
|
-
position.left +
|
|
155
|
-
window.pageXOffset +
|
|
156
|
-
tooltipModel.caretX +
|
|
157
|
-
5 +
|
|
158
|
-
"px";
|
|
159
|
-
tooltipEl.style.top =
|
|
160
|
-
position.top +
|
|
161
|
-
window.pageYOffset +
|
|
162
|
-
tooltipModel.caretY +
|
|
163
|
-
10 +
|
|
164
|
-
"px";
|
|
165
|
-
tooltipEl.style.font = bodyFont.family ?? "Helvetica Neue";
|
|
166
|
-
tooltipEl.style.color = "white";
|
|
167
|
-
tooltipEl.style.padding = tooltipModel.padding + "px " + tooltipModel.padding + "px";
|
|
168
|
-
tooltipEl.style.pointerEvents = "none";
|
|
169
|
-
tooltipEl.style.background = "rgba(0, 0, 0, 0.7)";
|
|
170
|
-
tooltipEl.style.borderRadius = "10px";
|
|
171
|
-
}
|
|
172
|
-
}
|
|
63
|
+
xAxis: { type: 'category', data: labels, show: false },
|
|
64
|
+
yAxis: { type: 'value', show: false },
|
|
65
|
+
grid: { left: 0, right: 0, top: 0, bottom: 0 },
|
|
66
|
+
series: [{
|
|
67
|
+
type: 'bar',
|
|
68
|
+
data,
|
|
69
|
+
barWidth: 7,
|
|
70
|
+
itemStyle: {
|
|
71
|
+
color: '#29C1BC',
|
|
72
|
+
borderRadius: 10,
|
|
173
73
|
},
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
borderRadius: 10,
|
|
177
|
-
barThickness: 2,
|
|
178
|
-
maxBarThickness: 2,
|
|
179
|
-
backgroundColor: "#29C1BC",
|
|
180
|
-
hoverBackgroundColor: "#19837f",
|
|
181
|
-
}
|
|
74
|
+
emphasis: {
|
|
75
|
+
itemStyle: { color: '#19837f' },
|
|
182
76
|
},
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
};
|
|
77
|
+
}],
|
|
78
|
+
});
|
|
79
|
+
let firstResize = true;
|
|
80
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
81
|
+
if (firstResize) { firstResize = false; return; }
|
|
82
|
+
this.chart?.resize();
|
|
83
|
+
});
|
|
84
|
+
this.resizeObserver.observe(host);
|
|
85
|
+
}
|
|
193
86
|
|
|
194
|
-
|
|
87
|
+
disconnectedCallback() {
|
|
88
|
+
super.disconnectedCallback();
|
|
89
|
+
this.resizeObserver?.disconnect();
|
|
90
|
+
this.chart?.dispose();
|
|
195
91
|
}
|
|
196
92
|
|
|
197
93
|
render() {
|
|
198
|
-
return html
|
|
199
|
-
<div>
|
|
200
|
-
<canvas id="myChart"></canvas>
|
|
201
|
-
</div>
|
|
202
|
-
`;
|
|
94
|
+
return html`<div id="chart"></div>`;
|
|
203
95
|
}
|
|
204
96
|
}
|
|
@@ -37,6 +37,7 @@ export default class ZnTabs extends ZincElement {
|
|
|
37
37
|
@property({attribute: 'primary-caption', reflect: true}) primaryCaption = 'Navigation';
|
|
38
38
|
@property({attribute: 'secondary-caption', reflect: true}) secondaryCaption = 'Content';
|
|
39
39
|
@property({attribute: 'no-prefetch', type: Boolean, reflect: true}) noPrefetch = false;
|
|
40
|
+
@property({attribute: 'no-cache', type: Boolean, reflect: true}) noCache = false;
|
|
40
41
|
// session storage if not local
|
|
41
42
|
@property({attribute: 'local-storage', type: Boolean, reflect: true}) localStorage: boolean;
|
|
42
43
|
@property({attribute: 'store-key'}) storeKey: string;
|
|
@@ -72,7 +73,7 @@ export default class ZnTabs extends ZincElement {
|
|
|
72
73
|
this.masterId = this.storeKey || Math.floor(Math.random() * 1000000).toString();
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
this.preload = !this.noPrefetch;
|
|
76
|
+
this.preload = !this.noPrefetch && !this.noCache;
|
|
76
77
|
|
|
77
78
|
await this.updateComplete;
|
|
78
79
|
this._panel = this.shadowRoot?.querySelector('#content');
|
|
@@ -272,11 +273,14 @@ export default class ZnTabs extends ZincElement {
|
|
|
272
273
|
}
|
|
273
274
|
|
|
274
275
|
clickTab(target: HTMLElement, refresh: boolean) {
|
|
276
|
+
const tabUri = target.getAttribute('tab-uri');
|
|
277
|
+
const wasCached = !!tabUri && this._panels.has(this._uriToId(tabUri));
|
|
275
278
|
this.fetchUriTab(target);
|
|
276
279
|
|
|
277
280
|
if (target.hasAttribute('tab')) {
|
|
281
|
+
const forceRefresh = refresh || (this.noCache && wasCached);
|
|
278
282
|
setTimeout(() => {
|
|
279
|
-
this.setActiveTab(target.getAttribute('tab') || '', true,
|
|
283
|
+
this.setActiveTab(target.getAttribute('tab') || '', true, forceRefresh, this.getRefTab(target));
|
|
280
284
|
}, 10);
|
|
281
285
|
}
|
|
282
286
|
}
|