@carto/ps-react-ui 4.2.7 → 4.3.0-widgets.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/cjs-D9ro6BXv.js +85 -0
- package/dist/cjs-D9ro6BXv.js.map +1 -0
- package/dist/components.js +758 -1398
- package/dist/components.js.map +1 -1
- package/dist/const-BLV7Tvte.js +758 -0
- package/dist/const-BLV7Tvte.js.map +1 -0
- package/dist/download-KroQ0SWg.js +195 -0
- package/dist/download-KroQ0SWg.js.map +1 -0
- package/dist/echart-CqfROFu3.js +214 -0
- package/dist/echart-CqfROFu3.js.map +1 -0
- package/dist/formula-ui-ChzvMEOG.js +52 -0
- package/dist/formula-ui-ChzvMEOG.js.map +1 -0
- package/dist/lasso-tool-BC-rsMMW.js +552 -0
- package/dist/lasso-tool-BC-rsMMW.js.map +1 -0
- package/dist/markdown-n_tOtoiT.js +27 -0
- package/dist/markdown-n_tOtoiT.js.map +1 -0
- package/dist/markdown-ui-BBrzzd7Y.js +62 -0
- package/dist/markdown-ui-BBrzzd7Y.js.map +1 -0
- package/dist/note-DF-n70TX.js +101 -0
- package/dist/note-DF-n70TX.js.map +1 -0
- package/dist/range-ui-CtUX11Xm.js +146 -0
- package/dist/range-ui-CtUX11Xm.js.map +1 -0
- package/dist/root-L_WZnJY5.js +46 -0
- package/dist/root-L_WZnJY5.js.map +1 -0
- package/dist/row-DQaSxmDV.js +18 -0
- package/dist/row-DQaSxmDV.js.map +1 -0
- package/dist/series-CsyEPq-X.js +83 -0
- package/dist/series-CsyEPq-X.js.map +1 -0
- package/dist/skeleton-BSPcEvfq.js +27 -0
- package/dist/skeleton-BSPcEvfq.js.map +1 -0
- package/dist/skeleton-C4rOYTy-.js +78 -0
- package/dist/skeleton-C4rOYTy-.js.map +1 -0
- package/dist/skeleton-C9Jqc241.js +82 -0
- package/dist/skeleton-C9Jqc241.js.map +1 -0
- package/dist/skeleton-D-zHBBIw.js +64 -0
- package/dist/skeleton-D-zHBBIw.js.map +1 -0
- package/dist/skeleton-DMP-IwaJ.js +109 -0
- package/dist/skeleton-DMP-IwaJ.js.map +1 -0
- package/dist/skeleton-DRorqowB.js +22 -0
- package/dist/skeleton-DRorqowB.js.map +1 -0
- package/dist/skeleton-DsZhv-AH.js +89 -0
- package/dist/skeleton-DsZhv-AH.js.map +1 -0
- package/dist/skeleton-Dx3FCer0.js +13 -0
- package/dist/skeleton-Dx3FCer0.js.map +1 -0
- package/dist/skeleton-QVDdb1c2.js +21 -0
- package/dist/skeleton-QVDdb1c2.js.map +1 -0
- package/dist/skeleton-loader-DWC1-EAx.js +23 -0
- package/dist/skeleton-loader-DWC1-EAx.js.map +1 -0
- package/dist/smart-tooltip-BSlcAkBM.js +39 -0
- package/dist/smart-tooltip-BSlcAkBM.js.map +1 -0
- package/dist/spread-ui-BjzH190y.js +82 -0
- package/dist/spread-ui-BjzH190y.js.map +1 -0
- package/dist/style-BGeCtQkP.js +19 -0
- package/dist/style-BGeCtQkP.js.map +1 -0
- package/dist/style-C7v1iwqD.js +34 -0
- package/dist/style-C7v1iwqD.js.map +1 -0
- package/dist/styles-cohnxh9F.js +23 -0
- package/dist/styles-cohnxh9F.js.map +1 -0
- package/dist/types/widgets/_shared/chart-config/config-factory.d.ts +44 -0
- package/dist/types/widgets/_shared/chart-config/csv-modifiers.d.ts +19 -0
- package/dist/types/widgets/_shared/chart-config/index.d.ts +7 -0
- package/dist/types/widgets/_shared/chart-config/option-builders.d.ts +39 -0
- package/dist/types/widgets/_shared/skeleton/index.d.ts +4 -0
- package/dist/types/widgets/_shared/skeleton/styles.d.ts +19 -0
- package/dist/types/widgets/actions/download/download.d.ts +2 -0
- package/dist/types/widgets/actions/download/exports.d.ts +6 -0
- package/dist/types/widgets/actions/download/types.d.ts +29 -0
- package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +2 -0
- package/dist/types/widgets/actions/fullscreen/styles.d.ts +10 -0
- package/dist/types/widgets/actions/fullscreen/types.d.ts +21 -0
- package/dist/types/widgets/actions/index.d.ts +5 -0
- package/dist/types/widgets/bar/config.d.ts +4 -0
- package/dist/types/widgets/bar/index.d.ts +3 -0
- package/dist/types/widgets/bar/skeleton.d.ts +1 -0
- package/dist/types/widgets/bar/style.d.ts +37 -0
- package/dist/types/widgets/bar/types.d.ts +15 -0
- package/dist/types/widgets/config-loader/index.d.ts +2 -0
- package/dist/types/widgets/config-loader/types.d.ts +12 -0
- package/dist/types/widgets/config-loader/use-config.d.ts +5 -0
- package/dist/types/widgets/echart/const.d.ts +1 -0
- package/dist/types/widgets/echart/echart-ui.d.ts +2 -0
- package/dist/types/widgets/echart/echart.d.ts +2 -0
- package/dist/types/widgets/echart/index.d.ts +5 -0
- package/dist/types/widgets/echart/options.d.ts +3 -0
- package/dist/types/widgets/echart/types.d.ts +31 -0
- package/dist/types/widgets/echart/utils.d.ts +74 -0
- package/dist/types/widgets/formula/components/item.d.ts +2 -0
- package/dist/types/widgets/formula/components/prefix.d.ts +2 -0
- package/dist/types/widgets/formula/components/row.d.ts +2 -0
- package/dist/types/widgets/formula/components/series.d.ts +2 -0
- package/dist/types/widgets/formula/components/suffix.d.ts +2 -0
- package/dist/types/widgets/formula/components/value.d.ts +2 -0
- package/dist/types/widgets/formula/config.d.ts +2 -0
- package/dist/types/widgets/formula/formula-ui.d.ts +2 -0
- package/dist/types/widgets/formula/index.d.ts +10 -0
- package/dist/types/widgets/formula/serializer.d.ts +16 -0
- package/dist/types/widgets/formula/skeleton.d.ts +1 -0
- package/dist/types/widgets/formula/style.d.ts +21 -0
- package/dist/types/widgets/formula/types.d.ts +54 -0
- package/dist/types/widgets/histogram/config.d.ts +4 -0
- package/dist/types/widgets/histogram/index.d.ts +3 -0
- package/dist/types/widgets/histogram/skeleton.d.ts +1 -0
- package/dist/types/widgets/histogram/style.d.ts +15 -0
- package/dist/types/widgets/histogram/types.d.ts +15 -0
- package/dist/types/widgets/index.d.ts +4 -1
- package/dist/types/widgets/markdown/config.d.ts +2 -0
- package/dist/types/widgets/markdown/index.d.ts +5 -0
- package/dist/types/widgets/markdown/markdown-ui.d.ts +2 -0
- package/dist/types/widgets/markdown/markdown.d.ts +2 -0
- package/dist/types/widgets/markdown/skeleton.d.ts +1 -0
- package/dist/types/widgets/markdown/style.d.ts +2 -0
- package/dist/types/widgets/markdown/types.d.ts +28 -0
- package/dist/types/widgets/note/index.d.ts +2 -0
- package/dist/types/widgets/note/note.d.ts +2 -0
- package/dist/types/widgets/note/style.d.ts +17 -0
- package/dist/types/widgets/note/types.d.ts +7 -0
- package/dist/types/widgets/pie/config.d.ts +4 -0
- package/dist/types/widgets/pie/index.d.ts +3 -0
- package/dist/types/widgets/pie/skeleton.d.ts +1 -0
- package/dist/types/widgets/pie/style.d.ts +15 -0
- package/dist/types/widgets/pie/types.d.ts +15 -0
- package/dist/types/widgets/range/components/range-item.d.ts +2 -0
- package/dist/types/widgets/range/config.d.ts +2 -0
- package/dist/types/widgets/range/index.d.ts +5 -0
- package/dist/types/widgets/range/range-ui.d.ts +2 -0
- package/dist/types/widgets/range/serializer.d.ts +16 -0
- package/dist/types/widgets/range/serializer.test.d.ts +1 -0
- package/dist/types/widgets/range/skeleton.d.ts +1 -0
- package/dist/types/widgets/range/style.d.ts +2 -0
- package/dist/types/widgets/range/types.d.ts +44 -0
- package/dist/types/widgets/root/index.d.ts +2 -0
- package/dist/types/widgets/root/root.d.ts +2 -0
- package/dist/types/widgets/root/style.d.ts +8 -0
- package/dist/types/widgets/root/types.d.ts +15 -0
- package/dist/types/widgets/scatterplot/config.d.ts +4 -0
- package/dist/types/widgets/scatterplot/index.d.ts +3 -0
- package/dist/types/widgets/scatterplot/skeleton.d.ts +1 -0
- package/dist/types/widgets/scatterplot/style.d.ts +24 -0
- package/dist/types/widgets/scatterplot/types.d.ts +15 -0
- package/dist/types/widgets/skeleton-loader/index.d.ts +2 -0
- package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +2 -0
- package/dist/types/widgets/skeleton-loader/types.d.ts +7 -0
- package/dist/types/widgets/spread/components/max-value.d.ts +2 -0
- package/dist/types/widgets/spread/components/min-value.d.ts +2 -0
- package/dist/types/widgets/spread/components/separator.d.ts +2 -0
- package/dist/types/widgets/spread/config.d.ts +2 -0
- package/dist/types/widgets/spread/index.d.ts +8 -0
- package/dist/types/widgets/spread/skeleton.d.ts +1 -0
- package/dist/types/widgets/spread/spread-ui.d.ts +2 -0
- package/dist/types/widgets/spread/style.d.ts +21 -0
- package/dist/types/widgets/spread/types.d.ts +52 -0
- package/dist/types/widgets/stores/types.d.ts +69 -0
- package/dist/types/widgets/stores/widget-store.d.ts +64 -0
- package/dist/types/widgets/stores/widget-store.test.d.ts +1 -0
- package/dist/types/widgets/timeseries/config.d.ts +4 -0
- package/dist/types/widgets/timeseries/index.d.ts +3 -0
- package/dist/types/widgets/timeseries/skeleton.d.ts +1 -0
- package/dist/types/widgets/timeseries/style.d.ts +38 -0
- package/dist/types/widgets/timeseries/types.d.ts +15 -0
- package/dist/types/widgets/widget/const.d.ts +2 -0
- package/dist/types/widgets/widget/types.d.ts +47 -0
- package/dist/types/widgets/widget/widget.d.ts +2 -0
- package/dist/types/widgets/wrapper/components/actions.d.ts +2 -0
- package/dist/types/widgets/wrapper/components/options.d.ts +2 -0
- package/dist/types/widgets/wrapper/components/title.d.ts +6 -0
- package/dist/types/widgets/wrapper/index.d.ts +6 -0
- package/dist/types/widgets/wrapper/styles.d.ts +83 -0
- package/dist/types/widgets/wrapper/types.d.ts +35 -0
- package/dist/types/widgets/wrapper/wrapper-ui.d.ts +2 -0
- package/dist/types/widgets/wrapper/wrapper.d.ts +2 -0
- package/dist/use-config-BYEOiIcu.js +43 -0
- package/dist/use-config-BYEOiIcu.js.map +1 -0
- package/dist/widget-store-yDO2ul8g.js +44 -0
- package/dist/widget-store-yDO2ul8g.js.map +1 -0
- package/dist/widgets/actions.js +9 -0
- package/dist/widgets/actions.js.map +1 -0
- package/dist/widgets/bar.js +7 -0
- package/dist/widgets/bar.js.map +1 -0
- package/dist/widgets/config-loader.js +5 -0
- package/dist/widgets/config-loader.js.map +1 -0
- package/dist/widgets/echart.js +11 -0
- package/dist/widgets/echart.js.map +1 -0
- package/dist/widgets/formula.js +27 -0
- package/dist/widgets/formula.js.map +1 -0
- package/dist/widgets/histogram.js +7 -0
- package/dist/widgets/histogram.js.map +1 -0
- package/dist/widgets/note.js +5 -0
- package/dist/widgets/note.js.map +1 -0
- package/dist/widgets/pie.js +7 -0
- package/dist/widgets/pie.js.map +1 -0
- package/dist/widgets/range.js +19 -0
- package/dist/widgets/range.js.map +1 -0
- package/dist/widgets/root.js +5 -0
- package/dist/widgets/root.js.map +1 -0
- package/dist/widgets/scatterplot.js +7 -0
- package/dist/widgets/scatterplot.js.map +1 -0
- package/dist/widgets/skeleton-loader.js +5 -0
- package/dist/widgets/skeleton-loader.js.map +1 -0
- package/dist/widgets/spread.js +21 -0
- package/dist/widgets/spread.js.map +1 -0
- package/dist/widgets/timeseries.js +7 -0
- package/dist/widgets/timeseries.js.map +1 -0
- package/dist/widgets/wrapper.js +9 -0
- package/dist/widgets/wrapper.js.map +1 -0
- package/dist/widgets.js +85 -1
- package/dist/widgets.js.map +1 -1
- package/dist/wrapper-57csMybC.js +265 -0
- package/dist/wrapper-57csMybC.js.map +1 -0
- package/package.json +73 -3
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Theme } from '@mui/material';
|
|
2
|
+
export declare const styles: {
|
|
3
|
+
skeleton: {
|
|
4
|
+
graph: {
|
|
5
|
+
container: {
|
|
6
|
+
position: "relative";
|
|
7
|
+
display: "flex";
|
|
8
|
+
alignItems: "center";
|
|
9
|
+
justifyContent: "space-between";
|
|
10
|
+
flexDirection: "column";
|
|
11
|
+
gap: ({ spacing }: Theme) => string;
|
|
12
|
+
height: ({ spacing }: Theme) => string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
legend: {
|
|
16
|
+
display: "flex";
|
|
17
|
+
alignItems: "center";
|
|
18
|
+
gap: ({ spacing }: Theme) => string;
|
|
19
|
+
height: ({ spacing }: Theme) => string;
|
|
20
|
+
position: "absolute";
|
|
21
|
+
bottom: number;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseWidgetProps } from '../widget/types';
|
|
2
|
+
import { BaseConfig } from '../config-loader';
|
|
3
|
+
import { EchartWidgetConfig, EchartWidgetState } from '../echart';
|
|
4
|
+
export interface ScatterplotProps extends BaseWidgetProps<ScatterplotWidgetConfig> {
|
|
5
|
+
type: 'scatterplot';
|
|
6
|
+
data: ScatterplotWidgetData | undefined;
|
|
7
|
+
}
|
|
8
|
+
export type ScatterplotWidgetData = [number, number][][];
|
|
9
|
+
export type ScatterplotWidgetState = EchartWidgetState;
|
|
10
|
+
export type ScatterplotWidgetConfig = ScatterplotConfig & EchartWidgetConfig<ScatterplotWidgetData> & {
|
|
11
|
+
type: ScatterplotProps['type'];
|
|
12
|
+
};
|
|
13
|
+
export interface ScatterplotConfig extends Omit<BaseConfig, 'data'> {
|
|
14
|
+
data?: ScatterplotWidgetData;
|
|
15
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { SkeletonLoaderProps } from './types';
|
|
2
|
+
export declare function SkeletonLoader({ id, children, Skeleton, }: SkeletonLoaderProps): string | number | bigint | boolean | Iterable<import('react').ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SpreadUI } from './spread-ui';
|
|
2
|
+
export { SpreadSkeleton } from './skeleton';
|
|
3
|
+
export { MinValue } from './components/min-value';
|
|
4
|
+
export { MaxValue } from './components/max-value';
|
|
5
|
+
export { Separator } from './components/separator';
|
|
6
|
+
export { Item, Row, Prefix, Suffix, Series } from '../formula';
|
|
7
|
+
export type { RowProps, ValueProps, SpreadWidgetState, ItemProps, SpreadDataItem, SpreadUIProps, } from './types';
|
|
8
|
+
export type { SeriesConfig } from '../formula/types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function SpreadSkeleton(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Theme } from '@mui/material';
|
|
2
|
+
export declare const styles: {
|
|
3
|
+
root: {
|
|
4
|
+
display: "flex";
|
|
5
|
+
flexDirection: "column";
|
|
6
|
+
gap: (theme: Theme) => string;
|
|
7
|
+
};
|
|
8
|
+
item: {
|
|
9
|
+
'&[data-disabled="true"]': {
|
|
10
|
+
color: (theme: Theme) => string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
row: {
|
|
14
|
+
display: "flex";
|
|
15
|
+
alignItems: "center";
|
|
16
|
+
gap: (theme: Theme) => string;
|
|
17
|
+
'& + &': {
|
|
18
|
+
marginTop: (theme: Theme) => string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { TypographyProps } from '@mui/material';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { BaseWidgetState, WidgetsStoreProps } from '../stores/types';
|
|
4
|
+
import { DownloadState } from '../actions';
|
|
5
|
+
import { DownloadConfigProps } from '../actions/download/types';
|
|
6
|
+
import { WrapperState } from '../wrapper/types';
|
|
7
|
+
import { BaseWidgetProps } from '../widget/types';
|
|
8
|
+
import { BaseConfig } from '../config-loader';
|
|
9
|
+
import { SeriesConfig } from '../formula/types';
|
|
10
|
+
export interface SpreadProps extends BaseWidgetProps<SpreadWidgetConfig> {
|
|
11
|
+
type: 'spread';
|
|
12
|
+
data: SpreadWidgetData | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface SpreadUIProps {
|
|
15
|
+
id: WidgetsStoreProps['id'];
|
|
16
|
+
}
|
|
17
|
+
export interface SpreadDataItem {
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
prefix?: string | ReactNode;
|
|
21
|
+
suffix?: string | ReactNode;
|
|
22
|
+
color?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RowProps {
|
|
25
|
+
id: WidgetsStoreProps['id'];
|
|
26
|
+
children: ReactNode | ((props: {
|
|
27
|
+
index: number;
|
|
28
|
+
}) => ReactNode);
|
|
29
|
+
}
|
|
30
|
+
export interface ValueProps extends Omit<ItemProps, 'children'> {
|
|
31
|
+
id: WidgetsStoreProps['id'];
|
|
32
|
+
index?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface ItemProps {
|
|
35
|
+
children: ReactNode;
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
TypographyProps?: TypographyProps;
|
|
38
|
+
}
|
|
39
|
+
export type SpreadWidgetData = SpreadDataItem[];
|
|
40
|
+
export type SpreadWidgetState = BaseWidgetState<WrapperState<DownloadState<SpreadProps & {
|
|
41
|
+
formatter?: (value: number) => string;
|
|
42
|
+
series?: SeriesConfig[];
|
|
43
|
+
}, SpreadWidgetData>>>;
|
|
44
|
+
export type SpreadWidgetConfig = BaseConfig & DownloadConfigProps<SpreadWidgetData> & {
|
|
45
|
+
type: SpreadProps['type'];
|
|
46
|
+
formatter?: SpreadWidgetState['formatter'];
|
|
47
|
+
series?: SeriesConfig[];
|
|
48
|
+
};
|
|
49
|
+
export interface SpreadConfig extends Omit<BaseConfig, 'data'> {
|
|
50
|
+
data?: SpreadWidgetData;
|
|
51
|
+
series?: SeriesConfig[];
|
|
52
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export interface WidgetsStoreProps {
|
|
3
|
+
/** Unique identifier for the widget */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Type of widget */
|
|
6
|
+
type: string;
|
|
7
|
+
/** Widget title/label */
|
|
8
|
+
title?: string;
|
|
9
|
+
/** Loading state */
|
|
10
|
+
isLoading: boolean;
|
|
11
|
+
/** Fetching state (e.g., for async data) */
|
|
12
|
+
isFetching?: boolean;
|
|
13
|
+
/** Error message if any */
|
|
14
|
+
error?: string;
|
|
15
|
+
/** Whether widget is visible */
|
|
16
|
+
visible: boolean;
|
|
17
|
+
/** Widget data - flexible to accommodate different widget types */
|
|
18
|
+
data?: unknown;
|
|
19
|
+
/** Additional notes about the widget */
|
|
20
|
+
note?: string;
|
|
21
|
+
/** Reference to the widget ui instance */
|
|
22
|
+
refUI?: RefObject<HTMLElement | null>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Base widget state interface
|
|
26
|
+
*/
|
|
27
|
+
export type BaseWidgetState<T> = WidgetsStoreProps & T;
|
|
28
|
+
/**
|
|
29
|
+
* Union type for all widget states
|
|
30
|
+
*/
|
|
31
|
+
export type WidgetState = BaseWidgetState<unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* Widget store state
|
|
34
|
+
*/
|
|
35
|
+
export interface WidgetStoreState {
|
|
36
|
+
/** Map of widget id to widget state */
|
|
37
|
+
widgets: Record<string, WidgetState>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Widget store actions
|
|
41
|
+
*/
|
|
42
|
+
export interface WidgetStoreActions {
|
|
43
|
+
/**
|
|
44
|
+
* Add or update a widget in the store
|
|
45
|
+
* @param id - Widget ID
|
|
46
|
+
* @param widget - Widget state properties to merge (accepts any object structure)
|
|
47
|
+
* @template T - Optional type parameter for backward compatibility (unused)
|
|
48
|
+
*/
|
|
49
|
+
setWidget: <T extends WidgetState>(id: WidgetState['id'], widget: Partial<Omit<T, 'id'>>) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Remove a widget from the store
|
|
52
|
+
* @param id - Widget ID to remove
|
|
53
|
+
*/
|
|
54
|
+
removeWidget: (id: WidgetState['id']) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Clear all widgets
|
|
57
|
+
*/
|
|
58
|
+
clearWidgets: () => void;
|
|
59
|
+
/**
|
|
60
|
+
* Get widget by ID
|
|
61
|
+
* @param id - Widget ID
|
|
62
|
+
* @returns Widget state or undefined if not found
|
|
63
|
+
*/
|
|
64
|
+
getWidget: <T extends WidgetState = WidgetState>(id: WidgetState['id']) => T | undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Complete widget store interface
|
|
68
|
+
*/
|
|
69
|
+
export type WidgetStore = WidgetStoreState & WidgetStoreActions;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { WidgetState, WidgetStore } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Zustand store for managing widget state across the application.
|
|
4
|
+
*
|
|
5
|
+
* This store provides centralized state management for all widget UI components
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* // Import the store
|
|
10
|
+
* import { useWidgetStore } from '@carto/ps-react-ui/widgets'
|
|
11
|
+
*
|
|
12
|
+
* // Use in a component
|
|
13
|
+
* function MyWidget() {
|
|
14
|
+
* const setWidget = useWidgetStore((state) => state.setWidget)
|
|
15
|
+
* const widget = useWidgetStore((state) => state.widgets['my-widget'])
|
|
16
|
+
*
|
|
17
|
+
* useEffect(() => {
|
|
18
|
+
* setWidget({
|
|
19
|
+
* id: 'my-widget',
|
|
20
|
+
* type: 'formula',
|
|
21
|
+
* title: 'Total Sales',
|
|
22
|
+
* isLoading: false,
|
|
23
|
+
* visible: true,
|
|
24
|
+
* data: { value: 1000, prefix: '$' }
|
|
25
|
+
* })
|
|
26
|
+
* }, [setWidget])
|
|
27
|
+
*
|
|
28
|
+
* return <div>{widget?.data?.value}</div>
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* // Get widgets by type
|
|
35
|
+
* const getWidgetsByType = useWidgetStore((state) => state.getWidgetsByType)
|
|
36
|
+
* const formulaWidgets = getWidgetsByType('formula')
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const useWidgetStore: import('zustand').UseBoundStore<Omit<import('zustand').StoreApi<WidgetStore>, "setState" | "devtools"> & {
|
|
40
|
+
setState(partial: WidgetStore | Partial<WidgetStore> | ((state: WidgetStore) => WidgetStore | Partial<WidgetStore>), replace?: false | undefined, action?: (string | {
|
|
41
|
+
[x: string]: unknown;
|
|
42
|
+
[x: number]: unknown;
|
|
43
|
+
[x: symbol]: unknown;
|
|
44
|
+
type: string;
|
|
45
|
+
}) | undefined): void;
|
|
46
|
+
setState(state: WidgetStore | ((state: WidgetStore) => WidgetStore), replace: true, action?: (string | {
|
|
47
|
+
[x: string]: unknown;
|
|
48
|
+
[x: number]: unknown;
|
|
49
|
+
[x: symbol]: unknown;
|
|
50
|
+
type: string;
|
|
51
|
+
}) | undefined): void;
|
|
52
|
+
devtools: {
|
|
53
|
+
cleanup: () => void;
|
|
54
|
+
};
|
|
55
|
+
}>;
|
|
56
|
+
/** Hook to get a specific widget by ID
|
|
57
|
+
* @param id - Widget ID
|
|
58
|
+
* @returns Widget state or undefined if not found
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* const widget = useWidget('widget-1')
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare const useWidget: <T extends WidgetState>(id: string) => T | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TimeseriesConfig } from './types';
|
|
2
|
+
export declare const timeseriesConfig: (config: TimeseriesConfig & {
|
|
3
|
+
refUI?: import('react').Ref<HTMLElement | null>;
|
|
4
|
+
}) => import('../_shared/chart-config/config-factory').ChartWidgetConfigResult<import('../echart').EchartWidgetData, TimeseriesConfig, "timeseries">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function TimeseriesSkeleton(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Theme } from '@mui/material';
|
|
2
|
+
export declare const styles: {
|
|
3
|
+
skeleton: {
|
|
4
|
+
graph: {
|
|
5
|
+
container: {
|
|
6
|
+
position: "relative";
|
|
7
|
+
display: "flex";
|
|
8
|
+
alignItems: "center";
|
|
9
|
+
justifyContent: "space-between";
|
|
10
|
+
flexDirection: "column";
|
|
11
|
+
gap: ({ spacing }: Theme) => string;
|
|
12
|
+
height: ({ spacing }: Theme) => string;
|
|
13
|
+
};
|
|
14
|
+
grid: {
|
|
15
|
+
display: "flex";
|
|
16
|
+
justifyContent: "space-between";
|
|
17
|
+
flex: "1 1 auto";
|
|
18
|
+
alignItems: "flex-end";
|
|
19
|
+
width: "100%";
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
histogram: {
|
|
23
|
+
item: {
|
|
24
|
+
flex: number;
|
|
25
|
+
maxWidth: ({ spacing }: Theme) => string;
|
|
26
|
+
'& + &': {
|
|
27
|
+
marginLeft: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
legend: {
|
|
32
|
+
display: "flex";
|
|
33
|
+
alignItems: "center";
|
|
34
|
+
gap: ({ spacing }: Theme) => string;
|
|
35
|
+
height: ({ spacing }: Theme) => string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseWidgetProps } from '../widget/types';
|
|
2
|
+
import { BaseConfig } from '../config-loader';
|
|
3
|
+
import { EchartWidgetConfig, EchartWidgetData, EchartWidgetState } from '../echart';
|
|
4
|
+
export interface TimeseriesProps extends Omit<BaseWidgetProps<TimeseriesWidgetConfig>, 'data'> {
|
|
5
|
+
type: 'timeseries';
|
|
6
|
+
data: TimeseriesWidgetData | undefined;
|
|
7
|
+
}
|
|
8
|
+
export type TimeseriesWidgetData = EchartWidgetData;
|
|
9
|
+
export type TimeseriesWidgetState = EchartWidgetState;
|
|
10
|
+
export type TimeseriesWidgetConfig = TimeseriesConfig & EchartWidgetConfig<TimeseriesWidgetData> & {
|
|
11
|
+
type: TimeseriesProps['type'];
|
|
12
|
+
};
|
|
13
|
+
export interface TimeseriesConfig extends Omit<BaseConfig, 'data'> {
|
|
14
|
+
data?: TimeseriesWidgetData;
|
|
15
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DownloadProps } from '../actions/download/types';
|
|
2
|
+
import { FullScreenProps } from '../actions/fullscreen/types';
|
|
3
|
+
import { WrapperUIProps, WrapperProps } from '../wrapper';
|
|
4
|
+
import { BaseConfig, ConfigProps } from '../config-loader';
|
|
5
|
+
import { FormulaProps, FormulaWidgetConfig } from '../formula/types';
|
|
6
|
+
import { RootProps } from '../root/types';
|
|
7
|
+
import { ComponentType } from 'react';
|
|
8
|
+
import { BarProps, BarWidgetConfig } from '../bar/types';
|
|
9
|
+
import { PieProps, PieWidgetConfig } from '../pie/types';
|
|
10
|
+
import { ScatterplotProps, ScatterplotWidgetConfig } from '../scatterplot/types';
|
|
11
|
+
import { TimeseriesProps, TimeseriesWidgetConfig } from '../timeseries/types';
|
|
12
|
+
import { HistogramProps, HistogramWidgetConfig } from '../histogram/types';
|
|
13
|
+
import { SpreadProps, SpreadWidgetConfig } from '../spread/types';
|
|
14
|
+
import { RangeProps, RangeWidgetConfig } from '../range/types';
|
|
15
|
+
import { MarkdownProps, MarkdownWidgetConfig } from '../markdown/types';
|
|
16
|
+
export interface BaseWidgetProps<C = unknown> extends Omit<RootProps, 'children'> {
|
|
17
|
+
children?: RootProps['children'];
|
|
18
|
+
config?: ConfigProps<C>['config'];
|
|
19
|
+
actions?: WrapperUIProps['actions'];
|
|
20
|
+
options?: WrapperUIProps['options'];
|
|
21
|
+
onChangeCollapsed?: WrapperProps['onChangeCollapsed'];
|
|
22
|
+
WrapperProps?: Pick<WrapperProps, 'sx' | 'Component' | 'labels'>;
|
|
23
|
+
ActionsProps?: {
|
|
24
|
+
download?: Pick<DownloadProps, 'Icon' | 'IconButtonProps'>;
|
|
25
|
+
fullScreen?: Pick<FullScreenProps, 'Icon'>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export type WidgetProps = FormulaProps | BarProps | PieProps | ScatterplotProps | TimeseriesProps | HistogramProps | SpreadProps | RangeProps | MarkdownProps;
|
|
29
|
+
export type WidgetConfig = FormulaWidgetConfig | BarWidgetConfig | PieWidgetConfig | ScatterplotWidgetConfig | TimeseriesWidgetConfig | HistogramWidgetConfig | SpreadWidgetConfig | RangeWidgetConfig | MarkdownWidgetConfig;
|
|
30
|
+
export interface WidgetBaseComponentConfig<C = unknown> {
|
|
31
|
+
component: ComponentType<{
|
|
32
|
+
id: string;
|
|
33
|
+
}>;
|
|
34
|
+
skeleton: ComponentType;
|
|
35
|
+
defaultConfig: (props: BaseConfig) => C;
|
|
36
|
+
}
|
|
37
|
+
export interface WidgetComponentConfig {
|
|
38
|
+
formula: WidgetBaseComponentConfig<FormulaWidgetConfig>;
|
|
39
|
+
bar: WidgetBaseComponentConfig<BarWidgetConfig>;
|
|
40
|
+
pie: WidgetBaseComponentConfig<PieWidgetConfig>;
|
|
41
|
+
scatterplot: WidgetBaseComponentConfig<ScatterplotWidgetConfig>;
|
|
42
|
+
timeseries: WidgetBaseComponentConfig<TimeseriesWidgetConfig>;
|
|
43
|
+
histogram: WidgetBaseComponentConfig<HistogramWidgetConfig>;
|
|
44
|
+
spread: WidgetBaseComponentConfig<SpreadWidgetConfig>;
|
|
45
|
+
range: WidgetBaseComponentConfig<RangeWidgetConfig>;
|
|
46
|
+
markdown: WidgetBaseComponentConfig<MarkdownWidgetConfig>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { WrapperOptionsProps } from '../types';
|
|
3
|
+
export declare function Title({ label, children, }: {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
label?: NonNullable<WrapperOptionsProps['labels']>['title'];
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Actions } from './components/actions';
|
|
2
|
+
export { Options } from './components/options';
|
|
3
|
+
export { Title } from './components/title';
|
|
4
|
+
export { WrapperWidget } from './wrapper';
|
|
5
|
+
export { WrapperUI } from './wrapper-ui';
|
|
6
|
+
export type { WrapperProps, WrapperUIProps, WrapperState } from './types';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Theme } from '@mui/material';
|
|
2
|
+
export declare const styles: {
|
|
3
|
+
root: {
|
|
4
|
+
'.Mui-disabled .MuiAccordionSummary-expandIconWrapper': {
|
|
5
|
+
display: "none";
|
|
6
|
+
};
|
|
7
|
+
'.widget-wrapper-actions > *': {
|
|
8
|
+
opacity: number;
|
|
9
|
+
transition: ({ transitions }: Theme) => string;
|
|
10
|
+
'@media (hover: hover)': {
|
|
11
|
+
opacity: number;
|
|
12
|
+
};
|
|
13
|
+
'&:has(.active)': {
|
|
14
|
+
opacity: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
'&:hover': {
|
|
18
|
+
'& .widget-wrapper-actions > *': {
|
|
19
|
+
opacity: number;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
'&.collapsed .widget-wrapper-actions > *': {
|
|
23
|
+
opacity: number;
|
|
24
|
+
pointerEvents: "none";
|
|
25
|
+
'&:has(.active)': {
|
|
26
|
+
opacity: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
summary: {
|
|
31
|
+
minHeight: ({ spacing }: Theme) => string;
|
|
32
|
+
'& .MuiAccordionSummary-content': {
|
|
33
|
+
gap: ({ spacing }: Theme) => string;
|
|
34
|
+
paddingInlineEnd: ({ spacing }: Theme) => string;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
loading: {
|
|
38
|
+
height: ({ spacing }: Theme) => string;
|
|
39
|
+
left: number;
|
|
40
|
+
position: "absolute";
|
|
41
|
+
top: number;
|
|
42
|
+
width: string;
|
|
43
|
+
zIndex: number;
|
|
44
|
+
};
|
|
45
|
+
title: {
|
|
46
|
+
wrapper: {
|
|
47
|
+
flexGrow: number;
|
|
48
|
+
flexShrink: number;
|
|
49
|
+
minWidth: number;
|
|
50
|
+
display: "flex";
|
|
51
|
+
justifyContent: "center";
|
|
52
|
+
flexDirection: "column";
|
|
53
|
+
};
|
|
54
|
+
container: {
|
|
55
|
+
display: "flex";
|
|
56
|
+
alignItems: "center";
|
|
57
|
+
flexGrow: number;
|
|
58
|
+
minHeight: ({ spacing }: Theme) => string;
|
|
59
|
+
};
|
|
60
|
+
text: {
|
|
61
|
+
wordBreak: "break-word";
|
|
62
|
+
overflow: "hidden";
|
|
63
|
+
display: "-webkit-box";
|
|
64
|
+
WebkitLineClamp: number;
|
|
65
|
+
WebkitBoxOrient: "vertical";
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
actions: {
|
|
69
|
+
display: "flex";
|
|
70
|
+
gap: ({ spacing }: Theme) => string;
|
|
71
|
+
alignItems: "center";
|
|
72
|
+
flexShrink: number;
|
|
73
|
+
justifyContent: "flex-end";
|
|
74
|
+
'& > div': {
|
|
75
|
+
pointerEvents: "auto";
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
options: {
|
|
79
|
+
trigger: {
|
|
80
|
+
pointerEvents: "auto";
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ReactNode, SyntheticEvent } from 'react';
|
|
2
|
+
import { SxProps, Theme } from '@mui/material';
|
|
3
|
+
import { BaseWidgetState } from '../stores/types';
|
|
4
|
+
export interface WrapperProps extends Pick<WrapperUIProps, 'sx' | 'actions' | 'options' | 'labels' | 'children' | 'onChangeCollapsed'> {
|
|
5
|
+
id: WrapperState['id'];
|
|
6
|
+
Component?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export type WrapperState<T = unknown> = BaseWidgetState<T & Pick<WrapperUIProps, 'collapsed' | 'disabled' | 'title'>>;
|
|
9
|
+
export interface WrapperUIProps extends WrapperActionsProps, Omit<WrapperOptionsProps, 'labels' | ''> {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
title: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
collapsed?: boolean;
|
|
14
|
+
isLoading?: boolean;
|
|
15
|
+
sx?: SxProps<Theme>;
|
|
16
|
+
labels?: {
|
|
17
|
+
options?: WrapperOptionsProps['labels'];
|
|
18
|
+
};
|
|
19
|
+
onChangeCollapsed?: (event: SyntheticEvent<Element, Event>, collapsed: boolean) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface WrapperActionsProps {
|
|
22
|
+
actions?: ReactNode[];
|
|
23
|
+
}
|
|
24
|
+
export interface WrapperOptionsProps {
|
|
25
|
+
labels?: {
|
|
26
|
+
title: string;
|
|
27
|
+
};
|
|
28
|
+
options?: WrapperOption[];
|
|
29
|
+
}
|
|
30
|
+
export interface WrapperOption {
|
|
31
|
+
label: string;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
icon?: ReactNode;
|
|
34
|
+
onClick: () => void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { WrapperProps } from './types';
|
|
2
|
+
export declare function WrapperWidget({ id, sx, actions, options, labels, Component, children, onChangeCollapsed, }: WrapperProps): string | number | bigint | boolean | Iterable<import('react').ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { c as W } from "react/compiler-runtime";
|
|
2
|
+
import { u as C } from "./widget-store-yDO2ul8g.js";
|
|
3
|
+
import "react";
|
|
4
|
+
import { useTheme as w } from "@mui/material";
|
|
5
|
+
function j(a) {
|
|
6
|
+
const e = W(16), {
|
|
7
|
+
id: t,
|
|
8
|
+
defaultConfig: c,
|
|
9
|
+
config: o
|
|
10
|
+
} = a;
|
|
11
|
+
let r;
|
|
12
|
+
e[0] !== t ? (r = (s) => s.widgets[t], e[0] = t, e[1] = r) : r = e[1];
|
|
13
|
+
const f = C(r), m = C(x), g = w();
|
|
14
|
+
f?.refUI, f?.data;
|
|
15
|
+
const p = f?.refUI, I = f?.data;
|
|
16
|
+
let i;
|
|
17
|
+
e[2] !== c || e[3] !== p || e[4] !== I || e[5] !== g ? (i = c({
|
|
18
|
+
refUI: p,
|
|
19
|
+
theme: g,
|
|
20
|
+
data: I
|
|
21
|
+
}), e[2] = c, e[3] = p, e[4] = I, e[5] = g, e[6] = i) : i = e[6];
|
|
22
|
+
const n = i;
|
|
23
|
+
let l;
|
|
24
|
+
e[7] !== o || e[8] !== n ? (l = o ? o(n) : n, e[7] = o, e[8] = n, e[9] = l) : l = e[9];
|
|
25
|
+
const U = l;
|
|
26
|
+
let d;
|
|
27
|
+
e[10] !== t || e[11] !== m ? (d = (s) => {
|
|
28
|
+
delete s.refUI, delete s.theme, delete s.data, m(t, s);
|
|
29
|
+
}, e[10] = t, e[11] = m, e[12] = d) : d = e[12];
|
|
30
|
+
const h = d;
|
|
31
|
+
let u;
|
|
32
|
+
return e[13] !== U || e[14] !== h ? (u = {
|
|
33
|
+
config: U,
|
|
34
|
+
run: h
|
|
35
|
+
}, e[13] = U, e[14] = h, e[15] = u) : u = e[15], u;
|
|
36
|
+
}
|
|
37
|
+
function x(a) {
|
|
38
|
+
return a.setWidget;
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
j as u
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=use-config-BYEOiIcu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-config-BYEOiIcu.js","sources":["../src/widgets/config-loader/use-config.ts"],"sourcesContent":["import { useWidgetStore } from '../stores/widget-store'\nimport type { BaseConfig, ConfigProps } from './types'\nimport { useCallback, useMemo } from 'react'\nimport { useTheme } from '@mui/material'\n\nexport function useConfig<T>({ id, defaultConfig, config }: ConfigProps<T>): {\n config: T\n run: (config: Partial<Omit<T & BaseConfig, 'id'>>) => void\n} {\n const widget = useWidgetStore((state) => state.widgets[id])\n const setWidget = useWidgetStore((state) => state.setWidget)\n\n const theme = useTheme()\n\n const defaultCfg = useMemo(() => {\n return defaultConfig({\n refUI: widget?.refUI,\n theme,\n data: widget?.data,\n })\n }, [defaultConfig, widget?.refUI, widget?.data, theme])\n\n const result = useMemo(() => {\n return config ? config(defaultCfg) : defaultCfg\n }, [config, defaultCfg])\n\n const run = useCallback(\n (config: Partial<Omit<T & BaseConfig, 'id'>>) => {\n delete config.refUI\n delete config.theme\n delete config.data\n setWidget(id, config)\n },\n [id, setWidget],\n )\n\n return {\n config: result,\n run,\n }\n}\n"],"names":["useConfig","t0","$","_c","id","defaultConfig","config","t1","state","widgets","widget","useWidgetStore","setWidget","_temp","theme","useTheme","refUI","data","t2","t3","t4","defaultCfg","t5","result","t6","config_0","run","t7","state_0"],"mappings":";;;;AAKO,SAAAA,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAsB;AAAA,IAAAC,IAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,QAAAA;AAAAA,EAAAA,IAAAL;AAA6C,MAAAM;AAAA,EAAAL,SAAAE,KAI1CG,IAAAC,CAAAA,MAAWA,EAAKC,QAASL,CAAE,GAACF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA1D,QAAAQ,IAAeC,EAAeJ,CAA4B,GAC1DK,IAAkBD,EAAeE,CAA0B,GAE3DC,IAAcC,EAAAA;AAQKL,EAAAA,GAAMM,OAASN,GAAMO;AAJ7B,QAAAC,IAAAR,GAAMM,OAEPG,IAAAT,GAAMO;AAAM,MAAAG;AAAA,EAAAlB,EAAA,CAAA,MAAAG,KAAAH,EAAA,CAAA,MAAAgB,KAAAhB,EAAA,CAAA,MAAAiB,KAAAjB,SAAAY,KAHbM,IAAAf,EAAc;AAAA,IAAAW,OACZE;AAAAA,IAAaJ,OAAAA;AAAAA,IAAAG,MAEdE;AAAAA,EAAAA,CACP,GAACjB,OAAAG,GAAAH,OAAAgB,GAAAhB,OAAAiB,GAAAjB,OAAAY,GAAAZ,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AALJ,QAAAmB,IACED;AAKqD,MAAAE;AAAA,EAAApB,EAAA,CAAA,MAAAI,KAAAJ,SAAAmB,KAG9CC,IAAAhB,IAASA,EAAOe,CAAuB,IAAvCA,GAAwCnB,OAAAI,GAAAJ,OAAAmB,GAAAnB,OAAAoB,KAAAA,IAAApB,EAAA,CAAA;AADjD,QAAAqB,IACED;AACsB,MAAAE;AAAA,EAAAtB,EAAA,EAAA,MAAAE,KAAAF,UAAAU,KAGtBY,IAAAC,CAAAA,MAAA;AACE,WAAOnB,EAAMU,OACb,OAAOV,EAAMQ,OACb,OAAOR,EAAMW,MACbL,EAAUR,GAAIE,CAAM;AAAA,EAAC,GACtBJ,QAAAE,GAAAF,QAAAU,GAAAV,QAAAsB,KAAAA,IAAAtB,EAAA,EAAA;AANH,QAAAwB,IAAYF;AAQX,MAAAG;AAAA,SAAAzB,EAAA,EAAA,MAAAqB,KAAArB,UAAAwB,KAEMC,IAAA;AAAA,IAAArB,QACGiB;AAAAA,IAAMG,KAAAA;AAAAA,EAAAA,GAEfxB,QAAAqB,GAAArB,QAAAwB,GAAAxB,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA,GAHMyB;AAGN;AAlCI,SAAAd,EAAAe,GAAA;AAAA,SAKuCpB,EAAKI;AAAU;"}
|