@vuu-ui/vuu-chart 3.0.0-beta.3 → 3.1.0-beta.1

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.
Files changed (51) hide show
  1. package/package.json +15 -12
  2. package/src/Chart.css.js +46 -0
  3. package/src/Chart.mjs +81 -0
  4. package/src/ChartSeries.mjs +151 -0
  5. package/src/DataRowMovingWindow.mjs +64 -0
  6. package/src/chart-types.mjs +2 -0
  7. package/src/chartTooltip.mjs +23 -0
  8. package/src/index.mjs +2 -0
  9. package/src/useChartContextMenu.mjs +22 -0
  10. package/src/useChartOptions.mjs +88 -0
  11. package/src/useChartSelection.mjs +47 -0
  12. package/cjs/Chart.css.js +0 -6
  13. package/cjs/Chart.css.js.map +0 -1
  14. package/cjs/Chart.js +0 -89
  15. package/cjs/Chart.js.map +0 -1
  16. package/cjs/ChartSeries.js +0 -183
  17. package/cjs/ChartSeries.js.map +0 -1
  18. package/cjs/DataRowMovingWindow.js +0 -97
  19. package/cjs/DataRowMovingWindow.js.map +0 -1
  20. package/cjs/chart-types.js +0 -6
  21. package/cjs/chart-types.js.map +0 -1
  22. package/cjs/chartTooltip.js +0 -27
  23. package/cjs/chartTooltip.js.map +0 -1
  24. package/cjs/index.js +0 -10
  25. package/cjs/index.js.map +0 -1
  26. package/cjs/useChartContextMenu.js +0 -29
  27. package/cjs/useChartContextMenu.js.map +0 -1
  28. package/cjs/useChartOptions.js +0 -101
  29. package/cjs/useChartOptions.js.map +0 -1
  30. package/cjs/useChartSelection.js +0 -72
  31. package/cjs/useChartSelection.js.map +0 -1
  32. package/esm/Chart.css.js +0 -4
  33. package/esm/Chart.css.js.map +0 -1
  34. package/esm/Chart.js +0 -87
  35. package/esm/Chart.js.map +0 -1
  36. package/esm/ChartSeries.js +0 -181
  37. package/esm/ChartSeries.js.map +0 -1
  38. package/esm/DataRowMovingWindow.js +0 -95
  39. package/esm/DataRowMovingWindow.js.map +0 -1
  40. package/esm/chart-types.js +0 -4
  41. package/esm/chart-types.js.map +0 -1
  42. package/esm/chartTooltip.js +0 -25
  43. package/esm/chartTooltip.js.map +0 -1
  44. package/esm/index.js +0 -3
  45. package/esm/index.js.map +0 -1
  46. package/esm/useChartContextMenu.js +0 -27
  47. package/esm/useChartContextMenu.js.map +0 -1
  48. package/esm/useChartOptions.js +0 -99
  49. package/esm/useChartOptions.js.map +0 -1
  50. package/esm/useChartSelection.js +0 -70
  51. package/esm/useChartSelection.js.map +0 -1
@@ -1,99 +0,0 @@
1
- import { itemsChanged } from '@vuu-ui/vuu-utils';
2
- import { useState, useMemo } from 'react';
3
- import { ChartSeries } from './ChartSeries.js';
4
- import { chartTooltip } from './chartTooltip.js';
5
-
6
- const defaultPalette = [
7
- "#4676bf",
8
- "#ab6528",
9
- "#9f55c2",
10
- "#2a8285",
11
- "#697694",
12
- "#B0549d"
13
- ];
14
- const combineConfig = (config, overrides) => {
15
- return {
16
- ...config,
17
- ...overrides
18
- };
19
- };
20
- const useChartOptions = ({
21
- categoryColumnName,
22
- config,
23
- dataExclusions,
24
- dataSource,
25
- itemColorFunction,
26
- palette = defaultPalette,
27
- seriesColumnNames,
28
- showTooltip = true,
29
- symbolSizeFunction: symbolSize
30
- }) => {
31
- const [, forceRender] = useState({});
32
- const chartSeries = useMemo(() => {
33
- const cs = new ChartSeries({
34
- config: combineConfig(config, { itemColorFunction, symbolSize }),
35
- dataExclusions,
36
- dataSource,
37
- palette
38
- });
39
- cs.on("update", () => forceRender({}));
40
- return cs;
41
- }, [dataSource, config]);
42
- useMemo(() => {
43
- if (categoryColumnName !== chartSeries.categoryColumn) {
44
- chartSeries.categoryColumn = categoryColumnName;
45
- }
46
- if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) {
47
- chartSeries.seriesColumnNames = seriesColumnNames;
48
- }
49
- }, [categoryColumnName, chartSeries, seriesColumnNames]);
50
- return {
51
- animation: false,
52
- color: chartSeries.palette,
53
- dataZoom: [
54
- {
55
- backgroundColor: "var(--vuuChart-zoom-background, transparent)",
56
- borderColor: "var(--vuuChart-zoom-borderColor, white)",
57
- handleStyle: {
58
- color: "var(--vuuChart-zoom-handleColor, white)"
59
- },
60
- moveHandleStyle: {
61
- color: "var(--vuuChart-zoom-slideColor, white)"
62
- },
63
- type: "slider",
64
- start: 0,
65
- end: 100
66
- }
67
- ],
68
- grid: {
69
- left: "0",
70
- bottom: 0,
71
- right: 5
72
- },
73
- series: chartSeries.series,
74
- tooltip: showTooltip ? {
75
- alwaysShowContent: true,
76
- backgroundColor: "",
77
- borderColor: "",
78
- // borderWidth: "",
79
- className: "vuuChartTooltip",
80
- enterable: true,
81
- formatter: chartTooltip,
82
- // padding: "",
83
- trigger: "axis"
84
- } : void 0,
85
- xAxis: {
86
- data: chartSeries.categories
87
- },
88
- yAxis: {
89
- splitLine: {
90
- lineStyle: {
91
- color: "var(--salt-separable-tertiary-borderColor)"
92
- }
93
- }
94
- }
95
- };
96
- };
97
-
98
- export { useChartOptions };
99
- //# sourceMappingURL=useChartOptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useChartOptions.js","sources":["../../../packages/vuu-chart/src/useChartOptions.ts"],"sourcesContent":["import { DataSource, DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { ColumnMap, itemsChanged } from \"@vuu-ui/vuu-utils\";\nimport { type EChartsCoreOption } from \"echarts\";\nimport { useMemo, useState } from \"react\";\nimport type {\n ChartSelectionModel,\n ItemColorFunction,\n SymbolSize,\n SymbolSizeFunction,\n SymbolType,\n} from \"./chart-types\";\nimport { ChartSeries } from \"./ChartSeries\";\nimport { chartTooltip } from \"./chartTooltip\";\n\nconst defaultPalette = [\n \"#4676bf\",\n \"#ab6528\",\n \"#9f55c2\",\n \"#2a8285\",\n \"#697694\",\n \"#B0549d\",\n];\n\nexport interface ChartConfig {\n itemColorFunction?: ItemColorFunction;\n selectionModel?: ChartSelectionModel;\n symbolSize?: SymbolSize;\n}\n\nexport interface DataExclusionOptions {\n isExcludedData: (\n row: DataSourceRow,\n columnMap: ColumnMap,\n column: string,\n ) => boolean;\n /**\n * An embedded SVG path. If provided, will be used to render excluded values.\n */\n symbol?: SymbolType;\n}\n\nexport interface ChartOptionsProps {\n categoryColumnName: string;\n config: ChartConfig;\n dataExclusions?: DataExclusionOptions;\n dataSource: DataSource;\n itemColorFunction?: ItemColorFunction;\n palette?: string[];\n seriesColumnNames: string[];\n showTooltip?: boolean;\n symbolSizeFunction?: SymbolSizeFunction;\n}\n\nconst combineConfig = (config: ChartConfig, overrides: ChartConfig) => {\n return {\n ...config,\n ...overrides,\n };\n};\n\nexport const useChartOptions = ({\n categoryColumnName,\n config,\n dataExclusions,\n dataSource,\n itemColorFunction,\n palette = defaultPalette,\n seriesColumnNames,\n showTooltip = true,\n symbolSizeFunction: symbolSize,\n}: ChartOptionsProps) => {\n const [, forceRender] = useState({});\n\n const chartSeries = useMemo(() => {\n const cs = new ChartSeries({\n config: combineConfig(config, { itemColorFunction, symbolSize }),\n dataExclusions,\n dataSource,\n palette,\n });\n cs.on(\"update\", () => forceRender({}));\n return cs;\n }, [dataSource, config]);\n\n useMemo(() => {\n if (categoryColumnName !== chartSeries.categoryColumn) {\n chartSeries.categoryColumn = categoryColumnName;\n }\n if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) {\n chartSeries.seriesColumnNames = seriesColumnNames;\n }\n }, [categoryColumnName, chartSeries, seriesColumnNames]);\n\n return {\n animation: false,\n color: chartSeries.palette,\n dataZoom: [\n {\n backgroundColor: \"var(--vuuChart-zoom-background, transparent)\",\n borderColor: \"var(--vuuChart-zoom-borderColor, white)\",\n handleStyle: {\n color: \"var(--vuuChart-zoom-handleColor, white)\",\n },\n moveHandleStyle: {\n color: \"var(--vuuChart-zoom-slideColor, white)\",\n },\n type: \"slider\",\n start: 0,\n end: 100,\n },\n ],\n grid: {\n left: \"0\",\n bottom: 0,\n right: 5,\n },\n series: chartSeries.series,\n tooltip: showTooltip\n ? {\n alwaysShowContent: true,\n backgroundColor: \"\",\n borderColor: \"\",\n // borderWidth: \"\",\n className: \"vuuChartTooltip\",\n enterable: true,\n formatter: chartTooltip,\n // padding: \"\",\n trigger: \"axis\",\n }\n : undefined,\n xAxis: {\n data: chartSeries.categories,\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n color: \"var(--salt-separable-tertiary-borderColor)\",\n },\n },\n },\n } as EChartsCoreOption;\n};\n"],"names":[],"mappings":";;;;;AAcA,MAAM,cAAiB,GAAA;AAAA,EACrB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAgCA,MAAM,aAAA,GAAgB,CAAC,MAAA,EAAqB,SAA2B,KAAA;AACrE,EAAO,OAAA;AAAA,IACL,GAAG,MAAA;AAAA,IACH,GAAG;AAAA,GACL;AACF,CAAA;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,kBAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAU,GAAA,cAAA;AAAA,EACV,iBAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd,kBAAoB,EAAA;AACtB,CAAyB,KAAA;AACvB,EAAA,MAAM,GAAG,WAAW,CAAI,GAAA,QAAA,CAAS,EAAE,CAAA;AAEnC,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAM,MAAA,EAAA,GAAK,IAAI,WAAY,CAAA;AAAA,MACzB,QAAQ,aAAc,CAAA,MAAA,EAAQ,EAAE,iBAAA,EAAmB,YAAY,CAAA;AAAA,MAC/D,cAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,EAAA,CAAG,GAAG,QAAU,EAAA,MAAM,WAAY,CAAA,EAAE,CAAC,CAAA;AACrC,IAAO,OAAA,EAAA;AAAA,GACN,EAAA,CAAC,UAAY,EAAA,MAAM,CAAC,CAAA;AAEvB,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAI,IAAA,kBAAA,KAAuB,YAAY,cAAgB,EAAA;AACrD,MAAA,WAAA,CAAY,cAAiB,GAAA,kBAAA;AAAA;AAE/B,IAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAY,CAAA,iBAAiB,CAAG,EAAA;AAClE,MAAA,WAAA,CAAY,iBAAoB,GAAA,iBAAA;AAAA;AAClC,GACC,EAAA,CAAC,kBAAoB,EAAA,WAAA,EAAa,iBAAiB,CAAC,CAAA;AAEvD,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,KAAA;AAAA,IACX,OAAO,WAAY,CAAA,OAAA;AAAA,IACnB,QAAU,EAAA;AAAA,MACR;AAAA,QACE,eAAiB,EAAA,8CAAA;AAAA,QACjB,WAAa,EAAA,yCAAA;AAAA,QACb,WAAa,EAAA;AAAA,UACX,KAAO,EAAA;AAAA,SACT;AAAA,QACA,eAAiB,EAAA;AAAA,UACf,KAAO,EAAA;AAAA,SACT;AAAA,QACA,IAAM,EAAA,QAAA;AAAA,QACN,KAAO,EAAA,CAAA;AAAA,QACP,GAAK,EAAA;AAAA;AACP,KACF;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,GAAA;AAAA,MACN,MAAQ,EAAA,CAAA;AAAA,MACR,KAAO,EAAA;AAAA,KACT;AAAA,IACA,QAAQ,WAAY,CAAA,MAAA;AAAA,IACpB,SAAS,WACL,GAAA;AAAA,MACE,iBAAmB,EAAA,IAAA;AAAA,MACnB,eAAiB,EAAA,EAAA;AAAA,MACjB,WAAa,EAAA,EAAA;AAAA;AAAA,MAEb,SAAW,EAAA,iBAAA;AAAA,MACX,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,YAAA;AAAA;AAAA,MAEX,OAAS,EAAA;AAAA,KAEX,GAAA,KAAA,CAAA;AAAA,IACJ,KAAO,EAAA;AAAA,MACL,MAAM,WAAY,CAAA;AAAA,KACpB;AAAA,IACA,KAAO,EAAA;AAAA,MACL,SAAW,EAAA;AAAA,QACT,SAAW,EAAA;AAAA,UACT,KAAO,EAAA;AAAA;AACT;AACF;AACF,GACF;AACF;;;;"}
@@ -1,70 +0,0 @@
1
- import { useState, useRef, useCallback } from 'react';
2
-
3
- const dataItemMatch = (dataItem, targetSeries, targetKey) => dataItem?.column === targetSeries && dataItem?.key === targetKey;
4
- const dataItemInList = (dataItems, targetColumn, targetKey) => dataItems.some(
5
- (dataItem) => dataItemMatch(dataItem, targetColumn, targetKey)
6
- );
7
- const useChartSelection = (_props) => {
8
- const [selectedKeys, setSelectedKeys] = useState([]);
9
- const [, setHighlightedKey] = useState();
10
- const selectedKeysRef = useRef(selectedKeys);
11
- const highlightedKeyRef = useRef(void 0);
12
- const handleClick = useCallback(
13
- ({ data, event, seriesName: column }) => {
14
- if (column) {
15
- event?.stop();
16
- const { row } = data;
17
- const key = row[6];
18
- setSelectedKeys((currentSelection) => {
19
- return selectedKeysRef.current = dataItemInList(
20
- currentSelection,
21
- column,
22
- key
23
- ) ? [] : [{ column, key }];
24
- });
25
- }
26
- },
27
- []
28
- );
29
- const handleMouseOver = useCallback(
30
- ({ data, seriesName }) => {
31
- if (seriesName) {
32
- const { row } = data;
33
- setHighlightedKey(
34
- highlightedKeyRef.current = { column: seriesName, key: row[6] }
35
- );
36
- }
37
- },
38
- []
39
- );
40
- const handleMouseOut = useCallback(() => {
41
- setHighlightedKey(highlightedKeyRef.current = void 0);
42
- }, []);
43
- const itemColorFunction = useCallback(
44
- ({ color, data, seriesName }) => {
45
- return dataItemInList(selectedKeysRef.current, seriesName, data.key) ? "purple" : color;
46
- },
47
- []
48
- );
49
- const symbolSizeFunction = useCallback(
50
- (value, { data, seriesName }) => {
51
- const isSelected = dataItemInList(
52
- selectedKeysRef.current,
53
- seriesName,
54
- data.key
55
- );
56
- return isSelected || dataItemMatch(highlightedKeyRef.current, seriesName, data.key) ? 16 : 6;
57
- },
58
- []
59
- );
60
- return {
61
- onClick: handleClick,
62
- onMouseOver: handleMouseOver,
63
- onMouseOut: handleMouseOut,
64
- itemColorFunction,
65
- symbolSizeFunction
66
- };
67
- };
68
-
69
- export { useChartSelection };
70
- //# sourceMappingURL=useChartSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useChartSelection.js","sources":["../../../packages/vuu-chart/src/useChartSelection.ts"],"sourcesContent":["import { ECElementEvent } from \"echarts\";\nimport { useCallback, useRef, useState } from \"react\";\nimport {\n ChartSelectionModel,\n EChartsCallbackParams,\n ItemColorFunction,\n SymbolSizeFunction,\n} from \"./chart-types\";\nimport { DataSourceValue } from \"./ChartSeries\";\n\ninterface ChartSelectionHookProps {\n selectionModel?: ChartSelectionModel;\n categoryColumnName: string;\n}\n\ntype DataItem = {\n column: string;\n key: string;\n};\n\nconst dataItemMatch = (\n dataItem: DataItem | undefined,\n targetSeries: string,\n targetKey: string,\n) => dataItem?.column === targetSeries && dataItem?.key === targetKey;\nconst dataItemInList = (\n dataItems: DataItem[],\n targetColumn: string,\n targetKey: string,\n) =>\n dataItems.some((dataItem) =>\n dataItemMatch(dataItem, targetColumn, targetKey),\n );\n\nexport const useChartSelection = (_props: ChartSelectionHookProps) => {\n const [selectedKeys, setSelectedKeys] = useState<DataItem[]>([]);\n const [, setHighlightedKey] = useState<DataItem | undefined>();\n const selectedKeysRef = useRef<DataItem[]>(selectedKeys);\n const highlightedKeyRef = useRef<DataItem | undefined>(undefined);\n\n const handleClick = useCallback(\n ({ data, event, seriesName: column }: ECElementEvent) => {\n if (column) {\n event?.stop();\n\n const { row } = data as DataSourceValue;\n const key = row[6];\n\n setSelectedKeys((currentSelection) => {\n return (selectedKeysRef.current = dataItemInList(\n currentSelection,\n column,\n key,\n )\n ? []\n : [{ column, key }]);\n });\n }\n },\n [],\n );\n\n const handleMouseOver = useCallback(\n ({ data, seriesName }: ECElementEvent) => {\n if (seriesName) {\n const { row } = data as DataSourceValue;\n setHighlightedKey(\n (highlightedKeyRef.current = { column: seriesName, key: row[6] }),\n );\n }\n },\n [],\n );\n\n const handleMouseOut = useCallback(() => {\n setHighlightedKey((highlightedKeyRef.current = undefined));\n }, []);\n\n const itemColorFunction = useCallback<ItemColorFunction>(\n ({ color, data, seriesName }) => {\n return dataItemInList(selectedKeysRef.current, seriesName, data.key)\n ? \"purple\"\n : color;\n },\n [],\n );\n\n const symbolSizeFunction = useCallback<SymbolSizeFunction>(\n (value: number, { data, seriesName }: EChartsCallbackParams) => {\n const isSelected = dataItemInList(\n selectedKeysRef.current,\n seriesName,\n data.key,\n );\n return isSelected ||\n dataItemMatch(highlightedKeyRef.current, seriesName, data.key)\n ? 16\n : 6;\n },\n [],\n );\n\n return {\n onClick: handleClick,\n onMouseOver: handleMouseOver,\n onMouseOut: handleMouseOut,\n itemColorFunction,\n symbolSizeFunction,\n };\n};\n"],"names":[],"mappings":";;AAoBA,MAAM,aAAA,GAAgB,CACpB,QACA,EAAA,YAAA,EACA,cACG,QAAU,EAAA,MAAA,KAAW,YAAgB,IAAA,QAAA,EAAU,GAAQ,KAAA,SAAA;AAC5D,MAAM,cAAiB,GAAA,CACrB,SACA,EAAA,YAAA,EACA,cAEA,SAAU,CAAA,IAAA;AAAA,EAAK,CAAC,QAAA,KACd,aAAc,CAAA,QAAA,EAAU,cAAc,SAAS;AACjD,CAAA;AAEW,MAAA,iBAAA,GAAoB,CAAC,MAAoC,KAAA;AACpE,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAqB,EAAE,CAAA;AAC/D,EAAA,MAAM,GAAG,iBAAiB,CAAA,GAAI,QAA+B,EAAA;AAC7D,EAAM,MAAA,eAAA,GAAkB,OAAmB,YAAY,CAAA;AACvD,EAAM,MAAA,iBAAA,GAAoB,OAA6B,KAAS,CAAA,CAAA;AAEhE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,EAAE,IAAA,EAAM,KAAO,EAAA,UAAA,EAAY,QAA6B,KAAA;AACvD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,KAAA,EAAO,IAAK,EAAA;AAEZ,QAAM,MAAA,EAAE,KAAQ,GAAA,IAAA;AAChB,QAAM,MAAA,GAAA,GAAM,IAAI,CAAC,CAAA;AAEjB,QAAA,eAAA,CAAgB,CAAC,gBAAqB,KAAA;AACpC,UAAA,OAAQ,gBAAgB,OAAU,GAAA,cAAA;AAAA,YAChC,gBAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,cAEE,EAAC,GACD,CAAC,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,SACrB,CAAA;AAAA;AACH,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,EAAE,IAAM,EAAA,UAAA,EAAiC,KAAA;AACxC,MAAA,IAAI,UAAY,EAAA;AACd,QAAM,MAAA,EAAE,KAAQ,GAAA,IAAA;AAChB,QAAA,iBAAA;AAAA,UACG,iBAAA,CAAkB,UAAU,EAAE,MAAA,EAAQ,YAAY,GAAK,EAAA,GAAA,CAAI,CAAC,CAAE;AAAA,SACjE;AAAA;AACF,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAmB,iBAAA,CAAA,iBAAA,CAAkB,UAAU,KAAU,CAAA,CAAA;AAAA,GAC3D,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,EAAE,KAAO,EAAA,IAAA,EAAM,YAAiB,KAAA;AAC/B,MAAA,OAAO,eAAe,eAAgB,CAAA,OAAA,EAAS,YAAY,IAAK,CAAA,GAAG,IAC/D,QACA,GAAA,KAAA;AAAA,KACN;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,KAAA,EAAe,EAAE,IAAA,EAAM,YAAwC,KAAA;AAC9D,MAAA,MAAM,UAAa,GAAA,cAAA;AAAA,QACjB,eAAgB,CAAA,OAAA;AAAA,QAChB,UAAA;AAAA,QACA,IAAK,CAAA;AAAA,OACP;AACA,MAAO,OAAA,UAAA,IACL,cAAc,iBAAkB,CAAA,OAAA,EAAS,YAAY,IAAK,CAAA,GAAG,IAC3D,EACA,GAAA,CAAA;AAAA,KACN;AAAA,IACA;AAAC,GACH;AAEA,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,WAAA;AAAA,IACT,WAAa,EAAA,eAAA;AAAA,IACb,UAAY,EAAA,cAAA;AAAA,IACZ,iBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}