react-semaphor 0.1.308 → 0.1.310

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 (48) hide show
  1. package/dist/brand-studio/index.cjs +1 -1
  2. package/dist/brand-studio/index.js +4 -4
  3. package/dist/chunks/{braces-BHDm9arh.js → braces-B_1DhXjs.js} +1 -1
  4. package/dist/chunks/{braces-DEq8EJtw.js → braces-BataYVhi.js} +1 -1
  5. package/dist/chunks/{chevrons-up-down-DDEY9beZ.js → chevrons-up-down-2PuJgXa0.js} +1 -1
  6. package/dist/chunks/{chevrons-up-down-Cbtggnqv.js → chevrons-up-down-CfMX77Ug.js} +1 -1
  7. package/dist/chunks/common-types-4bjoIgvm.js +75 -0
  8. package/dist/chunks/common-types-C73-Ud1-.js +1 -0
  9. package/dist/chunks/{dashboard-controls-DviftQE7.js → dashboard-controls-CZH2CHE6.js} +1 -1
  10. package/dist/chunks/{dashboard-controls-DTxSUWvy.js → dashboard-controls-DKNSTyu3.js} +83 -83
  11. package/dist/chunks/{dashboard-filter-controls-button-DHKfgPah.js → dashboard-filter-controls-button-C5FGXiyJ.js} +4 -4
  12. package/dist/chunks/{dashboard-filter-controls-button-D0nrJ7wl.js → dashboard-filter-controls-button-CRYFNfgr.js} +1 -1
  13. package/dist/chunks/{dashboard-json-DZmsUV5n.js → dashboard-json-A9m16zgO.js} +2 -2
  14. package/dist/chunks/{dashboard-json-DYzZ0G6T.js → dashboard-json-CUYxXIbj.js} +1 -1
  15. package/dist/chunks/{dashboard-summary-settings-dialog-QbUTp92u.js → dashboard-summary-settings-dialog-BFldiulJ.js} +3 -3
  16. package/dist/chunks/{dashboard-summary-settings-dialog-Cc3yKCu4.js → dashboard-summary-settings-dialog-Dl80Vf3Y.js} +1 -1
  17. package/dist/chunks/{edit-dashboard-visual-BS3LKMJe.js → edit-dashboard-visual-Bt6wP1pc.js} +32 -32
  18. package/dist/chunks/{edit-dashboard-visual-CmgculGv.js → edit-dashboard-visual-C013lDvS.js} +1251 -1261
  19. package/dist/chunks/{index-C0zD3JgK.js → index-C_mYCH5V.js} +209 -209
  20. package/dist/chunks/{index-BxYIELMe.js → index-scc12bkM.js} +7498 -7493
  21. package/dist/chunks/{palette-CteErylX.js → palette-CuxyTPBF.js} +1 -1
  22. package/dist/chunks/{palette-CNKSAIrt.js → palette-DIqG9FgB.js} +1 -1
  23. package/dist/chunks/{resource-management-panel-B4QM3fZ_.js → resource-management-panel-CkS-1IEw.js} +1 -1
  24. package/dist/chunks/{resource-management-panel-8cHoj8SV.js → resource-management-panel-xJtqTzS8.js} +3 -3
  25. package/dist/chunks/{save-B1-nDZwS.js → save-CP9_rxYk.js} +1 -1
  26. package/dist/chunks/{save-BVVnWGeb.js → save-CPHrveZg.js} +1 -1
  27. package/dist/chunks/{switch-BG4RWnrq.js → switch-BFPV36rd.js} +31 -31
  28. package/dist/chunks/{switch-BZn7R_Cp.js → switch-DXHYEa_J.js} +1586 -1637
  29. package/dist/chunks/{use-create-flow-overlay-state-CeWstFjy.js → use-create-flow-overlay-state-C77yBFiq.js} +4 -4
  30. package/dist/chunks/{use-create-flow-overlay-state-Bmb471Fp.js → use-create-flow-overlay-state-nhcTzyJQ.js} +1 -1
  31. package/dist/chunks/{use-visual-utils-CmfDomt0.js → use-visual-utils-BqljNzWn.js} +2 -2
  32. package/dist/chunks/{use-visual-utils-DflfgX9g.js → use-visual-utils-Cm2IkP1c.js} +1 -1
  33. package/dist/dashboard/index.cjs +1 -1
  34. package/dist/dashboard/index.js +2 -2
  35. package/dist/index.cjs +1 -1
  36. package/dist/index.js +107 -104
  37. package/dist/surfboard/index.cjs +1 -1
  38. package/dist/surfboard/index.js +3 -3
  39. package/dist/types/dashboard.d.ts +17 -5
  40. package/dist/types/index.cjs +1 -1
  41. package/dist/types/index.js +16 -7
  42. package/dist/types/main.d.ts +39 -5
  43. package/dist/types/shared.d.ts +17 -5
  44. package/dist/types/surfboard.d.ts +17 -5
  45. package/dist/types/types.d.ts +310 -57
  46. package/package.json +6 -1
  47. package/dist/chunks/common-types-C6cAQgyh.js +0 -9
  48. package/dist/chunks/common-types-nBuCd3u2.js +0 -1
@@ -4,7 +4,17 @@ import { JSX } from 'react';
4
4
 
5
5
  export declare type AggregateCalc = 'AVG' | 'MIN' | 'MAX' | 'SUM' | 'COUNT' | 'COUNT_DISTINCT';
6
6
 
7
- declare type AggregateFunction = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'MEDIAN' | 'DISTINCT';
7
+ /**
8
+ * Configuration for which aggregate functions to use and at which levels (by Field.id)
9
+ */
10
+ export declare interface AggregateConfig {
11
+ functions: AggregateFunction[];
12
+ levels?: string[];
13
+ }
14
+
15
+ export declare type AggregateFunction = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'MEDIAN' | 'DISTINCT';
16
+
17
+ export declare type AggregationStrategy = 'default' | 'symmetric_aggregate' | 'aggregate_then_join' | 'weighted';
8
18
 
9
19
  declare type AIContext = {
10
20
  selectedEntities: SelectedEntities;
@@ -347,6 +357,30 @@ export declare type CacheConfig = {
347
357
  status: 'on' | 'on-refresh' | 'off';
348
358
  };
349
359
 
360
+ /**
361
+ * Special entity name marker for calculated fields.
362
+ *
363
+ * Calculated fields are virtual/derived fields created from SQL expressions
364
+ * combining other metrics. They don't belong to any physical table/dataset.
365
+ *
366
+ * This marker is used to:
367
+ * 1. Identify calculated fields throughout the application
368
+ * 2. Exclude them from join resolution (since they're expressions, not table columns)
369
+ * 3. Distinguish them from actual table names in the system
370
+ *
371
+ * The join resolver filters out any fields with this entityName to avoid
372
+ * attempting to join to a non-existent "calculated" table.
373
+ *
374
+ * @example
375
+ * // A calculated field combining two metrics:
376
+ * {
377
+ * name: "profit",
378
+ * entityName: CALCULATED_FIELD_ENTITY_MARKER,
379
+ * expression: "(SUM(revenue) - SUM(cost))"
380
+ * }
381
+ */
382
+ export declare const CALCULATED_FIELD_ENTITY_MARKER: "SEMAPHOR_CALCULATED_FIELD";
383
+
350
384
  /**
351
385
  * Formula metadata for calculated fields (UI-only metadata)
352
386
  * This is supplementary data to help the UI display and edit calculated fields.
@@ -355,7 +389,7 @@ export declare type CacheConfig = {
355
389
  * IMPORTANT: This metadata is ALWAYS updated atomically with the expression field.
356
390
  * Both are generated together from the same dialog inputs, preventing drift.
357
391
  */
358
- declare interface CalculatedFieldFormula {
392
+ export declare interface CalculatedFieldFormula {
359
393
  operation: CalculatedFieldOperation;
360
394
  /**
361
395
  * Array of full MetricField objects used as inputs to the calculated field.
@@ -387,7 +421,7 @@ declare interface CalculatedFieldFormula {
387
421
  /**
388
422
  * Operations supported for calculated fields
389
423
  */
390
- declare type CalculatedFieldOperation = 'sum' | 'difference' | 'product' | 'ratio' | 'change' | 'percentage' | 'scale' | 'custom';
424
+ export declare type CalculatedFieldOperation = 'sum' | 'difference' | 'product' | 'ratio' | 'change' | 'percentage' | 'scale' | 'custom';
391
425
 
392
426
  /**
393
427
  * Calendar context for timezone-aware date operations.
@@ -418,9 +452,9 @@ export declare type CalendarContext = {
418
452
  };
419
453
  };
420
454
 
421
- declare type CanonicalFormatSpec = NumericCanonicalFormat | DateCanonicalFormat | StringCanonicalFormat;
455
+ export declare type CanonicalFormatSpec = NumericCanonicalFormat | DateCanonicalFormat | StringCanonicalFormat;
422
456
 
423
- declare interface CardConfig {
457
+ export declare interface CardConfig {
424
458
  groupByColumns?: GroupByField[];
425
459
  metricColumns?: MetricField[];
426
460
  pivotByColumns?: PivotByField[];
@@ -487,7 +521,7 @@ declare interface CardInteractionConfig {
487
521
  drillHierarchies?: DrillHierarchy[];
488
522
  }
489
523
 
490
- declare type CardMode = 'explorer' | 'dev';
524
+ export declare type CardMode = 'explorer' | 'dev';
491
525
 
492
526
  declare type CardWithContent = BaseCustomCard & {
493
527
  content: React.FC<{
@@ -720,7 +754,9 @@ export declare type ConnectionPolicy = {
720
754
  params: Params;
721
755
  };
722
756
 
723
- declare type ConnectionType = 'GoogleSheets' | 'FileUpload' | 'MySQL' | 'MSSQL' | 'PostgreSQL' | 'BigQuery' | 'Redshift' | 'Snowflake' | 'S3' | 'clickhouse' | 'S3Tables' | 'API' | 'none';
757
+ export declare type ConnectionType = 'GoogleSheets' | 'FileUpload' | 'MySQL' | 'MSSQL' | 'PostgreSQL' | 'BigQuery' | 'Redshift' | 'Snowflake' | 'S3' | 'clickhouse' | 'S3Tables' | 'API' | 'none';
758
+
759
+ export declare type ContainerId = 'groupBy' | 'metrics' | 'pivotBy' | 'sortBy' | 'detailColumns' | 'source';
724
760
 
725
761
  export declare type ContextSource = {
726
762
  kind: AlertContextSourceKind;
@@ -1049,7 +1085,7 @@ export declare type DashboardProps = {
1049
1085
  preferences?: DashboardPreferences;
1050
1086
  };
1051
1087
 
1052
- declare interface DatabaseEntityReference {
1088
+ export declare interface DatabaseEntityReference {
1053
1089
  connectionId: string;
1054
1090
  connectionType: ConnectionType;
1055
1091
  type: EntityType;
@@ -1060,27 +1096,27 @@ declare interface DatabaseEntityReference {
1060
1096
  name: string;
1061
1097
  }
1062
1098
 
1063
- declare type DatabaseEntityType = 'table' | 'view' | 'materialized view';
1099
+ export declare type DatabaseEntityType = 'table' | 'view' | 'materialized view';
1064
1100
 
1065
- declare interface DataModelEntityReference extends DatabaseEntityReference {
1101
+ export declare interface DataModelEntityReference extends DatabaseEntityReference {
1066
1102
  type: 'model';
1067
1103
  id: string;
1068
1104
  label: string;
1069
1105
  description: string;
1070
1106
  }
1071
1107
 
1072
- declare interface DatasetEntityReference extends DatabaseEntityReference {
1108
+ export declare interface DatasetEntityReference extends DatabaseEntityReference {
1073
1109
  type: 'dataset';
1074
1110
  datasetType: 'physical' | 'virtual';
1075
- datamodelId: string;
1076
- sql: string;
1111
+ datamodelId?: string | null;
1112
+ sql?: string | null;
1077
1113
  id: string;
1078
1114
  domainId: string;
1079
1115
  label: string;
1080
- description: string;
1116
+ description?: string;
1081
1117
  }
1082
1118
 
1083
- declare interface DataSource {
1119
+ export declare interface DataSource {
1084
1120
  connectionId: string;
1085
1121
  semanticDomainId?: string;
1086
1122
  connectionType: string;
@@ -1093,7 +1129,9 @@ declare interface DataSource {
1093
1129
  selectedEntities: SelectedEntities;
1094
1130
  }
1095
1131
 
1096
- declare const DATE_FORMAT_VALUES: readonly ["MM-DD-YYYY", "YYYY-MM-DD", "MM/DD/YYYY", "DD/MM/YYYY", "MMMM DD, YYYY", "MMM DD, YYYY", "DD MMM YYYY", "YYYY-MM-DD HH:mm", "YYYY-MM-DD HH:mm:ss", "YYYY-MM-DD HH:mm Z", "YYYY-MM-DD HH:mm:ss Z", "Week of MMM DD, YYYY", "Week of MMMM DD, YYYY", "YYYY-WW", "MMM YYYY", "MMMM YYYY", "YYYY-MM", "MM/YYYY", "YYYY MMM", "Q1 YYYY", "YYYY Q1", "1st Quarter YYYY", "YYYY-Q1", "Quarter 1, YYYY", "YYYY", "YY", "custom"];
1132
+ export declare type DataType = 'string' | 'number' | 'date' | 'datetime' | 'boolean' | 'json' | 'geo';
1133
+
1134
+ export declare const DATE_FORMAT_VALUES: readonly ["MM-DD-YYYY", "YYYY-MM-DD", "MM/DD/YYYY", "DD/MM/YYYY", "MMMM DD, YYYY", "MMM DD, YYYY", "DD MMM YYYY", "YYYY-MM-DD HH:mm", "YYYY-MM-DD HH:mm:ss", "YYYY-MM-DD HH:mm Z", "YYYY-MM-DD HH:mm:ss Z", "Week of MMM DD, YYYY", "Week of MMMM DD, YYYY", "YYYY-WW", "MMM YYYY", "MMMM YYYY", "YYYY-MM", "MM/YYYY", "YYYY MMM", "Q1 YYYY", "YYYY Q1", "1st Quarter YYYY", "YYYY-Q1", "Quarter 1, YYYY", "YYYY", "YY", "custom"];
1097
1135
 
1098
1136
  declare type DateCanonicalFormat = {
1099
1137
  type: 'date';
@@ -1106,7 +1144,14 @@ declare type DateCanonicalFormat = {
1106
1144
  suffix?: string;
1107
1145
  };
1108
1146
 
1109
- declare type DateFormatValue = (typeof DATE_FORMAT_VALUES)[number];
1147
+ export declare type DateComparisonOperation = Extract<Operation, '=' | '!=' | '>' | '>=' | '<' | '<=' | 'between' | 'not between' | 'is null' | 'is not null'>;
1148
+
1149
+ export declare type DateFormatOption = {
1150
+ value: DateFormatValue;
1151
+ label: string;
1152
+ };
1153
+
1154
+ export declare type DateFormatValue = (typeof DATE_FORMAT_VALUES)[number];
1110
1155
 
1111
1156
  export declare type DateOptions = {
1112
1157
  locale: string;
@@ -1114,9 +1159,11 @@ export declare type DateOptions = {
1114
1159
  options: Intl.DateTimeFormatOptions;
1115
1160
  };
1116
1161
 
1117
- declare type DateSelectionMode = 'range' | 'months';
1162
+ export declare type DateSelectionMode = 'range' | 'months';
1163
+
1164
+ export declare type DateUnit = RelativeDateFilter['unit'];
1118
1165
 
1119
- declare type DateUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';
1166
+ declare type DateUnit_2 = 'day' | 'week' | 'month' | 'quarter' | 'year';
1120
1167
 
1121
1168
  /**
1122
1169
  * Default CalendarContext when not provided.
@@ -1141,7 +1188,7 @@ export declare type DeliveryConfig = {
1141
1188
  * Unlike GroupByField, DetailField does not support aggregation or granularity.
1142
1189
  * Columns are selected and displayed as-is from the database.
1143
1190
  */
1144
- declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1191
+ export declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1145
1192
  role: 'detail';
1146
1193
  dateFormat?: DateFormatValue;
1147
1194
  customFormat?: string;
@@ -1155,7 +1202,7 @@ declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1155
1202
  calculatedFormula?: CalculatedFieldFormula;
1156
1203
  }
1157
1204
 
1158
- declare interface DetailTableBackupConfig {
1205
+ export declare interface DetailTableBackupConfig {
1159
1206
  groupByColumns?: GroupByField[];
1160
1207
  metricColumns?: MetricField[];
1161
1208
  pivotByColumns?: PivotByField[];
@@ -1173,7 +1220,14 @@ declare interface DetailTableBackupConfig {
1173
1220
  comparisonType?: 'none' | 'previous_period' | 'same_period_last_year' | 'target' | 'start_vs_end';
1174
1221
  }
1175
1222
 
1176
- declare type Dialect = 'mysql' | 'postgres' | 'bigquery' | 'redshift' | 'snowflake' | 'clickhouse' | 'duckdb' | 'mssql';
1223
+ export declare type Dialect = 'mysql' | 'postgres' | 'bigquery' | 'redshift' | 'snowflake' | 'clickhouse' | 'duckdb' | 'mssql';
1224
+
1225
+ export declare type DimensionInputReference = {
1226
+ dataset: string;
1227
+ field: string;
1228
+ } | {
1229
+ dimension: string;
1230
+ };
1177
1231
 
1178
1232
  export declare type DisplayDataType = 'string' | 'date' | 'number' | 'html' | 'none';
1179
1233
 
@@ -1369,6 +1423,29 @@ export declare type DocumentVariableRef = {
1369
1423
  key: 'generatedAt' | 'pageNumber' | 'pageCount';
1370
1424
  };
1371
1425
 
1426
+ export declare interface DomainCalculatedDimension {
1427
+ name: string;
1428
+ label: string;
1429
+ description?: string;
1430
+ expression: string;
1431
+ inputs: Record<string, DimensionInputReference>;
1432
+ dataType?: DataType;
1433
+ tags?: string[];
1434
+ }
1435
+
1436
+ export declare interface DomainCalculatedMetric {
1437
+ name: string;
1438
+ label: string;
1439
+ description?: string;
1440
+ expression: string;
1441
+ inputs: Record<string, InputReference>;
1442
+ metricType?: 'base' | 'derived' | 'calculated';
1443
+ format?: FormatSpec;
1444
+ tags?: string[];
1445
+ isCertified?: boolean;
1446
+ aggregationStrategy?: AggregationStrategy;
1447
+ }
1448
+
1372
1449
  declare interface DrillDownInteraction {
1373
1450
  mode: 'drillDown';
1374
1451
  /**
@@ -1519,7 +1596,17 @@ export declare type EmailSettings = {
1519
1596
 
1520
1597
  export declare const EMPTY_SELECTION: SelectionState;
1521
1598
 
1522
- declare type EntityType = 'table' | 'view' | 'materialized view' | 'model' | 'file' | 'dataset' | 'url' | 'upload';
1599
+ export declare type EntityColumnGroup = {
1600
+ entityId: string;
1601
+ entityType: EntityType;
1602
+ entityName: string;
1603
+ qualifiedEntityName: string;
1604
+ label?: string;
1605
+ description?: string;
1606
+ columns: Field[];
1607
+ };
1608
+
1609
+ export declare type EntityType = 'table' | 'view' | 'materialized view' | 'model' | 'file' | 'dataset' | 'url' | 'upload';
1523
1610
 
1524
1611
  export declare type ErrorProps = {
1525
1612
  message?: string;
@@ -1532,7 +1619,7 @@ export declare type ExportDataPayload = {
1532
1619
  sql: string;
1533
1620
  };
1534
1621
 
1535
- declare interface Field {
1622
+ export declare interface Field {
1536
1623
  /**
1537
1624
  * Unique identifier for this field instance (for joins, UI state, etc.).
1538
1625
  * Should be unique within the context of the query or data model.
@@ -1553,6 +1640,7 @@ declare interface Field {
1553
1640
  * If not provided, should be auto-generated from label or name.
1554
1641
  */
1555
1642
  alias?: string;
1643
+ sourceField?: string;
1556
1644
  qualifiedFieldName: string;
1557
1645
  dataType: string;
1558
1646
  description?: string;
@@ -1570,7 +1658,7 @@ declare interface Field {
1570
1658
  fieldScope?: FieldScope;
1571
1659
  }
1572
1660
 
1573
- declare type FieldScope = 'card' | 'dashboard' | 'domain';
1661
+ export declare type FieldScope = 'card' | 'dashboard' | 'domain';
1574
1662
 
1575
1663
  declare type FileAttachment = {
1576
1664
  id: string;
@@ -1583,7 +1671,7 @@ declare type FileAttachment = {
1583
1671
  uploadProgress?: number;
1584
1672
  };
1585
1673
 
1586
- declare interface FileEntityReference extends DatabaseEntityReference {
1674
+ export declare interface FileEntityReference extends DatabaseEntityReference {
1587
1675
  id: string;
1588
1676
  type: 'file' | 'url' | 'upload';
1589
1677
  label: string;
@@ -1604,7 +1692,7 @@ declare interface FilterByColumn extends BaseColumn {
1604
1692
  staticValues?: string[];
1605
1693
  }
1606
1694
 
1607
- declare interface FilterCondition {
1695
+ export declare interface FilterCondition {
1608
1696
  id: string;
1609
1697
  field: Field;
1610
1698
  operator: Operator;
@@ -1624,7 +1712,7 @@ export declare type FilterDashboardInput = DashboardInputBase & {
1624
1712
  */
1625
1713
  declare type FilterDisplayMode = 'canvas' | 'toolbar' | 'inherit';
1626
1714
 
1627
- declare type FilterFieldMeta = Pick<Field, 'name' | 'qualifiedFieldName'> & Partial<Pick<Field, 'id' | 'qualifiedEntityName' | 'entityId' | 'dataType' | 'role' | 'fieldScope'>> & {
1715
+ export declare type FilterFieldMeta = Pick<Field, 'name' | 'qualifiedFieldName'> & Partial<Pick<Field, 'id' | 'qualifiedEntityName' | 'entityId' | 'dataType' | 'role' | 'fieldScope'>> & {
1628
1716
  entityName?: Field['entityName'];
1629
1717
  entityType?: string;
1630
1718
  expression?: string;
@@ -1667,7 +1755,7 @@ declare type FilterForString = BaseFilter & {
1667
1755
  values: [string];
1668
1756
  };
1669
1757
 
1670
- declare interface FilterGroup {
1758
+ export declare interface FilterGroup {
1671
1759
  id: string;
1672
1760
  logicalOperator: LogicalOperator;
1673
1761
  negate: boolean;
@@ -1705,21 +1793,21 @@ export declare type FilterLayoutSettings = {
1705
1793
  toolbarItemOrder?: string[];
1706
1794
  };
1707
1795
 
1708
- declare type FilterLocation = 'dashboard' | 'frame' | 'sheet' | undefined;
1796
+ export declare type FilterLocation = 'dashboard' | 'frame' | 'sheet' | undefined;
1709
1797
 
1710
1798
  declare type FilterOnClick = {
1711
1799
  expression?: string;
1712
1800
  columnIndex: number;
1713
1801
  };
1714
1802
 
1715
- declare type FilterSemanticContext = {
1803
+ export declare type FilterSemanticContext = {
1716
1804
  semanticDomainId?: string;
1717
1805
  selectedEntities?: unknown[];
1718
1806
  connectionId?: string;
1719
1807
  connectionType?: string;
1720
1808
  };
1721
1809
 
1722
- declare type FilterValue = string | number | boolean | Date | null | [number, number] | [string, string] | string[] | number[];
1810
+ export declare type FilterValue = string | number | boolean | Date | null | [number, number] | [string, string] | string[] | number[];
1723
1811
 
1724
1812
  /**
1725
1813
  * Absolute fixed month/year default used by Month Picker defaults.
@@ -1732,9 +1820,11 @@ declare type FixedMonthDefaultDateFilter = {
1732
1820
  month: number;
1733
1821
  };
1734
1822
 
1823
+ export declare type FlatTableTotalsBehavior = 'sum' | 'avg' | 'count' | 'label';
1824
+
1735
1825
  export declare type FormatProfile = 'concise' | 'balanced' | 'detailed';
1736
1826
 
1737
- declare type FormatSpec = {
1827
+ export declare type FormatSpec = {
1738
1828
  type: 'number' | 'currency' | 'percent' | 'percentage' | 'scientific';
1739
1829
  locale?: string;
1740
1830
  minimumFractionDigits?: number;
@@ -1772,6 +1862,8 @@ export declare type GetDashboardResponse = {
1772
1862
  organizationAppearance?: AppearanceSpec | null;
1773
1863
  };
1774
1864
 
1865
+ export declare function getFieldRuntimeColumnName(field: Pick<Field, 'name' | 'sourceField'> | null | undefined): string;
1866
+
1775
1867
  export declare type GetPluginsResponse = {
1776
1868
  plugins: {
1777
1869
  label: string;
@@ -1788,7 +1880,7 @@ declare interface GroupByColumn extends BaseColumn {
1788
1880
  format?: string;
1789
1881
  }
1790
1882
 
1791
- declare interface GroupByField extends Field {
1883
+ export declare interface GroupByField extends Field {
1792
1884
  role: 'groupby';
1793
1885
  granularity?: TimeGranularity;
1794
1886
  /**
@@ -1800,6 +1892,10 @@ declare interface GroupByField extends Field {
1800
1892
  calculatedFormula?: CalculatedFieldFormula;
1801
1893
  }
1802
1894
 
1895
+ export declare function hasCalculatedFieldMarker(field: Pick<Field, 'entityName' | 'entityId'> | null | undefined): boolean;
1896
+
1897
+ export declare function hasCalculatedFormulaInputs(field: Field | null | undefined): boolean;
1898
+
1803
1899
  export declare type HtmlOptions = {
1804
1900
  html: string;
1805
1901
  };
@@ -1840,6 +1936,16 @@ declare interface InlineDrillInteraction {
1840
1936
  label?: string;
1841
1937
  }
1842
1938
 
1939
+ export declare type InputReference = {
1940
+ dataset: string;
1941
+ field: string;
1942
+ aggregate?: AggregateFunction;
1943
+ } | {
1944
+ metric: string;
1945
+ } | {
1946
+ dimension: string;
1947
+ };
1948
+
1843
1949
  /**
1844
1950
  * Unified Interaction type (V2)
1845
1951
  * Combines all interaction types into a single union for the new interactions array.
@@ -1881,29 +1987,63 @@ declare type InteractiveSurfaceAppearance = BaseSurfaceAppearance & {
1881
1987
  toolbarBackground?: string;
1882
1988
  };
1883
1989
 
1884
- declare interface Join {
1990
+ /**
1991
+ * Type guard to identify calculated dimensions
1992
+ */
1993
+ export declare function isCalculatedDimension(field: GroupByField): field is GroupByField & {
1994
+ expression: string;
1995
+ };
1996
+
1997
+ /**
1998
+ * Generic type guard for any calculated field
1999
+ */
2000
+ export declare function isCalculatedField(field: Field): boolean;
2001
+
2002
+ /**
2003
+ * IMPORTANT: Why we store qualifiedFieldNames as strings instead of Field objects
2004
+ *
2005
+ * Field IDs are ephemeral and change on drag-and-drop operations. Storing
2006
+ * qualifiedFieldNames as strings provides:
2007
+ * - No data duplication (metricColumns is the single source of truth)
2008
+ * - Smaller payload size
2009
+ * - Stable references (qualifiedFieldName doesn't change)
2010
+ * - Backend can look up fresh aggregate info from metricColumns
2011
+ * - Enables proper post-aggregation: SUM(t0.sales) / COUNT(t0.order_id)
2012
+ * instead of incorrect: SUM(t0.sales / t0.order_id)
2013
+ */
2014
+ /**
2015
+ * Type guard to identify calculated metrics
2016
+ */
2017
+ export declare function isCalculatedMetric(field: Field): field is MetricField & {
2018
+ expression: string;
2019
+ };
2020
+
2021
+ export declare interface Join {
1885
2022
  id: string;
1886
2023
  source: DatabaseEntityReference;
1887
2024
  target: DatabaseEntityReference;
1888
2025
  joinType: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
1889
2026
  joinKeyGroups: JoinKeyGroup[];
1890
2027
  sequence: number;
2028
+ relationshipId?: string;
2029
+ relationshipName?: string;
2030
+ relationshipCardinality?: 'one_to_one' | 'one_to_many' | 'many_to_one' | 'many_to_many';
1891
2031
  }
1892
2032
 
1893
- declare interface JoinKey {
2033
+ export declare interface JoinKey {
1894
2034
  id?: string;
1895
2035
  source: Field;
1896
2036
  target: Field;
1897
2037
  operator: string;
1898
2038
  }
1899
2039
 
1900
- declare interface JoinKeyGroup {
2040
+ export declare interface JoinKeyGroup {
1901
2041
  id: string;
1902
2042
  operator: string;
1903
2043
  keys: JoinKey[];
1904
2044
  }
1905
2045
 
1906
- declare interface JoinPlan {
2046
+ export declare interface JoinPlan {
1907
2047
  baseEntity: DatabaseEntityReference;
1908
2048
  joins: Join[];
1909
2049
  }
@@ -1928,7 +2068,7 @@ export declare type LoadingProps = {
1928
2068
  message?: string;
1929
2069
  };
1930
2070
 
1931
- declare type LogicalOperator = 'AND' | 'OR';
2071
+ export declare type LogicalOperator = 'AND' | 'OR';
1932
2072
 
1933
2073
  declare interface MetricColumn extends BaseColumn {
1934
2074
  role: 'metric';
@@ -1936,7 +2076,7 @@ declare interface MetricColumn extends BaseColumn {
1936
2076
  aliasTemplate?: string;
1937
2077
  }
1938
2078
 
1939
- declare interface MetricField extends Field {
2079
+ export declare interface MetricField extends Field {
1940
2080
  role: 'metric';
1941
2081
  aggregate?: AggregateFunction;
1942
2082
  /**
@@ -1978,6 +2118,12 @@ declare interface MetricField extends Field {
1978
2118
  * Both are generated together from the same dialog inputs, preventing drift.
1979
2119
  */
1980
2120
  calculatedFormula?: CalculatedFieldFormula;
2121
+ /**
2122
+ * Indicates the metric expression must be evaluated after row-level filtering,
2123
+ * either because it contains an aggregate function directly or depends on a
2124
+ * pre-aggregated metric input.
2125
+ */
2126
+ isPreAggregated?: boolean;
1981
2127
  comparisonType?: 'none' | 'previous_period' | 'same_period_last_year' | 'start_vs_end' | 'target';
1982
2128
  comparisonDisplay?: 'column' | 'inline' | 'hover';
1983
2129
  targetValue?: number;
@@ -2020,9 +2166,9 @@ declare type NumericCanonicalFormat = {
2020
2166
 
2021
2167
  declare type OldFilterValue = string | number | null | (string | number)[] | RangeValue;
2022
2168
 
2023
- declare type Operation = '=' | '>' | '<' | '>=' | '<=' | '!=' | 'in' | 'not in' | 'like' | 'not like' | 'between' | 'not between' | 'is null' | 'is not null';
2169
+ export declare type Operation = '=' | '>' | '<' | '>=' | '<=' | '!=' | 'in' | 'not in' | 'like' | 'not like' | 'between' | 'not between' | 'is null' | 'is not null';
2024
2170
 
2025
- declare type Operator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'startsWith' | 'endsWith' | 'in' | 'not in' | 'between' | 'not between' | 'isNull' | 'isNotNull';
2171
+ export declare type Operator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'startsWith' | 'endsWith' | 'like' | 'not like' | 'in' | 'not in' | 'between' | 'not between' | 'isNull' | 'isNotNull';
2026
2172
 
2027
2173
  declare type OptionsMap = {
2028
2174
  number: NumberOptions;
@@ -2040,11 +2186,23 @@ declare interface OrderBy {
2040
2186
  /**
2041
2187
  * Pagination configuration for table queries
2042
2188
  */
2043
- declare interface PaginationConfig {
2189
+ export declare interface PaginationConfig {
2044
2190
  page: number;
2045
2191
  pageSize: number;
2046
2192
  }
2047
2193
 
2194
+ /**
2195
+ * Pagination metadata returned with query results
2196
+ */
2197
+ export declare interface PaginationMetadata {
2198
+ page: number;
2199
+ pageSize: number;
2200
+ pageCount: number;
2201
+ totalCount: number;
2202
+ hasNextPage: boolean;
2203
+ hasPrevPage: boolean;
2204
+ }
2205
+
2048
2206
  declare type Params = {
2049
2207
  [key: string]: string | number | string[] | number[];
2050
2208
  };
@@ -2053,10 +2211,49 @@ declare type PersistedInteraction = Interaction & {
2053
2211
  id?: string;
2054
2212
  };
2055
2213
 
2056
- declare interface PivotByField extends Field {
2214
+ export declare interface PivotByField extends Field {
2057
2215
  role: 'pivotby';
2058
2216
  }
2059
2217
 
2218
+ export declare interface PivotColumnSchema {
2219
+ alias: string;
2220
+ metricId: string;
2221
+ metricName: string;
2222
+ metricLabel?: string;
2223
+ pivotValues: string[];
2224
+ pivotFields?: string[];
2225
+ displayLabel?: string;
2226
+ isPivotColumn?: boolean;
2227
+ isMetricColumn?: boolean;
2228
+ isGroupByColumn?: boolean;
2229
+ aggregate?: AggregateFunction;
2230
+ }
2231
+
2232
+ /**
2233
+ const config: CardConfig = {
2234
+ groupByColumns: [
2235
+ { id: 'region', name: 'region', label: 'Region', ... },
2236
+ { id: 'country', name: 'country', label: 'Country', ... }
2237
+ ],
2238
+ pivotByColumns: [
2239
+ { id: 'year', name: 'year', label: 'Year', ... },
2240
+ { id: 'quarter', name: 'quarter', label: 'Quarter', ... }
2241
+ ],
2242
+ metricColumns: [ ... ],
2243
+ rowAggregates: ['SUM', 'AVG'],
2244
+ columnAggregates: ['SUM'],
2245
+ subtotals: {
2246
+ groupBy: { functions: ['SUM'], levels: ['region'] }, // subtotal at region level
2247
+ pivotBy: { functions: ['SUM'], levels: ['year'] } // subtotal at year level
2248
+ }
2249
+ };
2250
+ */
2251
+ export declare enum PivotMarkerEnum {
2252
+ SUBTOTAL = "__SUBTOTAL__",
2253
+ TOTAL = "__TOTAL__",
2254
+ ALL = "__ALL__"
2255
+ }
2256
+
2060
2257
  export declare type Placeholders = {
2061
2258
  /**
2062
2259
  * Placeholder for the card when there are no records to display.
@@ -2070,6 +2267,20 @@ export declare type Placeholders = {
2070
2267
 
2071
2268
  export declare type PluginType = 'custom' | 'standard';
2072
2269
 
2270
+ export declare interface QueryColumnKeyMap {
2271
+ version: 1;
2272
+ source: 'explorer';
2273
+ byFieldId: Record<string, QueryColumnKeyMapEntry>;
2274
+ }
2275
+
2276
+ export declare interface QueryColumnKeyMapEntry {
2277
+ role: QueryColumnKeyRole;
2278
+ rawKey: string;
2279
+ outputKey?: string;
2280
+ }
2281
+
2282
+ export declare type QueryColumnKeyRole = 'groupby' | 'metric' | 'pivotby' | 'detail';
2283
+
2073
2284
  declare interface QueryConfig {
2074
2285
  groupByColumns?: GroupByColumn[];
2075
2286
  pivotColumns?: GroupByColumn[];
@@ -2080,6 +2291,26 @@ declare interface QueryConfig {
2080
2291
  orderBy?: OrderBy[];
2081
2292
  }
2082
2293
 
2294
+ /**
2295
+ * Response structure for query execution (standard queries and comparison queries)
2296
+ */
2297
+ export declare interface QueryExecutionResponse {
2298
+ records: any[];
2299
+ output: string;
2300
+ rowLimitExceeded: boolean;
2301
+ sql?: string;
2302
+ userSql?: string;
2303
+ pivotSchema?: any;
2304
+ pagination?: PaginationMetadata;
2305
+ subtotalColumns?: string[];
2306
+ columnSubtotalMeta?: any;
2307
+ columnMetadata?: Record<string, any>;
2308
+ columnKeyMap?: QueryColumnKeyMap;
2309
+ tableTotalsByColumnId?: Record<string, string | number | null>;
2310
+ documentTableTotalsBaseSql?: string;
2311
+ metadata?: any;
2312
+ }
2313
+
2083
2314
  declare type QueryFilter = {
2084
2315
  filterColumnName: string;
2085
2316
  filterValue: OldFilterValue;
@@ -2092,21 +2323,21 @@ declare type RangeValue = {
2092
2323
  gt?: string | number;
2093
2324
  };
2094
2325
 
2095
- declare type RelativeDateFilter = {
2326
+ export declare type RelativeDateFilter = {
2096
2327
  mode: 'last';
2097
2328
  n: number;
2098
- unit: DateUnit;
2329
+ unit: DateUnit_2;
2099
2330
  complete?: boolean;
2100
2331
  } | {
2101
2332
  mode: 'this';
2102
- unit: DateUnit;
2333
+ unit: DateUnit_2;
2103
2334
  toDate?: boolean;
2104
2335
  } | {
2105
2336
  mode: 'previous';
2106
- unit: DateUnit;
2337
+ unit: DateUnit_2;
2107
2338
  } | {
2108
2339
  mode: 'between';
2109
- unit: DateUnit;
2340
+ unit: DateUnit_2;
2110
2341
  from: number;
2111
2342
  to: number;
2112
2343
  };
@@ -2183,7 +2414,9 @@ export declare type ResolvedTokenParams = Omit<TokenParams, 'calendarContext'> &
2183
2414
  calendarContext: CalendarContext;
2184
2415
  };
2185
2416
 
2186
- declare type SelectedEntities = Array<DatabaseEntityReference | DataModelEntityReference | DatasetEntityReference | FileEntityReference>;
2417
+ export declare type SelectedEntities = SelectedEntity[];
2418
+
2419
+ export declare type SelectedEntity = DatabaseEntityReference | DataModelEntityReference | DatasetEntityReference | FileEntityReference;
2187
2420
 
2188
2421
  export declare type SelectionState = Record<Level, string | null>;
2189
2422
 
@@ -2217,11 +2450,13 @@ declare type SemanticExecutionPayload = {
2217
2450
 
2218
2451
  export declare type SensitivityPreset = 'low_noise' | 'standard' | 'early_warning';
2219
2452
 
2220
- declare interface SortByField extends Field {
2453
+ export declare interface SortByField extends Field {
2221
2454
  role: 'sortby';
2222
2455
  direction: 'asc' | 'desc';
2223
2456
  }
2224
2457
 
2458
+ export declare type SortDirection = 'asc' | 'desc';
2459
+
2225
2460
  export declare type SqlGen = {
2226
2461
  measures?: {
2227
2462
  name: string;
@@ -2293,6 +2528,14 @@ export declare type StyleProps = {
2293
2528
  };
2294
2529
  };
2295
2530
 
2531
+ /**
2532
+ * Subtotal configuration for groupBy and pivotBy axes
2533
+ */
2534
+ export declare interface SubtotalConfig {
2535
+ groupBy?: AggregateConfig;
2536
+ pivotBy?: AggregateConfig;
2537
+ }
2538
+
2296
2539
  declare type TableAppearance = {
2297
2540
  density?: AppearanceDensity;
2298
2541
  container?: {
@@ -2406,6 +2649,16 @@ declare type TableStylePreferences = {
2406
2649
 
2407
2650
  declare type TableTotalsFontWeight = 'normal' | 'medium' | 'semibold' | 'bold';
2408
2651
 
2652
+ export declare type TableTotalsRequest = {
2653
+ source: 'documentFlatTable';
2654
+ columns: Array<{
2655
+ fieldId: string;
2656
+ role: 'detail' | 'groupby' | 'metric';
2657
+ behavior: FlatTableTotalsBehavior;
2658
+ label?: string;
2659
+ }>;
2660
+ };
2661
+
2409
2662
  declare type TableTotalsStylePreferences = {
2410
2663
  enabled?: boolean;
2411
2664
  backgroundColor?: string;
@@ -2761,7 +3014,7 @@ export declare type TChartOptions = {
2761
3014
  treemapColorMode?: 'branch' | 'category';
2762
3015
  };
2763
3016
 
2764
- declare type TChartType = 'bar' | 'horizontalBar' | 'line' | 'area' | 'stackedArea' | 'combo' | 'pie' | 'doughnut' | 'radar' | 'polarArea' | 'bubble' | 'scatter' | 'stackedBar' | 'stackedLine' | 'table' | 'pivotTable' | 'aggregateTable' | 'detailTable' | 'tableBuilder' | 'kpi' | 'pyramid' | 'tornado' | 'range' | 'text' | 'map' | 'funnel' | 'bullet' | 'heatmap' | 'treemap' | 'custom';
3017
+ export declare type TChartType = 'bar' | 'horizontalBar' | 'line' | 'area' | 'stackedArea' | 'combo' | 'pie' | 'doughnut' | 'radar' | 'polarArea' | 'bubble' | 'scatter' | 'stackedBar' | 'stackedLine' | 'table' | 'pivotTable' | 'aggregateTable' | 'detailTable' | 'tableBuilder' | 'kpi' | 'pyramid' | 'tornado' | 'range' | 'text' | 'map' | 'funnel' | 'bullet' | 'heatmap' | 'treemap' | 'custom';
2765
3018
 
2766
3019
  export declare type TColumnSetting<T extends DisplayDataType> = {
2767
3020
  columnIdx: number;
@@ -2944,7 +3197,7 @@ export declare type TEvent = {
2944
3197
  message: any;
2945
3198
  };
2946
3199
 
2947
- declare type TFilter = {
3200
+ export declare type TFilter = {
2948
3201
  kind?: FilterKind;
2949
3202
  type?: 'single' | 'multiple';
2950
3203
  uiType?: 'radio' | 'dropdown' | 'tabs';
@@ -2997,7 +3250,7 @@ declare type TFilter = {
2997
3250
  displayMode?: FilterDisplayMode;
2998
3251
  };
2999
3252
 
3000
- declare type TFilterValue = FilterForString | FilterForEqual | FilterForCompare | FilterForBetween | FilterForIn | FilterForNull | FilterForDate;
3253
+ export declare type TFilterValue = FilterForString | FilterForEqual | FilterForCompare | FilterForBetween | FilterForIn | FilterForNull | FilterForDate;
3001
3254
 
3002
3255
  export declare type TFormatOptions = {
3003
3256
  type?: 'auto' | 'number' | 'currency' | 'percent' | 'scientific' | 'date';
@@ -3081,7 +3334,7 @@ declare interface TimeDrillStep {
3081
3334
  rollingWindow?: number;
3082
3335
  }
3083
3336
 
3084
- declare type TimeGranularity = 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second';
3337
+ export declare type TimeGranularity = 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second';
3085
3338
 
3086
3339
  /**
3087
3340
  * Inline filter definition stored on a card.
@@ -3563,9 +3816,9 @@ export declare type VisualDisplayPreferences = {
3563
3816
  */
3564
3817
  export declare type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
3565
3818
 
3566
- declare type WindowFunction = 'running_total' | 'moving_average' | 'previous_period_delta' | 'percent_of_total';
3819
+ export declare type WindowFunction = 'running_total' | 'moving_average' | 'previous_period_delta' | 'percent_of_total';
3567
3820
 
3568
- declare interface WindowTransform {
3821
+ export declare interface WindowTransform {
3569
3822
  function: WindowFunction;
3570
3823
  orderBy?: {
3571
3824
  fieldId: string;