react-semaphor 0.1.459 → 0.1.460

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 (114) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +32 -32
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +4 -4
  5. package/dist/briefings/index.cjs +1 -1
  6. package/dist/briefings/index.js +4 -4
  7. package/dist/chunks/{analyze-result-contract-BbRJ-C06.js → analyze-result-contract-DROq4vgY.js} +1 -1
  8. package/dist/chunks/{analyze-result-contract-LPDNldic.cjs → analyze-result-contract-DSGoFuXQ.cjs} +1 -1
  9. package/dist/chunks/canonical-result-keys-CEQefvdO.js +33 -0
  10. package/dist/chunks/canonical-result-keys-Cb96edol.cjs +1 -0
  11. package/dist/chunks/{common-types-H51FLKB7.js → common-types-BHVKgxRR.js} +1 -1
  12. package/dist/chunks/{common-types-C57kJ59w.cjs → common-types-BcV9PD9D.cjs} +1 -1
  13. package/dist/chunks/{dashboard-briefing-launcher-ClCj98sq.js → dashboard-briefing-launcher-B07JnyCb.js} +60 -61
  14. package/dist/chunks/{dashboard-briefing-launcher-DHtEouuH.cjs → dashboard-briefing-launcher-BCkOKkCv.cjs} +2 -2
  15. package/dist/chunks/{dashboard-controls-VRShl9J0.cjs → dashboard-controls-BpxouYOZ.cjs} +1 -1
  16. package/dist/chunks/{dashboard-controls-B8gsKlxc.js → dashboard-controls-C8OxHQV6.js} +44 -45
  17. package/dist/chunks/dashboard-filter-value-compatibility-KXIyvbhc.js +677 -0
  18. package/dist/chunks/dashboard-filter-value-compatibility-UapptYnn.cjs +1 -0
  19. package/dist/chunks/dashboard-input-contract-BkRFQ7Tq.cjs +1 -0
  20. package/dist/chunks/{dashboard-date-comparison-definition-DC3ekV2S.js → dashboard-input-contract-D5dxTWJ5.js} +41 -25
  21. package/dist/chunks/dashboard-json-Bc-iIwxF.cjs +1 -0
  22. package/dist/chunks/{dashboard-json-i_Auue_K.js → dashboard-json-CecgbGtq.js} +13 -14
  23. package/dist/chunks/{edit-dashboard-visual-B3JF0fe4.js → edit-dashboard-visual-CpJKJaER.js} +880 -894
  24. package/dist/chunks/{edit-dashboard-visual-DWWyT55u.cjs → edit-dashboard-visual-xacUS2i5.cjs} +28 -28
  25. package/dist/chunks/{editor-action-buttons-BTlCsP63.cjs → editor-action-buttons-23Wf8EMx.cjs} +2 -2
  26. package/dist/chunks/{editor-action-buttons-C9x3nGnb.js → editor-action-buttons-DEoieV2G.js} +28 -28
  27. package/dist/chunks/index-B9c22LmC.cjs +1392 -0
  28. package/dist/chunks/{index-BS2-ZZGf.js → index-DDoyXYWM.js} +43665 -41560
  29. package/dist/chunks/{index-BIFLI8ul.js → index-De_7nrwb.js} +10 -10
  30. package/dist/chunks/index-DjjKJPDy.cjs +4 -0
  31. package/dist/chunks/{matrix-result-contract-CofATICL.js → matrix-result-contract-BTpPuHOc.js} +88 -104
  32. package/dist/chunks/matrix-result-contract-ZRNfeIbI.cjs +1 -0
  33. package/dist/chunks/{pivot-header-presentation-B9nXXKlW.cjs → pivot-header-presentation-BijPbP33.cjs} +1 -1
  34. package/dist/chunks/{pivot-header-presentation-D-0jvUwn.js → pivot-header-presentation-DW0gKG8g.js} +2 -2
  35. package/dist/chunks/{pivot-result-identity-Bb4EixVN.cjs → pivot-result-identity-DxHtiKVj.cjs} +1 -1
  36. package/dist/chunks/{pivot-result-identity-DU1v-5Xk.js → pivot-result-identity-Z9tN2tEV.js} +1 -1
  37. package/dist/chunks/{pivot-result-lifecycle-DTLRuDEW.cjs → pivot-result-lifecycle-BXzIlQVu.cjs} +1 -1
  38. package/dist/chunks/{pivot-result-lifecycle-CHWEGU2o.js → pivot-result-lifecycle-g2U-vzQb.js} +7 -7
  39. package/dist/chunks/{raw-temporal-contract-BtjH_G-d.cjs → raw-temporal-contract-DfAvqNMo.cjs} +1 -1
  40. package/dist/chunks/{raw-temporal-contract-CxncLze5.js → raw-temporal-contract-UtAqoOZO.js} +1 -1
  41. package/dist/chunks/{report-preferences-dialog-BDpkcUtz.js → report-preferences-dialog-CZiNX1Ri.js} +6 -6
  42. package/dist/chunks/{report-preferences-dialog-BK0yAJnQ.cjs → report-preferences-dialog-D_N6NXnq.cjs} +1 -1
  43. package/dist/chunks/{report-runtime-context-DqxS4wbi.cjs → report-runtime-context-C0NfLPfc.cjs} +1 -1
  44. package/dist/chunks/{report-runtime-context-SM6YO61_.js → report-runtime-context-CNncA3VD.js} +11 -11
  45. package/dist/chunks/{saved-temporal-bucket-format-CFfWXRl9.cjs → saved-temporal-bucket-format-3QKveR3v.cjs} +1 -1
  46. package/dist/chunks/{saved-temporal-bucket-format-SGAV0ivR.js → saved-temporal-bucket-format-Dd2eixTH.js} +11 -11
  47. package/dist/chunks/switch-DNFbgZz4.cjs +138 -0
  48. package/dist/chunks/{switch-DQR-Va05.js → switch-DSZobe8w.js} +6542 -5189
  49. package/dist/chunks/{temporal-bucket-5UYEotyQ.js → temporal-bucket-C85rmFmC.js} +4 -4
  50. package/dist/chunks/temporal-bucket-authoring-1fZuPAVb.js +653 -0
  51. package/dist/chunks/temporal-bucket-authoring-BK1UhYpD.cjs +1 -0
  52. package/dist/chunks/{temporal-bucket-contract-D5d-xEl3.js → temporal-bucket-contract-DXXNZssK.js} +1 -1
  53. package/dist/chunks/{temporal-bucket-contract-D2-93DGr.cjs → temporal-bucket-contract-xFkvboaw.cjs} +1 -1
  54. package/dist/chunks/{temporal-bucket-DHY1y9lq.cjs → temporal-bucket-pMfghsLX.cjs} +1 -1
  55. package/dist/chunks/{token-types-GbxRUozo.js → token-types-BLxc7UwR.js} +1 -1
  56. package/dist/chunks/{token-types-D7CaaI80.cjs → token-types-BYYO109W.cjs} +1 -1
  57. package/dist/chunks/{update-policy-hednMF-0.js → update-policy-CB8XJIoY.js} +1 -1
  58. package/dist/chunks/{update-policy-BmiOd0PB.cjs → update-policy-DMjjGjQY.cjs} +1 -1
  59. package/dist/chunks/{validators-DEmd8Sin.js → validators-DVd8s3qY.js} +416 -350
  60. package/dist/chunks/validators-dJlwubP4.cjs +1 -0
  61. package/dist/dashboard/index.cjs +1 -1
  62. package/dist/dashboard/index.js +2 -2
  63. package/dist/dashboard-authoring/index.cjs +3 -3
  64. package/dist/dashboard-authoring/index.js +328 -311
  65. package/dist/data-app-builder/index.cjs +1 -1
  66. package/dist/data-app-builder/index.js +2 -2
  67. package/dist/data-app-codegen/index.cjs +1 -1
  68. package/dist/data-app-codegen/index.js +2 -2
  69. package/dist/data-app-codegen-node/index.cjs +1 -1
  70. package/dist/data-app-codegen-node/index.js +3 -3
  71. package/dist/data-app-sdk/index.cjs +1 -1
  72. package/dist/data-app-sdk/index.js +55 -55
  73. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  74. package/dist/data-app-sdk-adapters/index.js +61 -56
  75. package/dist/data-app-sdk-validation/index.cjs +1 -1
  76. package/dist/data-app-sdk-validation/index.js +9 -9
  77. package/dist/format-utils/index.cjs +1 -1
  78. package/dist/format-utils/index.js +15 -15
  79. package/dist/index.cjs +1 -1
  80. package/dist/index.js +154 -155
  81. package/dist/report-runtime-context/index.cjs +1 -1
  82. package/dist/report-runtime-context/index.js +2 -2
  83. package/dist/style.css +1 -1
  84. package/dist/surfboard/index.cjs +1 -1
  85. package/dist/surfboard/index.js +3 -3
  86. package/dist/types/analytics-protocol.d.ts +16 -8
  87. package/dist/types/briefings.d.ts +80 -9
  88. package/dist/types/dashboard-assistant.d.ts +11 -6
  89. package/dist/types/dashboard-authoring.d.ts +242 -15
  90. package/dist/types/dashboard.d.ts +94 -10
  91. package/dist/types/data-app-builder.d.ts +11 -6
  92. package/dist/types/data-app-codegen-node.d.ts +16 -8
  93. package/dist/types/data-app-codegen.d.ts +16 -8
  94. package/dist/types/data-app-sdk-adapters.d.ts +17 -11
  95. package/dist/types/data-app-sdk-validation.d.ts +17 -11
  96. package/dist/types/data-app-sdk.d.ts +17 -11
  97. package/dist/types/index.cjs +1 -1
  98. package/dist/types/index.js +4 -4
  99. package/dist/types/main.d.ts +210 -16
  100. package/dist/types/shared.d.ts +80 -9
  101. package/dist/types/surfboard.d.ts +94 -10
  102. package/dist/types/types.d.ts +94 -10
  103. package/package.json +1 -1
  104. package/dist/chunks/canonical-result-keys-BA0HCP4e.cjs +0 -1
  105. package/dist/chunks/canonical-result-keys-D6avdjpA.js +0 -467
  106. package/dist/chunks/dashboard-date-comparison-definition-Ces4alFm.cjs +0 -1
  107. package/dist/chunks/dashboard-json-BhvPMpZA.cjs +0 -1
  108. package/dist/chunks/index-DHF-2AqS.cjs +0 -1392
  109. package/dist/chunks/index-k8tEp0ys.cjs +0 -4
  110. package/dist/chunks/matrix-result-contract-zamd9euI.cjs +0 -1
  111. package/dist/chunks/switch-f3TuZNLr.cjs +0 -138
  112. package/dist/chunks/temporal-bucket-authoring-K1kE6R_z.js +0 -222
  113. package/dist/chunks/temporal-bucket-authoring-o3Emn05L.cjs +0 -1
  114. package/dist/chunks/validators-BDYprKI9.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-DHF-2AqS.cjs"),r=require("../chunks/common-types-C57kJ59w.cjs"),o=require("../chunks/report-preferences-dialog-BK0yAJnQ.cjs");exports.DisplayFormatPreferencesFields=e.DisplayFormatPreferencesFields;exports.Surfboard=e.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=r.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=r.EMPTY_SELECTION;exports.ReportPreferencesDialog=o.ReportPreferencesDialog;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/index-B9c22LmC.cjs"),r=require("../chunks/common-types-BcV9PD9D.cjs"),o=require("../chunks/report-preferences-dialog-D_N6NXnq.cjs");exports.DisplayFormatPreferencesFields=e.DisplayFormatPreferencesFields;exports.Surfboard=e.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=r.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=r.EMPTY_SELECTION;exports.ReportPreferencesDialog=o.ReportPreferencesDialog;
@@ -1,6 +1,6 @@
1
- import { b as a, a as o } from "../chunks/index-BS2-ZZGf.js";
2
- import { C as f, E } from "../chunks/common-types-H51FLKB7.js";
3
- import { R as t } from "../chunks/report-preferences-dialog-BDpkcUtz.js";
1
+ import { b as a, a as o } from "../chunks/index-DDoyXYWM.js";
2
+ import { C as f, E } from "../chunks/common-types-BHVKgxRR.js";
3
+ import { R as t } from "../chunks/report-preferences-dialog-CZiNX1Ri.js";
4
4
  export {
5
5
  f as CONTROL_CARD_DEFAULT_VALUE,
6
6
  a as DisplayFormatPreferencesFields,
@@ -2637,7 +2637,9 @@ export declare type SemaphorDataAppCodegenInputBinding = {
2637
2637
  export declare type SemaphorDataAppCodegenInputOptionQuery = {
2638
2638
  id?: string;
2639
2639
  builder: 'semaphor.inputOptions';
2640
- source?: SemaphorSourceRef;
2640
+ source?: Extract<SemaphorSourceRef, {
2641
+ kind: 'semantic' | 'physical';
2642
+ }>;
2641
2643
  sourceKey?: string;
2642
2644
  valueFieldRef: SemaphorDataAppCodegenFieldRef;
2643
2645
  labelFieldRef: SemaphorDataAppCodegenFieldRef;
@@ -2648,7 +2650,8 @@ export declare type SemaphorDataAppCodegenInputOptionQuery = {
2648
2650
  spec?: SemaphorDataAppCodegenInputOptionsIntent;
2649
2651
  };
2650
2652
 
2651
- export declare type SemaphorDataAppCodegenInputOptionsIntent = Omit<SemaphorInputOptionsIntent, 'kind' | 'labelField' | 'valueField' | 'searchField' | 'disambiguationFields'> & {
2653
+ export declare type SemaphorDataAppCodegenInputOptionsIntent = Omit<SemaphorInputOptionsIntent, 'kind' | 'source' | 'labelField' | 'valueField' | 'searchField' | 'disambiguationFields'> & {
2654
+ source: SemaphorDataAppCodegenSource;
2652
2655
  labelField: SemaphorDataAppCodegenFieldRef;
2653
2656
  valueField: SemaphorDataAppCodegenFieldRef;
2654
2657
  searchField?: SemaphorDataAppCodegenFieldRef;
@@ -3113,17 +3116,12 @@ export declare type SemaphorInputBinding = {
3113
3116
 
3114
3117
  export declare type SemaphorInputOperator = '=' | '!=' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'between' | 'not_between' | '>' | '>=' | '<' | '<=';
3115
3118
 
3116
- export declare type SemaphorInputOptionsIntent = {
3119
+ export declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
3117
3120
  kind: 'inputOptions';
3118
3121
  version?: SemaphorProtocolVersion;
3119
3122
  id?: string;
3120
3123
  label?: string;
3121
3124
  inputId: string;
3122
- source: SemaphorSourceRef;
3123
- labelField: SemaphorFieldRef;
3124
- valueField: SemaphorFieldRef;
3125
- searchField?: SemaphorFieldRef;
3126
- disambiguationFields?: SemaphorFieldRef[];
3127
3125
  population?: SemaphorOptionPopulation;
3128
3126
  dependencies?: SemaphorOptionDependencies;
3129
3127
  search?: string;
@@ -3132,6 +3130,16 @@ export declare type SemaphorInputOptionsIntent = {
3132
3130
  derivedFields?: SemaphorDerivedFieldDefinition[];
3133
3131
  };
3134
3132
 
3133
+ export declare type SemaphorInputOptionSource = {
3134
+ source: Extract<SemaphorSourceRef, {
3135
+ kind: 'semantic' | 'physical';
3136
+ }>;
3137
+ labelField: SemaphorFieldRef;
3138
+ valueField: SemaphorFieldRef;
3139
+ searchField?: SemaphorFieldRef;
3140
+ disambiguationFields?: SemaphorFieldRef[];
3141
+ };
3142
+
3135
3143
  export declare type SemaphorInputOptionsResult = SemaphorAnalyticsResultBase & {
3136
3144
  kind: 'inputOptions';
3137
3145
  options: Array<{
@@ -1039,6 +1039,51 @@ declare type DashboardAIContext = AIContext & {
1039
1039
 
1040
1040
  declare type DashboardAIContextMode = 'auto' | 'fixed';
1041
1041
 
1042
+ declare type DashboardFilterApplication = {
1043
+ kind: 'cardMappings';
1044
+ /**
1045
+ * Sparse grounded bindings and explicit exclusions. A missing config card
1046
+ * may reuse a proven Option Value target on an executable source; it is not
1047
+ * an implicit exclusion, and source identity alone is not field evidence.
1048
+ */
1049
+ cards: DashboardFilterCardApplication[];
1050
+ };
1051
+
1052
+ declare type DashboardFilterBoundCardApplication = {
1053
+ kind: 'bound';
1054
+ cardId: string;
1055
+ bindingId: string;
1056
+ target: DashboardFilterTarget;
1057
+ };
1058
+
1059
+ declare type DashboardFilterCardApplication = DashboardFilterBoundCardApplication | DashboardFilterExcludedCardApplication;
1060
+
1061
+ declare type DashboardFilterExcludedCardApplication = {
1062
+ kind: 'excluded';
1063
+ cardId: string;
1064
+ };
1065
+
1066
+ /** Persisted label/value option definition for a mapped dashboard filter. */
1067
+ declare type DashboardFilterOptionSource = SemaphorInputOptionSource;
1068
+
1069
+ declare type DashboardFilterTarget = {
1070
+ kind: 'field';
1071
+ field: DashboardFilterTargetField;
1072
+ };
1073
+
1074
+ /** Persisted, source-qualified field that a mapped filter targets. */
1075
+ declare type DashboardFilterTargetField = {
1076
+ name: string;
1077
+ source: DashboardFilterTargetSource;
1078
+ dataType: 'string' | 'number' | 'boolean' | 'date' | 'datetime';
1079
+ /** Catalog-grounded physical column used when it differs from the semantic name. */
1080
+ sourceField?: string;
1081
+ };
1082
+
1083
+ declare type DashboardFilterTargetSource = Extract<SemaphorSourceRef, {
1084
+ kind: 'semantic' | 'physical';
1085
+ }>;
1086
+
1042
1087
  declare type DashboardInput = FilterDashboardInput | ControlDashboardInput;
1043
1088
 
1044
1089
  declare type DashboardInputBase = {
@@ -1099,14 +1144,14 @@ declare type DashboardInputScope = {
1099
1144
  sectionIds: string[];
1100
1145
  };
1101
1146
 
1102
- declare type DashboardInputSlot = ({
1147
+ declare type DashboardInputSlot = {
1103
1148
  status: 'set';
1104
1149
  value: DashboardInputValue;
1105
1150
  comparisonSelection?: GlobalDateComparisonSelection;
1106
- }) | ({
1151
+ } | {
1107
1152
  status: 'cleared';
1108
1153
  comparisonSelection?: GlobalDateComparisonSelection;
1109
- }) | {
1154
+ } | {
1110
1155
  status?: never;
1111
1156
  value?: never;
1112
1157
  comparisonSelection: GlobalDateComparisonSelection;
@@ -1591,6 +1636,14 @@ declare type EmailSettings = {
1591
1636
  senderTitle: string;
1592
1637
  };
1593
1638
 
1639
+ declare type EmbeddedFilterDashboardInput = DashboardInputBase & {
1640
+ kind: 'filter';
1641
+ filter: TFilter;
1642
+ filterReference?: never;
1643
+ optionSource?: DashboardFilterOptionSource;
1644
+ application?: DashboardFilterApplication;
1645
+ };
1646
+
1594
1647
  declare type EntityType = 'table' | 'view' | 'materialized view' | 'model' | 'file' | 'dataset' | 'url' | 'upload';
1595
1648
 
1596
1649
  declare interface Field {
@@ -1694,10 +1747,7 @@ declare interface FilterCondition {
1694
1747
  temporalBucket?: TemporalBucketMetadata;
1695
1748
  }
1696
1749
 
1697
- declare type FilterDashboardInput = DashboardInputBase & {
1698
- kind: 'filter';
1699
- filter: TFilter;
1700
- };
1750
+ declare type FilterDashboardInput = EmbeddedFilterDashboardInput | ReferencedFilterDashboardInput;
1701
1751
 
1702
1752
  /**
1703
1753
  * Display mode for individual filters
@@ -2298,6 +2348,17 @@ declare type RawTemporalPresentationTarget = {
2298
2348
  columnKey: string;
2299
2349
  };
2300
2350
 
2351
+ declare type ReferencedFilterDashboardInput = DashboardInputBase & {
2352
+ kind: 'filter';
2353
+ filter?: never;
2354
+ filterReference: {
2355
+ kind: 'dashboardFilter';
2356
+ filterId: string;
2357
+ };
2358
+ optionSource?: DashboardFilterOptionSource;
2359
+ application?: DashboardFilterApplication;
2360
+ };
2361
+
2301
2362
  declare type RelativeDateFilter = {
2302
2363
  mode: 'last';
2303
2364
  n: number;
@@ -2535,6 +2596,16 @@ declare type SemaphorInputBinding = {
2535
2596
 
2536
2597
  declare type SemaphorInputOperator = '=' | '!=' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'between' | 'not_between' | '>' | '>=' | '<' | '<=';
2537
2598
 
2599
+ declare type SemaphorInputOptionSource = {
2600
+ source: Extract<SemaphorSourceRef, {
2601
+ kind: 'semantic' | 'physical';
2602
+ }>;
2603
+ labelField: SemaphorFieldRef;
2604
+ valueField: SemaphorFieldRef;
2605
+ searchField?: SemaphorFieldRef;
2606
+ disambiguationFields?: SemaphorFieldRef[];
2607
+ };
2608
+
2538
2609
  declare type SemaphorMatrixAxisExpansionOptions = {
2539
2610
  defaultDepth?: number;
2540
2611
  lazy?: boolean;
@@ -3471,7 +3542,7 @@ declare type TFilter = {
3471
3542
  type?: 'single' | 'multiple';
3472
3543
  uiType?: 'radio' | 'dropdown' | 'tabs';
3473
3544
  dateSelectionMode?: DateSelectionMode;
3474
- defaultValues?: (string | number)[];
3545
+ defaultValues?: (string | number | boolean)[];
3475
3546
  defaultDateFilter?: DefaultDateFilter;
3476
3547
  sheetId?: string;
3477
3548
  location?: FilterLocation;
@@ -3635,7 +3706,7 @@ declare type TInlineFilter = {
3635
3706
  /** Date picker type: 'range' for full calendar, 'months' for month picker */
3636
3707
  dateSelectionMode?: DateSelectionMode;
3637
3708
  /** Default values applied when the dashboard first loads */
3638
- defaultValues?: (string | number)[];
3709
+ defaultValues?: (string | number | boolean)[];
3639
3710
  /** Default date filter applied on dashboard load (relative or fixed month/year) */
3640
3711
  defaultDateFilter?: DefaultDateFilter;
3641
3712
  /** Search mode for numeric filters: 'text' treats as text, 'numeric' enables operators (>, <, =) */
@@ -1240,17 +1240,12 @@ declare type SemaphorInputBinding = {
1240
1240
 
1241
1241
  declare type SemaphorInputOperator = '=' | '!=' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'between' | 'not_between' | '>' | '>=' | '<' | '<=';
1242
1242
 
1243
- declare type SemaphorInputOptionsIntent = {
1243
+ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
1244
1244
  kind: 'inputOptions';
1245
1245
  version?: SemaphorProtocolVersion;
1246
1246
  id?: string;
1247
1247
  label?: string;
1248
1248
  inputId: string;
1249
- source: SemaphorSourceRef;
1250
- labelField: SemaphorFieldRef;
1251
- valueField: SemaphorFieldRef;
1252
- searchField?: SemaphorFieldRef;
1253
- disambiguationFields?: SemaphorFieldRef[];
1254
1249
  population?: SemaphorOptionPopulation;
1255
1250
  dependencies?: SemaphorOptionDependencies;
1256
1251
  search?: string;
@@ -1259,6 +1254,16 @@ declare type SemaphorInputOptionsIntent = {
1259
1254
  derivedFields?: SemaphorDerivedFieldDefinition[];
1260
1255
  };
1261
1256
 
1257
+ declare type SemaphorInputOptionSource = {
1258
+ source: Extract<SemaphorSourceRef, {
1259
+ kind: 'semantic' | 'physical';
1260
+ }>;
1261
+ labelField: SemaphorFieldRef;
1262
+ valueField: SemaphorFieldRef;
1263
+ searchField?: SemaphorFieldRef;
1264
+ disambiguationFields?: SemaphorFieldRef[];
1265
+ };
1266
+
1262
1267
  declare type SemaphorInputOptionsResult = SemaphorAnalyticsResultBase & {
1263
1268
  kind: 'inputOptions';
1264
1269
  options: Array<{
@@ -78,6 +78,13 @@ declare type BaseFilter = {
78
78
 
79
79
  declare type Breakpoint = 'lg' | 'md' | 'sm' | 'xs' | 'xxs';
80
80
 
81
+ /**
82
+ * Inventories config sources proven executable by the card and SQL sources
83
+ * explicitly pinned for catalog authoring. It never infers SQL lineage,
84
+ * discovers a relationship, or adds a join.
85
+ */
86
+ export declare function buildDashboardCardSourceIndex(card: Pick<TCard, 'id' | 'type' | 'sql' | 'config' | 'dataSource'>): DashboardCardFilterSourceInventory;
87
+
81
88
  declare type CacheConfig = {
82
89
  ttl: string;
83
90
  status: 'on' | 'on-refresh' | 'off';
@@ -601,6 +608,8 @@ declare type ControlSource = {
601
608
 
602
609
  declare type ControlType = 'enum' | 'multi_enum' | 'text' | 'number' | 'boolean' | 'date' | 'field_selector' | 'metric_selector' | 'aggregation_selector' | 'grain_selector';
603
610
 
611
+ export declare function createDashboardFilterBindingId(createUuid?: () => string): string;
612
+
604
613
  declare type CurrencyPresentationBinding = {
605
614
  controlId: string;
606
615
  target: 'presentation_currency';
@@ -664,6 +673,21 @@ export declare type DashboardAuthoringValidationResult = {
664
673
  warnings: DashboardPlanWarning[];
665
674
  };
666
675
 
676
+ export declare type DashboardCardFilterSourceInventory = {
677
+ cardId: string;
678
+ kind: 'config';
679
+ executableSources: DashboardFilterTargetSource[];
680
+ } | {
681
+ cardId: string;
682
+ kind: 'sql';
683
+ pinnedCatalogSources: DashboardSqlPinnedCatalogSource[];
684
+ } | {
685
+ cardId: string;
686
+ kind: 'unconfigured';
687
+ };
688
+
689
+ export declare function dashboardCardFilterSourceInventoryContains(inventory: DashboardCardFilterSourceInventory, source: DashboardFilterTargetSource): boolean;
690
+
667
691
  export declare type DashboardCardSizeIntent = 'kpi' | 'chart' | 'table' | 'text';
668
692
 
669
693
  export declare type DashboardChangeCompileResult = {
@@ -717,6 +741,89 @@ export declare type DashboardCompileResult = {
717
741
  skippedOperations: DashboardPlanWarning[];
718
742
  };
719
743
 
744
+ export declare type DashboardFilterApplication = {
745
+ kind: 'cardMappings';
746
+ /**
747
+ * Sparse grounded bindings and explicit exclusions. A missing config card
748
+ * may reuse a proven Option Value target on an executable source; it is not
749
+ * an implicit exclusion, and source identity alone is not field evidence.
750
+ */
751
+ cards: DashboardFilterCardApplication[];
752
+ };
753
+
754
+ export declare type DashboardFilterAutomaticTargetResolution = {
755
+ status: 'matched';
756
+ target: DashboardFilterTarget;
757
+ } | {
758
+ status: 'ambiguous';
759
+ } | {
760
+ status: 'notApplicable';
761
+ };
762
+
763
+ export declare type DashboardFilterBoundCardApplication = {
764
+ kind: 'bound';
765
+ cardId: string;
766
+ bindingId: string;
767
+ target: DashboardFilterTarget;
768
+ };
769
+
770
+ export declare type DashboardFilterCardApplication = DashboardFilterBoundCardApplication | DashboardFilterExcludedCardApplication;
771
+
772
+ export declare type DashboardFilterExcludedCardApplication = {
773
+ kind: 'excluded';
774
+ cardId: string;
775
+ };
776
+
777
+ export declare type DashboardFilterLogicalValueField = Pick<DashboardFilterTargetField, 'name' | 'sourceField'> & {
778
+ dataType: DashboardFilterTargetField['dataType'];
779
+ };
780
+
781
+ export declare class DashboardFilterMappingContractError extends Error {
782
+ readonly issues: DashboardFilterMappingContractIssue[];
783
+ constructor(issues: DashboardFilterMappingContractIssue[]);
784
+ }
785
+
786
+ export declare type DashboardFilterMappingContractIssue = {
787
+ code: DashboardFilterMappingContractIssueCode;
788
+ path: string;
789
+ message: string;
790
+ inputId?: string;
791
+ cardId?: string;
792
+ bindingId?: string;
793
+ };
794
+
795
+ export declare type DashboardFilterMappingContractIssueCode = 'invalid_input' | 'both_filter_definitions' | 'missing_filter_definition' | 'orphaned_filter_reference' | 'invalid_filter_reference' | 'duplicate_filter_reference' | 'global_date_reference' | 'unsupported_mapped_scope' | 'invalid_application' | 'duplicate_card_application' | 'unknown_card' | 'invalid_binding_id' | 'unsupported_target' | 'invalid_target_field' | 'unknown_target_data_type' | 'unavailable_card_source' | 'invalid_option_source';
796
+
797
+ /** Persisted label/value option definition for a mapped dashboard filter. */
798
+ export declare type DashboardFilterOptionSource = SemaphorInputOptionSource;
799
+
800
+ export declare type DashboardFilterSubscriptionHint = {
801
+ helper: '{{ filters | where }}' | '{{ filters | and }}';
802
+ description: string;
803
+ };
804
+
805
+ export declare type DashboardFilterTarget = {
806
+ kind: 'field';
807
+ field: DashboardFilterTargetField;
808
+ };
809
+
810
+ /** Persisted, source-qualified field that a mapped filter targets. */
811
+ export declare type DashboardFilterTargetField = {
812
+ name: string;
813
+ source: DashboardFilterTargetSource;
814
+ dataType: 'string' | 'number' | 'boolean' | 'date' | 'datetime';
815
+ /** Catalog-grounded physical column used when it differs from the semantic name. */
816
+ sourceField?: string;
817
+ };
818
+
819
+ export declare function dashboardFilterTargetMatchesLogicalValue(target: DashboardFilterTarget, logicalValueField: DashboardFilterLogicalValueField): boolean;
820
+
821
+ export declare type DashboardFilterTargetSource = Extract<SemaphorSourceRef, {
822
+ kind: 'semantic' | 'physical';
823
+ }>;
824
+
825
+ export declare function dashboardFilterValueTypeForDataType(dataType: unknown): keyof typeof OPERATIONS_BY_DATA_TYPE;
826
+
720
827
  declare type DashboardInput = FilterDashboardInput | ControlDashboardInput;
721
828
 
722
829
  declare type DashboardInputBase = {
@@ -777,14 +884,14 @@ declare type DashboardInputScope = {
777
884
  sectionIds: string[];
778
885
  };
779
886
 
780
- declare type DashboardInputSlot = ({
887
+ declare type DashboardInputSlot = {
781
888
  status: 'set';
782
889
  value: DashboardInputValue;
783
890
  comparisonSelection?: GlobalDateComparisonSelection;
784
- }) | ({
891
+ } | {
785
892
  status: 'cleared';
786
893
  comparisonSelection?: GlobalDateComparisonSelection;
787
- }) | {
894
+ } | {
788
895
  status?: never;
789
896
  value?: never;
790
897
  comparisonSelection: GlobalDateComparisonSelection;
@@ -901,6 +1008,27 @@ export declare type DashboardPlanWarning = {
901
1008
  cardId?: string;
902
1009
  };
903
1010
 
1011
+ export declare type DashboardSqlExecutionTable = {
1012
+ connectionId: string;
1013
+ databaseName?: string;
1014
+ schemaName?: string;
1015
+ tableName: string;
1016
+ };
1017
+
1018
+ export declare type DashboardSqlFilterTargetResolution = {
1019
+ status: 'eligible';
1020
+ source: DashboardFilterTargetSource;
1021
+ executionIdentifier: string;
1022
+ } | {
1023
+ status: 'ineligible';
1024
+ };
1025
+
1026
+ export declare type DashboardSqlPinnedCatalogSource = {
1027
+ source: DashboardFilterTargetSource;
1028
+ /** Physical SQL coordinate declared by the pinned entity, when available. */
1029
+ executionTable?: DashboardSqlExecutionTable;
1030
+ };
1031
+
904
1032
  export declare type DashboardSuggestion = {
905
1033
  id: string;
906
1034
  title: string;
@@ -1348,6 +1476,14 @@ declare type EmailSettings = {
1348
1476
  senderTitle: string;
1349
1477
  };
1350
1478
 
1479
+ declare type EmbeddedFilterDashboardInput = DashboardInputBase & {
1480
+ kind: 'filter';
1481
+ filter: TFilter;
1482
+ filterReference?: never;
1483
+ optionSource?: DashboardFilterOptionSource;
1484
+ application?: DashboardFilterApplication;
1485
+ };
1486
+
1351
1487
  declare type EntityType = 'table' | 'view' | 'materialized view' | 'model' | 'file' | 'dataset' | 'url' | 'upload';
1352
1488
 
1353
1489
  declare interface Field {
@@ -1451,10 +1587,7 @@ declare interface FilterCondition {
1451
1587
  temporalBucket?: TemporalBucketMetadata;
1452
1588
  }
1453
1589
 
1454
- declare type FilterDashboardInput = DashboardInputBase & {
1455
- kind: 'filter';
1456
- filter: TFilter;
1457
- };
1590
+ declare type FilterDashboardInput = EmbeddedFilterDashboardInput | ReferencedFilterDashboardInput;
1458
1591
 
1459
1592
  /**
1460
1593
  * Display mode for individual filters
@@ -1564,6 +1697,12 @@ declare type FilterValue = string | number | boolean | Date | null | [number, nu
1564
1697
 
1565
1698
  export declare function findDashboardAuthoringDatasetForSource(datasets: readonly SemaphorSourceRef[], source: SemaphorSourceRef | undefined): SemaphorSourceRef | undefined;
1566
1699
 
1700
+ export declare function findDashboardCardExecutableSource(inventory: DashboardCardFilterSourceInventory, source: DashboardFilterTargetSource): DashboardFilterTargetSource | undefined;
1701
+
1702
+ export declare function findDashboardCardPinnedCatalogSource(inventory: DashboardCardFilterSourceInventory, source: DashboardFilterTargetSource): DashboardFilterTargetSource | undefined;
1703
+
1704
+ export declare function findDashboardSqlPinnedCatalogSource(inventory: DashboardCardFilterSourceInventory, source: DashboardFilterTargetSource): DashboardSqlPinnedCatalogSource | undefined;
1705
+
1567
1706
  /**
1568
1707
  * Absolute fixed month/year default used by Month Picker defaults.
1569
1708
  * - `month` is 0-indexed (0=January, 11=December) to align with MonthPicker.
@@ -1623,6 +1762,8 @@ export declare type GeneratedDashboardCardArtifact = {
1623
1762
 
1624
1763
  export declare function getDashboardAuthoringCardSource(card: Pick<DashboardPlanCard, 'analyticsIntent'>): SemaphorSourceRef | undefined;
1625
1764
 
1765
+ export declare function getDashboardFilterSubscriptionHint(sql: string | null | undefined): DashboardFilterSubscriptionHint | null;
1766
+
1626
1767
  export declare function getTemporalBucketAuthoringOptions(granularity: SemaphorTimeGrain, preservedFormat?: TemporalBucketFormat, preferences?: ResolvedTemporalValueFormatPreferences): readonly TemporalBucketAuthoringOption[];
1627
1768
 
1628
1769
  export declare function getTemporalBucketAuthoringSelection(format: TemporalBucketFormat, granularity: SemaphorTimeGrain): TemporalBucketAuthoringSelection;
@@ -1654,6 +1795,12 @@ declare interface GroupByField extends Field {
1654
1795
  calculatedFormula?: CalculatedFieldFormula;
1655
1796
  }
1656
1797
 
1798
+ /**
1799
+ * Existing lightweight authoring hint for the exact plain collection helpers.
1800
+ * It is not SQL validation, execution, security, persistence, or save policy.
1801
+ */
1802
+ export declare function hasDashboardFilterSubscription(sql: string | null | undefined): boolean;
1803
+
1657
1804
  declare type HtmlOptions = {
1658
1805
  html: string;
1659
1806
  };
@@ -1731,6 +1878,8 @@ declare interface InteractionTrigger {
1731
1878
  field: Field;
1732
1879
  }
1733
1880
 
1881
+ export declare function isDashboardFilterOperationCompatible(dataType: unknown, operation: unknown): boolean;
1882
+
1734
1883
  export declare function isMaterializableDashboardAuthoringSource(value: unknown): value is MaterializableDashboardAuthoringSource;
1735
1884
 
1736
1885
  export declare function isSemaphorCartesianChartType(value: string | null | undefined): value is SemaphorCartesianChartType;
@@ -1877,6 +2026,34 @@ declare type MonthAlignedFiscalCalendar = {
1877
2026
 
1878
2027
  declare type NoneOptions = {};
1879
2028
 
2029
+ export declare function normalizeDashboardInputs({ inputs, dashboardFilters, cards, validateCardTargets, }: {
2030
+ inputs: DashboardInput[] | unknown;
2031
+ dashboardFilters: TFilter[] | undefined;
2032
+ cards?: TCard[];
2033
+ /** Save/validation boundary check. Runtime drift is owned per card by the compiler. */
2034
+ validateCardTargets?: boolean;
2035
+ }): NormalizeDashboardInputsResult;
2036
+
2037
+ export declare type NormalizeDashboardInputsResult = {
2038
+ ok: true;
2039
+ inputs: NormalizedDashboardInput[];
2040
+ } | {
2041
+ ok: false;
2042
+ inputs: NormalizedDashboardInput[];
2043
+ issues: DashboardFilterMappingContractIssue[];
2044
+ };
2045
+
2046
+ declare type NormalizedDashboardInput = NormalizedFilterDashboardInput | ControlDashboardInput;
2047
+
2048
+ /** Runtime form after dashboard-filter references are resolved once. */
2049
+ declare type NormalizedFilterDashboardInput = DashboardInputBase & {
2050
+ kind: 'filter';
2051
+ filter: TFilter;
2052
+ optionSource?: DashboardFilterOptionSource;
2053
+ application?: DashboardFilterApplication;
2054
+ definitionOrigin: 'embedded' | 'dashboardFilter';
2055
+ };
2056
+
1880
2057
  declare type NumberAxisFormat = {
1881
2058
  decimalPlaces?: number;
1882
2059
  minimumFractionDigits?: number;
@@ -1899,6 +2076,13 @@ declare type OldFilterValue = string | number | null | (string | number)[] | Ran
1899
2076
 
1900
2077
  declare type Operation = '=' | '>' | '<' | '>=' | '<=' | '!=' | 'in' | 'not in' | 'like' | 'not like' | 'between' | 'not between' | 'is null' | 'is not null';
1901
2078
 
2079
+ declare const OPERATIONS_BY_DATA_TYPE: {
2080
+ readonly date: Set<string>;
2081
+ readonly number: Set<string>;
2082
+ readonly string: Set<string>;
2083
+ readonly boolean: Set<string>;
2084
+ };
2085
+
1902
2086
  declare type Operator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'startsWith' | 'endsWith' | 'like' | 'not like' | 'in' | 'not in' | 'between' | 'not between' | 'isNull' | 'isNotNull';
1903
2087
 
1904
2088
  declare type OptionsMap = {
@@ -1997,6 +2181,17 @@ declare type RangeValue = {
1997
2181
 
1998
2182
  export declare function reconcileTemporalBucketAuthoringFormat(format: TemporalBucketFormat, granularity: SemaphorTimeGrain): TemporalBucketFormat;
1999
2183
 
2184
+ declare type ReferencedFilterDashboardInput = DashboardInputBase & {
2185
+ kind: 'filter';
2186
+ filter?: never;
2187
+ filterReference: {
2188
+ kind: 'dashboardFilter';
2189
+ filterId: string;
2190
+ };
2191
+ optionSource?: DashboardFilterOptionSource;
2192
+ application?: DashboardFilterApplication;
2193
+ };
2194
+
2000
2195
  declare type RelativeDateFilter = {
2001
2196
  mode: 'last';
2002
2197
  n: number;
@@ -2023,6 +2218,8 @@ declare type RelativeDateFilter = {
2023
2218
  to: number;
2024
2219
  };
2025
2220
 
2221
+ export declare function requireNormalizedDashboardInputs(params: Parameters<typeof normalizeDashboardInputs>[0]): NormalizedDashboardInput[];
2222
+
2026
2223
  /** Physical SQL/result alias used by config-owned detail projections. */
2027
2224
  export declare function resolveCanonicalDetailResultRawKey(field: CanonicalDetailResultFieldIdentity): string;
2028
2225
 
@@ -2048,6 +2245,31 @@ export declare function resolveDashboardAuthoringSource({ explicitSource, field,
2048
2245
  fallbackSources?: readonly SemaphorSourceRef[];
2049
2246
  }): MaterializableDashboardAuthoringSource | undefined;
2050
2247
 
2248
+ /**
2249
+ * Resolves the default Option Value target from proven executable candidates.
2250
+ * Authoring supplies catalog-grounded candidates. Runtime supplies only
2251
+ * governed value fields or previously accepted same-key bindings whose source
2252
+ * is executable by the card. The shared rule keeps UI suggestions and query
2253
+ * behavior from becoming separate interpreters without inventing columns from
2254
+ * source identity alone.
2255
+ */
2256
+ export declare function resolveDashboardFilterAutomaticTarget(params: {
2257
+ logicalValueField: DashboardFilterLogicalValueField;
2258
+ candidates: DashboardFilterTarget[];
2259
+ }): DashboardFilterAutomaticTargetResolution;
2260
+
2261
+ /**
2262
+ * Resolves one accepted SQL-card target without inspecting authored SQL.
2263
+ * Authoring may provide the grounded candidate set to reject an unqualified
2264
+ * duplicate. Runtime can prove an unqualified identifier remains unique only
2265
+ * while the card has one pinned source, so source drift fails closed.
2266
+ */
2267
+ export declare function resolveDashboardSqlFilterTarget(params: {
2268
+ inventory: DashboardCardFilterSourceInventory;
2269
+ target: DashboardFilterTarget;
2270
+ candidateTargets?: DashboardFilterTarget[];
2271
+ }): DashboardSqlFilterTargetResolution;
2272
+
2051
2273
  /** Viewer preferences that affect temporal presentation without numeric currency policy. */
2052
2274
  declare type ResolvedTemporalValueFormatPreferences = Pick<ResolvedValueFormatPreferences, 'locale' | 'dateStyle' | 'dateTime'>;
2053
2275
 
@@ -2215,17 +2437,12 @@ declare type SemaphorInputBinding = {
2215
2437
 
2216
2438
  declare type SemaphorInputOperator = '=' | '!=' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'between' | 'not_between' | '>' | '>=' | '<' | '<=';
2217
2439
 
2218
- declare type SemaphorInputOptionsIntent = {
2440
+ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
2219
2441
  kind: 'inputOptions';
2220
2442
  version?: SemaphorProtocolVersion;
2221
2443
  id?: string;
2222
2444
  label?: string;
2223
2445
  inputId: string;
2224
- source: SemaphorSourceRef;
2225
- labelField: SemaphorFieldRef;
2226
- valueField: SemaphorFieldRef;
2227
- searchField?: SemaphorFieldRef;
2228
- disambiguationFields?: SemaphorFieldRef[];
2229
2446
  population?: SemaphorOptionPopulation;
2230
2447
  dependencies?: SemaphorOptionDependencies;
2231
2448
  search?: string;
@@ -2234,6 +2451,16 @@ declare type SemaphorInputOptionsIntent = {
2234
2451
  derivedFields?: SemaphorDerivedFieldDefinition[];
2235
2452
  };
2236
2453
 
2454
+ declare type SemaphorInputOptionSource = {
2455
+ source: Extract<SemaphorSourceRef, {
2456
+ kind: 'semantic' | 'physical';
2457
+ }>;
2458
+ labelField: SemaphorFieldRef;
2459
+ valueField: SemaphorFieldRef;
2460
+ searchField?: SemaphorFieldRef;
2461
+ disambiguationFields?: SemaphorFieldRef[];
2462
+ };
2463
+
2237
2464
  declare type SemaphorInputScope = {
2238
2465
  level: 'dashboard';
2239
2466
  excludeViewIds?: string[];
@@ -3340,7 +3567,7 @@ declare type TFilter = {
3340
3567
  type?: 'single' | 'multiple';
3341
3568
  uiType?: 'radio' | 'dropdown' | 'tabs';
3342
3569
  dateSelectionMode?: DateSelectionMode;
3343
- defaultValues?: (string | number)[];
3570
+ defaultValues?: (string | number | boolean)[];
3344
3571
  defaultDateFilter?: DefaultDateFilter;
3345
3572
  sheetId?: string;
3346
3573
  location?: FilterLocation;
@@ -3504,7 +3731,7 @@ declare type TInlineFilter = {
3504
3731
  /** Date picker type: 'range' for full calendar, 'months' for month picker */
3505
3732
  dateSelectionMode?: DateSelectionMode;
3506
3733
  /** Default values applied when the dashboard first loads */
3507
- defaultValues?: (string | number)[];
3734
+ defaultValues?: (string | number | boolean)[];
3508
3735
  /** Default date filter applied on dashboard load (relative or fixed month/year) */
3509
3736
  defaultDateFilter?: DefaultDateFilter;
3510
3737
  /** Search mode for numeric filters: 'text' treats as text, 'numeric' enables operators (>, <, =) */