react-semaphor 0.1.425 → 0.1.427

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 (51) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/analytics-protocol/index.cjs +1 -1
  3. package/dist/analytics-protocol/index.js +42 -39
  4. package/dist/brand-studio/index.cjs +1 -1
  5. package/dist/brand-studio/index.js +1 -1
  6. package/dist/chunks/{calendar-preferences-dialog-DJwV0aqn.js → calendar-preferences-dialog-DE4tk3t3.js} +2 -2
  7. package/dist/chunks/{calendar-preferences-dialog-BLaSWhLl.js → calendar-preferences-dialog-DuGX1NPV.js} +1 -1
  8. package/dist/chunks/{catalog-field-grounding-DcxPLns0.js → catalog-field-grounding-AOGwWu0K.js} +2 -2
  9. package/dist/chunks/code-editor-BoowcKU0.js +138 -0
  10. package/dist/chunks/{code-editor-Bkk7s8hI.js → code-editor-CojfM3qp.js} +6564 -6293
  11. package/dist/chunks/{comparison-document-migration-CQJ0DZlL.js → comparison-document-migration-BJH1idOd.js} +1 -1
  12. package/dist/chunks/{comparison-document-migration-Db64RWYD.js → comparison-document-migration-b6c3xiWh.js} +1 -1
  13. package/dist/chunks/{dashboard-5agU0G_D.js → dashboard-DSxho2LN.js} +51313 -50489
  14. package/dist/chunks/{dashboard-briefing-launcher-qyEVfuOm.js → dashboard-briefing-launcher-BFIw5BOf.js} +4 -4
  15. package/dist/chunks/{dashboard-briefing-launcher-CII8-4qo.js → dashboard-briefing-launcher-CguxcHIl.js} +1 -1
  16. package/dist/chunks/{dashboard-controls-PJpeYZHw.js → dashboard-controls-Cl0LagTr.js} +8 -8
  17. package/dist/chunks/{dashboard-controls-aJY0FNPP.js → dashboard-controls-jD-HpCNK.js} +529 -524
  18. package/dist/chunks/dashboard-date-comparison-definition-BaYxjLi5.js +167 -0
  19. package/dist/chunks/dashboard-date-comparison-definition-DGZr3m-b.js +1 -0
  20. package/dist/chunks/{dashboard-json-DtmR5yCf.js → dashboard-json-7mpQsizF.js} +1 -1
  21. package/dist/chunks/{dashboard-json-CzHSP6Fa.js → dashboard-json-BovTt0uu.js} +3 -3
  22. package/dist/chunks/dashboard-ogxedhSY.js +1402 -0
  23. package/dist/chunks/edit-dashboard-visual-B7wLrHeF.js +182 -0
  24. package/dist/chunks/{edit-dashboard-visual-AkZzwBCV.js → edit-dashboard-visual-dlm8F_Qu.js} +4649 -4595
  25. package/dist/chunks/metric-comparison-BKgkMy9r.js +1 -0
  26. package/dist/chunks/metric-comparison-CWweq9RG.js +387 -0
  27. package/dist/chunks/{use-create-flow-overlay-state-ByOKVV2K.js → use-create-flow-overlay-state-BU0ROMSm.js} +2 -2
  28. package/dist/chunks/{use-create-flow-overlay-state-DmuReEnk.js → use-create-flow-overlay-state-kbl6avDY.js} +1 -1
  29. package/dist/dashboard/index.cjs +1 -1
  30. package/dist/dashboard/index.js +1 -1
  31. package/dist/dashboard-authoring/index.cjs +1 -1
  32. package/dist/dashboard-authoring/index.js +3 -3
  33. package/dist/data-app-builder/index.cjs +1 -1
  34. package/dist/data-app-builder/index.js +2 -2
  35. package/dist/data-app-sdk-validation/index.js +1 -1
  36. package/dist/index.cjs +1 -1
  37. package/dist/index.js +6 -6
  38. package/dist/style.css +1 -1
  39. package/dist/surfboard/index.cjs +1 -1
  40. package/dist/surfboard/index.js +2 -2
  41. package/dist/types/analytics-protocol.d.ts +40 -2
  42. package/dist/types/dashboard.d.ts +25 -0
  43. package/dist/types/main.d.ts +54 -5
  44. package/dist/types/surfboard.d.ts +25 -0
  45. package/dist/types/types.d.ts +43 -0
  46. package/package.json +1 -1
  47. package/dist/chunks/code-editor-CkXyNgYc.js +0 -138
  48. package/dist/chunks/dashboard-MKIqgGDp.js +0 -1402
  49. package/dist/chunks/edit-dashboard-visual-Cif6uDqN.js +0 -182
  50. package/dist/chunks/metric-comparison-4oA4ouU9.js +0 -354
  51. package/dist/chunks/metric-comparison-nQKquVnx.js +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/dashboard-MKIqgGDp.js"),e=require("../chunks/common-types-C73-Ud1-.js"),a=require("../chunks/calendar-preferences-dialog-BLaSWhLl.js");exports.Surfboard=r.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=e.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=e.EMPTY_SELECTION;exports.CalendarPreferencesDialog=a.CalendarPreferencesDialog;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/dashboard-ogxedhSY.js"),e=require("../chunks/common-types-C73-Ud1-.js"),a=require("../chunks/calendar-preferences-dialog-DuGX1NPV.js");exports.Surfboard=r.DashboardPlus;exports.CONTROL_CARD_DEFAULT_VALUE=e.CONTROL_CARD_DEFAULT_VALUE;exports.EMPTY_SELECTION=e.EMPTY_SELECTION;exports.CalendarPreferencesDialog=a.CalendarPreferencesDialog;
@@ -1,6 +1,6 @@
1
- import { a as e } from "../chunks/dashboard-5agU0G_D.js";
1
+ import { a as e } from "../chunks/dashboard-DSxho2LN.js";
2
2
  import { C, E } from "../chunks/common-types-ClkOI-3O.js";
3
- import { C as s } from "../chunks/calendar-preferences-dialog-DJwV0aqn.js";
3
+ import { C as s } from "../chunks/calendar-preferences-dialog-DE4tk3t3.js";
4
4
  export {
5
5
  C as CONTROL_CARD_DEFAULT_VALUE,
6
6
  s as CalendarPreferencesDialog,
@@ -101,6 +101,29 @@ export declare type ComparisonPresentationSpec = {
101
101
 
102
102
  export declare type ComparisonUnavailableReason = 'finite_current_window_required' | 'current_window_not_started' | 'temporal_binding_missing' | 'temporal_binding_ambiguous' | 'temporal_binding_invalid' | 'unsupported_output_shape' | 'unsupported_raw_sql' | 'insufficient_history' | 'invalid_comparison_spec' | 'comparison_execution_failed';
103
103
 
104
+ export declare type DashboardDateComparisonDefinitionIneligibility = 'invalid_input' | 'non_date_filter' | 'card_inline_filter' | 'custom_filter' | 'multi_target_filter' | 'incomplete_field_identity' | 'divergent_field_identity' | 'incomplete_source_identity' | 'divergent_source_identity';
105
+
106
+ export declare type DashboardDateComparisonDefinitionResolution = {
107
+ status: 'eligible';
108
+ kind: 'global_date';
109
+ } | {
110
+ status: 'eligible';
111
+ kind: 'field_date';
112
+ qualifiedFieldName: string;
113
+ source: SemaphorSourceRef;
114
+ } | {
115
+ status: 'ineligible';
116
+ reason: DashboardDateComparisonDefinitionIneligibility;
117
+ };
118
+
119
+ export declare type DashboardDateComparisonOwner = {
120
+ kind: 'global_date';
121
+ } | {
122
+ kind: 'field_date';
123
+ filterId: string;
124
+ label: string;
125
+ };
126
+
104
127
  export declare const DEFAULT_METRIC_COMPARISON_POLARITY: "higher_is_better";
105
128
 
106
129
  export declare function evaluateMetricComparison(input: {
@@ -134,6 +157,7 @@ export declare function getSemaphorConnectionCapabilities(connectionType: string
134
157
  export declare type GlobalDateComparisonContext = {
135
158
  selection: GlobalDateComparisonSelection;
136
159
  inheritGlobalComparison?: false;
160
+ owner?: DashboardDateComparisonOwner;
137
161
  /** Fixed execution clock carried by authoritative dashboard replay snapshots. */
138
162
  referenceTime?: string;
139
163
  };
@@ -161,6 +185,8 @@ export declare function isAnalyticsMetricIdentifierField(field: AnalyticsCatalog
161
185
 
162
186
  export declare function isAnalyticsTechnicalIdentifierField(field: AnalyticsCatalogField): boolean;
163
187
 
188
+ export declare function isComparisonCapableDashboardDateInputDefinition(input: unknown): boolean;
189
+
164
190
  export declare function isSemaphorAnalyzeResultFieldName(value: string): value is SemaphorAnalyzeResultFieldName;
165
191
 
166
192
  export declare function isSemaphorDataAppCodegenSummary(value: unknown): value is SemaphorDataAppCodegenSummary;
@@ -604,6 +630,10 @@ export declare function preferSemaphorFieldRefMetadata(current: SemaphorFieldRef
604
630
 
605
631
  export declare function preferSemaphorSourceMetadata(current: SemaphorSourceRef, next: SemaphorSourceRef): SemaphorSourceRef;
606
632
 
633
+ export declare function resolveDashboardDateComparisonFilterDefinition(filter: unknown): DashboardDateComparisonDefinitionResolution;
634
+
635
+ export declare function resolveDashboardDateComparisonInputDefinition(input: unknown): DashboardDateComparisonDefinitionResolution;
636
+
607
637
  export declare type ResolvedDateWindow = {
608
638
  startInclusive: string;
609
639
  endExclusive: string;
@@ -616,6 +646,7 @@ export declare type ResolvedMetricComparisonRequest = {
616
646
  } | {
617
647
  source: 'inherited';
618
648
  spec: ViewerPeriodComparisonSpec;
649
+ owner?: DashboardDateComparisonOwner;
619
650
  };
620
651
 
621
652
  export declare type ResolvedTemporalContext = {
@@ -635,8 +666,7 @@ export declare type ResolvedTemporalContext = {
635
666
  export declare function resolveMetricComparisonRequest(input: {
636
667
  metricComparison?: MetricComparisonConfig;
637
668
  inheritGlobalComparison?: false;
638
- globalSelection?: GlobalDateComparisonSelection;
639
- isGlobalDateApplicable: boolean;
669
+ globalDateComparison?: GlobalDateComparisonContext;
640
670
  }): ResolvedMetricComparisonRequest | undefined;
641
671
 
642
672
  /** Stable result-instance identity shared by query producers and consumers. */
@@ -651,6 +681,14 @@ export declare type ResolveTemporalContextInput = {
651
681
  querySources?: SemaphorSourceRef[];
652
682
  };
653
683
 
684
+ export declare function semanticDatasetMatchesFieldCoordinates(dataset: {
685
+ id?: unknown;
686
+ name?: unknown;
687
+ }, field: {
688
+ entityId?: unknown;
689
+ entityName?: unknown;
690
+ }): boolean;
691
+
654
692
  export declare const SEMAPHOR_ANALYTICS_INTENT_FIXTURES: {
655
693
  revenueKpi: {
656
694
  version: 1;
@@ -1744,6 +1744,14 @@ export declare type LoadingProps = {
1744
1744
 
1745
1745
  declare type LogicalOperator = 'AND' | 'OR';
1746
1746
 
1747
+ /**
1748
+ * A comparison input proven to be present in the card's executed filter set.
1749
+ * Ownership and UI coverage must consume this stage, never source inputs.
1750
+ */
1751
+ export declare type MaterializedDashboardDateComparisonInput = ResolvedDashboardDateComparisonInput & {
1752
+ effectiveFilterValue: TFilterValue;
1753
+ };
1754
+
1747
1755
  declare interface MetricColumn extends BaseColumn {
1748
1756
  role: 'metric';
1749
1757
  aggregate: AggregateFunction;
@@ -1946,6 +1954,20 @@ declare type RelativeDateFilter = {
1946
1954
  to: number;
1947
1955
  };
1948
1956
 
1957
+ export declare type ResolvedDashboardDateComparisonInput = {
1958
+ inputId: string;
1959
+ filterId: string;
1960
+ label: string;
1961
+ filter: TFilter;
1962
+ /**
1963
+ * The active value before execution-only canonicalization. Comparison
1964
+ * ownership uses this value as provenance evidence and must fail closed
1965
+ * when its filter or field identity does not match the definition.
1966
+ */
1967
+ filterValue?: TFilterValue;
1968
+ selection: GlobalDateComparisonSelection;
1969
+ };
1970
+
1949
1971
  export declare type ResolvedDashboardInput = {
1950
1972
  id: string;
1951
1973
  kind: 'filter' | 'control';
@@ -1974,6 +1996,7 @@ export declare type ResolvedDashboardInputContext = {
1974
1996
  controlValues: Record<string, unknown>;
1975
1997
  variablesByName: Record<string, ResolvedDashboardInput>;
1976
1998
  globalDateComparisonSelection?: GlobalDateComparisonSelection;
1999
+ dateComparisonInputs?: ResolvedDashboardDateComparisonInput[];
1977
2000
  variablesById: Record<string, ResolvedDashboardInput>;
1978
2001
  missingRequiredInputs: ResolvedDashboardInput[];
1979
2002
  };
@@ -1998,6 +2021,8 @@ declare type ResolvedPrimaryDateField = {
1998
2021
  entityName: string;
1999
2022
  entityType: string;
2000
2023
  dataType: string;
2024
+ /** Canonical dataset coordinates stamped by the temporal grounding boundary. */
2025
+ source?: SemaphorSourceRef;
2001
2026
  dateFormat?: string;
2002
2027
  customFormat?: string;
2003
2028
  defaultGranularity?: TimeGranularity;
@@ -44,8 +44,8 @@ declare type Actions_2 = {
44
44
  upsertDashboardInput: (input: DashboardInput) => void;
45
45
  removeDashboardInput: (inputId: string) => void;
46
46
  setDefaultDashboardInputValues: (values: DashboardInputValues | undefined) => void;
47
+ setDefaultDashboardInputComparisonSelection: (input: Pick<DashboardInput, 'id' | 'runtimeScope'>, target: DashboardInputRuntimeTarget, selection: GlobalDateComparisonSelection | undefined) => void;
47
48
  setDashboardInputValues: (values: DashboardInputValues) => void;
48
- setDashboardInputValuesAreAuthoritative: (isAuthoritative: boolean) => void;
49
49
  setDashboardInputSlot: (input: Pick<DashboardInput, 'id' | 'runtimeScope'>, target: DashboardInputRuntimeTarget, slot: DashboardInputSlot) => void;
50
50
  setDashboardInputComparisonSelection: (input: Pick<DashboardInput, 'id' | 'runtimeScope'>, target: DashboardInputRuntimeTarget, selection: GlobalDateComparisonSelection) => void;
51
51
  resetDashboardInputComparisonSelection: (input: Pick<DashboardInput, 'id' | 'runtimeScope'>, target: DashboardInputRuntimeTarget) => void;
@@ -73,14 +73,12 @@ declare type Actions_2 = {
73
73
  setDashboard: (dashboard: TDashboard, options?: {
74
74
  semanticExecutionPayload?: SemanticExecutionPayload;
75
75
  dashboardInputValues?: DashboardInputValues;
76
- dashboardInputValuesAreAuthoritative?: boolean;
77
76
  dashboardInputReferenceTime?: string;
78
77
  }) => void;
79
78
  setDashboardWithFilterValues: (dashboard: TDashboard, filterValues: TFilterValue[], runtimeOverrides?: Record<string, unknown>, options?: {
80
79
  selectedSheetId?: string | null;
81
80
  semanticExecutionPayload?: SemanticExecutionPayload;
82
81
  dashboardInputValues?: DashboardInputValues;
83
- dashboardInputValuesAreAuthoritative?: boolean;
84
82
  dashboardInputReferenceTime?: string;
85
83
  }) => void;
86
84
  hydrateRuntimeControlValues: (dashboard: TDashboard, runtimeOverrides?: Record<string, unknown>) => void;
@@ -1932,6 +1930,14 @@ export declare interface DashboardCreateDialogBaseProps {
1932
1930
  initialDomainId?: string;
1933
1931
  }
1934
1932
 
1933
+ declare type DashboardDateComparisonOwner = {
1934
+ kind: 'global_date';
1935
+ } | {
1936
+ kind: 'field_date';
1937
+ filterId: string;
1938
+ label: string;
1939
+ };
1940
+
1935
1941
  export declare type DashboardEventHandlers = {
1936
1942
  onExportData?: (payload: ExportDataPayload) => void;
1937
1943
  };
@@ -2354,8 +2360,6 @@ export declare type DashboardStore = {
2354
2360
  cardControlValuesMap: Record<string, Record<string, unknown>>;
2355
2361
  /** Runtime-only dashboard input values keyed by input runtime scope. */
2356
2362
  dashboardInputValues: DashboardInputValues;
2357
- /** True when dashboardInputValues came from a strict execution snapshot. */
2358
- dashboardInputValuesAreAuthoritative: boolean;
2359
2363
  /** Fixed execution clock from a strict dashboard input replay snapshot. */
2360
2364
  dashboardInputReferenceTime?: string;
2361
2365
  semanticExecutionPayload: SemanticExecutionPayload;
@@ -3689,6 +3693,7 @@ export declare function getSql(config: SqlGen, schemaName: string, tableName: st
3689
3693
  declare type GlobalDateComparisonContext = {
3690
3694
  selection: GlobalDateComparisonSelection;
3691
3695
  inheritGlobalComparison?: false;
3696
+ owner?: DashboardDateComparisonOwner;
3692
3697
  /** Fixed execution clock carried by authoritative dashboard replay snapshots. */
3693
3698
  referenceTime?: string;
3694
3699
  };
@@ -4018,6 +4023,14 @@ declare type ManagementStore = {
4018
4023
  actions: Actions;
4019
4024
  };
4020
4025
 
4026
+ /**
4027
+ * A comparison input proven to be present in the card's executed filter set.
4028
+ * Ownership and UI coverage must consume this stage, never source inputs.
4029
+ */
4030
+ export declare type MaterializedDashboardDateComparisonInput = ResolvedDashboardDateComparisonInput & {
4031
+ effectiveFilterValue: TFilterValue;
4032
+ };
4033
+
4021
4034
  declare type MatrixAxisLevelDescriptor = {
4022
4035
  instanceId: string;
4023
4036
  fieldKey: string;
@@ -4813,6 +4826,20 @@ export declare function resolveDatamodelName(datamodelName: string): string;
4813
4826
 
4814
4827
  export declare const resolveDataType: (value: any) => string;
4815
4828
 
4829
+ export declare type ResolvedDashboardDateComparisonInput = {
4830
+ inputId: string;
4831
+ filterId: string;
4832
+ label: string;
4833
+ filter: TFilter;
4834
+ /**
4835
+ * The active value before execution-only canonicalization. Comparison
4836
+ * ownership uses this value as provenance evidence and must fail closed
4837
+ * when its filter or field identity does not match the definition.
4838
+ */
4839
+ filterValue?: TFilterValue;
4840
+ selection: GlobalDateComparisonSelection;
4841
+ };
4842
+
4816
4843
  export declare type ResolvedDashboardInput = {
4817
4844
  id: string;
4818
4845
  kind: 'filter' | 'control';
@@ -4841,6 +4868,7 @@ export declare type ResolvedDashboardInputContext = {
4841
4868
  controlValues: Record<string, unknown>;
4842
4869
  variablesByName: Record<string, ResolvedDashboardInput>;
4843
4870
  globalDateComparisonSelection?: GlobalDateComparisonSelection;
4871
+ dateComparisonInputs?: ResolvedDashboardDateComparisonInput[];
4844
4872
  variablesById: Record<string, ResolvedDashboardInput>;
4845
4873
  missingRequiredInputs: ResolvedDashboardInput[];
4846
4874
  };
@@ -4867,6 +4895,7 @@ declare type ResolvedMetricComparisonRequest = {
4867
4895
  } | {
4868
4896
  source: 'inherited';
4869
4897
  spec: ViewerPeriodComparisonSpec;
4898
+ owner?: DashboardDateComparisonOwner;
4870
4899
  };
4871
4900
 
4872
4901
  declare type ResolvedPrimaryDateField = {
@@ -4879,6 +4908,8 @@ declare type ResolvedPrimaryDateField = {
4879
4908
  entityName: string;
4880
4909
  entityType: string;
4881
4910
  dataType: string;
4911
+ /** Canonical dataset coordinates stamped by the temporal grounding boundary. */
4912
+ source?: SemaphorSourceRef;
4882
4913
  dateFormat?: string;
4883
4914
  customFormat?: string;
4884
4915
  defaultGranularity?: TimeGranularity;
@@ -6950,6 +6981,24 @@ export declare type UIConfig = {
6950
6981
  * If unset, runtime falls back to `showBriefings`; if both are unset, briefings are visible.
6951
6982
  */
6952
6983
  showBriefings?: boolean;
6984
+ /**
6985
+ * Controls visibility of the Dashboard Hub navigation control.
6986
+ * Defaults to true unless explicitly disabled. This does not grant access
6987
+ * to the dashboard hub when the token identity cannot navigate there.
6988
+ */
6989
+ showDashboardHub?: boolean;
6990
+ /**
6991
+ * Controls visibility of dashboard sharing controls.
6992
+ * Defaults to true unless explicitly disabled. This does not grant sharing
6993
+ * permissions when the current user cannot share the dashboard.
6994
+ */
6995
+ showDashboardSharing?: boolean;
6996
+ /**
6997
+ * Controls visibility of group-management controls.
6998
+ * Defaults to true unless explicitly disabled. This does not grant group
6999
+ * management permissions to the current user.
7000
+ */
7001
+ showGroupManagement?: boolean;
6953
7002
  /**
6954
7003
  * Effective project-level feature visibility projected by semaphor-app.
6955
7004
  * Project policy can disable features for every token; embed config can only
@@ -1755,6 +1755,14 @@ export declare type LoadingProps = {
1755
1755
 
1756
1756
  declare type LogicalOperator = 'AND' | 'OR';
1757
1757
 
1758
+ /**
1759
+ * A comparison input proven to be present in the card's executed filter set.
1760
+ * Ownership and UI coverage must consume this stage, never source inputs.
1761
+ */
1762
+ export declare type MaterializedDashboardDateComparisonInput = ResolvedDashboardDateComparisonInput & {
1763
+ effectiveFilterValue: TFilterValue;
1764
+ };
1765
+
1758
1766
  declare interface MetricColumn extends BaseColumn {
1759
1767
  role: 'metric';
1760
1768
  aggregate: AggregateFunction;
@@ -1957,6 +1965,20 @@ declare type RelativeDateFilter = {
1957
1965
  to: number;
1958
1966
  };
1959
1967
 
1968
+ export declare type ResolvedDashboardDateComparisonInput = {
1969
+ inputId: string;
1970
+ filterId: string;
1971
+ label: string;
1972
+ filter: TFilter;
1973
+ /**
1974
+ * The active value before execution-only canonicalization. Comparison
1975
+ * ownership uses this value as provenance evidence and must fail closed
1976
+ * when its filter or field identity does not match the definition.
1977
+ */
1978
+ filterValue?: TFilterValue;
1979
+ selection: GlobalDateComparisonSelection;
1980
+ };
1981
+
1960
1982
  export declare type ResolvedDashboardInput = {
1961
1983
  id: string;
1962
1984
  kind: 'filter' | 'control';
@@ -1985,6 +2007,7 @@ export declare type ResolvedDashboardInputContext = {
1985
2007
  controlValues: Record<string, unknown>;
1986
2008
  variablesByName: Record<string, ResolvedDashboardInput>;
1987
2009
  globalDateComparisonSelection?: GlobalDateComparisonSelection;
2010
+ dateComparisonInputs?: ResolvedDashboardDateComparisonInput[];
1988
2011
  variablesById: Record<string, ResolvedDashboardInput>;
1989
2012
  missingRequiredInputs: ResolvedDashboardInput[];
1990
2013
  };
@@ -2009,6 +2032,8 @@ declare type ResolvedPrimaryDateField = {
2009
2032
  entityName: string;
2010
2033
  entityType: string;
2011
2034
  dataType: string;
2035
+ /** Canonical dataset coordinates stamped by the temporal grounding boundary. */
2036
+ source?: SemaphorSourceRef;
2012
2037
  dateFormat?: string;
2013
2038
  customFormat?: string;
2014
2039
  defaultGranularity?: TimeGranularity;
@@ -2350,6 +2350,14 @@ export declare type LoadingProps = {
2350
2350
 
2351
2351
  export declare type LogicalOperator = 'AND' | 'OR';
2352
2352
 
2353
+ /**
2354
+ * A comparison input proven to be present in the card's executed filter set.
2355
+ * Ownership and UI coverage must consume this stage, never source inputs.
2356
+ */
2357
+ export declare type MaterializedDashboardDateComparisonInput = ResolvedDashboardDateComparisonInput & {
2358
+ effectiveFilterValue: TFilterValue;
2359
+ };
2360
+
2353
2361
  declare type MatrixAxisLevelDescriptor = {
2354
2362
  instanceId: string;
2355
2363
  fieldKey: string;
@@ -2889,6 +2897,20 @@ export declare type RelativeDateFilter = {
2889
2897
 
2890
2898
  export declare type RelativeDateUnit = DateUnit | SubDayDateUnit;
2891
2899
 
2900
+ export declare type ResolvedDashboardDateComparisonInput = {
2901
+ inputId: string;
2902
+ filterId: string;
2903
+ label: string;
2904
+ filter: TFilter;
2905
+ /**
2906
+ * The active value before execution-only canonicalization. Comparison
2907
+ * ownership uses this value as provenance evidence and must fail closed
2908
+ * when its filter or field identity does not match the definition.
2909
+ */
2910
+ filterValue?: TFilterValue;
2911
+ selection: GlobalDateComparisonSelection;
2912
+ };
2913
+
2892
2914
  export declare type ResolvedDashboardInput = {
2893
2915
  id: string;
2894
2916
  kind: 'filter' | 'control';
@@ -2917,6 +2939,7 @@ export declare type ResolvedDashboardInputContext = {
2917
2939
  controlValues: Record<string, unknown>;
2918
2940
  variablesByName: Record<string, ResolvedDashboardInput>;
2919
2941
  globalDateComparisonSelection?: GlobalDateComparisonSelection;
2942
+ dateComparisonInputs?: ResolvedDashboardDateComparisonInput[];
2920
2943
  variablesById: Record<string, ResolvedDashboardInput>;
2921
2944
  missingRequiredInputs: ResolvedDashboardInput[];
2922
2945
  };
@@ -2941,6 +2964,8 @@ declare type ResolvedPrimaryDateField = {
2941
2964
  entityName: string;
2942
2965
  entityType: string;
2943
2966
  dataType: string;
2967
+ /** Canonical dataset coordinates stamped by the temporal grounding boundary. */
2968
+ source?: SemaphorSourceRef;
2944
2969
  dateFormat?: string;
2945
2970
  customFormat?: string;
2946
2971
  defaultGranularity?: TimeGranularity;
@@ -4669,6 +4694,24 @@ export declare type UIConfig = {
4669
4694
  * If unset, runtime falls back to `showBriefings`; if both are unset, briefings are visible.
4670
4695
  */
4671
4696
  showBriefings?: boolean;
4697
+ /**
4698
+ * Controls visibility of the Dashboard Hub navigation control.
4699
+ * Defaults to true unless explicitly disabled. This does not grant access
4700
+ * to the dashboard hub when the token identity cannot navigate there.
4701
+ */
4702
+ showDashboardHub?: boolean;
4703
+ /**
4704
+ * Controls visibility of dashboard sharing controls.
4705
+ * Defaults to true unless explicitly disabled. This does not grant sharing
4706
+ * permissions when the current user cannot share the dashboard.
4707
+ */
4708
+ showDashboardSharing?: boolean;
4709
+ /**
4710
+ * Controls visibility of group-management controls.
4711
+ * Defaults to true unless explicitly disabled. This does not grant group
4712
+ * management permissions to the current user.
4713
+ */
4714
+ showGroupManagement?: boolean;
4672
4715
  /**
4673
4716
  * Effective project-level feature visibility projected by semaphor-app.
4674
4717
  * Project policy can disable features for every token; embed config can only
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "email": "support@semaphor.cloud"
6
6
  },
7
7
  "license": "MIT",
8
- "version": "0.1.425",
8
+ "version": "0.1.427",
9
9
  "description": "Fully interactive and customizable dashboards for your apps.",
10
10
  "keywords": [
11
11
  "react",