react-semaphor 0.1.381 → 0.1.383

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 (86) hide show
  1. package/DATA_APP_SDK.md +238 -0
  2. package/README.md +7 -0
  3. package/dist/analytics-protocol/index.cjs +1 -1
  4. package/dist/analytics-protocol/index.js +45 -41
  5. package/dist/brand-studio/index.cjs +4 -4
  6. package/dist/brand-studio/index.js +28 -28
  7. package/dist/chunks/analyze-result-contract-CtXfp3nv.js +1 -0
  8. package/dist/chunks/analyze-result-contract-DuhlklhI.js +102 -0
  9. package/dist/chunks/{braces-DOxxfERN.js → braces--20GzUQh.js} +1 -1
  10. package/dist/chunks/{braces-BT-ZyB-g.js → braces-C0Vh_Mft.js} +1 -1
  11. package/dist/chunks/{calendar-preferences-dialog-Dsgs8WDv.js → calendar-preferences-dialog-B-VsxhsA.js} +4 -4
  12. package/dist/chunks/calendar-preferences-dialog-DE67Z3oQ.js +1 -0
  13. package/dist/chunks/catalog-field-grounding-Bnx-3tE0.js +1 -0
  14. package/dist/chunks/catalog-field-grounding-CJKAqtiC.js +100 -0
  15. package/dist/chunks/{dashboard-briefing-launcher-Coks66cV.js → dashboard-briefing-launcher-BIj3X7b3.js} +108 -107
  16. package/dist/chunks/dashboard-briefing-launcher-Czx6BcXW.js +80 -0
  17. package/dist/chunks/dashboard-controls-BP-DcPFs.js +52 -0
  18. package/dist/chunks/{dashboard-controls-BfkcnIdy.js → dashboard-controls-BXxucM4f.js} +115 -114
  19. package/dist/chunks/dashboard-json-BNwshkK2.js +1 -0
  20. package/dist/chunks/{dashboard-json-DjXi4cI6.js → dashboard-json-C6oZuipD.js} +9 -9
  21. package/dist/chunks/edit-dashboard-visual-BAprin3J.js +178 -0
  22. package/dist/chunks/{edit-dashboard-visual-DOW1Ap1N.js → edit-dashboard-visual-CmfrI_L3.js} +1278 -1277
  23. package/dist/chunks/{index-CkoRCh3g.js → index-4W_ElSBJ.js} +219 -239
  24. package/dist/chunks/{index-DlprYjr6.js → index-icb12JV1.js} +900 -952
  25. package/dist/chunks/{layout-grid-DccceHv4.js → layout-grid-B7-klXiK.js} +1 -1
  26. package/dist/chunks/{layout-grid-DTbOIOsE.js → layout-grid-DV89AC9_.js} +1 -1
  27. package/dist/chunks/operators-C8TxpM4C.js +48 -0
  28. package/dist/chunks/operators-DrTQsJXv.js +1 -0
  29. package/dist/chunks/{palette-DCzLwqIw.js → palette-5IwhMbSF.js} +1 -1
  30. package/dist/chunks/{palette-SimHJELn.js → palette-Dj-dgPYh.js} +1 -1
  31. package/dist/chunks/{save-zNVYH02T.js → save-16C6YSW2.js} +1 -1
  32. package/dist/chunks/{save-D2O96E5A.js → save-C5fwVdTF.js} +1 -1
  33. package/dist/chunks/search-0LmWwZzW.js +57 -0
  34. package/dist/chunks/search-Dq1Mbb03.js +21 -0
  35. package/dist/chunks/{source-identity-Dj3dryN9.js → source-identity-CN4xiyKJ.js} +5 -5
  36. package/dist/chunks/{switch-DMPsMpHW.js → switch-DUdaHFZQ.js} +2328 -2414
  37. package/dist/chunks/{switch-Jhyl63RF.js → switch-bdJp0Bkw.js} +29 -54
  38. package/dist/chunks/use-create-flow-overlay-state-BIHKf_XK.js +21 -0
  39. package/dist/chunks/{use-create-flow-overlay-state-r5JKyXU8.js → use-create-flow-overlay-state-YvqCp6Zo.js} +75 -75
  40. package/dist/chunks/{validators-CtNmgsvG.js → validators-CHPH6ORs.js} +641 -498
  41. package/dist/chunks/validators-lWo8m0Q7.js +1 -0
  42. package/dist/chunks/x-B_cx7LwM.js +26 -0
  43. package/dist/chunks/x-IdR_js6f.js +139 -0
  44. package/dist/dashboard/index.cjs +1 -1
  45. package/dist/dashboard/index.js +1 -1
  46. package/dist/dashboard-authoring/index.cjs +3 -3
  47. package/dist/dashboard-authoring/index.js +105 -92
  48. package/dist/data-app-builder/index.cjs +23 -23
  49. package/dist/data-app-builder/index.js +17 -15
  50. package/dist/data-app-sdk/index.cjs +68 -1
  51. package/dist/data-app-sdk/index.js +2731 -384
  52. package/dist/data-app-sdk-adapters/index.cjs +1 -0
  53. package/dist/data-app-sdk-adapters/index.js +383 -0
  54. package/dist/data-app-sdk-validation/index.cjs +1 -1
  55. package/dist/data-app-sdk-validation/index.js +1073 -6
  56. package/dist/index.cjs +1 -1
  57. package/dist/index.js +15 -15
  58. package/dist/surfboard/index.cjs +1 -1
  59. package/dist/surfboard/index.js +2 -2
  60. package/dist/types/analytics-protocol.d.ts +58 -31
  61. package/dist/types/dashboard-assistant.d.ts +40 -15
  62. package/dist/types/dashboard-authoring.d.ts +36 -16
  63. package/dist/types/dashboard.d.ts +8 -8
  64. package/dist/types/data-app-builder.d.ts +35 -11
  65. package/dist/types/data-app-sdk-adapters.d.ts +733 -0
  66. package/dist/types/data-app-sdk-validation.d.ts +85 -25
  67. package/dist/types/data-app-sdk.d.ts +217 -147
  68. package/dist/types/main.d.ts +35 -11
  69. package/dist/types/shared.d.ts +8 -8
  70. package/dist/types/surfboard.d.ts +8 -8
  71. package/dist/types/types.d.ts +8 -8
  72. package/package.json +9 -2
  73. package/src/data-app-sdk/README.md +240 -0
  74. package/dist/chunks/calendar-preferences-dialog-iZs8XqyH.js +0 -1
  75. package/dist/chunks/catalog-field-grounding-8L9I0zdg.js +0 -1
  76. package/dist/chunks/catalog-field-grounding-BK4BX8sZ.js +0 -200
  77. package/dist/chunks/dashboard-briefing-launcher-B5vPTl8P.js +0 -80
  78. package/dist/chunks/dashboard-controls-Dyqye6fh.js +0 -52
  79. package/dist/chunks/dashboard-json-CV_LnO9x.js +0 -1
  80. package/dist/chunks/edit-dashboard-visual-yinO0yU-.js +0 -178
  81. package/dist/chunks/index-BxM99sFL.js +0 -1
  82. package/dist/chunks/index-CuHybtft.js +0 -51
  83. package/dist/chunks/use-create-flow-overlay-state-NsqFPwdB.js +0 -21
  84. package/dist/chunks/validation-BM3-ShHV.js +0 -1003
  85. package/dist/chunks/validation-BVpqRFar.js +0 -1
  86. package/dist/chunks/validators-jpoYhpHh.js +0 -1
@@ -1,5 +1,6 @@
1
- import { Context } from 'react';
1
+ import { CSSProperties } from 'react';
2
2
  import { JSX } from 'react/jsx-runtime';
3
+ import { ReactElement } from 'react';
3
4
  import { ReactNode } from 'react';
4
5
 
5
6
  /**
@@ -37,7 +38,7 @@ export declare function defineSemaphorDataApp<TDefinition extends SemaphorDataAp
37
38
 
38
39
  export declare function defineSemaphorInput<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorInputSpec<TValue>): SemaphorInputSpec<TValue>;
39
40
 
40
- export declare function hasSemaphorInputValue(value: unknown): boolean;
41
+ export declare function isSemaphorInputValueValidForOptions(value: SemaphorInputValue | undefined, options: SemaphorInputOption[] | undefined): boolean;
41
42
 
42
43
  declare type MatrixAxisLevelDescriptor = {
43
44
  instanceId: string;
@@ -358,25 +359,19 @@ declare type MatrixWarning = {
358
359
  severity?: 'info' | 'warning' | 'error';
359
360
  };
360
361
 
361
- export declare function normalizeSemaphorAnalysisPayload(payload: SemaphorAnalysisPayload | undefined | null): SemaphorAnalysisPayload;
362
-
363
- export declare function normalizeSemaphorAnalysisQueryOptions(value: unknown, options?: {
364
- pathPrefix?: string;
365
- validateTimezone?: SemaphorAnalysisTimezoneValidator;
366
- }): SemaphorAnalysisQueryOptionsValidationResult;
367
-
368
- export declare function normalizeSemaphorInputOptions(options?: Array<{
369
- label: string;
370
- value: SemaphorOptionValue;
371
- } | SemaphorOptionValue>): {
372
- label: string;
373
- value: SemaphorOptionValue;
374
- }[];
375
-
376
- export declare function readWindowRuntime(): SemaphorDataAppWindowRuntime | undefined;
377
-
378
362
  export declare const semaphor: {
363
+ source: {
364
+ semantic(spec: SemaphorSemanticSourceBuilderSpec): SemaphorSourceRef;
365
+ sql(spec: Omit<SemaphorSqlSourceBuilderSpec, "kind">): SemaphorSqlSourceBuilderSpec;
366
+ };
367
+ field: {
368
+ measure(name: string, spec?: SemaphorFieldBuilderSpec): SemaphorFieldWithRole<"measure">;
369
+ dimension(name: string, spec?: SemaphorFieldBuilderSpec): SemaphorFieldWithRole<"dimension">;
370
+ date(name: string, spec?: SemaphorFieldBuilderSpec): SemaphorFieldWithRole<"date">;
371
+ id(name: string, spec?: SemaphorFieldBuilderSpec): SemaphorFieldWithRole<"id">;
372
+ };
379
373
  filter<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: Omit<SemaphorFilterInputSpec<TValue>, "kind">): SemaphorFilterInputSpec<TValue>;
374
+ bindInput(input: SemaphorInputReference, binding: SemaphorBindInputSpec): SemaphorInputBindingReference;
380
375
  control<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorControlBuilderSpec<TValue>): SemaphorControlInputSpec<TValue>;
381
376
  sqlParam<TValue extends SemaphorSqlParameterValue = SemaphorSqlParameterValue>(spec: SemaphorSqlParamInputSpec<TValue>): SemaphorControlInputSpec<TValue>;
382
377
  derivedField(spec: Omit<SemaphorDerivedFieldDefinition, "kind"> & {
@@ -444,20 +439,6 @@ export declare type SemaphorAnalysisQueryOptions = {
444
439
  calendarContext?: CalendarContext;
445
440
  };
446
441
 
447
- export declare type SemaphorAnalysisQueryOptionsValidationIssue = {
448
- code: 'invalid_analysis_option';
449
- message: string;
450
- path: string;
451
- };
452
-
453
- export declare type SemaphorAnalysisQueryOptionsValidationResult = {
454
- ok: true;
455
- analysisOptions?: SemaphorAnalysisQueryOptions;
456
- } | {
457
- ok: false;
458
- issues: SemaphorAnalysisQueryOptionsValidationIssue[];
459
- };
460
-
461
442
  export declare type SemaphorAnalysisQueryResult = SemaphorQueryState & SemaphorAnalysisPayload & {
462
443
  id?: string;
463
444
  intent?: SemaphorMetricIntent;
@@ -475,8 +456,6 @@ export declare type SemaphorAnalysisResultSet = {
475
456
  rowCount?: number;
476
457
  };
477
458
 
478
- export declare type SemaphorAnalysisTimezoneValidator = (tz: string) => string | null;
479
-
480
459
  declare type SemaphorAnalyticsDiagnosticAnsweredItem = {
481
460
  slotId?: string;
482
461
  queryId?: string;
@@ -543,7 +522,7 @@ declare type SemaphorAnalyticsExecutionResult = {
543
522
 
544
523
  declare type SemaphorAnalyticsExecutionStatus = 'answered' | 'partial' | 'failed';
545
524
 
546
- declare type SemaphorAnalyticsFieldRole = 'metric' | 'dateField' | 'dimension' | 'input' | 'source' | 'sql';
525
+ declare type SemaphorAnalyticsFieldRole = 'measure' | 'date' | 'dimension' | 'input' | 'source' | 'sql';
547
526
 
548
527
  export declare type SemaphorAnalyticsFilter = SemaphorAnalyticsValueFilter | SemaphorAnalyticsNullFilter;
549
528
 
@@ -573,7 +552,7 @@ declare type SemaphorAnalyticsNullFilterOperator = 'is_null' | 'is_not_null';
573
552
 
574
553
  declare type SemaphorAnalyticsPopulation = {
575
554
  scope: 'filtered_query';
576
- metrics: Record<string, number | string | null>;
555
+ measures: Record<string, number | string | null>;
577
556
  };
578
557
 
579
558
  declare type SemaphorAnalyticsRepairHint = {
@@ -581,7 +560,7 @@ declare type SemaphorAnalyticsRepairHint = {
581
560
  message?: string;
582
561
  invalidField?: string;
583
562
  fieldRole?: SemaphorAnalyticsFieldRole;
584
- validMetricCandidates?: string[];
563
+ validMeasureCandidates?: string[];
585
564
  validDateCandidates?: string[];
586
565
  validDimensionCandidates?: string[];
587
566
  recommendedNextStep: string;
@@ -599,7 +578,7 @@ declare type SemaphorAnalyticsResultBase = {
599
578
  pagination?: SemaphorPaginationMetadata;
600
579
  };
601
580
 
602
- declare type SemaphorAnalyticsValidationCode = 'missing_source' | 'invalid_source_kind' | 'missing_semantic_domain' | 'missing_dataset_name' | 'missing_connection_id' | 'missing_table_name' | 'missing_sql' | 'missing_metric' | 'missing_record_fields' | 'missing_input_options_field' | 'invalid_metric' | 'invalid_metric_list' | 'invalid_date_field' | 'invalid_dimension' | 'invalid_metric_dimensions' | 'conflicting_sql' | 'sql_policy_violation' | 'unsupported_intent_for_adapter' | 'invalid_analytics_kind' | 'invalid_analytics_intent';
581
+ declare type SemaphorAnalyticsValidationCode = 'missing_source' | 'invalid_source_kind' | 'missing_semantic_domain' | 'missing_dataset_name' | 'missing_connection_id' | 'missing_table_name' | 'missing_sql' | 'missing_measure' | 'missing_record_fields' | 'missing_input_options_input_id' | 'missing_input_options_label_field' | 'missing_input_options_value_field' | 'invalid_input_options_dependencies' | 'invalid_input_options_population' | 'invalid_measure' | 'invalid_measure_list' | 'invalid_date_field' | 'invalid_dimension' | 'invalid_measure_dimensions' | 'conflicting_sql' | 'sql_policy_violation' | 'unsupported_intent_for_adapter' | 'invalid_analytics_kind' | 'invalid_analytics_intent';
603
582
 
604
583
  declare type SemaphorAnalyticsValidationIssue = SemaphorProtocolIssue & {
605
584
  code: SemaphorAnalyticsValidationCode | string;
@@ -627,6 +606,10 @@ export declare type SemaphorAppDerivedFieldsSpec = {
627
606
  derivedFields?: SemaphorDerivedFieldDefinition[];
628
607
  };
629
608
 
609
+ export declare type SemaphorBindInputSpec = Omit<SemaphorInputBinding, 'inputId'> & {
610
+ inputId?: string;
611
+ };
612
+
630
613
  declare type SemaphorCompiledQuery = {
631
614
  kind: 'config';
632
615
  queryId: string;
@@ -663,9 +646,14 @@ export declare type SemaphorControlInputSpec<TValue extends SemaphorInputValue =
663
646
  role: SemaphorControlRole;
664
647
  };
665
648
 
666
- export declare type SemaphorControlRole = 'grain' | 'metric' | 'dimension' | 'aggregation' | 'sqlParam';
649
+ export declare type SemaphorControlRole = 'grain' | 'measure' | 'dimension' | 'aggregation' | 'sqlParam';
667
650
 
668
- export declare const SemaphorDataAppContext: Context<SemaphorDataAppRuntime>;
651
+ export declare type SemaphorDataAppDebugConfig = boolean | {
652
+ enabled?: boolean;
653
+ exposeWindowBridge?: boolean;
654
+ maxQueries?: number;
655
+ maxEventsPerQuery?: number;
656
+ };
669
657
 
670
658
  export declare type SemaphorDataAppDefinition = {
671
659
  id?: string;
@@ -676,54 +664,93 @@ export declare type SemaphorDataAppDefinition = {
676
664
  views: SemaphorDataAppViewDefinition[];
677
665
  };
678
666
 
679
- export declare type SemaphorDataAppFieldCatalog = {
680
- source: SemaphorSourceRef;
681
- sourceAliases?: SemaphorSourceRef[];
682
- fields: SemaphorFieldRef[];
683
- };
684
-
685
- export declare function SemaphorDataAppProvider({ token, apiBaseUrl, executor, children, }: SemaphorDataAppProviderProps): JSX.Element;
686
-
687
- export declare type SemaphorDataAppProviderProps = SemaphorQueryExecutorContext & {
688
- executor?: SemaphorQueryExecutor;
689
- children: ReactNode;
667
+ export declare type SemaphorDataAppDevtoolsState = {
668
+ enabled: boolean;
669
+ queries: SemaphorDataAppTrace[];
670
+ getQuery(queryId: string): SemaphorDataAppTrace | undefined;
671
+ getQueries(queryId: string): SemaphorDataAppTrace[];
690
672
  };
691
673
 
692
- export declare type SemaphorDataAppQuerySpecEnvelope = {
693
- queryHook: 'useSemaphorQuery';
694
- spec: SemaphorQueryDefinition;
674
+ export declare type SemaphorDataAppDevtoolsWindowBridge = {
675
+ snapshot(): SemaphorDataAppDevtoolsState;
676
+ getQuery(queryId: string): SemaphorDataAppTrace | undefined;
677
+ getQueries(queryId: string): SemaphorDataAppTrace[];
695
678
  };
696
679
 
697
- export declare type SemaphorDataAppQueryValidation = {
698
- queryHook: SemaphorDataAppQuerySpecEnvelope['queryHook'];
699
- queryId?: string;
700
- intent?: SemaphorAnalyticsIntent;
701
- diagnostics: SemaphorDataAppValidationDiagnostic[];
702
- executionResult: SemaphorAnalyticsExecutionResult;
703
- };
680
+ export declare function SemaphorDataAppProvider({ token, apiBaseUrl, executor, debug, children, }: SemaphorDataAppProviderProps): JSX.Element;
704
681
 
705
- export declare type SemaphorDataAppRuntime = SemaphorQueryExecutorContext & {
682
+ export declare type SemaphorDataAppProviderProps = SemaphorQueryExecutorContext & {
706
683
  executor?: SemaphorQueryExecutor;
684
+ debug?: SemaphorDataAppDebugConfig;
685
+ children: ReactNode;
707
686
  };
708
687
 
709
- export declare type SemaphorDataAppValidationDiagnostic = {
710
- severity: 'error' | 'warning';
711
- code: 'invalid_query_spec' | 'invalid_analytics_intent' | 'invalid_source_ref' | 'missing_field' | 'unsupported_input_filter_composition' | string;
712
- message: string;
713
- path?: string;
714
- queryHook?: SemaphorDataAppQuerySpecEnvelope['queryHook'];
715
- queryId?: string;
716
- intentId?: string;
717
- source?: SemaphorSourceRef;
718
- field?: SemaphorFieldRef;
688
+ export declare type SemaphorDataAppTrace = {
689
+ traceId: string;
690
+ viewId?: string;
691
+ queryId: string;
692
+ queryLabel?: string;
693
+ queryKind: SemaphorQueryDefinition['queryKind'];
694
+ builder: 'semaphor.metric' | 'semaphor.records' | 'semaphor.matrix' | 'semaphor.analysis' | 'semaphor.inputOptions' | 'semaphor.sql';
695
+ sourceRefs: SemaphorSourceRef[];
696
+ projectionFieldRefs?: SemaphorFieldRef[];
697
+ inputFieldRefs?: SemaphorFieldRef[];
698
+ fieldRefs: SemaphorFieldRef[];
699
+ inputsApplied: Array<{
700
+ inputId: string;
701
+ fieldRef?: SemaphorFieldRef;
702
+ operator?: string;
703
+ valuePreview?: string;
704
+ }>;
705
+ latestAttempt?: {
706
+ requestId?: string;
707
+ status: SemaphorQueryStatus;
708
+ durationMs?: number;
709
+ rowCount?: number;
710
+ columnCount?: number;
711
+ cacheStatus?: 'hit' | 'miss' | 'unknown';
712
+ executionResult?: SemaphorAnalyticsExecutionResult;
713
+ errorMessage?: string;
714
+ };
715
+ recentEvents: SemaphorDataAppTraceEvent[];
716
+ server?: {
717
+ compiledSql?: string;
718
+ dialect?: string;
719
+ sqlHash?: string;
720
+ executionPlanSummary?: string;
721
+ };
722
+ clientWarnings: string[];
719
723
  };
720
724
 
721
- export declare type SemaphorDataAppValidationResult = {
722
- ok: boolean;
723
- diagnostics: SemaphorDataAppValidationDiagnostic[];
724
- queries: SemaphorDataAppQueryValidation[];
725
- intents: SemaphorAnalyticsIntent[];
726
- executionResults: SemaphorAnalyticsExecutionResult[];
725
+ export declare type SemaphorDataAppTraceEvent = {
726
+ type: 'query_started';
727
+ queryId: string;
728
+ requestId?: string;
729
+ at: string;
730
+ } | {
731
+ type: 'query_succeeded';
732
+ queryId: string;
733
+ requestId?: string;
734
+ at: string;
735
+ rowCount?: number;
736
+ durationMs?: number;
737
+ } | {
738
+ type: 'query_failed';
739
+ queryId: string;
740
+ requestId?: string;
741
+ at: string;
742
+ errorMessage: string;
743
+ } | {
744
+ type: 'query_ignored_stale';
745
+ queryId: string;
746
+ requestId?: string;
747
+ at: string;
748
+ reason: 'newer_inputs' | 'unmounted' | 'superseded';
749
+ } | {
750
+ type: 'input_changed';
751
+ inputId: string;
752
+ at: string;
753
+ valuePreview?: string;
727
754
  };
728
755
 
729
756
  export declare type SemaphorDataAppViewDefinition<TQuery extends SemaphorQueryDefinition = SemaphorQueryDefinition> = {
@@ -734,14 +761,6 @@ export declare type SemaphorDataAppViewDefinition<TQuery extends SemaphorQueryDe
734
761
  inputs?: SemaphorInputReference[];
735
762
  };
736
763
 
737
- declare type SemaphorDataAppWindowRuntime = {
738
- apiBaseUrl?: string;
739
- dataApiBaseUrl?: string;
740
- authToken?: null | {
741
- accessToken?: string;
742
- };
743
- };
744
-
745
764
  declare type SemaphorDerivedFieldAggregationBehavior = 'additive' | 'non_additive' | 'ratio_of_sums' | 'weighted' | 'pre_aggregated' | 'snapshot';
746
765
 
747
766
  declare type SemaphorDerivedFieldAggregationStrategy = 'default' | 'symmetric_aggregate' | 'aggregate_then_join' | 'weighted';
@@ -770,15 +789,29 @@ declare type SemaphorDerivedFieldInput = {
770
789
  kind: 'field';
771
790
  field: SemaphorFieldRef;
772
791
  aggregate?: SemaphorAggregateFunction;
773
- } | {
774
- kind: 'metric';
775
- metric: SemaphorFieldRef;
776
- } | {
777
- kind: 'dimension';
778
- dimension: SemaphorFieldRef;
779
792
  };
780
793
 
781
- declare type SemaphorDerivedFieldResultRole = 'measure' | 'group' | 'date' | 'id' | 'filter';
794
+ declare type SemaphorDerivedFieldResultRole = 'measure' | 'dimension' | 'date' | 'id' | 'unknown';
795
+
796
+ export declare function SemaphorDevtools({ buttonPosition, initialIsOpen, panelPosition, className, style, }?: SemaphorDevtoolsProps): ReactElement | null;
797
+
798
+ export declare function SemaphorDevtoolsInspectButton({ queryId, viewId, label, className, style, }?: SemaphorDevtoolsInspectButtonProps): ReactElement | null;
799
+
800
+ export declare type SemaphorDevtoolsInspectButtonProps = {
801
+ queryId?: string;
802
+ viewId?: string;
803
+ label?: string;
804
+ className?: string;
805
+ style?: CSSProperties;
806
+ };
807
+
808
+ export declare type SemaphorDevtoolsProps = {
809
+ buttonPosition?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'relative';
810
+ initialIsOpen?: boolean;
811
+ panelPosition?: 'bottom' | 'right';
812
+ className?: string;
813
+ style?: CSSProperties;
814
+ };
782
815
 
783
816
  declare type SemaphorDialect = 'postgres' | 'mysql' | 'mssql' | 'snowflake' | 'clickhouse' | 'bigquery' | 'redshift' | 'duckdb' | 'sqlite' | 'unknown';
784
817
 
@@ -797,6 +830,8 @@ declare type SemaphorExplorerSourceRef = Extract<SemaphorSourceRef, {
797
830
  kind: 'physical';
798
831
  }>;
799
832
 
833
+ export declare type SemaphorFieldBuilderSpec = Omit<SemaphorFieldRef, 'name' | 'role'>;
834
+
800
835
  export declare type SemaphorFieldRef = {
801
836
  name: string;
802
837
  label?: string;
@@ -806,10 +841,15 @@ export declare type SemaphorFieldRef = {
806
841
  aggregate?: SemaphorAggregateFunction;
807
842
  };
808
843
 
844
+ declare type SemaphorFieldWithRole<TRole extends NonNullable<SemaphorFieldRef['role']>> = SemaphorFieldRef & {
845
+ role: TRole;
846
+ };
847
+
809
848
  export declare type SemaphorFilterInputSpec<TValue extends SemaphorInputValue = SemaphorInputValue> = SemaphorInputBase<TValue> & {
810
849
  kind: 'filter';
811
850
  field: SemaphorQueryField;
812
- operator?: SemaphorInputOperatorInput;
851
+ operator?: SemaphorInputOperator;
852
+ relationshipHint?: SemaphorInputBinding['relationshipHint'];
813
853
  multi?: boolean;
814
854
  };
815
855
 
@@ -824,12 +864,17 @@ declare type SemaphorInputBase<TValue extends SemaphorInputValue> = {
824
864
  options?: Array<SemaphorInputOption | SemaphorOptionValue>;
825
865
  };
826
866
 
827
- declare type SemaphorInputBinding = {
867
+ export declare type SemaphorInputBinding = {
828
868
  inputId: string;
829
869
  kind?: 'filter' | 'control';
830
- controlRole?: 'grain' | 'metric' | 'dimension' | 'aggregation' | 'sqlParam';
870
+ controlRole?: 'grain' | 'measure' | 'dimension' | 'aggregation' | 'sqlParam';
831
871
  operator?: SemaphorInputOperator;
832
872
  field?: SemaphorFieldRef;
873
+ relationshipHint?: SemaphorRelationshipHint;
874
+ };
875
+
876
+ export declare type SemaphorInputBindingReference<TValue extends SemaphorInputValue = SemaphorInputValue> = {
877
+ toAnalyticsInput(): SemaphorActiveInput<TValue>;
833
878
  };
834
879
 
835
880
  export declare type SemaphorInputHandle<TValue extends SemaphorInputValue = SemaphorInputValue> = {
@@ -838,6 +883,7 @@ export declare type SemaphorInputHandle<TValue extends SemaphorInputValue = Sema
838
883
  label?: string;
839
884
  field?: SemaphorFieldRef;
840
885
  operator?: SemaphorInputOperator;
886
+ relationshipHint?: SemaphorInputBinding['relationshipHint'];
841
887
  controlRole?: SemaphorControlRole;
842
888
  value: TValue | undefined;
843
889
  options: SemaphorInputOption[];
@@ -849,14 +895,11 @@ export declare type SemaphorInputHandle<TValue extends SemaphorInputValue = Sema
849
895
 
850
896
  export declare type SemaphorInputOperator = '=' | '!=' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'between' | 'not_between' | '>' | '>=' | '<' | '<=';
851
897
 
852
- declare type SemaphorInputOperatorAlias = 'eq' | 'equals' | 'not_equals' | 'neq' | 'not equal' | 'not equals' | 'not in' | 'like' | 'not_contains' | 'not contains' | 'not_like' | 'not like' | 'not_between' | 'not between';
853
-
854
- export declare type SemaphorInputOperatorInput = SemaphorInputOperator | SemaphorInputOperatorAlias;
855
-
856
898
  export declare type SemaphorInputOption = {
857
899
  label: string;
858
900
  value: SemaphorOptionValue;
859
901
  count?: number;
902
+ disambiguation?: string[];
860
903
  };
861
904
 
862
905
  declare type SemaphorInputOptionsIntent = {
@@ -864,10 +907,17 @@ declare type SemaphorInputOptionsIntent = {
864
907
  version?: SemaphorProtocolVersion;
865
908
  id?: string;
866
909
  label?: string;
910
+ inputId: string;
867
911
  source: SemaphorSourceRef;
868
- field: SemaphorFieldRef;
912
+ labelField: SemaphorFieldRef;
913
+ valueField: SemaphorFieldRef;
914
+ searchField?: SemaphorFieldRef;
915
+ disambiguationFields?: SemaphorFieldRef[];
916
+ population?: SemaphorOptionPopulation;
917
+ dependencies?: SemaphorOptionDependencies;
869
918
  search?: string;
870
919
  limit?: number;
920
+ inputs?: SemaphorInputBinding[];
871
921
  derivedFields?: SemaphorDerivedFieldDefinition[];
872
922
  };
873
923
 
@@ -890,7 +940,14 @@ export declare type SemaphorInputOptionsQueryResult = SemaphorQueryState & Semap
890
940
  export declare type SemaphorInputOptionsQuerySpec = SemaphorQuerySourceSpec & SemaphorAppDerivedFieldsSpec & {
891
941
  id?: string;
892
942
  label?: string;
893
- field: SemaphorQueryField;
943
+ inputId: string;
944
+ labelField: SemaphorQueryField;
945
+ valueField: SemaphorQueryField;
946
+ searchField?: SemaphorQueryField;
947
+ disambiguationFields?: SemaphorQueryField[];
948
+ population?: SemaphorOptionPopulation;
949
+ dependencies?: SemaphorOptionDependencies;
950
+ inputs?: SemaphorInputReference[];
894
951
  search?: string;
895
952
  limit?: number;
896
953
  };
@@ -901,10 +958,11 @@ declare type SemaphorInputOptionsResult = SemaphorAnalyticsResultBase & {
901
958
  label: string;
902
959
  value: unknown;
903
960
  count?: number;
961
+ disambiguation?: string[];
904
962
  }>;
905
963
  };
906
964
 
907
- export declare type SemaphorInputReference = SemaphorInputSpec | SemaphorInputBinding | SemaphorActiveInput | SemaphorInputHandle;
965
+ export declare type SemaphorInputReference = SemaphorInputSpec | SemaphorInputBinding | SemaphorActiveInput | SemaphorInputHandle | SemaphorInputBindingReference;
908
966
 
909
967
  export declare type SemaphorInputSpec<TValue extends SemaphorInputValue = SemaphorInputValue> = SemaphorFilterInputSpec<TValue> | SemaphorControlInputSpec<TValue>;
910
968
 
@@ -970,6 +1028,7 @@ export declare type SemaphorMatrixIntent = {
970
1028
  values: SemaphorMatrixValueField[];
971
1029
  filters?: SemaphorAnalyticsFilter[];
972
1030
  inputs?: SemaphorInputBinding[];
1031
+ relationshipHint?: SemaphorRelationshipHint;
973
1032
  totals?: SemaphorMatrixTotalOptions;
974
1033
  sort?: SemaphorMatrixSortRule[];
975
1034
  expansion?: SemaphorMatrixExpansionOptions;
@@ -1134,8 +1193,8 @@ declare type SemaphorMetricIntent = {
1134
1193
  version?: SemaphorProtocolVersion;
1135
1194
  id?: string;
1136
1195
  source: SemaphorSourceRef;
1137
- metrics: SemaphorFieldRef[];
1138
- primaryMetric?: SemaphorFieldRef;
1196
+ measures: SemaphorFieldRef[];
1197
+ primaryMeasure?: SemaphorFieldRef;
1139
1198
  label?: string;
1140
1199
  dateField?: SemaphorFieldRef;
1141
1200
  timeGrain?: SemaphorTimeGrain;
@@ -1152,13 +1211,14 @@ declare type SemaphorMetricIntent = {
1152
1211
  direction: 'asc' | 'desc';
1153
1212
  };
1154
1213
  inputs?: SemaphorInputBinding[];
1214
+ relationshipHint?: SemaphorRelationshipHint;
1155
1215
  limit?: number;
1156
1216
  derivedFields?: SemaphorDerivedFieldDefinition[];
1157
1217
  };
1158
1218
 
1159
1219
  export declare type SemaphorMetricPayload = {
1160
1220
  value: number | string | null;
1161
- metrics?: Record<string, number | string | null>;
1221
+ measures?: Record<string, number | string | null>;
1162
1222
  comparisonValue?: number | string | null;
1163
1223
  delta?: number | null;
1164
1224
  deltaPercent?: number | null;
@@ -1178,14 +1238,15 @@ export declare type SemaphorMetricQueryResult = SemaphorQueryState & SemaphorMet
1178
1238
  export declare type SemaphorMetricQuerySpec = SemaphorQuerySourceSpec & SemaphorAppDerivedFieldsSpec & {
1179
1239
  id?: string;
1180
1240
  label?: string;
1181
- metrics: SemaphorNonEmptyArray<SemaphorQueryField>;
1182
- primaryMetric?: SemaphorQueryField;
1241
+ measures: SemaphorNonEmptyArray<SemaphorQueryField>;
1242
+ primaryMeasure?: SemaphorQueryField;
1183
1243
  dateField?: SemaphorQueryField;
1184
1244
  timeGrain?: SemaphorTimeGrain;
1185
1245
  dimensions?: SemaphorQueryField[];
1186
1246
  comparison?: SemaphorMetricComparison;
1187
1247
  orderBy?: SemaphorQueryOrderBy;
1188
1248
  inputs?: SemaphorInputReference[];
1249
+ relationshipHint?: SemaphorRelationshipHint;
1189
1250
  limit?: number;
1190
1251
  };
1191
1252
 
@@ -1202,6 +1263,21 @@ declare type SemaphorMetricResult = SemaphorAnalyticsResultBase & {
1202
1263
 
1203
1264
  export declare type SemaphorNonEmptyArray<T> = [T, ...T[]];
1204
1265
 
1266
+ export declare type SemaphorOptionDependencies = {
1267
+ mode?: 'auto' | 'independent' | 'explicit';
1268
+ includeInputIds?: string[];
1269
+ excludeInputIds?: string[];
1270
+ };
1271
+
1272
+ export declare type SemaphorOptionPopulation = {
1273
+ kind: 'option_source';
1274
+ baseSource?: never;
1275
+ } | {
1276
+ kind: 'related_population';
1277
+ baseSource: SemaphorSourceRef;
1278
+ relationshipHint?: SemaphorRelationshipHint;
1279
+ };
1280
+
1205
1281
  export declare type SemaphorOptionValue = string | number | boolean;
1206
1282
 
1207
1283
  export declare type SemaphorPaginationMetadata = {
@@ -1226,6 +1302,11 @@ declare type SemaphorProtocolIssue = {
1226
1302
 
1227
1303
  declare type SemaphorProtocolVersion = 1;
1228
1304
 
1305
+ export declare type SemaphorQueryDebugOptions = {
1306
+ viewId?: string;
1307
+ title?: string;
1308
+ };
1309
+
1229
1310
  export declare type SemaphorQueryDefinition = SemaphorMetricQueryDefinition | SemaphorAnalysisQueryDefinition | SemaphorRecordsQueryDefinition | SemaphorInputOptionsQueryDefinition | SemaphorSqlQueryDefinition | SemaphorMatrixQueryDefinition;
1230
1311
 
1231
1312
  export declare type SemaphorQueryExecutor = {
@@ -1260,6 +1341,7 @@ export declare type SemaphorQueryResultFor<TQuery extends SemaphorQueryDefinitio
1260
1341
 
1261
1342
  export declare type SemaphorQueryRuntimeOptions = {
1262
1343
  inputs?: SemaphorInputReference[];
1344
+ debug?: SemaphorQueryDebugOptions;
1263
1345
  };
1264
1346
 
1265
1347
  export declare type SemaphorQuerySourceSpec = {
@@ -1270,6 +1352,7 @@ export declare type SemaphorQueryState = {
1270
1352
  status: SemaphorQueryStatus;
1271
1353
  isLoading: boolean;
1272
1354
  error: Error | null;
1355
+ trace?: SemaphorDataAppTrace;
1273
1356
  };
1274
1357
 
1275
1358
  export declare type SemaphorQueryStatus = 'idle' | 'loading' | 'success' | 'error';
@@ -1283,6 +1366,7 @@ declare type SemaphorRecordsBaseQuerySpec = SemaphorQuerySourceSpec & SemaphorAp
1283
1366
  filters?: SemaphorAnalyticsFilter[];
1284
1367
  orderBy?: SemaphorRecordsOrderBy;
1285
1368
  inputs?: SemaphorInputReference[];
1369
+ relationshipHint?: SemaphorRelationshipHint;
1286
1370
  limit?: number;
1287
1371
  pagination?: SemaphorPaginationRequest;
1288
1372
  };
@@ -1309,6 +1393,7 @@ declare type SemaphorRecordsIntent = {
1309
1393
  direction: 'asc' | 'desc';
1310
1394
  };
1311
1395
  inputs?: SemaphorInputBinding[];
1396
+ relationshipHint?: SemaphorRelationshipHint;
1312
1397
  derivedFields?: SemaphorDerivedFieldDefinition[];
1313
1398
  };
1314
1399
 
@@ -1364,6 +1449,10 @@ declare type SemaphorRelationshipDiagnostics = {
1364
1449
 
1365
1450
  declare type SemaphorRelationshipDiagnosticStatus = 'not_required' | 'resolved' | 'missing' | 'ambiguous' | 'fanout_risk' | 'unknown';
1366
1451
 
1452
+ declare type SemaphorRelationshipHint = {
1453
+ relationshipIds?: string[];
1454
+ };
1455
+
1367
1456
  declare type SemaphorRelativeTimeWindow = {
1368
1457
  kind?: 'relative';
1369
1458
  unit: 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
@@ -1397,6 +1486,14 @@ export declare type SemaphorRowsQueryResult<TRecord extends Record<string, unkno
1397
1486
 
1398
1487
  export declare type SemaphorScalar = string | number | boolean | null;
1399
1488
 
1489
+ export declare type SemaphorSemanticSourceBuilderSpec = {
1490
+ domainId: string;
1491
+ datasetName: string;
1492
+ datasetId?: string;
1493
+ connectionId?: string;
1494
+ label?: string;
1495
+ };
1496
+
1400
1497
  declare type SemaphorSemanticSourceRef = Extract<SemaphorSourceRef, {
1401
1498
  kind: 'semantic';
1402
1499
  }>;
@@ -1491,6 +1588,10 @@ declare type SemaphorSqlResult = SemaphorAnalyticsResultBase & {
1491
1588
  };
1492
1589
  };
1493
1590
 
1591
+ export declare type SemaphorSqlSourceBuilderSpec = Extract<SemaphorSourceRef, {
1592
+ kind: 'sql';
1593
+ }>;
1594
+
1494
1595
  export declare type SemaphorSqlSourceSpec = {
1495
1596
  source: Extract<SemaphorSourceRef, {
1496
1597
  kind: 'sql';
@@ -1539,39 +1640,15 @@ declare type SemaphorValueFormat = {
1539
1640
  suffix?: string;
1540
1641
  };
1541
1642
 
1542
- export declare function toSemaphorActiveInputSnapshots(inputs: SemaphorInputReference[] | undefined): SemaphorActiveInput[];
1543
-
1544
- export declare function toSemaphorAnalysisIntent(spec: SemaphorAnalysisQuerySpec): SemaphorMetricIntent;
1545
-
1546
- export declare function toSemaphorAnalysisQueryOptions(spec: SemaphorAnalysisQuerySpec): SemaphorAnalysisQueryOptions;
1547
-
1548
- export declare function toSemaphorInputBinding(input: SemaphorInputReference): SemaphorInputBinding;
1549
-
1550
- export declare function toSemaphorInputBindings(inputs: SemaphorInputReference[] | undefined): SemaphorInputBinding[] | undefined;
1551
-
1552
- export declare function toSemaphorInputOptionsIntent(spec: SemaphorInputOptionsQuerySpec): Extract<SemaphorAnalyticsIntent, {
1553
- kind: 'inputOptions';
1554
- }>;
1555
-
1556
- export declare function toSemaphorInputSnapshots(inputs: SemaphorInputReference[] | undefined): SemaphorActiveInput[];
1557
-
1558
- export declare function toSemaphorInputSpec<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorInputSpec<TValue>): SemaphorInputBinding & {
1559
- kind: SemaphorInputSpec['kind'];
1560
- label?: string;
1561
- field?: SemaphorFieldRef;
1562
- operator?: SemaphorInputOperator;
1563
- controlRole?: SemaphorControlRole;
1564
- };
1565
-
1566
- export declare function toSemaphorMatrixIntent(spec: SemaphorMatrixQuerySpec): SemaphorMatrixIntent;
1567
-
1568
- export declare function toSemaphorMetricIntent(spec: SemaphorMetricQuerySpec): SemaphorMetricIntent;
1569
-
1570
- export declare function toSemaphorRecordsIntent(spec: SemaphorRecordsQuerySpec): SemaphorRecordsIntent;
1643
+ export declare function SemaphorViewBoundary({ id, title, children, }: {
1644
+ id: string;
1645
+ title?: string;
1646
+ children: ReactNode;
1647
+ }): ReactElement;
1571
1648
 
1572
- export declare function toSemaphorSqlIntent(spec: SemaphorSqlQuerySpec): SemaphorSqlIntent;
1649
+ export declare function useClearInvalidSemaphorInputValue(input: SemaphorInputHandle, optionsResult: Pick<SemaphorInputOptionsQueryResult, 'options' | 'status'> | undefined): void;
1573
1650
 
1574
- export declare function useSemaphorDataAppRuntime(): SemaphorDataAppRuntime;
1651
+ export declare function useSemaphorDevtools(): SemaphorDataAppDevtoolsState;
1575
1652
 
1576
1653
  export declare function useSemaphorInput<TValue extends SemaphorInputValue = SemaphorInputValue>(spec: SemaphorInputSpec<TValue>): SemaphorInputHandle;
1577
1654
 
@@ -1589,13 +1666,6 @@ export declare function useSemaphorQuery<TRecord extends Record<string, unknown>
1589
1666
 
1590
1667
  export declare function useSemaphorQuery(spec: SemaphorMatrixQueryDefinition, options?: SemaphorQueryRuntimeOptions): SemaphorMatrixQueryResult;
1591
1668
 
1592
- export declare function validateSemaphorDataAppQuerySpecs(input: {
1593
- queries: SemaphorDataAppQuerySpecEnvelope[];
1594
- fieldCatalogs?: SemaphorDataAppFieldCatalog[];
1595
- requireFieldCatalog?: boolean;
1596
- validateTimezone?: SemaphorAnalysisTimezoneValidator;
1597
- }): SemaphorDataAppValidationResult;
1598
-
1599
1669
  /**
1600
1670
  * Week start day type.
1601
1671
  * 0 = Sunday (US, Canada, Japan)