@quillsql/react 2.11.5 → 2.11.8
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/cjs/BarList.d.ts +1 -0
- package/dist/cjs/BarList.d.ts.map +1 -1
- package/dist/cjs/BarList.js +55 -46
- package/dist/cjs/Chart.d.ts +4 -0
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +25 -19
- package/dist/cjs/ChartBuilder.d.ts +5 -3
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +236 -196
- package/dist/cjs/ChartEditor.d.ts +3 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +17 -2
- package/dist/cjs/Context.d.ts +1 -1
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +33 -3
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +4 -4
- package/dist/cjs/PieChart.d.ts +1 -1
- package/dist/cjs/PieChart.d.ts.map +1 -1
- package/dist/cjs/PieChart.js +95 -357
- package/dist/cjs/QuillProvider.d.ts +1 -3
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -2
- package/dist/cjs/ReportBuilder.d.ts +11 -3
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +224 -99
- package/dist/cjs/SQLEditor.d.ts +4 -2
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +9 -6
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +9 -5
- package/dist/cjs/components/Chart/ChartError.js +1 -1
- package/dist/cjs/components/Chart/ChartSkeleton.js +2 -2
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +10 -3
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +1 -1
- package/dist/cjs/components/QuillTable.js +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -2
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +3 -0
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +62 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +3 -2
- package/dist/cjs/components/ReportBuilder/ui.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +12 -5
- package/dist/cjs/components/ReportBuilder/util.js +2 -2
- package/dist/cjs/components/UiComponents.d.ts +12 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +7 -6
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +47 -56
- package/dist/cjs/utils/aggregate.js +2 -2
- package/dist/cjs/utils/color.d.ts +25 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +164 -1
- package/dist/esm/BarList.d.ts +1 -0
- package/dist/esm/BarList.d.ts.map +1 -1
- package/dist/esm/BarList.js +55 -46
- package/dist/esm/Chart.d.ts +4 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +25 -19
- package/dist/esm/ChartBuilder.d.ts +5 -3
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +234 -195
- package/dist/esm/ChartEditor.d.ts +3 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +19 -4
- package/dist/esm/Context.d.ts +1 -1
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +33 -3
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +4 -4
- package/dist/esm/PieChart.d.ts +1 -1
- package/dist/esm/PieChart.d.ts.map +1 -1
- package/dist/esm/PieChart.js +93 -334
- package/dist/esm/QuillProvider.d.ts +1 -3
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -2
- package/dist/esm/ReportBuilder.d.ts +11 -3
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +229 -104
- package/dist/esm/SQLEditor.d.ts +4 -2
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +9 -6
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +9 -5
- package/dist/esm/components/Chart/ChartError.js +1 -1
- package/dist/esm/components/Chart/ChartSkeleton.js +2 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +10 -3
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +1 -1
- package/dist/esm/components/QuillTable.js +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -2
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +3 -0
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +57 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +3 -2
- package/dist/esm/components/ReportBuilder/ui.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +11 -5
- package/dist/esm/components/ReportBuilder/util.js +2 -2
- package/dist/esm/components/UiComponents.d.ts +12 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +7 -6
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +47 -56
- package/dist/esm/utils/aggregate.js +2 -2
- package/dist/esm/utils/color.d.ts +25 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +160 -0
- package/package.json +1 -1
package/dist/esm/PieChart.js
CHANGED
|
@@ -2,133 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
3
3
|
/* eslint-disable react/display-name */
|
|
4
4
|
// @ts-nocheck
|
|
5
|
-
import React
|
|
6
|
-
import { Pie, PieChart, ResponsiveContainer, Tooltip
|
|
7
|
-
|
|
8
|
-
// {
|
|
9
|
-
// name: 'Project Nile',
|
|
10
|
-
// pct_of_the_total: 0.208266213458027,
|
|
11
|
-
// },
|
|
12
|
-
// {
|
|
13
|
-
// name: 'GA_Columbus',
|
|
14
|
-
// pct_of_the_total: 0.102192710707096,
|
|
15
|
-
// },
|
|
16
|
-
// {
|
|
17
|
-
// name: 'IN_Indianapolis',
|
|
18
|
-
// pct_of_the_total: 0.0965229750772778,
|
|
19
|
-
// },
|
|
20
|
-
// {
|
|
21
|
-
// name: 'MO_St Louis',
|
|
22
|
-
// pct_of_the_total: 0.0732235559304729,
|
|
23
|
-
// },
|
|
24
|
-
// {
|
|
25
|
-
// name: 'AL_Birmingham',
|
|
26
|
-
// pct_of_the_total: 0.0555956813239389,
|
|
27
|
-
// },
|
|
28
|
-
// {
|
|
29
|
-
// name: 'FL_Fort Myers',
|
|
30
|
-
// pct_of_the_total: 0.0479532568651074,
|
|
31
|
-
// },
|
|
32
|
-
// {
|
|
33
|
-
// name: 'GA_Macon',
|
|
34
|
-
// pct_of_the_total: 0.0431507654834117,
|
|
35
|
-
// },
|
|
36
|
-
// {
|
|
37
|
-
// name: 'NC_Charlotte',
|
|
38
|
-
// pct_of_the_total: 0.034166792944838,
|
|
39
|
-
// },
|
|
40
|
-
// {
|
|
41
|
-
// name: 'AL_Montgomery',
|
|
42
|
-
// pct_of_the_total: 0.0298663023800594,
|
|
43
|
-
// },
|
|
44
|
-
// {
|
|
45
|
-
// name: 'TN_Memphis',
|
|
46
|
-
// pct_of_the_total: 0.0292140477651036,
|
|
47
|
-
// },
|
|
48
|
-
// {
|
|
49
|
-
// name: 'SC_Greenville',
|
|
50
|
-
// pct_of_the_total: 0.0288115667542858,
|
|
51
|
-
// },
|
|
52
|
-
// {
|
|
53
|
-
// name: 'SC_Columbia',
|
|
54
|
-
// pct_of_the_total: 0.0285805316472631,
|
|
55
|
-
// },
|
|
56
|
-
// {
|
|
57
|
-
// name: 'NC_Fayetteville',
|
|
58
|
-
// pct_of_the_total: 0.0279000448849207,
|
|
59
|
-
// },
|
|
60
|
-
// {
|
|
61
|
-
// name: 'SC_Spartanburg',
|
|
62
|
-
// pct_of_the_total: 0.0260196308313896,
|
|
63
|
-
// },
|
|
64
|
-
// {
|
|
65
|
-
// name: 'NC_Greensboro',
|
|
66
|
-
// pct_of_the_total: 0.0169521323221251,
|
|
67
|
-
// },
|
|
68
|
-
// {
|
|
69
|
-
// name: 'FL_Orlando',
|
|
70
|
-
// pct_of_the_total: 0.0167433815522564,
|
|
71
|
-
// },
|
|
72
|
-
// {
|
|
73
|
-
// name: 'FL_Tampa',
|
|
74
|
-
// pct_of_the_total: 0.0155513189530513,
|
|
75
|
-
// },
|
|
76
|
-
// {
|
|
77
|
-
// name: 'NC_Raleigh',
|
|
78
|
-
// pct_of_the_total: 0.0154308010765727,
|
|
79
|
-
// },
|
|
80
|
-
// {
|
|
81
|
-
// name: 'FL_Jacksonville',
|
|
82
|
-
// pct_of_the_total: 0.0152275224173022,
|
|
83
|
-
// },
|
|
84
|
-
// {
|
|
85
|
-
// name: 'GA_LaGrange',
|
|
86
|
-
// pct_of_the_total: 0.00867900369362145,
|
|
87
|
-
// },
|
|
88
|
-
// {
|
|
89
|
-
// name: 'GA_Augusta',
|
|
90
|
-
// pct_of_the_total: 0.0084582649800033,
|
|
91
|
-
// },
|
|
92
|
-
// {
|
|
93
|
-
// name: 'TX_San Antonio',
|
|
94
|
-
// pct_of_the_total: 0.00682971823492258,
|
|
95
|
-
// },
|
|
96
|
-
// {
|
|
97
|
-
// name: 'FL_North Port',
|
|
98
|
-
// pct_of_the_total: 0.00637954051173961,
|
|
99
|
-
// },
|
|
100
|
-
// {
|
|
101
|
-
// name: 'No Portfolio',
|
|
102
|
-
// pct_of_the_total: 0.00522734435854761,
|
|
103
|
-
// },
|
|
104
|
-
// ];
|
|
105
|
-
const useOnWindowResize = (handler, initialWindowSize) => {
|
|
106
|
-
const [windowSize, setWindowSize] = useState(initialWindowSize);
|
|
107
|
-
useEffect(() => {
|
|
108
|
-
const handleResize = () => {
|
|
109
|
-
setWindowSize(window.innerWidth);
|
|
110
|
-
handler();
|
|
111
|
-
};
|
|
112
|
-
handleResize();
|
|
113
|
-
window.addEventListener('resize', handleResize);
|
|
114
|
-
return () => window.removeEventListener('resize', handleResize);
|
|
115
|
-
}, [handler, windowSize]);
|
|
116
|
-
};
|
|
117
|
-
const ChartLegend = (categories, colors) => {
|
|
118
|
-
const legendRef = useRef(null);
|
|
119
|
-
// useOnWindowResize(() => {
|
|
120
|
-
// const calculateHeight = (height: number | undefined) =>
|
|
121
|
-
// height
|
|
122
|
-
// ? Number(height) + 20 // 20px extra padding
|
|
123
|
-
// : 60; // default height
|
|
124
|
-
// setLegendHeight(calculateHeight(legendRef.current?.clientHeight));
|
|
125
|
-
// });
|
|
126
|
-
return (_jsx("div", { ref: legendRef, className: "qq-flex qq-items-center qq-justify-end", children: _jsx(Legend
|
|
127
|
-
// @ts-ignore
|
|
128
|
-
, {
|
|
129
|
-
// @ts-ignore
|
|
130
|
-
categories: categories, colors: colors }) }));
|
|
131
|
-
};
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';
|
|
7
|
+
import { namedColorToHex, rgbToHsl as RGBToHSL, HSLtoRGB } from './utils/color';
|
|
132
8
|
const iconVariantValues = [
|
|
133
9
|
'simple',
|
|
134
10
|
'light',
|
|
@@ -185,16 +61,6 @@ const alignItemsValues = [
|
|
|
185
61
|
];
|
|
186
62
|
export const defaultValueFormatter = (value) => (value * 1).toFixed(1) + '%';
|
|
187
63
|
export const sumNumericArray = (arr) => arr.reduce((prefixSum, num) => prefixSum + num, 0);
|
|
188
|
-
// export const parseData = (data: any[], colors: any[]) =>
|
|
189
|
-
// data.map((dataPoint: any, idx: number) => {
|
|
190
|
-
// const baseColor = idx < colors.length ? colors[idx] : BaseColors.Gray;
|
|
191
|
-
// const hexCode = hexColors[baseColor ?? BaseColors.Gray];
|
|
192
|
-
// return {
|
|
193
|
-
// ...dataPoint,
|
|
194
|
-
// color: colors[idx],
|
|
195
|
-
// fill: colors[idx],
|
|
196
|
-
// };
|
|
197
|
-
// });
|
|
198
64
|
// @ts-ignore
|
|
199
65
|
export const parseData = (data, colors, categoryKey, valueKey) => {
|
|
200
66
|
const maxItems = 20;
|
|
@@ -243,17 +109,14 @@ export const ChartTooltipFrame = ({ children, theme, }) => (_jsx("div", { style:
|
|
|
243
109
|
}, children: children }));
|
|
244
110
|
export const ChartTooltipRow = ({ value, name, color, theme, }) => (_jsxs("div", { style: {
|
|
245
111
|
display: 'flex',
|
|
112
|
+
gap: 8,
|
|
246
113
|
alignItems: 'center',
|
|
247
114
|
justifyContent: 'space-between',
|
|
248
115
|
minWidth: 120,
|
|
249
|
-
// minHeight: 27,
|
|
250
|
-
// margin: '0 2rem',
|
|
251
116
|
}, children: [_jsxs("div", { style: {
|
|
252
117
|
display: 'flex',
|
|
253
118
|
alignItems: 'center',
|
|
254
119
|
justifyContent: 'space-between',
|
|
255
|
-
// margin: '0 0.5rem',
|
|
256
|
-
// minWidth: 120,
|
|
257
120
|
}, children: [_jsx("span", { style: {
|
|
258
121
|
background: color,
|
|
259
122
|
borderWidth: 2,
|
|
@@ -264,12 +127,7 @@ export const ChartTooltipRow = ({ value, name, color, theme, }) => (_jsxs("div",
|
|
|
264
127
|
boxShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
|
|
265
128
|
borderRadius: '9999px',
|
|
266
129
|
marginRight: 5,
|
|
267
|
-
} }), _jsx("p", {
|
|
268
|
-
// className={twMerge(
|
|
269
|
-
// 'font-medium tabular-nums text-right whitespace-nowrap',
|
|
270
|
-
// 'text-[#212121] !important'
|
|
271
|
-
// )}
|
|
272
|
-
style: {
|
|
130
|
+
} }), _jsx("p", { style: {
|
|
273
131
|
marginTop: 0,
|
|
274
132
|
marginBottom: 0,
|
|
275
133
|
fontFamily: theme?.fontFamily,
|
|
@@ -293,10 +151,7 @@ export const ChartTooltipRow = ({ value, name, color, theme, }) => (_jsxs("div",
|
|
|
293
151
|
export const DonutChartTooltip = ({ active, payload, valueFormatter, theme, }) => {
|
|
294
152
|
if (active && payload[0]) {
|
|
295
153
|
const payloadRow = payload[0];
|
|
296
|
-
return (_jsx(ChartTooltipFrame, { theme: theme, children: _jsx("div", {
|
|
297
|
-
// style={{ transform: 'translateX(-120px)' }}
|
|
298
|
-
// className={twMerge('qq-px-4', 'qq-py-2')}
|
|
299
|
-
style: {
|
|
154
|
+
return (_jsx(ChartTooltipFrame, { theme: theme, children: _jsx("div", { style: {
|
|
300
155
|
paddingLeft: '1rem',
|
|
301
156
|
paddingRight: '1rem',
|
|
302
157
|
paddingTop: '8px',
|
|
@@ -305,173 +160,105 @@ export const DonutChartTooltip = ({ active, payload, valueFormatter, theme, }) =
|
|
|
305
160
|
}
|
|
306
161
|
return null;
|
|
307
162
|
};
|
|
308
|
-
// @ts-ignore
|
|
309
|
-
export function findComplementaryAndAnalogousColors(color1, color2) {
|
|
310
|
-
// Calculate the hue of the first color
|
|
311
|
-
const color1HSL = rgbToHsl(hexToRgb(color1));
|
|
312
|
-
const color2HSL = rgbToHsl(hexToRgb(color2));
|
|
313
|
-
const color1Hue = color1HSL.h;
|
|
314
|
-
// Calculate the complementary color of the first color
|
|
315
|
-
const complementaryHue = (color1Hue + 180) % 360;
|
|
316
|
-
const complementaryColor = hslToRgb({
|
|
317
|
-
h: complementaryHue,
|
|
318
|
-
s: color1HSL.s,
|
|
319
|
-
l: color1HSL.l,
|
|
320
|
-
});
|
|
321
|
-
// Find an analogous hue to the first color
|
|
322
|
-
const analogousHue1 = (color1Hue + 30) % 360;
|
|
323
|
-
const analogousHue2 = (color1Hue - 30 + 360) % 360;
|
|
324
|
-
// Convert the analogous hues back to RGB colors
|
|
325
|
-
const analogousColor1 = hslToRgb({
|
|
326
|
-
h: analogousHue1,
|
|
327
|
-
s: color1HSL.s,
|
|
328
|
-
l: color1HSL.l,
|
|
329
|
-
});
|
|
330
|
-
const analogousColor2 = hslToRgb({
|
|
331
|
-
h: analogousHue2,
|
|
332
|
-
s: color1HSL.s,
|
|
333
|
-
l: color1HSL.l,
|
|
334
|
-
});
|
|
335
|
-
// Calculate the average hue between the two colors
|
|
336
|
-
const avgHue = (color1HSL.h + color2HSL.h) / 2;
|
|
337
|
-
// Generate a new HSL object with the average hue and the same saturation and lightness as color1
|
|
338
|
-
const analogousHsl = { h: avgHue, s: color1HSL.s, l: color1HSL.l };
|
|
339
|
-
return [
|
|
340
|
-
color1,
|
|
341
|
-
color2,
|
|
342
|
-
rgbToHex(hslToRgb(analogousHsl)),
|
|
343
|
-
// rgbToHex(complementaryColor),
|
|
344
|
-
// rgbToHex(analogousColor1),
|
|
345
|
-
// rgbToHex(analogousColor2),
|
|
346
|
-
];
|
|
347
|
-
}
|
|
348
|
-
// @ts-ignore
|
|
349
163
|
function hexToRgb(hex) {
|
|
350
164
|
const r = parseInt(hex.substring(1, 3), 16);
|
|
351
165
|
const g = parseInt(hex.substring(3, 5), 16);
|
|
352
166
|
const b = parseInt(hex.substring(5, 7), 16);
|
|
353
167
|
return { r, g, b };
|
|
354
168
|
}
|
|
355
|
-
// @ts-ignore
|
|
356
169
|
function rgbToHex(rgb) {
|
|
357
170
|
const rHex = rgb.r.toString(16).padStart(2, '0');
|
|
358
171
|
const gHex = rgb.g.toString(16).padStart(2, '0');
|
|
359
172
|
const bHex = rgb.b.toString(16).padStart(2, '0');
|
|
360
173
|
return `#${rHex}${gHex}${bHex}`;
|
|
361
174
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
const r
|
|
365
|
-
|
|
366
|
-
const b = rgb.b / 255;
|
|
367
|
-
const max = Math.max(r, g, b);
|
|
368
|
-
const min = Math.min(r, g, b);
|
|
369
|
-
let h = 0, s = 0, l = (max + min) / 2;
|
|
370
|
-
if (max !== min) {
|
|
371
|
-
const d = max - min;
|
|
372
|
-
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
373
|
-
switch (max) {
|
|
374
|
-
case r:
|
|
375
|
-
h = (g - b) / d + (g < b ? 6 : 0);
|
|
376
|
-
break;
|
|
377
|
-
case g:
|
|
378
|
-
h = (b - r) / d + 2;
|
|
379
|
-
break;
|
|
380
|
-
case b:
|
|
381
|
-
h = (r - g) / d + 4;
|
|
382
|
-
break;
|
|
383
|
-
}
|
|
384
|
-
h /= 6;
|
|
385
|
-
}
|
|
386
|
-
return { h: h * 360, s: s * 100, l: l * 100 };
|
|
175
|
+
function colorToHSL(color) {
|
|
176
|
+
const colorHex = namedColorToHex(color);
|
|
177
|
+
const { r, g, b } = hexToRgb(colorHex);
|
|
178
|
+
return RGBToHSL(r, g, b);
|
|
387
179
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
return p + (q - p) * 6 * t;
|
|
406
|
-
if (t < 1 / 2)
|
|
407
|
-
return q;
|
|
408
|
-
if (t < 2 / 3)
|
|
409
|
-
return p + (q - p) * (2 / 3 - t) * 6;
|
|
410
|
-
return p;
|
|
411
|
-
};
|
|
412
|
-
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
413
|
-
const p = 2 * l - q;
|
|
414
|
-
r = hue2rgb(p, q, h + 1 / 3);
|
|
415
|
-
g = hue2rgb(p, q, h);
|
|
416
|
-
b = hue2rgb(p, q, h - 1 / 3);
|
|
417
|
-
}
|
|
418
|
-
return {
|
|
419
|
-
r: Math.round(r * 255),
|
|
420
|
-
g: Math.round(g * 255),
|
|
421
|
-
b: Math.round(b * 255),
|
|
422
|
-
};
|
|
180
|
+
/**
|
|
181
|
+
* Interpolates between two colors using HSL color space.
|
|
182
|
+
* @param leftColor - The left color in hexadecimal format.
|
|
183
|
+
* @param rightColor - The right color in hexadecimal format.
|
|
184
|
+
* @param length - The number of interpolated colors to generate between the
|
|
185
|
+
* left and right colors.
|
|
186
|
+
*/
|
|
187
|
+
function interpolateBetween(leftColor, rightColor, length = 3) {
|
|
188
|
+
const [h, s, _l] = colorToHSL(leftColor);
|
|
189
|
+
const [h2, s2, _l2] = colorToHSL(rightColor);
|
|
190
|
+
const hues = linspace(h, h2, length);
|
|
191
|
+
const saturations = linspace(s, s2, length);
|
|
192
|
+
const lightnesses = linspace(_l, _l2, length);
|
|
193
|
+
return Array.from({ length }).map((_, i) => {
|
|
194
|
+
const [r, g, b] = HSLtoRGB(hues[i], saturations[i], lightnesses[i]);
|
|
195
|
+
return rgbToHex({ r: Math.round(r), g: Math.round(g), b: Math.round(b) });
|
|
196
|
+
});
|
|
423
197
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Generates monochromatic interpolation of a given color.
|
|
200
|
+
* @param color - The base color in hexadecimal format.
|
|
201
|
+
* @param length - The number of interpolated colors to generate.
|
|
202
|
+
*/
|
|
203
|
+
function monochromaticInterpolation(color, length) {
|
|
204
|
+
const [h, s, _l] = colorToHSL(color);
|
|
205
|
+
const hues = linspace(h, h, length);
|
|
206
|
+
const saturations = linspace(s, s, length);
|
|
207
|
+
const lightnesses = linspace(0.6, 0.9, length);
|
|
208
|
+
return Array.from({ length }).map((_, i) => {
|
|
209
|
+
const [r, g, b] = HSLtoRGB(hues[i], saturations[i], lightnesses[i]);
|
|
210
|
+
return rgbToHex({ r: Math.round(r), g: Math.round(g), b: Math.round(b) });
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generates an array of colors by interpolating between colors in the given array.
|
|
215
|
+
* @param colors - The array of colors to interpolate between.
|
|
216
|
+
* @param length - The desired length of the resulting array.
|
|
217
|
+
*/
|
|
218
|
+
function generateArrayFromColor(colors, length) {
|
|
219
|
+
if (typeof colors === 'string') {
|
|
220
|
+
return monochromaticInterpolation(colors, length);
|
|
430
221
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
// Calculate the number of gradient steps between each pair of colors
|
|
434
|
-
const stepsPerPair = Math.floor(n / (numColors - 1));
|
|
435
|
-
// Generate the gradient steps for each pair of colors
|
|
436
|
-
for (let i = 1; i < numColors; i++) {
|
|
437
|
-
const color1 = colors[i - 1];
|
|
438
|
-
const color2 = colors[i];
|
|
439
|
-
const gradientSteps = generateGradientSteps(color1, color2, stepsPerPair);
|
|
440
|
-
output.push(...gradientSteps);
|
|
222
|
+
if (colors.length === 1) {
|
|
223
|
+
return monochromaticInterpolation(colors[0], length);
|
|
441
224
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
225
|
+
const pairs = colors.length - 1;
|
|
226
|
+
const needed = length - colors.length;
|
|
227
|
+
const baseAmount = Math.floor(needed / pairs);
|
|
228
|
+
const extras = needed % pairs;
|
|
229
|
+
let result = [];
|
|
230
|
+
let i = 0;
|
|
231
|
+
let j = 1;
|
|
232
|
+
while (j < colors.length) {
|
|
233
|
+
const additional = i < extras ? 1 : 0;
|
|
234
|
+
const interpLength = 2 + baseAmount + additional;
|
|
235
|
+
const interp = interpolateBetween(colors[i], colors[j], interpLength);
|
|
236
|
+
const lastIndex = j === colors.length - 1 ? undefined : -1;
|
|
237
|
+
result = result.concat(interp.slice(0, lastIndex));
|
|
238
|
+
i++;
|
|
239
|
+
j++;
|
|
445
240
|
}
|
|
446
|
-
return
|
|
241
|
+
return result;
|
|
447
242
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
const
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
// Generate the RGB gradient steps
|
|
462
|
-
const gradientSteps = [];
|
|
463
|
-
for (let i = 1; i <= n; i++) {
|
|
464
|
-
const r = Math.round(rgb1.r + stepR * i);
|
|
465
|
-
const g = Math.round(rgb1.g + stepG * i);
|
|
466
|
-
const b = Math.round(rgb1.b + stepB * i);
|
|
467
|
-
gradientSteps.push(rgbToHex({ r, g, b }));
|
|
243
|
+
/**
|
|
244
|
+
* Generates an array of numbers linearly spaced between start and end.
|
|
245
|
+
* @param start - The starting number of the sequence.
|
|
246
|
+
* @param end - The end number of the sequence.
|
|
247
|
+
* @param num - The number of samples to generate.
|
|
248
|
+
*/
|
|
249
|
+
function linspace(start, end, num) {
|
|
250
|
+
if (num <= 1)
|
|
251
|
+
return [start];
|
|
252
|
+
const step = (end - start) / (num - 1);
|
|
253
|
+
const result = new Array(num);
|
|
254
|
+
for (let i = 0; i < num; i++) {
|
|
255
|
+
result[i] = start + step * i;
|
|
468
256
|
}
|
|
469
|
-
return
|
|
257
|
+
return result;
|
|
470
258
|
}
|
|
471
259
|
const PieChartWrapper = React.forwardRef((props, ref) => {
|
|
472
|
-
const { category = 'pct_of_the_total', index = 'status', data, colors = [], variant = 'donut', valueFormatter = defaultValueFormatter, label, showLabel = true, showAnimation = true, showTooltip = true, className, containerStyle, theme, ...other } = props;
|
|
260
|
+
const { category = 'pct_of_the_total', index = 'status', data, colors = [], colorMap = {}, variant = 'donut', valueFormatter = defaultValueFormatter, label, showLabel = true, showAnimation = true, showTooltip = true, className, containerStyle, theme, ...other } = props;
|
|
473
261
|
const isDonut = variant == 'donut';
|
|
474
|
-
const parsedLabelInput = parseLabelInput(label, valueFormatter, data, category);
|
|
475
262
|
if (!data || data.length === 0) {
|
|
476
263
|
return (_jsx("div", { style: {
|
|
477
264
|
display: 'flex',
|
|
@@ -482,52 +269,24 @@ const PieChartWrapper = React.forwardRef((props, ref) => {
|
|
|
482
269
|
alignItems: 'center',
|
|
483
270
|
fontSize: 13,
|
|
484
271
|
color: theme.secondaryTextColor,
|
|
272
|
+
...containerStyle,
|
|
485
273
|
}, children: "No results found for specified time period." }));
|
|
486
274
|
}
|
|
487
|
-
// const newColors = generateColorGradientSteps(
|
|
488
|
-
// data.length,
|
|
489
|
-
// findComplementaryAndAnalogousColors(colors[0], colors[1])
|
|
490
|
-
// );
|
|
491
275
|
return (_jsx("div", { ref: ref, style: {
|
|
492
|
-
...containerStyle,
|
|
493
276
|
width: '100%',
|
|
494
|
-
// height: '100%',
|
|
495
277
|
display: 'flex',
|
|
496
278
|
flexDirection: 'row',
|
|
497
279
|
alignItems: 'center',
|
|
498
280
|
boxSizing: 'content-box',
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
: generateColorGradientSteps(Math.min(21, data.length), [
|
|
506
|
-
...findComplementaryAndAnalogousColors(colors[0], colors[1]),
|
|
507
|
-
...colors.slice(2),
|
|
508
|
-
]), index, category), cx: "50%", cy: "50%", startAngle: 90, endAngle: -270, innerRadius: isDonut ? '70%' : '0%', outerRadius: "100%", paddingAngle: 0, dataKey: category, nameKey: index, isAnimationActive: true }), _jsx(Tooltip, { wrapperStyle: {
|
|
281
|
+
...containerStyle,
|
|
282
|
+
}, ...other, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(PieChart, { children: [_jsx(Pie, { data: parseData(data, (colorMap[category] &&
|
|
283
|
+
generateArrayFromColor(colorMap[category], data.length)) ??
|
|
284
|
+
(colors.length >= data.length
|
|
285
|
+
? colors
|
|
286
|
+
: generateArrayFromColor(colors.slice(0, 2), data.length)), index, category), cx: "50%", cy: "50%", startAngle: 90, endAngle: -270, innerRadius: isDonut ? '70%' : '0%', outerRadius: "100%", paddingAngle: 0, dataKey: category, nameKey: index, isAnimationActive: true }), _jsx(Tooltip, { wrapperStyle: {
|
|
509
287
|
outline: 'none',
|
|
510
|
-
}, content: ({ active, payload }) =>
|
|
288
|
+
}, content: ({ active, payload }) => {
|
|
289
|
+
return (_jsx(DonutChartTooltip, { active: active, payload: payload, valueFormatter: valueFormatter, theme: theme }));
|
|
290
|
+
} })] }) }) }));
|
|
511
291
|
});
|
|
512
|
-
function Legend2({ payload, colors }) {
|
|
513
|
-
return (_jsx("div", { children: payload.map((item, idx) => {
|
|
514
|
-
if (idx > 9) {
|
|
515
|
-
return null;
|
|
516
|
-
}
|
|
517
|
-
return (_jsxs("div", { children: [_jsx("div", { style: {
|
|
518
|
-
height: 8,
|
|
519
|
-
width: 8,
|
|
520
|
-
borderRadius: 8,
|
|
521
|
-
background: colors[idx],
|
|
522
|
-
marginRight: 8,
|
|
523
|
-
marginTop: 2,
|
|
524
|
-
} }), _jsx("div", { style: {
|
|
525
|
-
whiteSpace: 'nowrap',
|
|
526
|
-
overflow: 'hidden',
|
|
527
|
-
textOverflow: 'ellipsis',
|
|
528
|
-
display: 'block',
|
|
529
|
-
maxWidth: 120,
|
|
530
|
-
}, children: item.value })] }, item.value));
|
|
531
|
-
}) }));
|
|
532
|
-
}
|
|
533
292
|
export default PieChartWrapper;
|
|
@@ -10,14 +10,12 @@ interface WithOrganizationId extends BaseQuillProviderProps {
|
|
|
10
10
|
queryEndpoint?: never;
|
|
11
11
|
queryHeaders?: never;
|
|
12
12
|
withCredentials?: boolean;
|
|
13
|
-
databaseType: string;
|
|
14
13
|
}
|
|
15
14
|
interface WithQueryEndpoint extends BaseQuillProviderProps {
|
|
16
15
|
organizationId?: string;
|
|
17
16
|
queryEndpoint: string;
|
|
18
17
|
queryHeaders: object;
|
|
19
18
|
withCredentials?: boolean;
|
|
20
|
-
databaseType: string;
|
|
21
19
|
}
|
|
22
20
|
type QuillProviderProps = WithOrganizationId | WithQueryEndpoint;
|
|
23
21
|
export interface QuillTheme {
|
|
@@ -57,6 +55,6 @@ export declare const defaultQuillTheme: {
|
|
|
57
55
|
loadingStateBackgroundColor: string;
|
|
58
56
|
hoverBackgroundColor: string;
|
|
59
57
|
};
|
|
60
|
-
declare const QuillProvider: ({ organizationId, publicKey, queryEndpoint, queryHeaders, environment, children,
|
|
58
|
+
declare const QuillProvider: ({ organizationId, publicKey, queryEndpoint, queryHeaders, environment, children, theme, withCredentials, }: QuillProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
61
59
|
export default QuillProvider;
|
|
62
60
|
//# sourceMappingURL=QuillProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuillProvider.d.ts","sourceRoot":"","sources":["../../src/QuillProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,kBAAmB,SAAQ,sBAAsB;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"QuillProvider.d.ts","sourceRoot":"","sources":["../../src/QuillProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,kBAAmB,SAAQ,sBAAsB;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,KAAK,kBAAkB,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAwB7B,CAAC;AAEF,QAAA,MAAM,aAAa,+GAShB,kBAAkB,4CAcpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -25,7 +25,7 @@ export const defaultQuillTheme = {
|
|
|
25
25
|
loadingStateBackgroundColor: '#F9F9FA',
|
|
26
26
|
hoverBackgroundColor: '#F4F4F5',
|
|
27
27
|
};
|
|
28
|
-
const QuillProvider = ({ organizationId, publicKey, queryEndpoint = 'https://quill-344421.uc.r.appspot.com/cloud', queryHeaders, environment, children,
|
|
29
|
-
return (_jsx(ContextProvider, { initialTheme: theme, publicKey: publicKey, environment: environment, customerId: organizationId, queryEndpoint: queryEndpoint, queryHeaders: queryHeaders, withCredentials: withCredentials,
|
|
28
|
+
const QuillProvider = ({ organizationId, publicKey, queryEndpoint = 'https://quill-344421.uc.r.appspot.com/cloud', queryHeaders, environment, children, theme = defaultQuillTheme, withCredentials = false, }) => {
|
|
29
|
+
return (_jsx(ContextProvider, { initialTheme: theme, publicKey: publicKey, environment: environment, customerId: organizationId, queryEndpoint: queryEndpoint, queryHeaders: queryHeaders, withCredentials: withCredentials, children: children }));
|
|
30
30
|
};
|
|
31
31
|
export default QuillProvider;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ButtonComponentProps, HeaderProps, LabelProps, MemoizedPopoverProps, TextProps } from './components/UiComponents';
|
|
1
3
|
/**
|
|
2
4
|
* Quill Report Builder
|
|
3
5
|
*
|
|
@@ -6,13 +8,13 @@
|
|
|
6
8
|
* they can click a button and add that report to their dashboard or export it
|
|
7
9
|
* as a CSV.
|
|
8
10
|
*/
|
|
9
|
-
export default function ReportBuilder({ initialTableName, onAddToDashboardComplete, destinationDashboard, organizationName, Button, SecondaryButton, TextInput, Select, Table, Popover, Tabs, Checkbox, Sidebar, Container, HandleButton, SelectColumn, DraggableColumn, ButtonLoadingState, TableLoadingState, SidebarHeading, SidebarSubHeading, FilterPopover, admin, }: {
|
|
11
|
+
export default function ReportBuilder({ initialTableName, onAddToDashboardComplete, destinationDashboard, organizationName, Button, SecondaryButton, TextInput, Select, Table, Popover, Tabs, Checkbox, Sidebar, Container, HandleButton, SelectColumn, DraggableColumn, ButtonLoadingState, TableLoadingState, SidebarHeading, SidebarSubHeading, FilterPopover, SortPopover, Label, Header, Text, PivotPopover, admin, hideAi, }: {
|
|
10
12
|
initialTableName: string;
|
|
11
13
|
onAddToDashboardComplete: () => void;
|
|
12
14
|
destinationDashboard?: string;
|
|
13
15
|
organizationName?: string;
|
|
14
|
-
Button?:
|
|
15
|
-
SecondaryButton?:
|
|
16
|
+
Button?: (props: ButtonComponentProps) => JSX.Element;
|
|
17
|
+
SecondaryButton?: (props: ButtonComponentProps) => JSX.Element;
|
|
16
18
|
TextInput?: any;
|
|
17
19
|
Select?: any;
|
|
18
20
|
Table?: any;
|
|
@@ -29,6 +31,12 @@ export default function ReportBuilder({ initialTableName, onAddToDashboardComple
|
|
|
29
31
|
SidebarHeading?: any;
|
|
30
32
|
SidebarSubHeading?: any;
|
|
31
33
|
FilterPopover?: any;
|
|
34
|
+
SortPopover?: any;
|
|
35
|
+
Label?: (props: LabelProps) => JSX.Element;
|
|
36
|
+
Header?: (props: HeaderProps) => JSX.Element;
|
|
37
|
+
Text?: (props: TextProps) => JSX.Element;
|
|
38
|
+
PivotPopover?: (props: MemoizedPopoverProps) => JSX.Element;
|
|
32
39
|
admin?: boolean;
|
|
40
|
+
hideAi?: boolean;
|
|
33
41
|
}): import("react/jsx-runtime").JSX.Element;
|
|
34
42
|
//# sourceMappingURL=ReportBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportBuilder.d.ts","sourceRoot":"","sources":["../../src/ReportBuilder.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReportBuilder.d.ts","sourceRoot":"","sources":["../../src/ReportBuilder.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,UAAU,EAMV,oBAAoB,EAIpB,SAAS,EACV,MAAM,2BAA2B,CAAC;AAqHnC;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,gBAAqB,EACrB,wBAA0C,EAC1C,oBAAgC,EAChC,gBAAqB,EACrB,MAAuB,EACvB,eAAyC,EACzC,SAA0B,EAC1B,MAAoB,EACpB,KAAkB,EAClB,OAAsB,EACtB,IAAgB,EAChB,QAA2B,EAC3B,OAAsB,EACtB,SAA2B,EAC3B,YAAgC,EAChC,YAAgC,EAChC,eAAsC,EACtC,kBAA4C,EAC5C,iBAA0C,EAC1C,cAAoC,EACpC,iBAA0C,EAC1C,aAAkC,EAClC,WAA8B,EAC9B,KAAqB,EACrB,MAAuB,EACvB,IAAmB,EACnB,YAA8B,EAC9B,KAAa,EACb,MAAc,GACf,EAAE;IACD,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,kBAAkB,CAAC,EAAE,GAAG,CAAC;IACzB,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAsyGA"}
|