react-semaphor 0.1.453 → 0.1.455

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 (115) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +100 -99
  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-GHKFwThg.js → analyze-result-contract-BbRJ-C06.js} +1 -1
  8. package/dist/chunks/{analyze-result-contract-Dxw66nUG.cjs → analyze-result-contract-LPDNldic.cjs} +1 -1
  9. package/dist/chunks/canonical-result-keys-BA0HCP4e.cjs +1 -0
  10. package/dist/chunks/{canonical-result-keys-KLk__J_O.js → canonical-result-keys-D6avdjpA.js} +14 -13
  11. package/dist/chunks/{common-types-Ci66eflG.cjs → common-types-C57kJ59w.cjs} +1 -1
  12. package/dist/chunks/{common-types-F6qk6PPS.js → common-types-H51FLKB7.js} +1 -1
  13. package/dist/chunks/{dashboard-briefing-launcher-CFpX0WX3.js → dashboard-briefing-launcher-BgBMjAVe.js} +10 -10
  14. package/dist/chunks/{dashboard-briefing-launcher-mUXWuiOZ.cjs → dashboard-briefing-launcher-BmEHYblf.cjs} +1 -1
  15. package/dist/chunks/{dashboard-controls-SoNubIu1.cjs → dashboard-controls-BLNG_zHC.cjs} +1 -1
  16. package/dist/chunks/{dashboard-controls-BeYAmOJc.js → dashboard-controls-C-23EDdr.js} +10 -10
  17. package/dist/chunks/dashboard-date-comparison-definition-Ces4alFm.cjs +1 -0
  18. package/dist/chunks/{dashboard-date-comparison-definition-Ba-clViK.js → dashboard-date-comparison-definition-DC3ekV2S.js} +1 -1
  19. package/dist/chunks/{dashboard-json-BublPnQ4.cjs → dashboard-json-BJ_Z9EaL.cjs} +1 -1
  20. package/dist/chunks/{dashboard-json-DeLUagVV.js → dashboard-json-BTF-1Iwa.js} +8 -8
  21. package/dist/chunks/{edit-dashboard-visual-CrvPcO7A.cjs → edit-dashboard-visual-CR832BJc.cjs} +1 -1
  22. package/dist/chunks/{edit-dashboard-visual-Go0h82DR.js → edit-dashboard-visual-Mw-ZE7P7.js} +12 -12
  23. package/dist/chunks/{editor-action-buttons-1Lo0fIh7.cjs → editor-action-buttons-BVigIMg0.cjs} +1 -1
  24. package/dist/chunks/{editor-action-buttons-BFNtjFzO.js → editor-action-buttons-BxbFCerU.js} +6 -6
  25. package/dist/chunks/{index-BsH32bn1.js → index-B5Oy1eLv.js} +35305 -34883
  26. package/dist/chunks/index-C99Ow35Y.cjs +4 -0
  27. package/dist/chunks/{index-q12_nNUS.cjs → index-DIWJALWL.cjs} +231 -231
  28. package/dist/chunks/{index-B3ZugihZ.js → index-DrYILnh0.js} +799 -808
  29. package/dist/chunks/matrix-result-contract-CofATICL.js +437 -0
  30. package/dist/chunks/matrix-result-contract-zamd9euI.cjs +1 -0
  31. package/dist/chunks/{pivot-header-presentation-DcfPaCiy.cjs → pivot-header-presentation-DhyQXxKq.cjs} +1 -1
  32. package/dist/chunks/{pivot-header-presentation-nk604qc1.js → pivot-header-presentation-ckYOQ4aZ.js} +2 -2
  33. package/dist/chunks/{pivot-result-identity-CRUokNgm.cjs → pivot-result-identity-Bb4EixVN.cjs} +1 -1
  34. package/dist/chunks/{pivot-result-identity-C43Ai5Kr.js → pivot-result-identity-DU1v-5Xk.js} +1 -1
  35. package/dist/chunks/pivot-result-lifecycle-DmcF1ris.cjs +1 -0
  36. package/dist/chunks/{pivot-result-lifecycle-4kSe0Hk1.js → pivot-result-lifecycle-sjzIOpvp.js} +57 -58
  37. package/dist/chunks/{raw-temporal-contract-CxbRFwnd.cjs → raw-temporal-contract-BtjH_G-d.cjs} +1 -1
  38. package/dist/chunks/{raw-temporal-contract-BF7PjBY9.js → raw-temporal-contract-CxncLze5.js} +1 -1
  39. package/dist/chunks/{report-preferences-dialog-BEVZAE3m.cjs → report-preferences-dialog-BgE3Gzsp.cjs} +1 -1
  40. package/dist/chunks/{report-preferences-dialog-BNV7qXYH.js → report-preferences-dialog-CFenWkcH.js} +6 -6
  41. package/dist/chunks/{report-runtime-context-DjYqLV-c.cjs → report-runtime-context-DqxS4wbi.cjs} +1 -1
  42. package/dist/chunks/{report-runtime-context-BJQDu2fV.js → report-runtime-context-SM6YO61_.js} +5 -5
  43. package/dist/chunks/saved-temporal-bucket-format-CFfWXRl9.cjs +1 -0
  44. package/dist/chunks/{saved-temporal-bucket-format-DiZdQXOL.js → saved-temporal-bucket-format-SGAV0ivR.js} +33 -35
  45. package/dist/chunks/{switch-DgLwr7O-.js → switch-BeZW-HnS.js} +367 -369
  46. package/dist/chunks/{switch-CjJ6FHYJ.cjs → switch-D-CCcfhc.cjs} +28 -28
  47. package/dist/chunks/temporal-bucket-5UYEotyQ.js +810 -0
  48. package/dist/chunks/temporal-bucket-DHY1y9lq.cjs +1 -0
  49. package/dist/chunks/{temporal-bucket-authoring-FIRnJz0e.js → temporal-bucket-authoring-K1kE6R_z.js} +28 -27
  50. package/dist/chunks/temporal-bucket-authoring-o3Emn05L.cjs +1 -0
  51. package/dist/chunks/{temporal-bucket-contract-anl4h-vg.cjs → temporal-bucket-contract-D2-93DGr.cjs} +1 -1
  52. package/dist/chunks/{temporal-bucket-contract-BQOj6Frl.js → temporal-bucket-contract-D5d-xEl3.js} +1 -1
  53. package/dist/chunks/{token-types-D0i0IUX3.cjs → token-types-D7CaaI80.cjs} +1 -1
  54. package/dist/chunks/{token-types-CRpQJ4kv.js → token-types-GbxRUozo.js} +1 -1
  55. package/dist/chunks/{update-policy-C1i9bgsy.cjs → update-policy-BmiOd0PB.cjs} +1 -1
  56. package/dist/chunks/{update-policy-CaJz9aPG.js → update-policy-hednMF-0.js} +1 -1
  57. package/dist/chunks/validators-BDYprKI9.cjs +1 -0
  58. package/dist/chunks/{validators-DeMXwRON.js → validators-DEmd8Sin.js} +1544 -1200
  59. package/dist/dashboard/index.cjs +1 -1
  60. package/dist/dashboard/index.js +2 -2
  61. package/dist/dashboard-authoring/index.cjs +3 -3
  62. package/dist/dashboard-authoring/index.js +7 -7
  63. package/dist/data-app-builder/index.cjs +1 -1
  64. package/dist/data-app-builder/index.js +2 -2
  65. package/dist/data-app-codegen/index.cjs +1 -1
  66. package/dist/data-app-codegen/index.js +2 -2
  67. package/dist/data-app-codegen-node/index.cjs +1 -1
  68. package/dist/data-app-codegen-node/index.js +3 -3
  69. package/dist/data-app-sdk/index.cjs +1 -1
  70. package/dist/data-app-sdk/index.js +78 -77
  71. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  72. package/dist/data-app-sdk-adapters/index.js +29 -30
  73. package/dist/data-app-sdk-validation/index.cjs +1 -1
  74. package/dist/data-app-sdk-validation/index.js +21 -21
  75. package/dist/format-utils/index.cjs +3 -3
  76. package/dist/format-utils/index.js +39 -40
  77. package/dist/index.cjs +1 -1
  78. package/dist/index.js +15 -15
  79. package/dist/report-runtime-context/index.cjs +1 -1
  80. package/dist/report-runtime-context/index.js +2 -2
  81. package/dist/surfboard/index.cjs +1 -1
  82. package/dist/surfboard/index.js +3 -3
  83. package/dist/types/analytics-protocol.d.ts +44 -11
  84. package/dist/types/briefings.d.ts +9 -17
  85. package/dist/types/dashboard-assistant.d.ts +19 -22
  86. package/dist/types/dashboard-authoring.d.ts +9 -17
  87. package/dist/types/dashboard.d.ts +9 -17
  88. package/dist/types/data-app-builder.d.ts +28 -2
  89. package/dist/types/data-app-codegen-node.d.ts +29 -3
  90. package/dist/types/data-app-codegen.d.ts +29 -3
  91. package/dist/types/data-app-sdk-adapters.d.ts +28 -2
  92. package/dist/types/data-app-sdk-validation.d.ts +38 -7
  93. package/dist/types/data-app-sdk.d.ts +42 -10
  94. package/dist/types/index.cjs +1 -1
  95. package/dist/types/index.js +4 -4
  96. package/dist/types/main.d.ts +25 -26
  97. package/dist/types/shared.d.ts +9 -17
  98. package/dist/types/surfboard.d.ts +9 -17
  99. package/dist/types/types.d.ts +19 -22
  100. package/package.json +1 -1
  101. package/dist/chunks/canonical-result-keys-Drc2x-lf.cjs +0 -1
  102. package/dist/chunks/catalog-field-grounding-Bnx-3tE0.cjs +0 -1
  103. package/dist/chunks/catalog-field-grounding-S2jKwKGD.js +0 -100
  104. package/dist/chunks/dashboard-date-comparison-definition-DZq0htjG.cjs +0 -1
  105. package/dist/chunks/dashboard-input-contract-DSt8dGzP.js +0 -18
  106. package/dist/chunks/dashboard-input-contract-DV3cshjz.cjs +0 -1
  107. package/dist/chunks/index-DjiIh_9n.cjs +0 -4
  108. package/dist/chunks/metric-comparison-D0T0MKRK.js +0 -387
  109. package/dist/chunks/metric-comparison-DYR3RXam.cjs +0 -1
  110. package/dist/chunks/pivot-result-lifecycle-BiJepH5S.cjs +0 -1
  111. package/dist/chunks/saved-temporal-bucket-format-Gfbh4IiP.cjs +0 -1
  112. package/dist/chunks/temporal-bucket-Dnj8qT9l.cjs +0 -1
  113. package/dist/chunks/temporal-bucket-FBZGrDCe.js +0 -560
  114. package/dist/chunks/temporal-bucket-authoring-7hv2laOG.cjs +0 -1
  115. package/dist/chunks/validators-Dm7Kpz6p.cjs +0 -1
@@ -1006,11 +1006,6 @@ declare type DefaultDateFilter = RelativeDateFilter | FixedMonthDefaultDateFilte
1006
1006
  */
1007
1007
  declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1008
1008
  role: 'detail';
1009
- /**
1010
- * Query transport policy for ungrouped temporal values. This marker is
1011
- * projected into executable config and is never persisted authoring state.
1012
- */
1013
- dateValueMode?: 'canonical' | 'formatted';
1014
1009
  dateFormat?: DateFormatValue;
1015
1010
  customFormat?: string;
1016
1011
  /**
@@ -1776,11 +1771,6 @@ declare interface GroupByColumn extends BaseColumn {
1776
1771
  declare interface GroupByField extends Field {
1777
1772
  role: 'groupby';
1778
1773
  granularity?: TimeGranularity;
1779
- /**
1780
- * Query transport policy for grouped temporal values. This is projected
1781
- * into executable card config and is not persisted authoring state.
1782
- */
1783
- dateValueMode?: 'canonical' | 'formatted';
1784
1774
  /**
1785
1775
  * Optional SQL expression for grouping (e.g., DATE_TRUNC('month', order_date)).
1786
1776
  * If present, used in SELECT and GROUP BY instead of just the column name.
@@ -2182,11 +2172,6 @@ declare interface PivotByField extends Field {
2182
2172
  * so existing cards need no migration.
2183
2173
  */
2184
2174
  memberOrder?: PivotMemberOrder;
2185
- /**
2186
- * Query transport policy for grouped temporal pivot members. This is
2187
- * projected into executable config and is never persisted authoring state.
2188
- */
2189
- dateValueMode?: 'canonical' | 'formatted';
2190
2175
  }
2191
2176
 
2192
2177
  /**
@@ -2594,6 +2579,8 @@ declare type SemaphorMatrixAxisLevel = {
2594
2579
  id?: string;
2595
2580
  field: SemaphorFieldRef;
2596
2581
  grain?: SemaphorMatrixTimeGrain;
2582
+ format?: TemporalBucketFormat;
2583
+ semanticTemporalPresentation?: SemaphorMatrixSemanticTemporalPresentation;
2597
2584
  label?: string;
2598
2585
  subtotal?: boolean | SemaphorMatrixSubtotalOptions;
2599
2586
  sortBy?: SemaphorMatrixAxisSortRule;
@@ -2602,7 +2589,7 @@ declare type SemaphorMatrixAxisLevel = {
2602
2589
  declare type SemaphorMatrixAxisSortRule = {
2603
2590
  direction: 'asc' | 'desc';
2604
2591
  by: {
2605
- kind: 'label';
2592
+ kind: 'member';
2606
2593
  } | {
2607
2594
  kind: 'field';
2608
2595
  field: SemaphorFieldRef;
@@ -2657,12 +2644,17 @@ declare type SemaphorMatrixMemberPathSegment = {
2657
2644
  value: unknown;
2658
2645
  };
2659
2646
 
2647
+ declare type SemaphorMatrixSemanticTemporalPresentation = {
2648
+ granularity: SemaphorMatrixTimeGrain;
2649
+ format: TemporalBucketFormat;
2650
+ };
2651
+
2660
2652
  declare type SemaphorMatrixSortRule = {
2661
2653
  axis: 'row' | 'column';
2662
2654
  targetId?: string;
2663
2655
  direction: 'asc' | 'desc';
2664
2656
  by: {
2665
- kind: 'label';
2657
+ kind: 'member';
2666
2658
  } | {
2667
2659
  kind: 'field';
2668
2660
  field: SemaphorFieldRef;
@@ -1544,11 +1544,6 @@ export declare type DeleteBriefingRunResponse = {
1544
1544
  */
1545
1545
  export declare interface DetailField extends Omit<Field, 'role' | 'granularity'> {
1546
1546
  role: 'detail';
1547
- /**
1548
- * Query transport policy for ungrouped temporal values. This marker is
1549
- * projected into executable config and is never persisted authoring state.
1550
- */
1551
- dateValueMode?: 'canonical' | 'formatted';
1552
1547
  dateFormat?: DateFormatValue;
1553
1548
  customFormat?: string;
1554
1549
  /**
@@ -2376,11 +2371,6 @@ declare interface GroupByColumn extends BaseColumn {
2376
2371
  export declare interface GroupByField extends Field {
2377
2372
  role: 'groupby';
2378
2373
  granularity?: TimeGranularity;
2379
- /**
2380
- * Query transport policy for grouped temporal values. This is projected
2381
- * into executable card config and is not persisted authoring state.
2382
- */
2383
- dateValueMode?: 'canonical' | 'formatted';
2384
2374
  /**
2385
2375
  * Optional SQL expression for grouping (e.g., DATE_TRUNC('month', order_date)).
2386
2376
  * If present, used in SELECT and GROUP BY instead of just the column name.
@@ -2661,6 +2651,7 @@ declare type MatrixAxisLevelDescriptor = {
2661
2651
  label: string;
2662
2652
  field: SemaphorFieldRef;
2663
2653
  grain?: SemaphorMatrixTimeGrain;
2654
+ temporalBucket?: TemporalBucketMetadata;
2664
2655
  subtotal?: SemaphorMatrixSubtotalOptions;
2665
2656
  };
2666
2657
 
@@ -2735,7 +2726,8 @@ declare type MatrixFormattingContext = {
2735
2726
 
2736
2727
  declare type MatrixGridColumn = {
2737
2728
  id: string;
2738
- label: string;
2729
+ /** Present only for measure and explicit total headings. */
2730
+ label?: string;
2739
2731
  columnNodeId?: string;
2740
2732
  columnPath: MatrixMemberPathSegment[];
2741
2733
  measureInstanceId: string;
@@ -2744,7 +2736,8 @@ declare type MatrixGridColumn = {
2744
2736
 
2745
2737
  declare type MatrixGridHeaderCell = {
2746
2738
  id: string;
2747
- label: string;
2739
+ /** Present only for non-member headings and explicit total labels. */
2740
+ label?: string;
2748
2741
  role: 'rowHeader' | 'columnHeader' | 'measureHeader' | 'subtotal' | 'grandTotal';
2749
2742
  colSpan: number;
2750
2743
  rowSpan: number;
@@ -2806,7 +2799,8 @@ declare type MatrixMemberPathSegment = {
2806
2799
  instanceId: string;
2807
2800
  fieldKey: string;
2808
2801
  value: unknown;
2809
- label: string;
2802
+ /** Display-only source label for non-temporal members. */
2803
+ label?: string;
2810
2804
  };
2811
2805
 
2812
2806
  declare type MatrixNode = {
@@ -2814,7 +2808,8 @@ declare type MatrixNode = {
2814
2808
  axis: 'row' | 'column';
2815
2809
  path: MatrixMemberPathSegment[];
2816
2810
  level: number;
2817
- label: string;
2811
+ /** Present only for non-temporal members and explicit total labels. */
2812
+ label?: string;
2818
2813
  value: unknown;
2819
2814
  parentId?: string;
2820
2815
  hasChildren: boolean;
@@ -3069,11 +3064,6 @@ export declare interface PivotByField extends Field {
3069
3064
  * so existing cards need no migration.
3070
3065
  */
3071
3066
  memberOrder?: PivotMemberOrder;
3072
- /**
3073
- * Query transport policy for grouped temporal pivot members. This is
3074
- * projected into executable config and is never persisted authoring state.
3075
- */
3076
- dateValueMode?: 'canonical' | 'formatted';
3077
3067
  }
3078
3068
 
3079
3069
  export declare interface PivotColumnSchema {
@@ -3671,6 +3661,8 @@ declare type SemaphorMatrixAxisLevel = {
3671
3661
  id?: string;
3672
3662
  field: SemaphorFieldRef;
3673
3663
  grain?: SemaphorMatrixTimeGrain;
3664
+ format?: TemporalBucketFormat;
3665
+ semanticTemporalPresentation?: SemaphorMatrixSemanticTemporalPresentation;
3674
3666
  label?: string;
3675
3667
  subtotal?: boolean | SemaphorMatrixSubtotalOptions;
3676
3668
  sortBy?: SemaphorMatrixAxisSortRule;
@@ -3679,7 +3671,7 @@ declare type SemaphorMatrixAxisLevel = {
3679
3671
  declare type SemaphorMatrixAxisSortRule = {
3680
3672
  direction: 'asc' | 'desc';
3681
3673
  by: {
3682
- kind: 'label';
3674
+ kind: 'member';
3683
3675
  } | {
3684
3676
  kind: 'field';
3685
3677
  field: SemaphorFieldRef;
@@ -3736,7 +3728,7 @@ declare type SemaphorMatrixMemberPathSegment = {
3736
3728
 
3737
3729
  declare type SemaphorMatrixResult = SemaphorAnalyticsResultBase & {
3738
3730
  kind: 'matrix';
3739
- schemaVersion: 1;
3731
+ schemaVersion: 2;
3740
3732
  intent?: SemaphorMatrixIntent;
3741
3733
  shape: MatrixShape;
3742
3734
  capabilities: MatrixCapability[];
@@ -3758,12 +3750,17 @@ declare type SemaphorMatrixResult = SemaphorAnalyticsResultBase & {
3758
3750
  expansion?: MatrixExpansionResponseHints;
3759
3751
  };
3760
3752
 
3753
+ declare type SemaphorMatrixSemanticTemporalPresentation = {
3754
+ granularity: SemaphorMatrixTimeGrain;
3755
+ format: TemporalBucketFormat;
3756
+ };
3757
+
3761
3758
  declare type SemaphorMatrixSortRule = {
3762
3759
  axis: 'row' | 'column';
3763
3760
  targetId?: string;
3764
3761
  direction: 'asc' | 'desc';
3765
3762
  by: {
3766
- kind: 'label';
3763
+ kind: 'member';
3767
3764
  } | {
3768
3765
  kind: 'field';
3769
3766
  field: SemaphorFieldRef;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "email": "support@semaphor.cloud"
6
6
  },
7
7
  "license": "MIT",
8
- "version": "0.1.453",
8
+ "version": "0.1.455",
9
9
  "description": "Fully interactive and customizable dashboards for your apps.",
10
10
  "keywords": [
11
11
  "react",
@@ -1 +0,0 @@
1
- "use strict";require("./validators-Dm7Kpz6p.cjs");require("./analyze-result-contract-Dxw66nUG.cjs");const E=require("./metric-comparison-DYR3RXam.cjs"),_=new Set(["previous_period","same_period_last_year","start_vs_end","target"]),R=new Set([..._,"none",""]);function l(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function L(e){const o=l(e.preferences)?e.preferences:void 0,r=o&&l(o.kpiVisualOptions)?o.kpiVisualOptions:void 0,i=o&&l(o.tableVisualOptions)?o.tableVisualOptions:void 0;return{preferences:o,kpiOptions:r,kpiComparison:r&&l(r.metricComparison)?r.metricComparison:void 0,kpiComparisonPresent:!!r&&"metricComparison"in r,tableOptions:i,tableComparison:i&&l(i.metricComparison)?i.metricComparison:void 0,tableComparisonPresent:!!i&&"metricComparison"in i}}function O(e){const o=[],r=(i,a)=>{if(Array.isArray(i)){i.forEach((n,c)=>r(n,`${a}[${c}]`));return}if(!l(i))return;const m=i.config;if(l(m)){const n=L(i),c=!!(n.kpiComparisonPresent||n.tableComparisonPresent),g=m.metricColumns,p=Array.isArray(g)?g.flatMap((s,t)=>l(s)?[{index:t,metric:s}]:[]):[];if((p.some(({metric:s})=>"comparisonType"in s)||c)&&o.push({path:a,card:i,metrics:p,malformedMetricIndexes:Array.isArray(g)?g.flatMap((s,t)=>l(s)?[]:[t]):[],malformedMetricColumns:"metricColumns"in m&&!Array.isArray(g),hasLegacyPresentation:c}),"metricColumns"in m||c)return}Object.entries(i).forEach(([n,c])=>r(c,a?`${a}.${n}`:n))};return r(e,"$"),o}const I={difference:"difference",change:"percent_change",change_difference:"both",ratio:"ratio"};function w(e,o){if(!e)return;const r=Object.fromEntries(o.flatMap(i=>typeof e[i]=="string"?[[i,e[i]]]:[]));return Object.keys(r).length?r:void 0}function M(e,o,r){if(e!==void 0){if(!l(e)){r.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:o,message:"Legacy comparison formatOptions must be an object."});return}Object.entries(e).forEach(([i,a])=>{if(i==="decimalPlaces"){(typeof a!="number"||!Number.isInteger(a)||a<0||a>6)&&r.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${o}.decimalPlaces`,message:"Legacy comparison decimalPlaces must be an integer from 0 through 6."});return}i==="type"&&(a===void 0||a==="auto")||a!==void 0&&r.push({severity:"error",code:"unsupported_comparison_format",path:`${o}.${i}`,message:`Legacy comparison format option "${i}" has no canonical presentation mapping.`})})}}function v(e,o){const r=o==="kpi"?e.calculationType:e.calculatedAs,i=o==="table"&&r===void 0?"both":I[String(r)],a=l(e.formatOptions)?e.formatOptions:void 0,m=l(e.conditionalLabels)?e.conditionalLabels:void 0,n=l(o==="kpi"?e.colorConfig:e.colors)?o==="kpi"?e.colorConfig:e.colors:void 0,c={};if(i&&(c.displayMode=i),typeof(a==null?void 0:a.decimalPlaces)=="number"&&(c.precision=a.decimalPlaces),o==="kpi"){const s=e.showArrow!==!1,t=e.showColor!==!1;c.indicatorStyle=s?t?"arrow_badge":"arrow":t?"badge":"none",c.showColor=t,(e.position==="left"||e.position==="right"||e.position==="top")&&(c.position=e.position),typeof e.conditionalLabel=="boolean"&&(c.conditionalLabel=e.conditionalLabel),typeof e.labelName=="string"&&(c.labelName=e.labelName)}else(e.indicatorStyle==="arrow_badge"||e.indicatorStyle==="arrow"||e.indicatorStyle==="badge"||e.indicatorStyle==="none")&&(c.indicatorStyle=e.indicatorStyle);const g=m?{...w(m,["increase","decrease"]),...typeof m.noChange=="string"?{neutral:m.noChange}:typeof m.neutral=="string"?{neutral:m.neutral}:{}}:void 0;g&&Object.keys(g).length&&(c.conditionalLabels=g);const p=n?{...w(n,["increase","decrease"]),...typeof n.noChange=="string"?{neutral:n.noChange}:typeof n.neutral=="string"?{neutral:n.neutral}:{}}:void 0;return p&&Object.keys(p).length&&(c.colors=p),c}function $(e){return{...E.COMPARISON_PRESENTATION_DEFAULTS,...e}}function T(e){return e.some(({metric:o})=>o.comparisonType==="previous_period"||o.comparisonType==="same_period_last_year"||o.comparisonType==="target"?!0:l(o.comparison)&&o.comparison.mode==="explicit")}function C(e){const o=e.card.config;return e.metrics.length===2&&(o.groupByColumns===void 0||Array.isArray(o.groupByColumns)&&o.groupByColumns.length===0)}function P(e,o,r,i){const a=o==="kpi"?["enabled","calculationType","formatOptions","showArrow","showColor","conditionalLabel","labelName","position","conditionalLabels","colorConfig","lowerIsBetter"]:["calculatedAs","indicatorStyle","formatOptions","colors","lowerIsBetter"];Object.keys(e).forEach(s=>{a.includes(s)||i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${s}`,message:`Unknown legacy comparison presentation field "${s}" cannot be dropped automatically.`})});const m=o==="kpi"?"calculationType":"calculatedAs";e[m]!==void 0&&!I[String(e[m])]&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${m}`,message:`Legacy comparison ${m} is unsupported.`}),o==="kpi"&&e.position!==void 0&&!["left","right","top"].includes(String(e.position))&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.position`,message:"Legacy comparison position is unsupported."}),o==="kpi"&&e.labelName!==void 0&&typeof e.labelName!="string"&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.labelName`,message:"Legacy comparison labelName must be a string."}),(o==="kpi"?[["conditionalLabels",["increase","decrease","noChange"]],["colorConfig",["increase","decrease","noChange"]]]:[["colors",["increase","decrease","neutral"]]]).forEach(([s,t])=>{if(e[s]!==void 0){if(!l(e[s])){i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${s}`,message:`Legacy comparison ${s} must be an object.`});return}Object.entries(e[s]).forEach(([f,u])=>{t.includes(f)?typeof u!="string"&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${s}.${f}`,message:`Legacy comparison ${s}.${f} must be a string.`}):i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${s}.${f}`,message:`Unknown legacy comparison ${s} field "${f}" cannot be dropped automatically.`})})}}),(o==="kpi"?["enabled","showArrow","showColor","conditionalLabel","lowerIsBetter"]:["lowerIsBetter"]).forEach(s=>{e[s]!==void 0&&typeof e[s]!="boolean"&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.${s}`,message:`Legacy comparison ${s} must be a boolean.`})}),o==="table"&&e.indicatorStyle!==void 0&&!["arrow_badge","arrow","badge","none"].includes(String(e.indicatorStyle))&&i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${r}.indicatorStyle`,message:"Legacy comparison indicatorStyle is unsupported."}),M(e.formatOptions,`${r}.formatOptions`,i);const g=v(e,o);E.validateComparisonPresentationSpec(g,r).errors.forEach(s=>{i.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:s.path||r,message:s.message})})}function S(e){const o=L(e.card),r=o.kpiComparison?v(o.kpiComparison,"kpi"):void 0,i=o.tableComparison?v(o.tableComparison,"table"):void 0;return{namespaces:o,kpi:r,table:i,presentation:r||i}}function B(e){const o=l(e.preferences)?e.preferences:{},r=l(o.kpiVisualOptions)?o.kpiVisualOptions:{},i=l(r.metricComparison)?r.metricComparison:{},a=l(o.tableVisualOptions)?o.tableVisualOptions:{},m=l(a.metricComparison)?a.metricComparison:{};return r.lowerIsBetter===!0||i.lowerIsBetter===!0||m.lowerIsBetter===!0?"lower_is_better":"higher_is_better"}function D(e){switch(e.comparisonType){case"previous_period":return{mode:"explicit",spec:{kind:"previous_period"}};case"same_period_last_year":return{mode:"explicit",spec:{kind:"previous_year"}};case"target":return{mode:"explicit",spec:{kind:"target",targetValue:e.targetValue}};default:return}}function j(e){const o=l(e.preferences)?e.preferences:void 0;if(!o)return;const r=l(o.kpiVisualOptions)?o.kpiVisualOptions:void 0;r&&delete r.lowerIsBetter;const i=l(o.tableVisualOptions)?o.tableVisualOptions:void 0,a=i&&l(i.metricComparison)?i.metricComparison:void 0;a&&delete a.lowerIsBetter}function x(e){const o=O(e);if(!o.length)return{document:e,changed:!1,changes:[],diagnostics:[]};const r=[];if(o.forEach(n=>{var c,g,p,s;if(n.malformedMetricColumns&&r.push({severity:"error",code:"malformed_metric_columns",path:`${n.path}.config.metricColumns`,message:"Metric columns must be an array before comparison migration."}),n.malformedMetricIndexes.forEach(t=>{r.push({severity:"error",code:"malformed_metric_columns",path:`${n.path}.config.metricColumns[${t}]`,message:"Metric columns must contain objects before comparison migration."})}),n.metrics.forEach(({metric:t,index:f})=>{if(!("comparisonType"in t))return;const u=`${n.path}.config.metricColumns[${f}]`,d=String(t.comparisonType||"");"comparison"in t&&r.push({severity:"error",code:"conflicting_comparison_contracts",path:u,message:"Metric contains both legacy and canonical comparison configuration; resolve the conflict before migration."});const h=l(t.parameters)?t.parameters:void 0,b=h&&l(h.windowTransform)?h.windowTransform:void 0;_.has(d)&&(b==null?void 0:b.function)==="previous_period_delta"&&r.push({severity:"error",code:"conflicting_comparison_window_transform",path:u,message:"A metric cannot combine baseline comparison with previous_period_delta; resolve the authoring intent before migration."}),R.has(d)||r.push({severity:"error",code:"unsupported_comparison_type",path:`${u}.comparisonType`,message:`Unsupported legacy metric comparison type "${d}".`}),t.comparisonType==="target"&&(typeof t.targetValue!="number"||!Number.isFinite(t.targetValue))&&r.push({severity:"error",code:"invalid_target_value",path:`${u}.targetValue`,message:"Legacy target comparison requires a finite metric targetValue."}),t.comparisonType==="start_vs_end"&&r.push({severity:"error",code:"unsupported_start_vs_end",path:`${u}.comparisonType`,message:"start_vs_end is retired and cannot be migrated automatically."}),t.targetValue!==void 0&&t.comparisonType!=="target"&&r.push({severity:"warning",code:"stray_target_value",path:`${u}.targetValue`,message:"Dead non-target targetValue will be removed without changing the baseline."})}),n.hasLegacyPresentation){const{namespaces:t,kpi:f,table:u}=S(n),d=[(c=t.kpiOptions)==null?void 0:c.lowerIsBetter,(g=t.kpiComparison)==null?void 0:g.lowerIsBetter,(p=t.tableComparison)==null?void 0:p.lowerIsBetter].filter(h=>typeof h=="boolean");new Set(d).size>1&&r.push({severity:"error",code:"conflicting_legacy_polarity",path:`${n.path}.preferences`,message:"Legacy comparison polarity values disagree; resolve the conflict before migration."}),((s=t.kpiOptions)==null?void 0:s.lowerIsBetter)!==void 0&&typeof t.kpiOptions.lowerIsBetter!="boolean"&&r.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${n.path}.preferences.kpiVisualOptions.lowerIsBetter`,message:"Legacy comparison lowerIsBetter must be a boolean."}),t.kpiComparisonPresent&&!t.kpiComparison&&r.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${n.path}.preferences.kpiVisualOptions.metricComparison`,message:"Legacy KPI comparison presentation must be an object."}),t.tableComparisonPresent&&!t.tableComparison&&r.push({severity:"error",code:"invalid_legacy_comparison_presentation",path:`${n.path}.preferences.tableVisualOptions.metricComparison`,message:"Legacy table comparison presentation must be an object."}),"comparisonPresentation"in(t.preferences||{})&&r.push({severity:"error",code:"conflicting_comparison_presentation_contracts",path:`${n.path}.preferences.comparisonPresentation`,message:"Card contains both legacy and canonical comparison presentation; resolve the conflict before migration."}),t.kpiComparison&&typeof t.kpiComparison.enabled=="boolean"&&"metricPairComparisonEnabled"in(t.preferences||{})&&C(n)&&r.push({severity:"error",code:"conflicting_comparison_presentation_contracts",path:`${n.path}.preferences.metricPairComparisonEnabled`,message:"Card contains both legacy and canonical metric-pair enablement; resolve the conflict before migration."}),t.kpiComparison&&P(t.kpiComparison,"kpi",`${n.path}.preferences.kpiVisualOptions.metricComparison`,r),t.tableComparison&&P(t.tableComparison,"table",`${n.path}.preferences.tableVisualOptions.metricComparison`,r),f&&u&&JSON.stringify($(f))!==JSON.stringify($(u))&&r.push({severity:"error",code:"conflicting_legacy_presentation_namespaces",path:`${n.path}.preferences`,message:"KPI and table comparison presentation values disagree; resolve the conflict before migration."})}}),r.some(n=>n.severity==="error"))return{document:e,changed:!1,changes:[],diagnostics:r};const i=JSON.parse(JSON.stringify(e)),a=O(i),m=[];return a.forEach(n=>{var g;const c=B(n.card);if(n.metrics.forEach(({metric:p,index:s})=>{if(!("comparisonType"in p))return;const t=String(p.comparisonType||""),f=`${n.path}.config.metricColumns[${s}]`,u=D(p),d=["comparisonType"];delete p.comparisonType,"targetValue"in p&&(delete p.targetValue,d.push("targetValue")),"comparisonDisplay"in p&&(delete p.comparisonDisplay,d.push("comparisonDisplay")),u?p.comparison=u:delete p.comparison,_.has(t)&&(p.comparisonPolarity=c),m.push({kind:"metric",path:f,metricId:typeof p.id=="string"?p.id:void 0,legacyType:t,comparison:u,comparisonPolarity:_.has(t)?c:void 0,removedFields:d})}),j(n.card),n.hasLegacyPresentation){const{namespaces:p,presentation:s}=S(n),t=(g=p.kpiComparison)==null?void 0:g.enabled,f={...s};typeof t=="boolean"&&T(n.metrics)&&(f.showComparison=t);const u=typeof t=="boolean"&&C(n)?t:void 0,d=typeof t=="boolean"&&!T(n.metrics)&&!C(n)?["kpiVisualOptions.metricComparison.enabled"]:void 0,h=p.preferences,b=[];n.metrics.forEach(({metric:y})=>{"comparisonPolarity"in y||(y.comparisonPolarity=c,typeof y.id=="string"&&b.push(y.id))}),Object.keys(f).length&&(h.comparisonPresentation=f),u!==void 0&&(h.metricPairComparisonEnabled=u),p.kpiOptions&&delete p.kpiOptions.metricComparison,p.tableOptions&&delete p.tableOptions.metricComparison,m.push({kind:"presentation",path:`${n.path}.preferences`,comparisonPresentation:Object.keys(f).length?f:void 0,metricPairComparisonEnabled:u,comparisonPolarityMetricIds:b,intentionallyDiscardedFields:d,removedFields:[...p.kpiComparison?["kpiVisualOptions.metricComparison"]:[],...p.tableComparison?["tableVisualOptions.metricComparison"]:[]]})}}),{document:i,changed:!0,changes:m,diagnostics:r}}const k=["bar","horizontalBar","line","area","stackedArea","combo","stackedBar","stackedLine"],K=new Set(k);function V(e){return typeof e=="string"&&K.has(e)}function Y(e){return e==="detailTable"||e==="table"||e==="aggregateTable"||e==="pivotTable"||e==="custom"||V(e)}function A(e){return!!(e!=null&&e.trim())}function F(e){return A(e.sql)||A(e.normalizedPython)?"freeform":e.hasExecutableConfig?"config":"none"}const U="SEMAPHOR_CALCULATED_FIELD";function N(e,o,r){if(r&&(o==="groupby"||o==="pivotby"))return r;if(o==="metric"&&e.name==="*"&&!e.expression)return e.alias||"count";if(e.alias)return e.alias;const i=e.entityName&&e.entityName!==U?e.entityName:void 0;if(e.role==="metric"){let a=e.aggregate||"metric";if(e.expression){const m=e.expression.match(/^(COUNT|SUM|AVG|MIN|MAX|MEDIAN|DISTINCT)\s*\(/i);a=m?m[1].toLowerCase():"expr"}else a=a.toLowerCase();return i&&i!==e.name?`${i}_${e.name}_${a}`:`${e.name}_${a}`}return i&&i!==e.name?`${i}_${e.name}`:e.name}function H(e){return N(e,"detail")}function q(e){const o=e.label;return o&&e.labelCount===1&&(o===e.rawKey||!e.rawKeys.has(o))?o:e.rawKey}exports.SEMAPHOR_CARTESIAN_CHART_TYPES=k;exports.isSemaphorCartesianChartType=V;exports.resolveCanonicalDetailResultRawKey=H;exports.resolveCanonicalResultOutputKey=q;exports.resolveCanonicalResultRawKey=N;exports.resolveTemporalResultOwner=F;exports.supportsCanonicalDashboardTemporalResult=Y;exports.transformComparisonDocument=x;
@@ -1 +0,0 @@
1
- "use strict";function l(t){return typeof t=="string"?t.trim().toLowerCase():""}function f(t){return String(t.column_name||t.name||t.qualifiedFieldName||"")}function g(t){return Array.from(new Set([t.column_name,t.name,t.qualifiedFieldName,t.alias].filter(e=>typeof e=="string"&&e.trim().length>0).map(e=>e.trim())))}function d(t){const e=p(t);return e?e.includes("int")||e.includes("uint")||e.includes("bigint")||e.includes("smallint")||e.includes("tinyint")||e.includes("numeric")||e.includes("decimal")||e.includes("double")||e.includes("float")||e.includes("number")||e.includes("real")||e.includes("money")||e.includes("currency")||e.includes("percent")?"number":e.includes("timestamp")||e.includes("datetime")||e.startsWith("time")?"datetime":e.includes("date")?"date":e.includes("bool")?"boolean":"string":"unknown"}function p(t){let e=l(t),i="";for(;e&&e!==i;)i=e,e=y(e,"nullable"),e=y(e,"lowcardinality");return e}function y(t,e){const i=`${e}(`;return!t.startsWith(i)||!t.endsWith(")")?t:t.slice(i.length,-1).trim()}function A(t){const e=d(t);return e==="date"||e==="datetime"}function o(t){return A(t.dataType||t.data_type)}function u(t){const e=C(t);return e==="id"||e==="row_id"}function c(t){const e=C(t);return u(t)||e.endsWith("_id")||e.endsWith("_key")||e.endsWith("_number")}function C(t){return l(f(t)||t.name||t.alias).replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function m(t,e={}){const i=l(t.role);return i==="metric"||i==="measure"?!e.excludeIdentifiers||!c(t):i==="groupby"||i==="dimension"||i==="date"||i==="id"?!1:d(t.dataType||t.data_type)==="number"&&(!e.excludeIdentifiers||!c(t))}function D(t){return!m(t)&&!o(t)}function F(t){const e=new Set,i=new Set,s=new Set;for(const a of t){if(u(a))continue;const r=g(a);if(r.length!==0){if(o(a)){r.forEach(n=>i.add(n));continue}if(m(a,{excludeIdentifiers:!0})){r.forEach(n=>e.add(n));continue}r.forEach(n=>s.add(n))}}return{validMeasureCandidates:Array.from(e).sort(),validDateCandidates:Array.from(i).sort(),validDimensionCandidates:Array.from(s).sort()}}exports.buildAnalyticsCatalogFieldSummary=F;exports.getAnalyticsCatalogFieldCandidates=g;exports.getAnalyticsCatalogFieldName=f;exports.isAnalyticsCatalogDateField=o;exports.isAnalyticsCatalogDimensionField=D;exports.isAnalyticsCatalogMetricField=m;exports.isAnalyticsDateLikeDataType=A;exports.isAnalyticsMetricIdentifierField=c;exports.isAnalyticsTechnicalIdentifierField=u;exports.normalizeAnalyticsCatalogDataType=d;exports.normalizeAnalyticsCatalogName=l;
@@ -1,100 +0,0 @@
1
- function c(n) {
2
- return typeof n == "string" ? n.trim().toLowerCase() : "";
3
- }
4
- function g(n) {
5
- return String(n.column_name || n.name || n.qualifiedFieldName || "");
6
- }
7
- function p(n) {
8
- return Array.from(
9
- new Set(
10
- [
11
- n.column_name,
12
- n.name,
13
- n.qualifiedFieldName,
14
- n.alias
15
- ].filter(
16
- (e) => typeof e == "string" && e.trim().length > 0
17
- ).map((e) => e.trim())
18
- )
19
- );
20
- }
21
- function o(n) {
22
- const e = C(n);
23
- return e ? e.includes("int") || e.includes("uint") || e.includes("bigint") || e.includes("smallint") || e.includes("tinyint") || e.includes("numeric") || e.includes("decimal") || e.includes("double") || e.includes("float") || e.includes("number") || e.includes("real") || e.includes("money") || e.includes("currency") || e.includes("percent") ? "number" : e.includes("timestamp") || e.includes("datetime") || e.startsWith("time") ? "datetime" : e.includes("date") ? "date" : e.includes("bool") ? "boolean" : "string" : "unknown";
24
- }
25
- function C(n) {
26
- let e = c(n), t = "";
27
- for (; e && e !== t; )
28
- t = e, e = d(e, "nullable"), e = d(e, "lowcardinality");
29
- return e;
30
- }
31
- function d(n, e) {
32
- const t = `${e}(`;
33
- return !n.startsWith(t) || !n.endsWith(")") ? n : n.slice(t.length, -1).trim();
34
- }
35
- function A(n) {
36
- const e = o(n);
37
- return e === "date" || e === "datetime";
38
- }
39
- function u(n) {
40
- return A(n.dataType || n.data_type);
41
- }
42
- function m(n) {
43
- const e = f(n);
44
- return e === "id" || e === "row_id";
45
- }
46
- function l(n) {
47
- const e = f(n);
48
- return m(n) || e.endsWith("_id") || e.endsWith("_key") || e.endsWith("_number");
49
- }
50
- function f(n) {
51
- return c(
52
- g(n) || n.name || n.alias
53
- ).replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
54
- }
55
- function y(n, e = {}) {
56
- const t = c(n.role);
57
- return t === "metric" || t === "measure" ? !e.excludeIdentifiers || !l(n) : t === "groupby" || t === "dimension" || t === "date" || t === "id" ? !1 : o(
58
- n.dataType || n.data_type
59
- ) === "number" && (!e.excludeIdentifiers || !l(n));
60
- }
61
- function h(n) {
62
- return !y(n) && !u(n);
63
- }
64
- function D(n) {
65
- const e = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Set();
66
- for (const a of n) {
67
- if (m(a))
68
- continue;
69
- const r = p(a);
70
- if (r.length !== 0) {
71
- if (u(a)) {
72
- r.forEach((i) => t.add(i));
73
- continue;
74
- }
75
- if (y(a, { excludeIdentifiers: !0 })) {
76
- r.forEach((i) => e.add(i));
77
- continue;
78
- }
79
- r.forEach((i) => s.add(i));
80
- }
81
- }
82
- return {
83
- validMeasureCandidates: Array.from(e).sort(),
84
- validDateCandidates: Array.from(t).sort(),
85
- validDimensionCandidates: Array.from(s).sort()
86
- };
87
- }
88
- export {
89
- c as a,
90
- p as b,
91
- u as c,
92
- m as d,
93
- l as e,
94
- y as f,
95
- g,
96
- h,
97
- A as i,
98
- D as j,
99
- o as n
100
- };
@@ -1 +0,0 @@
1
- "use strict";const I=require("./catalog-field-grounding-Bnx-3tE0.cjs");function b(e,n){const t=e.split(".").map(r=>r.trim()),i=n.split(".").map(r=>r.trim());if(t.length===0||i.length===0||t.some(r=>!r)||i.some(r=>!r))return!1;const[s,o]=t.length<=i.length?[t,i]:[i,t],a=o.length-s.length;return s.every((r,c)=>r===o[c+a])}function C(e,n){const t=e.split("."),i=n.split("."),s=t.pop(),o=i.pop();return!!(s&&s===o&&t.length>0&&i.length>0&&b(t.join("."),i.join(".")))}function N(e){const n=e.map(i=>i.trim()).filter(Boolean);if(n.every((i,s)=>n.slice(s+1).every(o=>b(i,o))))return[...n].sort((i,s)=>s.split(".").length-i.split(".").length)[0]}function u(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function D(e){if(typeof e!="string")return"";const n=e.split(".").map(t=>t.trim());return n.length>1&&n.every(Boolean)?n.join("."):""}function v(e){if(typeof e!="string")return"";const n=e.split(".").map(t=>t.trim());return n.length>0&&n.every(Boolean)?n.join("."):""}function d(e){return typeof e=="string"?e.trim():""}function S(e,n){return e.every((t,i)=>e.slice(i+1).every(s=>n(t,s)))}function q(e,n){const t=d(e.id),i=d(e.name),s=d(n.entityId),o=d(n.entityName);return!i||!s&&!o?!1:(!s||s===t||s===i)&&(!o||o===i)}function E(e){const n=u(e.semanticContext)?e.semanticContext:void 0,t=u(e.fieldMeta)?e.fieldMeta:void 0,i=d(n==null?void 0:n.semanticDomainId),s=Array.isArray(n==null?void 0:n.selectedEntities)?n.selectedEntities.filter(g=>u(g)&&g.type==="dataset"):[];if(!!!(i||s.length>0||(t==null?void 0:t.entityType)==="dataset"))return;if(!i)return{status:"unresolved",reason:"incomplete_source_identity"};const a=d(t==null?void 0:t.entityId),r=d(t==null?void 0:t.entityName),c=!!(a||r),f=c?s.filter(g=>q(g,{entityId:a,entityName:r})):s;if(f.length>1)return{status:"unresolved",reason:"incomplete_source_identity"};if(c&&s.length>0&&f.length===0)return{status:"unresolved",reason:"divergent_source_identity"};const l=f[0],m=d(l==null?void 0:l.domainId),p=d(l==null?void 0:l.id),y=d(l==null?void 0:l.name);if(m&&m!==i)return{status:"unresolved",reason:"divergent_source_identity"};const h=p,_=y||r;return _?{status:"resolved",source:{kind:"semantic",domainId:i,datasetName:_,...h?{datasetId:h}:{}}}:{status:"unresolved",reason:"incomplete_source_identity"}}function A(e,n){const t=d(e.connectionId),i=u(e.semanticContext)?e.semanticContext:void 0,s=d(i==null?void 0:i.connectionId);if(t&&s&&t!==s)return{status:"unresolved",reason:"divergent_source_identity"};const o=t||s,a=u(e.fieldMeta)?e.fieldMeta:void 0,r=n.split(".").slice(0,-1).join("."),c=v(e.qualifiedTableName),f=v(a==null?void 0:a.qualifiedEntityName),l=[c,f,r].filter(Boolean),m=N(l);return!m&&l.length>0?{status:"unresolved",reason:"divergent_source_identity"}:!o||!m?{status:"unresolved",reason:"incomplete_source_identity"}:{status:"resolved",source:{kind:"physical",connectionId:o,tableName:m}}}function B(e,n){const t=u(e.fieldMeta)?e.fieldMeta:void 0,i=typeof(t==null?void 0:t.qualifiedFieldName)=="string"?t.qualifiedFieldName.trim():"",s=D(t==null?void 0:t.qualifiedFieldName),o=typeof e.column=="string"?e.column.trim():"",a=D(o),r=typeof e.qualifiedTableName=="string"?e.qualifiedTableName.trim():"",c=v(e.qualifiedTableName);if(i&&!s||n&&r&&!c||o.includes(".")&&!a)return{status:"unresolved",reason:"incomplete_field_identity"};const f=a.split("."),l=a?f[f.length-1]:o,m=n&&c&&l?`${c}.${l}`:"",p=[s,a,m].filter(Boolean);if(!S(p,C))return{status:"unresolved",reason:"divergent_field_identity"};const y=a||s||m;return y?{status:"resolved",qualifiedFieldName:y}:{status:"unresolved",reason:"incomplete_field_identity"}}function F(e){if(!u(e))return{status:"ineligible",reason:"invalid_input"};if(e.kind==="global-date")return{status:"eligible",kind:"global_date"};const n=I.normalizeAnalyticsCatalogDataType(e.dataType);if(n!=="date"&&n!=="datetime")return{status:"ineligible",reason:"non_date_filter"};const t=u(e.fieldMeta)?e.fieldMeta:void 0,i=I.normalizeAnalyticsCatalogDataType(t==null?void 0:t.dataType);if((t==null?void 0:t.dataType)!==void 0&&i!=="date"&&i!=="datetime")return{status:"ineligible",reason:"non_date_filter"};if(e.customFilterPreferences)return{status:"ineligible",reason:"custom_filter"};if(e.targetColumns!==void 0&&(!Array.isArray(e.targetColumns)||e.targetColumns.length>0))return{status:"ineligible",reason:"multi_target_filter"};const s=E(e),o=B(e,s===void 0);if(o.status==="unresolved")return{status:"ineligible",reason:o.reason};const a=s||A(e,o.qualifiedFieldName);return a.status==="resolved"?{status:"eligible",kind:"field_date",qualifiedFieldName:o.qualifiedFieldName,source:a.source}:{status:"ineligible",reason:a.reason}}function T(e){if(!u(e)||e.kind!=="filter"||!u(e.filter))return{status:"ineligible",reason:"invalid_input"};const n=F(e.filter);return n.status==="ineligible"?n:n.kind==="field_date"&&u(e.compatibility)&&e.compatibility.source==="cardInlineFilter"?{status:"ineligible",reason:"card_inline_filter"}:n}function k(e){return T(e).status==="eligible"}exports.isComparisonCapableDashboardDateInputDefinition=k;exports.qualifiedEntityIdentitiesReferToSameEntity=b;exports.qualifiedFieldIdentitiesReferToSameField=C;exports.resolveDashboardDateComparisonFilterDefinition=F;exports.resolveDashboardDateComparisonInputDefinition=T;exports.selectMostQualifiedCompatibleEntityIdentity=N;exports.semanticDatasetMatchesFieldCoordinates=q;
@@ -1,18 +0,0 @@
1
- function o(t) {
2
- return `compat-filter:${t}`;
3
- }
4
- function r(t) {
5
- return `compat-control:${t}`;
6
- }
7
- function a(t, n) {
8
- return `compat-inline-filter:${t}:${n}`;
9
- }
10
- function e(t, n) {
11
- return `compat-card-control:${t}:${n}`;
12
- }
13
- export {
14
- r as a,
15
- a as b,
16
- e as c,
17
- o as g
18
- };
@@ -1 +0,0 @@
1
- "use strict";function o(t){return`compat-filter:${t}`}function r(t){return`compat-control:${t}`}function a(t,n){return`compat-inline-filter:${t}:${n}`}function e(t,n){return`compat-card-control:${t}:${n}`}exports.getCardControlCompatInputId=e;exports.getCardInlineFilterCompatInputId=a;exports.getDashboardControlCompatInputId=r;exports.getDashboardFilterCompatInputId=o;
@@ -1,4 +0,0 @@
1
- "use strict";var bt=Object.defineProperty;var It=(e,r,t)=>r in e?bt(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var x=(e,r,t)=>It(e,typeof r!="symbol"?r+"":r,t);const E=require("./pivot-result-lifecycle-BiJepH5S.cjs"),pe=require("../value-format-preferences/index.cjs"),te=require("./validators-Dm7Kpz6p.cjs");require("./analyze-result-contract-Dxw66nUG.cjs");const V=require("./saved-temporal-bucket-format-Gfbh4IiP.cjs"),D=require("./pivot-result-identity-CRUokNgm.cjs"),ke=require("./temporal-bucket-contract-anl4h-vg.cjs"),W=require("./temporal-bucket-Dnj8qT9l.cjs"),Ct=require("./catalog-field-grounding-Bnx-3tE0.cjs"),z=require("./canonical-result-keys-Drc2x-lf.cjs");require("./temporal-bucket-authoring-7hv2laOG.cjs");const Fe=require("./raw-temporal-contract-CxbRFwnd.cjs"),Ae=`import pandas as pd
2
- df = pd.DataFrame(data) # 'data' contains the query result
3
- result = df.to_dict('records') # must return 'result' as [dict] type
4
- `;function Tt(e){return{databaseName:(e==null?void 0:e.lastSelectedDatabase)||"",schemaName:(e==null?void 0:e.lastSelectedSchema)||"",tableName:(e==null?void 0:e.lastSelectedTable)||"",datamodelId:(e==null?void 0:e.datamodelId)||""}}function q(e){return e===Ae?"":e}function Q(e,r=e.config){return z.resolveTemporalResultOwner({hasExecutableConfig:V.hasValidCardConfig(r),sql:e.sql,normalizedPython:q(e.python||"")})}class Be extends Error{constructor(t){super(`ambiguous_temporal_grain: Temporal field "${t}" has saved presentation but no valid grouping grain. Reconfigure and resave the field.`);x(this,"code","ambiguous_temporal_grain");x(this,"fieldId");this.name="AmbiguousGroupedTemporalGrainError",this.fieldId=t}}function wt(e){return V.hasSavedTemporalBucketPresentation(e)||e.semanticTemporalPresentation!=null}function Pe(e){if(!e.id||!["date","datetime"].includes(Ct.normalizeAnalyticsCatalogDataType(e.dataType)))return;if(te.isSemaphorTimeGrain(e.granularity))return e;if(!wt(e))return;if(!V.readSavedTemporalBucketFormat({fieldId:e.id,dataType:e.dataType,granularity:e.granularity,format:e.format,dateFormat:e.dateFormat,customFormat:e.customFormat}).ok)throw new Be(e.id);return{...e,granularity:"day"}}function ye(e){const r=e.cardConfig??e.card.config;if(!r||!e.supportsCardType(e.card.type)||z.resolveTemporalResultOwner({hasExecutableConfig:V.hasValidCardConfig(r),sql:e.card.sql,normalizedPython:q(e.card.python||"")})!=="config")return;const t=[...(r.groupByColumns||[]).map(n=>({...n,role:"groupby"})),...e.card.type==="pivotTable"?(r.pivotByColumns||[]).map(n=>({...n,role:"pivotby"})):[]];return{cardType:e.card.type,cardConfig:r,fields:t.flatMap(n=>{const o=Pe(n);return o?[o]:[]})}}function Et(e){return ye({...e,supportsCardType:r=>r==="table"})}function $t(e){return ye({...e,supportsCardType:z.isSemaphorCartesianChartType})}function De(e){return ye({...e,supportsCardType:r=>r!=="detailTable"&&z.supportsCanonicalDashboardTemporalResult(r)})}const Se=new WeakMap;function Me(e){const r=Se.get(e);if(r)return r;const t=E.parseCanonicalPivotResultTransport(e);return Se.set(e,t),t}function G(e,r){const t=e??[],n=r??[];return t.length===n.length&&t.every((o,a)=>o===n[a])}function Oe(e,r){const t=E.derivePivotResultContractExpectations({groupByFields:r.groupByColumns,metricFields:r.metricColumns,pivotByFields:r.pivotByColumns,detailFields:r.detailColumns});return G(e.expectedRoleFieldIds.groupby,t.expectedRoleFieldIds.groupby)&&G(e.expectedRoleFieldIds.metric,t.expectedRoleFieldIds.metric)&&G(e.expectedRoleFieldIds.pivotby,t.expectedRoleFieldIds.pivotby)&&G(e.expectedRoleFieldIds.detail,t.expectedRoleFieldIds.detail)&&G(e.expectedMetricAliases,t.expectedMetricAliases)}class kt extends Error{constructor(t){super(`missing_resolved_temporal_format: Saved presentation is missing temporal field "${t.fieldId}" for card "${t.cardId}". Resave the report or Briefing to capture the current dashboard presentation.`);x(this,"code","missing_resolved_temporal_format");x(this,"deliveryBlocking",!0);x(this,"dashboardId");x(this,"cardId");x(this,"fieldId");this.name="MissingResolvedTemporalPresentationError",this.dashboardId=t.dashboardId,this.cardId=t.cardId,this.fieldId=t.fieldId}}class ce extends Error{constructor(t){super(`missing_temporal_bucket_metadata: Result column "${t.columnKey}" is missing temporal bucket metadata for field "${t.fieldId}" on card "${t.cardId}". Refresh the report and resave the delivery if the problem persists.`);x(this,"code","missing_temporal_bucket_metadata");x(this,"deliveryBlocking",!0);x(this,"cardId");x(this,"fieldId");x(this,"columnKey");this.name="MissingTemporalResultMetadataError",this.cardId=t.cardId,this.fieldId=t.fieldId,this.columnKey=t.columnKey}}class O extends Error{constructor(t,n,o){super(`${t}: ${n}`);x(this,"deliveryBlocking",!0);this.code=t,this.context=o,this.name="DashboardTemporalBoundaryError"}}function Ke(e,r){return`${r}:${e}`}function Ne(e){var r,t;return(t=(r=e.presentation)==null?void 0:r.byFieldRole)==null?void 0:t.get(Ke(e.fieldId,e.role))}function St(e){var t;if((((t=e.cardConfig.metricColumns)==null?void 0:t.length)||0)>0||e.binding.role!=="metric")return!1;const r=e.binding.outputKey||e.binding.rawKey;return e.columns.some(n=>{var o;return n.role==="measure"&&n.dataType==="number"&&(n.key===r||((o=n.pivotIdentity)==null?void 0:o.metricId)===te.SEMAPHOR_GENERATED_COUNT_METRIC_ID)})}function _t(e,r){return!r||r.byColumnKey.size===0?e.map(t=>({...t})):e.map(t=>{const n={...t};return r.byColumnKey.forEach((o,a)=>{Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=he({value:t[a],presentation:o}))}),n})}function xt(e){var p;if(!e.result||typeof e.result!="object")return!1;const r=e.result;if(e.expectedResultOwner!==void 0&&r.resultOwner!==e.expectedResultOwner)return!1;const t=e.activation;if(!t||t.cardType!=="pivotTable"&&t.fields.length===0)return!0;const n=Array.isArray(r.records)?r.records.length:void 0,o=(t.cardConfig.pivotByColumns||[]).map(d=>d.id);if(t.cardType==="pivotTable")try{const d=Me(r);if(!Oe(d.pivotResultContract,t.cardConfig))return!1;if(d.pivotResultState==="loaded_empty")return!0;const v=d.columns.filter(C=>d.pivotResultContract.columnKinds[C.key]==="pivot_metric"),h=v.filter(C=>{var g;return(((g=C.pivotIdentity)==null?void 0:g.members.length)??0)>0}),I=v.length>0&&v.every(C=>{var g;return((g=C.pivotIdentity)==null?void 0:g.members.length)===0&&D.isPivotEmptyTupleAllowed({expectedPivotFieldIds:o,classification:d.pivotResultContract.columnClassifications[C.key]})});return t.fields.every(C=>{var S;const g=D.resolveQueryColumnKeyMapEntry(d.columnKeyMap,C.id,C.role);if(!g)return!1;if(g.role==="pivotby"){const F=h.flatMap(L=>{var j;return((j=L.pivotIdentity)==null?void 0:j.members.filter(vt=>vt.fieldId===C.id))??[]});return F.length===0?I:F.every(L=>{var j;return((j=L.temporalBucket)==null?void 0:j.granularity)===C.granularity})}const $=d.columns.find(F=>F.key===(g.outputKey||g.rawKey));return((S=$==null?void 0:$.temporalBucket)==null?void 0:S.granularity)===C.granularity})}catch(d){if(d instanceof E.PivotResultLifecycleError)return!1;throw d}if(n===0)return!0;const a=r.columnKeyMap;if(!a||!a.byRole||typeof a.byRole!="object"||Array.isArray(a.byRole))return!1;const i=[...(t.cardConfig.groupByColumns||[]).map(d=>({field:d,role:"groupby"})),...(t.cardConfig.metricColumns||[]).map(d=>({field:d,role:"metric"})),...(t.cardConfig.pivotByColumns||[]).map(d=>({field:d,role:"pivotby"})),...(t.cardConfig.detailColumns||[]).map(d=>({field:d,role:"detail"}))],c=new Set(i.map(({field:d,role:v})=>`${v}:${d.id}`)),m=new Map((r.columns||[]).map(d=>[d.key,d])),l=D.resolveQueryColumnKeyMapEntry(a,te.SEMAPHOR_GENERATED_COUNT_METRIC_ID,"metric");if(l){if(!St({cardConfig:t.cardConfig,binding:l,columns:r.columns||[]}))return!1;c.add(`metric:${te.SEMAPHOR_GENERATED_COUNT_METRIC_ID}`)}const s=Object.entries(a.byRole).flatMap(([d,v])=>Object.keys(v||{}).map(h=>`${d}:${h}`));if(s.length!==c.size||s.some(d=>!c.has(d))||i.some(({field:d,role:v})=>!D.resolveQueryColumnKeyMapEntry(a,d.id,v)))return!1;try{D.requirePivotResultColumnIdentities((r.columns||[]).map(d=>({key:d.key,pivotIdentity:d.pivotIdentity})),{expectedPivotFieldIds:o,columnClassifications:r.columnMetadata})}catch(d){if(d instanceof D.PivotResultIdentityError)return!1;throw d}const u=(r.columns||[]).filter(d=>{const v=d.pivotIdentity;return!!(v&&v.members.length>0)});return n!==0&&((p=t.cardConfig.pivotByColumns)!=null&&p.length)&&u.length===0?!1:t.fields.every(d=>{var I;const v=D.resolveQueryColumnKeyMapEntry(a,d.id,d.role);if(!v)return!1;if(v.role==="pivotby"){const g=u.flatMap($=>{var S;return((S=$.pivotIdentity)==null?void 0:S.members)??[]}).filter($=>$.fieldId===d.id);return u.length===0?n===0:g.length>0&&g.every($=>{var S;return((S=$.temporalBucket)==null?void 0:S.granularity)===d.granularity})}const h=m.get(v.outputKey||v.rawKey);return((I=h==null?void 0:h.temporalBucket)==null?void 0:I.granularity)===d.granularity})}function re(e,r){const t=e.semanticTemporalPresentation,n=r==="card"?{format:e.format,dateFormat:e.dateFormat}:{format:t==null?void 0:t.format};if(!V.hasSavedTemporalBucketPresentation(n))return;const o=V.readSavedTemporalBucketFormat({fieldId:e.id,dataType:e.dataType,granularity:r==="semantic"?t==null?void 0:t.granularity:e.granularity,...r==="card"?{format:e.format,dateFormat:e.dateFormat,customFormat:e.customFormat}:{format:t==null?void 0:t.format}});if(!o.ok)throw new Error(o.error.code);return o.format}function Rt(e,r,t=pe.DEFAULT_RESOLVED_VALUE_FORMAT_PREFERENCES){const n=re(e,"card"),o=re(e,"semantic"),a=e.semanticTemporalPresentation;return W.resolveTemporalBucketPresentation({metadata:r,...n?{cardFormat:n}:{},...o&&a?{semanticFormat:{granularity:a.granularity,format:o}}:{},locale:t.locale,styles:{dateStyle:t.dateStyle,dateTime:t.dateTime}})}function Ve(e,r=W.DEFAULT_RESOLVED_TEMPORAL_STYLE_SET,t="en-US"){var i;const n=re(e,"card"),o=((i=e.semanticTemporalPresentation)==null?void 0:i.granularity)===e.granularity?re(e,"semantic"):void 0,a=n&&n.presentation.mode!=="auto"?n:o&&o.presentation.mode!=="auto"?o:{presentation:{mode:"auto"}};return a.presentation.mode==="auto"?{type:"temporal_bucket",locale:t,presentation:{mode:"auto",styles:r}}:{type:"temporal_bucket",locale:t,presentation:a.presentation}}function Ft(e){const r=e.activation;if(!r)return{byColumnKey:new Map,byFieldId:new Map,byFieldRole:new Map};if(e.resultRowCount===0)return{byColumnKey:new Map,byFieldId:new Map,byFieldRole:new Map};const t=new Map((e.columns||[]).map(l=>[l.key,l])),n=new Map,o=new Map,a=new Map,i=r.fields.reduce((l,s)=>(l.set(s.id,(l.get(s.id)||0)+1),l),new Map),c=(l,s)=>{a.set(Ke(l.id,l.role),s),i.get(l.id)===1&&o.set(l.id,s)},m=(l,s,u)=>{if(s.granularity!==l.granularity)throw new O("invalid_temporal_bucket_metadata",`Result identity "${u}" declares ${s.granularity} buckets for active ${l.granularity} field "${l.id}".`,{cardId:e.card.id,fieldId:l.id,columnKey:u});const p=e.executionSnapshot&&e.dashboardId?E.findResolvedTemporalBucketFormat({snapshot:e.executionSnapshot,scope:{dashboardId:e.dashboardId,cardId:e.card.id,...e.attachmentIndex!==void 0?{attachmentIndex:e.attachmentIndex}:{}},target:{kind:"field",fieldId:l.id,role:l.role}}):void 0;if(e.executionSnapshot&&!p)throw new kt({dashboardId:e.dashboardId,cardId:e.card.id,fieldId:l.id});return{columnKey:u,fieldId:l.id,role:l.role,metadata:s,resolved:p?W.resolveTemporalBucketPresentation({metadata:s,cardFormat:p,locale:p.locale,...p.presentation.mode==="auto"?{styles:p.presentation.styles}:{}}):Rt(l,s,e.valueFormatPreferences??pe.DEFAULT_RESOLVED_VALUE_FORMAT_PREFERENCES)}};for(const l of r.fields){const s=D.resolveQueryColumnKeyMapEntry(e.columnKeyMap,l.id,l.role);if(!s){if(e.columns===void 0&&e.columnKeyMap===void 0&&(e.resultRowCount===void 0||e.resultRowCount===0))continue;throw new O("missing_temporal_column_binding",`Activated temporal field "${l.id}" has no authoritative result-column binding.`,{cardId:e.card.id,fieldId:l.id,columnKey:l.name})}if(s.role==="pivotby"){const h=(e.columns||[]).filter(S=>S.pivotIdentity!==void 0),I=h.flatMap(S=>{var F;return(((F=S.pivotIdentity)==null?void 0:F.members)||[]).filter(L=>L.fieldId===l.id).map(L=>({column:S,member:L}))});if(I.length===0){if(h.length===0&&(e.card.type!=="pivotTable"||e.resultRowCount===0))continue;throw new ce({cardId:e.card.id,fieldId:l.id,columnKey:s.outputKey||s.rawKey})}const C=I[0];if(!C.member.temporalBucket)throw new ce({cardId:e.card.id,fieldId:l.id,columnKey:C.column.key});const g=ke.validateTemporalBucketMetadata(C.member.temporalBucket);if(!g.ok||!g.value)throw new O("invalid_temporal_bucket_metadata",g.ok?`Pivot result column "${C.column.key}" has no validated temporal bucket metadata.`:g.error.message,{cardId:e.card.id,fieldId:l.id,columnKey:C.column.key});const $=m(l,g.value,C.column.key);for(const{column:S,member:F}of I)if(!F.temporalBucket||JSON.stringify(F.temporalBucket)!==JSON.stringify(C.member.temporalBucket))throw new O("invalid_temporal_bucket_metadata",`Pivot result column "${S.key}" has contradictory bucket metadata for field "${l.id}".`,{cardId:e.card.id,fieldId:l.id,columnKey:S.key});c(l,$);continue}const u=s.outputKey||s.rawKey,p=t.get(u);if(!(p!=null&&p.temporalBucket))throw new ce({cardId:e.card.id,fieldId:l.id,columnKey:u});const d=ke.validateTemporalBucketResultColumn(p,{metadataRequired:!0});if(!d.ok||!d.value)throw new O("invalid_temporal_bucket_metadata",d.ok?`Result column "${u}" has no validated temporal bucket metadata.`:d.error.message,{cardId:e.card.id,fieldId:l.id,columnKey:u});const v=m(l,d.value,u);n.set(u,v),c(l,v)}return{byColumnKey:n,byFieldId:o,byFieldRole:a}}function At(e){var t,n;const r=e.role?Ne({presentation:e.presentation,fieldId:e.fieldId,role:e.role}):(n=(t=e.presentation)==null?void 0:t.byFieldId)==null?void 0:n.get(e.fieldId);return r?he({value:e.value,presentation:r}):e.value===null||e.value===void 0?"":String(e.value)}function he(e){if(e.value===null||e.value===void 0)return"(Blank)";if(typeof e.value!="string")throw new O("invalid_temporal_bucket_value",`Canonical temporal column "${e.presentation.columnKey}" must contain a string or null.`,{fieldId:e.presentation.fieldId,columnKey:e.presentation.columnKey});try{return W.formatTemporalBucket({value:e.value,metadata:e.presentation.metadata,format:e.presentation.resolved.format})}catch(r){throw r instanceof W.TemporalBucketContractError?new O(r.code,r.message,{fieldId:e.presentation.fieldId,columnKey:e.presentation.columnKey}):r}}class _ extends Error{constructor(r,t,n){super(`${r}: ${t}`),this.code=r,this.context=n,Object.setPrototypeOf(this,_.prototype),this.name="RawTemporalPresentationBoundaryError"}}function Le(){return{type:"raw_temporal",presentation:{mode:"auto"}}}function Bt(e){if(e.locale||e.relative||e.timezone&&e.timezone!=="auto"||e.sourceTimezone&&e.sourceTimezone!=="auto"||e.prefix||e.suffix)throw new _("invalid_raw_temporal_format","Activated raw temporal presentation contains unsupported locale, relative-time, timezone, prefix, or suffix settings.")}function ge(e){const r=e.format;if((r==null?void 0:r.type)==="date"&&(Bt(r),r.pattern))return{type:"raw_temporal",presentation:{mode:"pattern",dialect:"semaphor_tokens",pattern:r.pattern}};if(r)throw new _("invalid_raw_temporal_format",`Raw temporal detail field "${e.id}" has an incompatible authored format.`,{fieldId:e.id});if(e.dateFormat==="custom"){if(!e.customFormat)throw new _("invalid_raw_temporal_format",`Raw temporal detail field "${e.id}" selects a custom pattern but has no customFormat.`,{fieldId:e.id});return{type:"raw_temporal",presentation:{mode:"pattern",dialect:"semaphor_tokens",pattern:e.customFormat}}}return e.dateFormat?{type:"raw_temporal",presentation:{mode:"pattern",dialect:"semaphor_tokens",pattern:e.dateFormat}}:Le()}function ae(e){if(e!=null&&e.useRelativeTime)return;if(!e)return Le();if(e.useCustomFormat&&!e.customFormat)throw new _("invalid_raw_temporal_format","Declared SQL temporal presentation selects a custom pattern but has no customFormat.");const r=e.useCustomFormat&&e.customFormat?e.customFormat:e.format,t=e.timezone,n=e.sourceTimezone,o=t&&t!=="auto"?{timezone:t}:void 0,a=n&&n!=="auto"?{sourceTimezone:n}:void 0;return r?{type:"raw_temporal",...o,...a,presentation:{mode:"pattern",dialect:"date_fns",pattern:r}}:{type:"raw_temporal",...o,...a,presentation:{mode:"auto"}}}function Pt(e){const r=ae(e.settings);if(!r)throw new _("invalid_raw_temporal_format","Relative-time SQL presentation does not have an absolute date preview.");const t=e.valueKind??"date",n={kind:"raw_temporal",valueKind:t},o=e.value??(t==="date"?"2023-05-15":t==="wall_datetime"?"2023-05-15T14:30:45":"2023-05-15T14:30:45Z"),a=E.prepareRawTemporalFormatter({metadata:n,format:E.resolveRawTemporalFormat({format:r,preferences:e.preferences,calendar:{tz:e.calendarTimezone}})})(o);if(!a.ok)throw new _("invalid_raw_temporal_format",a.diagnostic.message);return a.text}function ze(e){var t;const r=e.effectiveCardConfig??e.card.config;return Q(e.card,r)==="freeform"&&!!((t=e.card.sql)!=null&&t.trim())&&!q(e.card.python||"").trim()}function Dt(){return{activatedColumnKeys:new Set,byColumnKey:new Map,byFieldId:new Map}}function ve(e){var r;return e.cardType==="detailTable"&&e.resultOwner==="config"?(((r=e.effectiveCardConfig)==null?void 0:r.detailColumns)||[]).filter(t=>t.dateValueMode==="canonical"):[]}function ue(e,r){return e===void 0?{kind:"invalid",error:r}:{kind:"invalid",error:e instanceof _?e:e instanceof E.RawTemporalFormatContractError?new _(e.code,e.message,r.context):new _(r.code,e instanceof Error?e.message:r.message,r.context)}}function Mt(e){const r=ve(e);if(r.length===0)return{kind:"inactive"};if(!e.result)return{kind:"loading"};const{records:t,columns:n,columnKeyMap:o}=e.result;if(!Array.isArray(t)||!Array.isArray(n)||!o)return ue(void 0,new _("missing_raw_temporal_result_contract","Activated raw temporal detail results require records, columns, and columnKeyMap atomically."));try{const a=new Map,i=new Map;for(const m of r){const l=D.resolveQueryColumnKeyMapEntry(o,m.id,"detail");if(!l||l.role!=="detail"||typeof l.rawKey!="string"||l.rawKey.trim().length===0||l.outputKey!==void 0&&(typeof l.outputKey!="string"||l.outputKey.trim().length===0))throw new _("missing_raw_temporal_column_binding",`Raw temporal detail field "${m.id}" has no valid exact detail result binding.`,{fieldId:m.id});const s=l.outputKey??l.rawKey,u=n.find(h=>h.key===s);if(!u)throw new _("missing_raw_temporal_result_contract",`Raw temporal result column "${s}" is absent.`,{fieldId:m.id,columnKey:s});const p=Fe.validateRawTemporalResultColumn(u,{metadataRequired:!0});if(!p)throw new _("invalid_raw_temporal_metadata",`Raw temporal result column "${s}" has no metadata.`,{fieldId:m.id,columnKey:s});const d=E.resolveRawTemporalFormat({format:ge(m),preferences:e.preferences,calendar:e.calendar}),v={fieldId:m.id,columnKey:s,metadata:p,format:d,formatValue:E.prepareRawTemporalFormatter({metadata:p,format:d})};for(let h=0;h<t.length;h+=1)if(!Object.prototype.hasOwnProperty.call(t[h],s)||t[h][s]===void 0)throw new _("missing_raw_temporal_result_contract",`Raw temporal result row ${h} is missing column "${s}".`,{fieldId:m.id,columnKey:s});a.set(s,v),i.set(m.id,v)}const c={activatedColumnKeys:new Set(a.keys()),byColumnKey:a,byFieldId:i};return t.length===0?{kind:"loaded_empty",presentation:c}:{kind:"loaded_valid",presentation:c}}catch(a){return ue(a,new _("invalid_raw_temporal_metadata","Activated raw temporal result metadata is invalid."))}}function Ue(e){var n,o;const r=e.effectiveCardConfig??e.card.config,t=Q(e.card,r);return e.card.type==="detailTable"&&t==="config"?ve({cardType:e.card.type,resultOwner:t,effectiveCardConfig:r}).length>0&&e.records!==void 0&&(!e.columns||!e.columnKeyMap)?{kind:"invalid",error:new _("missing_raw_temporal_result_contract","Activated raw temporal detail results require records, columns, and columnKeyMap atomically.")}:_e(Mt({cardType:e.card.type,resultOwner:t,effectiveCardConfig:r,result:e.records===void 0||!e.columns||!e.columnKeyMap?void 0:{records:e.records,columns:e.columns,columnKeyMap:e.columnKeyMap},preferences:e.preferences,calendar:e.calendar}),e):_e(Ot({resultOwner:t,sql:e.card.sql,normalizedPython:q(e.card.python||""),records:e.records,columns:e.columns,columnSettings:(o=(n=e.card.preferences)==null?void 0:n.tablePrefs)==null?void 0:o.columnSettingsMap,preferences:e.preferences,calendar:e.calendar}),e)}function qe(e){var n,o;const r=e.effectiveCardConfig??e.card.config,t=Q(e.card,r);return ve({cardType:e.card.type,resultOwner:t,effectiveCardConfig:r}).length>0?!0:ze(e)?Object.values(((o=(n=e.card.preferences)==null?void 0:n.tablePrefs)==null?void 0:o.columnSettingsMap)||{}).some(a=>{var i;return a.type==="date"&&!((i=a.dateFormat)!=null&&i.useRelativeTime)}):!1}function _e(e,r){if(!r.executionSnapshot||e.kind==="inactive"||e.kind==="loading"||e.kind==="invalid")return e;if(!r.dashboardId)return{kind:"invalid",error:new _("missing_raw_temporal_result_contract","A dashboard ID is required to resolve the captured raw temporal presentation.")};const t=new Map,n=new Map;for(const o of e.presentation.activatedColumnKeys){const a=E.findResolvedRawTemporalFormat({snapshot:r.executionSnapshot,scope:{dashboardId:r.dashboardId,cardId:r.card.id,...r.attachmentIndex!==void 0?{attachmentIndex:r.attachmentIndex}:{}},target:{kind:"column",columnKey:o}});if(!a)return{kind:"invalid",error:new E.MissingResolvedRawTemporalFormatError(o)};const i=e.presentation.byColumnKey.get(o);if(!i)continue;const c={...i,format:a,formatValue:E.prepareRawTemporalFormatter({metadata:i.metadata,format:a})};t.set(i.columnKey,c),i.fieldId&&n.set(i.fieldId,c)}return{...e,presentation:{activatedColumnKeys:e.presentation.activatedColumnKeys,byColumnKey:t,byFieldId:n}}}function Ot(e){var t,n;if(e.resultOwner!=="freeform"||!((t=e.sql)!=null&&t.trim())||(n=e.normalizedPython)!=null&&n.trim())return{kind:"inactive"};const r=Object.entries(e.columnSettings||{}).filter(([,o])=>{var a;return o.type==="date"&&!((a=o.dateFormat)!=null&&a.useRelativeTime)});if(r.length===0)return{kind:"inactive"};if(!e.records)return{kind:"loading"};try{const o=new Map,a=new Set(r.map(([l])=>l)),i=new Map,c=[...e.columns||[]];for(const[l,s]of r){const u=ae(s.dateFormat);if(!u)continue;const p=E.classifyDeclaredSqlTemporalColumn({columnKey:l,values:e.records.map(I=>{if(!Object.prototype.hasOwnProperty.call(I,l))throw new _("missing_raw_temporal_result_contract",`Declared SQL temporal column "${l}" is absent from a physical result row.`,{columnKey:l});const C=I[l];return C===null||typeof C=="string"?C:String(C)})});if(i.set(l,p),p.status!=="classified")continue;let d=c.findIndex(I=>I.key===l);if(e.columns&&d<0)throw new _("missing_raw_temporal_result_contract",`Classified SQL temporal column "${l}" is absent from result columns.`,{columnKey:l});d<0&&(d=c.length,c.push({key:l,name:l,label:l,role:"dimension",dataType:"string"}));const v={...c[d],role:"date",dataType:p.metadata.valueKind==="date"?"date":"datetime",rawTemporal:p.metadata};Fe.validateRawTemporalResultColumn(v,{metadataRequired:!0}),c[d]=v;const h=E.resolveRawTemporalFormat({format:u,preferences:e.preferences,calendar:e.calendar});o.set(l,{columnKey:l,metadata:p.metadata,format:h,formatValue:E.prepareRawTemporalFormatter({metadata:p.metadata,format:h})})}const m={...Dt(),activatedColumnKeys:a,byColumnKey:o};return e.records.length===0?{kind:"loaded_empty",presentation:m,adaptedColumns:c,sqlClassifications:i}:{kind:"loaded_valid",presentation:m,adaptedColumns:c,sqlClassifications:i}}catch(o){return ue(o,new _("invalid_raw_temporal_format","Declared SQL raw temporal presentation is invalid."))}}function Kt(e){if(e.value!==null&&typeof e.value!="string")return{value:e.value,label:String(e.value),result:{ok:!1,text:String(e.value),diagnostic:{code:"invalid_raw_temporal_value",message:`Raw temporal column "${e.presentation.columnKey}" must contain a string or null.`}}};const r=e.presentation.formatValue(e.value);return{value:e.value,label:r.text,result:r}}function Nt(e){if(!e.result||typeof e.result!="object")return!1;const r=e.result;if(e.expectedResultOwner!==void 0&&r.resultOwner!==e.expectedResultOwner)return!1;if(!qe({card:e.card,effectiveCardConfig:e.effectiveCardConfig}))return!0;if(!Array.isArray(r.records))return!1;const t=Ue({card:e.card,effectiveCardConfig:e.effectiveCardConfig,records:r.records,columns:r.columns,columnKeyMap:r.columnKeyMap,preferences:pe.DEFAULT_RESOLVED_VALUE_FORMAT_PREFERENCES,calendar:{tz:"UTC"}});return t.kind==="inactive"||t.kind==="loaded_empty"||t.kind==="loaded_valid"}function xe(e){return!e||typeof e!="object"?!1:Array.isArray(e.cards)}function je(e){if(!e)return null;if(typeof e=="string")try{const r=JSON.parse(e);return xe(r)?r:null}catch{return null}return xe(e)?e:null}function be(e){var r;return(r=e==null?void 0:e.cards)!=null&&r.length?e.activeCardId&&e.cards.find(t=>t.id===e.activeCardId)||e.cards[0]:null}function Vt(e){var t;const r=(e==null?void 0:e.frameObject)??((t=e==null?void 0:e.visual)==null?void 0:t.frameObject);return be(je(r))}function ie(e){if(!(e!=null&&e.expectedType))return"table";const r=Array.isArray(e.expectedType)?e.expectedType[0]:e.expectedType;return zt(r)?r:"table"}const Lt=["bar","horizontalBar","line","area","stackedArea","combo","pie","doughnut","radar","polarArea","bubble","scatter","stackedBar","stackedLine","table","pivotTable","aggregateTable","detailTable","tableBuilder","kpi","pyramid","tornado","range","text","map","funnel","bullet","heatmap","treemap","custom"];function zt(e){return Lt.includes(e)}function Y(e){const r=e.position;if(typeof r=="number")return r;if(typeof r=="string"){const t=r.match(/\d+/);if(t){const n=Number(t[0]);if(!Number.isNaN(n))return n}}return Number.POSITIVE_INFINITY}function H(e){if(typeof e=="number")return{kind:"number",start:e,end:e};if(typeof e=="string"){const r=e.match(/^(\d+)$/);if(r){const o=Number(r[1]);return{kind:"number",start:o,end:o}}const t=e.match(/^(\d+)-(\d+)$/);if(t){const o=Number(t[1]),a=Number(t[2]);return{kind:"range",start:o,end:a}}const n=e.match(/^(\d+)\+$/);if(n)return{kind:"dynamic",start:Number(n[1]),end:Number.POSITIVE_INFINITY}}return null}function Ge(e){return!e||e.length===0?void 0:[...e].sort((t,n)=>Y(t)-Y(n))[0]}function Ie(e,r){if(!e||e.length===0)return;const t=[],n=[],o=[];e.forEach(s=>{const u=H(s.position);u&&(u.kind==="number"?t.push(s):u.kind==="range"?n.push(s):u.kind==="dynamic"&&o.push(s))});const a=t.find(s=>{const u=H(s.position);return(u==null?void 0:u.kind)==="number"&&u.start===r});if(a)return a;const c=n.sort((s,u)=>Y(s)-Y(u)).find(s=>{const u=H(s.position);return(u==null?void 0:u.kind)==="range"&&r>=u.start&&r<=u.end});if(c)return c;const l=o.map(s=>({slot:s,parsed:H(s.position)})).filter(s=>{var u;return((u=s.parsed)==null?void 0:u.kind)==="dynamic"}).sort((s,u)=>{var p,d;return(((p=s.parsed)==null?void 0:p.start)??0)-(((d=u.parsed)==null?void 0:d.start)??0)}).filter(s=>{var u;return r>=(((u=s.parsed)==null?void 0:u.start)??0)}).sort((s,u)=>{var p,d;return(((p=u.parsed)==null?void 0:p.start)??0)-(((d=s.parsed)==null?void 0:d.start)??0)})[0];return l==null?void 0:l.slot}function Ut(e,r){const t=Ie(e,r);if(t)return ie(t)}function He(e,r){var n;const t=(n=e==null?void 0:e.customCardPreferences)==null?void 0:n.slotIndex;return typeof t=="number"?t:r}function fe(e,r){var t;if(!((t=e==null?void 0:e.customCardPreferences)!=null&&t.url))return!1;if(e.type==="custom"||e.customCardPreferences.visualType==="multiple"||e.customCardPreferences.dataInputCardIds||(e.customCardPreferences.minInputs||0)>1||(e.customCardPreferences.maxInputs||0)>1)return!0;if(r&&r.length>1){const n=r.filter(o=>{var a;return typeof((a=o.customCardPreferences)==null?void 0:a.slotIndex)=="number"});if(n.length>1&&n.some(o=>o.id!==e.id))return!0}return!1}function We(e){const r=[];let t=-1;e.forEach((n,o)=>{const a=He(n,o);a>t&&(t=a),r[a]=n??null});for(let n=0;n<=t;n+=1)n in r||(r[n]=null);return r}function qt(e){return e.map((r,t)=>!r.customCardPreferences||r.customCardPreferences.slotIndex===t?r:{...r,customCardPreferences:{...r.customCardPreferences,slotIndex:t}})}function jt(e){const r=Ge(e);if(r)return ie(r)}function Gt(e,r,t){if(!e)return;const n=Ut(t,r);return e.type==="custom"&&n?n:e.type}function Ht(e,r,t){var v;const n={dataSource:t.dataSource,connectionId:t.connectionId,lastSelectedDatabase:t.lastSelectedDatabase,lastSelectedSchema:t.lastSelectedSchema,lastSelectedTable:t.lastSelectedTable,lastSelectedDatamodelId:t.lastSelectedDatamodelId,datamodelId:t.datamodelId},o={type:"component",visualType:"multiple",url:r.url,componentName:r.name,icon:r.icon,pluginChartType:r.chartType,minInputs:r.minInputs,maxInputs:r.maxInputs},a=r.minInputs||1,c=e.map(h=>({slot:h,parsed:H(h.position)})).filter(h=>h.parsed!==null).reduce((h,I)=>{const C=I.parsed.end;return Number.isFinite(C)?Math.max(h,C):h},-1),m=Math.max(a,c+1),l=Ge(e),s=l?Y(l):0;let u=!1;const p=[];for(let h=0;h<m;h+=1){const I=Ie(e,h),C=ie(I),g=!u&&h===s,$=h,S={...n,id:V.v4(),title:(g?l==null?void 0:l.label:I==null?void 0:I.label)||`Tab ${h+1}`,tabTitle:(g?l==null?void 0:l.label:I==null?void 0:I.label)||`Tab ${h+1}`,description:(g?l==null?void 0:l.description:I==null?void 0:I.description)||"",type:C,sql:"",preferences:{onClickFilter:[{columnIndex:0,expression:""}]},...g&&{customCardPreferences:{...o,slotIndex:$}},...!g&&{customCardPreferences:{slotIndex:$}}};g&&(u=!0),p.push(S)}if(!u&&p.length>0){const h=((v=p[0].customCardPreferences)==null?void 0:v.slotIndex)??0;p[0]={...p[0],type:p[0].type,customCardPreferences:{...o,slotIndex:h}}}const d=p.findIndex(h=>{var I;return!!((I=h.customCardPreferences)!=null&&I.url)});if(d>0){const[h]=p.splice(d,1);p.unshift(h)}return p}function Ye({frame:e,configCard:r,isMultiInputVisual:t}){var o;if(!t||!r)return e.cards;const n=(o=r.customCardPreferences)==null?void 0:o.dataInputCardIds;return n?Object.keys(n).sort((a,i)=>Number(a)-Number(i)).map(a=>{var c;const i=(c=n[a])==null?void 0:c.cardId;return e.cards.find(m=>m.id===i)||null}):e.cards}function Qe(e,r){return r&&fe(r,e.cards)?r:e.cards.find(t=>fe(t,e.cards))||null}function Je(e,r){var o,a;if(!e)return null;const t=r==null?void 0:r.visualType;if(t)return t;if(r!=null&&r.slots&&r.slots.length>0||((r==null?void 0:r.minInputs)||0)>1||((r==null?void 0:r.maxInputs)||0)>1||((r==null?void 0:r.dataInputs)||[]).length>1)return"multiple";const n=(o=e.customCardPreferences)==null?void 0:o.visualType;return n||((a=e.customCardPreferences)!=null&&a.dataInputCardIds?"multiple":null)}function Wt(e){return e.visualType==="multiple"||e.slots&&e.slots.length>0||(e.minInputs||0)>1||(e.maxInputs||0)>1||(e.dataInputs||[]).length>1?"multiple":"single"}function Yt(e){return Array.isArray(e)?{records:e}:e}class Z extends Error{constructor(t){const n=t.cardId?`card "${t.cardId}"`:t.sheetId?`sheet "${t.sheetId}"`:`dashboard "${t.dashboardId}"`;super(`Unable to resolve ${n} while capturing report presentation. Refresh the authoring page and select the attachment again.`);x(this,"code","temporal_snapshot_target_not_found");x(this,"selection");this.name="TemporalSnapshotSelectionError",this.selection=t}}function Qt(e,r){var o;const t=[],n=new Map;for(const a of r){if(a.dashboardId!==e.id)throw new Z(a);const i=(e.sheets||[]).filter(m=>!a.sheetId||a.sheetId===m.id);if(a.sheetId&&i.length===0)throw new Z(a);let c=!a.cardId;for(const m of i){const l=(((o=m.document)==null?void 0:o.sections)||[]).flatMap(p=>p.type==="table"||p.type==="chart"?[p.card]:[]),s=(m.frames||[]).flatMap(p=>Jt(p,a.cardId));s.length>0&&(c=!0);const u=[...s,...(m.cards||[]).filter(p=>!a.cardId||a.cardId===p.id),...l.filter(p=>!a.cardId||a.cardId===p.id)];for(const p of u){c=!0;const d=n.get(a.attachmentIndex)??new Set;d.has(p.id)||(d.add(p.id),n.set(a.attachmentIndex,d),t.push({card:p,...a.attachmentIndex!==void 0?{attachmentIndex:a.attachmentIndex}:{}}))}}if(!c)throw new Z(a)}return t}function Jt(e,r){var i;const t=r?(i=e.cards)==null?void 0:i.find(c=>c.id===r):be(e);if(!t)return[];const n=Qe(e,t),o=(e.cards||[]).filter(c=>{var m;return typeof((m=c.customCardPreferences)==null?void 0:m.slotIndex)=="number"}).length>1,a=n!=null&&(Je(n)==="multiple"||o);return!n||!a?[t]:We(Ye({frame:e,configCard:n,isMultiInputVisual:!0})).filter(c=>c!==null)}function Zt(e){return Qt(e.dashboard,e.selections).flatMap(({card:r,attachmentIndex:t})=>{var s,u,p,d;const n=((s=e.resolveCardConfig)==null?void 0:s.call(e,r))??r.config,o=De({card:r,cardConfig:n}),a={dashboardId:e.dashboard.id,cardId:r.id,...t!==void 0?{attachmentIndex:t}:{}},i=o?o.fields.map(v=>({scope:a,target:{kind:"field",fieldId:v.id,role:v.role},format:Ve(v,{dateStyle:e.valueFormatPreferences.dateStyle,dateTime:{...e.valueFormatPreferences.dateTime}},e.valueFormatPreferences.locale)})):[],c=[],m=Q(r,n),l=q(r.python||"");if(r.type==="detailTable"&&m==="config"){const v=(n==null?void 0:n.detailColumns)||[],h=[...((n==null?void 0:n.groupByColumns)||[]).map(g=>({field:g,role:"groupby"})),...((n==null?void 0:n.metricColumns)||[]).map(g=>({field:g,role:"metric"})),...((n==null?void 0:n.pivotByColumns)||[]).map(g=>({field:g,role:"pivotby"})),...v.map(g=>({field:g,role:"detail"}))],I=new Map,C=new Set(h.map(({field:g,role:$})=>z.resolveCanonicalResultRawKey(g,$)));for(const{field:g}of h){const $=g.label;$&&I.set($,(I.get($)||0)+1)}for(const g of v){if(g.dateValueMode!=="canonical")continue;const $=z.resolveCanonicalDetailResultRawKey(g),S=g.label,F=z.resolveCanonicalResultOutputKey({label:S,labelCount:S&&I.get(S)||0,rawKey:$,rawKeys:C});if(!F)throw new Z(a);c.push({scope:a,target:{kind:"column",columnKey:F},format:E.resolveRawTemporalFormat({format:ge(g),preferences:e.valueFormatPreferences,calendar:e.calendar})})}}else if(m==="freeform"&&((u=r.sql)!=null&&u.trim())&&!l.trim())for(const[v,h]of Object.entries(((d=(p=r.preferences)==null?void 0:p.tablePrefs)==null?void 0:d.columnSettingsMap)||{})){if(h.type!=="date")continue;const I=ae(h.dateFormat);I&&c.push({scope:a,target:{kind:"column",columnKey:v},format:E.resolveRawTemporalFormat({format:I,preferences:e.valueFormatPreferences,calendar:e.calendar})})}return[...i,...c]})}function Xt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function B(e,r,t){return Xt(e)?e:(t.push({field:r,message:"Expected an object."}),{})}function P(e,r,t,n){const o=new Set(t);Object.keys(e).forEach(a=>{o.has(a)||n.push({field:`${r}.${a}`,message:"Unexpected property."})})}function K(e,r,t,n,o={}){if(e==null)return;if(typeof e!="string"){n.push({field:r,message:"Expected a string."});return}const a=o.trim===!1?e:e.trim();if(!o.allowEmpty&&a.length===0){n.push({field:r,message:"Expected a non-empty string."});return}if(a.length>t){n.push({field:r,message:`Expected ${t} characters or fewer.`});return}return a}function Ce(e,r,t){const n=K(e,r,2e3,t);if(n)try{return new URL(n),n}catch{t.push({field:r,message:"Expected an absolute URL."});return}}function Re(e,r,t){const n=B(e,r,t);P(n,r,["tokens","components"],t);const o={};if(n.tokens!==void 0){const a=B(n.tokens,`${r}.tokens`,t);P(a,`${r}.tokens`,["color","typography"],t);const i={};if(a.color!==void 0){const c=B(a.color,`${r}.tokens.color`,t),m=["background","foreground","muted","mutedForeground","border","primary","primaryForeground","positive","negative","warning","info"];P(c,`${r}.tokens.color`,m,t);const l={};m.forEach(s=>{const u=K(c[s],`${r}.tokens.color.${s}`,120,t);u!==void 0&&(l[s]=u)}),i.color=l}if(a.typography!==void 0){const c=B(a.typography,`${r}.tokens.typography`,t);P(c,`${r}.tokens.typography`,["fontFamily","monoFontFamily"],t);const m=K(c.fontFamily,`${r}.tokens.typography.fontFamily`,500,t,{allowEmpty:!0}),l=K(c.monoFontFamily,`${r}.tokens.typography.monoFontFamily`,500,t,{allowEmpty:!0});i.typography={...m!==void 0?{fontFamily:m}:{},...l!==void 0?{monoFontFamily:l}:{}}}o.tokens=i}if(n.components!==void 0){const a=B(n.components,`${r}.components`,t);if(P(a,`${r}.components`,["chart"],t),a.chart!==void 0){const i=B(a.chart,`${r}.components.chart`,t);P(i,`${r}.components.chart`,["palette"],t);let c;i.palette!==void 0&&(Array.isArray(i.palette)?i.palette.length>20?t.push({field:`${r}.components.chart.palette`,message:"Expected 20 colors or fewer."}):c=i.palette.map((m,l)=>K(m,`${r}.components.chart.palette.${l}`,120,t)).filter(m=>m!==void 0):t.push({field:`${r}.components.chart.palette`,message:"Expected an array."})),o.components={chart:c?{palette:c}:{}}}}return o}function er(e,r){const t="presentation.appearance",n=B(e,t,r);P(n,t,["version","schemes"],r);const o={};if(n.version!==void 0&&(typeof n.version!="number"||!Number.isFinite(n.version)?r.push({field:`${t}.version`,message:"Expected a number."}):o.version=n.version),n.schemes!==void 0){const a=B(n.schemes,`${t}.schemes`,r);P(a,`${t}.schemes`,["light","dark"],r),o.schemes={...a.light!==void 0?{light:Re(a.light,`${t}.schemes.light`,r)}:{},...a.dark!==void 0?{dark:Re(a.dark,`${t}.schemes.dark`,r)}:{}}}return o}function tr(e,r){const t="presentation.brandOverrides",n=B(e,t,r);P(n,t,["brandName","logoUrl","link"],r);const o=K(n.brandName,`${t}.brandName`,200,r),a=Ce(n.logoUrl,`${t}.logoUrl`,r),i=K(n.link,`${t}.link`,120,r);return{...o!==void 0?{brandName:o}:{},...a!==void 0?{logoUrl:a}:{},...i!==void 0?{link:i}:{}}}function rr(e,r){const t="presentation.fragments",n=B(e,t,r),o=["preHeaderText","headerBannerHtml","signatureHtml","footerHtml","disclaimerHtml","unsubscribeUrl"];P(n,t,o,r);const a={};return o.forEach(i=>{const c=i==="unsubscribeUrl"?Ce(n[i],`${t}.${i}`,r):K(n[i],`${t}.${i}`,i==="preHeaderText"?200:5e3,r,{trim:i==="preHeaderText"});c!==void 0&&(a[i]=c)}),a}function nr(e){const r=[],t={};if(e.appearance!==void 0&&(t.appearance=er(e.appearance,r)),e.brandOverrides!==void 0&&(t.brandOverrides=tr(e.brandOverrides,r)),e.fragments!==void 0&&(t.fragments=rr(e.fragments,r)),e.viewUrl!==void 0){const n=Ce(e.viewUrl,"presentation.viewUrl",r);n!==void 0&&(t.viewUrl=n)}return{value:t,issues:r}}const Ze=["SUN","MON","TUE","WED","THU","FRI","SAT"],or=new Map(Ze.map((e,r)=>[e,r])),ar={cadence:"weekly",hour:9,minute:0,weekdays:[1]};function ir(e){if(typeof e!="string"||e.length===0||e!==e.trim()||/^(?:(?:UTC|GMT)[+-]|[+-]\d{2}:\d{2}$)/.test(e))return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch{return!1}}function lr(e){return Number.isInteger(e.minute)&&e.minute>=0&&e.minute<=59&&Number.isInteger(e.hour)&&e.hour>=0&&e.hour<=23}function Xe(e){if(e.length===0)return null;const r=[...e].sort((t,n)=>t-n);return r.some((t,n)=>!Number.isInteger(t)||t<0||t>6||n>0&&t===r[n-1])?null:r}function cr(e){if(!lr(e))throw new Error("Choose a valid schedule time.");const r=`${e.minute} ${e.hour}`;switch(e.cadence){case"daily":return`${r} * * *`;case"weekly":{const t=Xe(e.weekdays);if(!t)throw new Error("Choose at least one weekday.");return`${r} * * ${t.map(n=>Ze[n]).join(",")}`}case"twice_monthly":return`${r} 1,15 * *`;case"monthly":return`${r} 1 * *`}}function et(e){if(typeof e!="string"||e.length===0)return{ok:!1,issue:"Choose a supported schedule."};if(e!==e.trim()||e.includes(" "))return{ok:!1,issue:"Choose a supported schedule."};const r=e.split(" ");if(r.length!==5)return{ok:!1,issue:"Choose a supported schedule."};const[t,n,o,a,i]=r;if(!/^(0|[1-9]\d?)$/.test(t)||!/^(0|[1-9]\d?)$/.test(n))return{ok:!1,issue:"Choose a supported schedule."};const c=Number(t),m=Number(n);if(c>59||m>23||a!=="*")return{ok:!1,issue:"Choose a supported schedule."};if(o==="*"&&i==="*")return{ok:!0,value:{cadence:"daily",hour:m,minute:c,weekdays:[]}};if(o==="*"&&i!=="*"){const s=i.split(",").map(d=>or.get(d));if(s.some(d=>d===void 0))return{ok:!1,issue:"Choose a supported schedule."};const u=s,p=Xe(u);return!p||p.some((d,v)=>d!==u[v])?{ok:!1,issue:"Choose a supported schedule."}:{ok:!0,value:{cadence:"weekly",hour:m,minute:c,weekdays:p}}}return o==="1,15"&&i==="*"?{ok:!0,value:{cadence:"twice_monthly",hour:m,minute:c,weekdays:[]}}:o==="1"&&i==="*"?{ok:!0,value:{cadence:"monthly",hour:m,minute:c,weekdays:[]}}:{ok:!1,issue:"Choose a supported schedule."}}function dr(e,r,t){return new Intl.DateTimeFormat(t,{hour:"numeric",minute:"2-digit",timeZone:"UTC"}).format(new Date(Date.UTC(2020,0,1,e,r)))}function sr(e,r){var t;if(e==="UTC")return"UTC";try{return((t=new Intl.DateTimeFormat(r,{timeZone:e,timeZoneName:"longGeneric"}).formatToParts(new Date(Date.UTC(2020,0,1))).find(o=>o.type==="timeZoneName"))==null?void 0:t.value)??e}catch{return null}}function mr(e,r,t="en-US"){const n=et(e);if(!n.ok)return null;try{const o=dr(n.value.hour,n.value.minute,t),a=sr(r,t);if(!a)return null;switch(n.value.cadence){case"daily":return`Daily at ${o} ${a}`;case"weekly":{const i=new Intl.DateTimeFormat(t,{weekday:"long",timeZone:"UTC"});return`${n.value.weekdays.map(m=>i.format(new Date(Date.UTC(2023,0,1+m)))).join(" and ")} at ${o} ${a}`}case"twice_monthly":return`On the 1st and 15th at ${o} ${a}`;case"monthly":return`Monthly on the 1st at ${o} ${a}`}}catch{return null}}const ur=new Set(["table","aggregateTable","pivotTable","detailTable"]),fr=new Set(["bar","horizontalBar","line","area","stackedArea","combo","pie","doughnut","radar","polarArea","bubble","scatter","stackedBar","stackedLine","table","pivotTable","aggregateTable","matrixTable","detailTable","kpi","pyramid","tornado","range","map","funnel","bullet","heatmap","treemap","custom"]);function pr(e){var n,o,a;const r=fr.has(e.type)&&(e.type!=="custom"||!!((n=e.customCardPreferences)!=null&&n.url));return e.type==="text"||!r||V.isCardUnconfigured(e)?{formats:[],defaultFormat:null}:{formats:tt({cardType:e.type,allowDownload:(o=e.preferences)==null?void 0:o.allowDownload}),defaultFormat:rt({cardType:e.type,allowDownload:(a=e.preferences)==null?void 0:a.allowDownload})}}function tt(e){return e.allowDownload===!1?["pdf"]:["pdf","csv"]}function rt(e){return ur.has(e.cardType)&&e.allowDownload!==!1?"csv":"pdf"}function yr(e){return e!=null&&e.role?e.type==="tenant"?e.role==="POWER_USER":["AUTHOR","ADMIN","SUPER_ADMIN"].includes(e.role):!1}function hr(e){return e.canCreate?[...e.scheduledReportAvailable?["scheduled_report"]:[],...e.analyticalBriefingsEnabled?["analytical_briefing"]:[]]:[]}function nt(e){const r=(e==null?void 0:e.channels)??[];return r.length===1&&r[0]==="EMAIL"}function ot(e){return e.body.type==="generated_analysis"?"Analytical briefing":e.body.type==="custom_message"&&e.attachments.length>0&&nt(e.deliveryConfig)?e.scheduleExpr?"Scheduled report":"On-demand report":"Plain briefing"}function gr(e){const r=ot(e),t=r==="Scheduled report"||r==="On-demand report"?"report":"briefing";return{typeLabel:r,noun:t,pluralNoun:t==="report"?"reports":"briefings"}}const ne="BRIEFING",at=["markdown","html"],oe=["markdown"],X=20,y={name:500,description:2e3,instruction:5e4,customMessage:5e4,contentTitle:500,contentSummary:2e4,contentText:5e3,contentSql:5e4,contentItem:2e3,contentCell:500,attachmentTitle:500,presentationAudience:1e3,presentationTone:500,presentationFormat:2e3,id:500},R={maxBlocks:50,maxTableRows:100,maxTableColumns:20,maxTableCellCharacters:y.contentCell,maxParagraphCharacters:y.contentText,maxFindingCharacters:y.contentText,maxListItems:100,maxKpiTiles:8};function it(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;const r=e;if(typeof r.value!="number"||!Number.isFinite(r.value))return!1;const t=r.target;if(t===null||typeof t!="object"||Array.isArray(t))return!1;const n=t;return(n.kind==="metric"&&typeof n.metricId=="string"&&!!n.metricId.trim()||n.kind==="column"&&typeof n.columnKey=="string"&&!!n.columnKey.trim()||n.kind==="matrix_measure"&&typeof n.measureId=="string"&&!!n.measureId.trim())&&E.parseResolvedNumericCanonicalFormat(r.format).ok}function lt(e){return e==null?"":it(e)?E.formatNumericCanonical(e.value,e.format):String(e)}function vr(e){return[e.delta,e.percentChange].filter(r=>r!=null).map(lt).filter(Boolean).join(" / ")}const ct=new Set(at),br=new Set(["EMAIL","WEBHOOK","SLACK","IN_APP","TELEGRAM"]),de={maxToolCalls:{min:1,max:100},maxPlanningIterations:{min:1,max:10},maxRows:{min:1,max:1e5},timeoutMs:{min:1e3,max:30*6e4}},Ir=new Set(["letter","legal","a4","a3","tabloid"]),Cr=new Set(["portrait","landscape"]),Tr=new Set([",",";"," "]),wr=new Set(["current","all"]),Er=new Set(["concise","balanced","detailed"]),$r=new Set(["info","positive","warning","critical"]),kr=new Set(["text","number","currency","percent","date","boolean"]),Sr=new Set(["left","center","right"]),_r=["pageSize","orientation","includeFilters","includeTimestamp","delimiter","includeHeaders","useFormattedValues","sheetSelection","currentSheetId","currentSheetName","filterValues","inlineFilterValues","sheetFilterValues","filterLine","controlValues","controlDefinitions","cardControlDefinitions","controlBindings","tablePreferences","dashboardInputExecutionSnapshot","selectedSheetId","cardType","allowDownload","theme"];class J extends Error{constructor(t){super(t.map(n=>`${n.field}: ${n.message}`).join("; "));x(this,"issues");this.name="BriefingContractError",this.issues=t}}function dt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function f(e,r,t){e.push({field:r,message:t})}function k(e,r,t){return dt(e)?e:(f(t,r,"Expected an object."),{})}function b(e,r,t,n){const o=new Set(t);Object.keys(e).forEach(a=>{o.has(a)||f(n,r?`${r}.${a}`:a,`Unexpected field "${a}".`)})}function T(e,r,t,n){if(typeof e!="string")return f(n,r,"Expected a string."),"";const o=e.trim();return o?(o.length>t&&f(n,r,`Must be ${t} characters or fewer.`),o):(f(n,r,"Required value cannot be empty."),"")}function w(e,r,t,n){if(e==null)return;if(typeof e!="string"){f(n,r,"Expected a string.");return}const o=e.trim();if(o)return o.length>t&&f(n,r,`Must be ${t} characters or fewer.`),o}function xr(e,r,t,n){if(typeof e!="string")return f(n,r,"Expected a string."),"";const o=e.trim();return o.length>t&&f(n,r,`Must be ${t} characters or fewer.`),o}function Rr(e,r,t){if(e!=null){if(!Number.isInteger(e)||Number(e)<0){f(t,r,"Expected a non-negative integer.");return}return Number(e)}}function A(e,r,t,n={}){if(e==null)return n.required?(f(t,r,"Expected at least one evidence id."),[]):void 0;if(!Array.isArray(e))return f(t,r,"Expected an array."),n.required?[]:void 0;const o=[];return e.forEach((a,i)=>{const c=T(a,`${r}.${i}`,y.id,t);c&&!o.includes(c)&&o.push(c)}),n.required&&o.length===0&&f(t,r,"Expected at least one evidence id."),o.length>0||n.required?o:void 0}function U(e,r,t,n){return e==null?r:typeof e!="boolean"?(f(n,t,"Expected a boolean."),r):e}function Fr(e,r){return e==null?"ACTIVE":e==="ACTIVE"||e==="PAUSED"||e==="DISABLED"?e:(f(r,"status","Expected ACTIVE, PAUSED, or DISABLED."),"ACTIVE")}function Ar(e){return e.includes("@")&&e.includes(".")&&!e.includes(" ")}function st(e,r){if(e==null)return{type:"project"};const t=k(e,"source",r),n=t.type;return n==="project"?(b(t,"source",["type"],r),{type:"project"}):n==="dashboard"?(b(t,"source",["type","dashboardId"],r),{type:"dashboard",dashboardId:T(t.dashboardId,"source.dashboardId",y.id,r)}):(f(r,"source.type","Expected project or dashboard."),{type:"project"})}function mt(e,r){const t=k(e,"body",r),n=t.type;return n==="generated_analysis"?(b(t,"body",["type","instruction"],r),{type:"generated_analysis",instruction:T(t.instruction,"body.instruction",y.instruction,r)}):n==="custom_message"?(b(t,"body",["type","message"],r),{type:"custom_message",message:xr(t.message,"body.message",y.customMessage,r)}):n==="none"?(b(t,"body",["type"],r),{type:"none"}):(f(r,"body.type","Expected generated_analysis, custom_message, or none."),{type:"none"})}function Br(e,r){if(e==null)return[...oe];if(!Array.isArray(e))return f(r,"presentation.artifactFormats","Expected an array."),[...oe];if(e.length===0)return f(r,"presentation.artifactFormats","Choose at least one artifact format."),[];const t=[];return e.forEach((n,o)=>{if(typeof n!="string"||!ct.has(n)){f(r,`presentation.artifactFormats.${o}`,"Expected markdown or html.");return}t.includes(n)||t.push(n)}),t}function ut(e,r){if(e==null)return{artifactFormats:[...oe],includeEvidence:!0,includeSql:!0};const t=k(e,"presentation",r);b(t,"presentation",["artifactFormats","includeEvidence","includeSql","audience","tone","format","appearance","brandOverrides","fragments","viewUrl"],r);const n={artifactFormats:Br(t.artifactFormats,r),includeEvidence:U(t.includeEvidence,!0,"presentation.includeEvidence",r),includeSql:U(t.includeSql,!0,"presentation.includeSql",r)},o=w(t.audience,"presentation.audience",y.presentationAudience,r),a=w(t.tone,"presentation.tone",y.presentationTone,r),i=w(t.format,"presentation.format",y.presentationFormat,r);o&&(n.audience=o),a&&(n.tone=a),i&&(n.format=i);const c=nr(t);return c.issues.forEach(m=>f(r,m.field,m.message)),Object.assign(n,c.value),n}function Pr(e,r,t){return Array.isArray(e)?(e.length===0&&f(t,r,"Expected at least one item."),e.length>R.maxListItems&&f(t,r,`Must have ${R.maxListItems} items or fewer.`),e.slice(0,R.maxListItems).map((n,o)=>T(n,`${r}.${o}`,y.contentItem,t)).filter(Boolean)):(f(t,r,"Expected an array."),[])}function Dr(e,r,t){const n=k(e,r,t);if(n.kind==="metric")return b(n,r,["kind","metricId"],t),{kind:"metric",metricId:T(n.metricId,`${r}.metricId`,y.id,t)};if(n.kind==="column")return b(n,r,["kind","columnKey"],t),{kind:"column",columnKey:T(n.columnKey,`${r}.columnKey`,y.id,t)};if(n.kind==="matrix_measure")return b(n,r,["kind","measureId"],t),{kind:"matrix_measure",measureId:T(n.measureId,`${r}.measureId`,y.id,t)};f(t,`${r}.kind`,"Expected metric, column, or matrix_measure.")}function ft(e,r,t){if(e===null||typeof e!="object"||Array.isArray(e))return;const n=k(e,r,t);if(!Object.prototype.hasOwnProperty.call(n,"target")&&!Object.prototype.hasOwnProperty.call(n,"format"))return;b(n,r,["value","target","format"],t),(typeof n.value!="number"||!Number.isFinite(n.value))&&f(t,`${r}.value`,"Expected a finite number.");const o=Dr(n.target,`${r}.target`,t),a=E.parseResolvedNumericCanonicalFormat(n.format);if(a.ok||a.issues.forEach(i=>f(t,i.path==="$"?`${r}.format`:`${r}.format.${i.path}`,i.message)),!(typeof n.value!="number"||!Number.isFinite(n.value)||!o||!a.ok))return{value:n.value,target:o,format:a.value}}function M(e,r,t){if(typeof e=="string")return e;if(typeof e=="number"){if(!Number.isFinite(e)){f(t,r,"Expected a finite number.");return}return e}const n=ft(e,r,t);if(n)return n;f(t,r,"Expected a string, number, or structured numeric value.")}function Mr(e,r,t){if(e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return typeof e=="string"&&e.length>y.contentCell?(f(t,r,`Must be ${y.contentCell} characters or fewer.`),e.slice(0,y.contentCell)):typeof e=="number"&&!Number.isFinite(e)?(f(t,r,"Expected a finite number."),null):e;const n=ft(e,r,t);return n||(f(t,r,"Expected a string, number, boolean, structured numeric value, or null."),null)}function Or(e,r,t){if(!Array.isArray(e))return f(t,r,"Expected an array."),[];e.length===0&&f(t,r,"Expected at least one column."),e.length>R.maxTableColumns&&f(t,r,`Must have ${R.maxTableColumns} columns or fewer.`);const n=new Set;return e.slice(0,R.maxTableColumns).map((o,a)=>{const i=`${r}.${a}`,c=k(o,i,t);b(c,i,["key","label","kind","align"],t);const m=T(c.key,`${i}.key`,y.id,t);m&&(n.has(m)&&f(t,`${i}.key`,"Column key must be unique."),n.add(m));const l=T(c.label,`${i}.label`,y.contentTitle,t),s=N(c.kind,`${i}.kind`,kr,"text, number, currency, percent, date, or boolean",t),u=N(c.align,`${i}.align`,Sr,"left, center, or right",t);return{key:m,label:l,...s?{kind:s}:{},...u?{align:u}:{}}})}function Kr(e,r,t,n){if(!Array.isArray(e))return f(n,r,"Expected an array."),[];e.length>R.maxTableRows&&f(n,r,`Must have ${R.maxTableRows} rows or fewer.`);const o=new Set(t.map(a=>a.key).filter(Boolean));return e.slice(0,R.maxTableRows).map((a,i)=>{const c=`${r}.${i}`,m=k(a,c,n);return Object.keys(m).forEach(l=>{o.has(l)||f(n,`${c}.${l}`,`Unexpected table cell "${l}".`)}),Object.fromEntries(t.map(l=>[l.key,Mr(m[l.key]??null,`${c}.${l.key}`,n)]))})}function Nr(e,r,t){const n=`content.blocks.${r}`,o=k(e,n,t),a=o.type;if(a==="heading"){b(o,n,["type","text","level","evidenceIds"],t);const i=o.level===void 0||o.level===null?void 0:o.level===2||o.level===3?o.level:void 0;o.level!==void 0&&o.level!==null&&i===void 0&&f(t,`${n}.level`,"Expected 2 or 3.");const c=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"heading",text:T(o.text,`${n}.text`,y.contentTitle,t),...i?{level:i}:{},...c?{evidenceIds:c}:{}}}if(a==="paragraph"){b(o,n,["type","text","evidenceIds"],t);const i=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"paragraph",text:T(o.text,`${n}.text`,y.contentText,t),...i?{evidenceIds:i}:{}}}if(a==="finding"){b(o,n,["type","title","text","severity","evidenceIds"],t);const i=w(o.title,`${n}.title`,y.contentTitle,t),c=N(o.severity,`${n}.severity`,$r,"info, positive, warning, or critical",t);return{type:"finding",...i?{title:i}:{},text:T(o.text,`${n}.text`,y.contentText,t),...c?{severity:c}:{},evidenceIds:A(o.evidenceIds,`${n}.evidenceIds`,t,{required:!0})??[]}}if(a==="bullets"||a==="actions"||a==="limitations"){b(o,n,["type","title","items","evidenceIds"],t);const i=w(o.title,`${n}.title`,y.contentTitle,t),c=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:a,...i?{title:i}:{},items:Pr(o.items,`${n}.items`,t),...c?{evidenceIds:c}:{}}}if(a==="metric"){b(o,n,["type","label","value","previousValue","delta","percentChange","unit","evidenceIds"],t);const i=M(o.value,`${n}.value`,t)??"";i===""&&f(t,`${n}.value`,"Expected a non-empty string, number, or structured numeric value.");const c=o.previousValue===void 0||o.previousValue===null?o.previousValue:M(o.previousValue,`${n}.previousValue`,t),m=o.delta===void 0||o.delta===null?o.delta:M(o.delta,`${n}.delta`,t),l=o.percentChange===void 0||o.percentChange===null?o.percentChange:M(o.percentChange,`${n}.percentChange`,t),s=w(o.unit,`${n}.unit`,y.contentTitle,t),u=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"metric",label:T(o.label,`${n}.label`,y.contentTitle,t),value:i,...c!==void 0?{previousValue:c}:{},...m!==void 0?{delta:m}:{},...l!==void 0?{percentChange:l}:{},...s?{unit:s}:{},...u?{evidenceIds:u}:{}}}if(a==="kpi_grid"){b(o,n,["type","title","tiles","evidenceIds"],t);const i=w(o.title,`${n}.title`,y.contentTitle,t),c=Array.isArray(o.tiles)?o.tiles:[];Array.isArray(o.tiles)||f(t,`${n}.tiles`,"Expected an array."),c.length===0&&f(t,`${n}.tiles`,"Expected at least one tile."),c.length>R.maxKpiTiles&&f(t,`${n}.tiles`,`Must have ${R.maxKpiTiles} tiles or fewer.`);const m=c.slice(0,R.maxKpiTiles).map((s,u)=>{const p=`${n}.tiles.${u}`,d=k(s,p,t);b(d,p,["label","value","previousValue","delta","percentChange","unit","evidenceIds"],t);const v=M(d.value,`${p}.value`,t)??"";v===""&&f(t,`${p}.value`,"Expected a non-empty string, number, or structured numeric value.");const h=d.previousValue===void 0||d.previousValue===null?d.previousValue:M(d.previousValue,`${p}.previousValue`,t),I=d.delta===void 0||d.delta===null?d.delta:M(d.delta,`${p}.delta`,t),C=d.percentChange===void 0||d.percentChange===null?d.percentChange:M(d.percentChange,`${p}.percentChange`,t),g=w(d.unit,`${p}.unit`,y.contentTitle,t),$=A(d.evidenceIds,`${p}.evidenceIds`,t);return{label:T(d.label,`${p}.label`,y.contentTitle,t),value:v,...h!==void 0?{previousValue:h}:{},...I!==void 0?{delta:I}:{},...C!==void 0?{percentChange:C}:{},...g?{unit:g}:{},...$?{evidenceIds:$}:{}}}),l=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"kpi_grid",...i?{title:i}:{},tiles:m,...l?{evidenceIds:l}:{}}}if(a==="progress"){b(o,n,["type","label","value","detail","evidenceIds"],t);const i=typeof o.value=="number"&&Number.isFinite(o.value)?o.value:0;(typeof o.value!="number"||!Number.isFinite(o.value))&&f(t,`${n}.value`,"Expected a finite number.");const c=w(o.detail,`${n}.detail`,y.contentText,t),m=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"progress",label:T(o.label,`${n}.label`,y.contentTitle,t),value:i,...c?{detail:c}:{},...m?{evidenceIds:m}:{}}}if(a==="table"){b(o,n,["type","id","title","columns","rows","caption","totalRows","evidenceIds"],t);const i=Or(o.columns,`${n}.columns`,t),c=w(o.title,`${n}.title`,y.contentTitle,t),m=w(o.id,`${n}.id`,y.id,t),l=w(o.caption,`${n}.caption`,y.contentItem,t),s=Rr(o.totalRows,`${n}.totalRows`,t),u=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"table",...m?{id:m}:{},...c?{title:c}:{},columns:i,rows:Kr(o.rows,`${n}.rows`,i,t),...l?{caption:l}:{},...s!==void 0?{totalRows:s}:{},...u?{evidenceIds:u}:{}}}if(a==="evidence_appendix"){b(o,n,["type","title","evidenceIds"],t);const i=w(o.title,`${n}.title`,y.contentTitle,t);return{type:"evidence_appendix",...i?{title:i}:{},evidenceIds:A(o.evidenceIds,`${n}.evidenceIds`,t,{required:!0})??[]}}if(a==="sql"){b(o,n,["type","title","sql","evidenceIds"],t);const i=w(o.title,`${n}.title`,y.contentTitle,t),c=T(o.sql,`${n}.sql`,y.contentSql,t),m=A(o.evidenceIds,`${n}.evidenceIds`,t);return{type:"sql",...i?{title:i}:{},sql:c,...m?{evidenceIds:m}:{}}}return f(t,`${n}.type`,"Expected heading, paragraph, finding, bullets, metric, kpi_grid, progress, table, actions, limitations, sql, or evidence_appendix."),{type:"paragraph",text:""}}function pt(e){const r=[],t=k(e,"content",r);b(t,"content",["version","title","summary","blocks"],r),t.version!==1&&f(r,"content.version","Expected version 1.");const n=w(t.title,"content.title",y.contentTitle,r),o=w(t.summary,"content.summary",y.contentSummary,r);Array.isArray(t.blocks)||f(r,"content.blocks","Expected an array.");const a=Array.isArray(t.blocks)?t.blocks:[];a.length===0&&f(r,"content.blocks","Expected at least one block."),a.length>R.maxBlocks&&f(r,"content.blocks",`Must have ${R.maxBlocks} blocks or fewer.`);const i=a.slice(0,R.maxBlocks).map((c,m)=>Nr(c,m,r));return Te(r),{version:1,...n?{title:n}:{},...o?{summary:o}:{},blocks:i}}function Vr(e){try{return{valid:!0,value:pt(e),issues:[]}}catch(r){if(r instanceof J)return{valid:!1,issues:r.issues};throw r}}function ee(e,r,t,n){return typeof e=="string"&&t.includes(e)?e:(f(n,r,`Expected ${t.join(" or ")}.`),t[0])}function N(e,r,t,n,o){if(e!=null){if(typeof e=="string"&&t.has(e))return e;f(o,r,`Expected ${n}.`)}}function Lr(e,r,t){if(e!=null){if(!Array.isArray(e)){f(t,r,"Expected an array.");return}return e}}function zr(e,r,t){if(e!=null){if(!dt(e)){f(t,r,"Expected an object.");return}return e}}function Ur(e,r,t){if(e==null)return;const n=k(e,r,t);b(n,r,_r,t);const o={},a=N(n.pageSize,`${r}.pageSize`,Ir,"letter, legal, a4, a3, or tabloid",t),i=N(n.orientation,`${r}.orientation`,Cr,"portrait or landscape",t),c=N(n.delimiter,`${r}.delimiter`,Tr,"comma, semicolon, or tab",t),m=N(n.sheetSelection,`${r}.sheetSelection`,wr,"current or all",t);a&&(o.pageSize=a),i&&(o.orientation=i),c&&(o.delimiter=c),m&&(o.sheetSelection=m);for(const l of["includeFilters","includeTimestamp","includeHeaders","useFormattedValues","allowDownload"])if(!(n[l]===void 0||n[l]===null)){if(typeof n[l]!="boolean"){f(t,`${r}.${l}`,"Expected a boolean.");continue}o[l]=n[l]}for(const l of["currentSheetId","currentSheetName","filterLine","selectedSheetId","cardType","theme"]){const s=w(n[l],`${r}.${l}`,y.id,t);s&&(o[l]=s)}for(const l of["filterValues","inlineFilterValues","sheetFilterValues","controlDefinitions","cardControlDefinitions","controlBindings"]){const s=Lr(n[l],`${r}.${l}`,t);s&&(o[l]=s)}for(const l of["controlValues","tablePreferences","dashboardInputExecutionSnapshot"]){const s=zr(n[l],`${r}.${l}`,t);s&&(o[l]=s)}return Object.keys(o).length>0?o:void 0}function se(e,r,t,n){const o=w(r,t,y.attachmentTitle,n);return o&&(e.title=o),e}function me(e,r,t,n){const o=Ur(r,t,n);return o&&(e.settings=o),e}function qr(e,r,t){const n=`attachments.${r}`,o=k(e,n,t),a=o.type;if(a==="dashboard"){b(o,n,["type","dashboardId","format","title","settings"],t);const i=se({type:"dashboard",dashboardId:T(o.dashboardId,`${n}.dashboardId`,y.id,t),format:ee(o.format,`${n}.format`,["pdf"],t)},o.title,`${n}.title`,t);return me(i,o.settings,`${n}.settings`,t)}if(a==="dashboard_sheet"||a==="document_sheet"){b(o,n,["type","dashboardId","sheetId","format","title","settings"],t);const i=se({type:a,dashboardId:T(o.dashboardId,`${n}.dashboardId`,y.id,t),sheetId:T(o.sheetId,`${n}.sheetId`,y.id,t),format:ee(o.format,`${n}.format`,["pdf"],t)},o.title,`${n}.title`,t);return me(i,o.settings,`${n}.settings`,t)}if(a==="card"){b(o,n,["type","dashboardId","cardId","format","title","settings"],t);const i=se({type:"card",dashboardId:T(o.dashboardId,`${n}.dashboardId`,y.id,t),cardId:T(o.cardId,`${n}.cardId`,y.id,t),format:ee(o.format,`${n}.format`,["csv","pdf"],t)},o.title,`${n}.title`,t);return me(i,o.settings,`${n}.settings`,t)}return f(t,`${n}.type`,"Expected dashboard, dashboard_sheet, document_sheet, or card."),{type:"dashboard",dashboardId:"",format:"pdf"}}function jr(e){switch(e.type){case"dashboard":return`${e.type}:${e.dashboardId}:${e.format}`;case"dashboard_sheet":case"document_sheet":return`${e.type}:${e.dashboardId}:${e.sheetId}:${e.format}`;case"card":return`${e.type}:${e.dashboardId}:${e.cardId}:${e.format}`}}function yt(e,r){if(e==null)return[];if(!Array.isArray(e))return f(r,"attachments","Expected an array."),[];e.length>X&&f(r,"attachments",`Choose ${X} attachments or fewer.`);const t=e.slice(0,X).map((o,a)=>qr(o,a,r)),n=new Set;return t.forEach((o,a)=>{const i=jr(o);n.has(i)&&f(r,`attachments.${a}`,"Duplicate attachment."),n.add(i)}),t}function ht(e,r){if(e==null)return;const t=k(e,"limits",r);b(t,"limits",Object.keys(de),r);const n={};return Object.keys(de).forEach(o=>{const a=t[o];if(a==null)return;const i=de[o];if(typeof a!="number"||!Number.isInteger(a)||a<i.min||a>i.max){f(r,`limits.${o}`,`Expected an integer between ${i.min} and ${i.max}.`);return}n[o]=a}),Object.keys(n).length>0?n:void 0}function Te(e){if(e.length>0)throw new J(e)}function gt(e,r,t){!(e.type==="generated_analysis"||e.type==="custom_message"&&!!e.message.trim())&&r.length===0&&f(t,"body","Add briefing instructions, a custom message, or at least one attachment.")}function Gr(e,r,t){e==null||e.forEach((n,o)=>{const a=`${t}.${o}.scope`,i=n.scope.attachmentIndex;if(i===void 0)throw new E.PresentationExecutionSnapshotError(`${a}.attachmentIndex must identify the attachment that owns this presentation entry.`);const c=r[i];if(!c)throw new E.PresentationExecutionSnapshotError(`${a}.attachmentIndex must identify an existing attachment.`);if(n.scope.dashboardId!==c.dashboardId)throw new E.PresentationExecutionSnapshotError(`${a}.dashboardId must match the dashboard selected by the referenced attachment.`);if(c.type==="card"&&n.scope.cardId!==c.cardId)throw new E.PresentationExecutionSnapshotError(`${a}.cardId must match the card selected by the referenced attachment.`)})}function we(e){const r=[],t=k(e,"jobConfig",r);b(t,"jobConfig",["kind","presentationExecutionSnapshot","source","body","attachments","presentation","limits"],r),t.kind!==ne&&f(r,"kind","Expected BRIEFING.");let n;try{n=E.parsePresentationExecutionSnapshot(t.presentationExecutionSnapshot)}catch(l){if(l instanceof E.PresentationExecutionSnapshotError)throw l;f(r,"jobConfig.presentationExecutionSnapshot",l instanceof Error?l.message:"Invalid presentation snapshot.")}const o=st(t.source,r),a=mt(t.body,r),i=yt(t.attachments,r),c=ut(t.presentation,r),m=ht(t.limits,r);return gt(a,i,r),Gr(n==null?void 0:n.resolvedFormats,i,"jobConfig.presentationExecutionSnapshot.resolvedFormats"),Te(r),{kind:ne,presentationExecutionSnapshot:n,source:o,body:a,attachments:i,presentation:c,...m?{limits:m}:{}}}function Hr(e){return we({...e,kind:ne})}function Ee(e,r,t,n="deliveryConfig.recipients"){const o=`${n}.${r}`,a=k(e,o,t),i=a.type;if(i==="email"){b(a,o,["type","address","name"],t);const c=T(a.address,`${o}.address`,y.id,t),m=w(a.name,`${o}.name`,y.attachmentTitle,t);return c&&!Ar(c)&&f(t,`${o}.address`,"Email address is invalid."),{type:"email",address:c,...m?{name:m}:{}}}return i==="user"?(b(a,o,["type","userId"],t),{type:"user",userId:T(a.userId,`${o}.userId`,y.id,t)}):i==="tenant_user"?(b(a,o,["type","tenantUserId"],t),{type:"tenant_user",tenantUserId:T(a.tenantUserId,`${o}.tenantUserId`,y.id,t)}):i==="group"?(b(a,o,["type","groupId"],t),{type:"group",groupId:T(a.groupId,`${o}.groupId`,y.id,t)}):(f(t,`${o}.type`,"Expected email, user, tenant_user, or group."),{type:"email",address:""})}function Wr(e,r){return e==null?[]:Array.isArray(e)?e.map((t,n)=>Ee(t,n,r)):(f(r,"deliveryConfig.recipients","Expected an array."),[])}function Yr(e,r){if(!Array.isArray(e))return f(r,"deliveryConfig.channels","Expected an array."),[];const t=[];return e.forEach((n,o)=>{if(!$e(n)){f(r,`deliveryConfig.channels.${o}`,"Expected EMAIL, WEBHOOK, SLACK, IN_APP, or TELEGRAM.");return}t.includes(n)||t.push(n)}),t}function Qr(e,r,t){if(e==null)return;const n=k(e,r,t),o={};return Object.entries(n).forEach(([a,i])=>{if(typeof i!="string"){f(t,`${r}.${a}`,"Expected a string.");return}o[a]=i.trim()}),Object.keys(o).length>0?o:void 0}function Jr(e,r,t){if(e==null)return;const n=k(e,r,t);b(n,r,["url","method","headers","secretEncrypted"],t);const o=n.method===void 0||n.method===null?void 0:ee(n.method,`${r}.method`,["POST","PUT"],t),a=Qr(n.headers,`${r}.headers`,t),i=w(n.secretEncrypted,`${r}.secretEncrypted`,2e3,t);return{url:T(n.url,`${r}.url`,2e3,t),...o?{method:o}:{},...a?{headers:a}:{},...i?{secretEncrypted:i}:{}}}function Zr(e,r,t){const n=k(e,r,t),o=n.type;if(o==="channel"){b(n,r,["type","channelId","channelName","isPrivate"],t);const a=w(n.channelName,`${r}.channelName`,y.attachmentTitle,t),i=n.isPrivate===void 0||n.isPrivate===null?void 0:U(n.isPrivate,!1,`${r}.isPrivate`,t);return{type:"channel",channelId:T(n.channelId,`${r}.channelId`,y.id,t),...a?{channelName:a}:{},...i!==void 0?{isPrivate:i}:{}}}return o==="dm"?(b(n,r,["type","recipient"],t),f(t,`${r}.type`,"Slack DM delivery is not supported in V1."),{type:"dm",recipient:Ee(n.recipient,0,t,`${r}.recipient`)}):(f(t,`${r}.type`,"Expected channel."),{type:"channel",channelId:""})}function Xr(e,r,t){if(e==null)return;if(!Array.isArray(e)){f(t,r,"Expected an array.");return}const n=e.map((o,a)=>Ee(o,a,t,r));return n.length>0?n:void 0}function en(e,r,t){if(e==null)return;const n=k(e,r,t);b(n,r,["destination","threadMentions","postThreadDetail","includeDashboardLink","includeBriefingLink"],t);const o=Xr(n.threadMentions,`${r}.threadMentions`,t),a=U(n.postThreadDetail,!0,`${r}.postThreadDetail`,t),i=U(n.includeDashboardLink,!0,`${r}.includeDashboardLink`,t),c=U(n.includeBriefingLink,!0,`${r}.includeBriefingLink`,t);return{destination:Zr(n.destination,`${r}.destination`,t),...o?{threadMentions:o}:{},...n.postThreadDetail!==void 0?{postThreadDetail:a}:{},...n.includeDashboardLink!==void 0?{includeDashboardLink:i}:{},...n.includeBriefingLink!==void 0?{includeBriefingLink:c}:{}}}function tn(e,r,t){const n=k(e,r,t);b(n,r,["subjectOverride","titleOverride","summaryOverride","actionBlockVisible","formatProfile","slackConfig","webhookConfig"],t);const o=N(n.formatProfile,`${r}.formatProfile`,Er,"concise, balanced, or detailed",t),a=w(n.subjectOverride,`${r}.subjectOverride`,500,t),i=w(n.titleOverride,`${r}.titleOverride`,500,t),c=w(n.summaryOverride,`${r}.summaryOverride`,2e3,t),m=U(n.actionBlockVisible,!0,`${r}.actionBlockVisible`,t),l=Jr(n.webhookConfig,`${r}.webhookConfig`,t),s=en(n.slackConfig,`${r}.slackConfig`,t);return{...o?{formatProfile:o}:{},...a?{subjectOverride:a}:{},...i?{titleOverride:i}:{},...c?{summaryOverride:c}:{},...n.actionBlockVisible!==void 0?{actionBlockVisible:m}:{},...s?{slackConfig:s}:{},...l?{webhookConfig:l}:{}}}function rn(e,r){if(e==null)return;const t=k(e,"deliveryConfig.channelConfigs",r),n={};return Object.entries(t).forEach(([o,a])=>{if(!$e(o)){f(r,`deliveryConfig.channelConfigs.${o}`,"Expected a supported delivery channel.");return}n[o]=tn(a,`deliveryConfig.channelConfigs.${o}`,r)}),Object.keys(n).length>0?n:void 0}function nn(e,r){var m,l,s;if(e==null)return null;const t=k(e,"deliveryConfig",r);b(t,"deliveryConfig",["recipients","channels","channelConfigs"],r);const n=rn(t.channelConfigs,r),o=Wr(t.recipients,r),a=Yr(t.channels,r),i=((l=(m=n==null?void 0:n.SLACK)==null?void 0:m.slackConfig)==null?void 0:l.destination.type)==="channel"&&!!n.SLACK.slackConfig.destination.channelId.trim();return a.some(u=>u!=="SLACK")&&o.length===0&&f(r,"deliveryConfig.recipients","Add at least one recipient or remove delivery config."),a.length===0&&f(r,"deliveryConfig.channels","Choose at least one delivery channel or remove delivery config."),a.includes("SLACK")&&!i&&f(r,"deliveryConfig.channelConfigs.SLACK.slackConfig.destination.channelId","Choose a Slack channel destination."),!a.includes("SLACK")&&((s=n==null?void 0:n.SLACK)!=null&&s.slackConfig)&&f(r,"deliveryConfig.channelConfigs.SLACK","Slack config requires SLACK in deliveryConfig.channels."),{recipients:o,channels:a,...n?{channelConfigs:n}:{}}}function le(e){const r=[],t=k(e,"draft",r);b(t,"draft",["name","description","status","scheduleExpr","timezone","source","body","attachments","presentation","limits","deliveryConfig"],r);const n=T(t.name,"name",y.name,r),o=w(t.description,"description",y.description,r)??null,a=w(t.scheduleExpr,"scheduleExpr",500,r)??null,i=w(t.timezone,"timezone",200,r)??"UTC",c=Fr(t.status,r),m=st(t.source,r),l=mt(t.body,r),s=yt(t.attachments,r),u=ut(t.presentation,r),p=ht(t.limits,r),d=nn(t.deliveryConfig,r);return gt(l,s,r),Te(r),{name:n,description:o,status:c,scheduleExpr:a,timezone:i,source:m,body:l,attachments:s,presentation:u,...p?{limits:p}:{},deliveryConfig:d}}function on(e){return le(e)}function an(e){return le(e)}function ln(e){try{return{valid:!0,value:le(e),issues:[]}}catch(r){if(r instanceof J)return{valid:!1,issues:r.issues};throw r}}function cn(e){try{return{valid:!0,value:we(e),issues:[]}}catch(r){if(r instanceof J)return{valid:!1,issues:r.issues};throw r}}function dn(e){return typeof e=="string"&&ct.has(e)}function $e(e){return typeof e=="string"&&br.has(e)}exports.AmbiguousGroupedTemporalGrainError=Be;exports.BRIEFING_ARTIFACT_FORMATS=at;exports.BRIEFING_CONTENT_LIMITS=R;exports.BRIEFING_KIND=ne;exports.BRIEFING_TEXT_LIMITS=y;exports.BriefingContractError=J;exports.DEFAULT_BRIEFING_ARTIFACT_FORMATS=oe;exports.DEFAULT_BRIEFING_SCHEDULE=ar;exports.DashboardTemporalBoundaryError=O;exports.MAX_BRIEFING_ATTACHMENTS=X;exports.PYTHON_DEFAULT_CODE=Ae;exports.buildBriefingJobConfig=Hr;exports.buildBriefingScheduleExpr=cr;exports.buildCreateBriefingRequest=on;exports.buildDashboardCardTableConfig=Tt;exports.buildDashboardTemporalSnapshotEntries=Zt;exports.buildSlotOrderedCards=We;exports.buildUpdateBriefingRequest=an;exports.canCreateBriefingForUser=yr;exports.createCardsFromSlots=Ht;exports.describeBriefingSchedule=mr;exports.findCustomVisualConfigCard=Qe;exports.formatBriefingComparisonValues=vr;exports.formatBriefingDisplayValue=lt;exports.formatGroupedTemporalFieldValue=At;exports.formatGroupedTemporalRecords=_t;exports.formatGroupedTemporalValue=he;exports.getActiveCardFromVisualResource=Vt;exports.getActiveFrameCard=be;exports.getBriefingCardAttachmentCapability=pr;exports.getBriefingCardAttachmentFormats=tt;exports.getBriefingCreationIntents=hr;exports.getBriefingDisplayTypeLabel=ot;exports.getBriefingPresentation=gr;exports.getConfigSlotExpectedType=jt;exports.getCustomVisualInputCards=Ye;exports.getDefaultBriefingCardAttachmentFormat=rt;exports.getEffectiveCardTypeForSlot=Gt;exports.getSlotDefinitionForIndex=Ie;exports.getSlotExpectedChartType=ie;exports.getSlotIndexForCard=He;exports.isBriefingArtifactFormat=dn;exports.isBriefingDeliveryChannel=$e;exports.isBriefingNumericValue=it;exports.isCardRawTemporalPresentationActivated=qe;exports.isCardRawTemporalResultCompatible=Nt;exports.isCustomVisualConfigCard=fe;exports.isDeclaredSqlRawTemporalPresentationCard=ze;exports.isEmailOnlyBriefingDelivery=nt;exports.isGroupedTemporalResultCompatible=xt;exports.isPivotResultContractCompatibleWithCardConfig=Oe;exports.isValidBriefingTimezone=ir;exports.normalizeBriefingContentDocument=pt;exports.normalizeBriefingDraft=le;exports.normalizeBriefingJobConfig=we;exports.normalizeDashboardCardPythonCode=q;exports.normalizeGroupedTemporalField=Pe;exports.normalizeMultiInputPayload=Yt;exports.parseBriefingScheduleExpr=et;exports.parseCanonicalPivotResultTransportOnce=Me;exports.parseFrameObject=je;exports.presentRawTemporalCell=Kt;exports.previewDeclaredSqlRawTemporalFormat=Pt;exports.reindexSlotCards=qt;exports.resolveAuthoredDetailRawTemporalFormat=ge;exports.resolveCardRawTemporalPresentation=Ue;exports.resolveCartesianTemporalActivation=$t;exports.resolveDashboardCardResultOwner=Q;exports.resolveDashboardTemporalActivation=De;exports.resolveDeclaredSqlRawTemporalFormat=ae;exports.resolveGroupedTemporalFieldPresentationByRole=Ne;exports.resolveGroupedTemporalFieldSnapshotFormat=Ve;exports.resolveGroupedTemporalPresentation=Ft;exports.resolveMultiInputType=Je;exports.resolveMultiInputTypeFromVisual=Wt;exports.resolveRegularTableTemporalActivation=Et;exports.validateBriefingContentDocument=Vr;exports.validateBriefingDraft=ln;exports.validateBriefingJobConfig=cn;