@carto/ps-react-ui 4.3.5 → 4.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/components.js +123 -123
  2. package/dist/components.js.map +1 -1
  3. package/dist/error-CEkRPccv.js +39 -0
  4. package/dist/error-CEkRPccv.js.map +1 -0
  5. package/dist/{lasso-tool-wFqOD6wk.js → lasso-tool-jl4YK02H.js} +184 -159
  6. package/dist/lasso-tool-jl4YK02H.js.map +1 -0
  7. package/dist/no-data-hR3KcJ-_.js +60 -0
  8. package/dist/no-data-hR3KcJ-_.js.map +1 -0
  9. package/dist/{row-DrHwXNvF.js → row-BKmVAUN5.js} +2 -2
  10. package/dist/{row-DrHwXNvF.js.map → row-BKmVAUN5.js.map} +1 -1
  11. package/dist/{series-D3Pc-kYX.js → series-D1pynfeh.js} +3 -3
  12. package/dist/{series-D3Pc-kYX.js.map → series-D1pynfeh.js.map} +1 -1
  13. package/dist/{styles-CCZnY17y.js → styles-DrPyd0y5.js} +28 -22
  14. package/dist/styles-DrPyd0y5.js.map +1 -0
  15. package/dist/types/components/lasso-tool/types.d.ts +1 -1
  16. package/dist/types/widgets/_shared/chart-config/index.d.ts +1 -1
  17. package/dist/types/widgets/_shared/chart-config/option-builders.d.ts +7 -0
  18. package/dist/types/widgets/_shared/chart-config/option-builders.test.d.ts +1 -0
  19. package/dist/types/widgets/actions/index.d.ts +4 -4
  20. package/dist/types/widgets/actions/lock-selection/types.d.ts +0 -13
  21. package/dist/types/widgets/actions/relative-data/types.d.ts +0 -4
  22. package/dist/types/widgets/actions/searcher/types.d.ts +0 -2
  23. package/dist/types/widgets/actions/stack-toggle/stack-toggle.d.ts +3 -2
  24. package/dist/types/widgets/actions/stack-toggle/types.d.ts +0 -4
  25. package/dist/types/widgets/actions/zoom-toggle/zoom-toggle.d.ts +4 -0
  26. package/dist/types/widgets/echart/types.d.ts +0 -4
  27. package/dist/types/widgets/echart/utils.d.ts +2 -1
  28. package/dist/types/widgets/error/error.d.ts +1 -1
  29. package/dist/types/widgets/error/types.d.ts +8 -0
  30. package/dist/types/widgets/loader/loader.d.ts +1 -1
  31. package/dist/types/widgets/loader/types.d.ts +1 -1
  32. package/dist/types/widgets/stores/index.d.ts +1 -1
  33. package/dist/types/widgets/stores/types.d.ts +15 -0
  34. package/dist/{use-widget-ref-B0aNCANx.js → use-widget-ref-P-2i0MJG.js} +2 -2
  35. package/dist/{use-widget-ref-B0aNCANx.js.map → use-widget-ref-P-2i0MJG.js.map} +1 -1
  36. package/dist/{utils-D3-eQyDR.js → utils-idmvq0Oa.js} +17 -16
  37. package/dist/utils-idmvq0Oa.js.map +1 -0
  38. package/dist/widget-store-CzDt8oSK.js +163 -0
  39. package/dist/widget-store-CzDt8oSK.js.map +1 -0
  40. package/dist/widgets/actions.js +714 -659
  41. package/dist/widgets/actions.js.map +1 -1
  42. package/dist/widgets/bar.js +67 -63
  43. package/dist/widgets/bar.js.map +1 -1
  44. package/dist/widgets/category.js +250 -241
  45. package/dist/widgets/category.js.map +1 -1
  46. package/dist/widgets/echart.js +93 -100
  47. package/dist/widgets/echart.js.map +1 -1
  48. package/dist/widgets/error.js +1 -1
  49. package/dist/widgets/formula.js +64 -72
  50. package/dist/widgets/formula.js.map +1 -1
  51. package/dist/widgets/histogram.js +75 -73
  52. package/dist/widgets/histogram.js.map +1 -1
  53. package/dist/widgets/loader.js +41 -40
  54. package/dist/widgets/loader.js.map +1 -1
  55. package/dist/widgets/markdown.js +2 -2
  56. package/dist/widgets/no-data.js +1 -1
  57. package/dist/widgets/pie.js +4 -4
  58. package/dist/widgets/range.js +97 -105
  59. package/dist/widgets/range.js.map +1 -1
  60. package/dist/widgets/scatterplot.js +8 -8
  61. package/dist/widgets/skeleton-loader.js +1 -1
  62. package/dist/widgets/spread.js +84 -100
  63. package/dist/widgets/spread.js.map +1 -1
  64. package/dist/widgets/stores.js +1 -1
  65. package/dist/widgets/table.js +493 -485
  66. package/dist/widgets/table.js.map +1 -1
  67. package/dist/widgets/timeseries.js +4 -4
  68. package/dist/widgets/wrapper.js +156 -156
  69. package/dist/widgets/wrapper.js.map +1 -1
  70. package/dist/widgets.js +4 -4
  71. package/package.json +3 -3
  72. package/src/components/lasso-tool/lasso-tool-inline.tsx +19 -17
  73. package/src/components/lasso-tool/lasso-tool.tsx +27 -22
  74. package/src/components/lasso-tool/types.ts +4 -3
  75. package/src/widgets/_shared/chart-config/index.ts +1 -0
  76. package/src/widgets/_shared/chart-config/option-builders.test.ts +40 -0
  77. package/src/widgets/_shared/chart-config/option-builders.ts +12 -0
  78. package/src/widgets/actions/fullscreen/fullscreen.tsx +5 -8
  79. package/src/widgets/actions/index.ts +4 -7
  80. package/src/widgets/actions/lock-selection/lock-selection.test.tsx +28 -30
  81. package/src/widgets/actions/lock-selection/lock-selection.tsx +25 -26
  82. package/src/widgets/actions/lock-selection/types.ts +0 -17
  83. package/src/widgets/actions/relative-data/relative-data.test.tsx +13 -13
  84. package/src/widgets/actions/relative-data/relative-data.tsx +18 -21
  85. package/src/widgets/actions/relative-data/types.ts +0 -7
  86. package/src/widgets/actions/searcher/searcher.tsx +40 -22
  87. package/src/widgets/actions/searcher/types.ts +0 -2
  88. package/src/widgets/actions/stack-toggle/stack-toggle.test.tsx +160 -16
  89. package/src/widgets/actions/stack-toggle/stack-toggle.tsx +79 -78
  90. package/src/widgets/actions/stack-toggle/types.ts +0 -8
  91. package/src/widgets/actions/zoom-toggle/zoom-toggle.tsx +137 -87
  92. package/src/widgets/bar/config.ts +37 -28
  93. package/src/widgets/category/category-ui.tsx +25 -22
  94. package/src/widgets/echart/echart-ui.test.tsx +3 -18
  95. package/src/widgets/echart/echart-ui.tsx +4 -22
  96. package/src/widgets/echart/echart.test.tsx +9 -25
  97. package/src/widgets/echart/echart.tsx +36 -29
  98. package/src/widgets/echart/types.ts +0 -4
  99. package/src/widgets/echart/utils.ts +3 -1
  100. package/src/widgets/error/error.tsx +17 -14
  101. package/src/widgets/error/types.ts +10 -0
  102. package/src/widgets/formula/components/value.tsx +13 -13
  103. package/src/widgets/histogram/config.ts +36 -29
  104. package/src/widgets/loader/loader.tsx +20 -8
  105. package/src/widgets/loader/types.ts +3 -1
  106. package/src/widgets/no-data/no-data.tsx +8 -11
  107. package/src/widgets/range/components/range-item.tsx +9 -13
  108. package/src/widgets/spread/components/max-value.tsx +13 -13
  109. package/src/widgets/spread/components/min-value.tsx +13 -13
  110. package/src/widgets/stores/index.ts +1 -0
  111. package/src/widgets/stores/types.ts +17 -0
  112. package/src/widgets/stores/widget-store.test.ts +141 -0
  113. package/src/widgets/stores/widget-store.ts +73 -2
  114. package/src/widgets/table/hooks/use-pagination.ts +44 -35
  115. package/src/widgets/table/hooks/use-sort.ts +25 -23
  116. package/src/widgets/wrapper/wrapper-ui.tsx +16 -17
  117. package/dist/error-B2IJ9d2h.js +0 -38
  118. package/dist/error-B2IJ9d2h.js.map +0 -1
  119. package/dist/lasso-tool-wFqOD6wk.js.map +0 -1
  120. package/dist/no-data-C54XJt13.js +0 -61
  121. package/dist/no-data-C54XJt13.js.map +0 -1
  122. package/dist/styles-CCZnY17y.js.map +0 -1
  123. package/dist/utils-D3-eQyDR.js.map +0 -1
  124. package/dist/widget-store-CB6Trp_0.js +0 -131
  125. package/dist/widget-store-CB6Trp_0.js.map +0 -1
@@ -1,131 +0,0 @@
1
- import { create as f } from "zustand";
2
- const T = /* @__PURE__ */ new Map(), w = f()((g, u) => ({
3
- // State
4
- widgets: {},
5
- // Actions
6
- setWidget: (e, t) => g((o) => {
7
- const r = o.widgets[e] ?? {};
8
- return {
9
- widgets: {
10
- ...o.widgets,
11
- [e]: {
12
- ...r,
13
- ...t,
14
- id: e
15
- }
16
- }
17
- };
18
- }),
19
- removeWidget: (e) => g((t) => {
20
- const o = {
21
- ...t.widgets
22
- };
23
- return delete o[e], {
24
- widgets: o
25
- };
26
- }),
27
- clearWidgets: () => g({
28
- widgets: {}
29
- }),
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
- return {
34
- widgets: {
35
- ...o.widgets,
36
- [e]: {
37
- ...r,
38
- id: e,
39
- registeredTools: [...l, t]
40
- }
41
- }
42
- };
43
- }),
44
- unregisterTool: (e, t) => g((o) => {
45
- const r = o.widgets[e];
46
- if (!r) return o;
47
- const l = (r.registeredTools ?? []).filter((d) => d.id !== t);
48
- return {
49
- widgets: {
50
- ...o.widgets,
51
- [e]: {
52
- ...r,
53
- registeredTools: l
54
- }
55
- }
56
- };
57
- }),
58
- updateToolConfig: (e, t, o) => g((r) => {
59
- const i = r.widgets[e];
60
- if (!i) return r;
61
- const d = (i.registeredTools ?? []).map((n) => n.id === t ? {
62
- ...n,
63
- config: {
64
- ...n.config,
65
- ...o
66
- }
67
- } : n);
68
- return {
69
- widgets: {
70
- ...r.widgets,
71
- [e]: {
72
- ...i,
73
- registeredTools: d
74
- }
75
- }
76
- };
77
- }),
78
- setToolEnabled: (e, t, o) => g((r) => {
79
- const i = r.widgets[e];
80
- if (!i) return r;
81
- const d = (i.registeredTools ?? []).map((n) => n.id === t ? {
82
- ...n,
83
- enabled: o
84
- } : n);
85
- return {
86
- widgets: {
87
- ...r.widgets,
88
- [e]: {
89
- ...i,
90
- registeredTools: d
91
- }
92
- }
93
- };
94
- }),
95
- executeToolPipeline: async (e, t) => {
96
- const o = u().widgets[e];
97
- if (!o) return;
98
- const r = (T.get(e) ?? 0) + 1;
99
- T.set(e, r);
100
- const i = o, l = /* @__PURE__ */ new Set();
101
- for (const s of i.registeredTools ?? [])
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
- let n = t;
105
- for (const s of d) {
106
- if (T.get(e) !== r)
107
- return;
108
- try {
109
- n = await s.fn(n, s.config);
110
- } catch (c) {
111
- console.error(`Tool ${s.id} failed for widget ${e}:`, c);
112
- }
113
- }
114
- g((s) => {
115
- const c = s.widgets[e];
116
- return c ? {
117
- widgets: {
118
- ...s.widgets,
119
- [e]: {
120
- ...c,
121
- data: n
122
- }
123
- }
124
- } : s;
125
- }), T.get(e) === r && T.delete(e);
126
- }
127
- }));
128
- export {
129
- w as u
130
- };
131
- //# sourceMappingURL=widget-store-CB6Trp_0.js.map
@@ -1 +0,0 @@
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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"}