@carto/ps-react-ui 5.0.0-widgets.8 → 5.0.0-widgets.9
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/{error-G3sy6lw3.js → error-B2IJ9d2h.js} +2 -2
- package/dist/{error-G3sy6lw3.js.map → error-B2IJ9d2h.js.map} +1 -1
- package/dist/markdown-ui-CpNYUPqC.js +68 -0
- package/dist/markdown-ui-CpNYUPqC.js.map +1 -0
- package/dist/{no-data-DfkC_Kc_.js → no-data-C54XJt13.js} +2 -2
- package/dist/{no-data-DfkC_Kc_.js.map → no-data-C54XJt13.js.map} +1 -1
- package/dist/row-DLKZN5aF.js +33 -0
- package/dist/row-DLKZN5aF.js.map +1 -0
- package/dist/{row-B9hTUitn.js → row-DrHwXNvF.js} +2 -2
- package/dist/{row-B9hTUitn.js.map → row-DrHwXNvF.js.map} +1 -1
- package/dist/series-Cf1QPZHV.js +83 -0
- package/dist/series-Cf1QPZHV.js.map +1 -0
- package/dist/{series-DojKkd_o.js → series-Do02NQUF.js} +3 -3
- package/dist/{series-DojKkd_o.js.map → series-Do02NQUF.js.map} +1 -1
- package/dist/styles-CcC5L2cr.js +77 -0
- package/dist/styles-CcC5L2cr.js.map +1 -0
- package/dist/types/widgets/markdown/types.d.ts +1 -1
- package/dist/types/widgets/table/hooks/use-selection.d.ts +3 -3
- package/dist/types/widgets/table/hooks/use-sort.d.ts +1 -5
- package/dist/types/widgets/table/types.d.ts +2 -2
- package/dist/utils-DNtU8q7E.js +144 -0
- package/dist/utils-DNtU8q7E.js.map +1 -0
- package/dist/{widget-store-Dd7_sWZT.js → widget-store-CB6Trp_0.js} +31 -32
- package/dist/{widget-store-Dd7_sWZT.js.map → widget-store-CB6Trp_0.js.map} +1 -1
- package/dist/widget-store-yDO2ul8g.js +44 -0
- package/dist/widget-store-yDO2ul8g.js.map +1 -0
- package/dist/widgets/actions.js +448 -441
- package/dist/widgets/actions.js.map +1 -1
- package/dist/widgets/bar.js +1 -1
- package/dist/widgets/category.js +1 -1
- package/dist/widgets/echart.js +1 -1
- package/dist/widgets/error.js +1 -1
- package/dist/widgets/formula.js +3 -3
- package/dist/widgets/histogram.js +1 -1
- package/dist/widgets/markdown.js +1 -1
- package/dist/widgets/no-data.js +1 -1
- package/dist/widgets/pie.js +1 -1
- package/dist/widgets/range.js +2 -2
- package/dist/widgets/root.js +1 -1
- package/dist/widgets/scatterplot.js +1 -1
- package/dist/widgets/skeleton-loader.js +1 -1
- package/dist/widgets/spread.js +3 -3
- package/dist/widgets/stores.js +1 -1
- package/dist/widgets/table.js +491 -503
- package/dist/widgets/table.js.map +1 -1
- package/dist/widgets/timeseries.js +1 -1
- package/dist/widgets/wrapper.js +1 -1
- package/dist/widgets.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { d as c } from "./cjs-D9ro6BXv.js";
|
|
2
|
+
const y = "stacked";
|
|
3
|
+
function S(...e) {
|
|
4
|
+
return c(e[0] ?? {}, e[1] ?? {}, {
|
|
5
|
+
customMerge: (i) => {
|
|
6
|
+
if (i === "color")
|
|
7
|
+
return (I, t) => t;
|
|
8
|
+
if (i === "series")
|
|
9
|
+
return (I, t) => I.length ? t?.map((a, o) => {
|
|
10
|
+
const l = I?.[o] ?? {};
|
|
11
|
+
return c(l, a);
|
|
12
|
+
}) : I;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function b(e, {
|
|
17
|
+
start: i,
|
|
18
|
+
end: I
|
|
19
|
+
} = {
|
|
20
|
+
start: 0,
|
|
21
|
+
end: 100
|
|
22
|
+
}, {
|
|
23
|
+
inside: t = !0,
|
|
24
|
+
xSlider: r = !0,
|
|
25
|
+
ySlider: a = !1,
|
|
26
|
+
showSliders: o = !0,
|
|
27
|
+
xAxisLabelFormatter: l,
|
|
28
|
+
spacing: g
|
|
29
|
+
} = {}, d) {
|
|
30
|
+
const n = d ? m(d) : {};
|
|
31
|
+
return {
|
|
32
|
+
dataZoom: [t && {
|
|
33
|
+
throttle: 0,
|
|
34
|
+
type: "inside",
|
|
35
|
+
xAxisIndex: r ? [0] : [],
|
|
36
|
+
yAxisIndex: a ? [0] : [],
|
|
37
|
+
show: e,
|
|
38
|
+
zoomLock: !e,
|
|
39
|
+
start: i,
|
|
40
|
+
end: I
|
|
41
|
+
}, t && a && {
|
|
42
|
+
throttle: 0,
|
|
43
|
+
type: "inside",
|
|
44
|
+
show: e,
|
|
45
|
+
zoomLock: !e,
|
|
46
|
+
start: i,
|
|
47
|
+
end: I,
|
|
48
|
+
orientation: "vertical"
|
|
49
|
+
}, r && {
|
|
50
|
+
throttle: 0,
|
|
51
|
+
type: "slider",
|
|
52
|
+
xAxisIndex: [0],
|
|
53
|
+
bottom: 0,
|
|
54
|
+
height: parseInt(g?.(4) ?? "32"),
|
|
55
|
+
show: e && o,
|
|
56
|
+
zoomLock: !e,
|
|
57
|
+
start: i,
|
|
58
|
+
end: I,
|
|
59
|
+
labelFormatter: l,
|
|
60
|
+
showDetail: !1,
|
|
61
|
+
...n,
|
|
62
|
+
brushSelect: !1,
|
|
63
|
+
moveHandleSize: 8,
|
|
64
|
+
handleSize: "100%",
|
|
65
|
+
handleIcon: "image://data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDkgMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9IjAuNSIgeT0iLTAuNSIgd2lkdGg9IjgiIGhlaWdodD0iMTgiIHJ4PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDI3KSIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzM1OEJFNyIvPgo8cmVjdCB3aWR0aD0iMyIgaGVpZ2h0PSIyIiByeD0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMyAyMykiIGZpbGw9IiMzNThCRTciLz4KPHJlY3Qgd2lkdGg9IjMiIGhlaWdodD0iMiIgcng9IjEiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDMgMTkpIiBmaWxsPSIjMzU4QkU3Ii8+CjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHJ4PSIxIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzIDE1KSIgZmlsbD0iIzM1OEJFNyIvPgo8L3N2Zz4="
|
|
66
|
+
}, a && {
|
|
67
|
+
throttle: 0,
|
|
68
|
+
type: "slider",
|
|
69
|
+
left: parseInt(g?.(6) ?? "48"),
|
|
70
|
+
width: parseInt(g?.(4) ?? "32"),
|
|
71
|
+
yAxisIndex: [0],
|
|
72
|
+
show: e && o,
|
|
73
|
+
zoomLock: !e,
|
|
74
|
+
start: i,
|
|
75
|
+
end: I,
|
|
76
|
+
...n,
|
|
77
|
+
brushSelect: !1,
|
|
78
|
+
moveHandleSize: 8,
|
|
79
|
+
handleSize: "100%",
|
|
80
|
+
handleIcon: "image://data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDM2IDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9IjAuNSIgeT0iMC41IiB3aWR0aD0iOCIgaGVpZ2h0PSIxOCIgcng9IjQiIHRyYW5zZm9ybT0icm90YXRlKC05MCAwLjUgMC41KSIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzM1OEJFNyIvPgo8cmVjdCB3aWR0aD0iMyIgaGVpZ2h0PSIyIiByeD0iMSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDEzIDYpIiBmaWxsPSIjMzU4QkU3Ii8+CjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHJ4PSIxIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgMTcgNikiIGZpbGw9IiMzNThCRTciLz4KPHJlY3Qgd2lkdGg9IjMiIGhlaWdodD0iMiIgcng9IjEiIHRyYW5zZm9ybT0icm90YXRlKC05MCAyMSA2KSIgZmlsbD0iIzM1OEJFNyIvPgo8L3N2Zz4="
|
|
81
|
+
}].filter((s) => !!s)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function m(e) {
|
|
85
|
+
return {
|
|
86
|
+
fillerColor: "rgba(53, 139, 231, 0.25)",
|
|
87
|
+
borderColor: "rgba(53, 139, 231, 0.3)",
|
|
88
|
+
borderWidth: 0.5,
|
|
89
|
+
backgroundColor: "transparent",
|
|
90
|
+
borderRadius: 4,
|
|
91
|
+
dataBackground: {
|
|
92
|
+
lineStyle: {
|
|
93
|
+
opacity: 0
|
|
94
|
+
},
|
|
95
|
+
areaStyle: {
|
|
96
|
+
opacity: 1,
|
|
97
|
+
color: e.palette.secondary.main
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
selectedDataBackground: {
|
|
101
|
+
lineStyle: {
|
|
102
|
+
opacity: 0
|
|
103
|
+
},
|
|
104
|
+
areaStyle: {
|
|
105
|
+
opacity: 1,
|
|
106
|
+
color: e.palette.secondary.main
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
handleStyle: {
|
|
110
|
+
color: e.palette.common.white,
|
|
111
|
+
borderColor: "rgba(3, 111, 226, 0.08)",
|
|
112
|
+
borderWidth: 1,
|
|
113
|
+
shadowBlur: 3,
|
|
114
|
+
shadowColor: "rgba(0, 0, 0, 0.1)",
|
|
115
|
+
shadowOffsetX: 0,
|
|
116
|
+
shadowOffsetY: 1
|
|
117
|
+
},
|
|
118
|
+
textStyle: {
|
|
119
|
+
color: e.palette.black[60],
|
|
120
|
+
fontSize: parseInt(e.typography.overlineDelicate.fontSize),
|
|
121
|
+
fontFamily: e.typography.overlineDelicate.fontFamily
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function M(e) {
|
|
126
|
+
return e ? {
|
|
127
|
+
brush: {
|
|
128
|
+
brushType: "rect",
|
|
129
|
+
brushMode: "single"
|
|
130
|
+
}
|
|
131
|
+
} : {};
|
|
132
|
+
}
|
|
133
|
+
function Z(e, i = y) {
|
|
134
|
+
return e ? {
|
|
135
|
+
stack: i
|
|
136
|
+
} : {};
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
Z as a,
|
|
140
|
+
b,
|
|
141
|
+
M as g,
|
|
142
|
+
S as m
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=utils-DNtU8q7E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-DNtU8q7E.js","sources":["../src/widgets/echart/const.ts","../src/widgets/echart/utils.ts"],"sourcesContent":["export const DEFAULT_STACK_GROUP = 'stacked'\n","import deepmerge from 'deepmerge'\nimport type { EchartOptionsProps } from './types'\nimport type { Theme } from '@mui/material'\nimport { DEFAULT_STACK_GROUP } from './const'\n\nexport function mergeEchartWidgetConfig<T extends EchartOptionsProps>(\n ...options: [T | undefined, T | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n customMerge: (key) => {\n if (key === 'color') {\n return (_, b: T['color']) => b\n }\n if (key === 'series') {\n return (a: T['series'][], b: T['series'][]) => {\n if (!a.length) return a // If there is no series in a, return a as is\n\n const mergedSeries = b?.map((bItem, index) => {\n const aItem = a?.[index] ?? {}\n return deepmerge(aItem, bItem as object)\n })\n return mergedSeries\n }\n }\n },\n }) as T\n}\n\nexport function getEChartZoomConfig(\n zoom: boolean,\n { start, end }: { start: number; end: number } = { start: 0, end: 100 },\n {\n inside = true,\n xSlider = true,\n ySlider = false,\n showSliders = true,\n xAxisLabelFormatter,\n spacing,\n } = {} as {\n inside?: boolean\n xSlider?: boolean\n ySlider?: boolean\n showSliders?: boolean\n xAxisLabelFormatter?: (value: number) => string\n spacing?: (value: number) => string\n },\n theme?: Theme,\n) {\n const sliderStyles = theme ? getEChartZoomSliderStyles(theme) : {}\n\n return {\n dataZoom: [\n inside && {\n throttle: 0,\n type: 'inside',\n xAxisIndex: xSlider ? [0] : [],\n yAxisIndex: ySlider ? [0] : [],\n show: zoom,\n zoomLock: !zoom,\n start,\n end,\n },\n inside &&\n ySlider && {\n throttle: 0,\n type: 'inside',\n show: zoom,\n zoomLock: !zoom,\n start,\n end,\n orientation: 'vertical',\n },\n xSlider && {\n throttle: 0,\n type: 'slider',\n xAxisIndex: [0],\n bottom: 0,\n height: parseInt(spacing?.(4) ?? '32'),\n show: zoom && showSliders,\n zoomLock: !zoom,\n start,\n end,\n labelFormatter: xAxisLabelFormatter,\n showDetail: false,\n ...sliderStyles,\n brushSelect: false,\n moveHandleSize: 8,\n handleSize: '100%',\n handleIcon:\n 'image://data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDkgMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9IjAuNSIgeT0iLTAuNSIgd2lkdGg9IjgiIGhlaWdodD0iMTgiIHJ4PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDI3KSIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzM1OEJFNyIvPgo8cmVjdCB3aWR0aD0iMyIgaGVpZ2h0PSIyIiByeD0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMyAyMykiIGZpbGw9IiMzNThCRTciLz4KPHJlY3Qgd2lkdGg9IjMiIGhlaWdodD0iMiIgcng9IjEiIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDMgMTkpIiBmaWxsPSIjMzU4QkU3Ii8+CjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHJ4PSIxIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAzIDE1KSIgZmlsbD0iIzM1OEJFNyIvPgo8L3N2Zz4=',\n },\n ySlider && {\n throttle: 0,\n type: 'slider',\n left: parseInt(spacing?.(6) ?? '48'),\n width: parseInt(spacing?.(4) ?? '32'),\n yAxisIndex: [0],\n show: zoom && showSliders,\n zoomLock: !zoom,\n start,\n end,\n ...sliderStyles,\n brushSelect: false,\n moveHandleSize: 8,\n handleSize: '100%',\n handleIcon:\n 'image://data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDM2IDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9IjAuNSIgeT0iMC41IiB3aWR0aD0iOCIgaGVpZ2h0PSIxOCIgcng9IjQiIHRyYW5zZm9ybT0icm90YXRlKC05MCAwLjUgMC41KSIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzM1OEJFNyIvPgo8cmVjdCB3aWR0aD0iMyIgaGVpZ2h0PSIyIiByeD0iMSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDEzIDYpIiBmaWxsPSIjMzU4QkU3Ii8+CjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHJ4PSIxIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgMTcgNikiIGZpbGw9IiMzNThCRTciLz4KPHJlY3Qgd2lkdGg9IjMiIGhlaWdodD0iMiIgcng9IjEiIHRyYW5zZm9ybT0icm90YXRlKC05MCAyMSA2KSIgZmlsbD0iIzM1OEJFNyIvPgo8L3N2Zz4=',\n },\n ].filter((d) => !!d),\n }\n}\n\nfunction getEChartZoomSliderStyles(theme: Theme) {\n return {\n fillerColor: 'rgba(53, 139, 231, 0.25)',\n borderColor: 'rgba(53, 139, 231, 0.3)',\n borderWidth: 0.5,\n backgroundColor: 'transparent',\n borderRadius: 4,\n dataBackground: {\n lineStyle: {\n opacity: 0,\n },\n areaStyle: {\n opacity: 1,\n color: theme.palette.secondary.main,\n },\n },\n selectedDataBackground: {\n lineStyle: {\n opacity: 0,\n },\n areaStyle: {\n opacity: 1,\n color: theme.palette.secondary.main,\n },\n },\n handleStyle: {\n color: theme.palette.common.white,\n borderColor: 'rgba(3, 111, 226, 0.08)',\n borderWidth: 1,\n shadowBlur: 3,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n },\n textStyle: {\n color: theme.palette.black[60],\n fontSize: parseInt(theme.typography.overlineDelicate.fontSize as string),\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n },\n } as const\n}\n\nexport function getEChartBrushConfig(brush: boolean) {\n return brush\n ? {\n brush: {\n brushType: 'rect',\n brushMode: 'single',\n },\n }\n : {}\n}\n\nexport function getEChartStackConfig(\n stack: boolean,\n stackGroup: string = DEFAULT_STACK_GROUP,\n) {\n return stack ? { stack: stackGroup } : {}\n}\n"],"names":["DEFAULT_STACK_GROUP","mergeEchartWidgetConfig","options","deepmerge","customMerge","key","_","b","a","length","map","bItem","index","aItem","getEChartZoomConfig","zoom","start","end","inside","xSlider","ySlider","showSliders","xAxisLabelFormatter","spacing","theme","sliderStyles","getEChartZoomSliderStyles","dataZoom","throttle","type","xAxisIndex","yAxisIndex","show","zoomLock","orientation","bottom","height","parseInt","labelFormatter","showDetail","brushSelect","moveHandleSize","handleSize","handleIcon","left","width","filter","d","fillerColor","borderColor","borderWidth","backgroundColor","borderRadius","dataBackground","lineStyle","opacity","areaStyle","color","palette","secondary","main","selectedDataBackground","handleStyle","common","white","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY","textStyle","black","fontSize","typography","overlineDelicate","fontFamily","getEChartBrushConfig","brush","brushType","brushMode","getEChartStackConfig","stack","stackGroup"],"mappings":";AAAO,MAAMA,IAAsB;ACK5B,SAASC,KACXC,GACA;AACH,SAAOC,EAAUD,EAAQ,CAAC,KAAK,CAAA,GAAIA,EAAQ,CAAC,KAAK,IAAI;AAAA,IACnDE,aAAcC,CAAAA,MAAQ;AACpB,UAAIA,MAAQ;AACV,eAAO,CAACC,GAAGC,MAAkBA;AAE/B,UAAIF,MAAQ;AACV,eAAO,CAACG,GAAkBD,MACnBC,EAAEC,SAEcF,GAAGG,IAAI,CAACC,GAAOC,MAAU;AAC5C,gBAAMC,IAAQL,IAAII,CAAK,KAAK,CAAA;AAC5B,iBAAOT,EAAUU,GAAOF,CAAe;AAAA,QACzC,CAAC,IALqBH;AAAAA,IAS5B;AAAA,EAAA,CACD;AACH;AAEO,SAASM,EACdC,GACA;AAAA,EAAEC,OAAAA;AAAAA,EAAOC,KAAAA;AAAoC,IAAI;AAAA,EAAED,OAAO;AAAA,EAAGC,KAAK;AAAI,GACtE;AAAA,EACEC,QAAAA,IAAS;AAAA,EACTC,SAAAA,IAAU;AAAA,EACVC,SAAAA,IAAU;AAAA,EACVC,aAAAA,IAAc;AAAA,EACdC,qBAAAA;AAAAA,EACAC,SAAAA;AACF,IAAI,CAAA,GAQJC,GACA;AACA,QAAMC,IAAeD,IAAQE,EAA0BF,CAAK,IAAI,CAAA;AAEhE,SAAO;AAAA,IACLG,UAAU,CACRT,KAAU;AAAA,MACRU,UAAU;AAAA,MACVC,MAAM;AAAA,MACNC,YAAYX,IAAU,CAAC,CAAC,IAAI,CAAA;AAAA,MAC5BY,YAAYX,IAAU,CAAC,CAAC,IAAI,CAAA;AAAA,MAC5BY,MAAMjB;AAAAA,MACNkB,UAAU,CAAClB;AAAAA,MACXC,OAAAA;AAAAA,MACAC,KAAAA;AAAAA,IAAAA,GAEFC,KACEE,KAAW;AAAA,MACTQ,UAAU;AAAA,MACVC,MAAM;AAAA,MACNG,MAAMjB;AAAAA,MACNkB,UAAU,CAAClB;AAAAA,MACXC,OAAAA;AAAAA,MACAC,KAAAA;AAAAA,MACAiB,aAAa;AAAA,IAAA,GAEjBf,KAAW;AAAA,MACTS,UAAU;AAAA,MACVC,MAAM;AAAA,MACNC,YAAY,CAAC,CAAC;AAAA,MACdK,QAAQ;AAAA,MACRC,QAAQC,SAASd,IAAU,CAAC,KAAK,IAAI;AAAA,MACrCS,MAAMjB,KAAQM;AAAAA,MACdY,UAAU,CAAClB;AAAAA,MACXC,OAAAA;AAAAA,MACAC,KAAAA;AAAAA,MACAqB,gBAAgBhB;AAAAA,MAChBiB,YAAY;AAAA,MACZ,GAAGd;AAAAA,MACHe,aAAa;AAAA,MACbC,gBAAgB;AAAA,MAChBC,YAAY;AAAA,MACZC,YACE;AAAA,IAAA,GAEJvB,KAAW;AAAA,MACTQ,UAAU;AAAA,MACVC,MAAM;AAAA,MACNe,MAAMP,SAASd,IAAU,CAAC,KAAK,IAAI;AAAA,MACnCsB,OAAOR,SAASd,IAAU,CAAC,KAAK,IAAI;AAAA,MACpCQ,YAAY,CAAC,CAAC;AAAA,MACdC,MAAMjB,KAAQM;AAAAA,MACdY,UAAU,CAAClB;AAAAA,MACXC,OAAAA;AAAAA,MACAC,KAAAA;AAAAA,MACA,GAAGQ;AAAAA,MACHe,aAAa;AAAA,MACbC,gBAAgB;AAAA,MAChBC,YAAY;AAAA,MACZC,YACE;AAAA,IAAA,CACH,EACDG,OAAQC,CAAAA,MAAM,CAAC,CAACA,CAAC;AAAA,EAAA;AAEvB;AAEA,SAASrB,EAA0BF,GAAc;AAC/C,SAAO;AAAA,IACLwB,aAAa;AAAA,IACbC,aAAa;AAAA,IACbC,aAAa;AAAA,IACbC,iBAAiB;AAAA,IACjBC,cAAc;AAAA,IACdC,gBAAgB;AAAA,MACdC,WAAW;AAAA,QACTC,SAAS;AAAA,MAAA;AAAA,MAEXC,WAAW;AAAA,QACTD,SAAS;AAAA,QACTE,OAAOjC,EAAMkC,QAAQC,UAAUC;AAAAA,MAAAA;AAAAA,IACjC;AAAA,IAEFC,wBAAwB;AAAA,MACtBP,WAAW;AAAA,QACTC,SAAS;AAAA,MAAA;AAAA,MAEXC,WAAW;AAAA,QACTD,SAAS;AAAA,QACTE,OAAOjC,EAAMkC,QAAQC,UAAUC;AAAAA,MAAAA;AAAAA,IACjC;AAAA,IAEFE,aAAa;AAAA,MACXL,OAAOjC,EAAMkC,QAAQK,OAAOC;AAAAA,MAC5Bf,aAAa;AAAA,MACbC,aAAa;AAAA,MACbe,YAAY;AAAA,MACZC,aAAa;AAAA,MACbC,eAAe;AAAA,MACfC,eAAe;AAAA,IAAA;AAAA,IAEjBC,WAAW;AAAA,MACTZ,OAAOjC,EAAMkC,QAAQY,MAAM,EAAE;AAAA,MAC7BC,UAAUlC,SAASb,EAAMgD,WAAWC,iBAAiBF,QAAkB;AAAA,MACvEG,YAAYlD,EAAMgD,WAAWC,iBAAiBC;AAAAA,IAAAA;AAAAA,EAChD;AAEJ;AAEO,SAASC,EAAqBC,GAAgB;AACnD,SAAOA,IACH;AAAA,IACEA,OAAO;AAAA,MACLC,WAAW;AAAA,MACXC,WAAW;AAAA,IAAA;AAAA,EACb,IAEF,CAAA;AACN;AAEO,SAASC,EACdC,GACAC,IAAqBjF,GACrB;AACA,SAAOgF,IAAQ;AAAA,IAAEA,OAAOC;AAAAA,EAAAA,IAAe,CAAA;AACzC;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { create as f } from "zustand";
|
|
2
|
-
const
|
|
2
|
+
const T = /* @__PURE__ */ new Map(), w = f()((g, u) => ({
|
|
3
3
|
// State
|
|
4
4
|
widgets: {},
|
|
5
5
|
// Actions
|
|
6
|
-
setWidget: (e, t) =>
|
|
6
|
+
setWidget: (e, t) => g((o) => {
|
|
7
7
|
const r = o.widgets[e] ?? {};
|
|
8
8
|
return {
|
|
9
9
|
widgets: {
|
|
@@ -16,7 +16,7 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
18
|
}),
|
|
19
|
-
removeWidget: (e) =>
|
|
19
|
+
removeWidget: (e) => g((t) => {
|
|
20
20
|
const o = {
|
|
21
21
|
...t.widgets
|
|
22
22
|
};
|
|
@@ -24,12 +24,12 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
24
24
|
widgets: o
|
|
25
25
|
};
|
|
26
26
|
}),
|
|
27
|
-
clearWidgets: () =>
|
|
27
|
+
clearWidgets: () => g({
|
|
28
28
|
widgets: {}
|
|
29
29
|
}),
|
|
30
|
-
getWidget: (e) =>
|
|
31
|
-
registerTool: (e, t) =>
|
|
32
|
-
const r = o.widgets[e] ?? {}, l = (r.registeredTools ?? []).filter((
|
|
30
|
+
getWidget: (e) => u().widgets[e],
|
|
31
|
+
registerTool: (e, t) => g((o) => {
|
|
32
|
+
const r = o.widgets[e] ?? {}, l = (r.registeredTools ?? []).filter((d) => d.id !== t.id);
|
|
33
33
|
return {
|
|
34
34
|
widgets: {
|
|
35
35
|
...o.widgets,
|
|
@@ -41,10 +41,10 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
43
|
}),
|
|
44
|
-
unregisterTool: (e, t) =>
|
|
44
|
+
unregisterTool: (e, t) => g((o) => {
|
|
45
45
|
const r = o.widgets[e];
|
|
46
46
|
if (!r) return o;
|
|
47
|
-
const l = (r.registeredTools ?? []).filter((
|
|
47
|
+
const l = (r.registeredTools ?? []).filter((d) => d.id !== t);
|
|
48
48
|
return {
|
|
49
49
|
widgets: {
|
|
50
50
|
...o.widgets,
|
|
@@ -55,10 +55,10 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
}),
|
|
58
|
-
updateToolConfig: (e, t, o) =>
|
|
58
|
+
updateToolConfig: (e, t, o) => g((r) => {
|
|
59
59
|
const i = r.widgets[e];
|
|
60
60
|
if (!i) return r;
|
|
61
|
-
const
|
|
61
|
+
const d = (i.registeredTools ?? []).map((n) => n.id === t ? {
|
|
62
62
|
...n,
|
|
63
63
|
config: {
|
|
64
64
|
...n.config,
|
|
@@ -70,15 +70,15 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
70
70
|
...r.widgets,
|
|
71
71
|
[e]: {
|
|
72
72
|
...i,
|
|
73
|
-
registeredTools:
|
|
73
|
+
registeredTools: d
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
}),
|
|
78
|
-
setToolEnabled: (e, t, o) =>
|
|
78
|
+
setToolEnabled: (e, t, o) => g((r) => {
|
|
79
79
|
const i = r.widgets[e];
|
|
80
80
|
if (!i) return r;
|
|
81
|
-
const
|
|
81
|
+
const d = (i.registeredTools ?? []).map((n) => n.id === t ? {
|
|
82
82
|
...n,
|
|
83
83
|
enabled: o
|
|
84
84
|
} : n);
|
|
@@ -87,46 +87,45 @@ const u = /* @__PURE__ */ new Map(), w = f()((c, T) => ({
|
|
|
87
87
|
...r.widgets,
|
|
88
88
|
[e]: {
|
|
89
89
|
...i,
|
|
90
|
-
registeredTools:
|
|
90
|
+
registeredTools: d
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
94
|
}),
|
|
95
95
|
executeToolPipeline: async (e, t) => {
|
|
96
|
-
const o =
|
|
96
|
+
const o = u().widgets[e];
|
|
97
97
|
if (!o) return;
|
|
98
|
-
const r = (
|
|
99
|
-
|
|
98
|
+
const r = (T.get(e) ?? 0) + 1;
|
|
99
|
+
T.set(e, r);
|
|
100
100
|
const i = o, l = /* @__PURE__ */ new Set();
|
|
101
101
|
for (const s of i.registeredTools ?? [])
|
|
102
|
-
s.enabled && s.disables && s.disables.forEach((
|
|
103
|
-
const
|
|
102
|
+
s.enabled && s.disables && s.disables.forEach((c) => l.add(c));
|
|
103
|
+
const d = [...i.registeredTools ?? []].filter((s) => s.enabled && !l.has(s.id)).sort((s, c) => s.order - c.order);
|
|
104
104
|
let n = t;
|
|
105
|
-
for (const s of
|
|
106
|
-
if (
|
|
105
|
+
for (const s of d) {
|
|
106
|
+
if (T.get(e) !== r)
|
|
107
107
|
return;
|
|
108
108
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
console.error(`Tool ${s.id} failed for widget ${e}:`, d);
|
|
109
|
+
n = await s.fn(n, s.config);
|
|
110
|
+
} catch (c) {
|
|
111
|
+
console.error(`Tool ${s.id} failed for widget ${e}:`, c);
|
|
113
112
|
}
|
|
114
113
|
}
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
return
|
|
114
|
+
g((s) => {
|
|
115
|
+
const c = s.widgets[e];
|
|
116
|
+
return c ? {
|
|
118
117
|
widgets: {
|
|
119
118
|
...s.widgets,
|
|
120
119
|
[e]: {
|
|
121
|
-
...
|
|
120
|
+
...c,
|
|
122
121
|
data: n
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
124
|
} : s;
|
|
126
|
-
}),
|
|
125
|
+
}), T.get(e) === r && T.delete(e);
|
|
127
126
|
}
|
|
128
127
|
}));
|
|
129
128
|
export {
|
|
130
129
|
w as u
|
|
131
130
|
};
|
|
132
|
-
//# sourceMappingURL=widget-store-
|
|
131
|
+
//# sourceMappingURL=widget-store-CB6Trp_0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-store-Dd7_sWZT.js","sources":["../src/widgets/stores/widget-store.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type { WidgetState, WidgetStore, ToolRegistration } from './types'\n\n// Track active pipeline executions for cancellation\nconst activePipelines = new Map<string, number>()\n\n/**\n * Zustand store for managing widget state across the application.\n *\n * This store provides centralized state management for all widget UI components\n *\n * @example\n * ```tsx\n * // Import the store\n * import { useWidgetStore } from '@carto/ps-react-ui/widgets'\n *\n * // Use in a component\n * function MyWidget() {\n * const setWidget = useWidgetStore((state) => state.setWidget)\n * const widget = useWidgetStore((state) => state.widgets['my-widget'])\n *\n * useEffect(() => {\n * setWidget({\n * id: 'my-widget',\n * type: 'formula',\n * title: 'Total Sales',\n * isLoading: false,\n * visible: true,\n * data: { value: 1000, prefix: '$' }\n * })\n * }, [setWidget])\n *\n * return <div>{widget?.data?.value}</div>\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Get widgets by type\n * const getWidgetsByType = useWidgetStore((state) => state.getWidgetsByType)\n * const formulaWidgets = getWidgetsByType('formula')\n * ```\n */\nexport const useWidgetStore = create<WidgetStore>()((set, get) => ({\n // State\n widgets: {},\n\n // Actions\n setWidget: (id, widget) =>\n set((state) => {\n const current =\n state.widgets[id] ?? ({} as WidgetStore['widgets'][string])\n return {\n widgets: {\n ...state.widgets,\n [id]: {\n ...current,\n ...widget,\n id,\n },\n },\n }\n }),\n\n removeWidget: (id) =>\n set((state) => {\n const widgets = { ...state.widgets }\n\n delete widgets[id]\n\n return { widgets }\n }),\n\n clearWidgets: () =>\n set({\n widgets: {},\n }),\n\n getWidget: <T extends WidgetState>(id: string) => {\n return get().widgets[id] as T | undefined\n },\n\n registerTool: (widgetId: string, tool: ToolRegistration) =>\n set((state) => {\n const current = state.widgets[widgetId] ?? ({} as WidgetState)\n const registeredTools = current.registeredTools ?? []\n\n // Remove existing tool with same id if present\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== tool.id,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n id: widgetId,\n registeredTools: [...filteredTools, tool],\n },\n },\n }\n }),\n\n unregisterTool: (widgetId: string, toolId: string) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== toolId,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: filteredTools,\n },\n },\n }\n }),\n\n updateToolConfig: (\n widgetId: string,\n toolId: string,\n config: Record<string, unknown>,\n ) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId\n ? {\n ...tool,\n config: { ...tool.config, ...config },\n }\n : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: updatedTools,\n },\n },\n }\n }),\n\n setToolEnabled: (widgetId: string, toolId: string, enabled: boolean) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId ? { ...tool, enabled } : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: updatedTools,\n },\n },\n }\n }),\n\n executeToolPipeline: async (widgetId: string, sourceData: unknown) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress pipeline for this widget\n const currentExecution = (activePipelines.get(widgetId) ?? 0) + 1\n activePipelines.set(widgetId, currentExecution)\n\n const widgetWithTools = widget\n\n // Build set of tool IDs that should be disabled\n const disabledToolIds = new Set<string>()\n for (const tool of widgetWithTools.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Sort tools by order and filter enabled only, excluding disabled tools\n const sortedTools = [...(widgetWithTools.registeredTools ?? [])]\n .filter((tool) => tool.enabled && !disabledToolIds.has(tool.id))\n .sort((a, b) => a.order - b.order)\n\n // Execute pipeline - handle both sync and async tools\n let transformedData = sourceData\n for (const tool of sortedTools) {\n // Check if this execution was cancelled\n if (activePipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n // Call tool function (may return Promise or direct value)\n const result = tool.fn(transformedData, tool.config)\n\n // Await if Promise, otherwise use directly\n transformedData = result instanceof Promise ? await result : result\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Tool ${tool.id} failed for widget ${widgetId}:`, error)\n // Continue with current data to prevent one tool from breaking all\n }\n }\n\n // Final check before updating store (in case cancelled during async operation)\n if (activePipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n // Single store update with final transformed data\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n data: transformedData,\n },\n },\n }\n })\n\n // Clean up tracking\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n },\n}))\n"],"names":["activePipelines","Map","useWidgetStore","create","set","get","widgets","setWidget","id","widget","state","current","removeWidget","clearWidgets","getWidget","registerTool","widgetId","tool","filteredTools","registeredTools","filter","t","unregisterTool","toolId","updateToolConfig","config","updatedTools","map","setToolEnabled","enabled","executeToolPipeline","sourceData","currentExecution","widgetWithTools","disabledToolIds","Set","disables","forEach","add","sortedTools","has","sort","a","b","order","transformedData","result","fn","Promise","error","console","currentWidget","data","delete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"widget-store-CB6Trp_0.js","sources":["../src/widgets/stores/widget-store.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type { WidgetState, WidgetStore, ToolRegistration } from './types'\n\n// Track active pipeline executions for cancellation\nconst activePipelines = new Map<string, number>()\n\n/**\n * Zustand store for managing widget state across the application.\n *\n * This store provides centralized state management for all widget UI components\n *\n * @example\n * ```tsx\n * // Import the store\n * import { useWidgetStore } from '@carto/ps-react-ui/widgets'\n *\n * // Use in a component\n * function MyWidget() {\n * const setWidget = useWidgetStore((state) => state.setWidget)\n * const widget = useWidgetStore((state) => state.widgets['my-widget'])\n *\n * useEffect(() => {\n * setWidget({\n * id: 'my-widget',\n * type: 'formula',\n * title: 'Total Sales',\n * isLoading: false,\n * visible: true,\n * data: { value: 1000, prefix: '$' }\n * })\n * }, [setWidget])\n *\n * return <div>{widget?.data?.value}</div>\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Get widgets by type\n * const getWidgetsByType = useWidgetStore((state) => state.getWidgetsByType)\n * const formulaWidgets = getWidgetsByType('formula')\n * ```\n */\nexport const useWidgetStore = create<WidgetStore>()((set, get) => ({\n // State\n widgets: {},\n\n // Actions\n setWidget: (id, widget) =>\n set((state) => {\n const current =\n state.widgets[id] ?? ({} as WidgetStore['widgets'][string])\n return {\n widgets: {\n ...state.widgets,\n [id]: {\n ...current,\n ...widget,\n id,\n },\n },\n }\n }),\n\n removeWidget: (id) =>\n set((state) => {\n const widgets = { ...state.widgets }\n\n delete widgets[id]\n\n return { widgets }\n }),\n\n clearWidgets: () =>\n set({\n widgets: {},\n }),\n\n getWidget: <T extends WidgetState>(id: string) => {\n return get().widgets[id] as T | undefined\n },\n\n registerTool: (widgetId: string, tool: ToolRegistration) =>\n set((state) => {\n const current = state.widgets[widgetId] ?? ({} as WidgetState)\n const registeredTools = current.registeredTools ?? []\n\n // Remove existing tool with same id if present\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== tool.id,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n id: widgetId,\n registeredTools: [...filteredTools, tool],\n },\n },\n }\n }),\n\n unregisterTool: (widgetId: string, toolId: string) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== toolId,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: filteredTools,\n },\n },\n }\n }),\n\n updateToolConfig: (\n widgetId: string,\n toolId: string,\n config: Record<string, unknown>,\n ) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId\n ? {\n ...tool,\n config: { ...tool.config, ...config },\n }\n : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: updatedTools,\n },\n },\n }\n }),\n\n setToolEnabled: (widgetId: string, toolId: string, enabled: boolean) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId ? { ...tool, enabled } : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: updatedTools,\n },\n },\n }\n }),\n\n executeToolPipeline: async (widgetId: string, sourceData: unknown) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress pipeline for this widget\n const currentExecution = (activePipelines.get(widgetId) ?? 0) + 1\n activePipelines.set(widgetId, currentExecution)\n\n const widgetWithTools = widget\n\n // Build set of tool IDs that should be disabled\n const disabledToolIds = new Set<string>()\n for (const tool of widgetWithTools.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Sort tools by order and filter enabled only, excluding disabled tools\n const sortedTools = [...(widgetWithTools.registeredTools ?? [])]\n .filter((tool) => tool.enabled && !disabledToolIds.has(tool.id))\n .sort((a, b) => a.order - b.order)\n\n // Execute pipeline - handle both sync and async tools\n let transformedData = sourceData\n for (const tool of sortedTools) {\n // Check if this execution was cancelled\n if (activePipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n // Call tool function (may return Promise or direct value)\n transformedData = await tool.fn(transformedData, tool.config)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Tool ${tool.id} failed for widget ${widgetId}:`, error)\n // Continue with current data to prevent one tool from breaking all\n }\n }\n\n // Single store update with final transformed data\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n data: transformedData,\n },\n },\n }\n })\n\n // Clean up tracking\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n },\n}))\n"],"names":["activePipelines","Map","useWidgetStore","create","set","get","widgets","setWidget","id","widget","state","current","removeWidget","clearWidgets","getWidget","registerTool","widgetId","tool","filteredTools","registeredTools","filter","t","unregisterTool","toolId","updateToolConfig","config","updatedTools","map","setToolEnabled","enabled","executeToolPipeline","sourceData","currentExecution","widgetWithTools","disabledToolIds","Set","disables","forEach","add","sortedTools","has","sort","a","b","order","transformedData","fn","error","console","currentWidget","data","delete"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { c as d } from "react/compiler-runtime";
|
|
2
|
+
import { create as g } from "zustand";
|
|
3
|
+
import { devtools as n } from "zustand/middleware";
|
|
4
|
+
const c = g()(n((t, r) => ({
|
|
5
|
+
// State
|
|
6
|
+
widgets: {},
|
|
7
|
+
// Actions
|
|
8
|
+
setWidget: (e, i) => t((s) => {
|
|
9
|
+
const o = s.widgets[e] ?? {};
|
|
10
|
+
return {
|
|
11
|
+
widgets: {
|
|
12
|
+
...s.widgets,
|
|
13
|
+
[e]: {
|
|
14
|
+
...o,
|
|
15
|
+
...i,
|
|
16
|
+
id: e
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}, void 0, "setWidget"),
|
|
21
|
+
removeWidget: (e) => t((i) => {
|
|
22
|
+
const s = {
|
|
23
|
+
...i.widgets
|
|
24
|
+
};
|
|
25
|
+
return delete s[e], {
|
|
26
|
+
widgets: s
|
|
27
|
+
};
|
|
28
|
+
}, void 0, "removeWidget"),
|
|
29
|
+
clearWidgets: () => t({
|
|
30
|
+
widgets: {}
|
|
31
|
+
}, void 0, "clearWidgets"),
|
|
32
|
+
getWidget: (e) => r().widgets[e]
|
|
33
|
+
}), {
|
|
34
|
+
name: "widget-store"
|
|
35
|
+
})), u = (t) => {
|
|
36
|
+
const r = d(2);
|
|
37
|
+
let e;
|
|
38
|
+
return r[0] !== t ? (e = (i) => i.widgets[t], r[0] = t, r[1] = e) : e = r[1], c(e);
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
u as a,
|
|
42
|
+
c as u
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=widget-store-yDO2ul8g.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-store-yDO2ul8g.js","sources":["../src/widgets/stores/widget-store.ts"],"sourcesContent":["import { create } from 'zustand'\nimport { devtools } from 'zustand/middleware'\nimport type { WidgetState, WidgetStore } from './types'\n\n/**\n * Zustand store for managing widget state across the application.\n *\n * This store provides centralized state management for all widget UI components\n *\n * @example\n * ```tsx\n * // Import the store\n * import { useWidgetStore } from '@carto/ps-react-ui/widgets'\n *\n * // Use in a component\n * function MyWidget() {\n * const setWidget = useWidgetStore((state) => state.setWidget)\n * const widget = useWidgetStore((state) => state.widgets['my-widget'])\n *\n * useEffect(() => {\n * setWidget({\n * id: 'my-widget',\n * type: 'formula',\n * title: 'Total Sales',\n * isLoading: false,\n * visible: true,\n * data: { value: 1000, prefix: '$' }\n * })\n * }, [setWidget])\n *\n * return <div>{widget?.data?.value}</div>\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Get widgets by type\n * const getWidgetsByType = useWidgetStore((state) => state.getWidgetsByType)\n * const formulaWidgets = getWidgetsByType('formula')\n * ```\n */\nexport const useWidgetStore = create<WidgetStore>()(\n devtools(\n (set, get) => ({\n // State\n widgets: {},\n\n // Actions\n setWidget: (id, widget) =>\n set(\n (state) => {\n const current =\n state.widgets[id] ?? ({} as WidgetStore['widgets'][string])\n\n return {\n widgets: {\n ...state.widgets,\n [id]: {\n ...current,\n ...widget,\n id,\n },\n },\n }\n },\n undefined,\n 'setWidget',\n ),\n\n removeWidget: (id) =>\n set(\n (state) => {\n const widgets = { ...state.widgets }\n\n delete widgets[id]\n\n return { widgets }\n },\n undefined,\n 'removeWidget',\n ),\n\n clearWidgets: () =>\n set(\n {\n widgets: {},\n },\n undefined,\n 'clearWidgets',\n ),\n\n getWidget: <T extends WidgetState>(id: string) => {\n return get().widgets[id] as T | undefined\n },\n }),\n {\n name: 'widget-store',\n },\n ),\n)\n\n/** Hook to get a specific widget by ID\n * @param id - Widget ID\n * @returns Widget state or undefined if not found\n * @example\n * ```tsx\n * const widget = useWidget('widget-1')\n * ```\n */\nexport const useWidget = <T extends WidgetState>(id: string) => {\n return useWidgetStore((state) => state.widgets[id] as T | undefined)\n}\n"],"names":["useWidgetStore","create","devtools","set","get","widgets","setWidget","id","widget","state","current","undefined","removeWidget","clearWidgets","getWidget","name","useWidget","$","_c","t0"],"mappings":";;;AAyCO,MAAMA,IAAiBC,EAAAA,EAC5BC,EACE,CAACC,GAAKC,OAAS;AAAA;AAAA,EAEbC,SAAS,CAAA;AAAA;AAAA,EAGTC,WAAWA,CAACC,GAAIC,MACdL,EACGM,CAAAA,MAAU;AACT,UAAMC,IACJD,EAAMJ,QAAQE,CAAE,KAAM,CAAA;AAExB,WAAO;AAAA,MACLF,SAAS;AAAA,QACP,GAAGI,EAAMJ;AAAAA,QACT,CAACE,CAAE,GAAG;AAAA,UACJ,GAAGG;AAAAA,UACH,GAAGF;AAAAA,UACHD,IAAAA;AAAAA,QAAAA;AAAAA,MACF;AAAA,IACF;AAAA,EAEJ,GACAI,QACA,WACF;AAAA,EAEFC,cAAeL,CAAAA,MACbJ,EACGM,CAAAA,MAAU;AACT,UAAMJ,IAAU;AAAA,MAAE,GAAGI,EAAMJ;AAAAA,IAAAA;AAE3B,kBAAOA,EAAQE,CAAE,GAEV;AAAA,MAAEF,SAAAA;AAAAA,IAAAA;AAAAA,EACX,GACAM,QACA,cACF;AAAA,EAEFE,cAAcA,MACZV,EACE;AAAA,IACEE,SAAS,CAAA;AAAA,EAAC,GAEZM,QACA,cACF;AAAA,EAEFG,WAAW,CAAwBP,MAC1BH,EAAAA,EAAMC,QAAQE,CAAE;AAE3B,IACA;AAAA,EACEQ,MAAM;AACR,CACF,CACF,GAUaC,IAAYT,CAAAA,MAAA;AAAA,QAAAU,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,SAAAV,KACDY,IAAAV,CAAAA,MAAWA,EAAKJ,QAASE,CAAE,GAAkBU,OAAAV,GAAAU,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA5DjB,EAAemB,CAA6C;AAAC;"}
|