drizzle-cube 0.2.26 → 0.2.27

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 (89) hide show
  1. package/dist/client/charts.js +2 -2
  2. package/dist/client/chunks/{charts-BsXrHSCm.js → charts-BfXEKIrq.js} +44 -44
  3. package/dist/client/chunks/{charts-BsXrHSCm.js.map → charts-BfXEKIrq.js.map} +1 -1
  4. package/dist/client/chunks/charts-DQuOI5HA.js +9465 -0
  5. package/dist/client/chunks/charts-DQuOI5HA.js.map +1 -0
  6. package/dist/client/chunks/components-CWMeA5e-.js +14872 -0
  7. package/dist/client/chunks/components-CWMeA5e-.js.map +1 -0
  8. package/dist/client/chunks/core-DrhYtHHa.js +6 -0
  9. package/dist/client/chunks/core-DrhYtHHa.js.map +1 -0
  10. package/dist/client/chunks/hooks-CAKGR-w0.js +828 -0
  11. package/dist/client/chunks/hooks-CAKGR-w0.js.map +1 -0
  12. package/dist/client/components/AIAssistant/index.d.ts +5 -2
  13. package/dist/client/components/AnalysisBuilder/index.d.ts +6 -0
  14. package/dist/client/components/AnalysisBuilder/types.d.ts +9 -7
  15. package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +46 -0
  16. package/dist/client/components/AnalysisBuilder/utils/filterUtils.d.ts +19 -0
  17. package/dist/client/components/AnalysisBuilder/utils/idUtils.d.ts +11 -0
  18. package/dist/client/components/AnalysisBuilder/utils/index.d.ts +11 -0
  19. package/dist/client/components/AnalysisBuilder/utils/queryUtils.d.ts +11 -0
  20. package/dist/client/components/AnalysisBuilder/utils/recentFieldsUtils.d.ts +14 -0
  21. package/dist/client/components/AnalysisBuilder/utils/storageUtils.d.ts +42 -0
  22. package/dist/client/components/ConfirmModal.d.ts +30 -0
  23. package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +20 -0
  24. package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +14 -0
  25. package/dist/client/components/DashboardPortletCard.d.ts +13 -34
  26. package/dist/client/components/PortletAnalysisModal.d.ts +4 -2
  27. package/dist/client/components/QueryBuilder/types.d.ts +0 -17
  28. package/dist/client/components/shared/utils.d.ts +2 -112
  29. package/dist/client/components.d.ts +0 -1
  30. package/dist/client/components.js +12 -13
  31. package/dist/client/hooks/queries/index.d.ts +15 -0
  32. package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +67 -0
  33. package/dist/client/hooks/queries/useCubeMetaQuery.d.ts +51 -0
  34. package/dist/client/hooks/queries/useDryRunQuery.d.ts +103 -0
  35. package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +68 -0
  36. package/dist/client/hooks/useAnalysisAI.d.ts +44 -0
  37. package/dist/client/hooks/useAnalysisBuilderHook.d.ts +113 -0
  38. package/dist/client/hooks/useAnalysisChartDefaults.d.ts +35 -0
  39. package/dist/client/hooks/useAnalysisCombinedFields.d.ts +18 -0
  40. package/dist/client/hooks/useAnalysisInitialization.d.ts +25 -0
  41. package/dist/client/hooks/useAnalysisQueryBuilder.d.ts +32 -0
  42. package/dist/client/hooks/useAnalysisQueryExecution.d.ts +38 -0
  43. package/dist/client/hooks/useAnalysisShare.d.ts +23 -0
  44. package/dist/client/hooks/useAnalysisUIState.d.ts +24 -0
  45. package/dist/client/hooks/useDashboardHook.d.ts +108 -0
  46. package/dist/client/hooks/useDebounceQuery.d.ts +48 -0
  47. package/dist/client/hooks/useDirtyStateTracking.d.ts +37 -0
  48. package/dist/client/hooks/useFilterValues.d.ts +4 -1
  49. package/dist/client/hooks.d.ts +4 -2
  50. package/dist/client/hooks.js +12 -170
  51. package/dist/client/hooks.js.map +1 -1
  52. package/dist/client/icons.js +1 -1
  53. package/dist/client/index.d.ts +11 -4
  54. package/dist/client/index.js +99 -70
  55. package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
  56. package/dist/client/providers/CubeProvider.d.ts +7 -3
  57. package/dist/client/providers.js +1 -1
  58. package/dist/client/shared/queryKey.d.ts +1 -0
  59. package/dist/client/shared/utils.d.ts +5 -0
  60. package/dist/client/stores/analysisBuilderStore.d.ts +271 -0
  61. package/dist/client/stores/dashboardStore.d.ts +267 -0
  62. package/dist/client/stores/index.d.ts +13 -0
  63. package/dist/client/styles.css +1 -1
  64. package/dist/client/types.d.ts +27 -1
  65. package/dist/client/utils/chartUtils.d.ts +1 -2
  66. package/dist/client/utils/filterUtils.d.ts +15 -10
  67. package/dist/client/utils/pivotUtils.d.ts +1 -2
  68. package/dist/client-bundle-stats.html +1 -1
  69. package/package.json +13 -19
  70. package/dist/client/chunks/charts-BvLb1eub.js +0 -7427
  71. package/dist/client/chunks/charts-BvLb1eub.js.map +0 -1
  72. package/dist/client/chunks/components-BGWiuXqQ.js +0 -15831
  73. package/dist/client/chunks/components-BGWiuXqQ.js.map +0 -1
  74. package/dist/client/chunks/core-CX7kEAYO.js +0 -6
  75. package/dist/client/chunks/core-CX7kEAYO.js.map +0 -1
  76. package/dist/client/chunks/index-9x0R-Fme.js +0 -551
  77. package/dist/client/chunks/index-9x0R-Fme.js.map +0 -1
  78. package/dist/client/components/AIAssistant/AIAssistantModal.d.ts +0 -10
  79. package/dist/client/components/AnalysisBuilder/utils.d.ts +0 -103
  80. package/dist/client/components/CubeRelationshipDiagram/CubeNode.d.ts +0 -13
  81. package/dist/client/components/CubeRelationshipDiagram/ERDControls.d.ts +0 -7
  82. package/dist/client/components/CubeRelationshipDiagram/RelationshipEdge.d.ts +0 -11
  83. package/dist/client/components/CubeRelationshipDiagram/index.d.ts +0 -10
  84. package/dist/client/components/CubeRelationshipDiagram/useERDLayout.d.ts +0 -21
  85. package/dist/client/components/PortletEditModal.d.ts +0 -12
  86. package/dist/client/components/shared/CubeMetaExplorer.d.ts +0 -4
  87. package/dist/client/hooks/useCubeMeta.d.ts +0 -39
  88. package/dist/client/hooks/useCubeQuery.d.ts +0 -9
  89. package/dist/client/hooks/useMultiCubeQuery.d.ts +0 -36
@@ -0,0 +1,271 @@
1
+ import { ReactNode } from 'react';
2
+ import { StoreApi } from 'zustand';
3
+ import { Filter, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery, QueryMergeStrategy, MultiQueryConfig } from '../types';
4
+ import { AnalysisBuilderState, MetricItem, BreakdownItem, QueryPanelTab, AIState } from '../components/AnalysisBuilder/types';
5
+ /**
6
+ * Field modal mode for field search
7
+ */
8
+ export type FieldModalMode = 'metrics' | 'breakdown';
9
+ /**
10
+ * Complete store state interface
11
+ */
12
+ export interface AnalysisBuilderStoreState {
13
+ /** Array of query states (one per tab) */
14
+ queryStates: AnalysisBuilderState[];
15
+ /** Index of the currently active query tab */
16
+ activeQueryIndex: number;
17
+ /** Strategy for merging multi-query results */
18
+ mergeStrategy: QueryMergeStrategy;
19
+ /** Current chart type */
20
+ chartType: ChartType;
21
+ /** Chart axis configuration */
22
+ chartConfig: ChartAxisConfig;
23
+ /** Chart display configuration */
24
+ displayConfig: ChartDisplayConfig;
25
+ /** Whether user manually selected chart type (disables auto-switch) */
26
+ userManuallySelectedChart: boolean;
27
+ /** Current color palette name */
28
+ localPaletteName: string;
29
+ /** Active tab in query panel */
30
+ activeTab: QueryPanelTab;
31
+ /** Active view (table or chart) */
32
+ activeView: 'table' | 'chart';
33
+ /** Display limit for table */
34
+ displayLimit: number;
35
+ /** Whether field search modal is open */
36
+ showFieldModal: boolean;
37
+ /** Current mode for field search modal */
38
+ fieldModalMode: FieldModalMode;
39
+ /** AI panel state */
40
+ aiState: AIState;
41
+ }
42
+ /**
43
+ * Store actions interface
44
+ */
45
+ export interface AnalysisBuilderStoreActions {
46
+ /** Set all query states */
47
+ setQueryStates: (states: AnalysisBuilderState[]) => void;
48
+ /** Update a specific query state by index */
49
+ updateQueryState: (index: number, updater: (state: AnalysisBuilderState) => AnalysisBuilderState) => void;
50
+ /** Set active query index */
51
+ setActiveQueryIndex: (index: number) => void;
52
+ /** Set merge strategy */
53
+ setMergeStrategy: (strategy: QueryMergeStrategy) => void;
54
+ /** Open field modal in metrics mode */
55
+ openMetricsModal: () => void;
56
+ /** Add a metric to current query */
57
+ addMetric: (field: string, label?: string) => void;
58
+ /** Remove a metric from current query */
59
+ removeMetric: (id: string) => void;
60
+ /** Toggle a metric (add if not present, remove if present) */
61
+ toggleMetric: (fieldName: string) => void;
62
+ /** Reorder metrics */
63
+ reorderMetrics: (fromIndex: number, toIndex: number) => void;
64
+ /** Open field modal in breakdown mode */
65
+ openBreakdownsModal: () => void;
66
+ /** Add a breakdown to current query */
67
+ addBreakdown: (field: string, isTimeDimension: boolean, granularity?: string) => void;
68
+ /** Remove a breakdown from current query */
69
+ removeBreakdown: (id: string) => void;
70
+ /** Toggle a breakdown (add if not present, remove if present) */
71
+ toggleBreakdown: (fieldName: string, isTimeDimension: boolean, granularity?: string) => void;
72
+ /** Change granularity for a time dimension breakdown */
73
+ setBreakdownGranularity: (id: string, granularity: string) => void;
74
+ /** Toggle comparison mode for a time dimension breakdown */
75
+ toggleBreakdownComparison: (id: string) => void;
76
+ /** Reorder breakdowns */
77
+ reorderBreakdowns: (fromIndex: number, toIndex: number) => void;
78
+ /** Set filters for current query */
79
+ setFilters: (filters: Filter[]) => void;
80
+ /** Drop a field to create a filter */
81
+ dropFieldToFilter: (field: string) => void;
82
+ /** Set sort order for a field */
83
+ setOrder: (fieldName: string, direction: 'asc' | 'desc' | null) => void;
84
+ /** Add a new query tab */
85
+ addQuery: () => void;
86
+ /** Remove a query tab */
87
+ removeQuery: (index: number) => void;
88
+ /** Set chart type */
89
+ setChartType: (type: ChartType) => void;
90
+ /** Set chart type with manual selection flag */
91
+ setChartTypeManual: (type: ChartType) => void;
92
+ /** Set chart config */
93
+ setChartConfig: (config: ChartAxisConfig) => void;
94
+ /** Set display config */
95
+ setDisplayConfig: (config: ChartDisplayConfig) => void;
96
+ /** Set color palette name */
97
+ setLocalPaletteName: (name: string) => void;
98
+ /** Set user manually selected chart flag */
99
+ setUserManuallySelectedChart: (value: boolean) => void;
100
+ /** Set active tab */
101
+ setActiveTab: (tab: QueryPanelTab) => void;
102
+ /** Set active view */
103
+ setActiveView: (view: 'table' | 'chart') => void;
104
+ /** Set display limit */
105
+ setDisplayLimit: (limit: number) => void;
106
+ /** Close field modal */
107
+ closeFieldModal: () => void;
108
+ /** Open AI panel */
109
+ openAI: () => void;
110
+ /** Close AI panel */
111
+ closeAI: () => void;
112
+ /** Set AI prompt */
113
+ setAIPrompt: (prompt: string) => void;
114
+ /** Set AI generating state */
115
+ setAIGenerating: (generating: boolean) => void;
116
+ /** Set AI error */
117
+ setAIError: (error: string | null) => void;
118
+ /** Set AI has generated query */
119
+ setAIHasGeneratedQuery: (hasQuery: boolean) => void;
120
+ /** Save previous state for AI undo */
121
+ saveAIPreviousState: () => void;
122
+ /** Restore previous state (AI cancel/undo) */
123
+ restoreAIPreviousState: () => void;
124
+ /** Clear the current query */
125
+ clearQuery: () => void;
126
+ /** Load state from URL share */
127
+ loadFromShare: (sharedState: SharedState) => void;
128
+ /** Get current state (helper accessor) */
129
+ getCurrentState: () => AnalysisBuilderState;
130
+ /** Get merge keys (computed from Q1 breakdowns) */
131
+ getMergeKeys: () => string[] | undefined;
132
+ /** Check if in multi-query mode */
133
+ isMultiQueryMode: () => boolean;
134
+ /** Build current CubeQuery */
135
+ buildCurrentQuery: () => CubeQuery;
136
+ /** Build all queries */
137
+ buildAllQueries: () => CubeQuery[];
138
+ /** Build MultiQueryConfig */
139
+ buildMultiQueryConfig: () => MultiQueryConfig | null;
140
+ /** Reset store to initial state */
141
+ reset: () => void;
142
+ }
143
+ /**
144
+ * Shared state from URL
145
+ */
146
+ export interface SharedState {
147
+ query: CubeQuery | MultiQueryConfig;
148
+ chartType?: ChartType;
149
+ chartConfig?: ChartAxisConfig;
150
+ displayConfig?: ChartDisplayConfig;
151
+ activeView?: 'table' | 'chart';
152
+ }
153
+ /**
154
+ * Combined store type
155
+ */
156
+ export type AnalysisBuilderStore = AnalysisBuilderStoreState & AnalysisBuilderStoreActions;
157
+ /**
158
+ * Options for creating a store instance
159
+ */
160
+ export interface CreateStoreOptions {
161
+ /** Initial query configuration */
162
+ initialQuery?: CubeQuery | MultiQueryConfig;
163
+ /** Initial chart configuration */
164
+ initialChartConfig?: {
165
+ chartType?: ChartType;
166
+ chartConfig?: ChartAxisConfig;
167
+ displayConfig?: ChartDisplayConfig;
168
+ };
169
+ /** Disable localStorage persistence */
170
+ disableLocalStorage?: boolean;
171
+ }
172
+ /**
173
+ * Create a new store instance with optional persistence
174
+ */
175
+ export declare function createAnalysisBuilderStore(options?: CreateStoreOptions): Omit<Omit<StoreApi<AnalysisBuilderStore>, "setState" | "devtools"> & {
176
+ setState(partial: AnalysisBuilderStore | Partial<AnalysisBuilderStore> | ((state: AnalysisBuilderStore) => AnalysisBuilderStore | Partial<AnalysisBuilderStore>), replace?: false | undefined, action?: (string | {
177
+ [x: string]: unknown;
178
+ [x: number]: unknown;
179
+ [x: symbol]: unknown;
180
+ type: string;
181
+ }) | undefined): void;
182
+ setState(state: AnalysisBuilderStore | ((state: AnalysisBuilderStore) => AnalysisBuilderStore), replace: true, action?: (string | {
183
+ [x: string]: unknown;
184
+ [x: number]: unknown;
185
+ [x: symbol]: unknown;
186
+ type: string;
187
+ }) | undefined): void;
188
+ devtools: {
189
+ cleanup: () => void;
190
+ };
191
+ }, "subscribe"> & {
192
+ subscribe: {
193
+ (listener: (selectedState: AnalysisBuilderStore, previousSelectedState: AnalysisBuilderStore) => void): () => void;
194
+ <U>(selector: (state: AnalysisBuilderStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
195
+ equalityFn?: ((a: U, b: U) => boolean) | undefined;
196
+ fireImmediately?: boolean;
197
+ } | undefined): () => void;
198
+ };
199
+ };
200
+ /**
201
+ * Provider props
202
+ */
203
+ export interface AnalysisBuilderStoreProviderProps {
204
+ children: ReactNode;
205
+ /** Initial query configuration */
206
+ initialQuery?: CubeQuery | MultiQueryConfig;
207
+ /** Initial chart configuration */
208
+ initialChartConfig?: {
209
+ chartType?: ChartType;
210
+ chartConfig?: ChartAxisConfig;
211
+ displayConfig?: ChartDisplayConfig;
212
+ };
213
+ /** Disable localStorage persistence */
214
+ disableLocalStorage?: boolean;
215
+ }
216
+ /**
217
+ * Provider component that creates a store instance per AnalysisBuilder
218
+ */
219
+ export declare function AnalysisBuilderStoreProvider({ children, initialQuery, initialChartConfig, disableLocalStorage, }: AnalysisBuilderStoreProviderProps): import("react/jsx-runtime").JSX.Element;
220
+ /**
221
+ * Hook to access the store from context
222
+ * @throws Error if used outside of provider
223
+ */
224
+ export declare function useAnalysisBuilderStore<T>(selector: (state: AnalysisBuilderStore) => T): T;
225
+ /**
226
+ * Hook to get the raw store API (for actions that need direct access)
227
+ */
228
+ export declare function useAnalysisBuilderStoreApi(): StoreApi<AnalysisBuilderStore>;
229
+ /**
230
+ * Select current query state
231
+ */
232
+ export declare const selectCurrentState: (state: AnalysisBuilderStore) => AnalysisBuilderState;
233
+ /**
234
+ * Select current metrics
235
+ */
236
+ export declare const selectMetrics: (state: AnalysisBuilderStore) => MetricItem[];
237
+ /**
238
+ * Select current breakdowns
239
+ */
240
+ export declare const selectBreakdowns: (state: AnalysisBuilderStore) => BreakdownItem[];
241
+ /**
242
+ * Select current filters
243
+ */
244
+ export declare const selectFilters: (state: AnalysisBuilderStore) => Filter[];
245
+ /**
246
+ * Select chart configuration
247
+ */
248
+ export declare const selectChartConfig: (state: AnalysisBuilderStore) => {
249
+ chartType: ChartType;
250
+ chartConfig: ChartAxisConfig;
251
+ displayConfig: ChartDisplayConfig;
252
+ };
253
+ /**
254
+ * Select UI state
255
+ */
256
+ export declare const selectUIState: (state: AnalysisBuilderStore) => {
257
+ activeTab: QueryPanelTab;
258
+ activeView: "table" | "chart";
259
+ displayLimit: number;
260
+ showFieldModal: boolean;
261
+ fieldModalMode: FieldModalMode;
262
+ };
263
+ /**
264
+ * Select multi-query state
265
+ */
266
+ export declare const selectMultiQueryState: (state: AnalysisBuilderStore) => {
267
+ queryStates: AnalysisBuilderState[];
268
+ activeQueryIndex: number;
269
+ mergeStrategy: QueryMergeStrategy;
270
+ isMultiQueryMode: boolean;
271
+ };
@@ -0,0 +1,267 @@
1
+ import { ReactNode } from 'react';
2
+ import { StoreApi } from 'zustand';
3
+ import { LayoutItem } from 'react-grid-layout';
4
+ import { PortletConfig, RowLayout, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery } from '../types';
5
+ /**
6
+ * Debug data entry for a portlet (used by chart inspector)
7
+ */
8
+ export interface PortletDebugDataEntry {
9
+ chartConfig: ChartAxisConfig;
10
+ displayConfig: ChartDisplayConfig;
11
+ queryObject: CubeQuery | null;
12
+ data: unknown[];
13
+ chartType: ChartType;
14
+ cacheInfo?: {
15
+ hit: boolean;
16
+ cachedAt: string;
17
+ ttlMs: number;
18
+ ttlRemainingMs: number;
19
+ };
20
+ }
21
+ /**
22
+ * @deprecated Use PortletDebugDataEntry instead. Kept for backward compatibility.
23
+ */
24
+ export type DebugDataEntry = PortletDebugDataEntry;
25
+ /**
26
+ * Drag state for row-based layout
27
+ */
28
+ export interface DragState {
29
+ rowIndex: number;
30
+ colIndex: number;
31
+ portletId: string;
32
+ }
33
+ /**
34
+ * Complete store state interface
35
+ */
36
+ export interface DashboardStoreState {
37
+ /** Whether dashboard is in edit mode */
38
+ isEditMode: boolean;
39
+ /** Currently selected filter ID for filter-assignment mode */
40
+ selectedFilterId: string | null;
41
+ /** Whether portlet edit modal is open */
42
+ isPortletModalOpen: boolean;
43
+ /** Portlet being edited (null = adding new) */
44
+ editingPortlet: PortletConfig | null;
45
+ /** Whether filter config modal is open */
46
+ isFilterConfigModalOpen: boolean;
47
+ /** Portlet for filter configuration */
48
+ filterConfigPortlet: PortletConfig | null;
49
+ /** Portlet ID pending delete confirmation (null = no confirmation active) */
50
+ deleteConfirmPortletId: string | null;
51
+ /** Draft row layout during drag operations (rows mode) */
52
+ draftRows: RowLayout[] | null;
53
+ /** Whether a portlet is currently being dragged */
54
+ isDraggingPortlet: boolean;
55
+ /** Last known layout for change detection */
56
+ lastKnownLayout: LayoutItem[];
57
+ /** Whether component has been initialized (prevents saves during load) */
58
+ isInitialized: boolean;
59
+ /** Current drag state for row-based layout */
60
+ dragState: DragState | null;
61
+ /** Debug data keyed by portlet ID (for chart inspector) */
62
+ debugData: Record<string, DebugDataEntry>;
63
+ }
64
+ /**
65
+ * Store actions interface
66
+ */
67
+ export interface DashboardStoreActions {
68
+ /** Set edit mode */
69
+ setEditMode: (isEdit: boolean) => void;
70
+ /** Toggle edit mode */
71
+ toggleEditMode: () => void;
72
+ /** Set selected filter ID for filter selection mode */
73
+ setSelectedFilterId: (filterId: string | null) => void;
74
+ /** Exit filter selection mode */
75
+ exitFilterSelectionMode: () => void;
76
+ /** Open portlet modal (optionally with a portlet to edit) */
77
+ openPortletModal: (portlet?: PortletConfig | null) => void;
78
+ /** Close portlet modal */
79
+ closePortletModal: () => void;
80
+ /** Open filter config modal for a portlet */
81
+ openFilterConfigModal: (portlet: PortletConfig) => void;
82
+ /** Close filter config modal */
83
+ closeFilterConfigModal: () => void;
84
+ /** Open delete confirmation for a portlet */
85
+ openDeleteConfirm: (portletId: string) => void;
86
+ /** Close delete confirmation */
87
+ closeDeleteConfirm: () => void;
88
+ /** Set draft rows during drag operations */
89
+ setDraftRows: (rows: RowLayout[] | null) => void;
90
+ /** Set whether a portlet is being dragged */
91
+ setIsDraggingPortlet: (isDragging: boolean) => void;
92
+ /** Set last known layout for change detection */
93
+ setLastKnownLayout: (layout: LayoutItem[]) => void;
94
+ /** Set whether component is initialized */
95
+ setIsInitialized: (initialized: boolean) => void;
96
+ /** Set drag state */
97
+ setDragState: (state: DragState | null) => void;
98
+ /** Clear drag state */
99
+ clearDragState: () => void;
100
+ /** Set debug data for a portlet */
101
+ setDebugData: (portletId: string, data: DebugDataEntry) => void;
102
+ /** Clear debug data for a portlet (or all if no portletId) */
103
+ clearDebugData: (portletId?: string) => void;
104
+ /** Reset store to initial state */
105
+ reset: () => void;
106
+ }
107
+ /**
108
+ * Combined store type
109
+ */
110
+ export type DashboardStore = DashboardStoreState & DashboardStoreActions;
111
+ /**
112
+ * Options for creating a store instance
113
+ */
114
+ export interface CreateDashboardStoreOptions {
115
+ /** Initial edit mode state */
116
+ initialEditMode?: boolean;
117
+ }
118
+ /**
119
+ * Create a new dashboard store instance
120
+ */
121
+ export declare function createDashboardStore(options?: CreateDashboardStoreOptions): Omit<Omit<StoreApi<DashboardStore>, "setState" | "devtools"> & {
122
+ setState(partial: DashboardStore | Partial<DashboardStore> | ((state: DashboardStore) => DashboardStore | Partial<DashboardStore>), replace?: false | undefined, action?: (string | {
123
+ [x: string]: unknown;
124
+ [x: number]: unknown;
125
+ [x: symbol]: unknown;
126
+ type: string;
127
+ }) | undefined): void;
128
+ setState(state: DashboardStore | ((state: DashboardStore) => DashboardStore), replace: true, action?: (string | {
129
+ [x: string]: unknown;
130
+ [x: number]: unknown;
131
+ [x: symbol]: unknown;
132
+ type: string;
133
+ }) | undefined): void;
134
+ devtools: {
135
+ cleanup: () => void;
136
+ };
137
+ }, "subscribe"> & {
138
+ subscribe: {
139
+ (listener: (selectedState: DashboardStore, previousSelectedState: DashboardStore) => void): () => void;
140
+ <U>(selector: (state: DashboardStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
141
+ equalityFn?: ((a: U, b: U) => boolean) | undefined;
142
+ fireImmediately?: boolean;
143
+ } | undefined): () => void;
144
+ };
145
+ };
146
+ /**
147
+ * Provider props
148
+ */
149
+ export interface DashboardStoreProviderProps {
150
+ children: ReactNode;
151
+ /** Initial edit mode state */
152
+ initialEditMode?: boolean;
153
+ }
154
+ /**
155
+ * Provider component that creates a store instance per Dashboard
156
+ */
157
+ export declare function DashboardStoreProvider({ children, initialEditMode, }: DashboardStoreProviderProps): import("react/jsx-runtime").JSX.Element;
158
+ /**
159
+ * Hook to access the store from context
160
+ * @throws Error if used outside of provider
161
+ */
162
+ export declare function useDashboardStore<T>(selector: (state: DashboardStore) => T): T;
163
+ /**
164
+ * Hook to get the raw store API (for actions that need direct access)
165
+ */
166
+ export declare function useDashboardStoreApi(): StoreApi<DashboardStore>;
167
+ /**
168
+ * Optional hook that returns null if used outside provider (for optional store access)
169
+ * Uses a fallback store to ensure useStore is always called (React hooks rules compliance)
170
+ */
171
+ export declare function useDashboardStoreOptional<T>(selector: (state: DashboardStore) => T): T | null;
172
+ /**
173
+ * Select edit mode state
174
+ */
175
+ export declare const selectEditModeState: (state: DashboardStore) => {
176
+ isEditMode: boolean;
177
+ selectedFilterId: string | null;
178
+ };
179
+ /**
180
+ * Select modal state
181
+ */
182
+ export declare const selectModalState: (state: DashboardStore) => {
183
+ isPortletModalOpen: boolean;
184
+ editingPortlet: PortletConfig | null;
185
+ isFilterConfigModalOpen: boolean;
186
+ filterConfigPortlet: PortletConfig | null;
187
+ };
188
+ /**
189
+ * Select layout state
190
+ */
191
+ export declare const selectLayoutState: (state: DashboardStore) => {
192
+ draftRows: RowLayout[] | null;
193
+ isDraggingPortlet: boolean;
194
+ lastKnownLayout: LayoutItem[];
195
+ isInitialized: boolean;
196
+ dragState: DragState | null;
197
+ };
198
+ /**
199
+ * Select debug data
200
+ */
201
+ export declare const selectDebugData: (state: DashboardStore) => Record<string, PortletDebugDataEntry>;
202
+ /**
203
+ * Select debug data for a specific portlet
204
+ */
205
+ export declare const selectPortletDebugData: (portletId: string) => (state: DashboardStore) => PortletDebugDataEntry;
206
+ /**
207
+ * Select all edit mode actions
208
+ */
209
+ export declare const selectEditModeActions: (state: DashboardStore) => {
210
+ setEditMode: (isEdit: boolean) => void;
211
+ toggleEditMode: () => void;
212
+ setSelectedFilterId: (filterId: string | null) => void;
213
+ exitFilterSelectionMode: () => void;
214
+ };
215
+ /**
216
+ * Select all modal actions
217
+ */
218
+ export declare const selectModalActions: (state: DashboardStore) => {
219
+ openPortletModal: (portlet?: PortletConfig | null) => void;
220
+ closePortletModal: () => void;
221
+ openFilterConfigModal: (portlet: PortletConfig) => void;
222
+ closeFilterConfigModal: () => void;
223
+ openDeleteConfirm: (portletId: string) => void;
224
+ closeDeleteConfirm: () => void;
225
+ };
226
+ /**
227
+ * Select all layout actions
228
+ */
229
+ export declare const selectLayoutActions: (state: DashboardStore) => {
230
+ setDraftRows: (rows: RowLayout[] | null) => void;
231
+ setIsDraggingPortlet: (isDragging: boolean) => void;
232
+ setLastKnownLayout: (layout: LayoutItem[]) => void;
233
+ setIsInitialized: (initialized: boolean) => void;
234
+ setDragState: (state: DragState | null) => void;
235
+ clearDragState: () => void;
236
+ };
237
+ /**
238
+ * Select all debug data actions
239
+ */
240
+ export declare const selectDebugDataActions: (state: DashboardStore) => {
241
+ setDebugData: (portletId: string, data: DebugDataEntry) => void;
242
+ clearDebugData: (portletId?: string) => void;
243
+ };
244
+ /**
245
+ * Select all actions
246
+ */
247
+ export declare const selectAllActions: (state: DashboardStore) => {
248
+ setEditMode: (isEdit: boolean) => void;
249
+ toggleEditMode: () => void;
250
+ setSelectedFilterId: (filterId: string | null) => void;
251
+ exitFilterSelectionMode: () => void;
252
+ openPortletModal: (portlet?: PortletConfig | null) => void;
253
+ closePortletModal: () => void;
254
+ openFilterConfigModal: (portlet: PortletConfig) => void;
255
+ closeFilterConfigModal: () => void;
256
+ openDeleteConfirm: (portletId: string) => void;
257
+ closeDeleteConfirm: () => void;
258
+ setDraftRows: (rows: RowLayout[] | null) => void;
259
+ setIsDraggingPortlet: (isDragging: boolean) => void;
260
+ setLastKnownLayout: (layout: LayoutItem[]) => void;
261
+ setIsInitialized: (initialized: boolean) => void;
262
+ setDragState: (state: DragState | null) => void;
263
+ clearDragState: () => void;
264
+ setDebugData: (portletId: string, data: DebugDataEntry) => void;
265
+ clearDebugData: (portletId?: string) => void;
266
+ reset: () => void;
267
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Zustand Stores - Barrel Export
3
+ *
4
+ * Centralized state management stores for the drizzle-cube client.
5
+ *
6
+ * ARCHITECTURE: Instance-based stores
7
+ * - Each AnalysisBuilder/Dashboard gets its own Zustand store instance via Context
8
+ * - Use `*StoreProvider` to wrap components that need store access
9
+ * - Use `use*Store` hook to access state (must be inside provider)
10
+ */
11
+ export { AnalysisBuilderStoreProvider, useAnalysisBuilderStore, useAnalysisBuilderStoreApi, createAnalysisBuilderStore, selectCurrentState, selectMetrics, selectBreakdowns, selectFilters, selectChartConfig, selectUIState, selectMultiQueryState, type AnalysisBuilderStore, type AnalysisBuilderStoreState, type AnalysisBuilderStoreActions, type FieldModalMode, type SharedState, type CreateStoreOptions, type AnalysisBuilderStoreProviderProps, } from './analysisBuilderStore.js';
12
+ export { DashboardStoreProvider, useDashboardStore, useDashboardStoreApi, useDashboardStoreOptional, createDashboardStore, selectEditModeState, selectModalState, selectLayoutState, selectDebugData, selectPortletDebugData, selectEditModeActions, selectModalActions, selectLayoutActions, selectDebugDataActions, selectAllActions, type DashboardStore, type DashboardStoreState, type DashboardStoreActions, type PortletDebugDataEntry, type DebugDataEntry as DashboardDebugDataEntry, // Alias to avoid conflict with hooks/queries
13
+ type DragState, type CreateDashboardStoreOptions, type DashboardStoreProviderProps, } from './dashboardStore.js';