react-semaphor 0.1.334 → 0.1.336

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 (59) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +100 -242
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +3 -3
  5. package/dist/briefings/index.cjs +1 -1
  6. package/dist/briefings/index.js +435 -391
  7. package/dist/chunks/{braces-DlW7C5BH.js → braces-BLa_lORs.js} +1 -1
  8. package/dist/chunks/{braces-DYx37F5Z.js → braces-Q86XHDaD.js} +1 -1
  9. package/dist/chunks/{calendar-preferences-dialog-CB5MA9gF.js → calendar-preferences-dialog-Bm7ji3k9.js} +1 -1
  10. package/dist/chunks/{calendar-preferences-dialog-BLz4PrDX.js → calendar-preferences-dialog-Cocogo9H.js} +3 -3
  11. package/dist/chunks/catalog-field-grounding-DmT7aGUA.js +191 -0
  12. package/dist/chunks/catalog-field-grounding-VgVzDd25.js +1 -0
  13. package/dist/chunks/{chevrons-up-down-CP6oFMrt.js → chevrons-up-down-BBTZ5pAY.js} +1 -1
  14. package/dist/chunks/{chevrons-up-down-B_66pVv5.js → chevrons-up-down-CYuWasy_.js} +1 -1
  15. package/dist/chunks/{dashboard-briefing-launcher-Bwz4mKOI.js → dashboard-briefing-launcher-BtqtLx1-.js} +1 -1
  16. package/dist/chunks/{dashboard-briefing-launcher-B7AxiecS.js → dashboard-briefing-launcher-DF4CoaRn.js} +4 -4
  17. package/dist/chunks/{dashboard-controls-DlN7FGW-.js → dashboard-controls-0VMAeMoa.js} +1 -1
  18. package/dist/chunks/{dashboard-controls-CbuKeeeP.js → dashboard-controls-B5U-VUxs.js} +6 -6
  19. package/dist/chunks/{dashboard-json-CeVrYTnR.js → dashboard-json-CqbLOfnr.js} +1 -1
  20. package/dist/chunks/{dashboard-json-gcpeSd5I.js → dashboard-json-Hmc0Ri5z.js} +2 -2
  21. package/dist/chunks/{edit-dashboard-visual-Kn1wtj-Z.js → edit-dashboard-visual-C0EDM0QB.js} +3 -3
  22. package/dist/chunks/{edit-dashboard-visual-BggRcCO2.js → edit-dashboard-visual-D4VVu-QQ.js} +1302 -1302
  23. package/dist/chunks/{index-CP3_hN7P.js → index-DE0vIuYG.js} +4 -4
  24. package/dist/chunks/{index-TA0tBZ1g.js → index-DzyUhzV3.js} +262 -270
  25. package/dist/chunks/{palette-BW7lzLOY.js → palette-B9AbDw0n.js} +1 -1
  26. package/dist/chunks/{palette-BueS2ZEM.js → palette-DalASD28.js} +1 -1
  27. package/dist/chunks/{resource-management-panel-vDrPcmXs.js → resource-management-panel-C4YydU9I.js} +3 -3
  28. package/dist/chunks/{resource-management-panel-DBYcMHVL.js → resource-management-panel-P9iNqBM1.js} +1 -1
  29. package/dist/chunks/{switch-B6fK1sl9.js → switch-BAYfpAEb.js} +1967 -2008
  30. package/dist/chunks/{switch-BT7khJGF.js → switch-CyRoZr5T.js} +35 -35
  31. package/dist/chunks/{use-create-flow-overlay-state-T8Su6dzu.js → use-create-flow-overlay-state-CbhjxI3W.js} +1 -1
  32. package/dist/chunks/{use-create-flow-overlay-state-DPYHfe-S.js → use-create-flow-overlay-state-P1LMwQ89.js} +3 -3
  33. package/dist/chunks/{use-visual-utils-wqosOqyY.js → use-visual-utils-CV6_-y4p.js} +1 -1
  34. package/dist/chunks/{use-visual-utils-Daov8_1p.js → use-visual-utils-lB-3Zk0b.js} +2 -2
  35. package/dist/chunks/validators-BOqiGymD.js +660 -0
  36. package/dist/chunks/validators-BtFXY3S_.js +2 -0
  37. package/dist/dashboard/index.cjs +1 -1
  38. package/dist/dashboard/index.js +1 -1
  39. package/dist/dashboard-authoring/index.cjs +3 -3
  40. package/dist/dashboard-authoring/index.js +476 -453
  41. package/dist/data-app-builder/index.cjs +1 -1
  42. package/dist/data-app-builder/index.js +1 -1
  43. package/dist/data-app-builder-browser-runtime/index.cjs +1 -1
  44. package/dist/data-app-builder-browser-runtime/index.js +4 -9
  45. package/dist/data-app-sdk/index.cjs +1 -1
  46. package/dist/data-app-sdk/index.js +89 -80
  47. package/dist/index.cjs +1 -1
  48. package/dist/index.js +7 -7
  49. package/dist/surfboard/index.cjs +1 -1
  50. package/dist/surfboard/index.js +2 -2
  51. package/dist/types/analytics-protocol.d.ts +183 -5
  52. package/dist/types/briefings.d.ts +12 -0
  53. package/dist/types/dashboard-authoring.d.ts +33 -4
  54. package/dist/types/data-app-builder.d.ts +30 -3
  55. package/dist/types/data-app-sdk.d.ts +32 -5
  56. package/dist/types/main.d.ts +34 -3
  57. package/package.json +1 -1
  58. package/dist/chunks/validators-DDAweCzB.js +0 -371
  59. package/dist/chunks/validators-odlRJblR.js +0 -2
@@ -1,4 +1,4 @@
1
- import { D as o } from "../chunks/index-TA0tBZ1g.js";
1
+ import { D as o } from "../chunks/index-DzyUhzV3.js";
2
2
  import { C as s, E as C } from "../chunks/common-types-4bjoIgvm.js";
3
3
  export {
4
4
  s as CONTROL_CARD_DEFAULT_VALUE,
@@ -1,3 +1,3 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ie=require("../chunks/validators-odlRJblR.js"),oe=["lg","md","sm","xs","xxs"],T=10;function _(e){return e&&typeof e=="object"?e:null}function S(e){return typeof e=="string"?e:null}function se(e){var t,n,a;return!!(e&&typeof e=="object")&&(((t=_(e))==null?void 0:t.kind)==="semantic"||((n=_(e))==null?void 0:n.kind)==="physical"||((a=_(e))==null?void 0:a.kind)==="sql")}function C(e){return se(e)?e.kind==="semantic"?!!(e.domainId&&e.datasetName):e.kind==="physical"?!!(e.connectionId&&e.tableName):!1:!1}function L(e){return e.kind==="semantic"?["semantic",e.domainId,e.datasetId||"",e.datasetName].join(":"):e.kind==="physical"?["physical",e.connectionId,e.databaseName||"",e.schemaName||"",e.tableName].join(":"):["sql",e.connectionId,e.sql].join(":")}function G(e,t){return e.domainId!==t.domainId?!1:e.datasetId&&t.datasetId?e.datasetId===t.datasetId:e.datasetName===t.datasetName}function W(e,t){return e.kind==="semantic"&&t.kind==="semantic"?G(e,t):L(e)===L(t)}function de(e,t){return e.kind!=="semantic"||t.kind!=="semantic"?e:{...e,datasetId:e.datasetId||t.datasetId,label:e.label||t.label,connectionId:e.connectionId||t.connectionId}}function R(e){const t=[];for(const n of e){const a=t.findIndex(i=>W(i,n));a===-1?t.push(n):t[a]=de(t[a],n)}return t}function ke(e){return R(e)[0]}function j(e,t){return e.kind!=="semantic"||e.connectionId||(t==null?void 0:t.kind)!=="semantic"||!G(e,t)||!t.connectionId?e:{...e,connectionId:t.connectionId}}function E(e){return C(e)?e:void 0}function ne(e,t){if(!(e.kind!=="semantic"||e.connectionId))return t.find(n=>(n==null?void 0:n.kind)==="semantic"&&G(e,n)&&!!n.connectionId)}function w(e,t){const n=E(e==null?void 0:e.source);return n?j(n,t):void 0}function ce({explicitSource:e,field:t,defaultSource:n,fallbackSources:a}){const i=[n,...a||[]],r=E(e),o=r?j(r,ne(r,i)):void 0;if(o)return o;if(e!==void 0)return;const d=w(t,n),s=d?j(d,ne(d,i)):void 0;if(s)return s;if((t==null?void 0:t.source)===void 0)return E(n)}function ue(e,t){if(!(e!=null&&e.name)||!(t!=null&&t.name)||e.name!==t.name)return!1;const n=w(e),a=w(t);return!n||!a?!0:W(n,a)}function D(e){var t;return S((t=_(e))==null?void 0:t.kind)}function le(e){var t,n;return D(e)!=="semantic"?null:((n=S((t=_(e))==null?void 0:t.domainId))==null?void 0:n.trim())||null}function Ce(e){var t;return D(e)!=="semantic"?null:S((t=_(e))==null?void 0:t.datasetName)}function Fe(e){var t;return D(e)!=="semantic"?null:S((t=_(e))==null?void 0:t.datasetId)}function xe(e){var t;return D(e)!=="physical"?null:S((t=_(e))==null?void 0:t.connectionId)}function Ne(e){var t;return D(e)!=="physical"?null:S((t=_(e))==null?void 0:t.tableName)}function Te(e){var t;return D(e)!=="physical"?"":S((t=_(e))==null?void 0:t.databaseName)||""}function Re(e){var t;return D(e)!=="physical"?"":S((t=_(e))==null?void 0:t.schemaName)||""}function fe(e){if(e.analyticsIntent&&typeof e.analyticsIntent=="object"&&"source"in e.analyticsIntent)return e.analyticsIntent.source}function me({datasets:e,requireAtLeastOne:t}){if(t&&e.length<1)return{ok:!1,issue:"invalid_dataset_count"};if(e.length<=1)return{ok:!0};const n=e.map(le),a=new Set(n.filter(Boolean));return n.some(i=>!i)||a.size!==1?{ok:!1,issue:"invalid_multi_dataset_scope"}:{ok:!0}}function P(e,t){if(!t)return!1;if(t.kind==="semantic"){const n=Fe(e);return le(e)===t.domainId?n&&t.datasetId?n===t.datasetId:Ce(e)===t.datasetName:!1}return t.kind==="physical"?xe(e)===t.connectionId&&Ne(e)===t.tableName&&Te(e)===(t.databaseName||"")&&Re(e)===(t.schemaName||""):!1}function $e(e,t){return e.find(n=>P(n,t))}function l(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function M(e){const t=new Set;for(const n of e){if(t.has(n))return n;t.add(n)}return null}function pe({card:e,datasets:t,errors:n}){if(e.type==="text")return;const a=fe(e);if(!a){if(t.length<=1)return;n.push(l("missing_card_analytics_source","Multi-dataset dashboard cards must include analytics intent with a source so the materializer can choose the correct dataset.",e.id));return}t.some(i=>P(i,a))||n.push(l("invalid_card_analytics_source","Dashboard cards with an explicit analytics source must use one of the selected datasets.",e.id))}function Me(e){var t;return e?[(t=e.dateFieldRef)==null?void 0:t.source,...Array.isArray(e.dimensionRefs)?e.dimensionRefs.map(n=>n.source):[]].filter(n=>!!n):[]}function he({card:e,datasets:t,errors:n}){if(e.type!=="text"){for(const a of Me(e.query))if(a&&!t.some(i=>P(i,a))){n.push(l("invalid_card_query_source","Dashboard card query field references must use one of the selected datasets.",e.id));return}}}function Pe(e,t){return e.length===t.length&&e.every((n,a)=>n===t[a])}function be({card:e,errors:t}){if(e.type==="text"||!e.query)return;const{dateField:n,dateFieldRef:a,dimensions:i,dimensionRefs:r}=e.query;if(a&&a.name!==n){t.push(l("invalid_card_query_ref","Dashboard card source-aware date field reference must match the query date field.",e.id));return}if(!Array.isArray(r))return;const o=Array.isArray(i)?i:[],d=r.map(s=>s.name);Pe(d,o)||t.push(l("invalid_card_query_ref","Dashboard card source-aware dimension references must match the query dimensions.",e.id))}function ge({datasets:e,errors:t,requireAtLeastOne:n}){const a=me({datasets:e,requireAtLeastOne:n});if(!a.ok){if(a.issue==="invalid_dataset_count"){t.push(l("invalid_dataset_count","Dashboard authoring requires at least one selected dataset."));return}t.push(l("invalid_multi_dataset_scope","Multi-dataset dashboard authoring is limited to semantic datasets from one domain."))}}function Ie(e){var m,v;const t=[];if(!e||typeof e!="object")return{ok:!1,errors:[l("invalid_plan","Dashboard plan must be a structured object.")],warnings:[]};const n=e,a=[...n.warnings||[]];n.version!==1&&t.push(l("invalid_version","Dashboard plan version must be 1.")),(m=n.title)!=null&&m.trim()||t.push(l("missing_title","Dashboard plan needs a title."));const i=Array.isArray(n.datasets)?n.datasets:[],r=Array.isArray(n.sheets)?n.sheets:[];ge({datasets:i,errors:t,requireAtLeastOne:!0}),r.length!==1&&t.push(l("invalid_sheet_count","MVP dashboard authoring creates exactly one dashboard sheet."));const o=r[0];o&&o.kind!=="dashboard"&&t.push(l("invalid_sheet_kind",'Generated sheet must use kind "dashboard".'));const d=(o==null?void 0:o.cards)||[];d.length>T&&t.push(l("too_many_cards",`Generated dashboards can contain at most ${T} cards.`));const s=M(d.map(u=>u.id));s&&t.push(l("duplicate_card_id",`Duplicate generated card id: ${s}.`));const f=M(d.map(u=>u.frameId));f&&t.push(l("duplicate_frame_id",`Duplicate generated frame id: ${f}.`));for(const u of d)(v=u.title)!=null&&v.trim()||t.push(l("missing_card_title","Card title is required.",u.id)),u.type==="custom"&&t.push(l("custom_visual_out_of_scope","Whole-dashboard authoring supports built-in visual types only.",u.id)),u.type!=="text"&&!u.query&&a.push(l("missing_query_intent","Non-text card has no query intent and may be skipped by the app layer.",u.id)),pe({card:u,datasets:i,errors:t}),be({card:u,errors:t}),he({card:u,datasets:i,errors:t});const p=Array.isArray(n.filterInputs)?n.filterInputs:[],g=p.map(u=>u.id),y=M(g);y&&t.push(l("duplicate_input_id",`Duplicate dashboard input id: ${y}.`));const c=p.map(u=>u.variableName).filter(Boolean)||[],b=M(c);b&&t.push(l("duplicate_input_variable",`Duplicate dashboard input variable name: ${b}.`));const A=Array.isArray(n.calculatedFields)?n.calculatedFields:[];for(const u of A)u.scope==="domain"&&u.reuseOnly!==!0&&t.push(l("domain_calculated_field_create_out_of_scope",`Creating domain calculated field "${u.name}" is outside MVP.`));return{ok:t.length===0,errors:t,warnings:a}}function ye(e){var o;const t=[];if(!e||typeof e!="object")return{ok:!1,errors:[l("invalid_change_plan","Dashboard change plan must be a structured object.")],warnings:[]};const n=e,a=[...n.warnings||[]];n.version!==1&&t.push(l("invalid_version","Dashboard change plan version must be 1.")),(o=n.dashboardId)!=null&&o.trim()||t.push(l("missing_dashboard_id","Dashboard change plan needs a dashboard id."));const i=Array.isArray(n.datasets)?n.datasets:[],r=Array.isArray(n.operations)?n.operations:[];ge({datasets:i,errors:t,requireAtLeastOne:!1});for(const d of r){if(d.kind==="unsupported"){a.push(l("unsupported_operation",d.reason||d.requestedAction));continue}d.kind==="addCard"&&d.card.type==="custom"&&t.push(l("custom_visual_out_of_scope","Whole-dashboard authoring supports built-in visual types only.",d.card.id)),d.kind==="addCard"&&(pe({card:d.card,datasets:i,errors:t}),be({card:d.card,errors:t}),he({card:d.card,datasets:i,errors:t})),d.kind==="addCalculatedField"&&d.field.scope==="domain"&&d.field.reuseOnly!==!0&&t.push(l("domain_calculated_field_create_out_of_scope",`Creating domain calculated field "${d.field.name}" is outside MVP.`))}return{ok:t.length===0,errors:t,warnings:a}}const qe={lg:48,md:36,sm:24,xs:12,xxs:6};function Be(e,t){let n=0,a=0,i=0;return e.map(r=>{const o=Math.min(r.w,t);n>0&&n+o>t&&(n=0,a+=i,i=0);const d={i:r.frameId,x:n,y:a,w:o,h:r.h,minW:Math.min(r.minW,t),minH:r.minH,static:!1};return n+=o,i=Math.max(i,r.h),d})}function Ve(e){const t=[...e].sort((s,f)=>s.priority-f.priority),n=t.filter(s=>s.role==="kpi"),a=t.filter(s=>s.role==="chart"),i=t.filter(s=>s.role==="table"),r=t.filter(s=>s.role==="text"),o=r.slice(0,1),d=r.slice(o.length);return{kpis:n,introText:o,charts:a,tables:i,supportingText:d}}function Oe(e,t,n){return t==="xxs"||t==="xs"?n:t==="sm"?Math.min(12,n):t==="md"?e<=1||e===2?18:12:e<=1||e===2?24:e===3?16:12}function ze(e,t,n,a){return n==="xxs"||n==="xs"||n==="sm"||n==="md"||t===1||t%2===1&&e===0?a:a/2}function Le(e){const{item:t,band:n,index:a,bandCount:i,breakpoint:r,columns:o}=e;return n==="kpi"?{...t,band:n,w:Oe(i,r,o),h:15,minW:Math.min(6,o),minH:12}:n==="table"?{...t,band:n,w:o,h:r==="xxs"||r==="xs"?34:38,minW:Math.min(12,o),minH:18}:n==="introText"?{...t,band:n,w:o,h:r==="xxs"||r==="xs"?12:10,minW:Math.min(12,o),minH:8}:n==="supportingText"?{...t,band:n,w:r==="lg"?o/2:o,h:r==="xxs"||r==="xs"?12:10,minW:Math.min(12,o),minH:8}:{...t,band:n,w:ze(a,i,r,o),h:r==="xxs"||r==="xs"?28:30,minW:Math.min(12,o),minH:16}}function x(e,t,n,a){return e.map((i,r)=>Le({item:i,band:t,index:r,bandCount:e.length,breakpoint:n,columns:a}))}function q(e){const t=Ve(e);return Object.fromEntries(oe.map(n=>{const a=qe[n],i=[...x(t.introText,"introText",n,a),...x(t.kpis,"kpi",n,a),...x(t.charts,"chart",n,a),...x(t.tables,"table",n,a),...x(t.supportingText,"supportingText",n,a)];return[n,Be(i,a)]}))}function je(e){const t=String(e||"").trim().toLowerCase();return t.includes("date")||t.includes("time")||t.includes("timestamp")?"date":t.includes("int")||t.includes("float")||t.includes("double")||t.includes("decimal")||t.includes("numeric")||t.includes("number")||t.includes("currency")||t.includes("percent")?"number":t.includes("bool")?"boolean":"string"}function Ee(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function He(e){return Ee(e)&&typeof e.filterId=="string"&&typeof e.operation=="string"&&Array.isArray(e.values)}function Ge(e){return e.filter(t=>typeof t=="string"||typeof t=="number")}function We(e){return e.filter(t=>t instanceof Date||typeof t=="string")}function U(e,t){if(t===void 0)return;const n=je(e.dataType),a=e.operation||"in";if(He(t))return{...t,filterId:e.id,name:t.name||e.column,valueType:n,dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext};if(a==="is null"||a==="is not null")return{filterId:e.id,name:e.column,operation:a,valueType:n,values:[],dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext};const i=Array.isArray(t)?t:[t],r=n==="date"?We(i):Ge(i);if(r.length!==0&&!((a==="between"||a==="not between")&&r.length<2))return{filterId:e.id,name:e.column,operation:a,valueType:n,values:r,dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext}}function Ue(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function Ke(e,t,n){const a=(t||[]).filter(i=>i.scope==="card"&&i.targetCardId===n).map(i=>i.field).filter(Boolean);return a.length===0?e:{...e,calculatedFields:[...e.calculatedFields||[],...a]}}function Qe(e){const t={};return{inputs:(e.filterInputs||[]).map((a,i)=>{const r=U(a.filter,a.defaultValue);return r&&(t.shared??(t.shared={}),t.shared[a.id]={status:"set",value:{kind:"filter",filterValue:r}}),{id:a.id,kind:"filter",label:a.label,variableName:a.variableName,scope:a.scope||{kind:"allSheets",sheetKinds:["dashboard"]},runtimeScope:"shared",presentation:{placement:"toolbar",order:i},exports:["label","value","start","end","range"],filter:a.filter}}),defaultInputValues:t.shared&&Object.keys(t.shared).length>0?t:void 0}}function Xe(e){var g,y;const t=Ie(e.plan);if(!t.ok)throw new Error(t.errors.map(c=>c.message).join(`
2
- `)||"Dashboard plan is invalid.");const n=e.plan.sheets[0],a=[...t.warnings],i=[],r=new Map(e.cardArtifacts.map(c=>[c.planCardId,c])),o=[];for(const c of n.cards){const b=r.get(c.id);if(!b){const m=Ue("missing_card_artifact",`Card "${c.title}" was skipped because no generated artifact was supplied.`,c.id);i.push(m);continue}a.push(...b.warnings||[]);const A=Ke(b.card,e.plan.calculatedFields,c.id);o.push({id:c.frameId,cards:[A],activeCardId:A.id})}if(o.length===0)throw new Error("Dashboard plan did not produce any persistable cards.");const{inputs:d,defaultInputValues:s}=Qe(e.plan),f=q(n.cards.filter(c=>o.some(b=>b.id===c.frameId)).map(c=>({frameId:c.frameId,priority:c.priority,role:c.role})));return{dashboard:{id:e.dashboardId,title:e.plan.title,description:e.plan.description||"",sheets:[{id:n.id,kind:"dashboard",title:n.title,description:n.description,frames:o,layouts:f,calculatedFields:(g=e.plan.calculatedFields)==null?void 0:g.filter(c=>c.scope==="sheet"&&c.field).map(c=>c.field)}],calculatedFields:(y=e.plan.calculatedFields)==null?void 0:y.filter(c=>c.scope==="dashboard"&&c.field).map(c=>c.field),inputs:d,...s?{defaultInputValues:s}:{}},warnings:a,skippedOperations:i}}function k(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function Je(e){return JSON.parse(JSON.stringify(e))}function Ye(e){var t;return(t=e.sheets)==null?void 0:t.find(n=>(n.kind||"dashboard")==="dashboard")}function V(e,t){var n;for(const a of e.sheets||[])for(const i of a.frames||[]){const r=(n=i.cards)==null?void 0:n.find(o=>o.id===t);if(r)return{sheet:a,frame:i,card:r}}return null}function _e(e){var n,a;const t=(a=(n=e.cards)==null?void 0:n[0])==null?void 0:a.type;return t==="kpi"?"kpi":t==="table"||t==="detailTable"||t==="pivotTable"?"table":t==="text"?"text":"chart"}function Ze(e){var t;return new Map((((t=e.layouts)==null?void 0:t.lg)||[]).map((n,a)=>[n.i,a]))}function ve(e,t=new Map){const n=Ze(e),a=Math.max(n.size,t.size),i=(e.frames||[]).map((r,o)=>({frameId:r.id,role:_e(r),priority:t.get(r.id)??n.get(r.id)??a+o}));e.layouts=q(i)}function et(e){return Object.values(e.layouts||{}).some(t=>t.length>0)}function tt(e,t){if(!et(e)){ve(e);return}const n=q([{frameId:t.id,role:_e(t),priority:0}]);e.layouts??(e.layouts={});for(const[a,i]of Object.entries(n)){const r=e.layouts[a]||[];if(r.some(s=>s.i===t.id))continue;const o=i[0];if(!o)continue;const d=r.reduce((s,f)=>Math.max(s,f.y+f.h),0);e.layouts[a]=[...r,{...o,y:d}]}}function nt(e,t){var a;const n=U(t.filter,t.defaultValue);n&&(e.defaultInputValues??(e.defaultInputValues={}),(a=e.defaultInputValues).shared??(a.shared={}),e.defaultInputValues.shared[t.id]={status:"set",value:{kind:"filter",filterValue:n}})}function at(e){var d;const t=ye(e.changePlan);if(!t.ok)throw new Error(t.errors.map(s=>s.message).join(`
3
- `)||"Dashboard change plan is invalid.");const n=Je(e.dashboard),a=[...t.warnings],i=[],r=new Map(e.cardArtifacts.map(s=>[s.planCardId,s])),o=Ye(n);if(!o)throw new Error("Dashboard has no editable dashboard sheet.");o.frames??(o.frames=[]);for(const s of e.changePlan.operations)switch(s.kind){case"addCard":{if((o.frames||[]).reduce((y,c)=>{var b;return y+(((b=c.cards)==null?void 0:b.length)||0)},0)>=T){i.push(k("generated_card_limit_reached",`MVP AI refinement is capped at ${T} cards.`,s.card.id));break}const p=r.get(s.card.id);if(!p){i.push(k("missing_card_artifact",`Card "${s.card.title}" was skipped because no generated artifact was supplied.`,s.card.id));break}const g={id:s.card.frameId,cards:[p.card],activeCardId:p.card.id};o.frames.push(g),tt(o,g);break}case"addFilterInput":{n.inputs??(n.inputs=[]);const f={id:s.input.id,kind:"filter",label:s.input.label,variableName:s.input.variableName,scope:s.input.scope||{kind:"allSheets",sheetKinds:["dashboard"]},runtimeScope:"shared",presentation:{placement:"toolbar",order:n.inputs.length},exports:["label","value","start","end","range"],filter:s.input.filter};n.inputs.push(f),nt(n,s.input);break}case"addCalculatedField":{if(s.field.scope==="dashboard"&&s.field.field)n.calculatedFields??(n.calculatedFields=[]),n.calculatedFields.push(s.field.field);else if(s.field.scope==="sheet"&&s.field.field)o.calculatedFields??(o.calculatedFields=[]),o.calculatedFields.push(s.field.field);else if(s.field.scope==="card"&&s.field.field){const f=s.field.targetCardId?V(n,s.field.targetCardId):null;f?((d=f.card).calculatedFields??(d.calculatedFields=[]),f.card.calculatedFields.push(s.field.field)):i.push(k("missing_calculated_field_target",`Calculated field "${s.field.name}" needs a valid target card.`))}break}case"renameCard":{const f=V(n,s.cardId);if(!f){i.push(k("card_not_found",`Card "${s.cardId}" could not be renamed because it was not found.`,s.cardId));break}f.card.title=s.title,s.description!==void 0&&(f.card.description=s.description);break}case"reorderCards":{const f=new Map;for(let p=0;p<s.cardIds.length;p+=1){const g=s.cardIds[p],y=V(n,g);y&&f.set(y.frame.id,p)}ve(o,f);break}case"reuseCalculatedField":a.push(k("reused_calculated_field",`Calculated field "${s.fieldId}" is reused by reference.`));break;case"unsupported":i.push(k("unsupported_operation",s.reason||s.requestedAction));break}return{dashboard:n,warnings:a,skippedOperations:i}}function I(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function N(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function we(e,t){if(!t.has(e))return t.add(e),e;let n=2,a=`${e}-${n}`;for(;t.has(a);)n+=1,a=`${e}-${n}`;return t.add(a),a}function F(e){return!!(e&&typeof e=="object")}function Se(e){return Array.isArray(e.inputs)?e.inputs.filter(t=>F(t)&&typeof t.id=="string"):[]}function K(e){return Array.isArray(e.sections)?e.sections.filter(t=>F(t)):[]}function Q(e){return Array.isArray(e.views)?e.views.filter(t=>F(t)):[]}function rt(e){return C(e)?e.kind==="semantic"?{kind:"semantic",domainId:e.domainId,datasetName:e.datasetName,datasetId:e.datasetId,label:e.label,connectionId:e.connectionId}:e.kind==="physical"?{kind:"physical",connectionId:e.connectionId,databaseName:e.databaseName,schemaName:e.schemaName,tableName:e.tableName,label:e.label}:null:null}function O(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){const a=w(n);a&&t.push(a)}return t}function it(e){if(!e)return[];const t=[];if(C(e.source)&&t.push(e.source),e.kind==="metric"){const a=w(e.dateField);a&&t.push(a),t.push(...O(e.dimensions))}else if(e.kind==="records"){const a=w(e.dateField);a&&t.push(a),t.push(...O(e.fields))}else if(e.kind==="inputOptions"){const a=w(e.field);a&&t.push(a)}else e.kind==="sql"&&t.push(...O(e.fields));const n="inputs"in e&&Array.isArray(e.inputs)?e.inputs:[];for(const a of n){const i=w(a.field);i&&t.push(i)}return t}function ot(e){const t=[];for(const n of Se(e)){C(n.source)&&t.push(n.source);const a=w(n.field);a&&t.push(a)}for(const n of K(e))for(const a of Q(n))t.push(...it(a.analytics));return t}function st(e){var n;const t=[];for(const a of K(e))for(const i of Q(a))C((n=i.analytics)==null?void 0:n.source)&&t.push(i.analytics.source);return t}function dt(e,t){const n=R(e).map(rt).filter(r=>!!r);if(n.length===0)return t.push(I("missing_materializable_dataset","No semantic or physical source could be converted into the current dashboard authoring dataset reference.")),[];const a=n.every(r=>r.kind==="semantic"),i=Array.from(new Set(n.filter(r=>r.kind==="semantic").map(r=>r.domainId)));return n.length>1&&(!a||i.length!==1)?(t.push(I("multiple_datasets_out_of_scope","The dashboard authoring compiler supports multiple datasets only within one semantic domain; using the first source and deferring the rest.")),[n[0]]):n}function ct(e,t){const n=K(e),a=Se(e),i=R(ot(e)),r=R(st(e));return{sections:n,inputs:a,sources:i,primarySources:r,defaultSource:r.length===1?r[0]:void 0,datasets:dt(i,t)}}function ut(e){return Ae(e).map(t=>t.name).filter(Boolean)}function Ae(e){return(Array.isArray(e.fields)?e.fields:[]).filter(t=>!ue(t,e.dateField))}function lt(e){const t=Array.isArray(e.metrics)?e.metrics.filter(n=>typeof n=="string"&&n.trim().length>0):[];return Array.from(new Set([e.metric,...t].filter(n=>typeof n=="string"&&n.trim().length>0)))}function ft(e){return F(e)&&typeof e.name=="string"&&e.name.trim().length>0}function mt(e){if(!Array.isArray(e.dimensions))return;const t=e.dimensions.filter(ft).map(n=>n.name);return t.length?t:void 0}function ae(e){return e==="hour"?"day":e}function H(e,t={}){var n,a;if(e!=null&&e.name){if(((n=e.source)==null?void 0:n.kind)==="semantic")return!e.source.domainId||!e.source.datasetName?void 0:{name:e.name,source:{kind:"semantic",domainId:e.source.domainId,datasetName:e.source.datasetName,datasetId:e.source.datasetId,label:e.source.label,connectionId:e.source.connectionId}};if(((a=e.source)==null?void 0:a.kind)==="physical")return!e.source.connectionId||!e.source.tableName?void 0:{name:e.name,source:{kind:"physical",connectionId:e.source.connectionId,tableName:e.source.tableName,databaseName:e.source.databaseName,schemaName:e.source.schemaName,label:e.source.label}};if(!(e.source!==void 0||!t.includeUnsourced))return{name:e.name}}}function re(e){if(!Array.isArray(e))return;const t=e.map(n=>H(n,{includeUnsourced:!0})).filter(Boolean);if(t.length===e.length)return t.some(n=>n.source)?t:void 0}function pt(e){var t,n;if(e){if(e.kind==="metric")return{metric:e.metric,metrics:lt(e),dateField:(t=e.dateField)==null?void 0:t.name,dateFieldRef:H(e.dateField),timeGrain:ae(e.timeGrain),dimensions:mt(e),dimensionRefs:re(e.dimensions),limit:e.limit};if(e.kind==="records")return{metrics:e.measures,dateField:(n=e.dateField)==null?void 0:n.name,dateFieldRef:H(e.dateField),timeGrain:ae(e.timeGrain),dimensions:ut(e),dimensionRefs:re(Ae(e)),limit:e.limit}}}function ht(e){return e&&ie.validateSemaphorAnalyticsIntent(e).ok?e:void 0}function bt(e){var t;switch((t=e.presentation)==null?void 0:t.kind){case"kpi":return"kpi";case"lineChart":return"line";case"barChart":return"bar";case"areaChart":return"area";case"table":return"table";case"text":return"text";default:return null}}function gt(e){var t,n,a;return((t=e.presentation)==null?void 0:t.kind)==="kpi"?"kpi":((n=e.presentation)==null?void 0:n.kind)==="table"?"table":((a=e.presentation)==null?void 0:a.kind)==="text"?"text":"chart"}function It(e){switch(e){case"not_in":return"not in";case"contains":return"like";default:return e||"in"}}function yt(e){return F(e.field)?e.field.dataType==="datetime"?"date":e.field.dataType||"string":"string"}function _t(e){if(!(!e||e.kind!=="physical"))return[e.databaseName,e.schemaName,e.tableName].filter(Boolean).join(".")}function vt(e,t,n,a,i,r){if(e.kind!=="filter")return r.push(I("control_inputs_deferred",`Control input "${e.label}" is represented in the protocol but not yet materialized by the dashboard authoring adapter.`)),null;if(!F(e.field)||typeof e.field.name!="string")return r.push(I("filter_requires_field",`Filter "${e.label||e.id}" needs a field before the dashboard compiler can materialize it.`)),null;const o=ce({explicitSource:e.source,field:e.field,defaultSource:t,fallbackSources:n}),d=(o==null?void 0:o.kind)==="semantic"||(o==null?void 0:o.kind)==="physical"?o.connectionId:void 0;if(!d)return r.push(I("filter_requires_connection_id",`Filter "${e.label}" needs a source connectionId before the dashboard compiler can materialize it.`)),null;const p={id:`filter-${we(N(e.id,e.field.name),i)}`,variableName:e.id,connectionId:d,title:e.label,column:e.field.name,dataType:yt(e),qualifiedTableName:_t(o),sql:"",operation:It(e.operator),type:e.multi===!1?"single":"multiple",location:"dashboard",displayMode:"toolbar",fieldMeta:(o==null?void 0:o.kind)==="semantic"?{name:e.field.name,qualifiedFieldName:e.field.name,dataType:e.field.dataType,role:e.field.role==="measure"?"metric":"groupby"}:void 0,semanticContext:(o==null?void 0:o.kind)==="semantic"?{semanticDomainId:o.domainId,connectionId:o.connectionId}:void 0};return{id:e.id,label:e.label,variableName:e.id,scope:a,filter:p,defaultValue:U(p,e.defaultValue)}}function z(e){const t=[],n=[];for(const a of e.viewIds){const i=e.viewIdToCardId.get(a);i?t.push(i):n.push(a)}return n.length>0&&e.warnings.push(I("input_scope_view_not_found",`Filter "${e.inputLabel}" referenced unknown view ids: ${n.join(", ")}.`)),Array.from(new Set(t))}function wt(e){var a,i;if(!e.protocolScope){const r=Array.from(new Set(e.boundCardIds));return r.length>0&&r.length<e.allCardIds.length?{kind:"cards",cardIds:r}:void 0}if(e.protocolScope.level==="dashboard"){if(!((a=e.protocolScope.excludeViewIds)!=null&&a.length))return;const r=new Set(z({inputLabel:e.inputLabel,viewIds:e.protocolScope.excludeViewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings}));return{kind:"cards",cardIds:e.allCardIds.filter(o=>!r.has(o))}}if(e.protocolScope.level==="view"){const r=z({inputLabel:e.inputLabel,viewIds:e.protocolScope.viewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings});return r.length===0?(e.warnings.push(I("input_scope_has_no_materialized_cards",`Filter "${e.inputLabel}" was deferred because its view scope does not match any materialized cards.`)),null):{kind:"cards",cardIds:r}}const t=e.sectionIdToCardIds.get(e.protocolScope.sectionId)||[];if(t.length===0)return e.warnings.push(I("input_scope_section_not_found",`Filter "${e.inputLabel}" was deferred because section "${e.protocolScope.sectionId}" does not match any materialized cards.`)),null;if(!((i=e.protocolScope.excludeViewIds)!=null&&i.length))return{kind:"cards",cardIds:t};const n=new Set(z({inputLabel:e.inputLabel,viewIds:e.protocolScope.excludeViewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings}));return{kind:"cards",cardIds:t.filter(r=>!n.has(r))}}function St(e){var c,b,A;const t=[],n=ie.validateSemaphorDashboardIntent(e);for(const m of n.warnings)t.push(I(m.code,m.message));for(const m of n.errors)t.push(I(m.code,m.message));const a=ct(e,t),i=[],r=new Map,o=new Map,d=new Map,s=new Set,f=new Set;let p=0;for(const[m,v]of a.sections.entries()){const u=typeof v.title=="string"?v.title:`Section ${m+1}`,X=v.id||N(u,`section-${m+1}`);o.set(X,[]);for(const[J,h]of Q(v).entries()){const Y=bt(h),B=N(h.id||`${u}-${h.title||`View ${J+1}`}`,`card-${m+1}-${J+1}`);if(!Y){t.push(I("unsupported_presentation",`Dashboard presentation "${((c=h.presentation)==null?void 0:c.kind)||"unknown"}" is not supported by the dashboard authoring adapter.`,`card-${B}`));continue}if(((b=h.analytics)==null?void 0:b.kind)==="sql"){t.push(I("sql_intent_deferred","SQL analytics intent is valid protocol, but the current dashboard authoring adapter only materializes semantic and physical config-card intents.",`card-${B}`));continue}const Z=we(B,s),$=`card-${Z}`;h.id&&r.set(h.id,$),(A=o.get(X))==null||A.push($);const De=h.analytics&&"inputs"in h.analytics?h.analytics.inputs:void 0;for(const ee of De||[]){const te=d.get(ee.inputId)||[];te.push($),d.set(ee.inputId,te)}i.push({id:$,frameId:`frame-${Z}`,title:h.title,description:h.description,type:Y,role:gt(h),priority:p,section:u,query:pt(h.analytics),analyticsIntent:ht(h.analytics),text:h.text}),p+=1}}const g=a.inputs.map(m=>{const v=wt({protocolScope:m.scope,inputLabel:m.label,allCardIds:i.map(u=>u.id),boundCardIds:d.get(m.id)||[],viewIdToCardId:r,sectionIdToCardIds:o,warnings:t});return v===null?null:vt(m,a.defaultSource,a.sources,v,f,t)}).filter(m=>!!m);return{plan:{version:1,id:`plan-${N(e.title,"dashboard")}`,title:e.title,description:e.description,datasets:a.datasets,sheets:[{id:`sheet-${N(e.title,"dashboard")}`,title:e.title,description:e.description,kind:"dashboard",cards:i}],filterInputs:g.length?g:void 0,warnings:t.length?t:void 0,unresolvedRequests:n.ok?void 0:n.errors.map(m=>m.message)},warnings:t}}exports.DASHBOARD_AUTHORING_BREAKPOINTS=oe;exports.DASHBOARD_AUTHORING_MAX_GENERATED_CARDS=T;exports.applyDashboardChangePlan=at;exports.compileDashboardFromPlan=Xe;exports.compileResponsiveDashboardLayouts=q;exports.dashboardAuthoringDatasetMatchesSource=P;exports.dashboardAuthoringFieldsReferToSameTarget=ue;exports.dashboardAuthoringSourceFromField=w;exports.dashboardAuthoringSourceKey=L;exports.dashboardAuthoringSourcesReferToSameDataset=W;exports.dashboardPlanFromSemaphorDashboardIntent=St;exports.findDashboardAuthoringDatasetForSource=$e;exports.getDashboardAuthoringCardSource=fe;exports.isMaterializableDashboardAuthoringSource=C;exports.isSemaphorSourceRef=se;exports.mergeDashboardAuthoringSources=R;exports.preferDashboardAuthoringSourceMetadata=de;exports.preferredDashboardAuthoringSource=ke;exports.resolveDashboardAuthoringSource=ce;exports.validateDashboardAuthoringDatasetScope=me;exports.validateDashboardChangePlan=ye;exports.validateDashboardPlan=Ie;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const xe=require("../chunks/catalog-field-grounding-VgVzDd25.js"),ce=require("../chunks/validators-BtFXY3S_.js"),ue=["lg","md","sm","xs","xxs"],$=10;function _(e){return e&&typeof e=="object"?e:null}function A(e){return typeof e=="string"?e:null}function le(e){var t,n,r;return!!(e&&typeof e=="object")&&(((t=_(e))==null?void 0:t.kind)==="semantic"||((n=_(e))==null?void 0:n.kind)==="physical"||((r=_(e))==null?void 0:r.kind)==="sql")}function F(e){return le(e)?e.kind==="semantic"?!!(e.domainId&&e.datasetName):e.kind==="physical"?!!(e.connectionId&&e.tableName):!1:!1}function G(e){return e.kind==="semantic"?["semantic",e.domainId,e.datasetId||"",e.datasetName].join(":"):e.kind==="physical"?["physical",e.connectionId,e.databaseName||"",e.schemaName||"",e.tableName].join(":"):["sql",e.connectionId,e.sql].join(":")}function K(e,t){return e.domainId!==t.domainId?!1:e.datasetId&&t.datasetId?e.datasetId===t.datasetId:e.datasetName===t.datasetName}function Q(e,t){return e.kind==="semantic"&&t.kind==="semantic"?K(e,t):G(e)===G(t)}function fe(e,t){return e.kind!=="semantic"||t.kind!=="semantic"?e:{...e,datasetId:e.datasetId||t.datasetId,label:e.label||t.label,connectionId:e.connectionId||t.connectionId}}function P(e){const t=[];for(const n of e){const r=t.findIndex(a=>Q(a,n));r===-1?t.push(n):t[r]=fe(t[r],n)}return t}function Ne(e){return P(e)[0]}function H(e,t){return e.kind!=="semantic"||e.connectionId||(t==null?void 0:t.kind)!=="semantic"||!K(e,t)||!t.connectionId?e:{...e,connectionId:t.connectionId}}function W(e){return F(e)?e:void 0}function ie(e,t){if(!(e.kind!=="semantic"||e.connectionId))return t.find(n=>(n==null?void 0:n.kind)==="semantic"&&K(e,n)&&!!n.connectionId)}function w(e,t){const n=W(e==null?void 0:e.source);return n?H(n,t):void 0}function me({explicitSource:e,field:t,defaultSource:n,fallbackSources:r}){const a=[n,...r||[]],i=W(e),o=i?H(i,ie(i,a)):void 0;if(o)return o;if(e!==void 0)return;const d=w(t,n),s=d?H(d,ie(d,a)):void 0;if(s)return s;if((t==null?void 0:t.source)===void 0)return W(n)}function pe(e,t){if(!(e!=null&&e.name)||!(t!=null&&t.name)||e.name!==t.name)return!1;const n=w(e),r=w(t);return!n||!r?!0:Q(n,r)}function D(e){var t;return A((t=_(e))==null?void 0:t.kind)}function he(e){var t,n;return D(e)!=="semantic"?null:((n=A((t=_(e))==null?void 0:t.domainId))==null?void 0:n.trim())||null}function Te(e){var t;return D(e)!=="semantic"?null:A((t=_(e))==null?void 0:t.datasetName)}function Re(e){var t;return D(e)!=="semantic"?null:A((t=_(e))==null?void 0:t.datasetId)}function Me(e){var t;return D(e)!=="physical"?null:A((t=_(e))==null?void 0:t.connectionId)}function $e(e){var t;return D(e)!=="physical"?null:A((t=_(e))==null?void 0:t.tableName)}function Pe(e){var t;return D(e)!=="physical"?"":A((t=_(e))==null?void 0:t.databaseName)||""}function qe(e){var t;return D(e)!=="physical"?"":A((t=_(e))==null?void 0:t.schemaName)||""}function be(e){if(e.analyticsIntent&&typeof e.analyticsIntent=="object"&&"source"in e.analyticsIntent)return e.analyticsIntent.source}function ge({datasets:e,requireAtLeastOne:t}){if(t&&e.length<1)return{ok:!1,issue:"invalid_dataset_count"};if(e.length<=1)return{ok:!0};const n=e.map(he),r=new Set(n.filter(Boolean));return n.some(a=>!a)||r.size!==1?{ok:!1,issue:"invalid_multi_dataset_scope"}:{ok:!0}}function z(e,t){if(!t)return!1;if(t.kind==="semantic"){const n=Re(e);return he(e)===t.domainId?n&&t.datasetId?n===t.datasetId:Te(e)===t.datasetName:!1}return t.kind==="physical"?Me(e)===t.connectionId&&$e(e)===t.tableName&&Pe(e)===(t.databaseName||"")&&qe(e)===(t.schemaName||""):!1}function Be(e,t){return e.find(n=>z(n,t))}function f(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function B(e){const t=new Set;for(const n of e){if(t.has(n))return n;t.add(n)}return null}function Ie({card:e,datasets:t,errors:n}){if(e.type==="text")return;const r=be(e);if(!r){if(t.length<=1)return;n.push(f("missing_card_analytics_source","Multi-dataset dashboard cards must include analytics intent with a source so the materializer can choose the correct dataset.",e.id));return}t.some(a=>z(a,r))||n.push(f("invalid_card_analytics_source","Dashboard cards with an explicit analytics source must use one of the selected datasets.",e.id))}function Ve(e){var t;return e?[...Array.isArray(e.metricRefs)?e.metricRefs.map(n=>n.source):[],(t=e.dateFieldRef)==null?void 0:t.source,...Array.isArray(e.dimensionRefs)?e.dimensionRefs.map(n=>n.source):[],...Array.isArray(e.filters)?e.filters.map(n=>{var r;return(r=n.field)==null?void 0:r.source}):[]].filter(n=>!!n):[]}function ye({card:e,datasets:t,errors:n}){if(e.type!=="text"){for(const r of Ve(e.query))if(r&&!t.some(a=>z(a,r))){n.push(f("invalid_card_query_source","Dashboard card query field references must use one of the selected datasets.",e.id));return}}}function oe(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function _e({card:e,errors:t}){if(e.type==="text"||!e.query)return;const{dateField:n,dateFieldRef:r,dimensions:a,dimensionRefs:i,metrics:o,metricRefs:d}=e.query;if(r&&r.name!==n){t.push(f("invalid_card_query_ref","Dashboard card source-aware date field reference must match the query date field.",e.id));return}if(Array.isArray(d)){const p=Array.isArray(o)?o:[],b=d.map(I=>I.name);if(!oe(b,p)){t.push(f("invalid_card_query_ref","Dashboard card source-aware metric references must match the query metrics.",e.id));return}}if(!Array.isArray(i))return;const s=Array.isArray(a)?a:[],u=i.map(p=>p.name);oe(u,s)||t.push(f("invalid_card_query_ref","Dashboard card source-aware dimension references must match the query dimensions.",e.id))}function ve({datasets:e,errors:t,requireAtLeastOne:n}){const r=ge({datasets:e,requireAtLeastOne:n});if(!r.ok){if(r.issue==="invalid_dataset_count"){t.push(f("invalid_dataset_count","Dashboard authoring requires at least one selected dataset."));return}t.push(f("invalid_multi_dataset_scope","Multi-dataset dashboard authoring is limited to semantic datasets from one domain."))}}function we(e){var m,v;const t=[];if(!e||typeof e!="object")return{ok:!1,errors:[f("invalid_plan","Dashboard plan must be a structured object.")],warnings:[]};const n=e,r=[...n.warnings||[]];n.version!==1&&t.push(f("invalid_version","Dashboard plan version must be 1.")),(m=n.title)!=null&&m.trim()||t.push(f("missing_title","Dashboard plan needs a title."));const a=Array.isArray(n.datasets)?n.datasets:[],i=Array.isArray(n.sheets)?n.sheets:[];ve({datasets:a,errors:t,requireAtLeastOne:!0}),i.length!==1&&t.push(f("invalid_sheet_count","MVP dashboard authoring creates exactly one dashboard sheet."));const o=i[0];o&&o.kind!=="dashboard"&&t.push(f("invalid_sheet_kind",'Generated sheet must use kind "dashboard".'));const d=(o==null?void 0:o.cards)||[];d.length>$&&t.push(f("too_many_cards",`Generated dashboards can contain at most ${$} cards.`));const s=B(d.map(l=>l.id));s&&t.push(f("duplicate_card_id",`Duplicate generated card id: ${s}.`));const u=B(d.map(l=>l.frameId));u&&t.push(f("duplicate_frame_id",`Duplicate generated frame id: ${u}.`));for(const l of d)(v=l.title)!=null&&v.trim()||t.push(f("missing_card_title","Card title is required.",l.id)),l.type==="custom"&&t.push(f("custom_visual_out_of_scope","Whole-dashboard authoring supports built-in visual types only.",l.id)),l.type!=="text"&&!l.query&&r.push(f("missing_query_intent","Non-text card has no query intent and may be skipped by the app layer.",l.id)),Ie({card:l,datasets:a,errors:t}),_e({card:l,errors:t}),ye({card:l,datasets:a,errors:t});const p=Array.isArray(n.filterInputs)?n.filterInputs:[],b=p.map(l=>l.id),I=B(b);I&&t.push(f("duplicate_input_id",`Duplicate dashboard input id: ${I}.`));const c=p.map(l=>l.variableName).filter(Boolean)||[],g=B(c);g&&t.push(f("duplicate_input_variable",`Duplicate dashboard input variable name: ${g}.`));const S=Array.isArray(n.calculatedFields)?n.calculatedFields:[];for(const l of S)l.scope==="domain"&&l.reuseOnly!==!0&&t.push(f("domain_calculated_field_create_out_of_scope",`Creating domain calculated field "${l.name}" is outside MVP.`));return{ok:t.length===0,errors:t,warnings:r}}function Ae(e){var o;const t=[];if(!e||typeof e!="object")return{ok:!1,errors:[f("invalid_change_plan","Dashboard change plan must be a structured object.")],warnings:[]};const n=e,r=[...n.warnings||[]];n.version!==1&&t.push(f("invalid_version","Dashboard change plan version must be 1.")),(o=n.dashboardId)!=null&&o.trim()||t.push(f("missing_dashboard_id","Dashboard change plan needs a dashboard id."));const a=Array.isArray(n.datasets)?n.datasets:[],i=Array.isArray(n.operations)?n.operations:[];ve({datasets:a,errors:t,requireAtLeastOne:!1});for(const d of i){if(d.kind==="unsupported"){r.push(f("unsupported_operation",d.reason||d.requestedAction));continue}d.kind==="addCard"&&d.card.type==="custom"&&t.push(f("custom_visual_out_of_scope","Whole-dashboard authoring supports built-in visual types only.",d.card.id)),d.kind==="addCard"&&(Ie({card:d.card,datasets:a,errors:t}),_e({card:d.card,errors:t}),ye({card:d.card,datasets:a,errors:t})),d.kind==="addCalculatedField"&&d.field.scope==="domain"&&d.field.reuseOnly!==!0&&t.push(f("domain_calculated_field_create_out_of_scope",`Creating domain calculated field "${d.field.name}" is outside MVP.`))}return{ok:t.length===0,errors:t,warnings:r}}const ze={lg:48,md:36,sm:24,xs:12,xxs:6};function Oe(e,t){let n=0,r=0,a=0;return e.map(i=>{const o=Math.min(i.w,t);n>0&&n+o>t&&(n=0,r+=a,a=0);const d={i:i.frameId,x:n,y:r,w:o,h:i.h,minW:Math.min(i.minW,t),minH:i.minH,static:!1};return n+=o,a=Math.max(a,i.h),d})}function je(e){const t=[...e].sort((s,u)=>s.priority-u.priority),n=t.filter(s=>s.role==="kpi"),r=t.filter(s=>s.role==="chart"),a=t.filter(s=>s.role==="table"),i=t.filter(s=>s.role==="text"),o=i.slice(0,1),d=i.slice(o.length);return{kpis:n,introText:o,charts:r,tables:a,supportingText:d}}function Le(e,t,n){return t==="xxs"||t==="xs"?n:t==="sm"?Math.min(12,n):t==="md"?e<=1||e===2?18:12:e<=1||e===2?24:e===3?16:12}function Ee(e,t,n,r){return n==="xxs"||n==="xs"||n==="sm"||n==="md"||t===1||t%2===1&&e===0?r:r/2}function Ge(e){const{item:t,band:n,index:r,bandCount:a,breakpoint:i,columns:o}=e;return n==="kpi"?{...t,band:n,w:Le(a,i,o),h:15,minW:Math.min(6,o),minH:12}:n==="table"?{...t,band:n,w:o,h:i==="xxs"||i==="xs"?34:38,minW:Math.min(12,o),minH:18}:n==="introText"?{...t,band:n,w:o,h:i==="xxs"||i==="xs"?12:10,minW:Math.min(12,o),minH:8}:n==="supportingText"?{...t,band:n,w:i==="lg"?o/2:o,h:i==="xxs"||i==="xs"?12:10,minW:Math.min(12,o),minH:8}:{...t,band:n,w:Ee(r,a,i,o),h:i==="xxs"||i==="xs"?28:30,minW:Math.min(12,o),minH:16}}function N(e,t,n,r){return e.map((a,i)=>Ge({item:a,band:t,index:i,bandCount:e.length,breakpoint:n,columns:r}))}function O(e){const t=je(e);return Object.fromEntries(ue.map(n=>{const r=ze[n],a=[...N(t.introText,"introText",n,r),...N(t.kpis,"kpi",n,r),...N(t.charts,"chart",n,r),...N(t.tables,"table",n,r),...N(t.supportingText,"supportingText",n,r)];return[n,Oe(a,r)]}))}function He(e){const t=xe.normalizeAnalyticsCatalogDataType(e);return t==="datetime"?"date":t==="unknown"?"string":t}function We(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function Ue(e){return We(e)&&typeof e.filterId=="string"&&typeof e.operation=="string"&&Array.isArray(e.values)}function Ke(e){return e.filter(t=>typeof t=="string"||typeof t=="number")}function Qe(e){return e.filter(t=>t instanceof Date||typeof t=="string")}function X(e,t){if(t===void 0)return;const n=He(e.dataType),r=e.operation||"in";if(Ue(t))return{...t,filterId:e.id,name:t.name||e.column,valueType:n,dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext};if(r==="is null"||r==="is not null")return{filterId:e.id,name:e.column,operation:r,valueType:n,values:[],dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext};const a=Array.isArray(t)?t:[t],i=n==="date"?Qe(a):Ke(a);if(i.length!==0&&!((r==="between"||r==="not between")&&i.length<2))return{filterId:e.id,name:e.column,operation:r,valueType:n,values:i,dataType:e.dataType,fieldMeta:e.fieldMeta,semanticContext:e.semanticContext}}function Xe(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function Je(e,t,n){const r=(t||[]).filter(a=>a.scope==="card"&&a.targetCardId===n).map(a=>a.field).filter(Boolean);return r.length===0?e:{...e,calculatedFields:[...e.calculatedFields||[],...r]}}function Ye(e){const t={};return{inputs:(e.filterInputs||[]).map((r,a)=>{const i=X(r.filter,r.defaultValue);return i&&(t.shared??(t.shared={}),t.shared[r.id]={status:"set",value:{kind:"filter",filterValue:i}}),{id:r.id,kind:"filter",label:r.label,variableName:r.variableName,scope:r.scope||{kind:"allSheets",sheetKinds:["dashboard"]},runtimeScope:"shared",presentation:{placement:"toolbar",order:a},exports:["label","value","start","end","range"],filter:r.filter}}),defaultInputValues:t.shared&&Object.keys(t.shared).length>0?t:void 0}}function Ze(e){var b,I;const t=we(e.plan);if(!t.ok)throw new Error(t.errors.map(c=>c.message).join(`
2
+ `)||"Dashboard plan is invalid.");const n=e.plan.sheets[0],r=[...t.warnings],a=[],i=new Map(e.cardArtifacts.map(c=>[c.planCardId,c])),o=[];for(const c of n.cards){const g=i.get(c.id);if(!g){const m=Xe("missing_card_artifact",`Card "${c.title}" was skipped because no generated artifact was supplied.`,c.id);a.push(m);continue}r.push(...g.warnings||[]);const S=Je(g.card,e.plan.calculatedFields,c.id);o.push({id:c.frameId,cards:[S],activeCardId:S.id})}if(o.length===0)throw new Error("Dashboard plan did not produce any persistable cards.");const{inputs:d,defaultInputValues:s}=Ye(e.plan),u=O(n.cards.filter(c=>o.some(g=>g.id===c.frameId)).map(c=>({frameId:c.frameId,priority:c.priority,role:c.role})));return{dashboard:{id:e.dashboardId,title:e.plan.title,description:e.plan.description||"",sheets:[{id:n.id,kind:"dashboard",title:n.title,description:n.description,frames:o,layouts:u,calculatedFields:(b=e.plan.calculatedFields)==null?void 0:b.filter(c=>c.scope==="sheet"&&c.field).map(c=>c.field)}],calculatedFields:(I=e.plan.calculatedFields)==null?void 0:I.filter(c=>c.scope==="dashboard"&&c.field).map(c=>c.field),inputs:d,...s?{defaultInputValues:s}:{}},warnings:r,skippedOperations:a}}function k(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function et(e){return JSON.parse(JSON.stringify(e))}function tt(e){var t;return(t=e.sheets)==null?void 0:t.find(n=>(n.kind||"dashboard")==="dashboard")}function L(e,t){var n;for(const r of e.sheets||[])for(const a of r.frames||[]){const i=(n=a.cards)==null?void 0:n.find(o=>o.id===t);if(i)return{sheet:r,frame:a,card:i}}return null}function Se(e){var n,r;const t=(r=(n=e.cards)==null?void 0:n[0])==null?void 0:r.type;return t==="kpi"?"kpi":t==="table"||t==="detailTable"||t==="pivotTable"?"table":t==="text"?"text":"chart"}function nt(e){var t;return new Map((((t=e.layouts)==null?void 0:t.lg)||[]).map((n,r)=>[n.i,r]))}function De(e,t=new Map){const n=nt(e),r=Math.max(n.size,t.size),a=(e.frames||[]).map((i,o)=>({frameId:i.id,role:Se(i),priority:t.get(i.id)??n.get(i.id)??r+o}));e.layouts=O(a)}function rt(e){return Object.values(e.layouts||{}).some(t=>t.length>0)}function at(e,t){if(!rt(e)){De(e);return}const n=O([{frameId:t.id,role:Se(t),priority:0}]);e.layouts??(e.layouts={});for(const[r,a]of Object.entries(n)){const i=e.layouts[r]||[];if(i.some(s=>s.i===t.id))continue;const o=a[0];if(!o)continue;const d=i.reduce((s,u)=>Math.max(s,u.y+u.h),0);e.layouts[r]=[...i,{...o,y:d}]}}function it(e,t){var r;const n=X(t.filter,t.defaultValue);n&&(e.defaultInputValues??(e.defaultInputValues={}),(r=e.defaultInputValues).shared??(r.shared={}),e.defaultInputValues.shared[t.id]={status:"set",value:{kind:"filter",filterValue:n}})}function ot(e){var d;const t=Ae(e.changePlan);if(!t.ok)throw new Error(t.errors.map(s=>s.message).join(`
3
+ `)||"Dashboard change plan is invalid.");const n=et(e.dashboard),r=[...t.warnings],a=[],i=new Map(e.cardArtifacts.map(s=>[s.planCardId,s])),o=tt(n);if(!o)throw new Error("Dashboard has no editable dashboard sheet.");o.frames??(o.frames=[]);for(const s of e.changePlan.operations)switch(s.kind){case"addCard":{if((o.frames||[]).reduce((I,c)=>{var g;return I+(((g=c.cards)==null?void 0:g.length)||0)},0)>=$){a.push(k("generated_card_limit_reached",`MVP AI refinement is capped at ${$} cards.`,s.card.id));break}const p=i.get(s.card.id);if(!p){a.push(k("missing_card_artifact",`Card "${s.card.title}" was skipped because no generated artifact was supplied.`,s.card.id));break}const b={id:s.card.frameId,cards:[p.card],activeCardId:p.card.id};o.frames.push(b),at(o,b);break}case"addFilterInput":{n.inputs??(n.inputs=[]);const u={id:s.input.id,kind:"filter",label:s.input.label,variableName:s.input.variableName,scope:s.input.scope||{kind:"allSheets",sheetKinds:["dashboard"]},runtimeScope:"shared",presentation:{placement:"toolbar",order:n.inputs.length},exports:["label","value","start","end","range"],filter:s.input.filter};n.inputs.push(u),it(n,s.input);break}case"addCalculatedField":{if(s.field.scope==="dashboard"&&s.field.field)n.calculatedFields??(n.calculatedFields=[]),n.calculatedFields.push(s.field.field);else if(s.field.scope==="sheet"&&s.field.field)o.calculatedFields??(o.calculatedFields=[]),o.calculatedFields.push(s.field.field);else if(s.field.scope==="card"&&s.field.field){const u=s.field.targetCardId?L(n,s.field.targetCardId):null;u?((d=u.card).calculatedFields??(d.calculatedFields=[]),u.card.calculatedFields.push(s.field.field)):a.push(k("missing_calculated_field_target",`Calculated field "${s.field.name}" needs a valid target card.`))}break}case"renameCard":{const u=L(n,s.cardId);if(!u){a.push(k("card_not_found",`Card "${s.cardId}" could not be renamed because it was not found.`,s.cardId));break}u.card.title=s.title,s.description!==void 0&&(u.card.description=s.description);break}case"reorderCards":{const u=new Map;for(let p=0;p<s.cardIds.length;p+=1){const b=s.cardIds[p],I=L(n,b);I&&u.set(I.frame.id,p)}De(o,u);break}case"reuseCalculatedField":r.push(k("reused_calculated_field",`Calculated field "${s.fieldId}" is reused by reference.`));break;case"unsupported":a.push(k("unsupported_operation",s.reason||s.requestedAction));break}return{dashboard:n,warnings:r,skippedOperations:a}}function y(e,t,n){return n?{code:e,message:t,cardId:n}:{code:e,message:t}}function R(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function ke(e,t){if(!t.has(e))return t.add(e),e;let n=2,r=`${e}-${n}`;for(;t.has(r);)n+=1,r=`${e}-${n}`;return t.add(r),r}function x(e){return!!(e&&typeof e=="object")}function Ce(e){return Array.isArray(e.inputs)?e.inputs.filter(t=>x(t)&&typeof t.id=="string"):[]}function J(e){return Array.isArray(e.sections)?e.sections.filter(t=>x(t)):[]}function Y(e){return Array.isArray(e.views)?e.views.filter(t=>x(t)):[]}function st(e){return F(e)?e.kind==="semantic"?{kind:"semantic",domainId:e.domainId,datasetName:e.datasetName,datasetId:e.datasetId,label:e.label,connectionId:e.connectionId}:e.kind==="physical"?{kind:"physical",connectionId:e.connectionId,databaseName:e.databaseName,schemaName:e.schemaName,tableName:e.tableName,label:e.label}:null:null}function T(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){const r=w(n);r&&t.push(r)}return t}function dt(e){var r;if(!e)return[];const t=[];if(F(e.source)&&t.push(e.source),e.kind==="metric"){t.push(...T(e.metricRefs));const a=w(e.dateField);a&&t.push(a),t.push(...T(e.dimensions)),t.push(...T((r=e.filters)==null?void 0:r.map(i=>i.field)))}else if(e.kind==="records"){const a=w(e.dateField);a&&t.push(a),t.push(...T(e.fields))}else if(e.kind==="inputOptions"){const a=w(e.field);a&&t.push(a)}else e.kind==="sql"&&t.push(...T(e.fields));const n="inputs"in e&&Array.isArray(e.inputs)?e.inputs:[];for(const a of n){const i=w(a.field);i&&t.push(i)}return t}function ct(e){const t=[];for(const n of Ce(e)){F(n.source)&&t.push(n.source);const r=w(n.field);r&&t.push(r)}for(const n of J(e))for(const r of Y(n))t.push(...dt(r.analytics));return t}function ut(e){var n;const t=[];for(const r of J(e))for(const a of Y(r))F((n=a.analytics)==null?void 0:n.source)&&t.push(a.analytics.source);return t}function lt(e,t){const n=P(e).map(st).filter(i=>!!i);if(n.length===0)return t.push(y("missing_materializable_dataset","No semantic or physical source could be converted into the current dashboard authoring dataset reference.")),[];const r=n.every(i=>i.kind==="semantic"),a=Array.from(new Set(n.filter(i=>i.kind==="semantic").map(i=>i.domainId)));return n.length>1&&(!r||a.length!==1)?(t.push(y("multiple_datasets_out_of_scope","The dashboard authoring compiler supports multiple datasets only within one semantic domain; using the first source and deferring the rest.")),[n[0]]):n}function ft(e,t){const n=J(e),r=Ce(e),a=P(ct(e)),i=P(ut(e));return{sections:n,inputs:r,sources:a,primarySources:i,defaultSource:i.length===1?i[0]:void 0,datasets:lt(a,t)}}function se(e){return U(e).map(t=>t.name).filter(Boolean)}function U(e){return(Array.isArray(e.fields)?e.fields:[]).filter(t=>!pe(t,e.dateField))}function mt(e){const t=Array.isArray(e.metrics)?e.metrics.filter(n=>typeof n=="string"&&n.trim().length>0):[];return Array.from(new Set(t))}function pt(e){return x(e)&&typeof e.name=="string"&&e.name.trim().length>0}function de(e){if(!Array.isArray(e.dimensions))return;const t=e.dimensions.filter(pt).map(n=>n.name);return t.length?t:void 0}function V(e){return e==="hour"?"day":e}function M(e,t={}){var n,r;if(e!=null&&e.name){if(((n=e.source)==null?void 0:n.kind)==="semantic")return!e.source.domainId||!e.source.datasetName?void 0:{name:e.name,source:{kind:"semantic",domainId:e.source.domainId,datasetName:e.source.datasetName,datasetId:e.source.datasetId,label:e.source.label,connectionId:e.source.connectionId}};if(((r=e.source)==null?void 0:r.kind)==="physical")return!e.source.connectionId||!e.source.tableName?void 0:{name:e.name,source:{kind:"physical",connectionId:e.source.connectionId,tableName:e.source.tableName,databaseName:e.source.databaseName,schemaName:e.source.schemaName,label:e.source.label}};if(!(e.source!==void 0||!t.includeUnsourced))return{name:e.name}}}function C(e){if(!Array.isArray(e))return;const t=e.map(n=>M(n,{includeUnsourced:!0})).filter(Boolean);if(t.length===e.length)return t.some(n=>n.source)?t:void 0}function ht(e){var t,n;if(e){if(e.kind==="metric")return{metrics:mt(e),...e.primaryMetric?{primaryMetric:e.primaryMetric}:{},...(t=e.dateField)!=null&&t.name?{dateField:e.dateField.name}:{},...C(e.metricRefs)?{metricRefs:C(e.metricRefs)}:{},...M(e.dateField)?{dateFieldRef:M(e.dateField)}:{},...V(e.timeGrain)?{timeGrain:V(e.timeGrain)}:{},...de(e)?{dimensions:de(e)}:{},...C(e.dimensions)?{dimensionRefs:C(e.dimensions)}:{},...e.filters?{filters:e.filters}:{},...e.limit!==void 0?{limit:e.limit}:{}};if(e.kind==="records")return{metrics:e.measures,...(n=e.dateField)!=null&&n.name?{dateField:e.dateField.name}:{},...M(e.dateField)?{dateFieldRef:M(e.dateField)}:{},...V(e.timeGrain)?{timeGrain:V(e.timeGrain)}:{},...se(e)?{dimensions:se(e)}:{},...C(U(e))?{dimensionRefs:C(U(e))}:{},...e.limit!==void 0?{limit:e.limit}:{}}}}function bt(e){return e&&ce.validateSemaphorAnalyticsIntent(e).ok?e:void 0}function gt(e){var t;switch((t=e.presentation)==null?void 0:t.kind){case"kpi":return"kpi";case"lineChart":return"line";case"barChart":return"bar";case"areaChart":return"area";case"table":return"table";case"text":return"text";default:return null}}function It(e){var t,n,r;return((t=e.presentation)==null?void 0:t.kind)==="kpi"?"kpi":((n=e.presentation)==null?void 0:n.kind)==="table"?"table":((r=e.presentation)==null?void 0:r.kind)==="text"?"text":"chart"}function yt(e){switch(e){case"not_in":return"not in";case"not_between":return"not between";case"contains":return"like";default:return e||"in"}}function _t(e){return x(e.field)?e.field.dataType==="datetime"?"date":e.field.dataType||"string":"string"}function vt(e){if(!(!e||e.kind!=="physical"))return[e.databaseName,e.schemaName,e.tableName].filter(Boolean).join(".")}function wt(e,t,n,r,a,i){if(e.kind!=="filter")return i.push(y("control_inputs_deferred",`Control input "${e.label}" is represented in the protocol but not yet materialized by the dashboard authoring adapter.`)),null;if(!x(e.field)||typeof e.field.name!="string")return i.push(y("filter_requires_field",`Filter "${e.label||e.id}" needs a field before the dashboard compiler can materialize it.`)),null;const o=me({explicitSource:e.source,field:e.field,defaultSource:t,fallbackSources:n}),d=(o==null?void 0:o.kind)==="semantic"||(o==null?void 0:o.kind)==="physical"?o.connectionId:void 0;if(!d)return i.push(y("filter_requires_connection_id",`Filter "${e.label}" needs a source connectionId before the dashboard compiler can materialize it.`)),null;const p={id:`filter-${ke(R(e.id,e.field.name),a)}`,variableName:e.id,connectionId:d,title:e.label,column:e.field.name,dataType:_t(e),qualifiedTableName:vt(o),sql:"",operation:yt(e.operator),type:e.multi===!1?"single":"multiple",location:"dashboard",displayMode:"toolbar",fieldMeta:(o==null?void 0:o.kind)==="semantic"?{name:e.field.name,qualifiedFieldName:e.field.name,dataType:e.field.dataType,role:e.field.role==="measure"?"metric":"groupby"}:void 0,semanticContext:(o==null?void 0:o.kind)==="semantic"?{semanticDomainId:o.domainId,connectionId:o.connectionId}:void 0};return{id:e.id,label:e.label,variableName:e.id,scope:r,filter:p,defaultValue:X(p,e.defaultValue)}}function E(e){const t=[],n=[];for(const r of e.viewIds){const a=e.viewIdToCardId.get(r);a?t.push(a):n.push(r)}return n.length>0&&e.warnings.push(y("input_scope_view_not_found",`Filter "${e.inputLabel}" referenced unknown view ids: ${n.join(", ")}.`)),Array.from(new Set(t))}function At(e){var r,a;if(!e.protocolScope){const i=Array.from(new Set(e.boundCardIds));return i.length>0&&i.length<e.allCardIds.length?{kind:"cards",cardIds:i}:void 0}if(e.protocolScope.level==="dashboard"){if(!((r=e.protocolScope.excludeViewIds)!=null&&r.length))return;const i=new Set(E({inputLabel:e.inputLabel,viewIds:e.protocolScope.excludeViewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings}));return{kind:"cards",cardIds:e.allCardIds.filter(o=>!i.has(o))}}if(e.protocolScope.level==="view"){const i=E({inputLabel:e.inputLabel,viewIds:e.protocolScope.viewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings});return i.length===0?(e.warnings.push(y("input_scope_has_no_materialized_cards",`Filter "${e.inputLabel}" was deferred because its view scope does not match any materialized cards.`)),null):{kind:"cards",cardIds:i}}const t=e.sectionIdToCardIds.get(e.protocolScope.sectionId)||[];if(t.length===0)return e.warnings.push(y("input_scope_section_not_found",`Filter "${e.inputLabel}" was deferred because section "${e.protocolScope.sectionId}" does not match any materialized cards.`)),null;if(!((a=e.protocolScope.excludeViewIds)!=null&&a.length))return{kind:"cards",cardIds:t};const n=new Set(E({inputLabel:e.inputLabel,viewIds:e.protocolScope.excludeViewIds,viewIdToCardId:e.viewIdToCardId,warnings:e.warnings}));return{kind:"cards",cardIds:t.filter(i=>!n.has(i))}}function St(e){var c,g,S;const t=[],n=ce.validateSemaphorDashboardIntent(e);for(const m of n.warnings)t.push(y(m.code,m.message));for(const m of n.errors)t.push(y(m.code,m.message));const r=ft(e,t),a=[],i=new Map,o=new Map,d=new Map,s=new Set,u=new Set;let p=0;for(const[m,v]of r.sections.entries()){const l=typeof v.title=="string"?v.title:`Section ${m+1}`,Z=v.id||R(l,`section-${m+1}`);o.set(Z,[]);for(const[ee,h]of Y(v).entries()){const te=gt(h),j=R(h.id||`${l}-${h.title||`View ${ee+1}`}`,`card-${m+1}-${ee+1}`);if(!te){t.push(y("unsupported_presentation",`Dashboard presentation "${((c=h.presentation)==null?void 0:c.kind)||"unknown"}" is not supported by the dashboard authoring adapter.`,`card-${j}`));continue}if(((g=h.analytics)==null?void 0:g.kind)==="sql"){t.push(y("sql_intent_deferred","SQL analytics intent is valid protocol, but the current dashboard authoring adapter only materializes semantic and physical config-card intents.",`card-${j}`));continue}const ne=ke(j,s),q=`card-${ne}`;h.id&&i.set(h.id,q),(S=o.get(Z))==null||S.push(q);const Fe=h.analytics&&"inputs"in h.analytics?h.analytics.inputs:void 0;for(const re of Fe||[]){const ae=d.get(re.inputId)||[];ae.push(q),d.set(re.inputId,ae)}a.push({id:q,frameId:`frame-${ne}`,title:h.title,description:h.description,type:te,role:It(h),priority:p,section:l,query:ht(h.analytics),analyticsIntent:bt(h.analytics),text:h.text}),p+=1}}const b=r.inputs.map(m=>{const v=At({protocolScope:m.scope,inputLabel:m.label,allCardIds:a.map(l=>l.id),boundCardIds:d.get(m.id)||[],viewIdToCardId:i,sectionIdToCardIds:o,warnings:t});return v===null?null:wt(m,r.defaultSource,r.sources,v,u,t)}).filter(m=>!!m);return{plan:{version:1,id:`plan-${R(e.title,"dashboard")}`,title:e.title,description:e.description,datasets:r.datasets,sheets:[{id:`sheet-${R(e.title,"dashboard")}`,title:e.title,description:e.description,kind:"dashboard",cards:a}],filterInputs:b.length?b:void 0,warnings:t.length?t:void 0,unresolvedRequests:n.ok?void 0:n.errors.map(m=>m.message)},warnings:t}}exports.DASHBOARD_AUTHORING_BREAKPOINTS=ue;exports.DASHBOARD_AUTHORING_MAX_GENERATED_CARDS=$;exports.applyDashboardChangePlan=ot;exports.compileDashboardFromPlan=Ze;exports.compileResponsiveDashboardLayouts=O;exports.dashboardAuthoringDatasetMatchesSource=z;exports.dashboardAuthoringFieldsReferToSameTarget=pe;exports.dashboardAuthoringSourceFromField=w;exports.dashboardAuthoringSourceKey=G;exports.dashboardAuthoringSourcesReferToSameDataset=Q;exports.dashboardPlanFromSemaphorDashboardIntent=St;exports.findDashboardAuthoringDatasetForSource=Be;exports.getDashboardAuthoringCardSource=be;exports.isMaterializableDashboardAuthoringSource=F;exports.isSemaphorSourceRef=le;exports.mergeDashboardAuthoringSources=P;exports.preferDashboardAuthoringSourceMetadata=fe;exports.preferredDashboardAuthoringSource=Ne;exports.resolveDashboardAuthoringSource=me;exports.validateDashboardAuthoringDatasetScope=ge;exports.validateDashboardChangePlan=Ae;exports.validateDashboardPlan=we;