drizzle-cube 0.2.27 → 0.2.29

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 (44) hide show
  1. package/dist/client/charts/chartConfigs.d.ts +1 -1
  2. package/dist/client/charts.js +2 -2
  3. package/dist/client/chunks/{charts-BfXEKIrq.js → charts-Cr9ec7VQ.js} +66 -63
  4. package/dist/client/chunks/charts-Cr9ec7VQ.js.map +1 -0
  5. package/dist/client/chunks/{charts-DQuOI5HA.js → charts-nP6WCxHG.js} +2725 -2488
  6. package/dist/client/chunks/charts-nP6WCxHG.js.map +1 -0
  7. package/dist/client/chunks/{components-CWMeA5e-.js → components-CCRoi0sB.js} +5347 -4700
  8. package/dist/client/chunks/components-CCRoi0sB.js.map +1 -0
  9. package/dist/client/chunks/core-DcL8wSpZ.js +6 -0
  10. package/dist/client/chunks/core-DcL8wSpZ.js.map +1 -0
  11. package/dist/client/chunks/{hooks-CAKGR-w0.js → hooks-CM78mXuP.js} +20 -19
  12. package/dist/client/chunks/{hooks-CAKGR-w0.js.map → hooks-CM78mXuP.js.map} +1 -1
  13. package/dist/client/chunks/{icons-DI4Xack3.js → icons-D7ek1iXF.js} +39 -39
  14. package/dist/client/chunks/{icons-DI4Xack3.js.map → icons-D7ek1iXF.js.map} +1 -1
  15. package/dist/client/components/AnalysisBuilder/FunnelBindingKeySelector.d.ts +21 -0
  16. package/dist/client/components/AnalysisBuilder/types.d.ts +15 -4
  17. package/dist/client/components/charts/FunnelChart.config.d.ts +9 -0
  18. package/dist/client/components/charts/FunnelChart.d.ts +11 -0
  19. package/dist/client/components.js +2 -2
  20. package/dist/client/hooks/queries/index.d.ts +2 -1
  21. package/dist/client/hooks/queries/useFunnelQuery.d.ts +25 -0
  22. package/dist/client/hooks/useAnalysisBuilderHook.d.ts +7 -3
  23. package/dist/client/hooks/useAnalysisQueryExecution.d.ts +12 -1
  24. package/dist/client/hooks.d.ts +1 -1
  25. package/dist/client/hooks.js +12 -11
  26. package/dist/client/icons/types.d.ts +1 -0
  27. package/dist/client/icons.js +1 -1
  28. package/dist/client/index.d.ts +5 -3
  29. package/dist/client/index.js +115 -98
  30. package/dist/client/providers.js +1 -1
  31. package/dist/client/stores/analysisBuilderStore.d.ts +21 -1
  32. package/dist/client/styles.css +1 -1
  33. package/dist/client/types/funnel.d.ts +231 -0
  34. package/dist/client/types.d.ts +11 -2
  35. package/dist/client/utils/funnelExecution.d.ts +111 -0
  36. package/dist/client/utils/funnelValidation.d.ts +46 -0
  37. package/dist/client/utils/multiQueryValidation.d.ts +3 -3
  38. package/dist/client-bundle-stats.html +1 -1
  39. package/package.json +2 -2
  40. package/dist/client/chunks/charts-BfXEKIrq.js.map +0 -1
  41. package/dist/client/chunks/charts-DQuOI5HA.js.map +0 -1
  42. package/dist/client/chunks/components-CWMeA5e-.js.map +0 -1
  43. package/dist/client/chunks/core-DrhYtHHa.js +0 -6
  44. package/dist/client/chunks/core-DrhYtHHa.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ import { default as React } from 'react';
2
+ import { CubeMeta, FunnelBindingKey } from '../../types';
3
+ export interface FunnelBindingKeySelectorProps {
4
+ /** Current binding key value */
5
+ bindingKey: FunnelBindingKey | null;
6
+ /** Callback when binding key changes */
7
+ onChange: (bindingKey: FunnelBindingKey | null) => void;
8
+ /** Cube metadata for available dimensions */
9
+ schema: CubeMeta | null;
10
+ /** Whether the selector is disabled */
11
+ disabled?: boolean;
12
+ /** Optional class name */
13
+ className?: string;
14
+ }
15
+ /**
16
+ * FunnelBindingKeySelector allows users to select a dimension that links
17
+ * funnel steps together. It shows available dimensions from all cubes
18
+ * and supports search filtering.
19
+ */
20
+ declare const FunnelBindingKeySelector: React.NamedExoticComponent<FunnelBindingKeySelectorProps>;
21
+ export default FunnelBindingKeySelector;
@@ -1,5 +1,5 @@
1
1
  import { MouseEvent, DragEvent } from 'react';
2
- import { CubeQuery, Filter, ChartType, ChartAxisConfig, ChartDisplayConfig, MultiQueryConfig } from '../../types';
2
+ import { CubeQuery, Filter, ChartType, ChartAxisConfig, ChartDisplayConfig, MultiQueryConfig, QueryMergeStrategy, FunnelBindingKey } from '../../types';
3
3
  import { ColorPalette } from '../../utils/colorPalettes';
4
4
  import { MetaResponse, MetaField, MetaCube, QueryAnalysis } from '../../shared/types';
5
5
  import { ChartAvailabilityMap } from '../../shared/chartDefaults';
@@ -197,7 +197,7 @@ export interface AnalysisQueryPanelProps {
197
197
  /** Index of the currently active query tab */
198
198
  activeQueryIndex?: number;
199
199
  /** Strategy for merging results from multiple queries */
200
- mergeStrategy?: 'concat' | 'merge';
200
+ mergeStrategy?: QueryMergeStrategy;
201
201
  /** Callback when active query tab changes */
202
202
  onActiveQueryChange?: (index: number) => void;
203
203
  /** Callback to add a new query */
@@ -205,7 +205,7 @@ export interface AnalysisQueryPanelProps {
205
205
  /** Callback to remove a query at specified index */
206
206
  onRemoveQuery?: (index: number) => void;
207
207
  /** Callback when merge strategy changes */
208
- onMergeStrategyChange?: (strategy: 'concat' | 'merge') => void;
208
+ onMergeStrategyChange?: (strategy: QueryMergeStrategy) => void;
209
209
  /** Whether breakdowns are locked (synced from Q1 in merge mode) */
210
210
  breakdownsLocked?: boolean;
211
211
  /** Combined metrics from all queries (for chart config in multi-query mode) */
@@ -214,6 +214,10 @@ export interface AnalysisQueryPanelProps {
214
214
  combinedBreakdowns?: BreakdownItem[];
215
215
  /** Validation result for multi-query mode (errors and warnings) */
216
216
  multiQueryValidation?: MultiQueryValidationResult | null;
217
+ /** Binding key dimension that links funnel steps together */
218
+ funnelBindingKey?: FunnelBindingKey | null;
219
+ /** Callback when funnel binding key changes */
220
+ onFunnelBindingKeyChange?: (bindingKey: FunnelBindingKey | null) => void;
217
221
  }
218
222
  /**
219
223
  * Props for the AnalysisResultsPanel component
@@ -243,6 +247,13 @@ export interface AnalysisResultsPanelProps {
243
247
  onColorPaletteChange?: (paletteName: string) => void;
244
248
  /** All queries for multi-query mode (used for table column headers per-query) */
245
249
  allQueries?: CubeQuery[];
250
+ /**
251
+ * In funnel mode, the actually executed queries with:
252
+ * - Binding key dimension auto-added
253
+ * - IN filter applied for steps 2+
254
+ * Use these for debug display instead of allQueries.
255
+ */
256
+ funnelExecutedQueries?: CubeQuery[];
246
257
  /** Schema metadata */
247
258
  schema: MetaResponse | null;
248
259
  /** Active view (table or chart) */
@@ -479,7 +490,7 @@ export interface AnalysisBuilderStorageState {
479
490
  activeView: 'table' | 'chart';
480
491
  queryStates?: AnalysisBuilderState[];
481
492
  activeQueryIndex?: number;
482
- mergeStrategy?: 'concat' | 'merge';
493
+ mergeStrategy?: QueryMergeStrategy;
483
494
  /** Dimension keys used for merging in 'merge' strategy */
484
495
  mergeKeys?: string[];
485
496
  }
@@ -0,0 +1,9 @@
1
+ import { ChartTypeConfig } from '../../charts/chartConfigs';
2
+ /**
3
+ * Configuration for the funnel chart type
4
+ *
5
+ * Funnel charts visualize sequential conversion data.
6
+ * They work with data from useFunnelQuery which provides
7
+ * pre-calculated step names, values, and conversion rates.
8
+ */
9
+ export declare const funnelChartConfig: ChartTypeConfig;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ import { ChartProps } from '../../types';
3
+ /**
4
+ * FunnelChart Component
5
+ *
6
+ * Renders a funnel visualization from FunnelChartData array.
7
+ * Shows each step as a horizontal bar with width proportional to count.
8
+ * Displays conversion rates between steps.
9
+ */
10
+ declare const FunnelChart: React.NamedExoticComponent<ChartProps>;
11
+ export default FunnelChart;
@@ -1,5 +1,5 @@
1
- import { a as s, A as t, c as r, D as o, M as d, P as i, Q as l } from "./chunks/components-CWMeA5e-.js";
2
- import { c, j as u, h as y, e as P, d as b, v as h } from "./chunks/charts-BfXEKIrq.js";
1
+ import { a as s, A as t, c as r, D as o, M as d, P as i, Q as l } from "./chunks/components-CCRoi0sB.js";
2
+ import { c, j as u, h as y, e as P, d as b, v as h } from "./chunks/charts-Cr9ec7VQ.js";
3
3
  export {
4
4
  s as AnalyticsDashboard,
5
5
  t as AnalyticsPortlet,
@@ -10,6 +10,7 @@
10
10
  * All hooks include built-in debouncing, caching, and error handling.
11
11
  */
12
12
  export { useCubeMetaQuery, prefetchCubeMeta, CUBE_META_QUERY_KEY, type UseCubeMetaQueryOptions, type UseCubeMetaQueryResult, } from './useCubeMetaQuery';
13
- export { useCubeLoadQuery, createQueryKey, type UseCubeLoadQueryOptions, type UseCubeLoadQueryResult, } from './useCubeLoadQuery';
13
+ export { useCubeLoadQuery, useCubeLoadQuery as useCubeQuery, createQueryKey, type UseCubeLoadQueryOptions, type UseCubeLoadQueryResult, } from './useCubeLoadQuery';
14
14
  export { useMultiCubeLoadQuery, createMultiQueryKey, type UseMultiCubeLoadQueryOptions, type UseMultiCubeLoadQueryResult, } from './useMultiCubeLoadQuery';
15
15
  export { useDryRunQuery, useMultiDryRunQueries, useDryRunQueries, createDryRunQueryKey, type DebugDataEntry, type UseDryRunQueryOptions, type UseDryRunQueryResult, type UseMultiDryRunQueriesOptions, type UseMultiDryRunQueriesResult, } from './useDryRunQuery';
16
+ export { useFunnelQuery, createFunnelQueryKey, } from './useFunnelQuery';
@@ -0,0 +1,25 @@
1
+ import { FunnelConfig, UseFunnelQueryOptions, UseFunnelQueryResult } from '../../types/funnel';
2
+ /**
3
+ * Hook for sequential funnel query execution
4
+ *
5
+ * Usage:
6
+ * ```tsx
7
+ * const { result, isExecuting, execute, stepResults, chartData } = useFunnelQuery(config, {
8
+ * debounceMs: 300,
9
+ * skip: !hasBindingKey
10
+ * })
11
+ *
12
+ * // Results show progressively as each step completes
13
+ * {stepResults.map((step, i) => (
14
+ * <div key={i}>
15
+ * {step.stepName}: {step.count} ({step.conversionRate}% from previous)
16
+ * </div>
17
+ * ))}
18
+ * ```
19
+ */
20
+ export declare function useFunnelQuery(config: FunnelConfig | null, options?: UseFunnelQueryOptions): UseFunnelQueryResult;
21
+ /**
22
+ * Create a stable query key for funnel queries
23
+ * (useful if we want to integrate with TanStack Query in the future)
24
+ */
25
+ export declare function createFunnelQueryKey(config: FunnelConfig | null): readonly unknown[];
@@ -1,5 +1,5 @@
1
1
  import { ColorPalette } from '../utils/colorPalettes';
2
- import { CubeQuery, MultiQueryConfig, ChartType, ChartAxisConfig, ChartDisplayConfig, Filter } from '../types';
2
+ import { CubeQuery, MultiQueryConfig, ChartType, ChartAxisConfig, ChartDisplayConfig, Filter, QueryMergeStrategy, FunnelBindingKey } from '../types';
3
3
  import { AnalysisBuilderState, MetricItem, BreakdownItem, ExecutionStatus, QueryPanelTab } from '../components/AnalysisBuilder/types';
4
4
  import { ChartAvailabilityMap } from '../shared/chartDefaults';
5
5
  import { DebugDataEntry } from './queries';
@@ -23,13 +23,14 @@ export interface UseAnalysisBuilderResult {
23
23
  queryState: AnalysisBuilderState;
24
24
  queryStates: AnalysisBuilderState[];
25
25
  activeQueryIndex: number;
26
- mergeStrategy: 'concat' | 'merge';
26
+ mergeStrategy: QueryMergeStrategy;
27
27
  isMultiQueryMode: boolean;
28
28
  mergeKeys: string[] | undefined;
29
29
  currentQuery: CubeQuery;
30
30
  allQueries: CubeQuery[];
31
31
  multiQueryConfig: MultiQueryConfig | null;
32
32
  multiQueryValidation: MultiQueryValidationResult | null;
33
+ funnelBindingKey: FunnelBindingKey | null;
33
34
  executionStatus: ExecutionStatus;
34
35
  executionResults: unknown[] | null;
35
36
  perQueryResults: (unknown[] | null)[] | null;
@@ -38,6 +39,8 @@ export interface UseAnalysisBuilderResult {
38
39
  error: Error | null;
39
40
  isValidQuery: boolean;
40
41
  debugDataPerQuery: DebugDataEntry[];
42
+ /** In funnel mode, the actually executed queries with binding key dimension and IN filters */
43
+ funnelExecutedQueries: CubeQuery[] | null;
41
44
  chartType: ChartType;
42
45
  chartConfig: ChartAxisConfig;
43
46
  displayConfig: ChartDisplayConfig;
@@ -65,7 +68,7 @@ export interface UseAnalysisBuilderResult {
65
68
  canShare: boolean;
66
69
  actions: {
67
70
  setActiveQueryIndex: (index: number) => void;
68
- setMergeStrategy: (strategy: 'concat' | 'merge') => void;
71
+ setMergeStrategy: (strategy: QueryMergeStrategy) => void;
69
72
  openMetricsModal: () => void;
70
73
  addMetric: (field: string, label?: string) => void;
71
74
  removeMetric: (id: string) => void;
@@ -83,6 +86,7 @@ export interface UseAnalysisBuilderResult {
83
86
  setOrder: (fieldName: string, direction: 'asc' | 'desc' | null) => void;
84
87
  addQuery: () => void;
85
88
  removeQuery: (index: number) => void;
89
+ setFunnelBindingKey: (bindingKey: FunnelBindingKey | null) => void;
86
90
  setChartType: (type: ChartType) => void;
87
91
  setChartConfig: (config: ChartAxisConfig) => void;
88
92
  setDisplayConfig: (config: ChartDisplayConfig) => void;
@@ -1,5 +1,5 @@
1
1
  import { DebugDataEntry } from './queries';
2
- import { CubeQuery, MultiQueryConfig } from '../types';
2
+ import { CubeQuery, MultiQueryConfig, FunnelBindingKey, QueryMergeStrategy } from '../types';
3
3
  import { ExecutionStatus } from '../components/AnalysisBuilder/types';
4
4
  export interface UseAnalysisQueryExecutionOptions {
5
5
  /** Current query (for single-query mode) */
@@ -14,6 +14,10 @@ export interface UseAnalysisQueryExecutionOptions {
14
14
  isValidQuery: boolean;
15
15
  /** Initial data (skip first fetch) */
16
16
  initialData?: unknown[];
17
+ /** Merge strategy (for detecting funnel mode) */
18
+ mergeStrategy?: QueryMergeStrategy;
19
+ /** Funnel binding key (required for funnel mode) */
20
+ funnelBindingKey?: FunnelBindingKey | null;
17
21
  }
18
22
  export interface UseAnalysisQueryExecutionResult {
19
23
  /** Query execution status */
@@ -34,5 +38,12 @@ export interface UseAnalysisQueryExecutionResult {
34
38
  hasDebounced: boolean;
35
39
  /** Refetch function */
36
40
  refetch: () => void;
41
+ /**
42
+ * In funnel mode, these are the actually executed queries with:
43
+ * - Binding key dimension auto-added
44
+ * - IN filter applied for steps 2+
45
+ * Use these for debug display instead of the original queries.
46
+ */
47
+ funnelExecutedQueries: CubeQuery[] | null;
37
48
  }
38
49
  export declare function useAnalysisQueryExecution(options: UseAnalysisQueryExecutionOptions): UseAnalysisQueryExecutionResult;
@@ -4,7 +4,7 @@
4
4
  * React hooks only - for applications that need data fetching hooks
5
5
  * without UI components.
6
6
  */
7
- export { useCubeMetaQuery, useCubeLoadQuery, useMultiCubeLoadQuery, useDryRunQuery, useMultiDryRunQueries, useDryRunQueries, } from './hooks/queries';
7
+ export { useCubeMetaQuery, useCubeLoadQuery, useCubeQuery, useMultiCubeLoadQuery, useDryRunQuery, useMultiDryRunQueries, useDryRunQueries, } from './hooks/queries';
8
8
  export type { UseCubeMetaQueryOptions, UseCubeMetaQueryResult, UseCubeLoadQueryOptions, UseCubeLoadQueryResult, UseMultiCubeLoadQueryOptions, UseMultiCubeLoadQueryResult, DebugDataEntry, } from './hooks/queries';
9
9
  export { useDebounce } from './hooks/useDebounce';
10
10
  export { useDirtyStateTracking } from './hooks/useDirtyStateTracking';
@@ -1,15 +1,16 @@
1
- import { u, q as a, y as r, d as o, b as t, s as y, a as i, c as b, x as n } from "./chunks/hooks-CAKGR-w0.js";
2
- import { f as Q } from "./chunks/charts-DQuOI5HA.js";
1
+ import { u as s, u as a, r, z as t, d as y, b as o, t as i, a as b, c as Q, y as n } from "./chunks/hooks-CM78mXuP.js";
2
+ import { f as d } from "./chunks/charts-nP6WCxHG.js";
3
3
  export {
4
- u as useCubeLoadQuery,
5
- Q as useCubeMetaQuery,
6
- a as useDebounce,
7
- r as useDirtyStateTracking,
8
- o as useDryRunQueries,
9
- t as useDryRunQuery,
10
- y as useFilterValues,
11
- i as useMultiCubeLoadQuery,
12
- b as useMultiDryRunQueries,
4
+ s as useCubeLoadQuery,
5
+ d as useCubeMetaQuery,
6
+ a as useCubeQuery,
7
+ r as useDebounce,
8
+ t as useDirtyStateTracking,
9
+ y as useDryRunQueries,
10
+ o as useDryRunQuery,
11
+ i as useFilterValues,
12
+ b as useMultiCubeLoadQuery,
13
+ Q as useMultiDryRunQueries,
13
14
  n as useResponsiveDashboard
14
15
  };
15
16
  //# sourceMappingURL=hooks.js.map
@@ -79,6 +79,7 @@ export interface IconRegistry {
79
79
  chartKpiDelta: IconDefinition;
80
80
  chartKpiText: IconDefinition;
81
81
  chartMarkdown: IconDefinition;
82
+ chartFunnel: IconDefinition;
82
83
  measureCount: IconDefinition;
83
84
  measureCountDistinct: IconDefinition;
84
85
  measureCountDistinctApprox: IconDefinition;
@@ -1,4 +1,4 @@
1
- import { D as a, y as t, z as o, m as n, n as I, t as c, v as g, x as r, p as y, q as p, o as T } from "./chunks/charts-DQuOI5HA.js";
1
+ import { D as a, y as t, z as o, m as n, n as I, t as c, v as g, x as r, p as y, q as p, o as T } from "./chunks/charts-nP6WCxHG.js";
2
2
  export {
3
3
  a as DEFAULT_ICONS,
4
4
  t as getChartTypeIcon,
@@ -18,13 +18,13 @@ useCubeFeatures } from './providers/CubeProvider';
18
18
  export { ScrollContainerProvider, useScrollContainer } from './providers/ScrollContainerContext';
19
19
  export { useCubeFieldLabel } from './hooks/useCubeFieldLabel';
20
20
  export { createCubeClient } from './client/CubeClient';
21
- export { useCubeMetaQuery, useCubeLoadQuery, useMultiCubeLoadQuery, useDryRunQuery, useMultiDryRunQueries, useDryRunQueries, } from './hooks/queries';
21
+ export { useCubeMetaQuery, useCubeLoadQuery, useCubeQuery, useMultiCubeLoadQuery, useDryRunQuery, useMultiDryRunQueries, useDryRunQueries, useFunnelQuery, createFunnelQueryKey, } from './hooks/queries';
22
22
  export type { UseCubeMetaQueryOptions, UseCubeMetaQueryResult, UseCubeLoadQueryOptions, UseCubeLoadQueryResult, UseMultiCubeLoadQueryOptions, UseMultiCubeLoadQueryResult, DebugDataEntry, } from './hooks/queries';
23
23
  export { useAnalysisBuilder } from './hooks/useAnalysisBuilderHook';
24
24
  export type { UseAnalysisBuilderOptions, UseAnalysisBuilderResult, } from './hooks/useAnalysisBuilderHook';
25
25
  export { useDashboard } from './hooks/useDashboardHook';
26
26
  export type { UseDashboardOptions, UseDashboardResult, UseDashboardActions, } from './hooks/useDashboardHook';
27
- export { useAnalysisBuilderStore, selectCurrentState, selectMetrics, selectBreakdowns, selectFilters, selectChartConfig, selectUIState, selectMultiQueryState, } from './stores/analysisBuilderStore';
27
+ export { useAnalysisBuilderStore, selectCurrentState, selectMetrics, selectBreakdowns, selectFilters, selectChartConfig, selectUIState, selectMultiQueryState, selectFunnelState, } from './stores/analysisBuilderStore';
28
28
  export type { AnalysisBuilderStore, AnalysisBuilderStoreState, AnalysisBuilderStoreActions, FieldModalMode, SharedState, } from './stores/analysisBuilderStore';
29
29
  export { DashboardStoreProvider, useDashboardStore, useDashboardStoreApi, useDashboardStoreOptional, createDashboardStore, selectEditModeState, selectModalState, selectLayoutState, selectDebugData, selectPortletDebugData, selectEditModeActions, selectModalActions, selectLayoutActions, selectDebugDataActions, selectAllActions, } from './stores/dashboardStore';
30
30
  export type { DashboardStore, DashboardStoreState, DashboardStoreActions, PortletDebugDataEntry, DragState, CreateDashboardStoreOptions, DashboardStoreProviderProps, } from './stores/dashboardStore';
@@ -33,11 +33,13 @@ export type { MultiQueryValidationError, MultiQueryValidationWarning, MultiQuery
33
33
  export { useTheme } from './hooks/useTheme';
34
34
  export { useScrollDetection } from './hooks/useScrollDetection';
35
35
  export { useElementVisibility } from './hooks/useElementVisibility';
36
- export type { PortletConfig, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery, CubeQueryOptions, CubeApiOptions, DashboardConfig, MultiQueryConfig, QueryMergeStrategy } from './types';
36
+ export type { PortletConfig, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery, CubeQueryOptions, CubeApiOptions, DashboardConfig, MultiQueryConfig, QueryMergeStrategy, FunnelBindingKey, FunnelBindingKeyMapping, FunnelStep, FunnelConfig, FunnelStepResult, FunnelExecutionResult, FunnelChartData, FunnelValidationError, FunnelValidationResult, UseFunnelQueryOptions, UseFunnelQueryResult, } from './types';
37
37
  export { isMultiQueryConfig } from './types';
38
38
  export type { ChartTypeConfig, DisplayOptionConfig, AxisDropZoneConfig } from './charts/chartConfigs';
39
39
  export { createDashboardLayout, formatChartData, highlightCodeBlocks } from './utils/index';
40
40
  export { isMultiQueryData, mergeQueryResults, mergeResultsConcat, mergeResultsByKey, getCombinedFields, getQueryLabels, getQueryIndices, generateQueryLabel, validateMergeKey } from './utils/multiQueryUtils';
41
+ export { validateFunnelConfig, validateBindingKeyExists, validateStepQueries, validateBindingKeyForSteps, isMinimumFunnelConfigValid, getAvailableBindingKeyDimensions, getBindingKeyLabel, } from './utils/funnelValidation';
42
+ export { getBindingKeyField, extractBindingKeyValues, buildStepQuery, buildFunnelConfigFromQueries, buildFunnelChartData, isFunnelData, } from './utils/funnelExecution';
41
43
  export { getThemeVariable, setThemeVariable, applyTheme, resetTheme, getTheme, setTheme, isDarkMode, watchThemeChanges, THEME_PRESETS } from './theme';
42
44
  export type { ThemeColorTokens, ThemeConfig, Theme } from './theme';
43
45
  export { getIcon, getIconData, setIcon, registerIcons, resetIcons, getIconRegistry, getIconsByCategory, getMeasureTypeIcon, getChartTypeIcon, getFieldTypeIcon, DEFAULT_ICONS } from './icons';
@@ -1,107 +1,124 @@
1
- import { d as s, a as t, A as r, C as o, c as i, D as l, m as u, M as n, b as d, P as c, Q as y, q as g, K as C, J as b, N as h, T as m, S as D, L as M, F as p, h as S, j as A, s as T, w as Q, E as I, y as f, r as L, i as v, B as E, v as R, g as B, z as P, t as x, l as F, x as k, k as V, u as w, f as K, e as j, n as z, o as O, p as q, R as G, O as H, I as N, G as U, H as _ } from "./chunks/components-CWMeA5e-.js";
2
- import { C as W, D as X, L as Y, T as Z, i as $, e as ee, y as ae, z as se, m as te, n as re, t as oe, v as ie, x as le, j as ue, h as ne, l as de, p as ce, q as ye, r as ge, o as Ce, k as be, s as he, a as me, u as De, c as Me, d as pe, b as Se, f as Ae, g as Te, w as Qe } from "./chunks/charts-DQuOI5HA.js";
3
- import { L as fe, c as Le, f as ve, g as Ee, i as Re, p as Be, a as Pe } from "./chunks/charts-BfXEKIrq.js";
4
- import { ScrollContainerProvider as Fe, useScrollContainer as ke } from "./providers.js";
5
- import { k as we, g as Ke, j as je, h as ze, i as Oe, m as qe, f as Ge, e as He, u as Ne, d as Ue, b as _e, a as Je, c as We, v as Xe } from "./chunks/hooks-CAKGR-w0.js";
1
+ import { d as s, a as t, A as i, C as r, c as l, D as u, p as o, M as n, b as d, P as c, Q as y, a6 as g, a5 as C, a4 as b, v as h, e as m, O as D, N as M, a3 as S, a0 as p, a2 as Q, a1 as A, S as T, W as F, a7 as f, $ as v, V as B, R as I, I as L, j as E, l as K, s as x, z as R, H as P, E as V, w as k, k as w, o as j, G as z, y as O, i as U, F as _, x as q, n as G, B as H, m as N, f as J, h as W, g as X, q as Y, r as Z, t as $, U as ee, u as ae, T as se, Y as te, _ as ie, X as re, L as le, J as ue, Z as oe, K as ne } from "./chunks/components-CCRoi0sB.js";
2
+ import { C as ce, D as ye, L as ge, T as Ce, i as be, e as he, y as me, z as De, m as Me, n as Se, t as pe, v as Qe, x as Ae, j as Te, h as Fe, l as fe, p as ve, q as Be, r as Ie, o as Le, k as Ee, s as Ke, a as xe, u as Re, c as Pe, d as Ve, b as ke, f as we, g as je, w as ze } from "./chunks/charts-nP6WCxHG.js";
3
+ import { L as Ue, c as _e, f as qe, g as Ge, i as He, p as Ne, a as Je } from "./chunks/charts-Cr9ec7VQ.js";
4
+ import { ScrollContainerProvider as Xe, useScrollContainer as Ye } from "./providers.js";
5
+ import { k as $e, g as ea, j as aa, h as sa, i as ta, m as ia, f as ra, e as la, u as ua, u as oa, d as na, b as da, a as ca, c as ya, v as ga } from "./chunks/hooks-CM78mXuP.js";
6
6
  export {
7
7
  s as AnalysisBuilder,
8
8
  t as AnalyticsDashboard,
9
- r as AnalyticsPortlet,
10
- o as ConfirmModal,
11
- W as CubeProvider,
12
- X as DEFAULT_ICONS,
13
- i as DashboardEditModal,
14
- l as DashboardGrid,
15
- u as DashboardStoreProvider,
16
- fe as LazyChart,
17
- Y as LoadingIndicator,
9
+ i as AnalyticsPortlet,
10
+ r as ConfirmModal,
11
+ ce as CubeProvider,
12
+ ye as DEFAULT_ICONS,
13
+ l as DashboardEditModal,
14
+ u as DashboardGrid,
15
+ o as DashboardStoreProvider,
16
+ Ue as LazyChart,
17
+ ge as LoadingIndicator,
18
18
  n as Modal,
19
19
  d as PortletAnalysisModal,
20
20
  c as PortletContainer,
21
21
  y as QueryBuilder,
22
- Fe as ScrollContainerProvider,
23
- Z as THEME_PRESETS,
24
- $ as applyTheme,
25
- ee as createCubeClient,
26
- Le as createDashboardLayout,
27
- g as createDashboardStore,
28
- C as detectAsymmetricDateRanges,
29
- b as detectMeasureCollisions,
30
- ve as formatChartData,
31
- we as generateQueryLabel,
32
- Ee as getAvailableChartTypes,
33
- ae as getChartTypeIcon,
34
- Ke as getCombinedFields,
35
- se as getFieldTypeIcon,
36
- te as getIcon,
37
- re as getIconData,
38
- oe as getIconRegistry,
39
- ie as getIconsByCategory,
40
- le as getMeasureTypeIcon,
41
- je as getQueryIndices,
42
- ze as getQueryLabels,
43
- ue as getTheme,
44
- ne as getThemeVariable,
45
- h as getValidationSummary,
46
- m as highlightCodeBlocks,
47
- de as isDarkMode,
48
- D as isMultiQueryConfig,
49
- Oe as isMultiQueryData,
50
- M as isMultiQueryValid,
51
- Re as isValidChartType,
52
- qe as mergeQueryResults,
53
- Ge as mergeResultsByKey,
54
- He as mergeResultsConcat,
55
- Be as preloadChart,
56
- Pe as preloadCharts,
57
- ce as registerIcons,
58
- ye as resetIcons,
59
- ge as resetTheme,
60
- p as selectAllActions,
61
- S as selectBreakdowns,
62
- A as selectChartConfig,
63
- T as selectCurrentState,
64
- Q as selectDebugData,
65
- I as selectDebugDataActions,
66
- f as selectEditModeActions,
67
- L as selectEditModeState,
68
- v as selectFilters,
69
- E as selectLayoutActions,
70
- R as selectLayoutState,
71
- B as selectMetrics,
72
- P as selectModalActions,
73
- x as selectModalState,
74
- F as selectMultiQueryState,
75
- k as selectPortletDebugData,
76
- V as selectUIState,
77
- Ce as setIcon,
78
- be as setTheme,
79
- he as setThemeVariable,
80
- w as useAnalysisBuilder,
81
- K as useAnalysisBuilderStore,
82
- me as useCubeApi,
83
- De as useCubeContext,
84
- Me as useCubeFeatures,
85
- pe as useCubeFieldLabel,
86
- Ne as useCubeLoadQuery,
87
- Se as useCubeMeta,
88
- Ae as useCubeMetaQuery,
89
- j as useDashboard,
90
- z as useDashboardStore,
91
- O as useDashboardStoreApi,
92
- q as useDashboardStoreOptional,
93
- Ue as useDryRunQueries,
94
- _e as useDryRunQuery,
95
- G as useElementVisibility,
96
- Je as useMultiCubeLoadQuery,
97
- We as useMultiDryRunQueries,
98
- ke as useScrollContainer,
99
- H as useScrollDetection,
100
- Te as useTheme,
101
- Xe as validateMergeKey,
102
- N as validateMergeKeys,
103
- U as validateMultiQueryConfig,
104
- _ as validateTimeDimensionAlignment,
105
- Qe as watchThemeChanges
22
+ Xe as ScrollContainerProvider,
23
+ Ce as THEME_PRESETS,
24
+ be as applyTheme,
25
+ g as buildFunnelChartData,
26
+ C as buildFunnelConfigFromQueries,
27
+ b as buildStepQuery,
28
+ he as createCubeClient,
29
+ _e as createDashboardLayout,
30
+ h as createDashboardStore,
31
+ m as createFunnelQueryKey,
32
+ D as detectAsymmetricDateRanges,
33
+ M as detectMeasureCollisions,
34
+ S as extractBindingKeyValues,
35
+ qe as formatChartData,
36
+ $e as generateQueryLabel,
37
+ p as getAvailableBindingKeyDimensions,
38
+ Ge as getAvailableChartTypes,
39
+ Q as getBindingKeyField,
40
+ A as getBindingKeyLabel,
41
+ me as getChartTypeIcon,
42
+ ea as getCombinedFields,
43
+ De as getFieldTypeIcon,
44
+ Me as getIcon,
45
+ Se as getIconData,
46
+ pe as getIconRegistry,
47
+ Qe as getIconsByCategory,
48
+ Ae as getMeasureTypeIcon,
49
+ aa as getQueryIndices,
50
+ sa as getQueryLabels,
51
+ Te as getTheme,
52
+ Fe as getThemeVariable,
53
+ T as getValidationSummary,
54
+ F as highlightCodeBlocks,
55
+ fe as isDarkMode,
56
+ f as isFunnelData,
57
+ v as isMinimumFunnelConfigValid,
58
+ B as isMultiQueryConfig,
59
+ ta as isMultiQueryData,
60
+ I as isMultiQueryValid,
61
+ He as isValidChartType,
62
+ ia as mergeQueryResults,
63
+ ra as mergeResultsByKey,
64
+ la as mergeResultsConcat,
65
+ Ne as preloadChart,
66
+ Je as preloadCharts,
67
+ ve as registerIcons,
68
+ Be as resetIcons,
69
+ Ie as resetTheme,
70
+ L as selectAllActions,
71
+ E as selectBreakdowns,
72
+ K as selectChartConfig,
73
+ x as selectCurrentState,
74
+ R as selectDebugData,
75
+ P as selectDebugDataActions,
76
+ V as selectEditModeActions,
77
+ k as selectEditModeState,
78
+ w as selectFilters,
79
+ j as selectFunnelState,
80
+ z as selectLayoutActions,
81
+ O as selectLayoutState,
82
+ U as selectMetrics,
83
+ _ as selectModalActions,
84
+ q as selectModalState,
85
+ G as selectMultiQueryState,
86
+ H as selectPortletDebugData,
87
+ N as selectUIState,
88
+ Le as setIcon,
89
+ Ee as setTheme,
90
+ Ke as setThemeVariable,
91
+ J as useAnalysisBuilder,
92
+ W as useAnalysisBuilderStore,
93
+ xe as useCubeApi,
94
+ Re as useCubeContext,
95
+ Pe as useCubeFeatures,
96
+ Ve as useCubeFieldLabel,
97
+ ua as useCubeLoadQuery,
98
+ ke as useCubeMeta,
99
+ we as useCubeMetaQuery,
100
+ oa as useCubeQuery,
101
+ X as useDashboard,
102
+ Y as useDashboardStore,
103
+ Z as useDashboardStoreApi,
104
+ $ as useDashboardStoreOptional,
105
+ na as useDryRunQueries,
106
+ da as useDryRunQuery,
107
+ ee as useElementVisibility,
108
+ ae as useFunnelQuery,
109
+ ca as useMultiCubeLoadQuery,
110
+ ya as useMultiDryRunQueries,
111
+ Ye as useScrollContainer,
112
+ se as useScrollDetection,
113
+ je as useTheme,
114
+ te as validateBindingKeyExists,
115
+ ie as validateBindingKeyForSteps,
116
+ re as validateFunnelConfig,
117
+ ga as validateMergeKey,
118
+ le as validateMergeKeys,
119
+ ue as validateMultiQueryConfig,
120
+ oe as validateStepQueries,
121
+ ne as validateTimeDimensionAlignment,
122
+ ze as watchThemeChanges
106
123
  };
107
124
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { C as a, e as c, u as i } from "./chunks/charts-DQuOI5HA.js";
1
+ import { C as a, e as c, u as i } from "./chunks/charts-nP6WCxHG.js";
2
2
  import { createContext as o, useContext as t } from "react";
3
3
  const e = o(null), n = e.Provider, C = () => t(e);
4
4
  export {
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StoreApi } from 'zustand';
3
- import { Filter, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery, QueryMergeStrategy, MultiQueryConfig } from '../types';
3
+ import { Filter, ChartType, ChartAxisConfig, ChartDisplayConfig, CubeQuery, QueryMergeStrategy, MultiQueryConfig, FunnelBindingKey, FunnelConfig } from '../types';
4
4
  import { AnalysisBuilderState, MetricItem, BreakdownItem, QueryPanelTab, AIState } from '../components/AnalysisBuilder/types';
5
5
  /**
6
6
  * Field modal mode for field search
@@ -38,6 +38,10 @@ export interface AnalysisBuilderStoreState {
38
38
  fieldModalMode: FieldModalMode;
39
39
  /** AI panel state */
40
40
  aiState: AIState;
41
+ /** Binding key dimension that links funnel steps together */
42
+ funnelBindingKey: FunnelBindingKey | null;
43
+ /** Time window constraint for each step (ISO 8601 duration) */
44
+ stepTimeToConvert: (string | null)[];
41
45
  }
42
46
  /**
43
47
  * Store actions interface
@@ -121,6 +125,14 @@ export interface AnalysisBuilderStoreActions {
121
125
  saveAIPreviousState: () => void;
122
126
  /** Restore previous state (AI cancel/undo) */
123
127
  restoreAIPreviousState: () => void;
128
+ /** Set the funnel binding key */
129
+ setFunnelBindingKey: (bindingKey: FunnelBindingKey | null) => void;
130
+ /** Set time window for a specific step */
131
+ setStepTimeToConvert: (stepIndex: number, duration: string | null) => void;
132
+ /** Build FunnelConfig from current state */
133
+ buildFunnelConfig: () => FunnelConfig | null;
134
+ /** Check if in funnel mode */
135
+ isFunnelMode: () => boolean;
124
136
  /** Clear the current query */
125
137
  clearQuery: () => void;
126
138
  /** Load state from URL share */
@@ -269,3 +281,11 @@ export declare const selectMultiQueryState: (state: AnalysisBuilderStore) => {
269
281
  mergeStrategy: QueryMergeStrategy;
270
282
  isMultiQueryMode: boolean;
271
283
  };
284
+ /**
285
+ * Select funnel state
286
+ */
287
+ export declare const selectFunnelState: (state: AnalysisBuilderStore) => {
288
+ funnelBindingKey: FunnelBindingKey | null;
289
+ stepTimeToConvert: (string | null)[];
290
+ isFunnelMode: boolean;
291
+ };