react-semaphor 0.1.449 → 0.1.454

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 (147) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +119 -112
  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-T-0Ntzys.js → analyze-result-contract-BbRJ-C06.js} +1 -1
  10. package/dist/chunks/{analyze-result-contract-BHb7sUUW.cjs → analyze-result-contract-LPDNldic.cjs} +1 -1
  11. package/dist/chunks/canonical-result-keys-BA0HCP4e.cjs +1 -0
  12. package/dist/chunks/canonical-result-keys-D6avdjpA.js +467 -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-C57kJ59w.cjs} +1 -1
  16. package/dist/chunks/{common-types-B7Jk3Rtj.js → common-types-H51FLKB7.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-Dwj1i7lr.cjs +26 -0
  20. package/dist/chunks/{dashboard-briefing-launcher-DCHiEkLE.js → dashboard-briefing-launcher-SYroFdae.js} +86 -84
  21. package/dist/chunks/{dashboard-controls-DwRFCcHV.js → dashboard-controls-1LpeU2sz.js} +15 -13
  22. package/dist/chunks/{dashboard-controls-CaFioayc.cjs → dashboard-controls-CpFoh7-A.cjs} +1 -1
  23. package/dist/chunks/dashboard-date-comparison-definition-Ces4alFm.cjs +1 -0
  24. package/dist/chunks/{dashboard-date-comparison-definition-Ba-clViK.js → dashboard-date-comparison-definition-DC3ekV2S.js} +1 -1
  25. package/dist/chunks/{dashboard-json-WoILbfTe.js → dashboard-json-D-T-sQxU.js} +25 -23
  26. package/dist/chunks/dashboard-json-DwSQopc_.cjs +1 -0
  27. package/dist/chunks/edit-dashboard-visual-BEmoQAET.cjs +172 -0
  28. package/dist/chunks/{edit-dashboard-visual-ciFhxqaI.js → edit-dashboard-visual-DqxUq4Bs.js} +6925 -6947
  29. package/dist/chunks/editor-action-buttons-18r2xwei.cjs +16 -0
  30. package/dist/chunks/{editor-action-buttons-BPo_45pM.js → editor-action-buttons-B2l3WIRC.js} +41 -39
  31. package/dist/chunks/format-types-CFHQoIuk.js +1350 -0
  32. package/dist/chunks/format-types-PSZZ7hG8.cjs +1 -0
  33. package/dist/chunks/index-Bn5wlkHt.cjs +4 -0
  34. package/dist/chunks/index-ByFbacH7.cjs +1 -0
  35. package/dist/chunks/index-CACdoqu3.js +318 -0
  36. package/dist/chunks/index-CLB_NGZ8.cjs +1392 -0
  37. package/dist/chunks/index-Ca784dpx.js +3714 -0
  38. package/dist/chunks/{index-CPuawpXJ.js → index-DAoS4BNU.js} +48514 -48484
  39. package/dist/chunks/index-DSKR3nKn.js +421 -0
  40. package/dist/chunks/index-F25jnH0p.cjs +1 -0
  41. package/dist/chunks/matrix-result-contract-CofATICL.js +437 -0
  42. package/dist/chunks/matrix-result-contract-zamd9euI.cjs +1 -0
  43. package/dist/chunks/pivot-header-presentation-DhyQXxKq.cjs +4 -0
  44. package/dist/chunks/pivot-header-presentation-ckYOQ4aZ.js +557 -0
  45. package/dist/chunks/{pivot-result-identity-CDLRT-YG.cjs → pivot-result-identity-Bb4EixVN.cjs} +1 -1
  46. package/dist/chunks/{pivot-result-identity-CwJWpKI7.js → pivot-result-identity-DU1v-5Xk.js} +1 -1
  47. package/dist/chunks/pivot-result-lifecycle-DmcF1ris.cjs +1 -0
  48. package/dist/chunks/pivot-result-lifecycle-sjzIOpvp.js +1641 -0
  49. package/dist/chunks/raw-temporal-contract-BtjH_G-d.cjs +1 -0
  50. package/dist/chunks/raw-temporal-contract-CxncLze5.js +64 -0
  51. package/dist/chunks/report-preferences-dialog-BgSvlDXa.cjs +1 -0
  52. package/dist/chunks/report-preferences-dialog-DDc2WUa0.js +723 -0
  53. package/dist/chunks/{report-runtime-context-C8LZFsqV.cjs → report-runtime-context-DqxS4wbi.cjs} +1 -1
  54. package/dist/chunks/{report-runtime-context-bCy3CVzK.js → report-runtime-context-SM6YO61_.js} +5 -5
  55. package/dist/chunks/saved-temporal-bucket-format-CFfWXRl9.cjs +1 -0
  56. package/dist/chunks/saved-temporal-bucket-format-SGAV0ivR.js +922 -0
  57. package/dist/chunks/{switch-BXet-Sno.js → switch-BeZW-HnS.js} +4350 -5249
  58. package/dist/chunks/switch-D-CCcfhc.cjs +138 -0
  59. package/dist/chunks/temporal-bucket-5UYEotyQ.js +810 -0
  60. package/dist/chunks/temporal-bucket-DHY1y9lq.cjs +1 -0
  61. package/dist/chunks/temporal-bucket-authoring-K1kE6R_z.js +222 -0
  62. package/dist/chunks/temporal-bucket-authoring-o3Emn05L.cjs +1 -0
  63. package/dist/chunks/{temporal-bucket-contract-ChDBWX8I.cjs → temporal-bucket-contract-D2-93DGr.cjs} +1 -1
  64. package/dist/chunks/{temporal-bucket-contract-_F6vNhhH.js → temporal-bucket-contract-D5d-xEl3.js} +1 -1
  65. package/dist/chunks/{token-types-BdQ8kHBm.cjs → token-types-D7CaaI80.cjs} +1 -1
  66. package/dist/chunks/{token-types-BHR58aTy.js → token-types-GbxRUozo.js} +1 -1
  67. package/dist/chunks/{update-policy-BxvYMYz0.cjs → update-policy-BmiOd0PB.cjs} +1 -1
  68. package/dist/chunks/{update-policy-g0rCQ9BM.js → update-policy-hednMF-0.js} +1 -1
  69. package/dist/chunks/validators-BDYprKI9.cjs +1 -0
  70. package/dist/chunks/{validators-Cs74WVie.js → validators-DEmd8Sin.js} +1561 -1197
  71. package/dist/dashboard/index.cjs +1 -1
  72. package/dist/dashboard/index.js +2 -2
  73. package/dist/dashboard-authoring/index.cjs +3 -3
  74. package/dist/dashboard-authoring/index.js +35 -32
  75. package/dist/data-app-builder/index.cjs +1 -1
  76. package/dist/data-app-builder/index.js +2 -2
  77. package/dist/data-app-codegen/index.cjs +1 -1
  78. package/dist/data-app-codegen/index.js +2 -2
  79. package/dist/data-app-codegen-node/index.cjs +1 -1
  80. package/dist/data-app-codegen-node/index.js +3 -3
  81. package/dist/data-app-sdk/index.cjs +1 -1
  82. package/dist/data-app-sdk/index.js +78 -77
  83. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  84. package/dist/data-app-sdk-adapters/index.js +29 -30
  85. package/dist/data-app-sdk-validation/index.cjs +1 -1
  86. package/dist/data-app-sdk-validation/index.js +21 -21
  87. package/dist/format-utils/index.cjs +3 -3
  88. package/dist/format-utils/index.js +156 -140
  89. package/dist/index.cjs +1 -1
  90. package/dist/index.js +157 -155
  91. package/dist/report-runtime-context/index.cjs +1 -1
  92. package/dist/report-runtime-context/index.js +2 -2
  93. package/dist/style.css +1 -1
  94. package/dist/surfboard/index.cjs +1 -1
  95. package/dist/surfboard/index.js +3 -3
  96. package/dist/types/analytics-protocol.d.ts +81 -11
  97. package/dist/types/briefings.d.ts +727 -19
  98. package/dist/types/dashboard-assistant.d.ts +37 -17
  99. package/dist/types/dashboard-authoring.d.ts +61 -14
  100. package/dist/types/dashboard.d.ts +137 -12
  101. package/dist/types/data-app-builder.d.ts +28 -2
  102. package/dist/types/data-app-codegen-node.d.ts +29 -3
  103. package/dist/types/data-app-codegen.d.ts +29 -3
  104. package/dist/types/data-app-sdk-adapters.d.ts +28 -2
  105. package/dist/types/data-app-sdk-validation.d.ts +51 -7
  106. package/dist/types/data-app-sdk.d.ts +55 -10
  107. package/dist/types/format-utils.d.ts +190 -3
  108. package/dist/types/index.cjs +1 -1
  109. package/dist/types/index.js +4 -4
  110. package/dist/types/main.d.ts +128 -33
  111. package/dist/types/shared.d.ts +14 -12
  112. package/dist/types/surfboard.d.ts +138 -13
  113. package/dist/types/types.d.ts +117 -23
  114. package/dist/types/value-format-preferences.d.ts +3 -0
  115. package/package.json +2 -1
  116. package/dist/chunks/card-config-utils-15sRtebL.cjs +0 -1
  117. package/dist/chunks/card-config-utils-BYZ5MJOh.js +0 -16
  118. package/dist/chunks/catalog-field-grounding-Bnx-3tE0.cjs +0 -1
  119. package/dist/chunks/catalog-field-grounding-S2jKwKGD.js +0 -100
  120. package/dist/chunks/dashboard-briefing-launcher-DDgDr2s3.cjs +0 -26
  121. package/dist/chunks/dashboard-date-comparison-definition-DZq0htjG.cjs +0 -1
  122. package/dist/chunks/dashboard-input-contract-DSt8dGzP.js +0 -18
  123. package/dist/chunks/dashboard-input-contract-DV3cshjz.cjs +0 -1
  124. package/dist/chunks/dashboard-json-CYtvwtvj.cjs +0 -1
  125. package/dist/chunks/edit-dashboard-visual-DwKcvlsF.cjs +0 -177
  126. package/dist/chunks/editor-action-buttons-BVmsk0Aj.cjs +0 -16
  127. package/dist/chunks/format-types-CSv0V7mm.cjs +0 -1
  128. package/dist/chunks/format-types-DZGgYj39.js +0 -1663
  129. package/dist/chunks/index-CJdxSyQq.js +0 -2578
  130. package/dist/chunks/index-DPv8_Ild.cjs +0 -1395
  131. package/dist/chunks/index-DRlMUglg.cjs +0 -4
  132. package/dist/chunks/metric-comparison-97zHGEx5.js +0 -387
  133. package/dist/chunks/metric-comparison-CUAJ8n4y.cjs +0 -1
  134. package/dist/chunks/pivot-result-lifecycle-BBabQ_da.js +0 -914
  135. package/dist/chunks/pivot-result-lifecycle-DPc0ANwk.cjs +0 -4
  136. package/dist/chunks/presentation-execution-BLfPTGX_.js +0 -637
  137. package/dist/chunks/presentation-execution-BTV-Q43g.cjs +0 -1
  138. package/dist/chunks/report-preferences-dialog-D9ZCGh9l.js +0 -691
  139. package/dist/chunks/report-preferences-dialog-DaqTEcac.cjs +0 -1
  140. package/dist/chunks/switch-Cjk6G06r.cjs +0 -138
  141. package/dist/chunks/temporal-bucket-BnPxGrAi.js +0 -446
  142. package/dist/chunks/temporal-bucket-authoring-CPTwHzvs.cjs +0 -1
  143. package/dist/chunks/temporal-bucket-authoring-CgOuakGW.js +0 -205
  144. package/dist/chunks/temporal-bucket-pMnV-4Nj.cjs +0 -1
  145. package/dist/chunks/temporal-result-owner-6peubmhU.js +0 -443
  146. package/dist/chunks/temporal-result-owner-f6-i65Fb.cjs +0 -1
  147. 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 {
@@ -1449,11 +1917,6 @@ declare interface GroupByColumn extends BaseColumn {
1449
1917
  declare interface GroupByField extends Field {
1450
1918
  role: 'groupby';
1451
1919
  granularity?: TimeGranularity;
1452
- /**
1453
- * Query transport policy for grouped temporal values. This is projected
1454
- * into executable card config and is not persisted authoring state.
1455
- */
1456
- dateValueMode?: 'canonical' | 'formatted';
1457
1920
  /**
1458
1921
  * Optional SQL expression for grouping (e.g., DATE_TRUNC('month', order_date)).
1459
1922
  * If present, used in SELECT and GROUP BY instead of just the column name.
@@ -1788,11 +2251,6 @@ declare interface PivotByField extends Field {
1788
2251
  * so existing cards need no migration.
1789
2252
  */
1790
2253
  memberOrder?: PivotMemberOrder;
1791
- /**
1792
- * Query transport policy for grouped temporal pivot members. This is
1793
- * projected into executable config and is never persisted authoring state.
1794
- */
1795
- dateValueMode?: 'canonical' | 'formatted';
1796
2254
  }
1797
2255
 
1798
2256
  /**
@@ -1804,6 +2262,12 @@ declare interface PivotByField extends Field {
1804
2262
  */
1805
2263
  declare type PivotMemberOrder = 'auto' | 'asc' | 'desc';
1806
2264
 
2265
+ declare type PresentationExecutionSnapshot = {
2266
+ version: 1;
2267
+ reportContext: ReportRuntimeContext;
2268
+ resolvedFormats: ResolvedPresentationEntry[];
2269
+ };
2270
+
1807
2271
  declare type PresentationScope = {
1808
2272
  dashboardId: string;
1809
2273
  cardId?: string;
@@ -1832,6 +2296,13 @@ declare type RangeValue = {
1832
2296
  gt?: string | number;
1833
2297
  };
1834
2298
 
2299
+ declare type RawTemporalPatternDialect = 'semaphor_tokens' | 'date_fns';
2300
+
2301
+ declare type RawTemporalPresentationTarget = {
2302
+ kind: 'column';
2303
+ columnKey: string;
2304
+ };
2305
+
1835
2306
  declare type RelativeDateFilter = {
1836
2307
  mode: 'last';
1837
2308
  n: number;
@@ -1882,10 +2353,47 @@ declare type ResolvedNumericPresentationEntry = {
1882
2353
  format: NumericCanonicalFormat;
1883
2354
  };
1884
2355
 
1885
- declare type ResolvedPresentationEntry = ResolvedNumericPresentationEntry | ResolvedTemporalBucketPresentationEntry;
2356
+ declare type ResolvedPresentationEntry = ResolvedNumericPresentationEntry | ResolvedTemporalBucketPresentationEntry | ResolvedRawTemporalPresentationEntry;
1886
2357
 
1887
- declare type ResolvedTemporalBucketFormat = TemporalBucketFormat & {
2358
+ declare type ResolvedRawTemporalFormat = {
2359
+ type: 'raw_temporal';
1888
2360
  locale: string;
2361
+ calendarTimezone: string;
2362
+ /** Resolved source timezone for timezone-less wall datetimes, when authored. */
2363
+ sourceTimezone?: string;
2364
+ presentation: {
2365
+ mode: 'auto';
2366
+ styles: ResolvedTemporalStyleSet;
2367
+ } | {
2368
+ mode: 'pattern';
2369
+ dialect: RawTemporalPatternDialect;
2370
+ pattern: string;
2371
+ };
2372
+ };
2373
+
2374
+ declare type ResolvedRawTemporalPresentationEntry = {
2375
+ scope: PresentationScope;
2376
+ target: RawTemporalPresentationTarget;
2377
+ format: ResolvedRawTemporalFormat;
2378
+ };
2379
+
2380
+ declare type ResolvedTemporalBucketFormat = {
2381
+ type: 'temporal_bucket';
2382
+ locale: string;
2383
+ presentation: {
2384
+ mode: 'auto';
2385
+ styles: ResolvedTemporalStyleSet;
2386
+ };
2387
+ } | {
2388
+ type: 'temporal_bucket';
2389
+ locale: string;
2390
+ presentation: {
2391
+ mode: 'preset';
2392
+ preset: TemporalBucketPreset;
2393
+ } | {
2394
+ mode: 'pattern';
2395
+ pattern: string;
2396
+ };
1889
2397
  };
1890
2398
 
1891
2399
  declare type ResolvedTemporalBucketPresentationEntry = {
@@ -1894,6 +2402,14 @@ declare type ResolvedTemporalBucketPresentationEntry = {
1894
2402
  format: ResolvedTemporalBucketFormat;
1895
2403
  };
1896
2404
 
2405
+ declare type ResolvedTemporalStyleSet = {
2406
+ dateStyle: LocaleStyle;
2407
+ dateTime: {
2408
+ dateStyle: LocaleStyle;
2409
+ timeStyle: LocaleStyle;
2410
+ };
2411
+ };
2412
+
1897
2413
  declare type ResolvedValueFormatPreferences = {
1898
2414
  locale: string;
1899
2415
  dateStyle: LocaleStyle;
@@ -2032,6 +2548,8 @@ declare type SemaphorMatrixAxisLevel = {
2032
2548
  id?: string;
2033
2549
  field: SemaphorFieldRef;
2034
2550
  grain?: SemaphorMatrixTimeGrain;
2551
+ format?: TemporalBucketFormat;
2552
+ semanticTemporalPresentation?: SemaphorMatrixSemanticTemporalPresentation;
2035
2553
  label?: string;
2036
2554
  subtotal?: boolean | SemaphorMatrixSubtotalOptions;
2037
2555
  sortBy?: SemaphorMatrixAxisSortRule;
@@ -2040,7 +2558,7 @@ declare type SemaphorMatrixAxisLevel = {
2040
2558
  declare type SemaphorMatrixAxisSortRule = {
2041
2559
  direction: 'asc' | 'desc';
2042
2560
  by: {
2043
- kind: 'label';
2561
+ kind: 'member';
2044
2562
  } | {
2045
2563
  kind: 'field';
2046
2564
  field: SemaphorFieldRef;
@@ -2095,12 +2613,17 @@ declare type SemaphorMatrixMemberPathSegment = {
2095
2613
  value: unknown;
2096
2614
  };
2097
2615
 
2616
+ declare type SemaphorMatrixSemanticTemporalPresentation = {
2617
+ granularity: SemaphorMatrixTimeGrain;
2618
+ format: TemporalBucketFormat;
2619
+ };
2620
+
2098
2621
  declare type SemaphorMatrixSortRule = {
2099
2622
  axis: 'row' | 'column';
2100
2623
  targetId?: string;
2101
2624
  direction: 'asc' | 'desc';
2102
2625
  by: {
2103
- kind: 'label';
2626
+ kind: 'member';
2104
2627
  } | {
2105
2628
  kind: 'field';
2106
2629
  field: SemaphorFieldRef;
@@ -2257,6 +2780,47 @@ declare type StructuralFieldSelectorTarget = GroupByField;
2257
2780
 
2258
2781
  declare type StructuralMetricSelectorTarget = MetricField;
2259
2782
 
2783
+ /**
2784
+ * Style propeerites for the dashboard
2785
+ */
2786
+ declare type StyleProps = {
2787
+ /** Theme for dashboard background */
2788
+ canvasTheme?: 'clear' | 'muted' | string;
2789
+ /** css class for `dashboard-panel` */
2790
+ dashboardPanel?: string;
2791
+ /** css class for `dashboard-tabs-container` */
2792
+ dashboardTabsContainer?: string;
2793
+ /** css class for `dashboard-card` */
2794
+ /** css class for `dashboard-card-container` */
2795
+ dashboardCardContainer?: string;
2796
+ dashboardCard?: string;
2797
+ /** grid-layout config */
2798
+ /**
2799
+ * Border radius for the control inputs such as filter input, tabs, date picker, etc.
2800
+ */
2801
+ controlInputRadius?: number;
2802
+ /**
2803
+ * Border radius for the cards
2804
+ */
2805
+ cardBorderRadius?: number;
2806
+ gridLayout?: {
2807
+ /** css class for `react-grid-layout` */
2808
+ className?: string;
2809
+ margin?: [number, number];
2810
+ };
2811
+ /** chart config */
2812
+ chart?: {
2813
+ /** chart font config */
2814
+ font?: Partial<FontSpec>;
2815
+ dataset?: any;
2816
+ /** chart options */
2817
+ options?: any;
2818
+ };
2819
+ table?: {
2820
+ tableHeaderColor?: string;
2821
+ };
2822
+ };
2823
+
2260
2824
  declare type SubDayDateUnit = 'minute' | 'hour';
2261
2825
 
2262
2826
  declare type TableBaseFormatting = {
@@ -2335,6 +2899,22 @@ declare type TableTotalsStylePreferences = {
2335
2899
  borderTopColor?: string;
2336
2900
  };
2337
2901
 
2902
+ /**
2903
+ * Target column configuration for multi-field filters.
2904
+ * Allows a single filter to target multiple columns from the SAME table,
2905
+ * with users selecting which column to filter at runtime.
2906
+ *
2907
+ * Note: Cross-table filtering is not supported. All target columns must
2908
+ * be from the same table as the filter's primary table. For cross-table
2909
+ * date filtering, create separate filters or use a shared date dimension.
2910
+ */
2911
+ declare type TargetColumn = {
2912
+ /** Column name (e.g., "shipping_date") - must be from the filter's table */
2913
+ column: string;
2914
+ /** Display label shown in the dropdown (e.g., "Shipping Date") */
2915
+ label: string;
2916
+ };
2917
+
2338
2918
  /** Global bar style configuration */
2339
2919
  declare type TBarStyleConfig = {
2340
2920
  /** Default border radius for all bars - 0-20 pixels */
@@ -2347,6 +2927,15 @@ declare type TBarStyleConfig = {
2347
2927
  categoryPercentage?: number;
2348
2928
  };
2349
2929
 
2930
+ declare type TBaseQuery = {
2931
+ id: string;
2932
+ name: string;
2933
+ connectionId: string;
2934
+ sql: string;
2935
+ context?: string;
2936
+ description?: string;
2937
+ };
2938
+
2350
2939
  declare type TBubbleScatterConfig = {
2351
2940
  /**
2352
2941
  * Explicit key for X-axis metric. Falls back to auto-detection.
@@ -2677,6 +3266,34 @@ declare type TCustomFilterPreferences = {
2677
3266
  settings?: Record<string, string | number | boolean>;
2678
3267
  };
2679
3268
 
3269
+ declare type TDashboard = {
3270
+ id: string;
3271
+ title?: string;
3272
+ aiContext?: DashboardAIContext;
3273
+ summary?: {
3274
+ enabled?: boolean;
3275
+ position?: 'top' | 'bottom';
3276
+ maxItems?: number;
3277
+ };
3278
+ description?: string;
3279
+ sheets?: TSheet[];
3280
+ calculatedFields?: Field[];
3281
+ style?: TStyle;
3282
+ filters?: TFilter[];
3283
+ customCards?: CustomCard[];
3284
+ baseQueries?: TBaseQuery[];
3285
+ aiScopeTables?: AIScopeTable[];
3286
+ globalStyle?: TStyle;
3287
+ globalCacheConfig?: CacheConfig;
3288
+ emailSettings?: EmailSettings;
3289
+ defaultFilterValues?: TFilterValue[];
3290
+ controls?: ControlDefinition[];
3291
+ defaultControlValues?: Record<string, unknown>;
3292
+ inputs?: DashboardInput[];
3293
+ defaultInputValues?: DashboardInputValues;
3294
+ filterLayout?: FilterLayoutSettings;
3295
+ };
3296
+
2680
3297
  declare type TDataLabelsConfig = {
2681
3298
  enabled?: boolean;
2682
3299
  position?: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'auto' | 'custom';
@@ -2805,6 +3422,8 @@ declare type TemporalBucketPresentationTarget = {
2805
3422
 
2806
3423
  declare type TemporalBucketPreset = (typeof TEMPORAL_BUCKET_PRESETS)[number];
2807
3424
 
3425
+ declare type TemporalPrecision = 'minute';
3426
+
2808
3427
  declare type TextCardInlineFormat = {
2809
3428
  bold?: boolean;
2810
3429
  italic?: boolean;
@@ -2850,6 +3469,61 @@ declare type TextCardRichInline = {
2850
3469
  }>;
2851
3470
  };
2852
3471
 
3472
+ declare type TFilter = {
3473
+ kind?: FilterKind;
3474
+ type?: 'single' | 'multiple';
3475
+ uiType?: 'radio' | 'dropdown' | 'tabs';
3476
+ dateSelectionMode?: DateSelectionMode;
3477
+ defaultValues?: (string | number)[];
3478
+ defaultDateFilter?: DefaultDateFilter;
3479
+ sheetId?: string;
3480
+ location?: FilterLocation;
3481
+ hide?: boolean;
3482
+ id: string;
3483
+ /** Alias exposed to document/text variables, for example {{region}}. */
3484
+ variableName?: string;
3485
+ connectionId: string;
3486
+ title: string;
3487
+ column: string;
3488
+ dataType: string;
3489
+ table?: string;
3490
+ database?: string;
3491
+ qualifiedTableName?: string;
3492
+ sql: string;
3493
+ operation: Operation;
3494
+ fieldMeta?: FilterFieldMeta;
3495
+ semanticContext?: FilterSemanticContext;
3496
+ /**
3497
+ * Multi-field filter support: When set, provides multiple column options.
3498
+ * The first column becomes the default. Users can select which column
3499
+ * to filter at runtime via a dropdown in the date picker.
3500
+ * If not set, the single `column` field is used (backward compatible).
3501
+ */
3502
+ targetColumns?: TargetColumn[];
3503
+ searchMode?: 'text' | 'numeric' | 'auto';
3504
+ applyToSheetIds?: string[];
3505
+ excludeSheetIds?: string[];
3506
+ applyToCardIds?: string[];
3507
+ excludeCardIds?: string[];
3508
+ customFilterPreferences?: TCustomFilterPreferences;
3509
+ /** Whether to show the label above the filter (default: true) */
3510
+ showLabel?: boolean;
3511
+ /**
3512
+ * Width in pixels when displayed in toolbar mode.
3513
+ * Defaults vary by filter type (160px for dropdowns, 220px for date ranges, etc.)
3514
+ */
3515
+ toolbarWidth?: number;
3516
+ /**
3517
+ * Display mode for this filter
3518
+ * - 'canvas': Always show as draggable card on canvas
3519
+ * - 'toolbar': Always show in toolbar
3520
+ * - 'inherit': Use dashboard's filterLayout.displayMode setting (default)
3521
+ */
3522
+ displayMode?: FilterDisplayMode;
3523
+ };
3524
+
3525
+ declare type TFilterValue = FilterForString | FilterForEqual | FilterForCompare | FilterForBetween | FilterForIn | FilterForNull | FilterForDate;
3526
+
2853
3527
  declare type TFormatOptions = {
2854
3528
  type?: 'auto' | 'number' | 'currency' | 'percent' | 'scientific' | 'date' | 'duration';
2855
3529
  decimalPlaces?: number;
@@ -2875,6 +3549,15 @@ declare type TFormatOptions = {
2875
3549
  durationMaxUnits?: number;
2876
3550
  };
2877
3551
 
3552
+ declare type TFrame = {
3553
+ id: string;
3554
+ visualId?: string;
3555
+ filterId?: string;
3556
+ cards: TCard[];
3557
+ activeCardId: string;
3558
+ calculatedFields?: Field[];
3559
+ };
3560
+
2878
3561
  declare type TFunnelConfig = {
2879
3562
  /**
2880
3563
  * How to calculate percentage in tooltips and data labels.
@@ -2987,6 +3670,27 @@ declare type TotalsBehavior = 'sum' | 'avg' | 'count' | 'label' | 'none';
2987
3670
  /** Point style options supported by Chart.js */
2988
3671
  declare type TPointStyle = 'circle' | 'cross' | 'crossRot' | 'dash' | 'line' | 'rect' | 'rectRounded' | 'rectRot' | 'star' | 'triangle';
2989
3672
 
3673
+ declare type TSheet = {
3674
+ id: string;
3675
+ kind?: 'dashboard' | 'document';
3676
+ title?: string;
3677
+ description?: string;
3678
+ layout?: ReactGridLayout.Layout[];
3679
+ layouts?: ReactGridLayout.Layouts;
3680
+ cards?: TCard[];
3681
+ frames?: TFrame[];
3682
+ calculatedFields?: Field[];
3683
+ document?: DocumentDefinition;
3684
+ };
3685
+
3686
+ /**
3687
+ * Style for the dashboard
3688
+ */
3689
+ declare type TStyle = {
3690
+ default: StyleProps;
3691
+ dark?: StyleProps;
3692
+ };
3693
+
2990
3694
  declare type TTooltipFormatConfig = {
2991
3695
  formatMode?: 'inherit' | 'override';
2992
3696
  /** @deprecated Use formatMode */
@@ -3031,6 +3735,10 @@ export declare function validateBriefingDraft(draft: unknown): BriefingValidatio
3031
3735
 
3032
3736
  export declare function validateBriefingJobConfig(input: unknown): BriefingValidationResult<BriefingJobConfig>;
3033
3737
 
3738
+ declare type ViewerPeriodComparisonSpec = Extract<MetricComparisonSpec, {
3739
+ kind: 'previous_period' | 'previous_year';
3740
+ }>;
3741
+
3034
3742
  /**
3035
3743
  * Display mode for visual components - controls which UI elements are shown
3036
3744
  */