@weng-lab/visualization 1.0.11 → 1.2.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.
@@ -0,0 +1,3 @@
1
+ import { ProportionsBarProps } from './types';
2
+ export declare const ProportionsBar: <K extends string>({ data, tooltipTitle, label, loading, sortDescending, getColor, formatLabel, style, }: ProportionsBarProps<K>) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=ProportionsBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProportionsBar.d.ts","sourceRoot":"","sources":["../../../../src/components/ProportionsBar/ProportionsBar.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAG9C,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,EAAE,uFAS9C,mBAAmB,CAAC,CAAC,CAAC,4CA6HxB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const getProportionsFromArray: <T extends Record<K, string>, K extends string, V extends string>(
2
+ /**
3
+ * Array of objects to pull values from.
4
+ */
5
+ data: T[],
6
+ /**
7
+ * The field you want to count up. Should resolve to a string in the object.
8
+ */
9
+ field: K,
10
+ /**
11
+ * Optionally define fields to include in the returned object.
12
+ * Useful for getting 0 values in the returned object which otherwise would not be present.
13
+ */
14
+ includeValues?: V[] | readonly V[]) => Record<T[K], number>;
15
+ /**
16
+ * Sorts an object of numeric values in descending order by value.
17
+ *
18
+ * @param obj - An object with string keys and number values
19
+ * @returns A new object with the same entries sorted by value (descending)
20
+ */
21
+ export declare function sortObjectByValueDesc<K extends string>(obj: Record<K, number>): Record<K, number>;
22
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/components/ProportionsBar/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM;AACrG;;GAEG;AACH,MAAM,CAAC,EAAE;AACT;;GAEG;AACH,OAAO,CAAC;AACR;;;GAGG;AACH,gBAAgB,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,yBAYnC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EACpD,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GACrB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAEnB"}
@@ -0,0 +1,4 @@
1
+ export { ProportionsBar } from './ProportionsBar';
2
+ export type { ProportionsBarProps } from './types';
3
+ export { getProportionsFromArray } from './helpers';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ProportionsBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,48 @@
1
+ export type ProportionsBarProps<K extends string> = {
2
+ /**
3
+ * An object with categories for keys, and values for the counts for the category
4
+ * Ex:
5
+ * ```jsx
6
+ * {
7
+ * "apple": 3
8
+ * "banana": 8
9
+ * "orange": 0
10
+ * "pear": 2
11
+ * }
12
+ * ```
13
+ */
14
+ data: Record<K, number>;
15
+ /**
16
+ * Title for top of tooltip
17
+ */
18
+ tooltipTitle: string;
19
+ /**
20
+ * Optional label to be displayed above the bar
21
+ */
22
+ label?: string;
23
+ /**
24
+ * If true will display a loading state instead of the bar. Uses MUI `<LinearProgress>`
25
+ */
26
+ loading?: boolean;
27
+ /**
28
+ *
29
+ * @param key
30
+ * @returns the color to be used for the category in both the bar and the tooltip
31
+ */
32
+ getColor: (key: K) => string;
33
+ /**
34
+ * Optional formatter for the category for display purposes
35
+ * @param key
36
+ * @returns
37
+ */
38
+ formatLabel?: (key: K) => string;
39
+ /**
40
+ * By default this component keeps original insertion order, set this to sort descending.
41
+ */
42
+ sortDescending?: boolean;
43
+ /**
44
+ * applied to wrapper div
45
+ */
46
+ style?: React.CSSProperties;
47
+ };
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ProportionsBar/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI;IAClD;;;;;;;;;;;OAWG;IACH,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { SingleNodeProps } from './types';
2
+ declare const SingleNode: <T>(props: SingleNodeProps<T>) => import("react/jsx-runtime").JSX.Element;
3
+ export default SingleNode;
4
+ //# sourceMappingURL=SingleNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleNode.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/SingleNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAO1C,QAAA,MAAM,UAAU,GAAI,CAAC,EACjB,OAAO,eAAe,CAAC,CAAC,CAAC,4CAwG5B,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { TreemapProps } from './types';
2
+ declare const Treemap: <T extends object>(props: TreemapProps<T>) => import("react/jsx-runtime").JSX.Element;
3
+ export default Treemap;
4
+ //# sourceMappingURL=TreeMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeMap.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/TreeMap.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAQpD,QAAA,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,EAC7B,OAAO,YAAY,CAAC,CAAC,CAAC,4CAuFzB,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ValueOvalProps } from './types';
2
+ declare const ValueOval: React.FC<ValueOvalProps>;
3
+ export default ValueOval;
4
+ //# sourceMappingURL=ValueOval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueOval.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/ValueOval.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmCvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { HierarchyRectangularNode } from '@visx/hierarchy/lib/types';
2
+ import { AnimationType, TreemapNode, TreemapProps } from './types';
3
+ import { Transition } from 'framer-motion';
4
+ export declare function getLabelPlacement(node: HierarchyRectangularNode<TreemapNode<any>>, placement: TreemapProps<any>["labelPlacement"], showValue?: boolean): {
5
+ textX: number;
6
+ textY: number;
7
+ valueY: number;
8
+ anchor: string;
9
+ baseline: string;
10
+ };
11
+ export declare function measureTextWidth(text: string, fontSize: number, fontFamily: string): number;
12
+ export declare function truncateTextToWidth(text: string, maxWidth: number, fontSize: number, fontFamily: string): string;
13
+ export declare const getAnimationProps: (type: AnimationType | undefined, index: number) => {
14
+ initial?: undefined;
15
+ animate?: undefined;
16
+ transition?: undefined;
17
+ } | {
18
+ transition: Transition;
19
+ initial: {
20
+ opacity: number;
21
+ scale?: undefined;
22
+ y?: undefined;
23
+ x?: undefined;
24
+ };
25
+ animate: {
26
+ opacity: number;
27
+ scale?: undefined;
28
+ y?: undefined;
29
+ x?: undefined;
30
+ };
31
+ } | {
32
+ transition: Transition;
33
+ initial: {
34
+ opacity: number;
35
+ scale: number;
36
+ y?: undefined;
37
+ x?: undefined;
38
+ };
39
+ animate: {
40
+ opacity: number;
41
+ scale: number;
42
+ y?: undefined;
43
+ x?: undefined;
44
+ };
45
+ } | {
46
+ transition: Transition;
47
+ initial: {
48
+ opacity: number;
49
+ y: number;
50
+ scale?: undefined;
51
+ x?: undefined;
52
+ };
53
+ animate: {
54
+ opacity: number;
55
+ y: number;
56
+ scale?: undefined;
57
+ x?: undefined;
58
+ };
59
+ } | {
60
+ transition: Transition;
61
+ initial: {
62
+ opacity: number;
63
+ x: number;
64
+ scale?: undefined;
65
+ y?: undefined;
66
+ };
67
+ animate: {
68
+ opacity: number;
69
+ x: number;
70
+ scale?: undefined;
71
+ y?: undefined;
72
+ };
73
+ } | {
74
+ initial: {
75
+ scale: number;
76
+ opacity?: undefined;
77
+ y?: undefined;
78
+ x?: undefined;
79
+ };
80
+ animate: {
81
+ scale: number;
82
+ opacity?: undefined;
83
+ y?: undefined;
84
+ x?: undefined;
85
+ };
86
+ transition: Transition;
87
+ };
88
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAW,UAAU,EAAE,MAAM,eAAe,CAAC;AAGpD,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,wBAAwB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAChD,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,EAC9C,SAAS,CAAC,EAAE,OAAO;;;;;;EAiDtB;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAMlF;AAGD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAgBR;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,aAAa,GAAG,SAAS,EAAE,OAAO,MAAM;;;;;gBAMhD,UAAU;;;;;;;;;;;;;;gBAAV,UAAU;;;;;;;;;;;;;;gBAAV,UAAU;;;;;;;;;;;;;;gBAAV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { default as Treemap } from './TreeMap';
2
+ export { Treemap };
3
+ export type { TreemapNode, TreemapProps } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { HierarchyRectangularNode } from '@visx/hierarchy/lib/types';
2
+ import { ReactElement } from 'react';
3
+ import { DownloadPlotHandle } from '../../utility';
4
+ export type Methods = "treemapSquarify" | "treemapBinary" | "treemapDice" | "treemapResquarify" | "treemapSlice" | "treemapSliceDice";
5
+ export type AnimationType = "fade" | "scale" | "slideUp" | "slideRight" | "pop";
6
+ export type TreemapNode<T> = {
7
+ label: string;
8
+ value: number;
9
+ color?: string;
10
+ children?: TreemapNode<T>[];
11
+ metaData?: T;
12
+ };
13
+ export type TreemapProps<T> = {
14
+ data: TreemapNode<T>[];
15
+ treemapStyle?: {
16
+ /**
17
+ * padding will apply to both inner and outer but
18
+ * specifying inner/outer will override that specific padding
19
+ */
20
+ padding?: number;
21
+ paddingInner?: number;
22
+ paddingOuter?: number;
23
+ borderRadius?: number;
24
+ strokeWidth?: number;
25
+ fontSize?: number;
26
+ };
27
+ /**
28
+ * Visx has a few built in tiling methods that can be changed here
29
+ */
30
+ tileMethod?: Methods;
31
+ labelPlacement?: "middle" | "topRight" | "topLeft" | "bottomLeft" | "bottomRight";
32
+ tooltipBody?: (node: TreemapNode<T>) => ReactElement;
33
+ onNodeClicked?: (point: TreemapNode<T>) => void;
34
+ animation?: AnimationType;
35
+ ref?: React.Ref<DownloadPlotHandle>;
36
+ downloadFileName?: string;
37
+ };
38
+ export type SingleNodeProps<T> = {
39
+ node: HierarchyRectangularNode<TreemapNode<T>>;
40
+ isHovered: boolean;
41
+ onHover: (hovered: boolean) => void;
42
+ strokeWidth: number;
43
+ borderRadius: number;
44
+ fontSize: number;
45
+ labelPlacement: "middle" | "topRight" | "topLeft" | "bottomLeft" | "bottomRight";
46
+ tooltipBody?: (node: TreemapNode<T>) => ReactElement;
47
+ onNodeClicked?: (point: TreemapNode<T>) => void;
48
+ };
49
+ export type ValueOvalProps = {
50
+ cx: number;
51
+ cy: number;
52
+ value: number | string;
53
+ color: string;
54
+ align: string;
55
+ };
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/TreeMap/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG,iBAAiB,GAAG,eAAe,GAAG,aAAa,GAAG,mBAAmB,GAAG,cAAc,GAAG,kBAAkB,CAAA;AAErI,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC;AAEhF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,CAAC;CACd,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvB,YAAY,CAAC,EAAE;QACb;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAA;IACD;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;IAClF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;IACrD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC7B,IAAI,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;IACjF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,YAAY,CAAA;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACnD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAA"}
@@ -6,5 +6,9 @@ export { ViolinPlot } from './components/ViolinPlot';
6
6
  export type { Distribution, ViolinPlotProps, ViolinPoint } from './components/ViolinPlot';
7
7
  export { BarPlot } from './components/BarPlot';
8
8
  export type { BarPlotProps, BarData } from './components/BarPlot';
9
+ export { Treemap } from './components/TreeMap';
10
+ export type { TreemapNode, TreemapProps } from './components/TreeMap';
9
11
  export type { DownloadPlotHandle } from './utility';
12
+ export { ProportionsBar, getProportionsFromArray } from './components/ProportionsBar';
13
+ export type { ProportionsBarProps } from './components/ProportionsBar';
10
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE1F,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE1F,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAErE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtF,YAAY,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAA"}