PageSourceSearch

https://pltt.ai/_next/static/chunks/1bc9s5ipvo304.js

js pltt.ai collected 2026-10-05 15:19:20 UTC 44,026 bytes, 51 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,430796,e=>{"use strict";var t=e.i(402389);let a="data-chart",s=null,r=`
2<script>document.addEventListener("click",function(e){if(e.defaultPrevented)return;var a=e.target&&e.target.closest?e.target.closest("a[href]"):null;if(!a)return;var href=a.getAttribute("href")||"";e.preventDefault();if(href.charAt(0)==="#"){var el=href.length>1?document.getElementById(href.slice(1)):null;if(el)el.scrollIntoView({behavior:"smooth"});else window.scrollTo({top:0,behavior:"smooth"});return}if(/^https?:\\/\\//i.test(href))window.open(href,"_blank","noopener")});</script>`;function i(e,t){let a=e.toLowerCase().lastIndexOf("</body>");return a>=0?e.slice(0,a)+t+e.slice(a):e+t}function l(e){if(!e.includes(a)&&!/data-session-dashboard=["']nocturne-v1["']/.test(e))return e;let t=window.location.origin;if(!t)return e;let s=`
3<script src="${t}/vendor/echarts.min.js"></script>
4<script src="${t}/artifact-charts.js"></script>`+(/data-session-dashboard=["']nocturne-v1["']/.test(e)?`<link rel="stylesheet" href="${t}/session-dashboard-fonts.css">${/(?:"|&quot;)geo(?:"|&quot;)/.test(e)?`
5<script src="${t}/session-dashboard-world.js"></script>`:""}
6<script src="${t}/session-dashboard.js"></script>`:"");return i(e,s)}let n=null;async function o(){if(null!==n)return n;try{let[e,t]=await Promise.all([fetch("/vendor/echarts.min.js").then(e=>e.ok?e.text():Promise.reject(e.status)),fetch("/artifact-charts.js").then(e=>e.ok?e.text():Promise.reject(e.status))]);n=`
7<script>${e.replace(/<\/script/gi,"<\\/script")}</script>
8<script>${t.replace(/<\/script/gi,"<\\/script")}</script>`}catch{return n=null,null}return n}async function d(e){if(!e||!e.includes(a)&&!/data-session-dashboard=["']nocturne-v1["']/.test(e))return e;let r=await o();if(!r&&/data-session-dashboard=["']nocturne-v1["']/.test(e))throw Error(t.default.t("sessionDashboard.downloadUnavailable","Chart assets unavailable. Reconnect and retry the dashboard download."));return r?i(e,r+(/data-session-dashboard=["']nocturne-v1["']/.test(e)?await (s??=Promise.all(["/session-dashboard-fonts.css","/session-dashboard-world.js","/session-dashboard.js"].map(async e=>{let a=await fetch(e);if(!a.ok)throw Error(t.default.t("sessionDashboard.assetUnavailable","Dashboard export asset unavailable"));return e.endsWith(".css")?"<style>"+await a.text()+"</style>":"\n<script>"+(await a.text()).replace(/<\/script/gi,"<\\/script")+"</script>"})).then(e=>e.join("")).catch(e=>{throw s=null,e})):"")):l(e)}let c="section.slide, .slide",p=new Map,u=`
9<style>[data-pltt-slide-hidden]{display:none!important}</style>
10<script>(function(){var sel="section.slide, .slide";var all=Array.prototype.slice.call(document.querySelectorAll(sel));var slides=all.filter(function(el){var p=el.parentElement;return !(p&&p.closest(sel))});if(slides.length<2)return;var cur=0;function show(i){cur=Math.max(0,Math.min(slides.length-1,i));slides.forEach(function(s,j){if(j===cur)s.removeAttribute("data-pltt-slide-hidden");else s.setAttribute("data-pltt-slide-hidden","")});window.scrollTo(0,0);try{parent.postMessage({__plttSlides:{current:cur,count:slides.length}},"*")}catch(e){}}window.addEventListener("message",function(e){if(e.source!==parent)return;var d=e.data&&e.data.__plttSlidesNav;if(d===undefined||d===null)return;if(d==="next")show(cur+1);else if(d==="prev")show(cur-1);else if(typeof d==="number"&&Number.isSafeInteger(d))show(d)});document.addEventListener("dblclick",function(){try{parent.postMessage({__plttSlides:{edit:true}},"*")}catch(e){}});document.addEventListener("keydown",function(e){if(e.key==="ArrowRight"||e.key==="PageDown"||e.key===" ")show(cur+1);else if(e.key==="ArrowLeft"||e.key==="PageUp")show(cur-1)});show(0);})();</script>`;e.s(["buildSheetPreview",0,function(e,t){let a;try{a=new DOMParser().parseFromString(e,"text/html")}catch{return e}let s=Array.from(a.querySelectorAll("table"));if(0===s.length)return e;let r=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),i=s.map((e,t)=>`<section class="pltt-sheet" data-sheet="${t}"${0===t?"":" hidden"}>${e.outerHTML}</section>`).join("\n"),l=s.map((e,t)=>`<button class="pltt-sheet-tab${0===t?" on":""}" data-tab="${t}">${r(((e,t)=>{let a=e.querySelector("caption")?.textContent?.trim();if(a)return a;let s=e;for(;s;){let e=s.previousElementSibling;for(;e;){if(/^H[1-6]$/.test(e.tagName)){let t=e.textContent?.trim();if(t)return t}e=e.previousElementSibling}s=s.parentElement}return`Sheet ${t+1}`})(e,t).slice(0,40))}</button>`).join("");return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${r(t)}</title><style>
11:root{color-scheme:light}
12html,body{margin:0;height:100%;background:#fff;color:#17181a;font:13px/1.5 Pretendard,-apple-system,system-ui,sans-serif;display:flex;flex-direction:column}
13main{flex:1;overflow:auto;padding:0}
14.pltt-sheet table{border-collapse:collapse;width:100%;}
15.pltt-sheet th,.pltt-sheet td{border:1px solid #d9dbdf;padding:7px 12px;text-align:left;vertical-align:top}
16.pltt-sheet thead th,.pltt-sheet tr:first-child th{background:#f1f3f0;font-weight:700}
17.pltt-sheet td.num{text-align:right;font-variant-numeric:tabular-nums}
18nav{flex:none;display:flex;gap:2px;border-top:2px solid #d9dbdf;background:#f7f7f5;padding:4px 8px 6px;overflow-x:auto}
19.pltt-sheet-tab{border:1px solid #d9dbdf;border-top:0;background:#fff;padding:4px 14px;font:600 11px Pretendard,sans-serif;color:#5b5e66;cursor:pointer;border-radius:0 0 6px 6px;white-space:nowrap}
20.pltt-sheet-tab.on{background:#17181a;color:#fff;border-color:#17181a}
21</style></head><body><main>${i}</main><nav>${l}</nav>
22<script>
23document.querySelectorAll(".pltt-sheet td").forEach(function(td){
24  if(/^[-+]?[\\d,.]+\\s*(%|원|건|명|억|만)?$/.test((td.textContent||"").trim()))td.classList.add("num");
25});
26document.querySelectorAll(".pltt-sheet-tab").forEach(function(btn
26){
27  btn.addEventListener("click",function(){
28    var i=btn.getAttribute("data-tab");
29    document.querySelectorAll(".pltt-sheet").forEach(function(s){s.hidden=s.getAttribute("data-sheet")!==i});
30    document.querySelectorAll(".pltt-sheet-tab").forEach(function(b){b.classList.toggle("on",b===btn)});
31  });
32});
33</script></body></html>`},"countArtifactSlides",0,function(e){if(!e||!e.toLowerCase().includes("slide"))return 0;let t=p.get(e);if(void 0!==t)return t;let a=0;try{let t=new DOMParser().parseFromString(e,"text/html");a=Array.from(t.querySelectorAll(c)).filter(e=>!e.parentElement?.closest(c)).length}catch{a=0}return p.size>200&&p.clear(),p.set(e,a),a},"countArtifactTables",0,function(e){if(!e)return 0;try{return new DOMParser().parseFromString(e,"text/html").querySelectorAll("table").length}catch{return 0}},"prepareArtifactHtml",0,function(e,t=!1,a=!1){return e?(a&&(e=e.replace(/<!-- dashboard-evidence -->[\s\S]*?<!-- \/dashboard-evidence -->/g,"")),t&&(e=i(e=e.replace(/<(?:html|body)\b[^>]*>/gi,e=>e.replace(/\bdata-canvas\s*=\s*(["'])dark\1/gi,'data-canvas="light"')),"<style>html,body{background:#fff!important;color:#0e1620!important;color-scheme:light}</style>")),i(l(e),"<style>body{overflow-wrap:anywhere}</style>"+r)):e},"withInlineChartRuntime",0,d,"withSlideRuntime",0,function(e){return e?i(e,u):e}])},554293,e=>{"use strict";let t={signal:["#FF4B5E","#FF3F64","#FF8367"],tide:["#2E9BFF","#0C6CD8","#69C1FF"],mint:["#1FBF6B","#0FA85A","#6CE0A0"],iris:["#8B6CF5","#6A4DF0","#C08CFF"],amber:["#FFB02E","#FF9500","#FFD466"]},a=["line","area","sparkline","combo","bar","stacked-bar","pie","donut","ring","concentric","gauge","heatmap","scatter","radar","range","boxplot","before-after","network","bubble","sankey","funnel","geo"],s=e=>{throw Error(e)},r=e=>"number"==typeof e&&Number.isFinite(e),i=e=>String(e??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e]),l=(e,t)=>`rgba(${parseInt(e.slice(1,3),16)},${parseInt(e.slice(3,5),16)},${parseInt(e.slice(5,7),16)},${t})`,n="Session Dashboard Inter, Inter, system-ui, sans-serif",o="Session Dashboard JetBrains Mono, JetBrains Mono, monospace",d={down:{x:0,y:0,x2:0,y2:1},up:{x:0,y:1,x2:0,y2:0},right:{x:0,y:0,x2:1,y2:0}},c=(e,t,a="down")=>({type:"linear",...d[a],colorStops:[{offset:0,color:e},{offset:1,color:t}]});function p(e="light",a="signal"){let s="dark"===e,[r,i,n]=t[a]||t.signal;return{dark:s,accent:r,accentA:i,accentB:n,accentSoft:l(r,.14),palette:["#6A6EF3","#22C04A","#FF5668","#69C1FF","#F0A35E","#FA78F0","#FCCC00","#D7F205"],seq:["#BFE3FF","#8FCBFF","#69C1FF","#2E9BFF","#0C6CD8","#08498F"],pos:"#22C04A",neg:"#FF4B5E",warn:"#FCCC00",info:"#1E90FF",neutral:"#8A8C92",surface:s?"#0B0C0E":"#FFFFFF",surface2:s?"#141517":"#F4F6F9",surface3:s?"#1B1D20":"#ECEFF3",ink:s?"#FFFFFF":"#0E1620",inkMuted:s?"#9A9CA3":"#5C6470",muted:s?"#9A9CA3":"#5C6470",dim:s?"#9A9CA3":"#5C6470",grid:s?"rgba(255,255,255,.14)":"rgba(16,22,30,.12)",tooltip:{backgroundColor:"#23272B",borderWidth:0,padding:[8,12],textStyle:{color:"#FFFFFF",fontFamily:o,fontSize:12},extraCssText:"border-radius:9px;box-shadow:0 8px 24px rgba(0,0,0,.30)"}}}function u(e){for(let t of(e&&a.includes(e.type)||s("Unsupported dashboard chart type"),["title","unit"]))void 0!==e[t]&&("string"!=typeof e[t]||e[t].length>500)&&s(`Invalid ${t}`);for(let t of["x","y","series","items","nodes","links","points"])void 0!==e[t]&&(!Array.isArray(e[t])||e[t].length>500)&&s(`Invalid or oversized ${t}`);let t=e.series||[],i=e.items||[];if([...t,...i,...e.points||[],...e.links||[],...e.nodes||[]].some(e=>!e||"object"!=typeof e||Array.isArray(e))&&s("Invalid data entry"),(e.x?.some(e=>"string"!=typeof e)||e.y?.some(e=>"string"!=typeof e))&&s("Category labels must be text"),"heatmap"===e.type&&e.y&&e.y.length!==t.length&&s("Heatmap labels must match rows"),"radar"===e.type&&3>(e.x?.length||0)&&s("Radar requires at least three categories"),t.length>20&&s("Use at most 20 series"),["ring","gauge"].includes(e.type))(!r(e.value)||!r(e.max??100)||(e.max??100)<=0||e.value<0||e.value>(e.max??100))&&s("Value must be between zero and max");else if(["pie","donut","funnel","concentric"].includes(e.type))t.length||s("No data available"),t.every(e=>r(e.value)&&e.value>=0)||s("Values must be non-negative numbers"),"concentric"!==e.type||t.every(e=>r(e.max??100)&&(e.max??100)>0&&e.value<=(e.max??100))||s("Ring values must be between zero and max");else if(["network","sankey"].includes(e.type)){e.links?.length||s("No data available"),e.links.every(e=>"string"==typeof e.source&&e.source&&"string"==typeof e.target&&e.target&&r(e.value)&&e.value>
33=0)||s("Links require source, target and non-negative value");let t=new Set(e.nodes?.map(e=>e.name)||e.links.flatMap(e=>[e.source,e.target]));if(([...t].some(e=>"string"!=typeof e||!e)||e.nodes&&t.size!==e.nodes.length)&&s("Node names must be unique non-empty text"),(t.size>500||e.links.some(e=>!t.has(e.source)||!t.has(e.target)))&&s("Link references an unknown node"),"sankey"===e.type){let a=new Map([...t].map(e=>[e,[]])),r=new Set,i=new Set;e.links.forEach(e=>a.get(e.source).push(e.target));let l=e=>{i.has(e)&&s("Sankey links must not contain cycles"),r.has(e)||(i.add(e),a.get(e).forEach(l),i.delete(e),r.add(e))};t.forEach(l)}}else if(["range","boxplot","before-after"].includes(e.type))for(let t of(i.length||s("No data available"),i))"range"!==e.type||r(t.low)&&r(t.high)&&!(t.low>t.high)||s("Range requires low <= high"),"before-after"!==e.type||r(t.before)&&r(t.after)||s("Before/after requires numeric values"),"boxplot"!==e.type||Array.isArray(t.values)&&t.values.length&&!(t.values.length>500)&&t.values.every(r)||s("Box plot requires numeric observations");else if(["geo","bubble"].includes(e.type))e.points?.length||s("No data available"),e.points.every(t=>r(t.value)&&t.value>=0&&("bubble"===e.type||r(t.lng)&&r(t.lat)&&180>=Math.abs(t.lng)&&90>=Math.abs(t.lat)))||s("Invalid point value or longitude/latitude");else for(let a of(t.length&&t.some(t=>Array.isArray(t.data)&&t.data.some(t=>"scatter"===e.type?Array.isArray(t):r(t)))||s("No data available"),t))(!Array.isArray(a.data)||a.data.length>500)&&s("Invalid series data"),"scatter"===e.type?a.data.every(e=>Array.isArray(e)&&2===e.length&&e.every(r))||s("Scatter requires numeric x/y pairs"):(e.x?.length&&a.data.length===e.x.length&&a.data.every(e=>null===e||r(e))||s("Series values must match categories"),"combo"!==e.type||["line","bar"].includes(a.type)||s("Combo series requires type line or bar"));return e}let m=new Set(["kpi","stats","hero","ring","split","segments","badges","bullet","gauge","progress"]),h=new Set(["stat","multistat","kpi-strip","progress","progress-multi","radial","ring-kpi","gauge","hero","ring","split","segments","badges","bullet"]),g=new Set(["line","area","bar","vertical-bar","stacked-bar","pie","donut","scatter","radar","treemap","funnel","heatmap","sankey","boxplot","range","before-after","network","bubble","combo","leaderboard","sparkline","concentric","geo"]),f=new Set(["sparkline","area","combo","bars","vbars","donut","pie","heatmap","scatter","boxplot","range","before-after","radar","treemap","funnel","stacked-bar","line","step-line","stacked-area","pct-stacked","waterfall","pareto","histogram","pictorial-bar","lollipop","dumbbell","slope","sunburst","rose","tree","candlestick","parallel","themeriver","effect-scatter","sankey","network","bubble","choropleth","pin-map","leaderboard"]),b=new Set(["table","comparison","master-detail","datafeeds","document","kanban"]),v=new Set(["table","dense-table","master-detail","comparison","datafeeds","document","kanban","list-rich"]),y=new Set(["alert"]);function $(e){if("po"===e.type){let t=e.visual;return h.has(t)?"kpi":v.has(t)?"table":f.has(t)?"chart":"narrative"}return m.has(e.type)?"kpi":b.has(e.type)?"table":g.has(e.type)?"chart":y.has(e.type)?"takeaway":"narrative"}let w={analytical:["kpi","chart","table","narrative","takeaway"],executive:["kpi","chart","narrative","table","takeaway"],comparison:["table","chart","kpi","narrative","takeaway"]},x="analytical",k={gw:12,gh:3,minGw:6,flow:!0},A={gw:7,gh:9,minGw:5},F={gw:5,gh:9,minGw:4},S={gw:8,gh:9,minGw:6},M={gw:6,gh:9,minGw:4},C={stats:k,kpi:k,multistat:k,"kpi-strip":k,"progress-multi":k,hero:{gw:12,gh:5},ring:{gw:3,gh:4},"ring-kpi":{gw:3,gh:4},gauge:{gw:3,gh:4},radial:{gw:3,gh:4},state:{gw:3,gh:4},stat:{gw:3,gh:4},split:{gw:4,gh:4},segments:{gw:4,gh:4},badges:{gw:4,gh:4},progress:{gw:4,gh:4},bullet:{gw:6,gh:5},line:A,area:A,bar:A,bars:A,"vertical-bar":A,vbars:A,"stacked-bar":A,combo:A,"step-line":A,"stacked-area":A,"pct-stacked":A,waterfall:A,pareto:A,histogram:A,lollipop:A,dumbbell:A,candlestick:A,"pictorial-bar":A,pie:F,donut:F,funnel:F,radar:F,slope:F,rose:F,sparkline:F,"before-after":F,leaderboard:F,concentric:F,heatmap:S,treemap:S,scatter:S,sankey:S,network:S,bubble:S,sunburst:S,tree:S,boxplot:S,range:S,parallel:S,themeriver:S,"effect-scatter":S,choropleth:S,"pin-ma
33p":S,geo:S,table:S,"dense-table":S,comparison:S,"master-detail":{gw:12,gh:10},kanban:{gw:12,gh:10},columns:{gw:12,gh:10},colcards:{gw:12,gh:10},feed:{gw:4,gh:9,minGw:3},list:{gw:4,gh:9,minGw:3},"list-rich":{gw:4,gh:9,minGw:3},datafeeds:{gw:4,gh:9,minGw:3},timeline:M,document:M,approval:M,image:M,markdown:M,summary:M,code:M,text:M,alert:{gw:12,gh:2,flow:!0}},j={gw:6,gh:6,minGw:4},E=(e,t,a)=>Math.max(t,Math.min(a,e)),q=e=>{let t="po"===e.type?e.visual:e.type;return"hero"===t?0:C[t]?.flow?2:1};function z(e,t,a=12,s=!1){if(s)return function(e,t,a){let s=e=>["hero","stats","kpi"].includes(e.type),r={headline:[],visual:[],table:[],narrative:[],takeaway:[]};for(let t of e){let e=$(t);r[s(t)?"headline":"kpi"===e||"chart"===e?"visual":e].push(t)}r.headline.sort((e,t)=>Number("hero"===t.type)-Number("hero"===e.type));let i=[];for(let e of"comparison"===t?["table","headline","visual","narrative","takeaway"]:"executive"===t?["headline","visual","narrative","table","takeaway"]:["headline","visual","table","narrative","takeaway"]){let s=r[e];for(let r=0;r<s.length;){let l="headline"===e&&"hero"===s[r].type&&["stats","kpi"].includes(s[r+1]?.type)&&12===a,n=a>1&&["visual","narrative"].includes(e)&&r+1<s.length&&("executive"!==t||"visual"!==e||0!==r)&&!("narrative"===e&&[s[r],s[r+1]].some(e=>["timeline","approval"].includes(e.type))),o=s.slice(r,r+(l||n?2:1));o.forEach((e,t)=>i.push({panel:e,gw:l?t?8:4:a/o.length,gh:null})),r+=o.length}}return i}(e,t,a);let r="string"==typeof t&&t in w?t:x,i=w[r],l=new Map(i.map(e=>[e,[]]));for(let t of e)l.get($(t)).push(t);let n=l.get("kpi");n.sort((e,t)=>q(e)-q(t));let o=n.some(e=>0===q(e))&&n.length>1,d=i.flatMap(e=>l.get(e)),c=a/12,p=[],u=[],m=0,h=!1,g=e=>{let t=function(e){if("table"===e.type)return Array.isArray(e.rows)?{gw:e.headers.length>=5?12:8,gh:E(e.rows.length+2,6,14),minGw:6}:{gw:12,gh:9};if("po"===e.type&&("table"===e.visual||"dense-table"===e.visual)){let t=e.data||{},a=Array.isArray(t.rows)?t.rows.length:0;return{gw:(Array.isArray(t.columns)?t.columns.length:0)>=5?12:8,gh:a?E(a+2,6,14):9,minGw:6}}return C["po"===e.type?e.visual:e.type]||j}(e);return"hero"===("po"===e.type?e.visual:e.type)&&o?{...t,gw:4}:"executive"!==r||"chart"!==$(e)||h?t:{...t,gw:12}},f=()=>{if(!u.length)return;let e=a-m;for(let t=0;e>0;t=(t+1)%u.length,e--)u[t].gw+=1;let t=1===u.length&&g(u[0].panel).flow?null:Math.max(...u.map(e=>e.gh??0))||null;for(let e of u)e.gh=t;p.push(...u),u=[],m=0};for(let e of d){let t=g(e);"chart"===$(e)&&(h=!0);let s=E(Math.round(t.gw*c),1,a),r=E(Math.round((t.minGw??t.gw)*c),1,s);6===a&&(r=s=t.flow||t.gw>=9||"table"===$(e)?6:3),m+s>a&&(m+r<=a?s=a-m:f()),u.push({panel:e,gw:s,gh:t.gh}),(m+=s)>=a&&f()}return f(),p}function B(e){if(e&&a.includes(e.type)&&["x","series","items","links","points","value","ref"].some(t=>void 0!==e[t])&&!(e.items&&e.items[0]&&"label"in e.items[0]&&!("low"in e.items[0]||"before"in e.items[0]||"values"in e.items[0]))){let{title:t,...a}=e;return a}let t={title:void 0,...void 0!==e.unit?{unit:e.unit}:{}};switch(e.type){case"bar":case"vertical-bar":case"radar":return{...t,type:"radar"===e.type?"radar":"bar",orientation:"bar"===e.type?"horizontal":"vertical",x:e.items.map(e=>e.label),series:[{name:e.title,data:e.items.map(e=>Number(String(e.value).replace(/,/g,"")))}]};case"line":case"area":case"stacked-bar":{let a=e.categories||e.series?.[0]?.data.map(e=>e.category)||(e.items?e.items.map(e=>e.label):[])||[],s=e.series?.map(e=>({name:e.name,data:a.map(t=>e.data.find(e=>e.category===t)?.value??null)}))||[{name:e.title,data:e.items?e.items.map(e=>e.value):[]}];return{...t,type:e.type,x:a,series:s}}case"pie":case"donut":case"funnel":return{...t,type:e.type,series:e.items.map(e=>({name:e.label,value:e.value}))};case"gauge":return{...t,type:"gauge",title:e.label,value:e.value,max:e.target};case"scatter":return{...t,type:"scatter",series:[{data:e.points.map(e=>[e.x,e.y])}]};case"range":case"boxplot":case"before-after":return{...t,type:e.type,items:e.items};case"sankey":case"network":return{...t,type:e.type,links:e.links.map(e=>({...e,value:e.value??1}))};case"bubble":return{...t,type:"bubble",points:e.items.map(e=>({name:e.label,value:e.value}))};case"combo":return{...t,type:"combo",x:e.categories,series:[{...e.bar,type:"bar"},{...e.line,type:"line"}]};case"heatmap":if(!e.rows.every(e=>e.slice(1).every(e=>""!==String(e).trim()&&Number.isFinite(Number(e)))))return null;return{...t,type:"heatmap",x:e.headers.slice(1),y:e.rows.map(e=>e[0]),series:e.rows.map(e=>({name:e[0],data:e.slice(1).map(Number)}))};default:return null}}let L=["hero","stats","kpi","split","segments","badges","state","columns","leaderboard","timeline","feed","table","alert","list","summary","master-detail","datafeeds","document","approval"],D=["dashboard-overview","dashboard-analysis","dashboard-compact","dashboard-executive","dashboard-comparison"],I=["pos","neg","warn","info","neutral","accent"],N=2e3,P=(e,t,a=N,r=!0)=>
33{if(null==e){r&&s(`${t} is required`);return}("string"!=typeof e||r&&!e.trim())&&s(`${t} must be non-empty text`),e.length>a&&s(`${t} exceeds ${a} characters`)},R=(e,t,a,r)=>((!Array.isArray(e)||e.length<a||e.length>r)&&s(`${t} needs ${a}-${r} entries`),e.some(e=>!e||"object"!=typeof e||Array.isArray(e))&&s(`${t} entries must be objects`),e),G=(e,t)=>{r(e)||s(`${t} must be a number`)},T=(e,t,a,r=!1)=>{if(void 0===e){r&&s(`${t} is required`);return}a.includes(e)||s(`${t} must be one of ${a.join("|")}`)},O={pos:"--pos",neg:"--neg",warn:"--warn",info:"--info",neutral:"--neutral",accent:"--accent"},W={pos:"pos",neg:"neg",warn:"warn",info:"info",neutral:"neu",accent:"accent"},_={info:"info",warning:"warn",error:"neg",success:"pos"},H=e=>"down"===e?"▼":"up"===e?"▲":"",U=(e,t)=>t?`<span class="chip-trend ${"down"===e?"down":"up"===e?"up":""}">${H(e)} ${i(t)}</span>`:"",J=e=>e?`<h2 class="ptitle">${i(e)}</h2>`:"";function K(e){if(!Array.isArray(e)||e.length<2||!e.every(r))return"";let t=Math.min(...e),a=Math.max(...e)-t||1,s=e.map((s,r)=>`${240*r/(e.length-1)},${44-(s-t)/a*40}`).join(" ");return`<svg class="sd-spark" viewBox="0 0 240 48" role="img" aria-label="Trend: ${i(e.join(", "))}"><polyline points="${s}" fill="none" stroke="var(--info)" stroke-width="2" vector-effect="non-scaling-stroke"/></svg>`}function V(e){switch(e.type){case"hero":return`<div class="hero"><div class="cap">${i(e.caption||e.title||"")}</div><div class="v num">${i(e.value)}</div>${e.delta?`<div style="margin-top:8px;font-size:12px;opacity:.9">${H(e.trend)} ${i(e.delta)}</div>`:""}</div>`;case"stats":case"kpi":return`${J(e.title)}<div class="sd-kpis">${e.items.map(e=>{let t;return`<div class="panel" style="container-type:inline-size">${t=`<div class="v num" data-fit-value style="--sd-value-width:${Math.max(1,[...String(e.value??"")].reduce((e,t)=>e+(/[.,\s]/.test(t)?.35:/[^\x00-\x7f]|[MW]/.test(t)?1.05:.68),0)).toFixed(2)}">${i(e.value)}${e.unit?`<small class="muted"> ${i(e.unit)}</small>`:""}</div><div class="l">${i(e.label)}</div>`,r(e.progress)?`<div class="ringkpi"><svg viewBox="0 0 64 64" class="sd-ring" role="img" aria-label="${i(e.label)}: ${e.progress}%"><circle cx="32" cy="32" r="26" fill="none" stroke="var(--surface-3)" stroke-width="6"/><circle cx="32" cy="32" r="26" fill="none" stroke="var(--info)" stroke-width="6" pathLength="100" stroke-dasharray="${Math.max(0,Math.min(100,e.progress))} 100" transform="rotate(-90 32 32)"/></svg><div class="meta">${t}${U(e.trend,e.delta)}</div></div>`:e.spark?`<div class="spark"><div class="top"><div>${t}</div>${U(e.trend,e.delta)}</div>${K(e.spark)}</div>`:`<div class="kpi">${t}${U(e.trend,e.delta)}</div>`}</div>`}).join("")}</div>`;case"split":return`${J(e.title)}<div class="cmp">${e.items.map(e=>`<div class="half"><div class="v num"${e.tone?` style="color:var(${O[e.tone]})"`:""}>${i(e.value)}</div><div class="l">${i(e.label)}</div></div>`).join("")}</div>`;case"segments":{let t=e.items.reduce((e,t)=>e+t.value,0)||1;return`${J(e.title)}<div class="segbar">${e.items.map((e,a)=>`<i style="width:${(e.value/t*100).toFixed(2)}%;background:var(${O[e.tone]||`--cat-${["indigo","green","coral","sky","orange","magenta","gold","acid"][a%8]}`})"></i>`).join("")}</div><div class="legend">${e.items.map((e,t)=>`<span><i class="dot" style="background:var(${O[e.tone]||`--cat-${["indigo","green","coral","sky","orange","magenta","gold","acid"][t%8]}`})"></i>${i(e.label)} <b class="num">${i(e.value)}</b></span>`).join("")}</div>`}case"badges":return`${J(e.title)}<div style="display:flex;flex-wrap:wrap;gap:8px">${e.items.map(e=>`<span class="badge ${W[e.tone]||"neu"}">${i(e.label)}</span>`).join("")}</div>`;case"state":return`<div class="state ${i(e.tone)}"><h4>${i(e.heading)}</h4>${e.tags?.length?`<div class="tags">${e.tags.map(e=>`<span>${i(e)}</span>`).join("")}</div>`:""}${e.items?.length?`<div class="nums">${e.items.map(e=>`<div><div class="n num">${i(e.value)}</div><div class="c">${i(e.caption)}</div></div>`).join("")}</div>`:""}</div>`;case"columns":{let t=Math.max(1,...e.items.map(e=>e.value));return`${J(e.title)}<div class="sd-columns">${e.items.map(e=>`<div class="sd-column"><span class="num">${i(e.value)}</span><span>${i(e.label)}</span><i style="height:${Math.max(0,e.value)/t*100}%"></i></div>`).join("")}</div>`}case"master-detail":return`${J(e.title)}<div class="sd-details">${e.items.map((e,t)=>`<details${0===t?" open":""}><summary><b>${i(e.name)}</b>${e.subtitle?`<span class="muted"> ${i(e.subtitle)}</span>`:""}</summary><dl>${e.fields.map(e=>`<div><dt>${i(e.key)}</dt><dd>${i(e.value)}</dd></div>`).join("")}</dl></details>`).join("")}</div>`;case"document":return`${J(e.title)}<div class="feeds">${e.items.map(e=>`<div class="row"><span class="fi" aria-hidden="true">▤</span><span class="fn"><b>${i(e.name)}</b>${e.meta?`<br><small class="muted">${i(e.meta)}</small>`:""}</span>${e.badge?`<span class="badge ${W[e.tone]||"neu"}">${i(e.badge)}</span>`:""}</div>`).join("")}</div>`;case"datafeeds":return V({...e,type:"summary"});case"approval":return`${J(e.title)}<div class="sd-approval"><h3>${i(e.heading)}</h3>${e.subtitle?`<p class="muted">${i(e.subtitle)}</p>`:""}${e.draft?`<blockquote>${i(e.draft)}</blockquote>`:""}${V({type:"summary",items:e.meta})}</div>`;case"leaderboard":{let t=Math.max(1,...e.items.map(e=>Math.abs(e.value)));return`${J(e.title)}<table class="lead"><tbody>${e.items.map((e,a)=>`<tr><td style="width:30px"><span class="rank">${a+1}</span></td><td>${i(e.label)}${e.note?`<br><small class="muted">${i(e.note)}</small>`:""}</td><td style="width:34%"><div class="bar"><i style="width:${(Math.abs(e.value)/t*100).toFixed(2)}%"></i></div></td><td class="r mono" style="white-space:nowrap;padding-left:12px"><b>${i(e.value)}</b></td></tr>`).join("")}</tbody></table>`}case"timeline":return`${J(e.title)}<div class="feed">${e.events.map(e=>`<div class="alert"><div class="ameta"><span class="mono">${i(e.date)}</span></div><div class="atitle">${i(e.title)}</div>${e.description?`<p class="muted" style="font-size:13px;margin-top:4px">${i(e.description)}</p>`:""}</div>`).join("")}</div>`;case"feed":return`${J(e.title)}<div class="feed">${e.items.map(e=>`<div class="alert"><div class="atitle"><i class="dot ${W[e.tone]||"neu"}"></i>${i(e.title)}</div>${e.meta||e.action?`<div class="ameta">${e.meta?`<span>${i(e.meta)}</span>`:""}${e.meta&&e.action?'<span class="sep"></span>':""}${e.action?`<span class="badge accent">${i(e.action)}</span>`:""}</div>`:""}</div>`).join("")}</div>`;case"table":if(e.ref)return`${J(e.title)}<div class="table-scroll">{{table:${i(e.ref)}}}</div>`;let t=e.headers.map((t,a)=>e.rows.length>0&&e.rows.every(e=>{let t;return""===e[a]||"number"==typeof(t=e[a]?.text??e[a])||/^[-+]?[$€£¥₩]?\s?[\d,.]+\s?[%kKmMbBtT]?$/.test(String(t).trim())})),a=e.headers.map((e,a)=>`<th${t[a]?' class="r"':""}>${i(e)}</th>`).join(""),s=e.rows.map(e=>`<tr>${e.map((e,a)=>`<td${t[a]?' class="r num"':""}>${(e=>{if(e&&"object"==typeof e){let t=e.tone?`<span class="badge ${W[e.tone]||"neu"}">${i(e.text)}</span>`:i(e.text);return`${/^https?:\/\/[^\s]+$/i.test(e.href||"")?`<a class="link" href="${i(e.href)}" target="_blank" rel="noopener noreferrer">${t}</a>`:t}${e.spark?K(e.spark):""}`}return/^https?:\/\/[^\s]+$/i.test(String(e))?`<a class="link" href="${i(e)}" target="_blank" rel="noopener noreferrer">${i(e)}</a>`:i(e)})(e)}</td>`).join("")}</tr>`).join("");return`${J(e.title)}<div class="table-scroll"><table><thead><tr>${a}
33</tr></thead><tbody>${s}</tbody></table></div>`;case"alert":return`${J(e.title)}<div style="display:flex;gap:12px;align-items:flex-start"><span class="badge ${_[e.variant]||"info"}" style="flex:none;margin-top:2px">${i(e.variant||"info")}</span><p style="font-size:14px">${i(e.message)}</p></div>`;case"list":return`${J(e.title)}<div class="feeds">${e.items.map(e=>`<div class="row"><span class="fn"><b>${i(e.title)}</b>${e.description?` <span class="muted">${i(e.description)}</span>`:""}</span>${e.badge?`<span class="badge neu">${i(e.badge)}</span>`:""}</div>`).join("")}</div>`;case"summary":return`${J(e.title)}<div class="feeds">${e.items.map(e=>`<div class="row"><span class="fn">${i(e.label)}${e.description?`<br><small class="muted">${i(e.description)}</small>`:""}</span><span class="fv">${i(e.value)}</span></div>`).join("")}</div>`;default:return""}}let Y=new Set(["hero","state","stats","kpi"]);e.s(["buildDashboardOption",0,function(e,t=p()){let a=u(e),s=a.type,d=a.series||[],m=a.unit?` ${a.unit}`:"",h=e=>({pos:t.pos,neg:t.neg,warn:t.warn,info:t.info,neutral:t.neutral,accent:t.accent})[e],g={color:t.inkMuted,fontFamily:o,fontSize:10},f=e=>({type:e?"category":"value",...e?{data:e}:{},axisLabel:{...e?{...g,fontFamily:n,fontSize:11}:g,hideOverlap:!0},axisLine:{show:!!e,lineStyle:{color:t.grid}},axisTick:{show:!1},splitLine:{show:!e,lineStyle:{color:t.grid,type:"dashed"}}}),b={color:t.palette,backgroundColor:"transparent",animation:!1,textStyle:{fontFamily:n,color:t.ink},title:a.title?{text:String(a.title),left:0,top:0,textStyle:{fontSize:13,fontWeight:600,color:t.inkMuted}}:void 0,tooltip:{...t.tooltip,trigger:"item",valueFormatter:e=>`${e??"—"}${m}`,confine:!0},legend:{show:d.length>1,bottom:0,icon:"circle",itemWidth:9,itemHeight:9,textStyle:g},grid:{left:8,right:16,top:a.title?42:18,bottom:d.length>1?32:8,containLabel:!0}};if(["line","area","sparkline","combo","bar","stacked-bar"].includes(s)){let e="horizontal"===a.orientation,r="sparkline"===s;b.xAxis=f(e?void 0:a.x),b.yAxis=f(e?a.x:void 0),b.tooltip.trigger="axis";let i=e?"right":"up",n=a.unit&&a.unit.length<=3?a.unit:"";e&&(b.yAxis.inverse=!0,b.yAxis.axisLabel.width=120,b.yAxis.axisLabel.overflow="truncate"),b.series=d.map((p,u)=>{let g=["bar","stacked-bar"].includes(s)||"combo"===s&&"bar"===p.type,f=h(p.tone)||(1===d.length?t.accent:t.palette[u%8]),v=p.data.map((e,s)=>g&&void 0!==a.highlight?{value:e,itemStyle:{color:s===a.highlight?f:t.surface3}}:e),y=g&&1===d.length&&"stacked-bar"!==s&&!h(p.tone)&&void 0===a.highlight&&"ramp"!==a.variant;return y&&p.data.length<=12&&!r&&((e?b.xAxis:b.yAxis).boundaryGap=[0,e?"18%":"15%"]),{name:p.name,type:g?"bar":"line",data:v,stack:"stacked-bar"===s?"total":void 0,barMaxWidth:48,showSymbol:1===p.data.length,symbolSize:7,connectNulls:!1,label:y&&p.data.length<=12&&!r?{show:!0,position:e?"right":"top",fontFamily:o,fontSize:11,color:t.ink,formatter:e=>`${e.value}${n}`}:void 0,lineStyle:{width:2.4,color:f},itemStyle:{color:g&&"ramp"===a.variant?c(t.info,t.pos,i):y?c(t.accentA,t.accentB,i):f,borderRadius:g?e?[0,5,5,0]:[5,5,0,0]:void 0},areaStyle:["area","sparkline"].includes(s)?{color:c(l(f,.28),l(f,0))}:void 0,markPoint:a.peak&&!g?{data:[{type:"max"}],symbol:"circle",symbolSize:8,label:{show:!0,position:"top",color:"#FFFFFF",backgroundColor:"#23272B",borderRadius:6,padding:[5,8],formatter:e=>`${e.value}${m}`}}:void 0}}),r&&(b.xAxis.show=!1,b.yAxis.show=!1,b.grid={left:0,right:0,top:4,bottom:4},b.legend.show=!1,b.title=void 0)}else if(["pie","donut","funnel"].includes(s)){let e=d.reduce((e,t)=>e+t.value,0);if(b.series=[{type:"funnel"===s?"funnel":"pie",radius:"donut"===s?["58%","82%"]:"75%",center:["50%","48%"],top:a.title?40:10,bottom:40,sort:"none",gap:4,data:d.map((e,a)=>({name:e.name,value:e.value,itemStyle:{color:h(e.tone)||t.palette[a%8]}})),itemStyle:{borderWidth:2,borderColor:t.surface,borderRadius:4},label:{show:"donut"!==s,color:t.inkMuted,formatter:"{b}: {c}"}}],b.legend.show=!0,"donut"===s){let s=d.reduce((e,t)=>t.value>e.value?t:e),r="%"===a.unit;b.graphic=[{type:"text",left:"center",top:a.title?"40%":"36%",style:{text:r?`${s.value}%`:String(e),fill:t.ink,fontSize:28,fontWeight:800,fontFamily:o}},{type:"text",left:"center",top:a.title?"53%":"49%",style:{text:r?s.name:"total",fill:t.inkMuted,fontSize:12,fontFamily:n}}]}}else if(["ring","concentric","gauge"].includes(s)){let e="concentric"===s?d:[{name:a.title,value:a.value,max:a.max}];b.title=void 0,b.legend.show=!1,b.series=e.map((a,r)=>
33({type:"gauge",min:0,max:a.max??100,radius:`${Math.max(15,88-r*(65/e.length))}%`,startAngle:"gauge"===s?180:90,endAngle:"gauge"===s?0:-270,axisLine:{roundCap:!0,lineStyle:{width:"gauge"===s?16:8,color:"gauge"===s?[[.33,t.pos],[.66,t.warn],[1,t.neg]]:[[1,t.surface3]]}},progress:{show:"gauge"!==s,roundCap:!0,width:8,itemStyle:{color:h(a.tone)||(1===e.length?t.accent:t.palette[r%8])}},pointer:{show:"gauge"===s,length:"65%",width:4,itemStyle:{color:t.ink}},axisTick:{show:!1},splitLine:{show:!1},axisLabel:{show:!1},detail:{show:1===e.length,color:t.ink,fontSize:24,offsetCenter:[0,"gauge"===s?"30%":"0%"],formatter:`{value}${m}`},title:{show:1===e.length,color:t.inkMuted,fontSize:12,offsetCenter:[0,"60%"]},data:[{value:a.value,name:a.name}]}))}else if("heatmap"===s){let e=d.flatMap(e=>e.data).filter(r);b.xAxis=f(a.x),b.yAxis=f(a.y||d.map(e=>e.name)),b.legend.show=!1,b.grid.bottom=46,b.visualMap={min:Math.min(0,...e),max:Math.max(1,...e),orient:"horizontal",left:"center",bottom:0,inRange:{color:t.seq},textStyle:g},b.series=[{type:"heatmap",data:d.flatMap((e,t)=>e.data.flatMap((e,a)=>null===e?[]:[[a,t,e]])),itemStyle:{borderColor:t.surface,borderWidth:2,borderRadius:3},label:{show:!1}}]}else if("scatter"===s)b.xAxis=f(),b.yAxis=f(),b.series=d.map(e=>({...e,type:"scatter",symbolSize:10,itemStyle:{opacity:.85,borderColor:t.surface,borderWidth:1}}));else if("radar"===s)b.radar={indicator:a.x.map((e,t)=>({name:e,min:Math.min(0,...d.map(e=>e.data[t]??0)),max:1.2*Math.max(1,...d.map(e=>e.data[t]??0))})),axisName:g,splitLine:{lineStyle:{color:t.grid}},splitArea:{show:!1}},b.series=[{type:"radar",data:d.map(e=>({name:e.name,value:e.data})),areaStyle:{opacity:.12}}];else if(["range","before-after","boxplot"].includes(s))b.xAxis=f(a.items.map(e=>e.label)),b.yAxis=f(),b.tooltip.trigger="axis","range"===s?(b.series=[{type:"custom",encode:{x:0,y:[1,2]},data:a.items.map((e,t)=>[t,e.low,e.high]),renderItem:(e,a)=>{let s=a.coord([a.value(0),a.value(1)]),r=a.coord([a.value(0),a.value(2)]);return{type:"rect",shape:{x:s[0]-12,y:r[1],width:24,height:Math.max(1,s[1]-r[1]),r:5},style:{fill:t.accent}}}}],b.tooltip.formatter=e=>{let t=a.items[e[0]?.dataIndex??0];return`${i(t.label)}: ${t.low} – ${t.high}${i(m)}`}):"before-after"===s?(b.series=["before","after"].map((e,s)=>({name:e,type:"bar",data:a.items.map(t=>t[e]),barMaxWidth:28,itemStyle:{color:s?t.accent:t.info,borderRadius:[4,4,0,0]}})),b.legend.show=!0,b.grid.bottom=32):b.series=[{type:"boxplot",data:a.items.map(e=>{let t=[...e.values].sort((e,t)=>e-t),a=e=>{let a=(t.length-1)*e,s=Math.floor(a);return t[s]+(t[Math.ceil(a)]-t[s])*(a-s)};return[t[0],a(.25),a(.5),a(.75),t.at(-1)]}),itemStyle:{color:l(t.accent,.15),borderColor:t.accent}}];else if(["network","sankey"].includes(s))b.series=[{type:"network"===s?"graph":"sankey",layout:"circular",data:(a.nodes||[...new Set(a.links.flatMap(e=>[e.source,e.target]))].map(e=>({name:e}))).map((e,a)=>({name:e.name,itemStyle:{color:t.palette[a%8]}})),links:a.links,roam:!1,symbolSize:26,nodeWidth:14,nodeGap:18,label:{show:!0,color:t.ink,fontSize:11},lineStyle:{color:"sankey"===s?"gradient":t.info,opacity:.4,curveness:.3},emphasis:{focus:"adjacency"}}];else if("bubble"===s){let e=Math.max(1,...a.points.map(e=>e.value));b.xAxis={...f(),show:!1,min:-1,max:Math.max(1,a.points.length)},b.yAxis={...f(),show:!1,min:-1,max:1},b.series=[{type:"scatter",data:a.points.map((e,s)=>({name:e.name,value:[s,0,e.value],itemStyle:{color:"volume"===a.variant?"transparent":{type:"radial",x:.35,y:.3,r:.8,colorStops:[{offset:0,color:"#FFE03D"},{offset:.6,color:"#3DCB5B"},{offset:1,color:"#FF7A3D"}]},borderColor:t.ink,borderWidth:1}})),symbolSize:t=>94*Math.sqrt(t[2]/e),label:{show:!0,position:"bottom",color:t.ink,formatter:e=>`${e.name}
34${e.value[2]}`}}],b.tooltip.formatter=e=>`${i(e.name)}: ${e.value[2]}${i(m)}`}else"geo"===s&&(b.geo={map:"session-dashboard-world",roam:!1,itemStyle:{areaColor:t.surface3,borderColor:t.grid},emphasis:{disabled:!0}},b.series=[{type:"scatter",coordinateSystem:"geo",data:a.points.map(e=>({name:e.name,value:[e.lng,e.lat,e.value],itemStyle:{color:h(e.tone)||t.info}})),symbolSize:12}],b.tooltip.formatter=e=>`${i(e.name)}: ${e.value[2]}${i(m)}`);return b},"chartRows",0,function(e){return e.items?e.items.map(t=>[t.label,...t.values||("range"===e.type?[t.low,t.high]:[t.before,t.after])]):e.links?e.links.map(e=>[e.source,e.target,e.value]):e.points?e.points.map(t=>[t.name,..."geo"===e.type?[t.lng,t.lat]:[],t.value]):void 0!==e.value?[[e.title||"Value",e.value,e.max??100]]:(e.series||[]).flatMap(t=>void 0!==t.value?[[t.name,t.value,...void 0!==t.max?[t.max]:[]]]:(t.data||[]).map((a,s)=>[t.name,e.x?.[s]??s,...Array.isArray(a)?a:[a]]))},"chartSpecFor",0,B,"dashboardTheme",0,p,"gridColsFor",0,e=>e>=1e3?12:e>=620?6:1,"layoutGrid",0,z,"panelCardHtml",0,function(e){if(!(e&&L.includes(e.type)))return null;let t=V(e);return t?{html:t,bare:Y.has(e.type)}:null},"panelRole",0,$,"renderBoardHtml",0,function(e){let l,n,o=((!e||"object"!=typeof e||Array.isArray(e))&&s("Dashboard model must be an object"),1!==e.version&&s("version must be 1"),"dashboard"!==e.family&&s('family must be "dashboard"'),T(e.templateId,"templateId",D,!0),P(e.title,"title",120),P(e.subtitle,"subtitle",160,!1),T(e.canvas,"canvas",["light","dark"]),T(e.theme,"theme",Object.keys(t)),JSON.stringify(e).length>4e5&&s("Dashboard model exceeds 400 KB"),(l=R(e.panels,"panels",2,12)).forEac
34h((e,t)=>{let i=`panels[${t}]`;if("string"!=typeof e.type&&s(`${i}.type is required`),P(e.title,`${i}.title`,160,!1),!function e(t,a,s=""){if("string"==typeof t)a(t,s);else if(Array.isArray(t))t.forEach((t,r)=>e(t,a,`${s}[${r}]`));else if(t&&"object"==typeof t)for(let[r,i]of Object.entries(t))e(i,a,s?`${s}.${r}`:r)}(e,(e,t)=>{e.length>N&&s(`${i}.${t} exceeds ${N} characters`)}),a.includes(e.type)){if(JSON.stringify(e).includes("{{")&&s(`${i} (${e.type}): charts take bound data through "ref", never {{…}} placeholders`),void 0!==e.ref){P(e.ref,`${i}.ref`,80),["x","y","series","items","value","points","links","nodes"].some(t=>void 0!==e[t])&&s(`${i}: bound charts must not override their dataset`);return}try{u(B(e))}catch(t){s(`${i} (${e.type}): ${t.message}`)}return}var l=`${i} (${e.type})`;for(let t of e.items||[])void 0!==t.spark&&(!Array.isArray(t.spark)||t.spark.length<2||t.spark.length>100||!t.spark.every(r))&&s(`${l}: spark needs 2-100 finite observations`),void 0!==t.progress&&(!r(t.progress)||t.progress<0||t.progress>100)&&s(`${l}: progress must be between 0 and 100`);switch(e.type){case"hero":P(e.value,`${l}.value`,40),P(e.caption,`${l}.caption`,200,!1),P(e.delta,`${l}.delta`,80,!1),T(e.trend,`${l}.trend`,["up","down","flat"]);break;case"stats":case"kpi":for(let[t,a]of R(e.items,`${l}.items`,1,12).entries())P(a.label,`${l}.items[${t}].label`,80),P(a.value,`${l}.items[${t}].value`,40),P(a.delta,`${l}.items[${t}].delta`,80,!1),T(a.trend,`${l}.items[${t}].trend`,["up","down","flat"]);break;case"split":for(let[t,a]of R(e.items,`${l}.items`,2,4).entries())P(a.label,`${l}.items[${t}].label`,80),P(a.value,`${l}.items[${t}].value`,40),T(a.tone,`${l}.items[${t}].tone`,I);break;case"segments":for(let[t,a]of R(e.items,`${l}.items`,1,8).entries())P(a.label,`${l}.items[${t}].label`,80),G(a.value,`${l}.items[${t}].value`),a.value<0&&s(`${l}.items[${t}].value must be non-negative`),T(a.tone,`${l}.items[${t}].tone`,I);break;case"badges":for(let[t,a]of R(e.items,`${l}.items`,1,20).entries())P(a.label,`${l}.items[${t}].label`,80),T(a.tone,`${l}.items[${t}].tone`,I);break;case"state":for(let[t,a]of(T(e.tone,`${l}.tone`,["gold","coral","green"],!0),P(e.heading,`${l}.heading`,120),void 0!==e.tags&&((!Array.isArray(e.tags)||e.tags.length>6)&&s(`${l}.tags needs 0-6 entries`),e.tags.forEach((e,t)=>P(e,`${l}.tags[${t}]`,40))),R(e.items||[],`${l}.items`,0,4).entries()))P(a.value,`${l}.items[${t}].value`,40),P(a.caption,`${l}.items[${t}].caption`,80);break;case"columns":case"leaderboard":for(let[t,a]of R(e.items,`${l}.items`,1,20).entries())P(a.label,`${l}.items[${t}].label`,120),G(a.value,`${l}.items[${t}].value`),"columns"===e.type&&a.value<0&&s(`${l}: column-card values must be non-negative`),P(a.note,`${l}.items[${t}].note`,200,!1);break;case"timeline":for(let[t,a]of R(e.events,`${l}.events`,1,20).entries())P(a.date,`${l}.events[${t}].date`,40),P(a.title,`${l}.events[${t}].title`,160),P(a.description,`${l}.events[${t}].description`,600,!1);break;case"feed":for(let[t,a]of R(e.items,`${l}.items`,1,20).entries())P(a.title,`${l}.items[${t}].title`,200),P(a.meta,`${l}.items[${t}].meta`,200,!1),P(a.action,`${l}.items[${t}].action`,120,!1),T(a.tone,`${l}.items[${t}].tone`,I);break;case"table":if(void 0!==e.ref){P(e.ref,`${l}.ref`,80),(void 0!==e.rows||void 0!==e.headers)&&s(`${l} is bound to data["${e.ref}"]; omit headers and rows`);break}(!Array.isArray(e.headers)||e.headers.length<1||e.headers.length>12)&&s(`${l}.headers needs 1-12 columns`),e.headers.forEach((e,t)=>P(e,`${l}.headers[${t}]`,80)),(!Array.isArray(e.rows)||e.rows.length<1||e.rows.length>50)&&s(`${l}.rows needs 1-50 rows`),e.rows.forEach((t,a)=>{Array.isArray(t)&&t.length===e.headers.length||s(`${l}.rows[${a}] must have ${e.headers.length} cells`),t.forEach((e,t)=>{if("string"==typeof e||r(e))return;let i=`${l}.rows[${a}][${t}]`;(!e||"object"!=typeof e||Array.isArray(e))&&s(`${i} must be text, a number or a formatted cell`),P(e.text,`${i}.text`,600),T(e.tone,`${i}.tone`,I),void 0===e.href||"string"==typeof e.href&&/^https?:\/\/[^\s]+$/i.test(e.href)||s(`${i}
34.href requires an HTTP(S) URL`),void 0!==e.spark&&(!Array.isArray(e.spark)||e.spark.length<2||e.spark.length>100||!e.spark.every(r))&&s(`${i}.spark needs 2-100 observations`)})});break;case"alert":P(e.message,`${l}.message`),T(e.variant,`${l}.variant`,["info","warning","error","success"]);break;case"list":for(let[t,a]of R(e.items,`${l}.items`,1,20).entries())P(a.title,`${l}.items[${t}].title`,200),P(a.description,`${l}.items[${t}].description`,600,!1),P(a.badge,`${l}.items[${t}].badge`,40,!1);break;case"summary":for(let[t,a]of R(e.items,`${l}.items`,1,12).entries())P(a.label,`${l}.items[${t}].label`,80),P(a.value,`${l}.items[${t}].value`,80),P(a.description,`${l}.items[${t}].description`,400,!1);break;case"datafeeds":for(let t of R(e.items,`${l}.items`,1,20))P(t.label,`${l}.label`,120),P(t.value,`${l}.value`,80);break;case"document":for(let t of R(e.items,`${l}.items`,1,20))P(t.name,`${l}.name`,160),P(t.meta,`${l}.meta`,200,!1),P(t.badge,`${l}.badge`,40,!1),T(t.tone,`${l}.tone`,I);break;case"master-detail":for(let t of R(e.items,`${l}.items`,1,20))for(let e of(P(t.name,`${l}.name`,160),P(t.subtitle,`${l}.subtitle`,200,!1),R(t.fields,`${l}.fields`,1,20)))P(e.key,`${l}.key`,80),P(e.value,`${l}.value`,600);break;case"approval":for(let t of(P(e.heading,`${l}.heading`,160),P(e.subtitle,`${l}.subtitle`,200,!1),P(e.draft,`${l}.draft`,N,!1),R(e.meta,`${l}.meta`,0,12)))P(t.label,`${l}.label`,80),P(t.value,`${l}.value`,200);break;default:s(`${l}.type "${e.type}" is not supported; use one of ${L.join("|")} or a chart type ${a.join("|")}`)}}),l.filter(e=>"hero"===e.type).length>1&&s("At most one hero panel"),e),d="dashboard-executive"===(n=o.templateId)?"executive":"dashboard-comparison"===n?"comparison":x,c=z(o.panels,d,12,!0),p=new Map(z(o.panels,d,6,!0).map(e=>[e.panel,e.gw])),m=c.map(e=>{let t=e.panel,s=a.includes(t.type)?`${J(t.title)}${t.unit?`<p class="sd-chart-unit">${i(t.unit)}</p>`:""}<div data-chart='${JSON.stringify(B(t)).replace(/'/g,"&#39;")}' style="height:300px"></div>`:V(t),r=Y.has(t.type)?"board-bare":"panel";return`<section class="${r}" data-gw="${e.gw}" data-gw6="${p.get(t)??Math.min(6,Math.ceil(e.gw/2))}">${s}</section>`}).join("\n");return`<!doctype html>
35<html lang="en">
36<head>
37<meta charset="utf-8">
38<meta name="viewport" content="width=device-width,initial-scale=1">
39<title>${i(o.title)}</title>
40<meta name="palette-dashboard" content="${i(o.templateId)}">
41</head>
42<body class="session-dashboard" data-session-dashboard="nocturne-v1" data-canvas="${i(o.canvas||"light")}" data-theme="${i(o.theme||"signal")}">
43<main>
44<header class="dhead">${o.subtitle?`<div class="eyebrow">${i(o.subtitle)}</div>`:""}<h1>${i(o.title)}</h1></header>
45<div class="board">
46${m}
47</div>
48</main>
49</body>
50</html>
51`},"sessionGridColsFor",0,e=>e>=1e3?12:e>=660?6:1,"validateDashboardChart",0,u])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.