react-semaphor 0.1.498 → 0.1.500

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 (120) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +22 -22
  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 +5 -5
  7. package/dist/chunks/{calculated-field-identity-BGIPbwBx.js → calculated-field-identity-BC2NViZZ.js} +73 -63
  8. package/dist/chunks/{calculated-field-identity-CEzmY7Bi.cjs → calculated-field-identity-CtYhhZoG.cjs} +1 -1
  9. package/dist/chunks/{constants-CKoIADZx.js → constants-CTRduy1g.js} +9 -9
  10. package/dist/chunks/{constants-CpBVuEea.cjs → constants-DNgpRMaX.cjs} +1 -1
  11. package/dist/chunks/{dashboard-briefing-launcher-BEmyxEd8.cjs → dashboard-briefing-launcher-BLJZ3Qgs.cjs} +1 -1
  12. package/dist/chunks/{dashboard-briefing-launcher-C8eAX-JN.js → dashboard-briefing-launcher-BXUyvRSV.js} +9 -9
  13. package/dist/chunks/{dashboard-controls-YvJe7cPL.cjs → dashboard-controls-Cd7otu4d.cjs} +1 -1
  14. package/dist/chunks/{dashboard-controls-C_v7sbq4.js → dashboard-controls-Cpwyyh9l.js} +11 -11
  15. package/dist/chunks/{dashboard-date-comparison-definition-aANgeL-E.js → dashboard-date-comparison-definition-C1vJshiP.js} +6 -6
  16. package/dist/chunks/{dashboard-date-comparison-definition-Er8D33iq.cjs → dashboard-date-comparison-definition-CWz_Yte8.cjs} +1 -1
  17. package/dist/chunks/{dashboard-json-BaT3Yy8x.js → dashboard-json-BInzxESW.js} +7 -7
  18. package/dist/chunks/{dashboard-json-CSp5bXIV.cjs → dashboard-json-DCC670oo.cjs} +1 -1
  19. package/dist/chunks/edit-dashboard-visual-CIQ2Ow3V.cjs +172 -0
  20. package/dist/chunks/{edit-dashboard-visual-GWiW0jjy.js → edit-dashboard-visual-Dfmk5Qmc.js} +6183 -6212
  21. package/dist/chunks/{editor-action-buttons-CfZITZwQ.js → editor-action-buttons-DjP4MzoJ.js} +6 -6
  22. package/dist/chunks/{editor-action-buttons-BSC0nwgV.cjs → editor-action-buttons-fiZSPjDC.cjs} +1 -1
  23. package/dist/chunks/{field-aggregations-DLWbqnBW.cjs → field-aggregations-mlkON_QA.cjs} +1 -1
  24. package/dist/chunks/{field-aggregations-CxJWY4Ny.js → field-aggregations-tLaXZ2VJ.js} +13 -13
  25. package/dist/chunks/{field-dependencies-BiyQuGxZ.cjs → field-dependencies-R7MrlW6D.cjs} +1 -1
  26. package/dist/chunks/{field-dependencies-CNOgt39w.js → field-dependencies-ZE2klbHO.js} +1 -1
  27. package/dist/chunks/{index-BJfUMDHc.js → index-BVIet238.js} +42 -42
  28. package/dist/chunks/{index-C3RHKD3d.cjs → index-Bh3SlWJS.cjs} +1 -1
  29. package/dist/chunks/{index-DhBGtRkR.cjs → index-C6KtprFE.cjs} +233 -233
  30. package/dist/chunks/{index-DjbQVfS6.js → index-CBUb9M4R.js} +26553 -26545
  31. package/dist/chunks/{matrix-analytical-definition-s10yOPft.js → matrix-analytical-definition-CIVFNNnF.js} +1 -1
  32. package/dist/chunks/{matrix-analytical-definition-DbaMwlWM.cjs → matrix-analytical-definition-wIEDXvV5.cjs} +1 -1
  33. package/dist/chunks/{matrix-card-DGpXdK_Y.js → matrix-card-BVvKHL7s.js} +2 -2
  34. package/dist/chunks/{matrix-card-BitrcBVw.cjs → matrix-card-Dh0J0_Of.cjs} +1 -1
  35. package/dist/chunks/matrix-control-sources-CjnsBREg.js +605 -0
  36. package/dist/chunks/matrix-control-sources-a67fwoOO.cjs +1 -0
  37. package/dist/chunks/{matrix-definition-AP5W3wGc.js → matrix-definition-BEXCfZAe.js} +3 -3
  38. package/dist/chunks/{matrix-definition-C33isJ3k.cjs → matrix-definition-CKVi4VVg.cjs} +1 -1
  39. package/dist/chunks/{matrix-formatter-CZYFhdZ0.js → matrix-formatter-BTPfthsa.js} +41 -41
  40. package/dist/chunks/{matrix-formatter-UCXQxvV3.cjs → matrix-formatter-CWtdnbfv.cjs} +1 -1
  41. package/dist/chunks/{matrix-member-presentation-5-M0obIa.js → matrix-member-presentation-DiDUvZts.js} +1 -1
  42. package/dist/chunks/{matrix-member-presentation-DgIq9UG9.cjs → matrix-member-presentation-e_KZoZOx.cjs} +1 -1
  43. package/dist/chunks/{matrix-operation-contract-BFumahBa.js → matrix-operation-contract-CPgckXxm.js} +144 -144
  44. package/dist/chunks/{matrix-operation-contract-C0-V685e.cjs → matrix-operation-contract-thtFuUYf.cjs} +1 -1
  45. package/dist/chunks/{metric-comparison-ClKUI7Tu.cjs → metric-comparison-CAqV6VnZ.cjs} +1 -1
  46. package/dist/chunks/{metric-comparison-Df3HmmUE.js → metric-comparison-Dgyq1I3d.js} +1 -1
  47. package/dist/chunks/{pivot-header-presentation-CGWDx1V_.cjs → pivot-header-presentation-DUXM-VOP.cjs} +1 -1
  48. package/dist/chunks/{pivot-header-presentation-CAmKYLgn.js → pivot-header-presentation-DcCO8-Ij.js} +3 -3
  49. package/dist/chunks/{pivot-result-identity-DBeK76wx.js → pivot-result-identity-Be1zm0AV.js} +1 -1
  50. package/dist/chunks/{pivot-result-identity-0grcK7bY.cjs → pivot-result-identity-DJyF4I2K.cjs} +1 -1
  51. package/dist/chunks/{pivot-result-lifecycle-DVPJg7Gg.js → pivot-result-lifecycle-DpSZOMOZ.js} +7 -7
  52. package/dist/chunks/{pivot-result-lifecycle-CC0jWMFT.cjs → pivot-result-lifecycle-E_huAPev.cjs} +1 -1
  53. package/dist/chunks/{raw-temporal-Kc3mdzH7.cjs → raw-temporal-DYoPBY6B.cjs} +1 -1
  54. package/dist/chunks/{raw-temporal-T3PEaGmJ.js → raw-temporal-DfnRBxQn.js} +2 -2
  55. package/dist/chunks/{raw-temporal-contract-Ck5vJoQ6.js → raw-temporal-contract-CNwYygW2.js} +1 -1
  56. package/dist/chunks/{raw-temporal-contract-SwtP1jSh.cjs → raw-temporal-contract-D1_n2pBj.cjs} +1 -1
  57. package/dist/chunks/{report-preferences-dialog-BcaEOgn2.cjs → report-preferences-dialog-BMs2Bt9t.cjs} +1 -1
  58. package/dist/chunks/{report-preferences-dialog-B8DdDM7q.js → report-preferences-dialog-CWK7wxW6.js} +6 -6
  59. package/dist/chunks/{report-runtime-context-D3t8vyl9.cjs → report-runtime-context-CqFbgZq9.cjs} +1 -1
  60. package/dist/chunks/{report-runtime-context-BziN1eg9.js → report-runtime-context-Dln1qvGS.js} +5 -5
  61. package/dist/chunks/{semantic-format-Ca-sdETk.cjs → semantic-format-C7Goni6h.cjs} +1 -1
  62. package/dist/chunks/{semantic-format-A3k--fpE.js → semantic-format-PKQt2EAz.js} +2 -2
  63. package/dist/chunks/{source-entity-resolution-CTUzMH2S.cjs → source-entity-resolution-BMKxwdKN.cjs} +1 -1
  64. package/dist/chunks/{source-entity-resolution-DX9C1ebK.js → source-entity-resolution-BSZ07Sl6.js} +19 -19
  65. package/dist/chunks/{switch-DV8zX7rV.js → switch-B4wVqV4L.js} +51 -50
  66. package/dist/chunks/{switch-CgycqpWv.cjs → switch-DVjKkt22.cjs} +12 -12
  67. package/dist/chunks/{temporal-bucket-contract-BBdvWsY0.cjs → temporal-bucket-contract-CSdspcYj.cjs} +1 -1
  68. package/dist/chunks/{temporal-bucket-contract-lq7Jrif0.js → temporal-bucket-contract-_WCvDnvn.js} +1 -1
  69. package/dist/chunks/{update-policy-DIw_H9RT.cjs → update-policy-BESKAspa.cjs} +1 -1
  70. package/dist/chunks/{update-policy-EgZ1nRbd.js → update-policy-BWbXhkk-.js} +2 -2
  71. package/dist/chunks/{validators-CvLOGzT3.js → validators-CHlnnHuS.js} +1102 -1043
  72. package/dist/chunks/validators-D2F_uxxP.cjs +1 -0
  73. package/dist/dashboard/index.cjs +1 -1
  74. package/dist/dashboard/index.js +1 -1
  75. package/dist/dashboard-authoring/index.cjs +3 -3
  76. package/dist/dashboard-authoring/index.js +112 -107
  77. package/dist/data-app-builder/index.cjs +1 -1
  78. package/dist/data-app-builder/index.js +2 -2
  79. package/dist/data-app-codegen/index.cjs +1 -1
  80. package/dist/data-app-codegen/index.js +2 -2
  81. package/dist/data-app-codegen-node/index.cjs +1 -1
  82. package/dist/data-app-codegen-node/index.js +3 -3
  83. package/dist/data-app-sdk/index.cjs +1 -1
  84. package/dist/data-app-sdk/index.js +4 -4
  85. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  86. package/dist/data-app-sdk-adapters/index.js +2 -2
  87. package/dist/data-app-sdk-validation/index.cjs +1 -1
  88. package/dist/data-app-sdk-validation/index.js +5 -5
  89. package/dist/format-utils/index.cjs +1 -1
  90. package/dist/format-utils/index.js +16 -16
  91. package/dist/index.cjs +1 -1
  92. package/dist/index.js +81 -78
  93. package/dist/report-runtime-context/index.cjs +1 -1
  94. package/dist/report-runtime-context/index.js +2 -2
  95. package/dist/style.css +1 -1
  96. package/dist/surfboard/index.cjs +1 -1
  97. package/dist/surfboard/index.js +2 -2
  98. package/dist/types/analytics-protocol.d.ts +15 -0
  99. package/dist/types/briefings.d.ts +16 -1
  100. package/dist/types/dashboard-assistant.d.ts +15 -0
  101. package/dist/types/dashboard-authoring.d.ts +49 -1
  102. package/dist/types/dashboard.d.ts +23 -1
  103. package/dist/types/data-app-builder.d.ts +15 -0
  104. package/dist/types/data-app-codegen-node.d.ts +15 -0
  105. package/dist/types/data-app-codegen.d.ts +15 -0
  106. package/dist/types/data-app-sdk-adapters.d.ts +15 -0
  107. package/dist/types/data-app-sdk-validation.d.ts +15 -0
  108. package/dist/types/data-app-sdk.d.ts +15 -0
  109. package/dist/types/format-utils.d.ts +15 -0
  110. package/dist/types/index.cjs +1 -1
  111. package/dist/types/index.js +30 -27
  112. package/dist/types/main.d.ts +67 -8
  113. package/dist/types/shared.d.ts +16 -1
  114. package/dist/types/surfboard.d.ts +23 -1
  115. package/dist/types/types.d.ts +67 -8
  116. package/package.json +1 -1
  117. package/dist/chunks/edit-dashboard-visual-_Wap0YGu.cjs +0 -172
  118. package/dist/chunks/matrix-control-sources-DdfST7Fo.cjs +0 -1
  119. package/dist/chunks/matrix-control-sources-Dxh6hOU9.js +0 -523
  120. package/dist/chunks/validators-mhiJSia7.cjs +0 -1
@@ -1 +0,0 @@
1
- "use strict";const i=require("zod"),pt=["missing_dependency","missing_relationship","population_required","ambiguous_relationship"];function vi(e){return pt.includes(e)}const ve=200,L=["second","minute","hour","day","week","month","quarter","year"];function zi(e){return typeof e=="string"&&L.includes(e)}const ft=["week_of_short","week_of_long","quarter_short","quarter_long","fiscal_quarter_short","fiscal_year"],Si={invalidMetadata:"invalid_raw_temporal_metadata"};function gt(e){return e==="second"||e==="minute"||e==="hour"?"datetime":"date"}const Ii={missingMetadata:"missing_temporal_bucket_metadata",invalidMetadata:"invalid_temporal_bucket_metadata",invalidValue:"invalid_temporal_bucket_value"},ki="__auto_count__";function ht(e){return typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function _t(e){return!Array.isArray(e)||e.length===0||e.length>ve||!e.every(ht)?{ok:!1,error:`matchValues must be 1 to ${ve} string, number or boolean values.`}:{ok:!0,values:e}}function yt(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch{return!1}}const bt=i.z.record(i.z.string(),i.z.unknown()),M=i.z.array(bt),x=i.z.enum(["SUM","COUNT","AVG","MIN","MAX","MEDIAN","DISTINCT"]),ie=i.z.enum(["postgres","mysql","mssql","snowflake","clickhouse","bigquery","redshift","duckdb","sqlite","unknown"]),P=i.z.enum(L),ne=i.z.enum(["dimension","measure","date","id","unknown"]),ae=i.z.enum(["string","number","boolean","date","datetime","unknown"]),G=i.z.union([i.z.number(),i.z.string(),i.z.null()]),ge=i.z.enum(["millisecond","second","minute","hour","day"]),Ai=i.z.enum(ft),wi=i.z.discriminatedUnion("mode",[i.z.object({mode:i.z.literal("auto")}).strict(),i.z.object({mode:i.z.literal("preset"),preset:Ai}).strict(),i.z.object({mode:i.z.literal("pattern"),pattern:i.z.string().min(1)}).strict()]),V=i.z.object({type:i.z.literal("temporal_bucket"),presentation:wi}).strict(),xi=i.z.object({tz:i.z.string().min(1).refine(yt,{message:"tz must be a valid IANA timezone"}),weekStart:i.z.number().int().min(0).max(6),fiscalCalendar:i.z.object({kind:i.z.literal("month_aligned"),yearStartMonth:i.z.number().int().min(1).max(12)}).strict().optional()}).strict(),K=i.z.object({kind:i.z.literal("temporal_bucket"),granularity:P,calendar:xi}).strict(),vt=i.z.object({kind:i.z.literal("raw_temporal"),valueKind:i.z.enum(["date","wall_datetime","instant"])}).strict(),oe=i.z.union([i.z.object({type:i.z.enum(["number","currency","percent","percentage","scientific"]),locale:i.z.string().optional(),minimumFractionDigits:i.z.number().optional(),maximumFractionDigits:i.z.number().optional(),useGrouping:i.z.boolean().optional(),prefix:i.z.string().optional(),suffix:i.z.string().optional(),negativeStyle:i.z.enum(["minus","parentheses"]).optional(),compact:i.z.boolean().optional(),scale:i.z.number().optional(),currency:i.z.string().optional(),percentValueMode:i.z.enum(["fraction","whole"]).optional()}).passthrough().superRefine((e,t)=>{"locale"in e&&t.addIssue({code:i.z.ZodIssueCode.custom,path:["locale"],message:"Numeric semantic formats inherit locale from viewer preferences."})}),i.z.object({type:i.z.enum(["date","datetime"]),locale:i.z.string().optional(),pattern:i.z.string().optional(),relative:i.z.boolean().optional(),timezone:i.z.string().optional(),sourceTimezone:i.z.string().optional(),prefix:i.z.string().optional(),suffix:i.z.string().optional()}).passthrough(),i.z.object({type:i.z.literal("duration"),inputUnit:ge.optional(),outputStyle:i.z.enum(["compact","digital","long"]).optional(),largestUnit:ge.optional(),smallestUnit:ge.optional(),maxUnits:i.z.number().optional(),prefix:i.z.string().optional(),suffix:i.z.string().optional(),negativeStyle:i.z.enum(["minus","parentheses"]).optional()}).passthrough(),i.z.object({type:i.z.literal("string"),prefix:i.z.string().optional(),suffix:i.z.string().optional()}).passthrough()]);function Ri(e,t){return i.z.object(e).passthrough().superRefine((n,o)=>{for(const a of t)Object.prototype.hasOwnProperty.call(n,a)||o.addIssue({code:"custom",path:[a],message:`Required field "${a}" is missing.`})})}const re=i.z.object({kind:i.z.literal("semantic"),domainId:i.z.string(),datasetName:i.z.string(),datasetId:i.z.string().optional(),label:i.z.string().optional(),connectionId:i.z.string().optional()}).passthrough(),Re=i.z.object({kind:i.z.literal("physical"),connectionId:i.z.string(),connectionType:i.z.string().optional(),tableName:i.z.string(),databaseName:i.z.string().optional(),schemaName:i.z.string().optional(),label:i.z.string().optional(),dialect:ie.optional()}).passthrough(),zt=i.z.object({kind:i.z.literal("sql"),connectionId:i.z.string(),dialect:ie.optional(),label:i.z.string().optional()}).passthrough(),Fe=i.z.union([re,Re,zt]),Te=i.z.object({name:i.z.string(),label:i.z.string().optional(),role:ne.optional(),dataType:ae.optional(),source:Fe.optional(),aggregate:x.optional()}).passthrough(),De=Te,Fi=i.z.object({kind:i.z.literal("field"),field:De,aggregate:x.optional()}).passthrough(),Me=i.z.object({kind:i.z.literal("derived_field"),name:i.z.string(),label:i.z.string(),description:i.z.string().optional(),resultRole:ne,dataType:ae,computeStage:i.z.enum(["row","aggregate"]),expression:i.z.string(),expressionLanguage:i.z.literal("semaphor_sql_template").optional(),inputs:i.z.record(Fi),defaultAggregate:x.optional(),aggregationBehavior:i.z.enum(["additive","non_additive","ratio_of_sums","weighted","pre_aggregated","snapshot"]).optional(),aggregationStrategy:i.z.enum(["default","symmetric_aggregate","aggregate_then_join","weighted"]).optional(),format:oe.optional(),tags:i.z.array(i.z.string()).optional()}).passthrough(),Ee=Me,Ti=De.and(i.z.object({derivedField:Ee.optional()}).passthrough()),Di=re,Mi=i.z.object({kind:i.z.literal("physical"),connectionId:i.z.string().optional(),connectionType:i.z.string().optional(),tableName:i.z.string(),databaseName:i.z.string().optional(),schemaName:i.z.string().optional(),label:i.z.string().optional(),dialect:ie.optional()}).passthrough(),Ei=i.z.object({kind:i.z.literal("sql"),connectionId:i.z.string().optional(),dialect:ie.optional(),label:i.z.string().optional()}).passthrough(),Ni=i.z.union([Di,Mi,Ei]),ji=i.z.object({key:i.z.string().optional(),name:i.z.string(),label:i.z.string().optional(),role:ne.optional(),dataType:ae.optional(),source:Ni.optional(),aggregate:x.optional(),derivedField:i.z.never().optional()}).passthrough(),T=i.z.object({key:i.z.string(),name:i.z.string(),label:i.z.string(),role:ne.optional(),dataType:ae.optional(),aggregate:x.optional(),source:Fe.optional(),derivedField:Ee.optional(),temporalBucket:K.optional(),rawTemporal:vt.optional(),pivotIdentity:i.z.object({metricId:i.z.string().min(1),metricAlias:i.z.string().min(1),members:i.z.array(i.z.object({fieldId:i.z.string().min(1),value:i.z.string().nullable(),temporalBucket:K.optional()}).strict())}).strict().optional()}).passthrough().superRefine((e,t)=>{if(e.temporalBucket&&e.rawTemporal&&t.addIssue({code:i.z.ZodIssueCode.custom,path:["rawTemporal"],message:"A result column cannot carry both temporalBucket and rawTemporal metadata."}),e.temporalBucket){const n=gt(e.temporalBucket.granularity);e.dataType!==n&&t.addIssue({code:i.z.ZodIssueCode.custom,path:["dataType"],message:`${e.temporalBucket.granularity} temporal buckets require dataType ${n}.`})}if(e.rawTemporal){const n=e.rawTemporal.valueKind==="date"?"date":"datetime";e.dataType!==n&&t.addIssue({code:i.z.ZodIssueCode.custom,path:["dataType"],message:`${e.rawTemporal.valueKind} raw temporal values require dataType ${n}.`})}}),Ci=i.z.object({records:M,columns:i.z.array(T).optional()}).passthrough(),Oi=i.z.object({records:M,columns:i.z.array(T)}).passthrough(),St=i.z.object({code:i.z.string(),message:i.z.string().optional(),invalidField:i.z.string().optional(),fieldRole:i.z.enum(["measure","date","dimension","input","source","sql"]).optional(),validMeasureCandidates:i.z.array(i.z.string()).optional(),validDateCandidates:i.z.array(i.z.string()).optional(),validDimensionCandidates:i.z.array(i.z.string()).optional(),recommendedNextStep:i.z.string()}).passthrough(),ze=i.z.object({code:i.z.string(),message:i.z.string(),path:i.z.string().optional(),fieldRole:i.z.enum(["measure","date","dimension","input","source","sql"]).optional(),repairHint:St.optional()}).passthrough(),$i=i.z.object({ok:i.z.boolean(),errors:i.z.array(ze),warnings:i.z.array(ze),repairHints:i.z.array(St)}).passthrough(),Pi=i.z.object({page:i.z.number(),pageSize:i.z.number(),pageCount:i.z.number(),totalCount:i.z.number(),hasNextPage:i.z.boolean(),hasPrevPage:i.z.boolean()}).passthrough(),se={intentId:i.z.string().optional(),queryPath:i.z.enum(["query_spec","sql","sql_python"]),warnings:i.z.array(i.z.string()).optional(),rowCount:i.z.number().optional(),rowLimitExceeded:i.z.boolean().optional(),limit:i.z.number().optional(),pagination:Pi.optional()},Yi=i.z.object({...se,kind:i.z.literal("metric"),primaryValue:G,measures:i.z.record(G).optional(),missingMeasures:i.z.array(i.z.string()).optional(),comparison:i.z.object({kind:i.z.enum(["previous_period","previous_year","target"]),value:G.optional(),delta:i.z.union([i.z.number(),i.z.null()]).optional(),deltaPercent:i.z.union([i.z.number(),i.z.null()]).optional()}).passthrough().optional(),records:M.optional()}).passthrough(),Bi=i.z.object({...se,kind:i.z.literal("records"),columns:i.z.array(T),records:M,totals:i.z.object({mode:i.z.literal("server"),scope:i.z.literal("filtered_result"),row:i.z.record(i.z.string(),i.z.unknown()),columns:i.z.array(T).optional()}).passthrough().optional()}).passthrough(),It=i.z.object({inputId:i.z.string().min(1),status:i.z.enum(["applied","inactive","skipped","overridden","error"]),reason:i.z.enum(["unrelated","population_required","missing_dependency","missing_relationship","ambiguous_relationship","invalid_metadata","unsupported_dependency","override_not_eligible"]).optional()}),kt=i.z.object({complete:i.z.boolean(),reason:i.z.enum(["unsupported","truncated"]).optional()}),Li=i.z.object({...se,kind:i.z.literal("inputOptions"),dependencyOutcomes:i.z.array(It).optional(),match:kt.optional(),options:i.z.array(Ri({label:i.z.string(),value:i.z.unknown(),count:i.z.number().optional(),disambiguation:i.z.array(i.z.string()).optional()},["value"]))}).passthrough(),Vi=i.z.object({...se,kind:i.z.literal("sql"),columns:i.z.array(T),records:M,sqlShape:i.z.object({statementType:i.z.string().optional(),explicitLimit:i.z.number().optional(),hasPythonCode:i.z.boolean().optional()}).passthrough().optional()}).passthrough();function r(e,t,n){return n?{code:e,message:t,path:n}:{code:e,message:t}}function m(e){return typeof e=="string"&&e.trim().length>0}function qi(e){const t=new Set;return At(e,n=>(t.add(n),`{${n}}`)),Array.from(t)}function At(e,t){let n="",o=0,a=0;for(;a<e.length;){const s=e[a];if(s==="'"||s==='"'){a=Ui(e,a);continue}if(s==="{"){const l=e.indexOf("}",a+1);if(l===-1){a+=1;continue}const d=e.slice(a+1,l);/^[A-Za-z_][A-Za-z0-9_]*$/.test(d)&&(n+=e.slice(o,a)+t(d),o=l+1),a=l+1;continue}a+=1}return n+e.slice(o)}function Ui(e,t){const n=e[t];let o=t+1;for(;o<e.length;){if(e[o]===n){if(e[o+1]===n){o+=2;continue}return o+1}o+=1}return e.length}function f(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}const Hi=new Set(["SUM","COUNT","AVG","MIN","MAX","MEDIAN","DISTINCT"]);function Ne(e,t,n){if(!e||typeof e!="object"){n.push(r("missing_source","Analytics intent needs a source.",t));return}if(e.kind==="semantic"){m(e.domainId)||n.push(r("missing_semantic_domain","Semantic source needs a domainId.",`${t}.domainId`)),m(e.datasetName)||n.push(r("missing_dataset_name","Semantic source needs a datasetName.",`${t}.datasetName`));return}if(e.kind==="physical"){m(e.connectionId)||n.push(r("missing_connection_id","Physical source needs a connectionId.",`${t}.connectionId`)),m(e.tableName)||n.push(r("missing_table_name","Physical source needs a tableName.",`${t}.tableName`));return}if(e.kind==="sql"){m(e.connectionId)||n.push(r("missing_connection_id","SQL source needs a connectionId.",`${t}.connectionId`));return}n.push(r("invalid_source_kind","Source kind is not supported.",t))}function y(e,t,n,o={}){if(!e||!f(e)){o.required&&n.push(r("missing_field_ref","Field reference needs a name.",t));return}m(e.name)||n.push(r("missing_field_ref","Field reference needs a name.",`${t}.name`)),e.source!==void 0&&Ne(e.source,`${t}.source`,n),je(e.aggregate,`${t}.aggregate`,n)}function je(e,t,n){e!==void 0&&(typeof e!="string"||!Hi.has(e))&&n.push(r("invalid_aggregate","Field aggregate must be SUM, COUNT, AVG, MIN, MAX, MEDIAN, or DISTINCT.",t))}const Gi=new Set(["measure","dimension","date","id","unknown"]),Ki=new Set(["row","aggregate"]),wt=new Set(["string","number","boolean","date","datetime","unknown"]),Qi=new Set(["number","currency","percent","percentage","scientific","date","datetime","duration","string","temporal_bucket"]),Wi=new Set(["millisecond","second","minute","hour","day"]),Xi=new Set(["compact","digital","long"]);function xt(e,t,n){if(e===void 0)return;if(!f(e)){n.push(r("invalid_value_format","Value format must be a structured object.",t));return}const o=e;(typeof o.type!="string"||!Qi.has(o.type))&&n.push(r("invalid_value_format_type","Value format type must be number, currency, percent, percentage, scientific, date, datetime, duration, string, or temporal_bucket.",`${t}.type`)),o.type==="temporal_bucket"&&!V.safeParse(e).success&&n.push(r("invalid_temporal_bucket_format","Temporal bucket format must contain a valid auto, preset, or pattern presentation.",t)),(o.type==="number"||o.type==="currency"||o.type==="percent"||o.type==="percentage"||o.type==="scientific")&&Object.prototype.hasOwnProperty.call(e,"locale")&&n.push(r("invalid_value_format","Numeric value formats cannot define viewer locale.",`${t}.locale`)),U(e.minimumFractionDigits,`${t}.minimumFractionDigits`,n),U(e.maximumFractionDigits,`${t}.maximumFractionDigits`,n),U(e.scale,`${t}.scale`,n),U(e.maxUnits,`${t}.maxUnits`,n),e.useGrouping!==void 0&&typeof e.useGrouping!="boolean"&&n.push(r("invalid_value_format_use_grouping","Value format useGrouping must be boolean.",`${t}.useGrouping`)),e.negativeStyle!==void 0&&e.negativeStyle!=="minus"&&e.negativeStyle!=="parentheses"&&n.push(r("invalid_value_format_negative_style","Value format negativeStyle must be minus or parentheses.",`${t}.negativeStyle`)),e.percentValueMode!==void 0&&e.percentValueMode!=="fraction"&&e.percentValueMode!=="whole"&&n.push(r("invalid_value_format_percent_mode","Value format percentValueMode must be fraction or whole.",`${t}.percentValueMode`));for(const a of["inputUnit","largestUnit","smallestUnit"]){const s=e[a];s!==void 0&&(typeof s!="string"||!Wi.has(s))&&n.push(r("invalid_value_format_duration_unit","Duration format units must be millisecond, second, minute, hour, or day.",`${t}.${a}`))}e.outputStyle!==void 0&&(typeof e.outputStyle!="string"||!Xi.has(e.outputStyle))&&n.push(r("invalid_value_format_duration_style","Duration format outputStyle must be compact, digital, or long.",`${t}.outputStyle`))}function U(e,t,n){e!==void 0&&(typeof e!="number"||!Number.isFinite(e))&&n.push(r("invalid_value_format_number","Value format numeric options must be finite numbers.",t))}const Zi=new Set(["additive","non_additive","ratio_of_sums","weighted","pre_aggregated","snapshot"]),Ji=new Set(["default","symmetric_aggregate","aggregate_then_join","weighted"]);function en(e,t,n){if(!e||!f(e)){n.push(r("invalid_derived_field_input","Derived field inputs must be structured input references.",t));return}if(e.kind==="field"){y(e.field,`${t}.field`,n,{required:!0}),je(e.aggregate,`${t}.aggregate`,n);return}n.push(r("invalid_derived_field_input","Derived field input kind must be field.",`${t}.kind`))}function Ce(e){const t=[];if(!f(e))return t.push(r("invalid_derived_field","Derived field definition must be a structured object.")),{ok:!1,errors:t,warnings:[]};if(e.kind!=="derived_field"&&t.push(r("invalid_derived_field_kind","Derived field kind must be derived_field.","kind")),m(e.name)||t.push(r("invalid_derived_field_name","Derived field needs a name.","name")),m(e.label)||t.push(r("invalid_derived_field_label","Derived field needs a label.","label")),Gi.has(e.resultRole)||t.push(r("invalid_derived_field_role","Derived field resultRole must be measure, dimension, date, id, or unknown.","resultRole")),wt.has(e.dataType)||t.push(r("invalid_derived_field_data_type","Derived field dataType must be string, number, boolean, date, datetime, or unknown.","dataType")),Ki.has(e.computeStage)||t.push(r("invalid_derived_field_compute_stage","Derived field computeStage must be row or aggregate.","computeStage")),e.computeStage==="aggregate"&&e.resultRole!=="measure"&&t.push(r("invalid_derived_field_compute_stage","Aggregate-stage derived fields must have resultRole measure.","computeStage")),e.resultRole!=="measure"&&e.defaultAggregate!==void 0&&t.push(r("invalid_derived_field_aggregate","Only measure derived fields may declare defaultAggregate.","defaultAggregate")),e.computeStage==="row"&&e.resultRole==="measure"&&e.defaultAggregate===void 0&&t.push(r("missing_derived_field_default_aggregate","Row-stage measure derived fields must declare defaultAggregate so row results have explicit rollup semantics.","defaultAggregate")),je(e.defaultAggregate,"defaultAggregate",t),e.aggregationBehavior!==void 0&&!Zi.has(e.aggregationBehavior)&&t.push(r("invalid_derived_field_aggregation_behavior","Derived field aggregationBehavior is not supported.","aggregationBehavior")),e.aggregationStrategy!==void 0&&!Ji.has(e.aggregationStrategy)&&t.push(r("invalid_derived_field_aggregation_strategy","Derived field aggregationStrategy is not supported.","aggregationStrategy")),m(e.expression)||t.push(r("invalid_derived_field_expression","Derived field needs a named-token expression.","expression")),e.expressionLanguage!==void 0&&e.expressionLanguage!=="semaphor_sql_template"&&t.push(r("invalid_derived_field_expression_language","Derived field expressionLanguage must be semaphor_sql_template.","expressionLanguage")),!f(e.inputs)||Object.keys(e.inputs).length===0?t.push(r("invalid_derived_field_inputs","Derived field needs at least one typed input.","inputs")):Object.entries(e.inputs).forEach(([o,a])=>{if(!m(o)){t.push(r("invalid_derived_field_input_name","Derived field input names must be non-empty strings.","inputs"));return}en(a,`inputs.${o}`,t)}),m(e.expression)&&f(e.inputs)){const o=qi(e.expression),a=new Set(o),s=Object.keys(e.inputs).filter(l=>m(l));o.forEach(l=>{Object.prototype.hasOwnProperty.call(e.inputs,l)||t.push(r("invalid_derived_field_expression_token",`Derived field expression token "{${l}}" needs a matching inputs.${l} entry.`,"expression"))}),s.forEach(l=>{a.has(l)||t.push(r("unused_derived_field_input",`Derived field input "${l}" is not referenced by expression.`,`inputs.${l}`))})}const n=e.format;return f(n)&&n.type==="temporal_bucket"?t.push(r("invalid_derived_field_format","Derived field computation metadata cannot own temporal bucket presentation; declare grain and format on the grouped field.","format")):xt(n,"format",t),e.tags!==void 0&&(!Array.isArray(e.tags)||e.tags.some(o=>!m(o)))&&t.push(r("invalid_derived_field_tags","Derived field tags must be non-empty strings.","tags")),{ok:t.length===0,errors:t,warnings:[]}}const N=i.z.string().min(1).refine(e=>e.trim().length>0,"Must not be blank."),[tn,nn,an,on]=oe.options,Rt=i.z.union([tn.innerType().omit({locale:!0}).strict().superRefine((e,t)=>{const{minimumFractionDigits:n=0,maximumFractionDigits:o=2}=e;(![n,o].every(a=>Number.isInteger(a)&&a>=0&&a<=20)||n>o)&&t.addIssue({code:"custom",message:"Fraction digits must be integers from 0 to 20 with minimum <= maximum."}),e.scale!==void 0&&!Number.isFinite(e.scale)&&t.addIssue({code:"custom",message:"Scale must be finite."})}),nn.strict(),an.strict(),on.strict()]),Se=i.z.union([Rt,V]),le=i.z.union([re.extend({domainId:N,datasetName:N}).strict(),Re.extend({connectionId:N,tableName:N}).strict()]),Ft=Te.extend({name:N,source:le.optional()}).strict(),de=Me.extend({format:Rt.optional(),inputs:i.z.record(i.z.object({kind:i.z.literal("field"),field:Ft,aggregate:x.optional()}).strict())}).strict().superRefine((e,t)=>{var n;for(const o of Ce(e).errors)t.addIssue({code:"custom",path:((n=o.path)==null?void 0:n.split("."))??[],message:o.message})}),rn=Ft.extend({derivedField:de.optional()}).strict();function ce(e){return typeof e=="string"?e.trim().toLowerCase():""}function Tt(e){return String(e.column_name||e.name||e.qualifiedFieldName||"")}function Dt(e){return Array.from(new Set([e.column_name,e.name,e.qualifiedFieldName,e.alias].filter(t=>typeof t=="string"&&t.trim().length>0).map(t=>t.trim())))}function Oe(e){const t=Nt(e);return t?dn(t)?"number":t.includes("timestamp")||t.includes("datetime")||t.startsWith("time")?"datetime":t.includes("date")?"date":t.includes("bool")?"boolean":"string":"unknown"}const he=new Map([["int","integer"],["uint","integer"],["integer","integer"],["uinteger","integer"],["bigint","integer"],["ubigint","integer"],["smallint","integer"],["usmallint","integer"],["tinyint","integer"],["utinyint","integer"],["mediumint","integer"],["hugeint","integer"],["uhugeint","integer"],["numeric","decimal"],["decimal","decimal"],["float","float"],["double","float"],["real","float"],["bfloat16","float"],["number",null],["money",null],["currency",null],["percent",null]]),sn=["int","uint","decimal","float"];function ln(e){return e.length>0&&Array.from(e).every(t=>t>="0"&&t<="9")}function Mt(e){const t=e.split(/[\s(]/,1)[0]||"";if(he.has(t))return{numeric:!0,kind:he.get(t)??null};const n=sn.find(o=>t.startsWith(o)&&ln(t.slice(o.length)));return n?{numeric:!0,kind:he.get(n)??null}:{numeric:!1,kind:null}}function dn(e){return Mt(e).numeric}function Et(e){return Mt(Nt(e)).kind}function Nt(e){let t=ce(e),n="";for(;t&&t!==n;)n=t,t=it(t,"nullable"),t=it(t,"lowcardinality");return t}function it(e,t){const n=`${t}(`;return!e.startsWith(n)||!e.endsWith(")")?e:e.slice(n.length,-1).trim()}function jt(e){const t=Oe(e);return t==="date"||t==="datetime"}function $e(e){return jt(e.dataType||e.data_type)}function Pe(e){const t=Ct(e);return t==="id"||t==="row_id"}function Ie(e){const t=Ct(e);return Pe(e)||t.endsWith("_id")||t.endsWith("_key")||t.endsWith("_number")}function Ct(e){return ce(Tt(e)||e.name||e.alias).replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function Ye(e,t={}){const n=ce(e.role);return n==="metric"||n==="measure"?!t.excludeIdentifiers||!Ie(e):n==="groupby"||n==="dimension"||n==="date"||n==="id"?!1:Oe(e.dataType||e.data_type)==="number"&&(!t.excludeIdentifiers||!Ie(e))}function cn(e){return!Ye(e)&&!$e(e)}function un(e){const t=new Set,n=new Set,o=new Set;for(const a of e){if(Pe(a))continue;const s=Dt(a);if(s.length!==0){if($e(a)){s.forEach(l=>n.add(l));continue}if(Ye(a,{excludeIdentifiers:!0})){s.forEach(l=>t.add(l));continue}s.forEach(l=>o.add(l))}}return{validMeasureCandidates:Array.from(t).sort(),validDateCandidates:Array.from(n).sort(),validDimensionCandidates:Array.from(o).sort()}}const j=16*1024;function Q(e){const t=/^([+-]?)(?:(\d+)(?:\.(\d*))?|\.(\d+))(?:[eE]([+-]?\d+))?$/.exec(e);return t?{sign:t[1],whole:t[2]??"",fraction:t[3]??t[4],exponent:Number(t[5]??"0")}:null}function nt(e){const{sign:t,whole:n,fraction:o="",exponent:a}=e,s=(n+o).replace(/^0+/,""),l=s.replace(/0+$/,""),d=a-o.length+s.length-l.length;return!Number.isSafeInteger(a)||!Number.isSafeInteger(d)?null:l?`${t==="-"?"-":""}${l}e${d}`:"0"}function Ot(e){const t=Q(e);if(!t)return null;const n=t.sign==="+"?e.slice(1):e,o=Number(e);if(!Number.isFinite(o))return n;const a=nt(t),s=Q(String(o));return a!==null&&s!==null&&a===nt(s)?o:n}function mn(e){if(e.length>j)throw new RangeError("Exact numeric text exceeds 16 KiB.");const t=Q(e);if(!t)throw new TypeError("Expected finite decimal text.");const{sign:n,whole:o,fraction:a,exponent:s}=t,l=`${n}${o||"0"}${a?`.${a}`:""}`;return k(`${l}e${s}`)}function k(e){if(e.length>j)throw new RangeError("Exact numeric text exceeds 16 KiB.");const t=Q(e);if(!t||t.whole===""||t.fraction==="")throw new TypeError("Expected finite decimal text.");const{sign:n,whole:o,fraction:a="",exponent:s}=t;if(!Number.isSafeInteger(s)||Math.abs(s)>j)throw new RangeError("Exact numeric exponent exceeds the text budget.");const l=o+a,d=o.length+s;if(Math.max(l.length,d)+Math.max(0,-d)+3>j)throw new RangeError("Normalized exact numeric text exceeds 16 KiB.");let c;d<=0?c=`0.${"0".repeat(-d)}${l}`:d>=l.length?c=l+"0".repeat(d-l.length):c=`${l.slice(0,d)}.${l.slice(d)}`;const[p,h=""]=c.split("."),v=p.replace(/^0+(?=\d)/,""),F=h.replace(/0+$/,""),_=v+(F?`.${F}`:"");return n==="-"&&_!=="0"?`-${_}`:_}function Be(e,t){const n=e.startsWith("-"),o=t.startsWith("-");if(n!==o)return n?-1:1;const[a,s=""]=(n?e.slice(1):e).split("."),[l,d=""]=(o?t.slice(1):t).split(".");let u=Math.sign(a.length-l.length);if(!u&&a!==l&&(u=a<l?-1:1),!u){const c=Math.max(s.length,d.length),p=s.padEnd(c,"0"),h=d.padEnd(c,"0");u=p===h?0:p<h?-1:1}return u===0?0:n?-u:u}function pn(e,t){if(typeof t=="number"&&!Number.isFinite(t))throw new TypeError("Numeric scale must be finite.");const n=[e,k(String(t))].map(s=>{const[l,d=""]=s.split(".");return{coefficient:BigInt(l+d),digits:d.length}}),o=n[0].coefficient*n[1].coefficient,a=n[0].digits+n[1].digits;return k(`${o}e-${a}`)}function fn(e){try{return k(e)===e}catch{return!1}}const Le=i.z.object({kind:i.z.literal("exact_number"),type:i.z.enum(["integer","decimal"]),value:i.z.string().max(j).refine(fn,"Expected canonical decimal text.")}).strict().superRefine((e,t)=>{e.type==="integer"&&e.value.includes(".")&&t.addIssue({code:"custom",path:["value"],message:"An integer cannot have fractional digits."})}),C=i.z.union([i.z.null(),i.z.string(),i.z.boolean(),i.z.number().finite(),Le]);function $t(e,t){return Le.parse({kind:"exact_number",type:t,value:k(e)})}function Y(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="exact_number"&&"type"in e&&(e.type==="integer"||e.type==="decimal")&&"value"in e&&typeof e.value=="string"}function gn(e){const t=Et(e.nativeDataType);if(!t)throw new TypeError("Numeric result type is not established.");if(e.value===null)return null;if(t==="float"){if(typeof e.value!="number"||!Number.isFinite(e.value))throw new TypeError("Expected a finite floating-point result.");return e.value}if(e.exactText===void 0)throw new TypeError("Exact numeric sidecar is required; rounded result values cannot substitute.");return $t(e.exactText,t)}const Ve=i.z.string().uuid(),ue=i.z.enum(["rows","columns"]),Pt=i.z.enum(["member","subtotal","grand_total","others"]),Yt=i.z.discriminatedUnion("kind",[i.z.object({kind:i.z.literal("value"),value:C}).strict(),i.z.object({kind:i.z.literal("others"),rankingId:Ve}).strict()]),w=i.z.array(i.z.object({levelId:Ve,member:Yt}).strict()).readonly().superRefine((e,t)=>{new Set(e.map(n=>n.levelId)).size!==e.length&&t.addIssue({code:"custom",path:[],message:"Duplicate identity."}),e.some((n,o)=>n.member.kind==="others"&&o!==e.length-1)&&t.addIssue({code:"custom",path:[],message:"Others is terminal."})}),hn=i.z.object({rowPath:w,columnPath:w,measureId:Ve}).strict();function qe(e){return JSON.stringify(e.map(({levelId:t,member:n})=>[t,n.kind==="others"?["others",n.rankingId]:typeof n.value=="object"&&n.value!==null?["exact_number",n.value.value]:[typeof n.value,n.value]]))}const W="SEMAPHOR_CALCULATED_FIELD",Bt="calculated_fields";function _n(e){return(e==null?void 0:e.sourceField)||(e==null?void 0:e.name)||""}const Lt=["MM-DD-YYYY","YYYY-MM-DD","MM/DD/YYYY","DD/MM/YYYY","MMMM DD, YYYY","MMM DD, YYYY","DD MMM YYYY","YYYY-MM-DD HH:mm","YYYY-MM-DD HH:mm:ss","YYYY-MM-DD HH:mm Z","YYYY-MM-DD HH:mm:ss Z","Week of MMM DD, YYYY","Week of MMMM DD, YYYY","YYYY-WW","MMM YYYY","MMMM YYYY","YYYY-MM","MM/YYYY","YYYY MMM","Q1 YYYY","YYYY Q1","1st Quarter YYYY","YYYY-Q1","Quarter 1, YYYY","YYYY","YY","custom"];function yn(e){return e.role==="metric"&&"expression"in e&&!!e.expression}function bn(e){return!!e.expression}function vn(e){return!!e.expression}function zn(e){var t,n;return e?!!(e.expression||e.derivedField||(n=(t=e.calculatedFormula)==null?void 0:t.inputFields)!=null&&n.length||Vt(e)):!1}function Sn(e){var n,o;const t=e;return!!(t!=null&&t.expression&&((o=(n=t.calculatedFormula)==null?void 0:n.inputFields)!=null&&o.length))}function In(e){return!!(e&&(e.entityName===W||e.entityId===W))}function Vt(e){return e?[e.entityName,e.entityId,e.qualifiedEntityName].some(t=>t===W||t===Bt):!1}var qt=(e=>(e.SUBTOTAL="__SUBTOTAL__",e.TOTAL="__TOTAL__",e.ALL="__ALL__",e))(qt||{});const[kn,An,wn,xn]=oe.options,Rn=i.z.union([kn.innerType().strict(),An.extend({type:i.z.literal("date")}).strict(),wn.strict(),xn.strict(),V]),b=i.z.string().min(1),Ut=i.z.enum(["table","view","materialized view","model","file","dataset","url","upload"]),_e=i.z.object({connectionId:b,connectionType:i.z.enum(["GoogleSheets","FileUpload","MySQL","MSSQL","PostgreSQL","BigQuery","Redshift","Snowflake","S3","clickhouse","S3Tables","API","none"]),type:Ut,name:b,alias:i.z.string().optional(),id:b.optional(),domainId:b.optional(),datasetType:i.z.enum(["physical","virtual"]).optional(),label:i.z.string().optional(),description:i.z.string().optional(),dbObjectType:i.z.string().optional(),database:i.z.string().optional(),schema:i.z.string().optional(),dialect:i.z.enum(["mysql","postgres","bigquery","redshift","snowflake","clickhouse","duckdb","mssql"]).optional()}).strict(),X=i.z.lazy(()=>i.z.object({id:b,name:b,label:i.z.string(),derivedLabel:i.z.string().optional(),qualifiedFieldName:b,dataType:b,entityId:b,entityName:b,entityType:Ut,alias:i.z.string().optional(),sourceField:i.z.string().optional(),source:le.optional(),nativeDataType:i.z.string().optional(),description:i.z.string().optional(),qualifiedEntityName:i.z.string().optional(),dateFormat:i.z.enum(Lt).optional(),customFormat:i.z.string().optional(),granularity:P.optional(),role:i.z.enum(["groupby","metric","sortby","pivotby","detail"]).optional(),expression:i.z.string().optional(),derivedField:de.optional(),format:Rn.optional(),semanticTemporalPresentation:i.z.object({granularity:P,format:V}).strict().optional(),aggregate:x.optional(),fieldScope:i.z.enum(["card","sheet","dashboard","domain"]).optional(),calculatedFormula:i.z.object({operation:i.z.enum(["sum","difference","product","ratio","change","percentage","scale","custom"]),inputFields:i.z.array(X),constant:i.z.number().finite().optional()}).strict().optional()}).strict()),Fn=i.z.union([i.z.string(),i.z.number().finite(),i.z.boolean(),i.z.date(),i.z.null()]),Tn=i.z.object({id:b,field:X,operator:i.z.enum(["=","!=",">",">=","<","<=","contains","startsWith","endsWith","like","not like","in","not in","between","not between","isNull","isNotNull"]),value:i.z.union([Fn,i.z.array(i.z.string()),i.z.array(i.z.number().finite())]),label:i.z.string().optional(),temporalBucket:K.optional()}).strict().superRefine((e,t)=>{const{operator:n,value:o}=e;(n==="between"||n==="not between")&&(!Array.isArray(o)||o.length!==2)&&t.addIssue({code:"custom",path:["value"],message:"Between requires two endpoints."}),(n==="in"||n==="not in")&&!Array.isArray(o)&&t.addIssue({code:"custom",path:["value"],message:"Membership requires an array."})}),Ht=i.z.lazy(()=>i.z.object({id:b,logicalOperator:i.z.enum(["AND","OR"]),negate:i.z.boolean(),conditions:i.z.array(Tn),groups:i.z.array(Ht)}).strict()),Dn=i.z.object({baseEntity:_e,joins:i.z.array(i.z.object({id:b,source:_e,target:_e,joinType:i.z.enum(["INNER","LEFT","RIGHT","FULL"]),sequence:i.z.number().int().nonnegative(),relationshipId:i.z.string().optional(),relationshipName:i.z.string().optional(),relationshipCardinality:i.z.enum(["one_to_one","one_to_many","many_to_one","many_to_many"]).optional(),relationshipTraversalDirection:i.z.enum(["forward","reverse"]).optional(),joinKeyGroups:i.z.array(i.z.object({id:b,operator:i.z.enum(["AND","OR"]),keys:i.z.array(i.z.object({id:i.z.string().optional(),source:X,target:X,operator:i.z.enum(["=","!=",">",">=","<","<="])}).strict()).min(1)}).strict()).min(1)}).strict())}).strict(),Gt=i.z.object({axis:ue,levelId:i.z.string().uuid().optional(),oppositePath:w.transform(e=>[...e]).optional()}).strict(),S=i.z.string().min(1),Mn=i.z.array(i.z.enum(["body","header","footer","subtotal","grandTotal"])),En=i.z.enum(["normal","medium","semibold","bold"]),Nn=i.z.enum(["none","underline","line-through"]),Kt=i.z.object({version:i.z.literal(1),rules:i.z.array(i.z.object({id:i.z.string().min(1),name:i.z.string().optional(),enabled:i.z.boolean().optional(),target:i.z.object({level:i.z.enum(["cell","row"]),matrix:Gt.optional(),columnIds:i.z.array(S).optional(),conditionColumnId:S.optional(),applyToColumnIds:i.z.array(S).optional(),tableParts:Mn.optional(),rowRoles:i.z.array(i.z.string()).optional(),depth:i.z.number().int().nonnegative().optional(),includeTotals:i.z.boolean().optional(),includeSubtotals:i.z.boolean().optional()}).strict(),condition:i.z.discriminatedUnion("kind",[i.z.object({kind:i.z.literal("comparison"),columnId:S,operator:i.z.enum(["eq","neq","gt","gte","lt","lte"]),value:C}).strict(),i.z.object({kind:i.z.literal("between"),columnId:S,min:C,max:C,inclusive:i.z.boolean().optional()}).strict(),i.z.object({kind:i.z.literal("blank"),columnId:S,isBlank:i.z.boolean()}).strict(),i.z.object({kind:i.z.literal("contains"),columnId:S,value:i.z.string(),caseSensitive:i.z.boolean().optional(),exact:i.z.boolean().optional()}).strict(),i.z.object({kind:i.z.literal("topBottom"),columnId:S,direction:i.z.enum(["top","bottom"]),count:i.z.number().int().positive()}).strict(),i.z.object({kind:i.z.literal("colorScale"),columnId:S,range:i.z.enum(["auto","manual"]),min:i.z.number().finite().optional(),mid:i.z.number().finite().optional(),max:i.z.number().finite().optional(),colors:i.z.object({min:i.z.string(),mid:i.z.string().optional(),max:i.z.string()}).strict()}).strict(),i.z.object({kind:i.z.literal("dataBar"),columnId:S,range:i.z.enum(["auto","manual"]),min:i.z.number().finite().optional(),max:i.z.number().finite().optional(),color:i.z.string(),showValue:i.z.boolean().optional()}).strict()]),style:i.z.object({backgroundColor:i.z.string().optional(),textColor:i.z.string().optional(),fontWeight:En.optional(),italic:i.z.boolean().optional(),textDecoration:Nn.optional(),icon:i.z.enum(["arrowUp","arrowDown","warning","check","x"]).optional(),dataBar:i.z.object({color:i.z.string(),showValue:i.z.boolean()}).strict().optional()}).strict().optional()}).strict())}).strict();function jn(e,t){const n=s=>{if(Y(s))return s.value;const l=typeof s=="string"?Ot(s.trim())??Z(s):Z(s);if(l===null)return null;try{return mn(String(l))}catch{return null}},o=n(e),a=n(t);return o===null||a===null?null:Be(o,a)}function Cn(e,t,n){const o=Xt(e);if(o===null)return null;if(typeof o=="number"&&typeof t=="number"&&typeof n=="number"){const _=Vn(o,t,n);return{ratio:_,midpointComparison:Math.sign(_-.5)}}if([t,n].some(_=>typeof _=="number"&&!Number.isFinite(_)))return null;const a=[o,t,n].map(_=>{const yi=typeof _=="number"?k(String(_)):_.value,[bi,tt=""]=yi.split(".");return{coefficient:bi+tt,scale:tt.length}}),s=Math.max(...a.map(_=>_.scale)),[l,d,u]=a.map(_=>BigInt(_.coefficient)*10n**BigInt(s-_.scale)),c=u-d,p=l-d;if(c<=0n)return{ratio:l>=u?1:0,midpointComparison:l>=u?1:-1};const h=p*2n-c,v=h<0n?-1:h>0n?1:0;return{ratio:p<=0n?0:p>=c?1:Number(p*1000000000n/c)/1e9,midpointComparison:v}}function On(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function $n(e){return e.enabled!==!1}function Pn(e){return e.kind==="topBottom"||e.kind==="colorScale"&&e.range==="auto"||e.kind==="dataBar"&&e.range==="auto"}function Qt(e){return e.columnId}function Wt(e){const t=[Qt(e.condition)];return{validationRefs:[...new Set([...t,...e.target.conditionColumnId===void 0?[]:[e.target.conditionColumnId],...e.target.columnIds??[],...e.target.applyToColumnIds??[]])],evaluationInputs:t}}function Z(e){if(typeof e=="number")return Number.isFinite(e)?e:null;if(typeof e=="string"&&e.trim()!==""){const t=Number(e);return Number.isFinite(t)?t:null}return null}function Xt(e){return Y(e)?e:Z(e)}function Yn(e){const t=new Set,n=new Set;for(const o of e)Y(o)?n.add(o.value):t.add(o);return{has:o=>Y(o)?n.has(o.value):t.has(o)}}function Bn(e,t){return typeof e=="number"&&typeof t=="number"?Math.sign(e-t):Be(typeof e=="number"?k(String(e)):e.value,typeof t=="number"?k(String(t)):t.value)}function Ln(e){return e==null||e===""}function Vn(e,t,n){return!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)?0:n===t?e>=n?1:0:Math.max(0,Math.min(1,(e-t)/(n-t)))}function qn(e){switch(e){case"bold":return 700;case"semibold":return 600;case"medium":return 500;case"normal":return 400;default:return}}function Un(e){return e?Zt({fontWeight:qn(e.fontWeight),fontStyle:e.italic?"italic":void 0,color:e.textColor,backgroundColor:e.backgroundColor,textDecoration:e.textDecoration}):{}}function Hn(...e){return Object.assign({},...e.filter(t=>!!t).map(Zt))}function Zt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}const z=i.z.string().uuid(),Gn=i.z.string().min(1),Kn=i.z.number().int().positive().max(Number.MAX_SAFE_INTEGER),Jt=i.z.enum(["SUM","COUNT","DISTINCT","AVG","MIN","MAX"]),Ue=rn.omit({aggregate:!0}),Qn={id:z,field:Ue,grain:P.optional()},J=i.z.object(Qn).strict(),Wn=i.z.object({id:z,kind:i.z.literal("aggregate"),field:Ue,aggregate:Jt}).strict(),Xn=i.z.object({id:z,kind:i.z.literal("calculated"),definition:de}).strict(),He=i.z.discriminatedUnion("kind",[Wn,Xn]),ei=i.z.discriminatedUnion("kind",[i.z.object({kind:i.z.literal("member")}).strict(),i.z.object({kind:i.z.literal("measure"),measureId:z,oppositePath:w}).strict()]),Ge=i.z.object({axis:ue,levelId:z,scope:i.z.discriminatedUnion("kind",[i.z.object({kind:i.z.literal("level")}).strict(),i.z.object({kind:i.z.literal("branch"),parent:w}).strict()]),target:ei,direction:i.z.enum(["asc","desc"]),nulls:i.z.enum(["first","last"])}).strict(),ti=i.z.object({id:z,axis:ue,levelId:z,direction:i.z.enum(["top","bottom"]),count:Kn,measureId:z,oppositePath:w,others:i.z.boolean()}).strict(),ii=i.z.object({source:le,rows:i.z.array(J).min(1).readonly(),columns:i.z.array(J).readonly(),measures:i.z.array(He).min(1).readonly(),filters:Ht.optional(),joinPlan:Dn.optional(),relationshipHint:i.z.object({relationshipIds:i.z.array(Gn).optional()}).strict().optional(),sorts:i.z.array(Ge).readonly(),rankings:i.z.array(ti).readonly()}).strict();function Ke(e){return JSON.stringify([e.axis,e.levelId,e.scope.kind,e.scope.kind==="branch"?qe(e.scope.parent):null])}function g(e,t,n){e.addIssue({code:"custom",path:t,message:n})}function A(e,t,n){new Set(e).size!==e.length&&g(t,n,"Duplicate identity.")}function D(e,t,n,o,a,s=!1){n.length>e[t].length&&g(o,a,"Path exceeds axis depth."),n.forEach((l,d)=>{var u;if(l.levelId!==((u=e[t][d])==null?void 0:u.id)&&g(o,[...a,d],"Path must be an ordered axis prefix."),l.member.kind==="others"){const c=l.member.rankingId;(s||d!==n.length-1||!e.rankings.some(p=>p.id===c&&p.others&&p.axis===t&&p.levelId===l.levelId))&&g(o,[...a,d],"Others must terminate a path at its enabled ranking and cannot be a sort/rank target.")}})}function ni(e,t,n,o){A(t.map(Ke),n,o),t.forEach((a,s)=>{const l=[...o,s],d=e[a.axis].findIndex(u=>u.id===a.levelId);if(d<0&&g(n,l,"Sort level is not on its axis."),a.scope.kind==="branch"&&(D(e,a.axis,a.scope.parent,n,[...l,"scope","parent"],!0),a.scope.parent.length!==d&&g(n,l,"Branch sort must name the immediate parent of its level.")),a.target.kind==="measure"){const u=a.target.measureId;e.measures.some(c=>c.id===u)||g(n,l,"Unknown sort measure."),D(e,a.axis==="rows"?"columns":"rows",a.target.oppositePath,n,[...l,"target","oppositePath"],!0)}})}function H(e,t,n,o){e&&(e.kind!==t.kind||e.kind==="semantic"&&t.kind==="semantic"&&e.domainId!==t.domainId||e.kind==="physical"&&t.kind==="physical"&&e.connectionId!==t.connectionId)&&g(n,o,"Field source must belong to the same semantic domain or physical connection.")}function ye(e,t,n){(e.defaultAggregate==="MEDIAN"||Object.values(e.inputs).some(o=>o.aggregate==="MEDIAN"||o.field.aggregate==="MEDIAN"))&&g(t,n,"MEDIAN dependencies are not supported at launch."),(e.aggregationBehavior==="snapshot"||e.aggregationBehavior==="weighted"||e.aggregationStrategy==="weighted")&&g(t,n,"This measure semantic requires a later capability.")}function ai(e,t){A([...e.rows,...e.columns,...e.measures].map(a=>a.id),t,[]),A(e.rankings.map(a=>a.id),t,["rankings"]),A(e.rankings.map(a=>JSON.stringify([a.axis,a.levelId])),t,["rankings"]);for(const a of["rows","columns"])e[a].forEach((s,l)=>{s.grain&&s.field.dataType!==void 0&&!["date","datetime","unknown"].includes(s.field.dataType)&&g(t,[a,l,"grain"],"Grain requires a temporal field.")});const n=[...e.rows,...e.columns,...e.measures.filter(a=>a.kind==="aggregate")];for(const a of n)if(H(a.field.source,e.source,t,[a.id,"field","source"]),a.field.derivedField){a.field.derivedField.computeStage!=="row"&&g(t,[a.id],"Aggregate-stage calculations cannot be grouped or wrapped in an aggregate."),ye(a.field.derivedField,t,[a.id]);for(const s of Object.values(a.field.derivedField.inputs))H(s.field.source,e.source,t,[a.id,"inputs"])}for(const a of e.measures)if(a.kind==="calculated"){(a.definition.computeStage!=="aggregate"||a.definition.resultRole!=="measure")&&g(t,[a.id],"Calculated measures require aggregate stage and measure role."),ye(a.definition,t,[a.id]);for(const s of Object.values(a.definition.inputs))H(s.field.source,e.source,t,[a.id,"inputs"])}const o=a=>{const s=(l,d)=>{var u,c;if((l.aggregate||((u=l.derivedField)==null?void 0:u.computeStage)==="aggregate")&&g(t,d,"Aggregate/HAVING filters are not supported."),l.derivedField){ye(l.derivedField,t,d);for(const p of Object.values(l.derivedField.inputs))H(p.field.source,e.source,t,d)}for(const p of((c=l.calculatedFormula)==null?void 0:c.inputFields)??[])s(p,d)};for(const l of a.conditions)s(l.field,["filters",l.id]);a.groups.forEach(o)};if(e.filters&&o(e.filters),e.joinPlan){const a=[e.joinPlan.baseEntity,...e.joinPlan.joins.flatMap(s=>[s.source,s.target])];(new Set(a.map(s=>s.connectionId)).size>1||e.source.kind==="physical"&&a[0].connectionId!==e.source.connectionId)&&g(t,["joinPlan"],"Joins must stay within the source connection."),A(e.joinPlan.joins.map(s=>s.id),t,["joinPlan","joins"])}ni(e,e.sorts,t,["sorts"]),e.rankings.forEach((a,s)=>{(!e[a.axis].some(l=>l.id===a.levelId)||!e.measures.some(l=>l.id===a.measureId))&&g(t,["rankings",s],"Unknown ranking level or measure."),D(e,a.axis==="rows"?"columns":"rows",a.oppositePath,t,["rankings",s,"oppositePath"],!0)})}const E=ii.superRefine(ai),Zn=ii.extend({rows:i.z.array(J).readonly(),measures:i.z.array(He).readonly()}),oi=Zn.superRefine(ai),Jn=E.innerType().extend({kind:i.z.literal("matrix")}),ri=Jn.superRefine(({kind:e,...t},n)=>{const o=E.safeParse(t);o.success||o.error.issues.forEach(a=>n.addIssue(a))}),ke=i.z.object({visible:i.z.boolean(),position:i.z.enum(["before","after"]),label:i.z.string().optional()}).strict(),at=i.z.object({grand:ke,levels:i.z.record(z,ke).readonly()}).strict(),ot=Kt.shape.rules.element,si=Kt.extend({rules:i.z.array(ot.extend({target:ot.shape.target.extend({rowRoles:i.z.array(Pt).optional()})}))}).superRefine((e,t)=>{var n;A(e.rules.map(o=>o.id),t,["rules"]);for(const o of e.rules){const a=o.condition;a.kind==="topBottom"&&g(t,["rules",o.id],"Relative highlighting is deferred."),(a.kind==="dataBar"||a.kind==="colorScale")&&((a.range!=="manual"||a.min===void 0||a.max===void 0||a.min>=a.max)&&g(t,["rules",o.id],"Explicit increasing range endpoints are required."),a.kind==="colorScale"&&a.mid!==void 0&&(a.mid<=a.min||a.mid>=a.max)&&g(t,["rules",o.id],"Midpoint must be inside the range.")),(n=o.style)!=null&&n.dataBar&&g(t,["rules",o.id],"Use an explicit-range dataBar condition.")}});function li(e,t,n,o,a=[]){for(const s of e.rules){const l=[...a,"rules",s.id],d=s.target.matrix;d&&(d.levelId!==void 0&&!t[d.axis].some(u=>u.id===d.levelId)&&g(o,[...l,"target","matrix","levelId"],"Conditional-format level is not on the selected axis."),d.oppositePath!==void 0&&D(t,d.axis==="rows"?"columns":"rows",d.oppositePath,o,[...l,"target","matrix","oppositePath"])),Wt(s).validationRefs.some(u=>!n.has(u))&&g(o,l,"Conditional rules must reference displayed measures.")}}const ea={layout:i.z.discriminatedUnion("kind",[i.z.object({kind:i.z.literal("compact")}).strict(),i.z.object({kind:i.z.literal("tabular"),repeatLabels:i.z.boolean()}).strict()]),absence:i.z.object({emptyText:i.z.string(),nullText:i.z.string()}).strict(),levelLabels:i.z.record(z,i.z.string()).readonly(),measureLabels:i.z.record(z,i.z.string()).readonly(),levelFormats:i.z.record(z,Se).readonly(),measureFormats:i.z.record(z,Se).readonly(),totals:i.z.object({rows:at,columns:at}).strict(),conditionalFormatting:si.optional()},me=i.z.object(ea).strict(),ta=i.z.object({depth:i.z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),overrides:i.z.array(i.z.object({path:w,expanded:i.z.boolean()}).strict()).readonly()}).strict(),Ae=ta.superRefine((e,t)=>A(e.overrides.map(n=>qe(n.path)),t,["overrides"])),ia={rows:Ae,columns:Ae},q=i.z.object(ia).strict(),na=q.extend({sorts:i.z.array(Ge).readonly()}).strict(),di=na.superRefine((e,t)=>A(e.sorts.map(Ke),t,["sorts"]));function pe(e,t){var u;const{spec:n,presentation:o,defaults:a,session:s}=e,l=new Set([...n.rows,...n.columns].map(c=>c.id)),d=new Set(n.measures.map(c=>c.id));for(const c of["levelLabels","levelFormats","measureLabels","measureFormats"]){const p=c.startsWith("level")?l:d;for(const h of Object.keys(o[c]))p.has(h)||g(t,["presentation",c,h],"Unknown presentation reference.")}for(const[c,p]of Object.entries(o.measureFormats))p.type==="temporal_bucket"&&g(t,["presentation","measureFormats",c],"Measures cannot own temporal bucket formats.");for(const[c,p]of Object.entries(o.levelFormats))p.type==="temporal_bucket"&&!((u=[...n.rows,...n.columns].find(h=>h.id===c))!=null&&u.grain)&&g(t,["presentation","levelFormats",c],"Temporal bucket formats require a grain.");for(const c of["rows","columns"]){const p=Object.keys(o.totals[c].levels);(p.length!==n[c].length||p.some(h=>!n[c].some(v=>v.id===h)))&&g(t,["presentation","totals",c],"Subtotal map must contain exactly the current axis levels.");for(const h of[a,...s?[s]:[]])for(const v of h[c].overrides)D(n,c,v.path,t,[c,"overrides"],!0),v.path.length||g(t,[c,"overrides"],"Use depth to expand/collapse the root.")}s&&ni(n,s.sorts,t,["session","sorts"]),o.conditionalFormatting&&li(o.conditionalFormatting,n,d,t,["presentation","conditionalFormatting"])}const aa=i.z.object({spec:E,presentation:me,defaults:q,session:di.optional()}).strict(),oa=aa.superRefine(pe),ra=i.z.object({version:i.z.literal(1),spec:E,presentation:me,defaultView:q}).strict(),ci=ra.superRefine((e,t)=>pe({...e,defaults:e.defaultView},t)),sa=ci.innerType().extend({spec:oi}),la=sa.superRefine((e,t)=>pe({...e,defaults:e.defaultView},t)),rt=i.z.object({spec:E,presentation:me}).strict(),da=i.z.union([rt.extend({mode:i.z.literal("layout"),format:i.z.enum(["csv","xlsx","pdf"]),expansion:i.z.union([q.extend({kind:i.z.literal("current")}).strict(),i.z.object({kind:i.z.literal("all")}).strict()])}).strict(),rt.extend({mode:i.z.literal("flat"),format:i.z.literal("csv")}).strict()]),ca=da.superRefine((e,t)=>pe({...e,defaults:e.mode==="layout"&&e.expansion.kind==="current"?e.expansion:{rows:{depth:0,overrides:[]},columns:{depth:0,overrides:[]}}},t));function ua(e){return e&&"id"in e?e.id:void 0}const ma="SUM";function I(e){return typeof e=="string"&&e.trim().length>0}function O(e){return I(e)?e.trim().toLowerCase():""}function pa(e){const t=I(e.id)?e.id.trim():void 0;if(!t)return;const n=O(t),o=I(e.table)?e.table.trim():void 0;if(!(n===O(e.name)||o&&n===O(o)))return t}function R(e){const t=I(e.datasetId)?e.datasetId.trim():void 0;if(t)return O(t)===O(e.datasetName)?void 0:t}function Qe(e){if(e.kind!=="semantic")return e;const t=R(e),{datasetId:n,...o}=e;return{...o,...t?{datasetId:t}:{}}}function fa(e){return e?e.kind==="semantic"?!!(I(e.domainId)&&(I(e.datasetId)||I(e.datasetName))):e.kind==="physical"?I(e.connectionId)&&I(e.tableName):I(e.connectionId):!1}function ee(e){if(!e)return"";if(e.kind==="semantic"){const t=R(e);return[e.kind,e.domainId,t?`datasetId:${t}`:`datasetName:${e.datasetName}`].join(":")}return e.kind==="physical"?[e.kind,e.connectionId,e.databaseName||"",e.schemaName||"",e.tableName].join(":"):[e.kind,e.connectionId,e.dialect||"",e.label||""].join(":")}function fe(e,t){if(!e||!t)return e===t;if(e.kind!==t.kind)return!1;if(e.kind==="semantic"&&t.kind==="semantic"){if(e.domainId!==t.domainId)return!1;const n=R(e),o=R(t);return n&&o?n===o:e.datasetName===t.datasetName}return ee(e)===ee(t)}function We(e,t){return e.kind!=="semantic"||t.kind!=="semantic"?e:Qe({...e,datasetName:e.datasetName||t.datasetName,datasetId:R(e)||R(t),label:e.label||t.label,connectionId:e.connectionId||t.connectionId})}function ga(e){const t=[];for(const n of e){const o=Qe(n),a=t.findIndex(s=>fe(s,o));if(a===-1){t.push(o);continue}t[a]=We(t[a],o)}return t}function ui(e,t){return e.name===t.name&&fe(e.source,t.source)}function ha(e){return[e.source?ee(e.source):"unknown",Xe(e),e.name].filter(Boolean).join(":")}function Xe(e){return _a(e.aggregate||ma)}function _a(e){return e.trim().toUpperCase()}function ya(e,t){return{...e,label:e.label||t.label,role:e.role||t.role,dataType:e.dataType||t.dataType,source:e.source&&t.source?We(e.source,t.source):e.source||t.source}}function ba(e){for(let t=0;t<e.length;t+=1){const n=e[t];if(e.some((o,a)=>a!==t&&pi(o,n)))return!1}return!0}function mi(e,t){return ui(e,t)}function pi(e,t){return mi(e,t)&&B(e)===B(t)}function va(e){return`Metric intent has duplicate measure "${e.name}" with the same aggregate (${B(e)}). Use different aggregates to request both, or remove one entry.`}function st(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||e===null}function za(e,t,n){if(e!==void 0){if(!e||typeof e!="object"||Array.isArray(e)){n.push(r("invalid_sql_default_parameters","SQL defaultParameters must be an object keyed by parameter name.",t));return}Object.entries(e).forEach(([o,a])=>{if(!o.trim()){n.push(r("invalid_sql_default_parameter_name","SQL defaultParameters names must be non-empty strings.",`${t}.${o}`));return}(Array.isArray(a)?a.every(st):st(a))||n.push(r("invalid_sql_default_parameter_value","SQL defaultParameters values must be strings, numbers, booleans, nulls, or arrays of those scalar values.",`${t}.${o}`))})}}function Sa(e,t){return Ze(e,t).length===1}function Ia(e,t){return Ze(e,t).length===1}function Ze(e,t){return t.filter(o=>ka(e,o))}function ka(e,t){return Aa(e,t)?e.source?mi(t,e):!0:!1}function Aa(e,t){return!(t.name!==e.name||e.role!==void 0&&t.role!==void 0&&t.role!==e.role||wa(e,t)&&B(t)!==B(e))}function wa(e,t){return e.role==="measure"||t.role==="measure"||e.aggregate!==void 0||t.aggregate!==void 0}function B(e){return Xe(e)}const xa=/^(\d{4})-(\d{2})-(\d{2})$/,fi=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?(Z|[+-]\d{2}:\d{2})$/;function te(e){if(typeof e!="string")return null;const t=e.trim(),n=xa.exec(t);if(n){const[,v,F,_]=n;return lt(v,F,_)?new Date(Date.UTC(Number(v),Number(F)-1,Number(_))):null}const o=fi.exec(t);if(!o)return null;const[,a,s,l,d,u,c="00",,p]=o;if(!lt(a,s,l)||!$(d,0,23)||!$(u,0,59)||!$(c,0,59)||!Fa(p))return null;const h=new Date(t);return Number.isFinite(h.getTime())?h:null}function Ra(e){return typeof e!="string"||!fi.test(e.trim())?null:te(e)}function lt(e,t,n){const o=Number(e),a=Number(t),s=Number(n);if(!Number.isInteger(o)||!Number.isInteger(a)||!Number.isInteger(s)||a<1||a>12)return!1;const l=new Date(Date.UTC(o,a-1,s));return l.getUTCFullYear()===o&&l.getUTCMonth()===a-1&&l.getUTCDate()===s}function $(e,t,n){const o=Number(e);return Number.isInteger(o)&&o>=t&&o<=n}function Fa(e){if(e==="Z")return!0;const t=/^([+-])(\d{2}):(\d{2})$/.exec(e);return!!(t&&$(t[2],0,23)&&$(t[3],0,59))}function dt(e,t,n){if(e!==void 0){if(!f(e)){n.push(r("invalid_pagination","Pagination must be an object with positive integer page and pageSize.",t));return}(!Number.isInteger(e.page)||typeof e.page!="number"||e.page<1)&&n.push(r("invalid_pagination_page","Pagination page must be a positive integer.",`${t}.page`)),(!Number.isInteger(e.pageSize)||typeof e.pageSize!="number"||e.pageSize<1)&&n.push(r("invalid_pagination_page_size","Pagination pageSize must be a positive integer.",`${t}.pageSize`))}}function ct(e){const t=new Set;for(const n of e){if(t.has(n))return n;t.add(n)}return null}function Ta(e,t,n){if(!f(e)){n.push(r("invalid_input_binding","Input bindings must be structured objects.",t));return}m(e.inputId)||n.push(r("invalid_input_binding","Input bindings need a non-empty inputId.",`${t}.inputId`)),e.kind!==void 0&&e.kind!=="filter"&&e.kind!=="control"&&n.push(r("invalid_input_binding","Input binding kind must be filter or control.",`${t}.kind`)),e.field!==void 0&&y(e.field,`${t}.field`,n),e.relationshipHint!==void 0&&Je(e.relationshipHint,`${t}.relationshipHint`,n)}function Je(e,t,n){if(!f(e)){n.push(r("invalid_relationship_hint","Relationship hints must be structured objects.",t));return}e.relationshipIds!==void 0&&(!Array.isArray(e.relationshipIds)||e.relationshipIds.some(o=>!m(o)))&&n.push(r("invalid_relationship_hint","Relationship hint relationshipIds must be non-empty strings.",`${t}.relationshipIds`))}function Da(e,t){var o,a;if(((o=e.source)==null?void 0:o.kind)!=="semantic"&&((a=e.source)==null?void 0:a.kind)!=="physical"&&t.push(r("invalid_input_options_source","Input options must use a semantic or physical source.","source")),m(e.inputId)||t.push(r("missing_input_options_input_id","Input options intent needs the inputId it populates.","inputId")),e.search!==void 0&&typeof e.search!="string"&&t.push(r("invalid_input_options_search","Input options search must be a string.","search")),e.matchValues!==void 0){const s=_t(e.matchValues);s.ok||t.push(r("invalid_input_options_match_values",s.error,"matchValues")),typeof e.search=="string"&&e.search.trim()&&t.push(r("invalid_input_options_match_values","Input options matchValues cannot be combined with search.","matchValues"))}if(e.limit!==void 0&&(typeof e.limit!="number"||!Number.isFinite(e.limit)||!Number.isInteger(e.limit)||e.limit<=0)&&t.push(r("invalid_input_options_limit","Input options limit must be a positive finite number.","limit")),(!e.labelField||!m(e.labelField.name))&&t.push(r("missing_input_options_label_field","Input options intent needs a labelField.","labelField")),y(e.labelField,"labelField",t,{required:!0}),(!e.valueField||!m(e.valueField.name))&&t.push(r("missing_input_options_value_field","Input options intent needs a valueField.","valueField")),y(e.valueField,"valueField",t,{required:!0}),e.searchField!==void 0&&y(e.searchField,"searchField",t,{required:!0}),e.disambiguationFields!==void 0&&(Array.isArray(e.disambiguationFields)?e.disambiguationFields.forEach((s,l)=>{y(s,`disambiguationFields.${l}`,t,{required:!0})}):t.push(r("invalid_input_options_disambiguation_fields","Input options disambiguationFields must be an array of field refs.","disambiguationFields"))),[{field:e.labelField,path:"labelField"},{field:e.valueField,path:"valueField"},...e.searchField?[{field:e.searchField,path:"searchField"}]:[],...Array.isArray(e.disambiguationFields)?e.disambiguationFields.map((s,l)=>({field:s,path:`disambiguationFields.${l}`})):[]].forEach(({field:s,path:l})=>{s!=null&&s.source&&!fe(s.source,e.source)&&t.push(r("input_options_field_source_mismatch","Input option fields must belong to the declared option source.",`${l}.source`))}),e.dependencies!==void 0){const s=gi(e.dependencies);t.push(...s.errors),s.ok&&Na(e,t)}if(e.population!==void 0){const s=e.population;if(!f(s))t.push(r("invalid_input_options_population","Input options population must be a structured object.","population"));else{const l=s.kind;l!=="option_source"&&l!=="related_population"&&t.push(r("invalid_input_options_population","Input options population kind must be option_source or related_population.","population.kind")),l==="option_source"&&s.baseSource!==void 0&&t.push(r("invalid_input_options_population","Input options population baseSource is only valid for related_population.","population.baseSource")),l==="option_source"&&s.relationshipHint!==void 0&&t.push(r("invalid_input_options_population","Input options population relationshipHint is only valid for related_population.","population.relationshipHint")),l==="related_population"&&(Ne(s.baseSource,"population.baseSource",t),s.relationshipHint!==void 0&&Je(s.relationshipHint,"population.relationshipHint",t))}}}function Ma(e,t){if(!(!("inputs"in e)||e.inputs===void 0)){if(!Array.isArray(e.inputs)){t.push(r("invalid_input_binding","Analytics intent inputs must be an array of input bindings.","inputs"));return}e.inputs.forEach((n,o)=>Ta(n,`inputs.${o}`,t))}}function gi(e,t="protocol"){const n=[];if(!f(e))return n.push(r("invalid_input_options_dependencies","Input options dependencies must be a structured object.","dependencies")),{ok:!1,errors:n,warnings:[]};const o=e,a=o.mode;if(a!==void 0&&a!=="independent"&&a!=="explicit"&&a!=="all_applicable"&&n.push(r("invalid_input_options_dependencies","Input options dependencies mode must be independent, explicit, or all_applicable.","dependencies.mode")),be(o.includeInputIds,"dependencies.includeInputIds",n,"Input options includeInputIds must be non-empty strings."),be(o.excludeInputIds,"dependencies.excludeInputIds",n,"Input options excludeInputIds must be non-empty strings."),a==="all_applicable"&&o.includeInputIds!==void 0&&n.push(r("invalid_input_options_dependencies","All applicable dependencies cannot specify includeInputIds.","dependencies.includeInputIds")),be(o.omitInputIds,"dependencies.omitInputIds",n,"Input options omitInputIds must be non-empty strings."),Array.isArray(o.omitInputIds)){const s=new Set(Array.isArray(o.includeInputIds)?o.includeInputIds:[]);(a!=="explicit"||new Set(o.omitInputIds).size!==o.omitInputIds.length||o.omitInputIds.some(l=>!s.has(l)))&&n.push(r("invalid_input_options_dependencies","A browse override may only omit unique ids from an explicit includeInputIds list.","dependencies.omitInputIds"))}return t==="dashboard"&&Ea(o,n),{ok:n.length===0,errors:n,warnings:[]}}function Ea(e,t){const{mode:n,includeInputIds:o,excludeInputIds:a}=e;n===void 0&&t.push(r("invalid_input_options_dependencies","Dashboard option dependencies must declare a mode.","dependencies.mode"));for(const[s,l]of[["dependencies.includeInputIds",o],["dependencies.excludeInputIds",a]])Array.isArray(l)&&new Set(l).size!==l.length&&t.push(r("invalid_input_options_dependencies","Dashboard option dependency input IDs must be unique.",s));n==="independent"&&(o!==void 0||a!==void 0)&&t.push(r("invalid_input_options_dependencies","Independent dashboard dependencies cannot specify input IDs.","dependencies")),n==="explicit"&&(!Array.isArray(o)||o.length===0||a!==void 0)&&t.push(r("invalid_input_options_dependencies","Explicit dashboard dependencies require included input IDs and cannot specify exclusions.","dependencies"))}function Na(e,t){var a,s,l;const n=new Set(Array.isArray(e.inputs)?e.inputs.map(d=>f(d)?d.inputId:void 0).filter(d=>typeof d=="string"):[]),o=new Set(((a=e.dependencies)==null?void 0:a.omitInputIds)||[]);for(const d of((s=e.dependencies)==null?void 0:s.includeInputIds)||[])!n.has(d)&&!o.has(d)&&t.push(r("invalid_input_options_dependencies",`Input options dependency "${d}" is not declared in inputs.`,"dependencies.includeInputIds"));for(const d of((l=e.dependencies)==null?void 0:l.excludeInputIds)||[])d!==e.inputId&&!n.has(d)&&t.push(r("invalid_input_options_dependencies",`Input options dependency exclusion "${d}" is not the populated inputId and is not declared in inputs.`,"dependencies.excludeInputIds"))}function be(e,t,n,o){e!==void 0&&(!Array.isArray(e)||e.some(a=>!m(a)))&&n.push(r("invalid_input_options_dependencies",o,t))}const ja=new Set(L);function Ca(e,t,n){if(f(e)&&e.type==="temporal_bucket"){n.push(r("invalid_scalar_value_format","Scalar and measure slots cannot own temporal bucket presentation; declare it with grain on a grouped field or axis.",t));return}xt(e,t,n)}function ut(e,t,n){if(!f(e)){n.push(r("invalid_result_column_ref","Result calculation references must use columnKey or field.",t));return}const o=m(e.columnKey),a=f(e.field);if(o===a){n.push(r("invalid_result_column_ref","Result calculation references must identify exactly one of columnKey or field.",t));return}a&&y(e.field,`${t}.field`,n,{required:!0})}function Oa(e,t,n){if(!f(e)){n.push(r("invalid_result_calculation_output","Result calculation output must be a structured object.",t));return}m(e.key)||n.push(r("invalid_result_calculation_output","Result calculation output needs a stable key.",`${t}.key`)),e.dataType!==void 0&&(typeof e.dataType!="string"||!wt.has(e.dataType))&&n.push(r("invalid_result_calculation_output","Result calculation output dataType must be string, number, boolean, date, datetime, or unknown.",`${t}.dataType`)),Ca(e.format,`${t}.format`,n)}function $a(e,t){if(e.analysis===void 0)return;if(!f(e.analysis)){t.push(r("invalid_measure_analysis","Metric analysis must be a structured object.","analysis"));return}if(e.analysis.kind!=="period_change"){t.push(r("invalid_measure_analysis","Metric analysis kind is not supported.","analysis.kind"));return}e.dateField||t.push(r("missing_analysis_date_field","Period-change analysis needs a dateField.","dateField")),e.timeGrain||t.push(r("missing_analysis_time_grain","Period-change analysis needs a timeGrain.","timeGrain")),e.analysis.orderBy!==void 0&&e.analysis.orderBy!=="absolute_change"&&e.analysis.orderBy!=="positive_change"&&e.analysis.orderBy!=="negative_change"&&e.analysis.orderBy!=="period"&&t.push(r("invalid_measure_analysis","Period-change analysis orderBy must be absolute_change, positive_change, negative_change, or period.","analysis.orderBy"));const{timeWindow:n}=e.analysis;n!==void 0&&we(n,"analysis.timeWindow",t)}function we(e,t,n){if(!f(e)){n.push(r("invalid_time_window","Time window must be a structured object.",t));return}if(e.kind!==void 0&&e.kind!=="relative"&&e.kind!=="absolute"&&n.push(r("invalid_time_window","Time window kind must be relative or absolute.",`${t}.kind`)),e.kind==="absolute"){if(m(e.start)||n.push(r("invalid_time_window","Absolute time window start must be a non-empty ISO date or timestamp string.",`${t}.start`)),m(e.end)||n.push(r("invalid_time_window","Absolute time window end must be a non-empty ISO date or timestamp string.",`${t}.end`)),m(e.start)&&m(e.end)){const o=te(e.start),a=te(e.end);o||n.push(r("invalid_time_window","Absolute time window start must be a valid ISO date or timestamp.",`${t}.start`)),a||n.push(r("invalid_time_window","Absolute time window end must be a valid ISO date or timestamp.",`${t}.end`)),o&&a&&o.getTime()>a.getTime()&&n.push(r("invalid_time_window","Absolute time window start must be before or equal to end.",t))}return}(typeof e.unit!="string"||!ja.has(e.unit))&&n.push(r("invalid_time_window",`Time window unit must be one of: ${L.join(", ")}.`,`${t}.unit`)),(typeof e.value!="number"||!Number.isFinite(e.value)||e.value<=0)&&n.push(r("invalid_time_window","Time window value must be a positive number.",`${t}.value`)),e.anchor!==void 0&&e.anchor!=="now"&&e.anchor!=="latest_available"&&n.push(r("invalid_time_window","Time window anchor must be now or latest_available.",`${t}.anchor`)),e.completeness!==void 0&&e.completeness!=="include_partial"&&e.completeness!=="complete_periods"&&n.push(r("invalid_time_window","Time window completeness must be include_partial or complete_periods.",`${t}.completeness`))}function xe(e,t,n){if(e!==void 0){if(!Array.isArray(e)){n.push(r("invalid_analytics_filters","Analytics filters must be an array.",t));return}e.forEach((o,a)=>{var u;const s=`${t}.${a}`;if(!f(o)){n.push(r("invalid_analytics_filter","Analytics filter must be a structured object.",s));return}const l=o;y(l.field,`${s}.field`,n,{required:!0}),l.scope!==void 0&&l.scope!=="row"&&l.scope!=="aggregate"&&n.push(r("invalid_analytics_filter_scope","Analytics filter scope must be row or aggregate.",`${s}.scope`)),l.scope==="aggregate"&&((u=l.field)==null?void 0:u.role)!==void 0&&l.field.role!=="measure"&&n.push(r("invalid_analytics_filter_scope","Aggregate-scope analytics filters must target a measure field.",`${s}.scope`));const d=l.operator==="is_null"||l.operator==="is_not_null";if(l.operator!==void 0&&l.operator!=="="&&l.operator!=="!="&&l.operator!=="in"&&l.operator!=="not_in"&&l.operator!=="contains"&&l.operator!=="not_contains"&&l.operator!=="between"&&l.operator!=="not_between"&&l.operator!==">"&&l.operator!==">="&&l.operator!=="<"&&l.operator!=="<="&&l.operator!=="is_null"&&l.operator!=="is_not_null"&&n.push(r("invalid_analytics_filter_operator","Analytics filter operator is not supported.",`${s}.operator`)),l.values===void 0&&!d&&n.push(r("missing_analytics_filter_value","Analytics filter needs values unless it is a null check.",s)),d&&l.values!==void 0){n.push(r("invalid_analytics_filter_values","Null-check analytics filters must not include values.",`${s}.values`));return}if(l.values!==void 0&&!Array.isArray(l.values)){n.push(r("invalid_analytics_filter_values","Analytics filter values must be an array when provided.",`${s}.values`));return}if(l.values!==void 0){const c=l.values.length;if(l.operator==="between"||l.operator==="not_between"){c!==2&&n.push(r("invalid_analytics_filter_values","Between analytics filters must include exactly two values.",`${s}.values`));return}(l.operator==="contains"||l.operator==="not_contains"||l.operator==="="||l.operator==="!="||l.operator===">"||l.operator===">="||l.operator==="<"||l.operator==="<="||l.operator===void 0)&&c!==1&&n.push(r("invalid_analytics_filter_values","Scalar analytics filters must include exactly one value. Use in/not_in for multiple values.",`${s}.values`))}})}}function Pa(e){const t=[];if(!f(e))return t.push(r("invalid_result_calculation","Result calculation must be a structured object.")),{ok:!1,errors:t,warnings:[]};if(m(e.id)||t.push(r("invalid_result_calculation_id","Result calculation needs an id.","id")),m(e.label)||t.push(r("invalid_result_calculation_label","Result calculation needs a label.","label")),e.kind!=="percent_of_total"&&e.kind!=="rank"&&e.kind!=="running_total"&&e.kind!=="previous_row_delta"&&t.push(r("invalid_result_calculation_kind","Result calculation kind must be percent_of_total, rank, running_total, or previous_row_delta.","kind")),ut(e.input,"input",t),Oa(e.output,"output",t),e.kind==="percent_of_total"){const n=e.denominator;n!==void 0&&(f(n)?n.scope==="population"?(y(n.metric,"denominator.metric",t,{required:!0}),xe(n.filters,"denominator.filters",t)):n.scope!=="returned_result"&&t.push(r("invalid_result_calculation_denominator","Percent-of-total denominator scope must be returned_result or population.","denominator.scope")):t.push(r("invalid_result_calculation_denominator","Percent-of-total denominator must be a structured object.","denominator")))}return e.kind==="rank"&&e.order!==void 0&&e.order!=="asc"&&e.order!=="desc"&&t.push(r("invalid_result_calculation_order","Rank result calculation order must be asc or desc.","order")),(e.kind==="running_total"||e.kind==="previous_row_delta")&&e.orderBy!==void 0&&ut(e.orderBy,"orderBy",t),{ok:t.length===0,errors:t,warnings:[]}}function et(e){var o;const t=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[r("invalid_analytics_intent","Analytics intent must be a structured object.")],warnings:n,repairHints:[{code:"invalid_analytics_intent",recommendedNextStep:"Send one structured analytics intent object with kind, source, and required fields."}]};if(e.kind==="matrix"){const a=ri.safeParse(e);return a.success||t.push(...a.error.issues.map(s=>r("invalid_matrix_intent",s.message,s.path.join(".")))),{ok:t.length===0,errors:t,warnings:n,repairHints:mt(t)}}if(e.version!==void 0&&e.version!==1&&t.push(r("invalid_version","Analytics intent version must be 1.","version")),Ne(e.source,"source",t),Ya(e,t),Ma(e,t),"relationshipHint"in e&&e.relationshipHint!==void 0&&Je(e.relationshipHint,"relationshipHint",t),e.kind==="metric"){const a=Array.isArray(e.measures)?e.measures.filter(s=>f(s)&&m(s.name)):[];if(!Array.isArray(e.measures)||e.measures.length===0?t.push(r("missing_measure","Metric intent needs at least one measure.","measures")):e.measures.some(s=>!f(s)||!m(s.name))&&t.push(r("invalid_measure_list","Metric intent measures must be an array of field references with names.","measures")),a.forEach((s,l)=>{y(s,`measures.${l}`,t,{required:!0})}),a.length>0&&!ba(a)){const s=a.find((l,d)=>a.some((u,c)=>c!==d&&pi(u,l)));s&&t.push(r("duplicate_measure",va(s),"measures"))}if(f(e.primaryMeasure)&&m(e.primaryMeasure.name)&&Ze(e.primaryMeasure,a).length>1&&t.push(r("ambiguous_primary_measure","Metric intent primaryMeasure must identify exactly one selected measure.","primaryMeasure")),e.primaryMeasure!==void 0&&(y(e.primaryMeasure,"primaryMeasure",t,{required:!0}),f(e.primaryMeasure)&&m(e.primaryMeasure.name)&&a.length>0&&!Sa(e.primaryMeasure,a)&&t.push(r("invalid_primary_measure","Metric intent primaryMeasure must match one measure field reference.","primaryMeasure"))),e.dimensions!==void 0&&!Array.isArray(e.dimensions)?t.push(r("invalid_measure_dimensions","Metric intent dimensions must be an array of field references.","dimensions")):Array.isArray(e.dimensions)&&e.dimensions.some(s=>!f(s)||!m(s.name))&&t.push(r("invalid_measure_dimensions","Metric intent dimensions must be an array of field references with names.","dimensions")),e.dateField!==void 0&&y(e.dateField,"dateField",t),e.timeWindow!==void 0&&(we(e.timeWindow,"timeWindow",t),e.dateField||t.push(r("missing_time_window_date_field","Metric timeWindow needs a dateField.","dateField"))),xe(e.filters,"filters",t),Array.isArray(e.dimensions)&&e.dimensions.forEach((s,l)=>{y(s,`dimensions.${l}`,t)}),e.orderBy!==void 0){if(!f(e.orderBy))t.push(r("invalid_measure_order_by","Metric intent orderBy must be a structured object.","orderBy"));else if(y(e.orderBy.field,"orderBy.field",t,{required:!0}),e.orderBy.direction!=="asc"&&e.orderBy.direction!=="desc"&&t.push(r("invalid_measure_order_direction","Metric intent orderBy direction must be asc or desc.","orderBy.direction")),f(e.orderBy.field)&&m(e.orderBy.field.name)){const s=[...a,...e.timeGrain&&e.dateField&&f(e.dateField)?[e.dateField]:[],...Array.isArray(e.dimensions)?e.dimensions.filter(l=>f(l)&&m(l.name)):[]];s.length>0&&!Ia(e.orderBy.field,s)&&t.push(r("invalid_measure_order_by","Metric intent orderBy.field must match one selected measure, grouped dateField, or dimension.","orderBy.field"))}}$a(e,t)}else if(e.kind==="records"){if(!Array.isArray(e.fields)||e.fields.length===0?t.push(r("missing_record_fields","Records intent needs at least one field.","fields")):e.fields.some(a=>!f(a)||!m(a.name))&&t.push(r("invalid_record_fields","Records intent fields must be field references with names.","fields")),Array.isArray(e.fields)&&e.fields.forEach((a,s)=>{y(a,`fields.${s}`,t)}),e.dateField!==void 0&&y(e.dateField,"dateField",t),dt(e.pagination,"pagination",t),e.timeWindow!==void 0&&(we(e.timeWindow,"timeWindow",t),e.dateField||t.push(r("missing_time_window_date_field","Records timeWindow needs a dateField.","dateField"))),xe(e.filters,"filters",t),Array.isArray(e.filters)&&e.filters.forEach((a,s)=>{f(a)&&a.scope==="aggregate"&&t.push(r("unsupported_record_filter_scope","Records intents support row-scope filters only. Use a metric intent for aggregate-scope filters.",`filters.${s}.scope`))}),e.orderBy!==void 0&&(f(e.orderBy)?(y(e.orderBy.field,"orderBy.field",t,{required:!0}),e.orderBy.direction!=="asc"&&e.orderBy.direction!=="desc"&&t.push(r("invalid_record_order_direction","Records intent orderBy direction must be asc or desc.","orderBy.direction"))):t.push(r("invalid_record_order_by","Records intent orderBy must be a structured object.","orderBy"))),e.totals!==void 0)if(!f(e.totals))t.push(r("invalid_records_totals","Records totals must be a structured server totals request.","totals"));else{e.totals.mode!=="server"&&t.push(r("invalid_records_totals","Records totals mode must be server.","totals.mode"));const a=e.totals.measures;!Array.isArray(a)||a.length===0?t.push(r("missing_records_totals_measures","Records server totals need at least one measure.","totals.measures")):a.forEach((s,l)=>{y(s,`totals.measures.${l}`,t,{required:!0}),(!f(s)||s.role!=="measure")&&t.push(r("invalid_records_totals_measure","Records server totals measures must be measure field references.",`totals.measures.${l}.role`))})}}else e.kind==="inputOptions"?Da(e,t):e.kind==="sql"?(((o=e.source)==null?void 0:o.kind)!=="sql"&&t.push(r("invalid_sql_source","SQL analytics intent must use a SQL execution source.","source")),m(e.sql)||t.push(r("missing_sql","SQL analytics intent needs SQL text.","sql")),za(e.defaultParameters,"defaultParameters",t),Array.isArray(e.fields)&&e.fields.forEach((a,s)=>{y(a,`fields.${s}`,t)}),dt(e.pagination,"pagination",t)):t.push(r("invalid_analytics_kind","Analytics kind is not supported.","kind"));return{ok:t.length===0,errors:t,warnings:n,repairHints:mt(t)}}function Ya(e,t){if(!(!("derivedFields"in e)||e.derivedFields===void 0)){if(!Array.isArray(e.derivedFields)){t.push(r("invalid_derived_fields","Analytics intent derivedFields must be an array of derived field definitions.","derivedFields"));return}e.derivedFields.forEach((n,o)=>{Ce(n).errors.forEach(s=>{t.push({...s,path:s.path?`derivedFields.${o}.${s.path}`:`derivedFields.${o}`})})})}}function hi(e){const t=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[r("invalid_operation_intent","Operation intent must be a structured object.")],warnings:n,repairHints:[{code:"invalid_operation_intent",recommendedNextStep:"Send one typed operation intent with version, kind, and required operation fields."}]};if(e.version!==1&&t.push(r("invalid_version","Operation intent version must be 1.","version")),e.kind==="answer_obligations")!Array.isArray(e.obligations)||e.obligations.length===0?t.push(r("missing_obligations","Answer-obligations operation intent needs at least one obligation.","obligations")):e.obligations.forEach((o,a)=>{m(o.id)||t.push(r("missing_obligation_id","Each analytics obligation needs an id.",`obligations.${a}.id`)),m(o.prompt)||t.push(r("missing_obligation_prompt","Each analytics obligation needs a prompt.",`obligations.${a}.prompt`))});else if(e.kind==="dashboard_change"||e.kind==="data_app_change"){if(m(e.instruction)||t.push(r("missing_instruction","Change operation intent needs an instruction.","instruction")),e.analyticsIntent){const o=et(e.analyticsIntent);t.push(...o.errors),n.push(...o.warnings)}}else t.push(r("invalid_operation_kind","Operation intent kind is not supported.","kind"));return{ok:t.length===0,errors:t,warnings:n,repairHints:_i(t)}}function Ba(e){const t=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[r("invalid_recovery_plan","Analytics recovery plan must be a structured object.")],warnings:n,repairHints:[{code:"invalid_recovery_plan",recommendedNextStep:"Return a typed recovery plan with operationIntent and plannedToolCalls."}]};e.version!==1&&t.push(r("invalid_version","Recovery plan version must be 1.","version")),e.kind!=="analytics_recovery_plan"&&t.push(r("invalid_recovery_plan_kind","Recovery plan kind must be analytics_recovery_plan.","kind"));const o=hi(e.operationIntent);return t.push(...o.errors),n.push(...o.warnings),Array.isArray(e.plannedToolCalls)||t.push(r("invalid_planned_tool_calls","Recovery plan plannedToolCalls must be an array.","plannedToolCalls")),{ok:t.length===0,errors:t,warnings:n,repairHints:_i(t)}}function _i(e){return e.map(t=>({code:t.code,recommendedNextStep:t.code==="missing_obligations"?"Normalize the user request into one or more typed analytics obligations before recovery planning.":"Correct the operation/recovery contract shape before planning execution."}))}function mt(e){return e.map(t=>{switch(t.code){case"invalid_matrix_intent":return{code:t.code,recommendedNextStep:`Correct MatrixSpec at ${t.path||"the definition"}: ${t.message} Keep presentation and matrixWindowRequest outside the intent.`};case"missing_source":return{code:t.code,fieldRole:"source",recommendedNextStep:"Provide a semantic, physical, or SQL source before executing analytics."};case"missing_measure":return{code:t.code,fieldRole:"measure",recommendedNextStep:"Choose one exact measure from the grounded schema candidates."};case"missing_record_fields":return{code:t.code,fieldRole:"dimension",recommendedNextStep:"Provide at least one field for the records intent."};case"missing_matrix_rows":return{code:t.code,fieldRole:"dimension",recommendedNextStep:"Choose at least one row axis level for the matrix table."};case"missing_matrix_values":return{code:t.code,fieldRole:"measure",recommendedNextStep:"Choose at least one value field for the matrix table."};case"unsupported_matrix_sql_source":return{code:t.code,fieldRole:"source",recommendedNextStep:"Use a semantic or explorer-backed source for matrix tables; raw SQL matrix tables are not supported."};case"missing_input_options_input_id":return{code:t.code,fieldRole:"input",recommendedNextStep:"Provide the inputId that these option values populate."};case"missing_input_options_label_field":return{code:t.code,fieldRole:"dimension",recommendedNextStep:"Provide the human-readable field used as option labels."};case"missing_input_options_value_field":return{code:t.code,fieldRole:"dimension",recommendedNextStep:"Provide the stable field used as option values."};case"missing_sql":return{code:t.code,fieldRole:"sql",recommendedNextStep:"Provide bounded read-only SQL with an explicit outer LIMIT."};case"conflicting_sql":return{code:t.code,fieldRole:"sql",recommendedNextStep:"Use one canonical SQL text location for the intent; prefer top-level sql."};case"missing_semantic_domain":case"missing_dataset_name":case"missing_connection_id":case"missing_table_name":return{code:t.code,fieldRole:"source",recommendedNextStep:"Use grounded catalog metadata to fill the missing source reference."};default:return}}).filter(t=>!!t)}function La(e,t,n,o){if(!e||typeof e!="object"){n.push(r("invalid_view","Dashboard view must be an object.",t));return}if(m(e.title)||n.push(r("missing_view_title","Dashboard view needs a title.",t)),!e.presentation||typeof e.presentation!="object"){n.push(r("missing_presentation","Dashboard view needs a presentation.",`${t}.presentation`));return}if(e.presentation.kind==="text"){m(e.text)||o.push(r("missing_text_content","Text views should include text content.",`${t}.text`));return}if(!e.analytics){n.push(r("missing_view_analytics","Non-text dashboard views need analytics intent.",`${t}.analytics`));return}e.presentation.kind==="matrixTable"&&e.analytics.kind!=="matrix"&&n.push(r("invalid_matrix_view_analytics","Matrix table views need matrix analytics intent.",`${t}.analytics.kind`));const a=et(e.analytics);for(const s of a.errors)n.push(r(s.code,s.message,`${t}.analytics${s.path?`.${s.path}`:""}`));for(const s of a.warnings)o.push(r(s.code,s.message,`${t}.analytics${s.path?`.${s.path}`:""}`))}function Va(e){const t=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[r("invalid_dashboard_intent","Dashboard intent must be a structured object.")],warnings:n};e.version!==1&&t.push(r("invalid_version","Dashboard intent version must be 1.")),e.kind!=="dashboard"&&t.push(r("invalid_kind","Experience intent kind must be dashboard.")),m(e.title)||t.push(r("missing_title","Dashboard intent needs a title.","title"));const o=Array.isArray(e.inputs)?e.inputs:[],a=ct(o.filter(f).map(u=>u.id).filter(u=>typeof u=="string"));a&&t.push(r("duplicate_input_id",`Duplicate input id: ${a}.`,"inputs"));for(const[u,c]of o.entries()){const p=`inputs.${u}`;if(!f(c)){t.push(r("invalid_input","Dashboard input must be an object.",p));continue}m(c.id)||t.push(r("missing_input_id","Input needs an id.",`${p}.id`)),m(c.label)||t.push(r("missing_input_label","Input needs a label.",`${p}.label`)),!c.field||!m(c.field.name)?t.push(r("missing_input_field","Input needs a field.",`${p}.field`)):y(c.field,`${p}.field`,t)}const s=Array.isArray(e.sections)?e.sections:[];s.length===0&&t.push(r("missing_sections","Dashboard intent needs at least one section.","sections"));const l=s.flatMap(u=>u&&typeof u=="object"&&Array.isArray(u.views)?u.views.filter(f).map(c=>c.id).filter(c=>!!c):[]),d=ct(l);d&&t.push(r("duplicate_view_id",`Duplicate dashboard view id: ${d}.`,"sections"));for(const[u,c]of s.entries()){const p=`sections.${u}`;if(!c||typeof c!="object"){t.push(r("invalid_section","Dashboard section must be an object.",p));continue}if(m(c.title)||t.push(r("missing_section_title","Dashboard section needs a title.",p)),!Array.isArray(c.views)||c.views.length===0){t.push(r("missing_section_views","Dashboard section needs at least one view.",`${p}.views`));continue}for(const[h,v]of c.views.entries())La(v,`${p}.views.${h}`,t,n)}return{ok:t.length===0,errors:t,warnings:n}}exports.CALCULATED_FIELD_ENTITY_MARKER=W;exports.DATE_FORMAT_VALUES=Lt;exports.LEGACY_CALCULATED_FIELD_ENTITY_MARKER=Bt;exports.MAX_OPTION_MATCH_VALUES=ve;exports.OVERRIDABLE_OPTION_DEPENDENCY_REASONS=pt;exports.PivotMarkerEnum=qt;exports.RAW_TEMPORAL_CONTRACT_ERROR_CODES=Si;exports.SEMAPHOR_GENERATED_COUNT_METRIC_ID=ki;exports.SEMAPHOR_TIME_GRAINS=L;exports.TEMPORAL_BUCKET_CONTRACT_ERROR_CODES=Ii;exports.TEMPORAL_BUCKET_PRESETS=ft;exports.baseStyleToResolvedStyle=Un;exports.buildAnalyticsCatalogFieldSummary=un;exports.canonicalDashboardRecordsPayloadSchema=Oi;exports.canonicalizeExactNumericText=k;exports.canonicalizeSemaphorSourceIdentity=Qe;exports.checkMatrixConditionalFormattingReferences=li;exports.checkMatrixPath=D;exports.compareExactDecimal=Be;exports.compareExactFormattingValues=jn;exports.compareFormattingNumbers=Bn;exports.conditionColumnId=Qt;exports.conditionNeedsRowDomainFacts=Pn;exports.conditionalRuleMeasureRefs=Wt;exports.configDerivedFieldSchema=de;exports.configSourceRefSchema=le;exports.createExactNumericValue=$t;exports.createFormattingValueSet=Yn;exports.dashboardRecordsPayloadSchema=Ci;exports.decodeNumericResultValue=gn;exports.exactNumericValueSchema=Le;exports.getAnalyticsCatalogFieldCandidates=Dt;exports.getAnalyticsCatalogFieldName=Tt;exports.getAnalyticsIntentId=ua;exports.getAnalyticsNumericStorageKind=Et;exports.getFieldRuntimeColumnName=_n;exports.getSemaphorDatasetEntityId=pa;exports.getSemaphorNonRedundantDatasetId=R;exports.hasCalculatedFieldMarker=In;exports.hasCalculatedFormulaInputs=Sn;exports.hasCompleteSemaphorSourceIdentity=fa;exports.hasSyntheticCalculatedFieldOwner=Vt;exports.isAnalyticsCatalogDateField=$e;exports.isAnalyticsCatalogDimensionField=cn;exports.isAnalyticsCatalogMetricField=Ye;exports.isAnalyticsDateLikeDataType=jt;exports.isAnalyticsMetricIdentifierField=Ie;exports.isAnalyticsTechnicalIdentifierField=Pe;exports.isBlankValue=Ln;exports.isCalculatedDimension=bn;exports.isCalculatedField=vn;exports.isCalculatedMetric=yn;exports.isDerivedField=zn;exports.isEnabledRule=$n;exports.isExactNumericValue=Y;exports.isOverridableOptionDependencyReason=vi;exports.isPlainObject=On;exports.isSemaphorOptionMatchValue=ht;exports.isSemaphorTimeGrain=zi;exports.isValidIanaTimeZone=yt;exports.mapNamedExpressionTokens=At;exports.matrixAggregateSchema=Jt;exports.matrixAnalyticalIntentSchema=ri;exports.matrixAuthoringConfigSchema=la;exports.matrixAuthoringSpecSchema=oi;exports.matrixAxisSchema=ue;exports.matrixConditionalFormatScopeSchema=Gt;exports.matrixConditionalFormattingSchema=si;exports.matrixConfigSchema=ci;exports.matrixCoordinateSchema=hn;exports.matrixDefaultViewSchema=q;exports.matrixDefinitionInputSchema=oa;exports.matrixExpansionSchema=Ae;exports.matrixExportRequestSchema=ca;exports.matrixFieldSchema=Ue;exports.matrixFormattingRoleSchema=Pt;exports.matrixLevelSchema=J;exports.matrixMeasureSchema=He;exports.matrixMemberSchema=Yt;exports.matrixPathKey=qe;exports.matrixPathSchema=w;exports.matrixPresentationSchema=me;exports.matrixRankingSchema=ti;exports.matrixSortKey=Ke;exports.matrixSortSchema=Ge;exports.matrixSortTargetSchema=ei;exports.matrixSpecSchema=E;exports.matrixTotalPresentationSchema=ke;exports.matrixViewStateSchema=di;exports.mergeResolvedStyles=Hn;exports.mergeSemaphorSourcesByIdentity=ga;exports.normalizeAnalyticsCatalogDataType=Oe;exports.normalizeAnalyticsCatalogName=ce;exports.normalizeNumericLiteral=Ot;exports.nullableScalarSchema=G;exports.parseOptionMatchValues=_t;exports.parseSemaphorIsoInstant=Ra;exports.parseSemaphorIsoTimeWindowBoundary=te;exports.preferSemaphorFieldRefMetadata=ya;exports.preferSemaphorSourceMetadata=We;exports.rawTemporalValueMetadataSchema=vt;exports.recordArraySchema=M;exports.recordSchema=bt;exports.resolveFormattingRangePosition=Cn;exports.scaleExactDecimal=pn;exports.semaphorAggregateFunctionSchema=x;exports.semaphorAnalyticsValidationIssueSchema=ze;exports.semaphorAnalyticsValidationResultSchema=$i;exports.semaphorCompactFieldRefSchema=ji;exports.semaphorDerivedFieldDefinitionObjectSchema=Me;exports.semaphorDerivedFieldDefinitionSchema=Ee;exports.semaphorExecutionFieldRefSchema=Ti;exports.semaphorFieldRefObjectSchema=Te;exports.semaphorFieldRefSchema=De;exports.semaphorFieldRefsMatch=ui;exports.semaphorInputOptionsResultSchema=Li;exports.semaphorMetricAggregate=Xe;exports.semaphorMetricMeasureBindingKey=ha;exports.semaphorMetricResultSchema=Yi;exports.semaphorOptionDependencyOutcomeSchema=It;exports.semaphorOptionMatchResultSchema=kt;exports.semaphorPhysicalSourceRefSchema=Re;exports.semaphorRecordsResultSchema=Bi;exports.semaphorResultColumnSchema=T;exports.semaphorScalarValueFormatSchema=oe;exports.semaphorScalarValueSchema=C;exports.semaphorSemanticSourceRefSchema=re;exports.semaphorSourceIdentityKey=ee;exports.semaphorSourceRefSchema=Fe;exports.semaphorSourcesReferToSameDataset=fe;exports.semaphorSqlResultSchema=Vi;exports.semaphorSqlSourceRefSchema=zt;exports.semaphorTimeGrainSchema=P;exports.semaphorValueFormatSchema=Se;exports.temporalBucketDataTypeForGrain=gt;exports.temporalBucketFormatSchema=V;exports.temporalBucketMetadataSchema=K;exports.toFiniteNumber=Z;exports.toFormattingNumber=Xt;exports.validateSemaphorAnalyticsIntent=et;exports.validateSemaphorAnalyticsRecoveryPlan=Ba;exports.validateSemaphorDashboardIntent=Va;exports.validateSemaphorDerivedFieldDefinition=Ce;exports.validateSemaphorOperationIntent=hi;exports.validateSemaphorOptionDependencies=gi;exports.validateSemaphorResultCalculation=Pa;