react-semaphor 0.1.449 → 0.1.453

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 (134) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +115 -109
  3. package/dist/appearance/index.cjs +1 -1
  4. package/dist/appearance/index.js +1 -1
  5. package/dist/brand-studio/index.cjs +4 -4
  6. package/dist/brand-studio/index.js +15 -13
  7. package/dist/briefings/index.cjs +1 -1
  8. package/dist/briefings/index.js +39 -2131
  9. package/dist/chunks/{analyze-result-contract-BHb7sUUW.cjs → analyze-result-contract-Dxw66nUG.cjs} +1 -1
  10. package/dist/chunks/{analyze-result-contract-T-0Ntzys.js → analyze-result-contract-GHKFwThg.js} +1 -1
  11. package/dist/chunks/canonical-result-keys-Drc2x-lf.cjs +1 -0
  12. package/dist/chunks/canonical-result-keys-KLk__J_O.js +466 -0
  13. package/dist/chunks/color-CJvdlFM_.js +2162 -0
  14. package/dist/chunks/color-CyB5o13F.cjs +4 -0
  15. package/dist/chunks/{common-types-CQ6SHfLk.cjs → common-types-Ci66eflG.cjs} +1 -1
  16. package/dist/chunks/{common-types-B7Jk3Rtj.js → common-types-F6qk6PPS.js} +1 -1
  17. package/dist/chunks/contracts-CoCOpd_i.js +11 -0
  18. package/dist/chunks/contracts-CtB2VONT.cjs +1 -0
  19. package/dist/chunks/{dashboard-briefing-launcher-DCHiEkLE.js → dashboard-briefing-launcher-CFpX0WX3.js} +86 -84
  20. package/dist/chunks/dashboard-briefing-launcher-mUXWuiOZ.cjs +26 -0
  21. package/dist/chunks/{dashboard-controls-DwRFCcHV.js → dashboard-controls-BeYAmOJc.js} +15 -13
  22. package/dist/chunks/{dashboard-controls-CaFioayc.cjs → dashboard-controls-SoNubIu1.cjs} +1 -1
  23. package/dist/chunks/dashboard-json-BublPnQ4.cjs +1 -0
  24. package/dist/chunks/{dashboard-json-WoILbfTe.js → dashboard-json-DeLUagVV.js} +25 -23
  25. package/dist/chunks/edit-dashboard-visual-CrvPcO7A.cjs +172 -0
  26. package/dist/chunks/{edit-dashboard-visual-ciFhxqaI.js → edit-dashboard-visual-Go0h82DR.js} +6925 -6947
  27. package/dist/chunks/editor-action-buttons-1Lo0fIh7.cjs +16 -0
  28. package/dist/chunks/{editor-action-buttons-BPo_45pM.js → editor-action-buttons-BFNtjFzO.js} +41 -39
  29. package/dist/chunks/format-types-CFHQoIuk.js +1350 -0
  30. package/dist/chunks/format-types-PSZZ7hG8.cjs +1 -0
  31. package/dist/chunks/index-B3ZugihZ.js +3713 -0
  32. package/dist/chunks/{index-CPuawpXJ.js → index-BsH32bn1.js} +47472 -47845
  33. package/dist/chunks/index-ByFbacH7.cjs +1 -0
  34. package/dist/chunks/index-CACdoqu3.js +318 -0
  35. package/dist/chunks/index-DSKR3nKn.js +421 -0
  36. package/dist/chunks/index-DjiIh_9n.cjs +4 -0
  37. package/dist/chunks/index-F25jnH0p.cjs +1 -0
  38. package/dist/chunks/index-q12_nNUS.cjs +1392 -0
  39. package/dist/chunks/{metric-comparison-97zHGEx5.js → metric-comparison-D0T0MKRK.js} +1 -1
  40. package/dist/chunks/{metric-comparison-CUAJ8n4y.cjs → metric-comparison-DYR3RXam.cjs} +1 -1
  41. package/dist/chunks/pivot-header-presentation-DcfPaCiy.cjs +4 -0
  42. package/dist/chunks/pivot-header-presentation-nk604qc1.js +557 -0
  43. package/dist/chunks/{pivot-result-identity-CwJWpKI7.js → pivot-result-identity-C43Ai5Kr.js} +1 -1
  44. package/dist/chunks/{pivot-result-identity-CDLRT-YG.cjs → pivot-result-identity-CRUokNgm.cjs} +1 -1
  45. package/dist/chunks/pivot-result-lifecycle-4kSe0Hk1.js +1642 -0
  46. package/dist/chunks/pivot-result-lifecycle-BiJepH5S.cjs +1 -0
  47. package/dist/chunks/raw-temporal-contract-BF7PjBY9.js +64 -0
  48. package/dist/chunks/raw-temporal-contract-CxbRFwnd.cjs +1 -0
  49. package/dist/chunks/report-preferences-dialog-BEVZAE3m.cjs +1 -0
  50. package/dist/chunks/report-preferences-dialog-BNV7qXYH.js +723 -0
  51. package/dist/chunks/{report-runtime-context-bCy3CVzK.js → report-runtime-context-BJQDu2fV.js} +1 -1
  52. package/dist/chunks/{report-runtime-context-C8LZFsqV.cjs → report-runtime-context-DjYqLV-c.cjs} +1 -1
  53. package/dist/chunks/saved-temporal-bucket-format-DiZdQXOL.js +924 -0
  54. package/dist/chunks/saved-temporal-bucket-format-Gfbh4IiP.cjs +1 -0
  55. package/dist/chunks/switch-CjJ6FHYJ.cjs +138 -0
  56. package/dist/chunks/{switch-BXet-Sno.js → switch-DgLwr7O-.js} +4352 -5249
  57. package/dist/chunks/temporal-bucket-Dnj8qT9l.cjs +1 -0
  58. package/dist/chunks/temporal-bucket-FBZGrDCe.js +560 -0
  59. package/dist/chunks/temporal-bucket-authoring-7hv2laOG.cjs +1 -0
  60. package/dist/chunks/temporal-bucket-authoring-FIRnJz0e.js +221 -0
  61. package/dist/chunks/{temporal-bucket-contract-_F6vNhhH.js → temporal-bucket-contract-BQOj6Frl.js} +1 -1
  62. package/dist/chunks/{temporal-bucket-contract-ChDBWX8I.cjs → temporal-bucket-contract-anl4h-vg.cjs} +1 -1
  63. package/dist/chunks/{token-types-BHR58aTy.js → token-types-CRpQJ4kv.js} +1 -1
  64. package/dist/chunks/{token-types-BdQ8kHBm.cjs → token-types-D0i0IUX3.cjs} +1 -1
  65. package/dist/chunks/{update-policy-BxvYMYz0.cjs → update-policy-C1i9bgsy.cjs} +1 -1
  66. package/dist/chunks/{update-policy-g0rCQ9BM.js → update-policy-CaJz9aPG.js} +1 -1
  67. package/dist/chunks/{validators-Cs74WVie.js → validators-DeMXwRON.js} +253 -233
  68. package/dist/chunks/validators-Dm7Kpz6p.cjs +1 -0
  69. package/dist/dashboard/index.cjs +1 -1
  70. package/dist/dashboard/index.js +2 -2
  71. package/dist/dashboard-authoring/index.cjs +3 -3
  72. package/dist/dashboard-authoring/index.js +32 -29
  73. package/dist/data-app-builder/index.cjs +1 -1
  74. package/dist/data-app-builder/index.js +2 -2
  75. package/dist/data-app-codegen/index.cjs +1 -1
  76. package/dist/data-app-codegen/index.js +2 -2
  77. package/dist/data-app-codegen-node/index.cjs +1 -1
  78. package/dist/data-app-codegen-node/index.js +3 -3
  79. package/dist/data-app-sdk/index.cjs +1 -1
  80. package/dist/data-app-sdk/index.js +3 -3
  81. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  82. package/dist/data-app-sdk-adapters/index.js +2 -2
  83. package/dist/data-app-sdk-validation/index.cjs +1 -1
  84. package/dist/data-app-sdk-validation/index.js +3 -3
  85. package/dist/format-utils/index.cjs +3 -3
  86. package/dist/format-utils/index.js +162 -145
  87. package/dist/index.cjs +1 -1
  88. package/dist/index.js +157 -155
  89. package/dist/report-runtime-context/index.cjs +1 -1
  90. package/dist/report-runtime-context/index.js +2 -2
  91. package/dist/style.css +1 -1
  92. package/dist/surfboard/index.cjs +1 -1
  93. package/dist/surfboard/index.js +3 -3
  94. package/dist/types/analytics-protocol.d.ts +37 -0
  95. package/dist/types/briefings.d.ts +718 -7
  96. package/dist/types/dashboard-assistant.d.ts +18 -0
  97. package/dist/types/dashboard-authoring.d.ts +52 -2
  98. package/dist/types/dashboard.d.ts +128 -0
  99. package/dist/types/data-app-sdk-validation.d.ts +13 -0
  100. package/dist/types/data-app-sdk.d.ts +13 -0
  101. package/dist/types/format-utils.d.ts +190 -3
  102. package/dist/types/index.cjs +1 -1
  103. package/dist/types/index.js +4 -4
  104. package/dist/types/main.d.ts +103 -12
  105. package/dist/types/shared.d.ts +5 -0
  106. package/dist/types/surfboard.d.ts +129 -1
  107. package/dist/types/types.d.ts +98 -6
  108. package/dist/types/value-format-preferences.d.ts +3 -0
  109. package/package.json +2 -1
  110. package/dist/chunks/card-config-utils-15sRtebL.cjs +0 -1
  111. package/dist/chunks/card-config-utils-BYZ5MJOh.js +0 -16
  112. package/dist/chunks/dashboard-briefing-launcher-DDgDr2s3.cjs +0 -26
  113. package/dist/chunks/dashboard-json-CYtvwtvj.cjs +0 -1
  114. package/dist/chunks/edit-dashboard-visual-DwKcvlsF.cjs +0 -177
  115. package/dist/chunks/editor-action-buttons-BVmsk0Aj.cjs +0 -16
  116. package/dist/chunks/format-types-CSv0V7mm.cjs +0 -1
  117. package/dist/chunks/format-types-DZGgYj39.js +0 -1663
  118. package/dist/chunks/index-CJdxSyQq.js +0 -2578
  119. package/dist/chunks/index-DPv8_Ild.cjs +0 -1395
  120. package/dist/chunks/index-DRlMUglg.cjs +0 -4
  121. package/dist/chunks/pivot-result-lifecycle-BBabQ_da.js +0 -914
  122. package/dist/chunks/pivot-result-lifecycle-DPc0ANwk.cjs +0 -4
  123. package/dist/chunks/presentation-execution-BLfPTGX_.js +0 -637
  124. package/dist/chunks/presentation-execution-BTV-Q43g.cjs +0 -1
  125. package/dist/chunks/report-preferences-dialog-D9ZCGh9l.js +0 -691
  126. package/dist/chunks/report-preferences-dialog-DaqTEcac.cjs +0 -1
  127. package/dist/chunks/switch-Cjk6G06r.cjs +0 -138
  128. package/dist/chunks/temporal-bucket-BnPxGrAi.js +0 -446
  129. package/dist/chunks/temporal-bucket-authoring-CPTwHzvs.cjs +0 -1
  130. package/dist/chunks/temporal-bucket-authoring-CgOuakGW.js +0 -205
  131. package/dist/chunks/temporal-bucket-pMnV-4Nj.cjs +0 -1
  132. package/dist/chunks/temporal-result-owner-6peubmhU.js +0 -443
  133. package/dist/chunks/temporal-result-owner-f6-i65Fb.cjs +0 -1
  134. package/dist/chunks/validators-9D4KBqKD.cjs +0 -1
@@ -1,7 +1,23 @@
1
1
  import { ColumnSizingState } from '@tanstack/react-table';
2
+ import { FontSpec } from 'chart.js';
2
3
 
3
4
  declare type AggregateFunction = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'MEDIAN' | 'DISTINCT';
4
5
 
6
+ declare type AIContext = {
7
+ selectedEntities: SelectedEntities;
8
+ fileAttachments?: FileAttachment[];
9
+ };
10
+
11
+ declare type AIScopeTable = {
12
+ connectionId: string;
13
+ connectionType: string;
14
+ databaseName: string;
15
+ schemaName: string;
16
+ tableName: string;
17
+ datamodelId: string;
18
+ datamodelName: string;
19
+ };
20
+
5
21
  declare type AxisConfig = {
6
22
  enabled?: boolean;
7
23
  name?: {
@@ -34,6 +50,24 @@ declare interface BaseColumn {
34
50
  table?: string;
35
51
  }
36
52
 
53
+ declare type BaseCustomCard = {
54
+ cardId: string;
55
+ replaceDefault?: boolean;
56
+ };
57
+
58
+ declare type BaseFilter = {
59
+ filterId: TFilter['id'];
60
+ expression?: string;
61
+ name: string;
62
+ valueType: 'string' | 'number' | 'date' | 'boolean';
63
+ connectionType?: 'database' | 'api';
64
+ dataType?: string;
65
+ fieldMeta?: FilterFieldMeta;
66
+ semanticContext?: FilterSemanticContext;
67
+ /** Governed meaning for canonical grouped-temporal filter values. */
68
+ temporalBucket?: TemporalBucketMetadata;
69
+ };
70
+
37
71
  export declare const BRIEFING_ARTIFACT_FORMATS: readonly ["markdown", "html"];
38
72
 
39
73
  export declare const BRIEFING_CONTENT_LIMITS: {
@@ -315,7 +349,6 @@ export declare type BriefingDraft = {
315
349
  presentation?: Partial<BriefingPresentation>;
316
350
  limits?: BriefingLimits;
317
351
  deliveryConfig?: BriefingDeliveryConfig | null;
318
- resolvedFormats?: ResolvedPresentationEntry[];
319
352
  };
320
353
 
321
354
  export declare type BriefingEntityPresentation = {
@@ -337,8 +370,7 @@ declare type BriefingFragments = {
337
370
 
338
371
  export declare type BriefingJobConfig = {
339
372
  kind: BriefingKind;
340
- reportContext: ReportRuntimeContext;
341
- resolvedFormats?: ResolvedPresentationEntry[];
373
+ presentationExecutionSnapshot: PresentationExecutionSnapshot;
342
374
  source: BriefingSource;
343
375
  body: BriefingBody;
344
376
  attachments: BriefingAttachment[];
@@ -479,14 +511,32 @@ export declare type BriefingWebhookConfig = {
479
511
  secretEncrypted?: string;
480
512
  };
481
513
 
482
- export declare function buildBriefingJobConfig(input: Omit<Partial<BriefingJobConfig>, 'kind' | 'body' | 'reportContext'> & Pick<BriefingJobConfig, 'body' | 'reportContext'>): BriefingJobConfig;
514
+ export declare function buildBriefingJobConfig(input: Omit<Partial<BriefingJobConfig>, 'kind' | 'body' | 'presentationExecutionSnapshot'> & Pick<BriefingJobConfig, 'body' | 'presentationExecutionSnapshot'>): BriefingJobConfig;
483
515
 
484
516
  export declare function buildBriefingScheduleExpr(view: BriefingScheduleViewModel): string;
485
517
 
486
518
  export declare function buildCreateBriefingRequest(draft: BriefingDraft): CreateBriefingRequest;
487
519
 
520
+ /**
521
+ * Captures resolved temporal presentation at a one-time export click or a
522
+ * recurring-rule save. Targets use stable field IDs; result-column keys are
523
+ * resolved later from the executing query's authoritative column map.
524
+ */
525
+ export declare function buildDashboardTemporalSnapshotEntries(input: {
526
+ dashboard: TDashboard;
527
+ selections: readonly DashboardTemporalSnapshotSelection[];
528
+ resolveCardConfig?: (card: TCard) => CardConfig;
529
+ valueFormatPreferences: ResolvedValueFormatPreferences;
530
+ calendar: Pick<CalendarContext, 'tz'>;
531
+ }): ResolvedPresentationEntry[];
532
+
488
533
  export declare function buildUpdateBriefingRequest(draft: BriefingDraft): UpdateBriefingRequest;
489
534
 
535
+ declare type CacheConfig = {
536
+ ttl: string;
537
+ status: 'on' | 'on-refresh' | 'off';
538
+ };
539
+
490
540
  /**
491
541
  * Formula metadata for calculated fields (UI-only metadata)
492
542
  * This is supplementary runtime/compiler data to help dashboard UI display,
@@ -635,6 +685,24 @@ declare interface CardInteractionConfig {
635
685
  drillHierarchies?: DrillHierarchy[];
636
686
  }
637
687
 
688
+ declare type CardWithContent = BaseCustomCard & {
689
+ content: React.FC<{
690
+ card: TCard;
691
+ }>;
692
+ footer?: React.FC<{
693
+ card: TCard;
694
+ }>;
695
+ };
696
+
697
+ declare type CardWithFooter = BaseCustomCard & {
698
+ content?: React.FC<{
699
+ card: TCard;
700
+ }>;
701
+ footer: React.FC<{
702
+ card: TCard;
703
+ }>;
704
+ };
705
+
638
706
  declare interface ClickFilterInteraction {
639
707
  mode: 'clickFilter';
640
708
  /**
@@ -876,6 +944,11 @@ declare type ControlBinding = {
876
944
  mapping: Record<string, string>;
877
945
  } | CurrencyPresentationBinding;
878
946
 
947
+ declare type ControlDashboardInput = DashboardInputBase & {
948
+ kind: 'control';
949
+ control: ControlDefinition;
950
+ };
951
+
879
952
  declare type ControlDefinition = {
880
953
  id: string;
881
954
  label: string;
@@ -939,7 +1012,6 @@ export declare type CreateBriefingRequest = {
939
1012
  presentation: BriefingPresentation;
940
1013
  limits?: BriefingLimits;
941
1014
  deliveryConfig: BriefingDeliveryConfig | null;
942
- resolvedFormats?: ResolvedPresentationEntry[];
943
1015
  };
944
1016
 
945
1017
  declare type CurrencyPresentationBinding = {
@@ -959,8 +1031,87 @@ declare type CurrencyPresentationTarget = {
959
1031
  measureId: string;
960
1032
  };
961
1033
 
1034
+ declare type CustomCard = CardWithContent | CardWithFooter;
1035
+
1036
+ declare type DashboardAIContext = AIContext & {
1037
+ mode?: DashboardAIContextMode;
1038
+ };
1039
+
1040
+ declare type DashboardAIContextMode = 'auto' | 'fixed';
1041
+
1042
+ declare type DashboardInput = FilterDashboardInput | ControlDashboardInput;
1043
+
1044
+ declare type DashboardInputBase = {
1045
+ id: string;
1046
+ label: string;
1047
+ variableName: string;
1048
+ description?: string;
1049
+ requiredAtExecution?: boolean;
1050
+ scope: DashboardInputScope;
1051
+ runtimeScope: DashboardInputRuntimeScope;
1052
+ presentation?: DashboardInputPresentation;
1053
+ exports?: DashboardInputExportKey[];
1054
+ compatibility?: DashboardInputCompatibilityMetadata;
1055
+ };
1056
+
1057
+ declare type DashboardInputCompatibilityMetadata = {
1058
+ source: 'dashboardFilter';
1059
+ filterId: string;
1060
+ } | {
1061
+ source: 'dashboardControl';
1062
+ controlId: string;
1063
+ } | {
1064
+ source: 'cardInlineFilter';
1065
+ cardId: string;
1066
+ filterId: string;
1067
+ } | {
1068
+ source: 'cardControl';
1069
+ cardId: string;
1070
+ controlId: string;
1071
+ } | {
1072
+ source: 'documentInput';
1073
+ sheetId: string;
1074
+ inputId: string;
1075
+ };
1076
+
962
1077
  declare type DashboardInputExportKey = 'label' | 'value' | 'start' | 'end' | 'range';
963
1078
 
1079
+ declare type DashboardInputPresentation = {
1080
+ placement?: 'toolbar' | 'card_header' | 'advanced' | 'hidden';
1081
+ widthPx?: number;
1082
+ order?: number;
1083
+ };
1084
+
1085
+ declare type DashboardInputRuntimeScope = 'shared' | 'perSheet' | 'perCard' | 'perDocumentSection';
1086
+
1087
+ declare type DashboardInputScope = {
1088
+ kind: 'allSheets';
1089
+ sheetKinds?: Array<'dashboard' | 'document'>;
1090
+ } | {
1091
+ kind: 'sheets';
1092
+ sheetIds: string[];
1093
+ } | {
1094
+ kind: 'cards';
1095
+ cardIds: string[];
1096
+ } | {
1097
+ kind: 'documentSections';
1098
+ sheetId: string;
1099
+ sectionIds: string[];
1100
+ };
1101
+
1102
+ declare type DashboardInputSlot = ({
1103
+ status: 'set';
1104
+ value: DashboardInputValue;
1105
+ comparisonSelection?: GlobalDateComparisonSelection;
1106
+ }) | ({
1107
+ status: 'cleared';
1108
+ comparisonSelection?: GlobalDateComparisonSelection;
1109
+ }) | {
1110
+ status?: never;
1111
+ value?: never;
1112
+ comparisonSelection: GlobalDateComparisonSelection;
1113
+ };
1114
+
964
1115
  declare type DashboardInputTextContent = Array<{
965
1116
  type: 'text';
966
1117
  value: string;
@@ -969,6 +1120,21 @@ declare type DashboardInputTextContent = Array<{
969
1120
  ref: DashboardInputVariableRef;
970
1121
  }>;
971
1122
 
1123
+ declare type DashboardInputValue = {
1124
+ kind: 'filter';
1125
+ filterValue: TFilterValue;
1126
+ } | {
1127
+ kind: 'control';
1128
+ value: unknown;
1129
+ };
1130
+
1131
+ declare type DashboardInputValues = {
1132
+ shared?: Record<string, DashboardInputSlot>;
1133
+ bySheetId?: Record<string, Record<string, DashboardInputSlot>>;
1134
+ byCardId?: Record<string, Record<string, DashboardInputSlot>>;
1135
+ byDocumentSectionId?: Record<string, Record<string, DashboardInputSlot>>;
1136
+ };
1137
+
972
1138
  declare type DashboardInputVariableRef = {
973
1139
  source: 'dashboardInput';
974
1140
  inputId: string;
@@ -982,6 +1148,13 @@ declare type DashboardInputVariableRef = {
982
1148
  key: 'generatedAt' | 'pageNumber' | 'pageCount';
983
1149
  };
984
1150
 
1151
+ declare type DashboardTemporalSnapshotSelection = {
1152
+ dashboardId: string;
1153
+ sheetId?: string;
1154
+ cardId?: string;
1155
+ attachmentIndex?: number;
1156
+ };
1157
+
985
1158
  declare interface DatabaseEntityReference {
986
1159
  connectionId: string;
987
1160
  connectionType: ConnectionType;
@@ -1056,6 +1229,11 @@ export declare function describeBriefingSchedule(expression: string, timezone: s
1056
1229
  */
1057
1230
  declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1058
1231
  role: 'detail';
1232
+ /**
1233
+ * Query transport policy for ungrouped temporal values. This marker is
1234
+ * projected into executable config and is never persisted authoring state.
1235
+ */
1236
+ dateValueMode?: 'canonical' | 'formatted';
1059
1237
  dateFormat?: DateFormatValue;
1060
1238
  customFormat?: string;
1061
1239
  /**
@@ -1089,6 +1267,189 @@ declare type Dialect = 'mysql' | 'postgres' | 'bigquery' | 'redshift' | 'snowfla
1089
1267
 
1090
1268
  declare type DisplayDataType = 'string' | 'date' | 'number' | 'html' | 'none';
1091
1269
 
1270
+ declare type DocumentChartSection = {
1271
+ id: string;
1272
+ type: 'chart';
1273
+ title?: string;
1274
+ card: TCard;
1275
+ heightPx: number;
1276
+ };
1277
+
1278
+ declare type DocumentControlInputDefinition = DocumentInputBase & {
1279
+ kind: 'control';
1280
+ control: ControlDefinition;
1281
+ exports?: DocumentInputExportKey[];
1282
+ };
1283
+
1284
+ declare type DocumentDefinition = {
1285
+ version: 1;
1286
+ page: DocumentPageSetup;
1287
+ runtime?: DocumentRuntimeSettings;
1288
+ inputs?: DocumentInputDefinition[];
1289
+ defaultInputValues?: Record<string, unknown>;
1290
+ header?: DocumentHeaderRegion;
1291
+ footer?: DocumentFooterRegion;
1292
+ sections: DocumentSection[];
1293
+ theme?: DocumentTheme;
1294
+ };
1295
+
1296
+ declare type DocumentFilterInputDefinition = DocumentInputBase & {
1297
+ kind: 'filter';
1298
+ filter: TFilter;
1299
+ exports?: DocumentInputExportKey[];
1300
+ };
1301
+
1302
+ declare type DocumentFooterRegion = DocumentRegionBase & {
1303
+ region: 'footer';
1304
+ layout: {
1305
+ type: 'preset';
1306
+ preset: 'mvp_footer';
1307
+ };
1308
+ };
1309
+
1310
+ declare type DocumentHeaderRegion = DocumentRegionBase & {
1311
+ region: 'header';
1312
+ layout: {
1313
+ type: 'preset';
1314
+ preset: 'mvp_header';
1315
+ };
1316
+ };
1317
+
1318
+ declare type DocumentImageRegionBlock = DocumentRegionBlockBase & {
1319
+ type: 'image';
1320
+ role?: 'logo';
1321
+ src: string;
1322
+ alt?: string;
1323
+ widthPx?: number;
1324
+ };
1325
+
1326
+ declare type DocumentInputBase = {
1327
+ id: string;
1328
+ label: string;
1329
+ variableName: string;
1330
+ requiredAtExecution: boolean;
1331
+ documentPlacement?: 'input_bar';
1332
+ description?: string;
1333
+ };
1334
+
1335
+ declare type DocumentInputDefinition = DocumentFilterInputDefinition | DocumentControlInputDefinition;
1336
+
1337
+ declare type DocumentInputExportKey = 'label' | 'value' | 'start' | 'end' | 'range';
1338
+
1339
+ declare type DocumentPageBreakSection = {
1340
+ id: string;
1341
+ type: 'page_break';
1342
+ };
1343
+
1344
+ declare type DocumentPageSetup = {
1345
+ size: 'letter' | 'a4';
1346
+ orientation: 'portrait' | 'landscape';
1347
+ margins: {
1348
+ top: number;
1349
+ right: number;
1350
+ bottom: number;
1351
+ left: number;
1352
+ unit: 'in' | 'mm';
1353
+ };
1354
+ };
1355
+
1356
+ declare type DocumentRegionBase = {
1357
+ enabled: boolean;
1358
+ heightPx?: number;
1359
+ layout: DocumentRegionLayout;
1360
+ blocks: DocumentRegionBlock[];
1361
+ };
1362
+
1363
+ declare type DocumentRegionBlock = DocumentTextRegionBlock | DocumentImageRegionBlock;
1364
+
1365
+ declare type DocumentRegionBlockBase = {
1366
+ id: string;
1367
+ area?: 'left' | 'center' | 'right' | 'title' | 'metadata' | 'note' | 'pageInfo';
1368
+ };
1369
+
1370
+ declare type DocumentRegionLayout = {
1371
+ type: 'preset';
1372
+ preset: 'mvp_header' | 'mvp_footer';
1373
+ };
1374
+
1375
+ declare type DocumentRuntimeSettings = {
1376
+ generatedAtFormat?: string;
1377
+ };
1378
+
1379
+ declare type DocumentSection = DocumentTextSection | DocumentTableSection | DocumentChartSection | DocumentSpacerSection | DocumentPageBreakSection;
1380
+
1381
+ declare type DocumentSpacerSection = {
1382
+ id: string;
1383
+ type: 'spacer';
1384
+ heightPx: number;
1385
+ };
1386
+
1387
+ declare type DocumentTableSection = {
1388
+ id: string;
1389
+ type: 'table';
1390
+ title?: string;
1391
+ card: TCard;
1392
+ table: {
1393
+ totalsRow?: boolean;
1394
+ columnFormatting?: Record<string, unknown>;
1395
+ repeatHeaderOnPageBreak?: boolean;
1396
+ rowHeightPx?: number;
1397
+ };
1398
+ };
1399
+
1400
+ declare type DocumentTextContent = DocumentTextNode[];
1401
+
1402
+ declare type DocumentTextInlineFormat = {
1403
+ bold?: boolean;
1404
+ italic?: boolean;
1405
+ underline?: boolean;
1406
+ };
1407
+
1408
+ declare type DocumentTextNode = {
1409
+ type: 'text';
1410
+ value: string;
1411
+ format?: DocumentTextInlineFormat;
1412
+ } | {
1413
+ type: 'variable';
1414
+ ref: DocumentVariableRef;
1415
+ format?: DocumentTextInlineFormat;
1416
+ };
1417
+
1418
+ declare type DocumentTextRegionBlock = DocumentRegionBlockBase & {
1419
+ type: 'text';
1420
+ role?: 'title' | 'metadata' | 'note' | 'pageInfo';
1421
+ content: DocumentTextContent;
1422
+ style?: DocumentTextStyle;
1423
+ };
1424
+
1425
+ declare type DocumentTextSection = {
1426
+ id: string;
1427
+ type: 'text';
1428
+ content: DocumentTextContent;
1429
+ style?: DocumentTextStyle;
1430
+ };
1431
+
1432
+ declare type DocumentTextStyle = {
1433
+ fontSize?: number;
1434
+ fontWeight?: 'normal' | 'medium' | 'semibold' | 'bold';
1435
+ color?: string;
1436
+ align?: 'left' | 'center' | 'right';
1437
+ };
1438
+
1439
+ declare type DocumentTheme = {
1440
+ fontFamily?: string;
1441
+ primaryColor?: string;
1442
+ };
1443
+
1444
+ declare type DocumentVariableRef = {
1445
+ source: 'input';
1446
+ inputId: string;
1447
+ export: DocumentInputExportKey;
1448
+ } | {
1449
+ source: 'documentMeta';
1450
+ key: 'generatedAt' | 'pageNumber' | 'pageCount';
1451
+ };
1452
+
1092
1453
  declare interface DrillDownInteraction {
1093
1454
  mode: 'drillDown';
1094
1455
  /**
@@ -1228,6 +1589,13 @@ declare interface DynamicDrillInteraction {
1228
1589
  /* Excluded from this release type: drillField */
1229
1590
  }
1230
1591
 
1592
+ declare type EmailSettings = {
1593
+ companyName: string;
1594
+ dashboardUrl: string;
1595
+ supportEmail: string;
1596
+ senderTitle: string;
1597
+ };
1598
+
1231
1599
  declare type EntityType = 'table' | 'view' | 'materialized view' | 'model' | 'file' | 'dataset' | 'url' | 'upload';
1232
1600
 
1233
1601
  declare interface Field {
@@ -1288,6 +1656,17 @@ declare interface Field {
1288
1656
 
1289
1657
  declare type FieldScope = 'card' | 'sheet' | 'dashboard' | 'domain';
1290
1658
 
1659
+ declare type FileAttachment = {
1660
+ id: string;
1661
+ name: string;
1662
+ size: number;
1663
+ type: string;
1664
+ data?: string;
1665
+ url?: string;
1666
+ preview?: string;
1667
+ uploadProgress?: number;
1668
+ };
1669
+
1291
1670
  declare interface FileEntityReference extends DatabaseEntityReference {
1292
1671
  id: string;
1293
1672
  type: 'file' | 'url' | 'upload';
@@ -1320,6 +1699,19 @@ declare interface FilterCondition {
1320
1699
  temporalBucket?: TemporalBucketMetadata;
1321
1700
  }
1322
1701
 
1702
+ declare type FilterDashboardInput = DashboardInputBase & {
1703
+ kind: 'filter';
1704
+ filter: TFilter;
1705
+ };
1706
+
1707
+ /**
1708
+ * Display mode for individual filters
1709
+ * - 'canvas': Filter displayed as a draggable card on the dashboard canvas
1710
+ * - 'toolbar': Filter displayed in the compact toolbar
1711
+ * - 'inherit': Use the dashboard's filterLayout.displayMode setting (default)
1712
+ */
1713
+ declare type FilterDisplayMode = 'canvas' | 'toolbar' | 'inherit';
1714
+
1323
1715
  declare type FilterFieldMeta = Pick<Field, 'name' | 'qualifiedFieldName'> & Partial<Pick<Field, 'id' | 'qualifiedEntityName' | 'entityId' | 'dataType' | 'role' | 'fieldScope'>> & {
1324
1716
  entityName?: Field['entityName'];
1325
1717
  entityType?: string;
@@ -1327,6 +1719,43 @@ declare type FilterFieldMeta = Pick<Field, 'name' | 'qualifiedFieldName'> & Part
1327
1719
  calculatedFormula?: CalculatedFieldFormula;
1328
1720
  };
1329
1721
 
1722
+ declare type FilterForBetween = BaseFilter & {
1723
+ operation: 'between' | 'not between';
1724
+ values: [number, number];
1725
+ };
1726
+
1727
+ declare type FilterForCompare = BaseFilter & {
1728
+ operation: '>' | '<' | '>=' | '<=';
1729
+ values: [number];
1730
+ };
1731
+
1732
+ declare type FilterForDate = BaseFilter & {
1733
+ operation: 'between' | 'not between' | '=' | '!=' | '>' | '<' | '>=' | '<=';
1734
+ values: [Date | string, Date | string] | [Date | string];
1735
+ relativeMeta?: RelativeDateFilter;
1736
+ temporalPrecision?: TemporalPrecision;
1737
+ };
1738
+
1739
+ declare type FilterForEqual = BaseFilter & {
1740
+ operation: '=' | '!=';
1741
+ values: [string | number];
1742
+ };
1743
+
1744
+ declare type FilterForIn = BaseFilter & {
1745
+ operation: 'in' | 'not in';
1746
+ values: (string | number)[];
1747
+ };
1748
+
1749
+ declare type FilterForNull = BaseFilter & {
1750
+ operation: 'is null' | 'is not null';
1751
+ values: [];
1752
+ };
1753
+
1754
+ declare type FilterForString = BaseFilter & {
1755
+ operation: 'like' | 'not like';
1756
+ values: [string];
1757
+ };
1758
+
1330
1759
  declare interface FilterGroup {
1331
1760
  id: string;
1332
1761
  logicalOperator: LogicalOperator;
@@ -1335,6 +1764,38 @@ declare interface FilterGroup {
1335
1764
  groups: FilterGroup[];
1336
1765
  }
1337
1766
 
1767
+ declare type FilterKind = 'field' | 'global-date';
1768
+
1769
+ /**
1770
+ * Filter layout settings for controlling how dashboard filters are displayed
1771
+ */
1772
+ declare type FilterLayoutSettings = {
1773
+ /**
1774
+ * Display mode for filters
1775
+ * - 'canvas': Filters displayed as draggable/resizable cards on the dashboard canvas (default)
1776
+ * - 'toolbar': Filters displayed in a compact horizontal toolbar below dashboard controls
1777
+ */
1778
+ displayMode?: 'canvas' | 'toolbar';
1779
+ /**
1780
+ * Whether the toolbar should wrap filters to multiple lines
1781
+ * - false: Horizontal scroll when filters overflow (default)
1782
+ * - true: Wrap to multiple lines
1783
+ */
1784
+ toolbarWrap?: boolean;
1785
+ /**
1786
+ * Whether to show a download button in the filter toolbar
1787
+ * Useful when embedding Dashboard component without Surfboard's controls
1788
+ */
1789
+ showDownloadButton?: boolean;
1790
+ /**
1791
+ * Mixed toolbar item order for dashboard-level filter and control chips.
1792
+ * Values use prefixed ids like `filter:<id>` and `control:<id>`.
1793
+ */
1794
+ toolbarItemOrder?: string[];
1795
+ };
1796
+
1797
+ declare type FilterLocation = 'dashboard' | 'frame' | 'sheet' | undefined;
1798
+
1338
1799
  declare type FilterOnClick = {
1339
1800
  expression?: string;
1340
1801
  columnIndex: number;
@@ -1438,6 +1899,13 @@ export declare function getDefaultBriefingCardAttachmentFormat(input: {
1438
1899
  allowDownload?: boolean;
1439
1900
  }): BriefingAttachmentFormat;
1440
1901
 
1902
+ declare type GlobalDateComparisonSelection = {
1903
+ mode: 'off';
1904
+ } | {
1905
+ mode: 'period';
1906
+ spec: ViewerPeriodComparisonSpec;
1907
+ };
1908
+
1441
1909
  declare type Granularity = SemaphorTimeGrain;
1442
1910
 
1443
1911
  declare interface GroupByColumn extends BaseColumn {
@@ -1804,6 +2272,12 @@ declare interface PivotByField extends Field {
1804
2272
  */
1805
2273
  declare type PivotMemberOrder = 'auto' | 'asc' | 'desc';
1806
2274
 
2275
+ declare type PresentationExecutionSnapshot = {
2276
+ version: 1;
2277
+ reportContext: ReportRuntimeContext;
2278
+ resolvedFormats: ResolvedPresentationEntry[];
2279
+ };
2280
+
1807
2281
  declare type PresentationScope = {
1808
2282
  dashboardId: string;
1809
2283
  cardId?: string;
@@ -1832,6 +2306,13 @@ declare type RangeValue = {
1832
2306
  gt?: string | number;
1833
2307
  };
1834
2308
 
2309
+ declare type RawTemporalPatternDialect = 'semaphor_tokens' | 'date_fns';
2310
+
2311
+ declare type RawTemporalPresentationTarget = {
2312
+ kind: 'column';
2313
+ columnKey: string;
2314
+ };
2315
+
1835
2316
  declare type RelativeDateFilter = {
1836
2317
  mode: 'last';
1837
2318
  n: number;
@@ -1882,10 +2363,47 @@ declare type ResolvedNumericPresentationEntry = {
1882
2363
  format: NumericCanonicalFormat;
1883
2364
  };
1884
2365
 
1885
- declare type ResolvedPresentationEntry = ResolvedNumericPresentationEntry | ResolvedTemporalBucketPresentationEntry;
2366
+ declare type ResolvedPresentationEntry = ResolvedNumericPresentationEntry | ResolvedTemporalBucketPresentationEntry | ResolvedRawTemporalPresentationEntry;
2367
+
2368
+ declare type ResolvedRawTemporalFormat = {
2369
+ type: 'raw_temporal';
2370
+ locale: string;
2371
+ calendarTimezone: string;
2372
+ /** Resolved source timezone for timezone-less wall datetimes, when authored. */
2373
+ sourceTimezone?: string;
2374
+ presentation: {
2375
+ mode: 'auto';
2376
+ styles: ResolvedTemporalStyleSet;
2377
+ } | {
2378
+ mode: 'pattern';
2379
+ dialect: RawTemporalPatternDialect;
2380
+ pattern: string;
2381
+ };
2382
+ };
2383
+
2384
+ declare type ResolvedRawTemporalPresentationEntry = {
2385
+ scope: PresentationScope;
2386
+ target: RawTemporalPresentationTarget;
2387
+ format: ResolvedRawTemporalFormat;
2388
+ };
1886
2389
 
1887
- declare type ResolvedTemporalBucketFormat = TemporalBucketFormat & {
2390
+ declare type ResolvedTemporalBucketFormat = {
2391
+ type: 'temporal_bucket';
2392
+ locale: string;
2393
+ presentation: {
2394
+ mode: 'auto';
2395
+ styles: ResolvedTemporalStyleSet;
2396
+ };
2397
+ } | {
2398
+ type: 'temporal_bucket';
1888
2399
  locale: string;
2400
+ presentation: {
2401
+ mode: 'preset';
2402
+ preset: TemporalBucketPreset;
2403
+ } | {
2404
+ mode: 'pattern';
2405
+ pattern: string;
2406
+ };
1889
2407
  };
1890
2408
 
1891
2409
  declare type ResolvedTemporalBucketPresentationEntry = {
@@ -1894,6 +2412,14 @@ declare type ResolvedTemporalBucketPresentationEntry = {
1894
2412
  format: ResolvedTemporalBucketFormat;
1895
2413
  };
1896
2414
 
2415
+ declare type ResolvedTemporalStyleSet = {
2416
+ dateStyle: LocaleStyle;
2417
+ dateTime: {
2418
+ dateStyle: LocaleStyle;
2419
+ timeStyle: LocaleStyle;
2420
+ };
2421
+ };
2422
+
1897
2423
  declare type ResolvedValueFormatPreferences = {
1898
2424
  locale: string;
1899
2425
  dateStyle: LocaleStyle;
@@ -2257,6 +2783,47 @@ declare type StructuralFieldSelectorTarget = GroupByField;
2257
2783
 
2258
2784
  declare type StructuralMetricSelectorTarget = MetricField;
2259
2785
 
2786
+ /**
2787
+ * Style propeerites for the dashboard
2788
+ */
2789
+ declare type StyleProps = {
2790
+ /** Theme for dashboard background */
2791
+ canvasTheme?: 'clear' | 'muted' | string;
2792
+ /** css class for `dashboard-panel` */
2793
+ dashboardPanel?: string;
2794
+ /** css class for `dashboard-tabs-container` */
2795
+ dashboardTabsContainer?: string;
2796
+ /** css class for `dashboard-card` */
2797
+ /** css class for `dashboard-card-container` */
2798
+ dashboardCardContainer?: string;
2799
+ dashboardCard?: string;
2800
+ /** grid-layout config */
2801
+ /**
2802
+ * Border radius for the control inputs such as filter input, tabs, date picker, etc.
2803
+ */
2804
+ controlInputRadius?: number;
2805
+ /**
2806
+ * Border radius for the cards
2807
+ */
2808
+ cardBorderRadius?: number;
2809
+ gridLayout?: {
2810
+ /** css class for `react-grid-layout` */
2811
+ className?: string;
2812
+ margin?: [number, number];
2813
+ };
2814
+ /** chart config */
2815
+ chart?: {
2816
+ /** chart font config */
2817
+ font?: Partial<FontSpec>;
2818
+ dataset?: any;
2819
+ /** chart options */
2820
+ options?: any;
2821
+ };
2822
+ table?: {
2823
+ tableHeaderColor?: string;
2824
+ };
2825
+ };
2826
+
2260
2827
  declare type SubDayDateUnit = 'minute' | 'hour';
2261
2828
 
2262
2829
  declare type TableBaseFormatting = {
@@ -2335,6 +2902,22 @@ declare type TableTotalsStylePreferences = {
2335
2902
  borderTopColor?: string;
2336
2903
  };
2337
2904
 
2905
+ /**
2906
+ * Target column configuration for multi-field filters.
2907
+ * Allows a single filter to target multiple columns from the SAME table,
2908
+ * with users selecting which column to filter at runtime.
2909
+ *
2910
+ * Note: Cross-table filtering is not supported. All target columns must
2911
+ * be from the same table as the filter's primary table. For cross-table
2912
+ * date filtering, create separate filters or use a shared date dimension.
2913
+ */
2914
+ declare type TargetColumn = {
2915
+ /** Column name (e.g., "shipping_date") - must be from the filter's table */
2916
+ column: string;
2917
+ /** Display label shown in the dropdown (e.g., "Shipping Date") */
2918
+ label: string;
2919
+ };
2920
+
2338
2921
  /** Global bar style configuration */
2339
2922
  declare type TBarStyleConfig = {
2340
2923
  /** Default border radius for all bars - 0-20 pixels */
@@ -2347,6 +2930,15 @@ declare type TBarStyleConfig = {
2347
2930
  categoryPercentage?: number;
2348
2931
  };
2349
2932
 
2933
+ declare type TBaseQuery = {
2934
+ id: string;
2935
+ name: string;
2936
+ connectionId: string;
2937
+ sql: string;
2938
+ context?: string;
2939
+ description?: string;
2940
+ };
2941
+
2350
2942
  declare type TBubbleScatterConfig = {
2351
2943
  /**
2352
2944
  * Explicit key for X-axis metric. Falls back to auto-detection.
@@ -2677,6 +3269,34 @@ declare type TCustomFilterPreferences = {
2677
3269
  settings?: Record<string, string | number | boolean>;
2678
3270
  };
2679
3271
 
3272
+ declare type TDashboard = {
3273
+ id: string;
3274
+ title?: string;
3275
+ aiContext?: DashboardAIContext;
3276
+ summary?: {
3277
+ enabled?: boolean;
3278
+ position?: 'top' | 'bottom';
3279
+ maxItems?: number;
3280
+ };
3281
+ description?: string;
3282
+ sheets?: TSheet[];
3283
+ calculatedFields?: Field[];
3284
+ style?: TStyle;
3285
+ filters?: TFilter[];
3286
+ customCards?: CustomCard[];
3287
+ baseQueries?: TBaseQuery[];
3288
+ aiScopeTables?: AIScopeTable[];
3289
+ globalStyle?: TStyle;
3290
+ globalCacheConfig?: CacheConfig;
3291
+ emailSettings?: EmailSettings;
3292
+ defaultFilterValues?: TFilterValue[];
3293
+ controls?: ControlDefinition[];
3294
+ defaultControlValues?: Record<string, unknown>;
3295
+ inputs?: DashboardInput[];
3296
+ defaultInputValues?: DashboardInputValues;
3297
+ filterLayout?: FilterLayoutSettings;
3298
+ };
3299
+
2680
3300
  declare type TDataLabelsConfig = {
2681
3301
  enabled?: boolean;
2682
3302
  position?: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'auto' | 'custom';
@@ -2805,6 +3425,8 @@ declare type TemporalBucketPresentationTarget = {
2805
3425
 
2806
3426
  declare type TemporalBucketPreset = (typeof TEMPORAL_BUCKET_PRESETS)[number];
2807
3427
 
3428
+ declare type TemporalPrecision = 'minute';
3429
+
2808
3430
  declare type TextCardInlineFormat = {
2809
3431
  bold?: boolean;
2810
3432
  italic?: boolean;
@@ -2850,6 +3472,61 @@ declare type TextCardRichInline = {
2850
3472
  }>;
2851
3473
  };
2852
3474
 
3475
+ declare type TFilter = {
3476
+ kind?: FilterKind;
3477
+ type?: 'single' | 'multiple';
3478
+ uiType?: 'radio' | 'dropdown' | 'tabs';
3479
+ dateSelectionMode?: DateSelectionMode;
3480
+ defaultValues?: (string | number)[];
3481
+ defaultDateFilter?: DefaultDateFilter;
3482
+ sheetId?: string;
3483
+ location?: FilterLocation;
3484
+ hide?: boolean;
3485
+ id: string;
3486
+ /** Alias exposed to document/text variables, for example {{region}}. */
3487
+ variableName?: string;
3488
+ connectionId: string;
3489
+ title: string;
3490
+ column: string;
3491
+ dataType: string;
3492
+ table?: string;
3493
+ database?: string;
3494
+ qualifiedTableName?: string;
3495
+ sql: string;
3496
+ operation: Operation;
3497
+ fieldMeta?: FilterFieldMeta;
3498
+ semanticContext?: FilterSemanticContext;
3499
+ /**
3500
+ * Multi-field filter support: When set, provides multiple column options.
3501
+ * The first column becomes the default. Users can select which column
3502
+ * to filter at runtime via a dropdown in the date picker.
3503
+ * If not set, the single `column` field is used (backward compatible).
3504
+ */
3505
+ targetColumns?: TargetColumn[];
3506
+ searchMode?: 'text' | 'numeric' | 'auto';
3507
+ applyToSheetIds?: string[];
3508
+ excludeSheetIds?: string[];
3509
+ applyToCardIds?: string[];
3510
+ excludeCardIds?: string[];
3511
+ customFilterPreferences?: TCustomFilterPreferences;
3512
+ /** Whether to show the label above the filter (default: true) */
3513
+ showLabel?: boolean;
3514
+ /**
3515
+ * Width in pixels when displayed in toolbar mode.
3516
+ * Defaults vary by filter type (160px for dropdowns, 220px for date ranges, etc.)
3517
+ */
3518
+ toolbarWidth?: number;
3519
+ /**
3520
+ * Display mode for this filter
3521
+ * - 'canvas': Always show as draggable card on canvas
3522
+ * - 'toolbar': Always show in toolbar
3523
+ * - 'inherit': Use dashboard's filterLayout.displayMode setting (default)
3524
+ */
3525
+ displayMode?: FilterDisplayMode;
3526
+ };
3527
+
3528
+ declare type TFilterValue = FilterForString | FilterForEqual | FilterForCompare | FilterForBetween | FilterForIn | FilterForNull | FilterForDate;
3529
+
2853
3530
  declare type TFormatOptions = {
2854
3531
  type?: 'auto' | 'number' | 'currency' | 'percent' | 'scientific' | 'date' | 'duration';
2855
3532
  decimalPlaces?: number;
@@ -2875,6 +3552,15 @@ declare type TFormatOptions = {
2875
3552
  durationMaxUnits?: number;
2876
3553
  };
2877
3554
 
3555
+ declare type TFrame = {
3556
+ id: string;
3557
+ visualId?: string;
3558
+ filterId?: string;
3559
+ cards: TCard[];
3560
+ activeCardId: string;
3561
+ calculatedFields?: Field[];
3562
+ };
3563
+
2878
3564
  declare type TFunnelConfig = {
2879
3565
  /**
2880
3566
  * How to calculate percentage in tooltips and data labels.
@@ -2987,6 +3673,27 @@ declare type TotalsBehavior = 'sum' | 'avg' | 'count' | 'label' | 'none';
2987
3673
  /** Point style options supported by Chart.js */
2988
3674
  declare type TPointStyle = 'circle' | 'cross' | 'crossRot' | 'dash' | 'line' | 'rect' | 'rectRounded' | 'rectRot' | 'star' | 'triangle';
2989
3675
 
3676
+ declare type TSheet = {
3677
+ id: string;
3678
+ kind?: 'dashboard' | 'document';
3679
+ title?: string;
3680
+ description?: string;
3681
+ layout?: ReactGridLayout.Layout[];
3682
+ layouts?: ReactGridLayout.Layouts;
3683
+ cards?: TCard[];
3684
+ frames?: TFrame[];
3685
+ calculatedFields?: Field[];
3686
+ document?: DocumentDefinition;
3687
+ };
3688
+
3689
+ /**
3690
+ * Style for the dashboard
3691
+ */
3692
+ declare type TStyle = {
3693
+ default: StyleProps;
3694
+ dark?: StyleProps;
3695
+ };
3696
+
2990
3697
  declare type TTooltipFormatConfig = {
2991
3698
  formatMode?: 'inherit' | 'override';
2992
3699
  /** @deprecated Use formatMode */
@@ -3031,6 +3738,10 @@ export declare function validateBriefingDraft(draft: unknown): BriefingValidatio
3031
3738
 
3032
3739
  export declare function validateBriefingJobConfig(input: unknown): BriefingValidationResult<BriefingJobConfig>;
3033
3740
 
3741
+ declare type ViewerPeriodComparisonSpec = Extract<MetricComparisonSpec, {
3742
+ kind: 'previous_period' | 'previous_year';
3743
+ }>;
3744
+
3034
3745
  /**
3035
3746
  * Display mode for visual components - controls which UI elements are shown
3036
3747
  */