jojotaoo_components 0.0.1-beta.0
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/assets/maps/heilongjiang.json +25543 -0
- package/dist/components/charts/BackgroundCard.vue.d.ts +17 -0
- package/dist/components/charts/BackgroundCard.vue.d.ts.map +1 -0
- package/dist/components/charts/BackgroundCard.vue.js +140 -0
- package/dist/components/charts/BarChart.vue.d.ts +20 -0
- package/dist/components/charts/BarChart.vue.d.ts.map +1 -0
- package/dist/components/charts/BarChart.vue.js +109 -0
- package/dist/components/charts/CustomLegend.vue.d.ts +28 -0
- package/dist/components/charts/CustomLegend.vue.d.ts.map +1 -0
- package/dist/components/charts/CustomLegend.vue.js +198 -0
- package/dist/components/charts/DataFetchManager.vue.d.ts +10 -0
- package/dist/components/charts/DataFetchManager.vue.d.ts.map +1 -0
- package/dist/components/charts/DataFetchManager.vue.js +127 -0
- package/dist/components/charts/DateTimeDisplay.vue.d.ts +17 -0
- package/dist/components/charts/DateTimeDisplay.vue.d.ts.map +1 -0
- package/dist/components/charts/DateTimeDisplay.vue.js +112 -0
- package/dist/components/charts/GroupComponent.vue.d.ts +13 -0
- package/dist/components/charts/GroupComponent.vue.d.ts.map +1 -0
- package/dist/components/charts/GroupComponent.vue.js +106 -0
- package/dist/components/charts/GroupPreview.vue.d.ts +10 -0
- package/dist/components/charts/GroupPreview.vue.d.ts.map +1 -0
- package/dist/components/charts/GroupPreview.vue.js +76 -0
- package/dist/components/charts/HeaderLineChart.vue.d.ts +17 -0
- package/dist/components/charts/HeaderLineChart.vue.d.ts.map +1 -0
- package/dist/components/charts/HeaderLineChart.vue.js +62 -0
- package/dist/components/charts/ImageDisplay.vue.d.ts +17 -0
- package/dist/components/charts/ImageDisplay.vue.d.ts.map +1 -0
- package/dist/components/charts/ImageDisplay.vue.js +106 -0
- package/dist/components/charts/LineChart.vue.d.ts +20 -0
- package/dist/components/charts/LineChart.vue.d.ts.map +1 -0
- package/dist/components/charts/LineChart.vue.js +116 -0
- package/dist/components/charts/MapChart.vue.d.ts +22 -0
- package/dist/components/charts/MapChart.vue.d.ts.map +1 -0
- package/dist/components/charts/MapChart.vue.js +680 -0
- package/dist/components/charts/PieChart.vue.d.ts +20 -0
- package/dist/components/charts/PieChart.vue.d.ts.map +1 -0
- package/dist/components/charts/PieChart.vue.js +106 -0
- package/dist/components/charts/PieGridChart.vue.d.ts +20 -0
- package/dist/components/charts/PieGridChart.vue.d.ts.map +1 -0
- package/dist/components/charts/PieGridChart.vue.js +214 -0
- package/dist/components/charts/RiskScrollList.vue.d.ts +15 -0
- package/dist/components/charts/RiskScrollList.vue.d.ts.map +1 -0
- package/dist/components/charts/RiskScrollList.vue.js +294 -0
- package/dist/components/charts/ScrollList.vue.d.ts +15 -0
- package/dist/components/charts/ScrollList.vue.d.ts.map +1 -0
- package/dist/components/charts/ScrollList.vue.js +149 -0
- package/dist/components/charts/TextDisplay.vue.d.ts +17 -0
- package/dist/components/charts/TextDisplay.vue.d.ts.map +1 -0
- package/dist/components/charts/TextDisplay.vue.js +209 -0
- package/dist/composables/useChartDataFetch.d.ts +18 -0
- package/dist/composables/useChartDataFetch.d.ts.map +1 -0
- package/dist/composables/useChartDataFetch.js +131 -0
- package/dist/composables/useComponentRender.d.ts +20 -0
- package/dist/composables/useComponentRender.d.ts.map +1 -0
- package/dist/composables/useComponentRender.js +45 -0
- package/dist/composables/useDataPondManager.d.ts +20 -0
- package/dist/composables/useDataPondManager.d.ts.map +1 -0
- package/dist/composables/useDataPondManager.js +105 -0
- package/dist/composables/useECharts.d.ts +9 -0
- package/dist/composables/useECharts.d.ts.map +1 -0
- package/dist/composables/useECharts.js +118 -0
- package/dist/composables/useEventListener.d.ts +2 -0
- package/dist/composables/useEventListener.d.ts.map +1 -0
- package/dist/composables/useEventListener.js +5 -0
- package/dist/composables/useId.d.ts +3 -0
- package/dist/composables/useId.d.ts.map +1 -0
- package/dist/composables/useId.js +6 -0
- package/dist/composables/useInteractClear.d.ts +4 -0
- package/dist/composables/useInteractClear.d.ts.map +1 -0
- package/dist/composables/useInteractClear.js +26 -0
- package/dist/composables/useInteractDispatch.d.ts +5 -0
- package/dist/composables/useInteractDispatch.d.ts.map +1 -0
- package/dist/composables/useInteractDispatch.js +44 -0
- package/dist/composables/useInteractFilter.d.ts +5 -0
- package/dist/composables/useInteractFilter.d.ts.map +1 -0
- package/dist/composables/useInteractFilter.js +24 -0
- package/dist/composables/usePollingManager.d.ts +10 -0
- package/dist/composables/usePollingManager.d.ts.map +1 -0
- package/dist/composables/usePollingManager.js +42 -0
- package/dist/composables/useRequestMerge.d.ts +32 -0
- package/dist/composables/useRequestMerge.d.ts.map +1 -0
- package/dist/composables/useRequestMerge.js +131 -0
- package/dist/config/chartThemes.d.ts +26 -0
- package/dist/config/chartThemes.d.ts.map +1 -0
- package/dist/config/chartThemes.js +221 -0
- package/dist/config/componentDefinitions.d.ts +12 -0
- package/dist/config/componentDefinitions.d.ts.map +1 -0
- package/dist/config/componentDefinitions.js +503 -0
- package/dist/index.cjs +1 -0
- package/dist/index.css +2 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/stores/dashboard.d.ts +3240 -0
- package/dist/stores/dashboard.d.ts.map +1 -0
- package/dist/stores/dashboard.js +666 -0
- package/dist/stores/utils.d.ts +15 -0
- package/dist/stores/utils.d.ts.map +1 -0
- package/dist/stores/utils.js +28 -0
- package/dist/types/canvas.d.ts +36 -0
- package/dist/types/canvas.d.ts.map +1 -0
- package/dist/types/canvas.js +1 -0
- package/dist/types/component.d.ts +175 -0
- package/dist/types/component.d.ts.map +1 -0
- package/dist/types/component.js +63 -0
- package/dist/types/events.d.ts +43 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/request.d.ts +43 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +18 -0
- package/package.json +33 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { reactive } from 'vue';
|
|
2
|
+
import { mergeRequestConfig } from './useRequestMerge';
|
|
3
|
+
const pondMap = new Map();
|
|
4
|
+
const eventHandlers = new Map();
|
|
5
|
+
export function subscribePond(pondId, componentKey, handler) {
|
|
6
|
+
let state = pondMap.get(pondId);
|
|
7
|
+
if (!state)
|
|
8
|
+
return;
|
|
9
|
+
state.subscribers.add(componentKey);
|
|
10
|
+
if (!eventHandlers.has(pondId)) {
|
|
11
|
+
eventHandlers.set(pondId, new Map());
|
|
12
|
+
}
|
|
13
|
+
eventHandlers.get(pondId).set(componentKey, handler);
|
|
14
|
+
if (state.lastResponse !== undefined) {
|
|
15
|
+
handler(state.lastResponse);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function unsubscribePond(pondId, componentKey) {
|
|
19
|
+
const state = pondMap.get(pondId);
|
|
20
|
+
if (state) {
|
|
21
|
+
state.subscribers.delete(componentKey);
|
|
22
|
+
}
|
|
23
|
+
const handlers = eventHandlers.get(pondId);
|
|
24
|
+
if (handlers) {
|
|
25
|
+
handlers.delete(componentKey);
|
|
26
|
+
if (handlers.size === 0) {
|
|
27
|
+
eventHandlers.delete(pondId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function initPond(pond) {
|
|
32
|
+
if (!pondMap.has(pond.dataPondId)) {
|
|
33
|
+
pondMap.set(pond.dataPondId, reactive({
|
|
34
|
+
config: pond,
|
|
35
|
+
subscribers: new Set(),
|
|
36
|
+
lastResponse: undefined,
|
|
37
|
+
loading: false,
|
|
38
|
+
error: null,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function removePond(pondId) {
|
|
43
|
+
pondMap.delete(pondId);
|
|
44
|
+
eventHandlers.delete(pondId);
|
|
45
|
+
}
|
|
46
|
+
export function dispatchPondData(pondId, data) {
|
|
47
|
+
const state = pondMap.get(pondId);
|
|
48
|
+
if (state) {
|
|
49
|
+
state.lastResponse = data;
|
|
50
|
+
state.loading = false;
|
|
51
|
+
state.error = null;
|
|
52
|
+
}
|
|
53
|
+
const handlers = eventHandlers.get(pondId);
|
|
54
|
+
if (handlers) {
|
|
55
|
+
handlers.forEach((handler) => {
|
|
56
|
+
try {
|
|
57
|
+
handler(data);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(`[DataPond] Error in handler for pond "${pondId}":`, error);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function fetchPondData(pondId, globalConfig, httpClient) {
|
|
66
|
+
const state = pondMap.get(pondId);
|
|
67
|
+
if (!state || state.subscribers.size === 0)
|
|
68
|
+
return null;
|
|
69
|
+
if (state.loading)
|
|
70
|
+
return state.lastResponse;
|
|
71
|
+
state.loading = true;
|
|
72
|
+
state.error = null;
|
|
73
|
+
try {
|
|
74
|
+
const merged = mergeRequestConfig(state.config.dataPondRequestConfig, globalConfig);
|
|
75
|
+
if (!merged) {
|
|
76
|
+
state.loading = false;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const response = await httpClient({
|
|
80
|
+
url: merged.url,
|
|
81
|
+
method: merged.method,
|
|
82
|
+
headers: merged.headers,
|
|
83
|
+
params: merged.params,
|
|
84
|
+
data: merged.body,
|
|
85
|
+
});
|
|
86
|
+
const responseData = response?.data ?? response;
|
|
87
|
+
dispatchPondData(pondId, responseData);
|
|
88
|
+
return responseData;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
state.loading = false;
|
|
92
|
+
state.error = error;
|
|
93
|
+
console.error(`[DataPond] Fetch failed for pond "${pondId}":`, error);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function getPondState(pondId) {
|
|
98
|
+
return pondMap.get(pondId);
|
|
99
|
+
}
|
|
100
|
+
export function hasPond(pondId) {
|
|
101
|
+
return pondMap.has(pondId);
|
|
102
|
+
}
|
|
103
|
+
export function getSubscriberCount(pondId) {
|
|
104
|
+
return pondMap.get(pondId)?.subscribers.size ?? 0;
|
|
105
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import * as echarts from 'echarts';
|
|
3
|
+
import type { SeriesOption } from 'echarts';
|
|
4
|
+
import type { ChartStyleConfig } from '../types';
|
|
5
|
+
export declare function useECharts(option: Ref<Record<string, any>>, width: Ref<number>, height: Ref<number>, chartStyle: Ref<ChartStyleConfig>, seriesOption: Ref<SeriesOption | SeriesOption[]>, seriesType?: 'axis' | 'pie' | 'geo', tooltipFormatter?: (params: any) => string): {
|
|
6
|
+
chartRef: Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
|
|
7
|
+
chartInstance: import("vue").ShallowRef<echarts.ECharts | undefined, echarts.ECharts | undefined>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useECharts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useECharts.d.ts","sourceRoot":"","sources":["../../src/composables/useECharts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9E,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAGhD,wBAAgB,UAAU,CACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAChC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,EACjC,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,YAAY,EAAE,CAAC,EAChD,UAAU,GAAE,MAAM,GAAG,KAAK,GAAG,KAAc,EAC3C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM;;;EAsI3C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { ref, onMounted, onUnmounted, watch, shallowRef } from 'vue';
|
|
2
|
+
import * as echarts from 'echarts';
|
|
3
|
+
import { DEFAULT_CHART_STYLE } from '../types';
|
|
4
|
+
export function useECharts(option, width, height, chartStyle, seriesOption, seriesType = 'axis', tooltipFormatter) {
|
|
5
|
+
const chartRef = ref();
|
|
6
|
+
const chartInstance = shallowRef();
|
|
7
|
+
function buildOption() {
|
|
8
|
+
const cs = chartStyle.value ?? DEFAULT_CHART_STYLE;
|
|
9
|
+
const ds = option.value.dataset ?? { dimensions: [], source: [] };
|
|
10
|
+
const hasTitle = cs.titleStyle.show && !!option.value.title;
|
|
11
|
+
const titleTopPx = typeof cs.titleStyle.top === 'number' ? cs.titleStyle.top : 8;
|
|
12
|
+
const titleBottom = hasTitle ? titleTopPx + cs.titleStyle.fontSize + 8 : 0;
|
|
13
|
+
const hasLegend = cs.legend.show && cs.legend.layoutMode !== 'grid';
|
|
14
|
+
const legendTopPx = typeof cs.legend.top === 'number' ? cs.legend.top : 38;
|
|
15
|
+
const legendBottom = hasLegend ? legendTopPx + 24 : 0;
|
|
16
|
+
const gridTop = Math.max(cs.grid.top, titleBottom, legendBottom);
|
|
17
|
+
const isPie = seriesType === 'pie';
|
|
18
|
+
const isGeo = seriesType === 'geo';
|
|
19
|
+
const result = {
|
|
20
|
+
backgroundColor: cs.backgroundOpacity < 1 ? 'transparent' : cs.backgroundColor,
|
|
21
|
+
color: cs.series.colorList.length > 0 ? cs.series.colorList : undefined,
|
|
22
|
+
series: Array.isArray(seriesOption.value) ? seriesOption.value : [seriesOption.value],
|
|
23
|
+
};
|
|
24
|
+
if (!isPie && !isGeo) {
|
|
25
|
+
result.dataset = [
|
|
26
|
+
{
|
|
27
|
+
dimensions: ds.dimensions ?? [],
|
|
28
|
+
source: ds.source ?? [],
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
result.grid = {
|
|
32
|
+
left: cs.grid.left,
|
|
33
|
+
right: cs.grid.right,
|
|
34
|
+
top: gridTop,
|
|
35
|
+
bottom: cs.grid.bottom,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (hasTitle) {
|
|
39
|
+
result.title = {
|
|
40
|
+
text: option.value.title,
|
|
41
|
+
textStyle: { color: cs.titleStyle.color, fontSize: cs.titleStyle.fontSize, fontWeight: 600 },
|
|
42
|
+
left: cs.titleStyle.left,
|
|
43
|
+
top: cs.titleStyle.top,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (hasLegend) {
|
|
47
|
+
result.legend = {
|
|
48
|
+
orient: cs.legend.orient,
|
|
49
|
+
left: cs.legend.left,
|
|
50
|
+
top: cs.legend.top,
|
|
51
|
+
textStyle: { fontSize: cs.legend.fontSize, color: cs.legend.textColor },
|
|
52
|
+
icon: cs.legend.icon,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (!isPie && !isGeo) {
|
|
56
|
+
result.xAxis = {
|
|
57
|
+
show: cs.xAxis.show,
|
|
58
|
+
type: 'category',
|
|
59
|
+
name: cs.xAxis.name || undefined,
|
|
60
|
+
axisLine: { lineStyle: { color: cs.xAxis.lineColor } },
|
|
61
|
+
axisLabel: { color: cs.xAxis.labelColor, fontSize: cs.xAxis.labelFontSize, rotate: cs.xAxis.labelRotate },
|
|
62
|
+
axisTick: { alignWithLabel: true },
|
|
63
|
+
};
|
|
64
|
+
result.yAxis = {
|
|
65
|
+
show: cs.yAxis.show,
|
|
66
|
+
type: 'value',
|
|
67
|
+
name: cs.yAxis.name || undefined,
|
|
68
|
+
min: cs.yAxis.min ?? undefined,
|
|
69
|
+
max: cs.yAxis.max ?? undefined,
|
|
70
|
+
splitLine: cs.yAxis.splitLineShow ? { lineStyle: { color: cs.yAxis.splitLineColor } } : { show: false },
|
|
71
|
+
axisLabel: { color: cs.yAxis.labelColor, fontSize: cs.yAxis.labelFontSize },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (cs.tooltip.show && cs.tooltip.trigger !== 'none') {
|
|
75
|
+
result.tooltip = {
|
|
76
|
+
trigger: (isPie || isGeo) ? 'item' : cs.tooltip.trigger,
|
|
77
|
+
backgroundColor: cs.tooltip.backgroundColor,
|
|
78
|
+
borderColor: cs.tooltip.borderColor,
|
|
79
|
+
textStyle: { color: cs.tooltip.textColor, fontSize: 12 },
|
|
80
|
+
formatter: tooltipFormatter,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
function initChart() {
|
|
86
|
+
if (!chartRef.value)
|
|
87
|
+
return;
|
|
88
|
+
chartInstance.value?.dispose();
|
|
89
|
+
chartInstance.value = echarts.init(chartRef.value, undefined, { renderer: 'canvas' });
|
|
90
|
+
chartInstance.value.setOption(buildOption());
|
|
91
|
+
}
|
|
92
|
+
function handleResize() {
|
|
93
|
+
chartInstance.value?.resize();
|
|
94
|
+
}
|
|
95
|
+
const resizeObserver = new ResizeObserver(handleResize);
|
|
96
|
+
onMounted(() => {
|
|
97
|
+
initChart();
|
|
98
|
+
if (chartRef.value) {
|
|
99
|
+
resizeObserver.observe(chartRef.value);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
onUnmounted(() => {
|
|
103
|
+
resizeObserver.disconnect();
|
|
104
|
+
chartInstance.value?.dispose();
|
|
105
|
+
});
|
|
106
|
+
watch(() => [width.value, height.value], () => {
|
|
107
|
+
requestAnimationFrame(() => chartInstance.value?.resize());
|
|
108
|
+
});
|
|
109
|
+
function updateChart() {
|
|
110
|
+
if (!chartInstance.value)
|
|
111
|
+
return;
|
|
112
|
+
chartInstance.value.setOption(buildOption(), { notMerge: true });
|
|
113
|
+
}
|
|
114
|
+
watch(() => option.value, updateChart, { deep: true });
|
|
115
|
+
watch(() => seriesOption.value, updateChart, { deep: true });
|
|
116
|
+
watch(() => JSON.stringify(chartStyle.value), updateChart);
|
|
117
|
+
return { chartRef, chartInstance };
|
|
118
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEventListener.d.ts","sourceRoot":"","sources":["../../src/composables/useEventListener.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,kCAAkC,QAI5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/composables/useId.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED,wBAAgB,cAAc,IAAI,MAAM,MAAM,CAE7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInteractClear.d.ts","sourceRoot":"","sources":["../../src/composables/useInteractClear.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB;iDAOsB,MAAM;EAoB3D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useDashboardStore } from '../stores/dashboard';
|
|
2
|
+
export function useInteractClear() {
|
|
3
|
+
const store = useDashboardStore();
|
|
4
|
+
/**
|
|
5
|
+
* 清空指定源组件配置的所有 click 交互的目标组件的交互状态
|
|
6
|
+
* @param sourceComponentId 配置了交互的源组件 ID(如地图组件)
|
|
7
|
+
*/
|
|
8
|
+
function clearTargetInteractions(sourceComponentId) {
|
|
9
|
+
const comp = store.findComponent(sourceComponentId);
|
|
10
|
+
if (!comp?.events?.interactEvents)
|
|
11
|
+
return;
|
|
12
|
+
const clickEvents = comp.events.interactEvents.filter(e => e.interactOn === 'click');
|
|
13
|
+
for (const evt of clickEvents) {
|
|
14
|
+
const targetIds = evt.interactComponentIds?.length
|
|
15
|
+
? evt.interactComponentIds
|
|
16
|
+
: (evt.interactComponentId ? [evt.interactComponentId] : []);
|
|
17
|
+
for (const targetId of targetIds) {
|
|
18
|
+
store.clearInteractFilters(targetId);
|
|
19
|
+
const target = store.findComponent(targetId);
|
|
20
|
+
if (target)
|
|
21
|
+
target.interactOverrides = {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return { clearTargetInteractions };
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInteractDispatch.d.ts","sourceRoot":"","sources":["../../src/composables/useInteractDispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAG9B,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC;0BAG7B,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;EAyCjE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useDashboardStore } from '../stores/dashboard';
|
|
2
|
+
export function useInteractDispatch(componentId) {
|
|
3
|
+
const store = useDashboardStore();
|
|
4
|
+
function dispatch(eventName, params) {
|
|
5
|
+
if (!store.isPreviewMode)
|
|
6
|
+
return;
|
|
7
|
+
const comp = store.findComponent(componentId.value);
|
|
8
|
+
if (!comp?.events?.interactEvents)
|
|
9
|
+
return;
|
|
10
|
+
const matches = comp.events.interactEvents.filter(e => e.interactOn === eventName);
|
|
11
|
+
for (const match of matches) {
|
|
12
|
+
const targetIds = getTargetIds(match);
|
|
13
|
+
for (const targetId of targetIds) {
|
|
14
|
+
const target = store.findComponent(targetId);
|
|
15
|
+
if (!target)
|
|
16
|
+
continue;
|
|
17
|
+
for (const [method, expr] of Object.entries(match.interactFn)) {
|
|
18
|
+
const value = resolveExpr(expr, params);
|
|
19
|
+
store.applyInteractAction(target.id, method, value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function getTargetIds(match) {
|
|
25
|
+
if (match.interactComponentIds && match.interactComponentIds.length > 0) {
|
|
26
|
+
return match.interactComponentIds;
|
|
27
|
+
}
|
|
28
|
+
if (match.interactComponentId) {
|
|
29
|
+
return [match.interactComponentId];
|
|
30
|
+
}
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
function resolveExpr(expr, params) {
|
|
34
|
+
if (expr in params)
|
|
35
|
+
return params[expr];
|
|
36
|
+
try {
|
|
37
|
+
return new Function('params', `return ${expr}`)(params);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return { dispatch };
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInteractFilter.d.ts","sourceRoot":"","sources":["../../src/composables/useInteractFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,KAAK,CAAA;AAGxC,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EACzB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;;EAuBrB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
import { useDashboardStore } from '../stores/dashboard';
|
|
3
|
+
export function useInteractFilter(componentId, dimensions, source) {
|
|
4
|
+
const store = useDashboardStore();
|
|
5
|
+
const filteredSource = computed(() => {
|
|
6
|
+
if (!store.isPreviewMode)
|
|
7
|
+
return source.value;
|
|
8
|
+
const filters = store.interactFilters[componentId.value];
|
|
9
|
+
if (!filters || Object.keys(filters).length === 0)
|
|
10
|
+
return source.value;
|
|
11
|
+
return source.value.filter(row => {
|
|
12
|
+
return Object.entries(filters).every(([key, value]) => {
|
|
13
|
+
if (key === '_primary') {
|
|
14
|
+
return row.some(cell => String(cell) === String(value));
|
|
15
|
+
}
|
|
16
|
+
const colIndex = dimensions.value.indexOf(key);
|
|
17
|
+
if (colIndex === -1)
|
|
18
|
+
return true;
|
|
19
|
+
return String(row[colIndex]) === String(value);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
return { filteredSource };
|
|
24
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function startPolling(key: string, callback: () => Promise<void> | void, interval: number, unit: string): void;
|
|
2
|
+
export declare function stopPolling(key: string): void;
|
|
3
|
+
export declare function stopAllPolling(): void;
|
|
4
|
+
export declare function resetPolling(key: string, callback: () => Promise<void> | void, interval: number, unit: string): void;
|
|
5
|
+
export declare function hasPolling(key: string): boolean;
|
|
6
|
+
export declare function getPollingInfo(key: string): {
|
|
7
|
+
interval: number;
|
|
8
|
+
unit: string;
|
|
9
|
+
} | null;
|
|
10
|
+
//# sourceMappingURL=usePollingManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePollingManager.d.ts","sourceRoot":"","sources":["../../src/composables/usePollingManager.ts"],"names":[],"mappings":"AAUA,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAaN;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAM7C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAGN;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMrF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { toMilliseconds } from './useRequestMerge';
|
|
2
|
+
const timers = new Map();
|
|
3
|
+
export function startPolling(key, callback, interval, unit) {
|
|
4
|
+
stopPolling(key);
|
|
5
|
+
const ms = toMilliseconds(interval, unit);
|
|
6
|
+
const timer = setInterval(async () => {
|
|
7
|
+
try {
|
|
8
|
+
await callback();
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.error(`[Polling] Error in callback for key "${key}":`, error);
|
|
12
|
+
}
|
|
13
|
+
}, ms);
|
|
14
|
+
timers.set(key, { timer, interval, unit });
|
|
15
|
+
}
|
|
16
|
+
export function stopPolling(key) {
|
|
17
|
+
const polling = timers.get(key);
|
|
18
|
+
if (polling) {
|
|
19
|
+
clearInterval(polling.timer);
|
|
20
|
+
timers.delete(key);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function stopAllPolling() {
|
|
24
|
+
timers.forEach((polling) => {
|
|
25
|
+
clearInterval(polling.timer);
|
|
26
|
+
});
|
|
27
|
+
timers.clear();
|
|
28
|
+
}
|
|
29
|
+
export function resetPolling(key, callback, interval, unit) {
|
|
30
|
+
stopPolling(key);
|
|
31
|
+
startPolling(key, callback, interval, unit);
|
|
32
|
+
}
|
|
33
|
+
export function hasPolling(key) {
|
|
34
|
+
return timers.has(key);
|
|
35
|
+
}
|
|
36
|
+
export function getPollingInfo(key) {
|
|
37
|
+
const polling = timers.get(key);
|
|
38
|
+
if (polling) {
|
|
39
|
+
return { interval: polling.interval, unit: polling.unit };
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RequestConfigType, RequestGlobalConfigType } from '../types';
|
|
2
|
+
export interface MergedRequestConfig {
|
|
3
|
+
url: string;
|
|
4
|
+
method: string;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
params: Record<string, any>;
|
|
7
|
+
body: any;
|
|
8
|
+
polling: {
|
|
9
|
+
interval: number;
|
|
10
|
+
unit: string;
|
|
11
|
+
} | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function mergeRequestConfig(componentConfig: RequestConfigType, globalConfig: RequestGlobalConfigType, interactOverrides?: {
|
|
14
|
+
params?: Record<string, any>;
|
|
15
|
+
body?: Record<string, any>;
|
|
16
|
+
}): MergedRequestConfig | null;
|
|
17
|
+
export declare function resolveUrl(baseUrl: string, path: string): string;
|
|
18
|
+
export declare function resolveUrlWithTemplate(template: string, context: Record<string, any>): string;
|
|
19
|
+
export declare function getBodyByType(type: string, bodyConfig?: {
|
|
20
|
+
'form-data': Record<string, any>;
|
|
21
|
+
'x-www-form-urlencoded': Record<string, any>;
|
|
22
|
+
json: string;
|
|
23
|
+
xml: string;
|
|
24
|
+
}): any;
|
|
25
|
+
export declare function executeFilter(responseData: any, fullResponse: any, filterFn: string | null): any;
|
|
26
|
+
export declare function toMilliseconds(interval: number, unit: string): number;
|
|
27
|
+
export declare function doFetch(merged: MergedRequestConfig): Promise<any>;
|
|
28
|
+
export declare function executeRequest(config: RequestConfigType, globalConfig: RequestGlobalConfigType, interactOverrides?: Record<string, any>): Promise<any | null>;
|
|
29
|
+
export declare function getPondCache(pondId: string): any | undefined;
|
|
30
|
+
export declare function setPondCache(pondId: string, data: any): void;
|
|
31
|
+
export declare function clearPondCache(pondId?: string): void;
|
|
32
|
+
//# sourceMappingURL=useRequestMerge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRequestMerge.d.ts","sourceRoot":"","sources":["../../src/composables/useRequestMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAE1E,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;KACb,GAAG,IAAI,CAAA;CACT;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,YAAY,EAAE,uBAAuB,EACrC,iBAAiB,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GAC/E,mBAAmB,GAAG,IAAI,CA2C5B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,CAQR;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE;IACX,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,GACA,GAAG,CAoBL;AAED,wBAAgB,aAAa,CAC3B,YAAY,EAAE,GAAG,EACjB,YAAY,EAAE,GAAG,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,GAAG,CAUL;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAqBvE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,uBAAuB,EACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACtC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAKrB;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAE5D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAErD;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,QAG7C"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export function mergeRequestConfig(componentConfig, globalConfig, interactOverrides) {
|
|
2
|
+
if (componentConfig.requestDataType === 0) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
const url = resolveUrl(globalConfig.requestOriginUrl, componentConfig.requestUrl ?? '');
|
|
6
|
+
const headers = {
|
|
7
|
+
...globalConfig.requestHeader,
|
|
8
|
+
...(componentConfig.requestParams?.Header ?? {}),
|
|
9
|
+
};
|
|
10
|
+
const params = {
|
|
11
|
+
...(componentConfig.requestParams?.Params ?? {}),
|
|
12
|
+
...(interactOverrides?.params ?? {}),
|
|
13
|
+
};
|
|
14
|
+
const bodyType = componentConfig.requestParamsBodyType ?? 'none';
|
|
15
|
+
let body = getBodyByType(bodyType, componentConfig.requestParams?.Body);
|
|
16
|
+
if (interactOverrides?.body && Object.keys(interactOverrides.body).length > 0) {
|
|
17
|
+
if ((bodyType === 'form-data' || bodyType === 'x-www-form-urlencoded') && body && typeof body === 'object') {
|
|
18
|
+
body = { ...body, ...interactOverrides.body };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const pollingInterval = componentConfig.requestInterval ?? globalConfig.requestInterval;
|
|
22
|
+
const pollingUnit = componentConfig.requestIntervalUnit ?? globalConfig.requestIntervalUnit;
|
|
23
|
+
return {
|
|
24
|
+
url,
|
|
25
|
+
method: componentConfig.requestHttpType ?? 'get',
|
|
26
|
+
headers,
|
|
27
|
+
params,
|
|
28
|
+
body,
|
|
29
|
+
polling: {
|
|
30
|
+
interval: pollingInterval,
|
|
31
|
+
unit: pollingUnit,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function resolveUrl(baseUrl, path) {
|
|
36
|
+
const base = baseUrl.replace(/\/+$/, '');
|
|
37
|
+
const p = path.replace(/^\/+/, '');
|
|
38
|
+
return p ? `${base}/${p}` : base;
|
|
39
|
+
}
|
|
40
|
+
export function resolveUrlWithTemplate(template, context) {
|
|
41
|
+
if (!template.includes('${')) {
|
|
42
|
+
return template;
|
|
43
|
+
}
|
|
44
|
+
const keys = Object.keys(context);
|
|
45
|
+
const values = Object.values(context);
|
|
46
|
+
return new Function(...keys, `return \`${template}\``)(...values);
|
|
47
|
+
}
|
|
48
|
+
export function getBodyByType(type, bodyConfig) {
|
|
49
|
+
if (!bodyConfig)
|
|
50
|
+
return undefined;
|
|
51
|
+
switch (type) {
|
|
52
|
+
case 'json':
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(bodyConfig.json || '{}');
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
case 'xml':
|
|
60
|
+
return bodyConfig.xml;
|
|
61
|
+
case 'form-data':
|
|
62
|
+
return bodyConfig['form-data'];
|
|
63
|
+
case 'x-www-form-urlencoded':
|
|
64
|
+
return bodyConfig['x-www-form-urlencoded'];
|
|
65
|
+
case 'none':
|
|
66
|
+
default:
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function executeFilter(responseData, fullResponse, filterFn) {
|
|
71
|
+
if (!filterFn)
|
|
72
|
+
return responseData;
|
|
73
|
+
try {
|
|
74
|
+
const fn = new Function('data', 'res', filterFn);
|
|
75
|
+
return fn(responseData, fullResponse);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('[Filter] Execute filter function failed:', error);
|
|
79
|
+
return responseData;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function toMilliseconds(interval, unit) {
|
|
83
|
+
const multipliers = {
|
|
84
|
+
second: 1000,
|
|
85
|
+
minute: 60 * 1000,
|
|
86
|
+
hour: 60 * 60 * 1000,
|
|
87
|
+
day: 24 * 60 * 60 * 1000,
|
|
88
|
+
};
|
|
89
|
+
return interval * (multipliers[unit] ?? 1000);
|
|
90
|
+
}
|
|
91
|
+
export async function doFetch(merged) {
|
|
92
|
+
const queryString = Object.entries(merged.params)
|
|
93
|
+
.filter(([, v]) => v !== '')
|
|
94
|
+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
|
|
95
|
+
.join('&');
|
|
96
|
+
const fullUrl = queryString ? `${merged.url}?${queryString}` : merged.url;
|
|
97
|
+
const fetchOptions = {
|
|
98
|
+
method: merged.method.toUpperCase(),
|
|
99
|
+
headers: {
|
|
100
|
+
'Content-Type': 'application/json',
|
|
101
|
+
...merged.headers,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
if (merged.body !== undefined && merged.method.toLowerCase() !== 'get') {
|
|
105
|
+
fetchOptions.body = typeof merged.body === 'object' ? JSON.stringify(merged.body) : String(merged.body);
|
|
106
|
+
}
|
|
107
|
+
const res = await fetch(fullUrl, fetchOptions);
|
|
108
|
+
const json = await res.json();
|
|
109
|
+
return json?.data ?? json;
|
|
110
|
+
}
|
|
111
|
+
export async function executeRequest(config, globalConfig, interactOverrides) {
|
|
112
|
+
if (config.requestDataType === 0)
|
|
113
|
+
return null;
|
|
114
|
+
const merged = mergeRequestConfig(config, globalConfig, interactOverrides);
|
|
115
|
+
if (!merged)
|
|
116
|
+
return null;
|
|
117
|
+
return doFetch(merged);
|
|
118
|
+
}
|
|
119
|
+
const pondCache = new Map();
|
|
120
|
+
export function getPondCache(pondId) {
|
|
121
|
+
return pondCache.get(pondId)?.data;
|
|
122
|
+
}
|
|
123
|
+
export function setPondCache(pondId, data) {
|
|
124
|
+
pondCache.set(pondId, { data, timestamp: Date.now() });
|
|
125
|
+
}
|
|
126
|
+
export function clearPondCache(pondId) {
|
|
127
|
+
if (pondId)
|
|
128
|
+
pondCache.delete(pondId);
|
|
129
|
+
else
|
|
130
|
+
pondCache.clear();
|
|
131
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ChartStyleConfig } from '../types';
|
|
2
|
+
export interface ChartThemePreset {
|
|
3
|
+
name: string;
|
|
4
|
+
label: string;
|
|
5
|
+
colors: {
|
|
6
|
+
titleColor: string;
|
|
7
|
+
legendTextColor: string;
|
|
8
|
+
axisLineColor: string;
|
|
9
|
+
axisLabelColor: string;
|
|
10
|
+
splitLineColor: string;
|
|
11
|
+
seriesColor: string;
|
|
12
|
+
seriesColorEnd: string;
|
|
13
|
+
seriesColorList: string[];
|
|
14
|
+
areaOpacityStart: number;
|
|
15
|
+
areaOpacityEnd: number;
|
|
16
|
+
labelColor: string;
|
|
17
|
+
tooltipBg: string;
|
|
18
|
+
tooltipBorder: string;
|
|
19
|
+
tooltipTextColor: string;
|
|
20
|
+
backgroundColor: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const CHART_THEMES: ChartThemePreset[];
|
|
24
|
+
export declare function applyTheme(style: ChartStyleConfig, preset: ChartThemePreset): ChartStyleConfig;
|
|
25
|
+
export declare function getThemeByName(name: string): ChartThemePreset | undefined;
|
|
26
|
+
//# sourceMappingURL=chartThemes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartThemes.d.ts","sourceRoot":"","sources":["../../src/config/chartThemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAA;QAClB,eAAe,EAAE,MAAM,CAAA;QACvB,aAAa,EAAE,MAAM,CAAA;QACrB,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE,MAAM,CAAA;QACtB,eAAe,EAAE,MAAM,EAAE,CAAA;QACzB,gBAAgB,EAAE,MAAM,CAAA;QACxB,cAAc,EAAE,MAAM,CAAA;QACtB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;QACxB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;CACF;AAED,eAAO,MAAM,YAAY,EAAE,gBAAgB,EA8L1C,CAAA;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA0B9F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEzE"}
|