@next-bricks/ai-portal 0.54.0 → 0.55.0
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.
- package/dist/bricks.json +36 -35
- package/dist/chunks/1864.4bd403fd.js +2 -0
- package/dist/chunks/1864.4bd403fd.js.map +1 -0
- package/dist/chunks/2761.561a580a.js +2 -0
- package/dist/chunks/2761.561a580a.js.map +1 -0
- package/dist/chunks/3227.689d8678.js +2 -0
- package/dist/chunks/3227.689d8678.js.map +1 -0
- package/dist/chunks/4888.42dd29a2.js +3 -0
- package/dist/chunks/4888.42dd29a2.js.map +1 -0
- package/dist/chunks/{6201.610c66e3.js → 6201.fa3b6e24.js} +2 -2
- package/dist/chunks/6201.fa3b6e24.js.map +1 -0
- package/dist/chunks/{6593.1afe9a04.js → 6593.58eda50f.js} +2 -2
- package/dist/chunks/6593.58eda50f.js.map +1 -0
- package/dist/chunks/7279.af201b60.js +3 -0
- package/dist/chunks/{6947.1cec7258.js.LICENSE.txt → 7279.af201b60.js.LICENSE.txt} +0 -6
- package/dist/chunks/7279.af201b60.js.map +1 -0
- package/dist/chunks/9388.e48bb229.js +2 -0
- package/dist/chunks/9388.e48bb229.js.map +1 -0
- package/dist/chunks/chat-box.8e064684.js +2 -0
- package/dist/chunks/chat-box.8e064684.js.map +1 -0
- package/dist/chunks/chat-input.dd3d2035.js +2 -0
- package/dist/chunks/chat-input.dd3d2035.js.map +1 -0
- package/dist/chunks/{cruise-canvas.60fa24a3.js → cruise-canvas.c494563b.js} +2 -2
- package/dist/chunks/{cruise-canvas.60fa24a3.js.map → cruise-canvas.c494563b.js.map} +1 -1
- package/dist/chunks/elevo-card.49b42ed0.js +3 -0
- package/dist/chunks/elevo-card.49b42ed0.js.map +1 -0
- package/dist/chunks/flow-tabs.ce40cc92.js +2 -0
- package/dist/chunks/flow-tabs.ce40cc92.js.map +1 -0
- package/dist/chunks/main.6b7402db.js +2 -0
- package/dist/chunks/main.6b7402db.js.map +1 -0
- package/dist/chunks/stage-flow.4c7ea7d9.js +2 -0
- package/dist/chunks/stage-flow.4c7ea7d9.js.map +1 -0
- package/dist/examples.json +16 -16
- package/dist/images/0e7e6764.png +0 -0
- package/dist/images/7944ebaf.png +0 -0
- package/dist/images/c7ec12fe.png +0 -0
- package/dist/index.14c08956.js +2 -0
- package/dist/index.14c08956.js.map +1 -0
- package/dist/manifest.json +300 -286
- package/dist/types.json +640 -601
- package/dist-types/chat-box/FileListComponent.d.ts +8 -0
- package/dist-types/chat-box/UploadButton.d.ts +9 -0
- package/dist-types/chat-box/bricks.d.ts +8 -0
- package/dist-types/chat-box/index.d.ts +3 -0
- package/dist-types/chat-box/interfaces.d.ts +8 -0
- package/dist-types/stage-flow/index.d.ts +2 -0
- package/package.json +2 -2
- package/dist/chunks/1334.aae33a33.js +0 -2
- package/dist/chunks/1334.aae33a33.js.map +0 -1
- package/dist/chunks/2142.0599aecd.js +0 -2
- package/dist/chunks/2142.0599aecd.js.map +0 -1
- package/dist/chunks/3020.acf9607e.js +0 -2
- package/dist/chunks/3020.acf9607e.js.map +0 -1
- package/dist/chunks/6201.610c66e3.js.map +0 -1
- package/dist/chunks/6593.1afe9a04.js.map +0 -1
- package/dist/chunks/6947.1cec7258.js +0 -3
- package/dist/chunks/6947.1cec7258.js.map +0 -1
- package/dist/chunks/7713.278cfb8b.js +0 -2
- package/dist/chunks/7713.278cfb8b.js.map +0 -1
- package/dist/chunks/chat-box.279647b5.js +0 -2
- package/dist/chunks/chat-box.279647b5.js.map +0 -1
- package/dist/chunks/chat-input.b09e4ba0.js +0 -3
- package/dist/chunks/chat-input.b09e4ba0.js.map +0 -1
- package/dist/chunks/elevo-card.731505e0.js +0 -3
- package/dist/chunks/elevo-card.731505e0.js.map +0 -1
- package/dist/chunks/flow-tabs.222a11ea.js +0 -3
- package/dist/chunks/flow-tabs.222a11ea.js.LICENSE.txt +0 -5
- package/dist/chunks/flow-tabs.222a11ea.js.map +0 -1
- package/dist/chunks/main.72d51c8f.js +0 -2
- package/dist/chunks/main.72d51c8f.js.map +0 -1
- package/dist/chunks/stage-flow.1ece0479.js +0 -2
- package/dist/chunks/stage-flow.1ece0479.js.map +0 -1
- package/dist/index.6e1371ec.js +0 -2
- package/dist/index.6e1371ec.js.map +0 -1
- /package/dist/chunks/{chat-input.b09e4ba0.js.LICENSE.txt → 4888.42dd29a2.js.LICENSE.txt} +0 -0
- /package/dist/chunks/{elevo-card.731505e0.js.LICENSE.txt → elevo-card.49b42ed0.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[6593],{23241:(e,t,r)=>{function n(e){const t=document.createElement("div");return t.dataset.rootId=e,t.style.position="absolute",t.style.width=t.style.height="0",document.body.append(t),t}r.d(t,{d:()=>n})},43100:(e,t,r)=>{r.d(t,{f:()=>o});var n=r(47695);let a,i;function o(){return a||(a=(async()=>{const e=(0,n.LV)((i||(i=new Worker(new URL(r.p+r.u(1334),r.b))),i));return await new e})()),a}},71568:(e,t,r)=>{r.d(t,{z:()=>P}),r(58135);const n="next-tsx",a=/^<%=?\s/,i=/\s%>$/;function o(e){return!e.reference||"imported"===e.reference.type&&e.reference.importSource===n}var s=r(77019);function l(e){const{name:t,http:r,api:n,params:a,tool:i,transform:o,rejectTransform:l,config:c,scope:p}=e,u=c&&Object.prototype.hasOwnProperty.call(c,"enabled");return{name:t,resolve:{...r?{useProvider:"basic.http-request",args:[n,a]}:i?{useProvider:"ai-portal.call-tool",args:[i,a]}:{useProvider:`${n}:*`,params:a,..."easyops.api.data_exchange.olap@Query"===n&&(0,s.isObject)(a)?{params:{...a,translate:["#showKey"],limit:void 0,limitBy:void 0,order:void 0,displayName:!0}}:null},...o?{transform:{value:o}}:null,...l?{onReject:{transform:{value:l}}}:null,...u?{if:c.enabled}:null},track:!0,...u?{value:c.fallback}:null,..."template"===p?{expose:!1}:null}}function c(e,t){if(!e)return;const r=(Array.isArray(e)?e:[e]).map((e=>function(e,t){var r;switch(null==e?void 0:e.action){case"update_variable":return{action:"template"===e.payload.scope?"state.update":"context.replace",args:[e.payload.name,e.payload.value]};case"refresh_data_source":return{action:"template"===e.payload.scope?"state.refresh":"context.refresh",args:[e.payload.name]};case"call_api":{var n;const{api:r,http:a,tool:i,params:o}=e.payload,s=null!==(n=e.callback)&&void 0!==n&&n.success?c(e.callback.success,t):void 0;return{...a?{useProvider:"basic.http-request",args:[r,o]}:i?{useProvider:"ai-portal.call-tool",args:[i,o]}:{useProvider:`${r}:*`,params:o},callback:{...s&&{success:s},error:{action:"handleHttpError"}}}}case"call_ref":return{..."template"===e.payload.scope?{targetRef:e.payload.ref}:{target:`[data-root-id="${t.rootId}"] [data-ref="${e.payload.ref}"]`},method:e.payload.method,args:e.payload.args};case"update_query":return{action:"replace"===e.payload.method?"history.replaceQuery":"history.pushQuery",args:e.payload.args};case"show_message":return{action:`message.${e.payload.type}`,args:[e.payload.content]};case"dispatch_event":return{action:"tpl.dispatchEvent",args:[e.payload.type,{detail:e.payload.detail}]};case"conditional":return{if:e.payload.test,then:null!==(r=c(e.payload.consequent,t))&&void 0!==r?r:[],else:c(e.payload.alternate,t)}}}(e,t))).filter(Boolean);return r.length>0?r:void 0}var p=r(69655);const u=/^<%=?\s/,d=/\s%>$/;function m(e){if("string"!=typeof e)return{isString:!1};let t;const r=e.trim();var n;return n=r,u.test(n)&&d.test(n)?t=r.replace(u,"").replace(d,"").trim():(console.warn("Invalid expression:",JSON.stringify(e)),t="null"),{isString:!0,embedded:e,expression:t,usedContexts:(0,p.strictCollectMemberUsage)(e,"CTX")}}var f=r(71321);function h(e,t){return null!=t&&t.size?Array.isArray(e)?e.map((e=>h(e,t))):"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).map((e=>{let[r,n]=e;return[r,h(n,t)]}))):"string"==typeof e&&function(e){if("string"!=typeof e)return!1;const t=e.trim();return a.test(t)&&i.test(t)}(e)?function(e,t){if(null==t||!t.size)return e;if([...t.keys()].some((t=>e.includes(t)))){const r=[];let n;try{n=(0,f.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(t.has(e.name)){var a;const t=null===(a=n[n.length-1])||void 0===a?void 0:a.node;let i;t&&"Property"===t.type&&!t.computed&&t.shorthand&&(i=!0),r.push({id:e,shorthand:i})}}}})}catch(e){console.error("Parse expression failed:",e)}if(r.length>0&&n){const{prefix:e,source:a,suffix:i}=n,o=[];let s=0;for(let e=0;e<r.length;e++){const{id:n,shorthand:i}=r[e],{name:l,start:c,end:p}=n;o.push(a.substring(s,c),`${i?`${l}: `:""}${t.get(l)}`),s=p}return o.push(a.substring(s)),`${e}${o.join("")}${i}`}}return e}(e,t):e:e}const g=["cellData","rowData"],b=["#336EF4","#45CAFF","#41CDCF","#8146F3","#F8A075","#94E65E","#57689C","#C285EF","#FAC60B","#E4551F","#8984FF","#2540FF","#08BF33","#F7811C","#AC7CFF","#1BA5DC","#E89716","#76A6F5","#4F69FF"];function y(e,t){const r=e.slice(1),n=parseInt(r,16);return`rgba(${n>>16&255}, ${n>>8&255}, ${255&n}, ${t})`}let v=0;const x=new Map;function k(e,t){return`${function(e){return x.has(e)||x.set(e,"isolated-tpl-"+v++),x.get(e)}(t)}${_(e)}`}function w(e){return`tpl-${_(e)}`}function _(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}async function F(e,t,r,n,a){var i;let s=null;if(o(e))switch(e.reference?e.reference.name:e.name){case"List":s=await function(e){let{properties:t}=e;const r=t,{dataSource:n,fields:a,variant:i}=r,o=m(n);return{brick:"eo-list",properties:{variant:i,dataSource:o.isString?o.embedded:n,fields:a,themeVariant:"elevo"}}}(e);break;case"Table":s=await async function(e,t,r,n,a){var i;const{properties:o}=e,{dataSource:s,size:l,columns:c,rowKey:p,pagination:u,...d}=o,f=m(s),b=new Map,y=Array.isArray(c)?await Promise.all(c.map((async e=>{let{render:i,...o}=e;if(i){const e=new Map;for(let t=0;t<i.params.length&&t<g.length;t++)e.set(i.params[t],`DATA.${g[t]}`);const s=(await Promise.all(i.children.map((e=>F(e,t,r,n,a))))).flatMap((t=>h(t,e)));return{...o,useBrick:s.map((e=>e.brick.startsWith(":")?{brick:"div",children:[e]}:e))}}return"string"==typeof o.dataIndex&&b.has(o.dataIndex)?{...o,useChildren:`[${o.dataIndex}]`}:o}))):c;return{brick:"eo-next-table",properties:{dataSource:f.isString?f.embedded:s,...d,rowKey:null!=p?p:Array.isArray(c)?null===(i=c[0])||void 0===i?void 0:i.key:void 0,columns:y,themeVariant:"elevo",scrollConfig:{x:"max-content"},...n.expanded?{bordered:!0,pagination:u,size:"large"}:{size:"middle",pagination:!1}},children:b.size>0?Array.from(b.values()):[]}}(e,t,r,n,a);break;case"Descriptions":s=await async function(e,t,r,n,a){let{properties:i}=e;const{dataSource:o,title:s,list:l,columns:c,...p}=i,u=m(o),d=new Map,f=Array.isArray(l)?await Promise.all(l.map((async e=>{let{render:i,...o}=e;if(i){const e=new Map;i.params.length>0&&e.set(i.params[0],"DATA");const s=(await Promise.all(i.children.map((e=>F(e,t,r,n,a))))).flatMap((t=>h(t,e)));return{label:o.label,useBrick:s}}return(o.field?d.get(o.field):void 0)?{label:o.label,useChildren:`[${o.field}]`}:o}))):l;return{brick:"eo-descriptions",properties:{...p,dataSource:u.isString?u.embedded:o,list:f,...null==c?{column:n.expanded?3:1,templateColumns:"repeat(auto-fill,minmax(360px,1fr))"}:{column:c},themeVariant:"elevo"},children:d.size>0?Array.from(d.values()):[]}}(e,t,r,n,a);break;case"Card":s=await function(e){const{properties:t}=e,{title:r,textContent:n}=t;return{brick:"eo-card",properties:{themeVariant:"elevo",cardTitle:r,background:"#fff",outline:"background",...n?{textContent:n}:null}}}(e);break;case"Dashboard":s=await async function(e,t,r,n){let{properties:a}=e;const{dataSource:i,groupField:o,widgets:s}=a;r.usedHelpers.add("_helper_getLatestMetricValue"),r.usedHelpers.add("_helper_extractList"),r.usedHelpers.add("_helper_groupMetricData"),r.usedHelpers.add("_helper_getMetricDisplayNames");const l=o?"#showKey":void 0,{isString:c,expression:p}=m(i),u=c?`<%= FN._helper_extractList((${p})) %>`:i;if(n.expanded){let e=s;const t=[];if(t.length>0){e=[];const r=new Set,n=new Set(s.map((e=>e.metric.id)));for(const a of s){if(r.has(a.metric.id))continue;const i={...a};e.push(i);const o=t.find((e=>e.metrics.includes(a.metric.id)));if(o){const e=o.metrics.filter((e=>n.has(e)));if(e.length>1){i.relevantMetrics=e,i.counterMetric=o.counter,i.groupTitle=o.group;for(const t of e)r.add(t),n.delete(t)}}}}let r=0;return{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(500px, 1fr))",gap:"16px"},dataset:{component:"dashboard"}},children:e.map((e=>{var t,n;const{title:a,metric:i,size:o,precision:s}=e,c=null!==(t=null===(n=e.relevantMetrics)||void 0===n?void 0:n.length)&&void 0!==t?t:l?2:1,d=Array.from({length:c},((e,t)=>b[(r+t)%b.length]));r+=c;const m="load"===i.unit?"":i.unit,f={brick:"chart-v2.time-series-chart",properties:{data:u,xField:"time",...e.relevantMetrics?{yFields:`<% FN._helper_getMetricDisplayNames((${p}).displayNameList, ${JSON.stringify(e.relevantMetrics)}) %>`}:{yField:`<% FN._helper_getMetricDisplayNames((${p}).displayNameList, [${JSON.stringify(i.id)}])[0] %>`},...e.counterMetric?{forceAbsoluteNumbers:!0,series:{[e.counterMetric]:{isNegative:!0}}}:null,height:"large"===o?230:200,timeFormat:"HH:mm",...e.relevantMetrics||l?null:{areaOptions:{style:{fill:`l(90) 0:${d[0]} 1:#ffffff`}}},axis:{yAxis:{unit:m,precision:s,...e.counterMetric?null:"percent(1)"===m?{min:0,max:1}:"percent(100)"===m||"%"===m?{min:0,max:100}:{min:0},shape:"smooth"}},groupField:l,areaShape:"smooth",legends:!(!e.relevantMetrics&&!l),colors:d,tooltip:{marker:{fill:d[0],stroke:"#fff",lineWidth:2,shadowColor:d[0],shadowBlur:8,shadowOffsetX:0,shadowOffsetY:4},domStyles:{"g2-tooltip":{background:[`radial-gradient( farthest-corner at -20px 150px, ${d[0]} 0%, rgba(238,238,238,0) 60%)`,"linear-gradient( 180deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0.8) 100%)"].join(", "),boxShadow:`0px 4px 8px 0px ${y(d[0],.08)}`,borderRadius:"8px",border:"1px solid rgba(255,255,255,1)",backdropFilter:"blur(3px)"}}}}};return{brick:"div",properties:{style:{background:"rgba(255,255,255,0.8)",boxShadow:"0px 2px 4px 0px rgba(0,0,0,0.06)",borderRadius:"8px",padding:"16px 20px 20px"}},children:[{brick:"div",properties:{style:{fontSize:"16px",fontWeight:"500",marginBottom:"20px"},textContent:e.groupTitle||a||i.id}},f]}}))}}return l?{brick:"div",properties:{style:{display:"flex",flexDirection:"column",gap:"8px"}},children:[{brick:":forEach",dataSource:`<%= FN._helper_groupMetricData(FN._helper_extractList((${p})), ${JSON.stringify(l)}) %>`,children:[{brick:"div",properties:{textContent:"<% `${ITEM.group}:` %>",style:{fontWeight:"500"}}},{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px",marginBottom:"8px"},dataset:{component:"dashboard"}},children:s.map(((e,t)=>{const{title:r,metric:n,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||n.id,data:"<% ITEM.list %>",xField:"time",yField:n.id,lineColor:b[t%b.length],showArea:!0,..."percent(1)"===n.unit?{min:0,max:1}:"percent(100)"===n.unit||"%"===n.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue(ITEM.list, ${JSON.stringify({metric:n,precision:a})}) %>`}}}))}]}]}:{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px"},dataset:{component:"dashboard"}},children:s.map(((e,t)=>{const{title:r,metric:n,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||n.id,data:u,xField:"time",yField:n.id,lineColor:b[t%b.length],showArea:!0,..."percent(1)"===n.unit?{min:0,max:1}:"percent(100)"===n.unit||"%"===n.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue((${c?`FN._helper_extractList((${p}))`:JSON.stringify(null!=i?i:null)}), ${JSON.stringify({metric:n,precision:a})}) %>`}}}))}}(e,0,r,n);break;case"Button":s=await function(e){const{properties:t}=e;return{brick:"eo-button",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Form":s=await function(e){const{properties:t}=e,{values:r}=null!=t?t:{};return{brick:"eo-form",properties:{values:null!=r?r:{},themeVariant:"elevo"}}}(e);break;case"Toolbar":s=await{brick:"eo-flex-layout",properties:{gap:"0.5em",alignItems:"center"}};break;case"Modal":s=await function(e){const{properties:t}=e,{title:r,confirmText:n,cancelText:a,...i}=t;return{brick:"eo-modal",portal:!0,properties:{themeVariant:"elevo",modalTitle:r,confirmText:n,cancelText:a,keyboard:!0,...i}}}(e);break;case"Plaintext":s=await function(e){const{properties:t}=e;return{brick:"span",properties:{...t}}}(e);break;case"Link":s=await function(e,t,r){const{properties:n}=e;return{brick:"eo-link",properties:{...n,inApp:"app"===r.app.appType,themeVariant:"elevo"}}}(e,0,r);break;case"Output":s=await function(e){const{properties:t}=e,{style:r,...n}=t;return{brick:"pre",properties:{style:{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",tabSize:"2",hyphens:"none",fontSize:"13px",padding:"1em",margin:"0",overflowX:"auto",borderRadius:"9px",...r},...n}}}(e);break;case"Tag":s=await function(e){const{properties:t}=e;return{brick:"eo-tag",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Avatar":s=await function(e){const{properties:t}=e;return{brick:"eo-avatar",properties:{...t,themeVariant:"elevo"}}}(e);break;case"AvatarGroup":s=await function(e){const{properties:t}=e;return{brick:"eo-avatar-group",properties:{...t,themeVariant:"elevo"}}}(e);break;case"CodeBlock":s=await function(e){const{properties:t}=e;return{brick:"eo-code-block",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Search":case"Input":case"NumberInput":case"Textarea":case"Select":case"Radio":case"Checkbox":case"Switch":case"DatePicker":case"TimePicker":s=await function(e,t){const{properties:r}=e;let n=t,a={...r,themeVariant:"elevo"};switch(n){case"eo-search":a={...a,trim:!0};break;case"eo-number-input":n="eo-input",a={type:"number",...a}}return{brick:n,properties:a}}(e,(p=e.name,p.includes("-")?p:`eo${p.replace(/([A-Z])/g,"-$1").toLowerCase()}`));break;case"ForEach":s=await function(e){const{properties:t}=e,{dataSource:r}=t;return{brick:":forEach",dataSource:r}}(e);break;case"If":s=await function(e){const{properties:t}=e,{dataSource:r}=t;return{brick:":if",dataSource:r}}(e);break;default:"app"===r.app.appType&&e.name.toLowerCase()===e.name?s={brick:e.name,properties:e.properties}:console.error("Unknown component:",e.name)}else{var l;const{type:a,importSource:i,name:o}=e.reference;let c;if("imported"===a){const e=r.app.modules.get(i);c=o?null==e?void 0:e.namedExports.get(o):null==e?void 0:e.defaultExport}else c=[...t.internals,...t.namedExports.values()].find((e=>{var t;return"template"===e.type&&(null===(t=e.component.id)||void 0===t?void 0:t.name)===o}));if("template"===(null===(l=c)||void 0===l?void 0:l.type)){const t=c.component.id.name;s={brick:"app"===r.app.appType?w(t):k(t,n.rootId),properties:e.properties}}else console.error(`Cannot find the component "${e.reference.name}".`)}var p,u,d,f,v;return s?(e.ref&&("template"===a?s.ref=e.ref:(null!==(d=(u=s).properties)&&void 0!==d||(u.properties={}),null!==(v=(f=s.properties).dataset)&&void 0!==v||(f.dataset={}),s.properties.dataset.ref=e.ref)),e.slot&&(s.slot=e.slot),s.events=function(e,t){const r={};for(const[a,i]of Object.entries(null!==(n=e.events)&&void 0!==n?n:{})){var n;switch(e.name){case"Table":switch(a){case"select":{const e=c(i,t);e&&(r["row.select.v2"]=e);break}case"sort":{const e=c(i,t);e&&(r["sort.change"]=e);break}case"paginate":{const e=c(i,t);e&&(r["page.change"]=e);break}}break;case"Button":if("click"===a){const e=c(i,t);e&&(r.click=e)}break;case"Search":if("search"===a){const e=c(i,t);e&&(r.search=e)}break;case"Select":if("change"===a){const e=c(i,t);e&&(r["change.v2"]=e)}break;default:{const e=c(i,t);e&&(r[a]=e)}}}return Object.keys(r).length>0?r:void 0}(e,n),null!==(i=e.children)&&void 0!==i&&i.length&&(s.children=(await Promise.all(e.children.map((e=>F(e,t,r,n,a))))).flat(),("Card"===e.name||"Modal"===e.name)&&s.children.length>0&&(s.children=[{brick:"eo-content-layout",children:s.children}])),s):[]}async function S(e,t,r,n){var a,i;if("function"===e.type)return e;const s=[],{component:c}=e;for(const e of c.bindingMap.values())"resource"===e.kind?s.push(l(e.resource)):"state"!==e.kind&&"constant"!==e.kind&&"param"!==e.kind||s.push({name:e.id.name,value:e.initialValue,expose:"param"===e.kind,track:!0});let p;if("view"===e.type){var u;const e=null===(u=c.children)||void 0===u?void 0:u.find((e=>function(e,t){return o(e)&&(e.reference?e.reference.name===t:e.name===t)}(e,"View")));e&&(p=e.children)}else p=c.children;const d=null!==(a=p)&&void 0!==a&&a.length?(await Promise.all(p.map((a=>F(a,t,r,n,e.type))))).flat():[];return{type:e.type,bricks:d,context:s,name:null===(i=c.id)||void 0===i?void 0:i.name,title:e.title}}const A='export function mergeTexts(\n ...items: (\n | { type: "text"; text: string }\n | { type: "expression"; value: unknown }\n )[]\n): string {\n function mergeValuesAsText(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map(mergeValuesAsText).join("");\n }\n const type = typeof value;\n if (type === "string" || type === "number") {\n return String(value);\n }\n if (type === "object" && value !== null) {\n throw new Error("Can not render object as text");\n }\n return "";\n }\n\n const texts: string[] = [];\n for (const item of items) {\n if (item.type === "text") {\n texts.push(item.text.trim());\n } else {\n texts.push(mergeValuesAsText(item.value));\n }\n }\n return texts.join("");\n}\n',M='import { pipes as PIPES } from "@easyops-cn/brick-next-pipes";\n\nexport function getLatestMetricValue(\n list: Record<string, any>[] | undefined,\n {\n metric,\n precision,\n }: { metric: { id: string; unit: string }; precision?: number }\n) {\n const value = list?.findLast?.((item) => item[metric.id] != null)?.[\n metric.id\n ];\n const unit = metric.unit === "load" ? "" : metric.unit;\n return PIPES.unitFormat(value, unit, precision).join("");\n}\n',$="export function extractList<T = unknown>(data: T[] | { list: T[] }): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n return data?.list;\n}\n",C="export function groupMetricData(\n list: Record<string, any>[],\n groupField: string\n) {\n if (!list || !Array.isArray(list) || list.length === 0) {\n return [];\n }\n const grouped = new Map<\n string,\n { group: string; list: Record<string, any>[] }\n >();\n for (const item of list) {\n const key = item[groupField];\n let groupedList = grouped.get(key);\n if (!groupedList) {\n grouped.set(key, (groupedList = { group: key, list: [] }));\n }\n groupedList.list.push(item);\n }\n return Array.from(grouped.values());\n}\n",T="export function getMetricDisplayNames(\n displayNameList:\n | { metric_name: string; metric_display_name: string }[]\n | undefined,\n metricNames: string[]\n): string[] {\n return metricNames.map(\n (metricName) =>\n displayNameList?.find((item) => item.metric_name === metricName)\n ?.metric_display_name ?? metricName\n );\n}\n";let N;function E(e){return e.replace(/^export /m,"").replace(/^import [^\n]+\n/gm,"")}function L(e,t){return{brick:"div",properties:{style:t.expanded?{background:"rgba(255, 255, 255, 0.9)",backdropFilter:"blur(10px)",borderRadius:"16px",padding:"24px"}:{background:"var(--elevo-component-background)",backdropFilter:"var(--elevo-component-backdrop-filter)",borderRadius:"var(--elevo-border-radius)",padding:"16px"}},children:e}}async function P(e,t){const{entry:r}=e;if(!r)throw new Error("No entry module found in the view.");const n={usedHelpers:new Set,app:e},a=await async function(e,t,r){if(e.usedHelpers.size>0)for(const r of e.usedHelpers)t.usedHelpers.add(r);const[n,a,i]=await Promise.all([e.defaultExport?S(e.defaultExport,e,t,r):null,Promise.all(Array.from(e.namedExports.entries()).map((async n=>{let[a,i]=n;return[a,await S(i,e,t,r)]}))).then((e=>new Map(e))),Promise.all(e.internals.map((n=>S(n,e,t,r))))]);return{sourceModule:e,defaultExport:n,namedExports:a,internals:i}}(r,n,t),{defaultExport:i,internals:o,namedExports:s}=a;if(!i)throw new Error("No view found in the entry module.");const l=[],c=[];for(const e of[...o,...s.values()])"function"===e.type?l.push(e.function):"template"===e.type&&c.push({name:k(e.name,t.rootId),bricks:e.bricks,state:e.context});const p=Array.from(n.usedHelpers).map((e=>{const t=(N||(N=new Map([["_helper_mergeTexts",E(A)],["_helper_getLatestMetricValue",E(M)],["_helper_extractList",E($)],["_helper_groupMetricData",E(C)],["_helper_getMetricDisplayNames",E(T)]])),N).get(e);if(!t)throw new Error(`Helper function ${e} not found`);return{name:e,source:t,typescript:!0}})),{title:u,bricks:d,context:m}=i;return{title:u,brick:{brick:"eo-content-layout",children:d.every((e=>["eo-form","eo-descriptions","eo-button"].includes(e.brick)))?[L(d,t)]:d},context:[...m,...t.withContexts?Object.entries(t.withContexts).map((e=>{let[t,r]=e;return{name:t,value:r}})):[]],functions:[...l,...p],templates:c}}}}]);
|
|
2
|
-
//# sourceMappingURL=6593.
|
|
1
|
+
"use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[6593],{23241:(e,t,r)=>{function n(e){const t=document.createElement("div");return t.dataset.rootId=e,t.style.position="absolute",t.style.width=t.style.height="0",document.body.append(t),t}r.d(t,{d:()=>n})},43100:(e,t,r)=>{r.d(t,{f:()=>o});var n=r(47695);let a,i;function o(){return a||(a=(async()=>{const e=(0,n.LV)((i||(i=new Worker(new URL(r.p+r.u(9388),r.b))),i));return await new e})()),a}},71568:(e,t,r)=>{r.d(t,{z:()=>P}),r(58135);const n="next-tsx",a=/^<%=?\s/,i=/\s%>$/;function o(e){return!e.reference||"imported"===e.reference.type&&e.reference.importSource===n}var s=r(77019);function l(e){const{name:t,http:r,api:n,params:a,tool:i,transform:o,rejectTransform:l,config:c,scope:p}=e,u=c&&Object.prototype.hasOwnProperty.call(c,"enabled");return{name:t,resolve:{...r?{useProvider:"basic.http-request",args:[n,a]}:i?{useProvider:"ai-portal.call-tool",args:[i,a]}:{useProvider:`${n}:*`,params:a,..."easyops.api.data_exchange.olap@Query"===n&&(0,s.isObject)(a)?{params:{...a,translate:["#showKey"],limit:void 0,limitBy:void 0,order:void 0,displayName:!0}}:null},...o?{transform:{value:o}}:null,...l?{onReject:{transform:{value:l}}}:null,...u?{if:c.enabled}:null},track:!0,...u?{value:c.fallback}:null,..."template"===p?{expose:!1}:null}}function c(e,t){if(!e)return;const r=(Array.isArray(e)?e:[e]).map((e=>function(e,t){var r;switch(null==e?void 0:e.action){case"update_variable":return{action:"template"===e.payload.scope?"state.update":"context.replace",args:[e.payload.name,e.payload.value]};case"refresh_data_source":return{action:"template"===e.payload.scope?"state.refresh":"context.refresh",args:[e.payload.name]};case"call_api":{var n;const{api:r,http:a,tool:i,params:o}=e.payload,s=null!==(n=e.callback)&&void 0!==n&&n.success?c(e.callback.success,t):void 0;return{...a?{useProvider:"basic.http-request",args:[r,o]}:i?{useProvider:"ai-portal.call-tool",args:[i,o]}:{useProvider:`${r}:*`,params:o},callback:{...s&&{success:s},error:{action:"handleHttpError"}}}}case"call_ref":return{..."template"===e.payload.scope?{targetRef:e.payload.ref}:{target:`[data-root-id="${t.rootId}"] [data-ref="${e.payload.ref}"]`},method:e.payload.method,args:e.payload.args};case"update_query":return{action:"replace"===e.payload.method?"history.replaceQuery":"history.pushQuery",args:e.payload.args};case"show_message":return{action:`message.${e.payload.type}`,args:[e.payload.content]};case"dispatch_event":return{action:"tpl.dispatchEvent",args:[e.payload.type,{detail:e.payload.detail}]};case"conditional":return{if:e.payload.test,then:null!==(r=c(e.payload.consequent,t))&&void 0!==r?r:[],else:c(e.payload.alternate,t)}}}(e,t))).filter(Boolean);return r.length>0?r:void 0}var p=r(69655);const u=/^<%=?\s/,d=/\s%>$/;function m(e){if("string"!=typeof e)return{isString:!1};let t;const r=e.trim();var n;return n=r,u.test(n)&&d.test(n)?t=r.replace(u,"").replace(d,"").trim():(console.warn("Invalid expression:",JSON.stringify(e)),t="null"),{isString:!0,embedded:e,expression:t,usedContexts:(0,p.strictCollectMemberUsage)(e,"CTX")}}var f=r(71321);function h(e,t){return null!=t&&t.size?Array.isArray(e)?e.map((e=>h(e,t))):"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).map((e=>{let[r,n]=e;return[r,h(n,t)]}))):"string"==typeof e&&function(e){if("string"!=typeof e)return!1;const t=e.trim();return a.test(t)&&i.test(t)}(e)?function(e,t){if(null==t||!t.size)return e;if([...t.keys()].some((t=>e.includes(t)))){const r=[];let n;try{n=(0,f.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(t.has(e.name)){var a;const t=null===(a=n[n.length-1])||void 0===a?void 0:a.node;let i;t&&"Property"===t.type&&!t.computed&&t.shorthand&&(i=!0),r.push({id:e,shorthand:i})}}}})}catch(e){console.error("Parse expression failed:",e)}if(r.length>0&&n){const{prefix:e,source:a,suffix:i}=n,o=[];let s=0;for(let e=0;e<r.length;e++){const{id:n,shorthand:i}=r[e],{name:l,start:c,end:p}=n;o.push(a.substring(s,c),`${i?`${l}: `:""}${t.get(l)}`),s=p}return o.push(a.substring(s)),`${e}${o.join("")}${i}`}}return e}(e,t):e:e}const g=["cellData","rowData"],b=["#336EF4","#45CAFF","#41CDCF","#8146F3","#F8A075","#94E65E","#57689C","#C285EF","#FAC60B","#E4551F","#8984FF","#2540FF","#08BF33","#F7811C","#AC7CFF","#1BA5DC","#E89716","#76A6F5","#4F69FF"];function y(e,t){const r=e.slice(1),n=parseInt(r,16);return`rgba(${n>>16&255}, ${n>>8&255}, ${255&n}, ${t})`}let v=0;const x=new Map;function k(e,t){return`${function(e){return x.has(e)||x.set(e,"isolated-tpl-"+v++),x.get(e)}(t)}${_(e)}`}function w(e){return`tpl-${_(e)}`}function _(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}async function F(e,t,r,n,a){var i;let s=null;if(o(e))switch(e.reference?e.reference.name:e.name){case"List":s=await function(e){let{properties:t}=e;const r=t,{dataSource:n,fields:a,variant:i}=r,o=m(n);return{brick:"eo-list",properties:{variant:i,dataSource:o.isString?o.embedded:n,fields:a,themeVariant:"elevo"}}}(e);break;case"Table":s=await async function(e,t,r,n,a){var i;const{properties:o}=e,{dataSource:s,size:l,columns:c,rowKey:p,pagination:u,...d}=o,f=m(s),b=new Map,y=Array.isArray(c)?await Promise.all(c.map((async e=>{let{render:i,...o}=e;if(i){const e=new Map;for(let t=0;t<i.params.length&&t<g.length;t++)e.set(i.params[t],`DATA.${g[t]}`);const s=(await Promise.all(i.children.map((e=>F(e,t,r,n,a))))).flatMap((t=>h(t,e)));return{...o,useBrick:s.map((e=>e.brick.startsWith(":")?{brick:"div",children:[e]}:e))}}return"string"==typeof o.dataIndex&&b.has(o.dataIndex)?{...o,useChildren:`[${o.dataIndex}]`}:o}))):c;return{brick:"eo-next-table",properties:{dataSource:f.isString?f.embedded:s,...d,rowKey:null!=p?p:Array.isArray(c)?null===(i=c[0])||void 0===i?void 0:i.key:void 0,columns:y,themeVariant:"elevo",scrollConfig:{x:"max-content"},...n.expanded?{bordered:!0,pagination:u,size:"large"}:{size:"middle",pagination:!1}},children:b.size>0?Array.from(b.values()):[]}}(e,t,r,n,a);break;case"Descriptions":s=await async function(e,t,r,n,a){let{properties:i}=e;const{dataSource:o,title:s,list:l,columns:c,...p}=i,u=m(o),d=new Map,f=Array.isArray(l)?await Promise.all(l.map((async e=>{let{render:i,...o}=e;if(i){const e=new Map;i.params.length>0&&e.set(i.params[0],"DATA");const s=(await Promise.all(i.children.map((e=>F(e,t,r,n,a))))).flatMap((t=>h(t,e)));return{label:o.label,useBrick:s}}return(o.field?d.get(o.field):void 0)?{label:o.label,useChildren:`[${o.field}]`}:o}))):l;return{brick:"eo-descriptions",properties:{...p,dataSource:u.isString?u.embedded:o,list:f,...null==c?{column:n.expanded?3:1,templateColumns:"repeat(auto-fill,minmax(360px,1fr))"}:{column:c},themeVariant:"elevo"},children:d.size>0?Array.from(d.values()):[]}}(e,t,r,n,a);break;case"Card":s=await function(e){const{properties:t}=e,{title:r,textContent:n}=t;return{brick:"eo-card",properties:{themeVariant:"elevo",cardTitle:r,background:"#fff",outline:"background",...n?{textContent:n}:null}}}(e);break;case"Dashboard":s=await async function(e,t,r,n){let{properties:a}=e;const{dataSource:i,groupField:o,widgets:s}=a;r.usedHelpers.add("_helper_getLatestMetricValue"),r.usedHelpers.add("_helper_extractList"),r.usedHelpers.add("_helper_groupMetricData"),r.usedHelpers.add("_helper_getMetricDisplayNames");const l=o?"#showKey":void 0,{isString:c,expression:p}=m(i),u=c?`<%= FN._helper_extractList((${p})) %>`:i;if(n.expanded){let e=s;const t=[];if(t.length>0){e=[];const r=new Set,n=new Set(s.map((e=>e.metric.id)));for(const a of s){if(r.has(a.metric.id))continue;const i={...a};e.push(i);const o=t.find((e=>e.metrics.includes(a.metric.id)));if(o){const e=o.metrics.filter((e=>n.has(e)));if(e.length>1){i.relevantMetrics=e,i.counterMetric=o.counter,i.groupTitle=o.group;for(const t of e)r.add(t),n.delete(t)}}}}let r=0;return{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(500px, 1fr))",gap:"16px"},dataset:{component:"dashboard"}},children:e.map((e=>{var t,n;const{title:a,metric:i,size:o,precision:s}=e,c=null!==(t=null===(n=e.relevantMetrics)||void 0===n?void 0:n.length)&&void 0!==t?t:l?2:1,d=Array.from({length:c},((e,t)=>b[(r+t)%b.length]));r+=c;const m="load"===i.unit?"":i.unit,f={brick:"chart-v2.time-series-chart",properties:{data:u,xField:"time",...e.relevantMetrics?{yFields:`<% FN._helper_getMetricDisplayNames((${p}).displayNameList, ${JSON.stringify(e.relevantMetrics)}) %>`}:{yField:`<% FN._helper_getMetricDisplayNames((${p}).displayNameList, [${JSON.stringify(i.id)}])[0] %>`},...e.counterMetric?{forceAbsoluteNumbers:!0,series:{[e.counterMetric]:{isNegative:!0}}}:null,height:"large"===o?230:200,timeFormat:"HH:mm",...e.relevantMetrics||l?null:{areaOptions:{style:{fill:`l(90) 0:${d[0]} 1:#ffffff`}}},axis:{yAxis:{unit:m,precision:s,...e.counterMetric?null:"percent(1)"===m?{min:0,max:1}:"percent(100)"===m||"%"===m?{min:0,max:100}:{min:0},shape:"smooth"}},groupField:l,areaShape:"smooth",legends:!(!e.relevantMetrics&&!l),colors:d,tooltip:{marker:{fill:d[0],stroke:"#fff",lineWidth:2,shadowColor:d[0],shadowBlur:8,shadowOffsetX:0,shadowOffsetY:4},domStyles:{"g2-tooltip":{background:[`radial-gradient( farthest-corner at -20px 150px, ${d[0]} 0%, rgba(238,238,238,0) 60%)`,"linear-gradient( 180deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0.8) 100%)"].join(", "),boxShadow:`0px 4px 8px 0px ${y(d[0],.08)}`,borderRadius:"8px",border:"1px solid rgba(255,255,255,1)",backdropFilter:"blur(3px)"}}}}};return{brick:"div",properties:{style:{background:"rgba(255,255,255,0.8)",boxShadow:"0px 2px 4px 0px rgba(0,0,0,0.06)",borderRadius:"8px",padding:"16px 20px 20px"}},children:[{brick:"div",properties:{style:{fontSize:"16px",fontWeight:"500",marginBottom:"20px"},textContent:e.groupTitle||a||i.id}},f]}}))}}return l?{brick:"div",properties:{style:{display:"flex",flexDirection:"column",gap:"8px"}},children:[{brick:":forEach",dataSource:`<%= FN._helper_groupMetricData(FN._helper_extractList((${p})), ${JSON.stringify(l)}) %>`,children:[{brick:"div",properties:{textContent:"<% `${ITEM.group}:` %>",style:{fontWeight:"500"}}},{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px",marginBottom:"8px"},dataset:{component:"dashboard"}},children:s.map(((e,t)=>{const{title:r,metric:n,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||n.id,data:"<% ITEM.list %>",xField:"time",yField:n.id,lineColor:b[t%b.length],showArea:!0,..."percent(1)"===n.unit?{min:0,max:1}:"percent(100)"===n.unit||"%"===n.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue(ITEM.list, ${JSON.stringify({metric:n,precision:a})}) %>`}}}))}]}]}:{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px"},dataset:{component:"dashboard"}},children:s.map(((e,t)=>{const{title:r,metric:n,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||n.id,data:u,xField:"time",yField:n.id,lineColor:b[t%b.length],showArea:!0,..."percent(1)"===n.unit?{min:0,max:1}:"percent(100)"===n.unit||"%"===n.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue((${c?`FN._helper_extractList((${p}))`:JSON.stringify(null!=i?i:null)}), ${JSON.stringify({metric:n,precision:a})}) %>`}}}))}}(e,0,r,n);break;case"Button":s=await function(e){const{properties:t}=e;return{brick:"eo-button",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Form":s=await function(e){const{properties:t}=e,{values:r}=null!=t?t:{};return{brick:"eo-form",properties:{values:null!=r?r:{},themeVariant:"elevo"}}}(e);break;case"Toolbar":s=await{brick:"eo-flex-layout",properties:{gap:"0.5em",alignItems:"center"}};break;case"Modal":s=await function(e){const{properties:t}=e,{title:r,confirmText:n,cancelText:a,...i}=t;return{brick:"eo-modal",portal:!0,properties:{themeVariant:"elevo",modalTitle:r,confirmText:n,cancelText:a,keyboard:!0,...i}}}(e);break;case"Plaintext":s=await function(e){const{properties:t}=e;return{brick:"span",properties:{...t}}}(e);break;case"Link":s=await function(e,t,r){const{properties:n}=e;return{brick:"eo-link",properties:{...n,inApp:"app"===r.app.appType,themeVariant:"elevo"}}}(e,0,r);break;case"Output":s=await function(e){const{properties:t}=e,{style:r,...n}=t;return{brick:"pre",properties:{style:{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",tabSize:"2",hyphens:"none",fontSize:"13px",padding:"1em",margin:"0",overflowX:"auto",borderRadius:"9px",...r},...n}}}(e);break;case"Tag":s=await function(e){const{properties:t}=e;return{brick:"eo-tag",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Avatar":s=await function(e){const{properties:t}=e;return{brick:"eo-avatar",properties:{...t,themeVariant:"elevo"}}}(e);break;case"AvatarGroup":s=await function(e){const{properties:t}=e;return{brick:"eo-avatar-group",properties:{...t,themeVariant:"elevo"}}}(e);break;case"CodeBlock":s=await function(e){const{properties:t}=e;return{brick:"eo-code-block",properties:{...t,themeVariant:"elevo"}}}(e);break;case"Search":case"Input":case"NumberInput":case"Textarea":case"Select":case"Radio":case"Checkbox":case"Switch":case"DatePicker":case"TimePicker":s=await function(e,t){const{properties:r}=e;let n=t,a={...r,themeVariant:"elevo"};switch(n){case"eo-search":a={...a,trim:!0};break;case"eo-number-input":n="eo-input",a={type:"number",...a}}return{brick:n,properties:a}}(e,(p=e.name,p.includes("-")?p:`eo${p.replace(/([A-Z])/g,"-$1").toLowerCase()}`));break;case"ForEach":s=await function(e){const{properties:t}=e,{dataSource:r}=t;return{brick:":forEach",dataSource:r}}(e);break;case"If":s=await function(e){const{properties:t}=e,{dataSource:r}=t;return{brick:":if",dataSource:r}}(e);break;default:"app"!==r.app.appType&&!n.allowAnyBricks||e.name.toLowerCase()!==e.name?console.error("Unknown component:",e.name):s={brick:e.name.replaceAll("_",".").replaceAll("--","."),properties:e.properties}}else{var l;const{type:a,importSource:i,name:o}=e.reference;let c;if("imported"===a){const e=r.app.modules.get(i);c=o?null==e?void 0:e.namedExports.get(o):null==e?void 0:e.defaultExport}else c=[...t.internals,...t.namedExports.values()].find((e=>{var t;return"template"===e.type&&(null===(t=e.component.id)||void 0===t?void 0:t.name)===o}));if("template"===(null===(l=c)||void 0===l?void 0:l.type)){const t=c.component.id.name;s={brick:"app"===r.app.appType?w(t):k(t,n.rootId),properties:e.properties}}else console.error(`Cannot find the component "${e.reference.name}".`)}var p,u,d,f,v;return s?(e.ref&&("template"===a?s.ref=e.ref:(null!==(d=(u=s).properties)&&void 0!==d||(u.properties={}),null!==(v=(f=s.properties).dataset)&&void 0!==v||(f.dataset={}),s.properties.dataset.ref=e.ref)),e.slot&&(s.slot=e.slot),s.events=function(e,t){const r={};for(const[a,i]of Object.entries(null!==(n=e.events)&&void 0!==n?n:{})){var n;switch(e.name){case"Table":switch(a){case"select":{const e=c(i,t);e&&(r["row.select.v2"]=e);break}case"sort":{const e=c(i,t);e&&(r["sort.change"]=e);break}case"paginate":{const e=c(i,t);e&&(r["page.change"]=e);break}}break;case"Button":if("click"===a){const e=c(i,t);e&&(r.click=e)}break;case"Search":if("search"===a){const e=c(i,t);e&&(r.search=e)}break;case"Select":if("change"===a){const e=c(i,t);e&&(r["change.v2"]=e)}break;default:{const e=c(i,t);e&&(r[a]=e)}}}return Object.keys(r).length>0?r:void 0}(e,n),null!==(i=e.children)&&void 0!==i&&i.length&&(s.children=(await Promise.all(e.children.map((e=>F(e,t,r,n,a))))).flat(),("Card"===e.name||"Modal"===e.name)&&s.children.length>0&&(s.children=[{brick:"eo-content-layout",children:s.children}])),s):[]}async function A(e,t,r,n){var a,i;if("function"===e.type)return e;const s=[],{component:c}=e;for(const e of c.bindingMap.values())"resource"===e.kind?s.push(l(e.resource)):"state"!==e.kind&&"constant"!==e.kind&&"param"!==e.kind||s.push({name:e.id.name,value:e.initialValue,expose:"param"===e.kind,track:!0});let p;if("view"===e.type){var u;const e=null===(u=c.children)||void 0===u?void 0:u.find((e=>function(e,t){return o(e)&&(e.reference?e.reference.name===t:e.name===t)}(e,"View")));e&&(p=e.children)}else p=c.children;const d=null!==(a=p)&&void 0!==a&&a.length?(await Promise.all(p.map((a=>F(a,t,r,n,e.type))))).flat():[];return{type:e.type,bricks:d,context:s,name:null===(i=c.id)||void 0===i?void 0:i.name,title:e.title}}const S='export function mergeTexts(\n ...items: (\n | { type: "text"; text: string }\n | { type: "expression"; value: unknown }\n )[]\n): string {\n function mergeValuesAsText(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map(mergeValuesAsText).join("");\n }\n const type = typeof value;\n if (type === "string" || type === "number") {\n return String(value);\n }\n if (type === "object" && value !== null) {\n throw new Error("Can not render object as text");\n }\n return "";\n }\n\n const texts: string[] = [];\n for (const item of items) {\n if (item.type === "text") {\n texts.push(item.text.trim());\n } else {\n texts.push(mergeValuesAsText(item.value));\n }\n }\n return texts.join("");\n}\n',M='import { pipes as PIPES } from "@easyops-cn/brick-next-pipes";\n\nexport function getLatestMetricValue(\n list: Record<string, any>[] | undefined,\n {\n metric,\n precision,\n }: { metric: { id: string; unit: string }; precision?: number }\n) {\n const value = list?.findLast?.((item) => item[metric.id] != null)?.[\n metric.id\n ];\n const unit = metric.unit === "load" ? "" : metric.unit;\n return PIPES.unitFormat(value, unit, precision).join("");\n}\n',$="export function extractList<T = unknown>(data: T[] | { list: T[] }): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n return data?.list;\n}\n",C="export function groupMetricData(\n list: Record<string, any>[],\n groupField: string\n) {\n if (!list || !Array.isArray(list) || list.length === 0) {\n return [];\n }\n const grouped = new Map<\n string,\n { group: string; list: Record<string, any>[] }\n >();\n for (const item of list) {\n const key = item[groupField];\n let groupedList = grouped.get(key);\n if (!groupedList) {\n grouped.set(key, (groupedList = { group: key, list: [] }));\n }\n groupedList.list.push(item);\n }\n return Array.from(grouped.values());\n}\n",T="export function getMetricDisplayNames(\n displayNameList:\n | { metric_name: string; metric_display_name: string }[]\n | undefined,\n metricNames: string[]\n): string[] {\n return metricNames.map(\n (metricName) =>\n displayNameList?.find((item) => item.metric_name === metricName)\n ?.metric_display_name ?? metricName\n );\n}\n";let N;function E(e){return e.replace(/^export /m,"").replace(/^import [^\n]+\n/gm,"")}function L(e,t){return{brick:"div",properties:{style:t.expanded?{background:"rgba(255, 255, 255, 0.9)",backdropFilter:"blur(10px)",borderRadius:"16px",padding:"24px"}:{background:"var(--elevo-component-background)",backdropFilter:"var(--elevo-component-backdrop-filter)",borderRadius:"var(--elevo-border-radius)",padding:"16px"}},children:e}}async function P(e,t){var r;const{entry:n}=e;if(!n)throw new Error("No entry module found in the view.");let a;const i=new Map,o={usedHelpers:new Set,app:e},s=[],l=[];if(await Promise.all(Array.from(e.modules).map((async e=>{let[r,c]=e;if(c){const e=await async function(e,t,r){if(e.usedHelpers.size>0)for(const r of e.usedHelpers)t.usedHelpers.add(r);const[n,a,i]=await Promise.all([e.defaultExport?A(e.defaultExport,e,t,r):null,Promise.all(Array.from(e.namedExports.entries()).map((async n=>{let[a,i]=n;return[a,await A(i,e,t,r)]}))).then((e=>new Map(e))),Promise.all(e.internals.map((n=>A(n,e,t,r))))]);return{sourceModule:e,defaultExport:n,namedExports:a,internals:i}}(c,o,t);i.set(r,e),c===n&&(a=e);for(const r of[...e.internals,...e.namedExports.values(),e.defaultExport])switch(null==r?void 0:r.type){case"function":s.push(r.function);break;case"template":l.push({name:k(r.name,t.rootId),bricks:r.bricks,state:r.context})}}}))),null===(r=a)||void 0===r||!r.defaultExport)throw new Error("No view found in the entry module.");const c=Array.from(o.usedHelpers).map((e=>{const t=(N||(N=new Map([["_helper_mergeTexts",E(S)],["_helper_getLatestMetricValue",E(M)],["_helper_extractList",E($)],["_helper_groupMetricData",E(C)],["_helper_getMetricDisplayNames",E(T)]])),N).get(e);if(!t)throw new Error(`Helper function ${e} not found`);return{name:e,source:t,typescript:!0}})),{title:p,bricks:u,context:d}=a.defaultExport;return{title:p,brick:t.withoutWrapper?u:{brick:"eo-content-layout",children:u.every((e=>["eo-form","eo-descriptions","eo-button"].includes(e.brick)))?[L(u,t)]:u},context:[...d,...t.withContexts?Object.entries(t.withContexts).map((e=>{let[t,r]=e;return{name:t,value:r}})):[]],functions:[...s,...c],templates:l}}}}]);
|
|
2
|
+
//# sourceMappingURL=6593.58eda50f.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks/6593.58eda50f.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/utils/createPortal.ts","webpack:///./src/shared/workers/tsxParser.ts","webpack:///../../../src/modules/constants.ts","webpack:///../../../src/modules/validations.ts","webpack:///../../../src/modules/convertDataSource.ts","webpack:///../../src/convertEvents.ts","webpack:///../../src/expressions.ts","webpack:///../../src/deepReplaceVariables.ts","webpack:///../../src/convertTable.ts","webpack:///../../src/convertDashboard.ts","webpack:///../../../src/modules/getTplName.ts","webpack:///../../src/convertComponent.ts","webpack:///../../src/convertList.ts","webpack:///../../src/convertDescriptions.ts","webpack:///../../src/convertCard.ts","webpack:///../../src/convertButton.ts","webpack:///../../src/convertForm.ts","webpack:///../../src/convertToolbar.ts","webpack:///../../src/convertModal.ts","webpack:///../../src/convertText.ts","webpack:///../../src/convertLink.ts","webpack:///../../src/convertOutput.ts","webpack:///../../src/convertTag.ts","webpack:///../../src/convertAvatar.ts","webpack:///../../src/convertAvatarGroup.ts","webpack:///../../src/convertCodeBlock.ts","webpack:///../../src/convertFormItem.ts","webpack:///../../src/convertForEach.ts","webpack:///../../src/convertIf.ts","webpack:///../../../src/modules/convertModule.ts","webpack:///../../../src/helpers/index.ts","webpack:///../../src/withBox.ts","webpack:///../../../src/modules/convertView.ts"],"sourcesContent":["export function createPortal(rootId: string) {\n const portal = document.createElement(\"div\");\n portal.dataset.rootId = rootId;\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n}\n","// istanbul ignore file\nimport type { ParsedApp, ParseOptions } from \"@next-shared/tsx-parser\";\nimport { wrap } from \"comlink\";\n\nexport interface RemoteTsxParserWorker {\n parseView(source: string, options?: ParseOptions): Promise<ParsedApp>;\n}\n\nlet remoteWorkerPromise: Promise<RemoteTsxParserWorker> | undefined;\n\nlet worker: Worker | undefined;\n\nexport function getRemoteTsxParserWorker() {\n if (!remoteWorkerPromise) {\n remoteWorkerPromise = (async () => {\n const Remote = wrap<{ new (): RemoteTsxParserWorker }>(getWorker());\n return await new Remote();\n })();\n }\n return remoteWorkerPromise;\n}\n\nfunction getWorker() {\n if (!worker) {\n worker = new Worker(new URL(\"./tsxParser.worker.ts\", import.meta.url));\n }\n return worker;\n}\n","export const MODULE_SOURCE = \"next-tsx\";\n\nexport const CALL_API_LIST = [\"callApi\", \"callHttp\", \"callTool\"] as const;\n","import type { NodePath } from \"@babel/traverse\";\nimport * as t from \"@babel/types\";\nimport type { ComponentChild, ParsedModule } from \"./interfaces.js\";\nimport { MODULE_SOURCE } from \"./constants.js\";\n\nexport function validateFunction(\n fn: t.FunctionDeclaration | t.FunctionExpression | t.ArrowFunctionExpression,\n state: ParsedModule\n): boolean {\n if (fn.async || fn.generator) {\n state.errors.push({\n message: `Function cannot be async or generator`,\n node: fn,\n severity: \"error\",\n });\n return false;\n }\n\n return true;\n}\n\nexport function validateGlobalApi(\n id: NodePath<t.Identifier | t.JSXIdentifier>,\n api: string\n): boolean {\n const ref = id.referencesImport(MODULE_SOURCE, api);\n if (ref) {\n return true;\n }\n return id.node.name === api && !id.scope.getBinding(id.node.name);\n}\n\nexport function validateEmbeddedExpression(\n expr: t.Expression,\n state: ParsedModule | null\n): boolean {\n let invalidNode: t.Node | null = null;\n\n t.traverse(expr, {\n enter(node, parent) {\n if (\n !invalidNode &&\n (t.isFunctionExpression(node) ||\n t.isStatement(node) ||\n t.isAwaitExpression(node) ||\n t.isYieldExpression(node) ||\n t.isJSX(node) ||\n (t.isArrowFunctionExpression(node) &&\n (node.async ||\n node.generator ||\n t.isBlockStatement(node.body) ||\n t.isObjectProperty(parent[parent.length - 1]?.node))))\n ) {\n invalidNode = node;\n }\n },\n });\n\n if (invalidNode) {\n state?.errors.push({\n message: `Unsupported expression type: ${(invalidNode as t.Node).type}`,\n node: invalidNode,\n severity: \"error\",\n });\n return false;\n }\n\n return true;\n}\n\nexport function isNilPath(path: NodePath<t.Node>) {\n return (\n path.isNullLiteral() ||\n (path.isIdentifier() &&\n path.node.name === \"undefined\" &&\n path.scope.getBinding(\"undefined\") === undefined)\n );\n}\n\nconst EXPRESSION_PREFIX_REG = /^<%=?\\s/;\nconst EXPRESSION_SUFFIX_REG = /\\s%>$/;\n\nexport function isExpressionString(value: unknown): value is string {\n if (typeof value !== \"string\") {\n return false;\n }\n const trimmed = value.trim();\n return (\n EXPRESSION_PREFIX_REG.test(trimmed) && EXPRESSION_SUFFIX_REG.test(trimmed)\n );\n}\n\nexport function isAnyOfficialComponent(child: ComponentChild) {\n return (\n !child.reference ||\n (child.reference.type === \"imported\" &&\n child.reference.importSource === MODULE_SOURCE)\n );\n}\n\nexport function isOfficialComponent(child: ComponentChild, name: string) {\n return (\n isAnyOfficialComponent(child) &&\n (child.reference ? child.reference.name === name : child.name === name)\n );\n}\n\nexport function isGeneralCallExpression(\n path: NodePath<t.Node | null | undefined>\n): path is NodePath<t.CallExpression | t.OptionalCallExpression> {\n return path.isCallExpression() || path.isOptionalCallExpression();\n}\n\nexport function isGeneralMemberExpression(\n path: NodePath<t.Node | null | undefined>\n): path is NodePath<t.MemberExpression | t.OptionalMemberExpression> {\n return path.isMemberExpression() || path.isOptionalMemberExpression();\n}\n","import type { ContextConf } from \"@next-core/types\";\nimport { isObject } from \"@next-core/utils/general\";\nimport type { DataSource } from \"@next-shared/tsx-parser\";\n\nexport function convertDataSource(resource: DataSource): ContextConf {\n const {\n name,\n http,\n api,\n params,\n tool,\n transform,\n rejectTransform,\n config,\n scope,\n } = resource;\n const hasEnabled =\n config && Object.prototype.hasOwnProperty.call(config, \"enabled\");\n\n return {\n name: name,\n resolve: {\n ...(http\n ? {\n useProvider: \"basic.http-request\",\n args: [api, params],\n }\n : tool\n ? {\n useProvider: \"ai-portal.call-tool\",\n args: [tool, params],\n }\n : {\n useProvider: `${api}:*`,\n params: params as Record<string, unknown> | undefined,\n // TODO: remove the temporary workaround below\n ...(api === \"easyops.api.data_exchange.olap@Query\" &&\n isObject(params)\n ? {\n params: {\n ...params,\n translate: [\"#showKey\"],\n limit: undefined,\n limitBy: undefined,\n order: undefined,\n displayName: true,\n },\n }\n : null),\n }),\n ...(transform ? { transform: { value: transform } } : null),\n ...(rejectTransform\n ? { onReject: { transform: { value: rejectTransform } } }\n : null),\n ...(hasEnabled\n ? {\n if: config.enabled as string | boolean,\n }\n : null),\n },\n track: true,\n ...(hasEnabled\n ? {\n value: config.fallback,\n }\n : null),\n ...(scope === \"template\" ? { expose: false } : null),\n };\n}\n","import type { BrickEventHandler, BrickEventsMap } from \"@next-core/types\";\nimport type { Component, EventHandler } from \"@next-shared/tsx-parser\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\nexport function convertEvents(component: Component, options: ConvertOptions) {\n const events: BrickEventsMap = {};\n for (const [event, handler] of Object.entries(component.events ?? {})) {\n switch (component.name) {\n case \"Table\":\n switch (event) {\n case \"select\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"row.select.v2\"] = action;\n }\n break;\n }\n case \"sort\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"sort.change\"] = action;\n }\n break;\n }\n case \"paginate\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"page.change\"] = action;\n }\n break;\n }\n }\n break;\n case \"Button\":\n if (event === \"click\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events.click = action;\n }\n }\n break;\n case \"Search\":\n if (event === \"search\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events.search = action;\n }\n }\n break;\n case \"Select\":\n if (event === \"change\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"change.v2\"] = action;\n }\n }\n break;\n default: {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[event] = action;\n }\n }\n }\n }\n return Object.keys(events).length > 0 ? events : undefined;\n}\n\nfunction convertEventHandlers(\n handler: EventHandler | EventHandler[] | null,\n options: ConvertOptions\n): BrickEventHandler[] | undefined {\n if (!handler) {\n return;\n }\n const list = (Array.isArray(handler) ? handler : [handler])\n .map((hdl) => convertEventHandler(hdl, options))\n .filter(Boolean) as BrickEventHandler[];\n return list.length > 0 ? list : undefined;\n}\n\nfunction convertEventHandler(\n handler: EventHandler,\n options: ConvertOptions\n): BrickEventHandler | undefined {\n switch (handler?.action) {\n case \"update_variable\":\n return {\n action:\n handler.payload.scope === \"template\"\n ? \"state.update\"\n : \"context.replace\",\n args: [handler.payload.name, handler.payload.value],\n };\n case \"refresh_data_source\":\n return {\n action:\n handler.payload.scope === \"template\"\n ? \"state.refresh\"\n : \"context.refresh\",\n args: [handler.payload.name],\n };\n case \"call_api\": {\n const { api, http, tool, params } = handler.payload;\n\n const success = handler.callback?.success\n ? convertEventHandlers(\n handler.callback.success as EventHandler | EventHandler[],\n options\n )\n : undefined;\n\n return {\n ...(http\n ? {\n useProvider: \"basic.http-request\",\n args: [api, params],\n }\n : tool\n ? {\n useProvider: \"ai-portal.call-tool\",\n args: [tool, params],\n }\n : {\n useProvider: `${api}:*`,\n params,\n }),\n callback: {\n ...(success && { success }),\n error: {\n action: \"handleHttpError\",\n },\n },\n };\n }\n case \"call_ref\":\n return {\n ...(handler.payload.scope === \"template\"\n ? {\n targetRef: handler.payload.ref,\n }\n : {\n target: `[data-root-id=\"${options.rootId}\"] [data-ref=\"${handler.payload.ref}\"]`,\n }),\n method: handler.payload.method,\n args: handler.payload.args,\n };\n case \"update_query\":\n return {\n action:\n handler.payload.method === \"replace\"\n ? \"history.replaceQuery\"\n : \"history.pushQuery\",\n args: handler.payload.args,\n };\n case \"show_message\":\n return {\n action: `message.${handler.payload.type}` as \"message.info\",\n args: [handler.payload.content],\n };\n case \"dispatch_event\":\n return {\n action: \"tpl.dispatchEvent\",\n args: [handler.payload.type, { detail: handler.payload.detail }],\n };\n case \"conditional\":\n return {\n if: handler.payload.test,\n then: convertEventHandlers(handler.payload.consequent, options) ?? [],\n else: convertEventHandlers(handler.payload.alternate, options),\n };\n }\n}\n","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\n\nconst EXPRESSION_PREFIX_REG = /^<%=?\\s/;\nconst EXPRESSION_SUFFIX_REG = /\\s%>$/;\n\n/**\n * @param value The trimmed string content\n * @returns if the value is a valid expression\n */\nfunction isExpression(value: string) {\n return EXPRESSION_PREFIX_REG.test(value) && EXPRESSION_SUFFIX_REG.test(value);\n}\n\nexport function parseDataSource(data: string | object):\n | {\n isString: false;\n embedded?: undefined;\n expression?: undefined;\n usedContexts?: undefined;\n }\n | {\n isString: true;\n embedded: string;\n expression: string;\n usedContexts: Set<string>;\n } {\n if (typeof data !== \"string\") {\n return {\n isString: false,\n };\n }\n\n let expression: string;\n const expr = data.trim();\n if (isExpression(expr)) {\n expression = expr\n .replace(EXPRESSION_PREFIX_REG, \"\")\n .replace(EXPRESSION_SUFFIX_REG, \"\")\n .trim();\n } else {\n // eslint-disable-next-line no-console\n console.warn(\"Invalid expression:\", JSON.stringify(data));\n expression = \"null\";\n }\n\n const usedContexts = strictCollectMemberUsage(data, \"CTX\");\n\n return {\n isString: true,\n embedded: data,\n expression,\n usedContexts,\n };\n}\n","import type * as t from \"@babel/types\";\nimport { preevaluate, type PreevaluateResult } from \"@next-core/cook\";\nimport { isExpressionString } from \"@next-shared/tsx-parser\";\n\nexport function deepReplaceVariables<T>(\n value: T,\n patterns: Map<string, string> | undefined\n): T {\n if (!patterns?.size) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n deepReplaceVariables(item, patterns)\n ) as unknown as T;\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [\n k,\n deepReplaceVariables(v, patterns),\n ])\n ) as T;\n }\n\n if (typeof value === \"string\" && isExpressionString(value)) {\n return replaceVariables(value, patterns) as unknown as T;\n }\n\n return value;\n}\n\ninterface Replacement {\n id: t.Identifier;\n shorthand?: boolean;\n}\n\nexport function replaceVariables(\n expr: string,\n patterns: Map<string, string> | undefined\n): string {\n if (!patterns?.size) {\n return expr;\n }\n const keywords = [...patterns.keys()];\n if (keywords.some((k) => expr.includes(k))) {\n const replacements: Replacement[] = [];\n let result: PreevaluateResult | undefined;\n try {\n result = preevaluate(expr, {\n withParent: true,\n hooks: {\n beforeVisitGlobal(node, path) {\n if (patterns.has(node.name)) {\n const p = path![path!.length - 1]?.node;\n let shorthand: boolean | undefined;\n if (p && p.type === \"Property\" && !p.computed && p.shorthand) {\n shorthand = true;\n }\n replacements.push({ id: node, shorthand });\n }\n },\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Parse expression failed:\", error);\n }\n if (replacements.length > 0 && result) {\n const { prefix, source, suffix } = result;\n const chunks: string[] = [];\n let prevStart = 0;\n for (let i = 0; i < replacements.length; i++) {\n const { id, shorthand } = replacements[i];\n const { name, start, end } = id;\n chunks.push(\n source.substring(prevStart, start!),\n `${shorthand ? `${name}: ` : \"\"}${patterns.get(name)}`\n );\n prevStart = end!;\n }\n chunks.push(source.substring(prevStart));\n return `${prefix}${chunks.join(\"\")}${suffix}`;\n }\n }\n return expr;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n ComponentChild,\n ParsedModule,\n RenderUseBrick,\n} from \"@next-shared/tsx-parser\";\nimport type { TableColumn, TableProps } from \"../lib/components.js\";\nimport type { ConvertState, ConvertOptions } from \"./interfaces.js\";\n// import { lowLevelConvertToStoryboard } from \"./raw-data-generate/convert.js\";\nimport { parseDataSource } from \"./expressions.js\";\n// import { getPreGeneratedAttrViews } from \"./getPreGeneratedAttrViews.js\";\n// import { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { convertComponent } from \"./convertComponent.js\";\nimport { deepReplaceVariables } from \"./deepReplaceVariables.js\";\n\nconst columnUseBrickParams = [\"cellData\", \"rowData\"];\n\nexport default async function convertTable(\n component: ComponentChild,\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions,\n scope: \"page\" | \"view\" | \"template\"\n): Promise<BrickConf> {\n const { properties } = component;\n const { dataSource, size, columns, rowKey, pagination, ...restProps } =\n properties as Omit<TableProps<object>, \"dataSource\" | \"columns\"> & {\n dataSource: string | object;\n size?: \"small\" | \"medium\" | \"large\";\n pagination?: boolean;\n columns:\n | string\n | Array<\n Omit<TableColumn<object>, \"render\"> & {\n render?: RenderUseBrick;\n }\n >;\n };\n\n const parsedDataSource = parseDataSource(dataSource);\n\n // const objectId = findObjectIdByUsedDataContexts(\n // parsedDataSource.usedContexts,\n // view.dataSources,\n // view.variables\n // );\n\n // const attrViews = objectId\n // ? await getPreGeneratedAttrViews(objectId)\n // : undefined;\n\n const configuredColumns = new Map<string, BrickConf>();\n\n // if (attrViews?.size && Array.isArray(columns)) {\n // for (const column of columns) {\n // if (column.render || typeof column.dataIndex !== \"string\") {\n // continue;\n // }\n // const candidate = attrViews.get(column.dataIndex);\n // if (candidate) {\n // const brick = lowLevelConvertToStoryboard(candidate, \".cellData\");\n // if (brick) {\n // brick.slot = `[${column.dataIndex}]`;\n // configuredColumns.set(column.dataIndex, brick);\n // }\n // }\n // }\n // }\n\n const convertedColumns = Array.isArray(columns)\n ? await Promise.all(\n columns.map(async ({ render, ...column }) => {\n if (render) {\n const patterns = new Map<string, string>();\n for (\n let i = 0;\n i < render.params.length && i < columnUseBrickParams.length;\n i++\n ) {\n patterns.set(render.params[i], `DATA.${columnUseBrickParams[i]}`);\n }\n\n const useBrick = (\n await Promise.all(\n render.children.map((child) =>\n convertComponent(child, mod, state, options, scope)\n )\n )\n ).flatMap((child) => deepReplaceVariables(child, patterns));\n\n return {\n ...column,\n useBrick: useBrick.map((item) =>\n item.brick.startsWith(\":\")\n ? {\n brick: \"div\",\n children: [item],\n }\n : item\n ),\n };\n }\n return typeof column.dataIndex === \"string\" &&\n configuredColumns.has(column.dataIndex)\n ? {\n ...column,\n useChildren: `[${column.dataIndex}]`,\n }\n : column;\n })\n )\n : columns;\n\n return {\n brick: \"eo-next-table\",\n properties: {\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n ...restProps,\n rowKey: rowKey ?? (Array.isArray(columns) ? columns[0]?.key : undefined),\n columns: convertedColumns,\n themeVariant: \"elevo\",\n scrollConfig: {\n x: \"max-content\",\n },\n ...(options.expanded\n ? {\n bordered: true,\n pagination,\n size: \"large\",\n }\n : {\n size: \"middle\",\n pagination: false,\n }),\n },\n children:\n configuredColumns.size > 0 ? Array.from(configuredColumns.values()) : [],\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ParsedModule } from \"@next-shared/tsx-parser\";\nimport type { DashboardProps, DashboardWidget } from \"../lib/components.js\";\nimport { parseDataSource } from \"./expressions.js\";\n// import { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport {\n /* getPreGeneratedMetricGroups, */ type MetricWithGroup,\n} from \"./getPreGeneratedMetricGroups.js\";\nimport type { ConvertState, ConvertOptions } from \"./interfaces.js\";\n\nconst COLORS = [\n \"#336EF4\",\n \"#45CAFF\",\n \"#41CDCF\",\n \"#8146F3\",\n \"#F8A075\",\n \"#94E65E\",\n \"#57689C\",\n \"#C285EF\",\n \"#FAC60B\",\n \"#E4551F\",\n \"#8984FF\",\n \"#2540FF\",\n \"#08BF33\",\n \"#F7811C\",\n \"#AC7CFF\",\n \"#1BA5DC\",\n \"#E89716\",\n \"#76A6F5\",\n \"#4F69FF\",\n];\n\ninterface MergedWidget extends DashboardWidget {\n relevantMetrics?: string[];\n counterMetric?: string;\n groupTitle?: string;\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport default async function convertDashboard(\n { properties }: Component,\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions\n): Promise<BrickConf> {\n const {\n dataSource,\n groupField: _groupField,\n widgets,\n } = properties as Omit<DashboardProps, \"dataSource\"> & {\n dataSource: string | object;\n };\n\n state.usedHelpers.add(\"_helper_getLatestMetricValue\");\n state.usedHelpers.add(\"_helper_extractList\");\n state.usedHelpers.add(\"_helper_groupMetricData\");\n state.usedHelpers.add(\"_helper_getMetricDisplayNames\");\n\n const groupField = _groupField ? \"#showKey\" : undefined;\n\n const { isString, expression /* , usedContexts */ } =\n parseDataSource(dataSource);\n\n const chartData = isString\n ? `<%= FN._helper_extractList((${expression})) %>`\n : dataSource;\n\n if (options.expanded) {\n let mergedWidgets = widgets as MergedWidget[];\n // const objectId = findObjectIdByUsedDataContexts(\n // usedContexts,\n // view.dataSources,\n // view.variables\n // );\n // const metricGroups = objectId\n // ? await getPreGeneratedMetricGroups(objectId)\n // : [];\n const metricGroups: MetricWithGroup[] = [];\n\n if (metricGroups.length > 0) {\n mergedWidgets = [];\n const mergedMetrics = new Set<string>();\n const metricIds = new Set(widgets.map((w) => w.metric.id));\n for (const widget of widgets) {\n if (mergedMetrics.has(widget.metric.id)) {\n continue; // Skip already merged metrics\n }\n const mergedWidget = { ...widget } as MergedWidget;\n mergedWidgets.push(mergedWidget);\n const group = metricGroups.find((g) =>\n g.metrics.includes(widget.metric.id)\n );\n if (group) {\n const relevantMetrics = group.metrics.filter((m) => metricIds.has(m));\n if (relevantMetrics.length > 1) {\n mergedWidget.relevantMetrics = relevantMetrics;\n mergedWidget.counterMetric = group.counter;\n mergedWidget.groupTitle = group.group;\n for (const metricId of relevantMetrics) {\n mergedMetrics.add(metricId);\n metricIds.delete(metricId);\n }\n }\n }\n }\n }\n\n let colorCursor = 0;\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(500px, 1fr))\",\n gap: \"16px\",\n },\n dataset: {\n component: \"dashboard\",\n },\n },\n children: mergedWidgets.map((widget) => {\n const { title, /* type, */ metric, size, precision } = widget;\n const colorCount =\n widget.relevantMetrics?.length ?? (groupField ? 2 : 1);\n const colors = Array.from(\n { length: colorCount },\n (_, i) => COLORS[(colorCursor + i) % COLORS.length]\n );\n colorCursor += colorCount;\n const unit = metric.unit === \"load\" ? \"\" : metric.unit;\n const chart = {\n brick: \"chart-v2.time-series-chart\",\n properties: {\n data: chartData,\n xField: \"time\",\n ...(widget.relevantMetrics\n ? {\n // yFields: widget.relevantMetrics,\n yFields: `<% FN._helper_getMetricDisplayNames((${expression}).displayNameList, ${JSON.stringify(\n widget.relevantMetrics\n )}) %>`,\n }\n : {\n // yField: metric.id,\n yField: `<% FN._helper_getMetricDisplayNames((${expression}).displayNameList, [${JSON.stringify(\n metric.id\n )}])[0] %>`,\n }),\n ...(widget.counterMetric\n ? {\n forceAbsoluteNumbers: true,\n series: {\n [widget.counterMetric]: {\n isNegative: true,\n },\n },\n }\n : null),\n height: size === \"large\" ? 230 : 200,\n timeFormat: \"HH:mm\",\n ...(widget.relevantMetrics || groupField\n ? null\n : {\n areaOptions: {\n style: {\n fill: `l(90) 0:${colors[0]} 1:#ffffff`,\n },\n },\n }),\n axis: {\n yAxis: {\n unit,\n precision,\n ...(widget.counterMetric\n ? null\n : unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : unit === \"percent(100)\" || unit === \"%\"\n ? { min: 0, max: 100 }\n : { min: 0 }),\n shape: \"smooth\",\n },\n },\n groupField,\n areaShape: \"smooth\",\n legends: !!(widget.relevantMetrics || groupField),\n colors: colors,\n tooltip: {\n marker: {\n fill: colors[0],\n stroke: \"#fff\",\n lineWidth: 2,\n shadowColor: colors[0],\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n },\n domStyles: {\n \"g2-tooltip\": {\n background: [\n `radial-gradient( farthest-corner at -20px 150px, ${colors[0]} 0%, rgba(238,238,238,0) 60%)`,\n \"linear-gradient( 180deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0.8) 100%)\",\n ].join(\", \"),\n boxShadow: `0px 4px 8px 0px ${convertHexColorToRGBA(colors[0], 0.08)}`,\n borderRadius: \"8px\",\n border: \"1px solid rgba(255,255,255,1)\",\n backdropFilter: \"blur(3px)\",\n },\n },\n },\n },\n };\n return {\n brick: \"div\",\n properties: {\n style: {\n background: \"rgba(255,255,255,0.8)\",\n boxShadow: \"0px 2px 4px 0px rgba(0,0,0,0.06)\",\n borderRadius: \"8px\",\n padding: \"16px 20px 20px\",\n },\n },\n children: [\n {\n brick: \"div\",\n properties: {\n style: {\n fontSize: \"16px\",\n fontWeight: \"500\",\n marginBottom: \"20px\",\n },\n textContent: widget.groupTitle || title || metric.id,\n },\n },\n chart,\n ],\n };\n }),\n };\n }\n\n if (groupField) {\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<%= FN._helper_groupMetricData(FN._helper_extractList((${expression})), ${JSON.stringify(groupField)}) %>`,\n children: [\n {\n brick: \"div\",\n properties: {\n textContent: \"<% `${ITEM.group}:` %>\",\n style: {\n fontWeight: \"500\",\n },\n },\n },\n {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: \"10px\",\n marginBottom: \"8px\",\n },\n dataset: {\n component: \"dashboard\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: \"<% ITEM.list %>\",\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : { min: 0 }),\n value: `<%= FN._helper_getLatestMetricValue(ITEM.list, ${JSON.stringify(\n {\n metric,\n precision,\n }\n )}) %>`,\n },\n };\n }),\n },\n ],\n },\n ],\n };\n }\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: \"10px\",\n },\n dataset: {\n component: \"dashboard\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: chartData,\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : { min: 0 }),\n value: `<%= FN._helper_getLatestMetricValue((${\n isString\n ? `FN._helper_extractList((${expression}))`\n : JSON.stringify(dataSource ?? null)\n }), ${JSON.stringify({\n metric,\n precision,\n })}) %>`,\n },\n };\n }),\n };\n}\n\nfunction convertHexColorToRGBA(color: string, alpha: number): string {\n const hex = color.slice(1);\n const bigint = parseInt(hex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","let counter = 0;\nconst tplNameMap = new Map<string, string>();\n\nexport function getViewTplName(name: string, rootId: string) {\n return `${getViewTplNamePrefixByRootId(rootId)}${getViewTplNameSuffix(name)}`;\n}\n\nexport function getAppTplName(name: string) {\n return `tpl-${getViewTplNameSuffix(name)}`;\n}\n\nfunction getViewTplNamePrefixByRootId(rootId: string) {\n if (!tplNameMap.has(rootId)) {\n tplNameMap.set(rootId, `isolated-tpl-${counter++}`);\n }\n return tplNameMap.get(rootId)!;\n}\n\nfunction getViewTplNameSuffix(name: string) {\n return name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport {\n isAnyOfficialComponent,\n type ComponentChild,\n type ModulePart,\n type ParsedModule,\n} from \"@next-shared/tsx-parser\";\nimport type { ConvertState, ConvertOptions } from \"./interfaces.js\";\nimport { convertEvents } from \"./convertEvents.js\";\nimport convertList from \"./convertList.js\";\nimport convertTable from \"./convertTable.js\";\nimport convertDescriptions from \"./convertDescriptions.js\";\nimport convertDashboard from \"./convertDashboard.js\";\nimport convertButton from \"./convertButton.js\";\nimport convertForm from \"./convertForm.js\";\nimport convertFormItem from \"./convertFormItem.js\";\nimport convertModal from \"./convertModal.js\";\nimport convertToolbar from \"./convertToolbar.js\";\nimport convertText from \"./convertText.js\";\nimport convertCard from \"./convertCard.js\";\nimport convertForEach from \"./convertForEach.js\";\nimport convertIf from \"./convertIf.js\";\nimport convertOutput from \"./convertOutput.js\";\nimport convertLink from \"./convertLink.js\";\nimport convertTag from \"./convertTag.js\";\nimport convertAvatar from \"./convertAvatar.js\";\nimport convertAvatarGroup from \"./convertAvatarGroup.js\";\nimport convertCodeBlock from \"./convertCodeBlock.js\";\nimport { getAppTplName, getViewTplName } from \"./modules/getTplName.js\";\n\nexport async function convertComponent(\n component: ComponentChild,\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions,\n scope: \"page\" | \"view\" | \"template\"\n): Promise<BrickConf | BrickConf[]> {\n let brick: BrickConf | null = null;\n\n if (isAnyOfficialComponent(component)) {\n const componentName = component.reference\n ? component.reference.name\n : component.name;\n switch (componentName) {\n case \"List\":\n brick = await convertList(component);\n break;\n case \"Table\":\n brick = await convertTable(component, mod, state, options, scope);\n break;\n case \"Descriptions\":\n brick = await convertDescriptions(\n component,\n mod,\n state,\n options,\n scope\n );\n break;\n case \"Card\":\n brick = await convertCard(component);\n break;\n case \"Dashboard\":\n brick = await convertDashboard(component, mod, state, options);\n break;\n case \"Button\":\n brick = await convertButton(component);\n break;\n case \"Form\":\n brick = await convertForm(component);\n break;\n case \"Toolbar\":\n brick = await convertToolbar(component);\n break;\n case \"Modal\":\n brick = await convertModal(component);\n break;\n case \"Plaintext\":\n brick = await convertText(component);\n break;\n case \"Link\":\n brick = await convertLink(component, mod, state);\n break;\n case \"Output\":\n brick = await convertOutput(component);\n break;\n case \"Tag\":\n brick = await convertTag(component);\n break;\n case \"Avatar\":\n brick = await convertAvatar(component);\n break;\n case \"AvatarGroup\":\n brick = await convertAvatarGroup(component);\n break;\n case \"CodeBlock\":\n brick = await convertCodeBlock(component);\n break;\n case \"Search\":\n case \"Input\":\n case \"NumberInput\":\n case \"Textarea\":\n case \"Select\":\n case \"Radio\":\n case \"Checkbox\":\n case \"Switch\":\n case \"DatePicker\":\n case \"TimePicker\":\n brick = await convertFormItem(\n component,\n convertComponentName(component.name)\n );\n break;\n case \"ForEach\":\n brick = await convertForEach(component);\n break;\n case \"If\":\n brick = await convertIf(component);\n break;\n default:\n if (\n (state.app.appType === \"app\" || options.allowAnyBricks) &&\n component.name.toLowerCase() === component.name\n ) {\n // Allow any bricks in app mode or when allowAnyBricks is true\n brick = {\n brick: component.name.replaceAll(\"_\", \".\").replaceAll(\"--\", \".\"),\n properties: component.properties,\n };\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unknown component:\", component.name);\n }\n }\n } else {\n const { type, importSource, name } = component.reference!;\n let refPart: ModulePart | null | undefined;\n if (type === \"imported\") {\n const imported = state.app.modules.get(importSource!);\n refPart = name\n ? imported?.namedExports.get(name)\n : imported?.defaultExport;\n } else {\n const parts = [...mod.internals, ...mod.namedExports.values()];\n refPart = parts.find(\n (part) => part.type === \"template\" && part.component.id?.name === name\n );\n }\n if (refPart?.type === \"template\") {\n const tplName = refPart.component.id!.name;\n brick = {\n brick:\n state.app.appType === \"app\"\n ? getAppTplName(tplName)\n : getViewTplName(tplName, options.rootId),\n properties: component.properties,\n };\n } else {\n // eslint-disable-next-line no-console\n console.error(\n `Cannot find the component \"${component.reference!.name}\".`\n );\n }\n }\n\n if (!brick) {\n return [];\n }\n\n if (component.ref) {\n if (scope === \"template\") {\n (brick as { ref?: string }).ref = component.ref;\n } else {\n brick.properties ??= {};\n brick.properties.dataset ??= {};\n (brick.properties.dataset as Record<string, string>).ref = component.ref;\n }\n }\n\n if (component.slot) {\n brick.slot = component.slot;\n }\n\n brick.events = convertEvents(component, options);\n\n if (component.children?.length) {\n brick.children = (\n await Promise.all(\n component.children.map((child) =>\n convertComponent(child, mod, state, options, scope)\n )\n )\n ).flat();\n\n if (\n (component.name === \"Card\" || component.name === \"Modal\") &&\n brick.children.length > 0\n ) {\n brick.children = [\n {\n brick: \"eo-content-layout\",\n children: brick.children,\n },\n ];\n }\n }\n\n return brick;\n}\n\nfunction convertComponentName(name: string) {\n return name.includes(\"-\")\n ? name\n : `eo${name.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ListProps } from \"../lib/components.js\";\nimport { parseDataSource } from \"./expressions.js\";\n\nexport default function convertList({ properties }: Component): BrickConf {\n const props = properties as Omit<ListProps, \"dataSource\"> & {\n dataSource: string | object;\n };\n\n const { dataSource, fields, variant } = props;\n\n const parsedDataSource = parseDataSource(dataSource);\n\n return {\n brick: \"eo-list\",\n properties: {\n variant,\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n fields,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n Component,\n ParsedModule,\n RenderUseBrick,\n} from \"@next-shared/tsx-parser\";\nimport type { DescriptionsProps } from \"../lib/components.js\";\n// import { convertToStoryboard } from \"./raw-data-generate/convert.js\";\n// import { getPreGeneratedAttrViews } from \"./getPreGeneratedAttrViews.js\";\nimport { parseDataSource } from \"./expressions.js\";\n// import { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { convertComponent } from \"./convertComponent.js\";\nimport { deepReplaceVariables } from \"./deepReplaceVariables.js\";\nimport type { ConvertState, ConvertOptions } from \"./interfaces.js\";\n\ninterface DescriptionItem {\n label: string;\n text?: string;\n field?: string;\n render?: RenderUseBrick;\n}\n\nexport default async function convertDescriptions(\n { properties }: Component,\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions,\n scope: \"page\" | \"view\" | \"template\"\n): Promise<BrickConf> {\n const { dataSource, title, list, columns, ...restProps } =\n properties as Partial<DescriptionsProps<object>> as Omit<\n DescriptionsProps<object>,\n \"list\"\n > & {\n dataSource: string | object;\n list: DescriptionItem[] | string;\n columns?: number;\n };\n\n const parsedDataSource = parseDataSource(dataSource);\n\n // const objectId = findObjectIdByUsedDataContexts(\n // parsedDataSource.usedContexts,\n // view.dataSources,\n // view.variables\n // );\n\n // const attrViews = objectId\n // ? await getPreGeneratedAttrViews(objectId)\n // : undefined;\n\n const configuredItems = new Map<string, BrickConf>();\n\n // if (attrViews?.size && Array.isArray(list)) {\n // for (const item of list) {\n // if (item.render) {\n // continue;\n // }\n // if (item.field) {\n // const candidate = attrViews.get(item.field);\n // if (candidate) {\n // const brick = convertToStoryboard(candidate, item.field);\n // if (brick) {\n // brick.slot = `[${item.field}]`;\n // configuredItems.set(item.field, brick);\n // }\n // }\n // }\n // }\n // }\n\n const convertedList = Array.isArray(list)\n ? await Promise.all(\n list.map(async ({ render, ...item }) => {\n if (render) {\n const patterns = new Map<string, string>();\n if (render.params.length > 0) {\n patterns.set(render.params[0], \"DATA\");\n }\n\n const useBrick = (\n await Promise.all(\n render.children.map((child) =>\n convertComponent(child, mod, state, options, scope)\n )\n )\n ).flatMap((child) => deepReplaceVariables(child, patterns));\n\n return {\n label: item.label,\n useBrick,\n };\n }\n const brick = item.field\n ? configuredItems.get(item.field)\n : undefined;\n return brick\n ? {\n label: item.label,\n useChildren: `[${item.field}]`,\n }\n : item;\n })\n )\n : list;\n\n return {\n brick: \"eo-descriptions\",\n properties: {\n ...restProps,\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n // descriptionTitle: title,\n list: convertedList,\n ...(columns == null\n ? {\n column: options.expanded ? 3 : 1,\n templateColumns: \"repeat(auto-fill,minmax(360px,1fr))\",\n }\n : {\n column: columns,\n }),\n // showCard: !options.expanded,\n themeVariant: \"elevo\",\n },\n children:\n configuredItems.size > 0 ? Array.from(configuredItems.values()) : [],\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { CardProps } from \"../lib/components.js\";\n\nexport default function convertCard(component: Component): BrickConf {\n const { properties } = component;\n const { title, textContent } = properties as CardProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-card\",\n properties: {\n themeVariant: \"elevo\",\n cardTitle: title,\n background: \"#fff\",\n outline: \"background\",\n ...(textContent ? { textContent } : null),\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ButtonProps } from \"../lib/components.js\";\n\nexport default function convertButton(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as ButtonProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-button\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { FormProps } from \"../lib/components.js\";\n\nexport default function convertForm(component: Component): BrickConf {\n const { properties } = component;\n const { values } = (properties ?? {}) as FormProps<object>;\n\n return {\n brick: \"eo-form\",\n properties: {\n values: values ?? {},\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertToolbar(_component: Component): BrickConf {\n return {\n brick: \"eo-flex-layout\",\n properties: {\n gap: \"0.5em\",\n alignItems: \"center\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ModalProps } from \"../lib/components.js\";\n\nexport default function convertModal(component: Component): BrickConf {\n const { properties } = component;\n const { title, confirmText, cancelText, ...restProps } =\n properties as Partial<ModalProps> & {\n textContent?: string;\n };\n return {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n themeVariant: \"elevo\",\n modalTitle: title,\n confirmText: confirmText,\n cancelText: cancelText,\n keyboard: true,\n ...restProps,\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertText(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as {\n textContent?: string;\n };\n return {\n brick: \"span\",\n properties: {\n ...props,\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ParsedModule } from \"@next-shared/tsx-parser\";\nimport type { LinkProps } from \"../lib/components.js\";\nimport type { ConvertState } from \"./interfaces.js\";\n\nexport default function convertLink(\n component: Component,\n mod: ParsedModule,\n state: ConvertState\n): BrickConf {\n const { properties } = component;\n const props = properties as LinkProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-link\",\n properties: {\n ...props,\n inApp: state.app.appType === \"app\",\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertOutput(component: Component): BrickConf {\n const { properties } = component;\n const { style, ...restProps } = properties as {\n textContent?: string;\n style?: Record<string, any>;\n };\n\n return {\n brick: \"pre\",\n properties: {\n style: {\n background: \"hsl(230, 1%, 98%)\",\n color: \"hsl(230, 8%, 24%)\",\n fontFamily:\n '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n direction: \"ltr\",\n textAlign: \"left\",\n whiteSpace: \"pre\",\n wordSpacing: \"normal\",\n wordBreak: \"normal\",\n lineHeight: \"1.5\",\n tabSize: \"2\",\n hyphens: \"none\",\n fontSize: \"13px\",\n\n padding: \"1em\",\n // margin: \"0.5em 0\",\n margin: \"0\",\n overflowX: \"auto\",\n borderRadius: \"9px\",\n ...style,\n },\n ...restProps,\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { TagProps } from \"../lib/components.js\";\n\nexport default function convertTag(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as TagProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-tag\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { AvatarProps } from \"../lib/components.js\";\n\nexport default function convertAvatar(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as AvatarProps;\n return {\n brick: \"eo-avatar\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { AvatarGroupProps } from \"../lib/components.js\";\n\nexport default function convertAvatarGroup(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as AvatarGroupProps;\n return {\n brick: \"eo-avatar-group\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { CodeBlockProps } from \"../lib/components.js\";\n\nexport default function convertCodeBlock(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as Partial<CodeBlockProps>;\n return {\n brick: \"eo-code-block\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertFormItem(\n component: Component,\n type: string\n): BrickConf {\n const { properties } = component;\n\n let brick = type;\n let props: Record<string, unknown> = {\n ...properties,\n themeVariant: \"elevo\",\n };\n\n switch (brick) {\n case \"eo-search\":\n props = {\n ...props,\n trim: true,\n };\n break;\n case \"eo-number-input\":\n brick = \"eo-input\";\n props = {\n type: \"number\",\n ...props,\n };\n break;\n }\n\n return {\n brick,\n properties: props,\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertForEach(component: Component): BrickConf {\n const { properties } = component;\n const { dataSource } = properties as {\n dataSource?: unknown;\n };\n return {\n brick: \":forEach\",\n dataSource,\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertIf(component: Component): BrickConf {\n const { properties } = component;\n const { dataSource } = properties as {\n dataSource?: unknown;\n };\n return {\n brick: \":if\",\n dataSource,\n };\n}\n","import type { BrickConf, ContextConf } from \"@next-core/types\";\nimport {\n isOfficialComponent,\n type ComponentChild,\n type ModulePart,\n type ModulePartOfFunction,\n type ParsedModule,\n} from \"@next-shared/tsx-parser\";\nimport { convertDataSource } from \"./convertDataSource.js\";\nimport { convertComponent } from \"../convertComponent.js\";\nimport type { ConvertState, ConvertOptions } from \"../interfaces.js\";\n\nexport interface ConvertedModule {\n sourceModule: ParsedModule;\n defaultExport: ConvertedPart | null;\n namedExports: Map<string, ConvertedPart>;\n internals: ConvertedPart[];\n}\n\nexport type ConvertedPart = ConvertedPartOfComponent | ModulePartOfFunction;\n\nexport interface ConvertedPartOfComponent {\n type: \"page\" | \"view\" | \"template\";\n bricks: BrickConf[];\n context: ContextConf[];\n name?: string;\n title?: string;\n}\n\nexport default async function convertModule(\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions\n): Promise<ConvertedModule> {\n if (mod.usedHelpers.size > 0) {\n for (const helper of mod.usedHelpers) {\n state.usedHelpers.add(helper);\n }\n }\n\n const [defaultExport, namedExports, internals] = await Promise.all([\n mod.defaultExport\n ? parseModulePart(mod.defaultExport, mod, state, options)\n : null,\n Promise.all(\n Array.from(mod.namedExports.entries()).map(\n async ([name, part]) =>\n [name, await parseModulePart(part, mod, state, options)] as [\n string,\n ConvertedPart,\n ]\n )\n ).then((entries) => new Map(entries)),\n Promise.all(\n mod.internals.map((part) => parseModulePart(part, mod, state, options))\n ),\n ]);\n\n return {\n sourceModule: mod,\n defaultExport,\n namedExports,\n internals,\n };\n}\n\nasync function parseModulePart(\n part: ModulePart,\n mod: ParsedModule,\n state: ConvertState,\n options: ConvertOptions\n): Promise<ConvertedPart> {\n if (part.type === \"function\") {\n return part;\n }\n\n const context: ContextConf[] = [];\n\n const { component } = part;\n\n for (const binding of component.bindingMap.values()) {\n if (binding.kind === \"resource\") {\n context.push(convertDataSource(binding.resource!));\n } else if (\n binding.kind === \"state\" ||\n binding.kind === \"constant\" ||\n binding.kind === \"param\"\n ) {\n context.push({\n name: binding.id.name,\n value: binding.initialValue,\n expose: binding.kind === \"param\",\n track: true,\n });\n }\n }\n\n let children: ComponentChild[] | undefined;\n if (part.type === \"view\") {\n const view = component.children?.find((child) =>\n isOfficialComponent(child, \"View\")\n );\n if (view) {\n children = view.children;\n }\n } else {\n children = component.children;\n }\n\n const bricks = children?.length\n ? (\n await Promise.all(\n children.map((child) =>\n convertComponent(child, mod, state, options, part.type)\n )\n )\n ).flat()\n : [];\n\n return {\n type: part.type,\n bricks,\n context,\n name: component.id?.name,\n title: part.title,\n };\n}\n","import mergeTexts from \"../../../src/helpers/mergeTexts.ts?raw\";\nimport getLatestMetricValue from \"../../../src/helpers/getLatestMetricValue.ts?raw\";\nimport extractList from \"../../../src/helpers/extractList.ts?raw\";\nimport groupMetricData from \"../../../src/helpers/groupMetricData.ts?raw\";\nimport getMetricDisplayNames from \"../../../src/helpers/getMetricDisplayNames.ts?raw\";\n\nlet helperFunctions: Map<string, string> | undefined;\n\nexport function getHelperFunctions() {\n if (!helperFunctions) {\n helperFunctions = new Map([\n [\"_helper_mergeTexts\", fixFunctionSource(mergeTexts)],\n [\"_helper_getLatestMetricValue\", fixFunctionSource(getLatestMetricValue)],\n [\"_helper_extractList\", fixFunctionSource(extractList)],\n [\"_helper_groupMetricData\", fixFunctionSource(groupMetricData)],\n [\n \"_helper_getMetricDisplayNames\",\n fixFunctionSource(getMetricDisplayNames),\n ],\n ]);\n }\n return helperFunctions;\n}\n\nfunction fixFunctionSource(source: string): string {\n return source.replace(/^export /m, \"\").replace(/^import [^\\n]+\\n/gm, \"\");\n}\n","import { BrickConf } from \"@next-core/types\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\nexport function withBox(\n children: BrickConf[] | undefined,\n options: ConvertOptions\n): BrickConf {\n return {\n brick: \"div\",\n properties: {\n style: options.expanded\n ? {\n background: \"rgba(255, 255, 255, 0.9)\",\n backdropFilter: \"blur(10px)\",\n borderRadius: \"16px\",\n padding: \"24px\",\n }\n : {\n background: \"var(--elevo-component-background)\",\n backdropFilter: \"var(--elevo-component-backdrop-filter)\",\n borderRadius: \"var(--elevo-border-radius)\",\n padding: \"16px\",\n },\n },\n children,\n };\n}\n","import type {\n BrickConfInTemplate,\n CustomTemplate,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport type { ParsedApp } from \"@next-shared/tsx-parser\";\nimport convertModule, {\n type ConvertedModule,\n type ConvertedPartOfComponent,\n} from \"./convertModule.js\";\nimport type {\n ConvertState,\n ConvertOptions,\n ConvertResult,\n} from \"../interfaces.js\";\nimport { getHelperFunctions } from \"../helpers/index.js\";\nimport { getViewTplName } from \"./getTplName.js\";\nimport { withBox } from \"../withBox.js\";\n\nexport async function convertView(\n view: ParsedApp,\n options: ConvertOptions\n): Promise<ConvertResult> {\n const { entry } = view;\n if (!entry) {\n throw new Error(\"No entry module found in the view.\");\n }\n\n let convertedEntry: ConvertedModule | undefined;\n const convertedModules = new Map<string, ConvertedModule>();\n const state: ConvertState = {\n usedHelpers: new Set(),\n app: view,\n };\n\n const functions: StoryboardFunction[] = [];\n const templates: CustomTemplate[] = [];\n\n await Promise.all(\n Array.from(view.modules).map(async ([filePath, mod]) => {\n if (mod) {\n const converted = await convertModule(mod, state, options);\n convertedModules.set(filePath, converted);\n if (mod === entry) {\n convertedEntry = converted;\n }\n for (const part of [\n ...converted.internals,\n ...converted.namedExports.values(),\n converted.defaultExport,\n ]) {\n switch (part?.type) {\n case \"function\":\n functions.push(part.function);\n break;\n case \"template\":\n templates.push({\n name: getViewTplName(part.name!, options.rootId),\n bricks: part.bricks as BrickConfInTemplate[],\n state: part.context,\n });\n break;\n }\n }\n }\n })\n );\n\n if (!convertedEntry?.defaultExport) {\n throw new Error(\"No view found in the entry module.\");\n }\n\n const helpers = Array.from(state.usedHelpers).map<StoryboardFunction>(\n (name) => {\n const source = getHelperFunctions().get(name);\n if (!source) {\n throw new Error(`Helper function ${name} not found`);\n }\n return {\n name,\n source,\n typescript: true,\n };\n }\n );\n\n const { title, bricks, context } =\n convertedEntry.defaultExport as ConvertedPartOfComponent;\n\n const needBox = () =>\n bricks.every((brick) =>\n [\"eo-form\", \"eo-descriptions\", \"eo-button\"].includes(brick.brick)\n );\n\n return {\n title,\n brick: options.withoutWrapper\n ? bricks\n : {\n brick: \"eo-content-layout\",\n children: needBox() ? [withBox(bricks, options)] : bricks,\n },\n context: [\n ...context,\n ...(options.withContexts\n ? Object.entries(options.withContexts).map(([name, value]) => ({\n name,\n value,\n }))\n : []),\n ],\n functions: [...functions, ...helpers],\n templates,\n };\n}\n"],"names":["createPortal","rootId","portal","document","createElement","dataset","style","position","width","height","body","append","remoteWorkerPromise","worker","getRemoteTsxParserWorker","Remote","wrap","Worker","URL","MODULE_SOURCE","EXPRESSION_PREFIX_REG","EXPRESSION_SUFFIX_REG","isAnyOfficialComponent","child","reference","type","importSource","convertDataSource","resource","name","http","api","params","tool","transform","rejectTransform","config","scope","hasEnabled","Object","prototype","hasOwnProperty","call","resolve","useProvider","args","isObject","translate","limit","undefined","limitBy","order","displayName","value","onReject","if","enabled","track","fallback","expose","convertEventHandlers","handler","options","list","Array","isArray","map","hdl","_convertEventHandlers","action","payload","_handler$callback","success","callback","error","targetRef","ref","target","method","content","detail","test","then","consequent","else","alternate","convertEventHandler","filter","Boolean","length","parseDataSource","data","isString","expression","expr","trim","replace","console","warn","JSON","stringify","embedded","usedContexts","strictCollectMemberUsage","deepReplaceVariables","patterns","size","item","fromEntries","entries","_ref","k","v","trimmed","isExpressionString","keys","some","includes","replacements","result","preevaluate","withParent","hooks","beforeVisitGlobal","node","path","has","_ref2","p","shorthand","computed","push","id","prefix","source","suffix","chunks","prevStart","i","start","end","substring","get","join","replaceVariables","columnUseBrickParams","COLORS","convertHexColorToRGBA","color","alpha","hex","slice","bigint","parseInt","counter","tplNameMap","Map","getViewTplName","set","getViewTplNamePrefixByRootId","getViewTplNameSuffix","getAppTplName","toLowerCase","async","convertComponent","component","mod","state","_component$children","brick","properties","props","dataSource","fields","variant","parsedDataSource","themeVariant","convertList","_columns$","columns","rowKey","pagination","restProps","configuredColumns","convertedColumns","Promise","all","render","column","useBrick","children","flatMap","startsWith","dataIndex","useChildren","key","scrollConfig","x","expanded","bordered","from","values","convertTable","title","configuredItems","convertedList","label","field","templateColumns","convertDescriptions","textContent","cardTitle","background","outline","convertCard","groupField","_groupField","widgets","usedHelpers","add","chartData","mergedWidgets","metricGroups","mergedMetrics","Set","metricIds","w","metric","widget","mergedWidget","group","find","g","metrics","relevantMetrics","m","counterMetric","groupTitle","metricId","delete","colorCursor","display","gridTemplateColumns","gap","_widget$relevantMetri","_widget$relevantMetri2","precision","colorCount","colors","_","unit","chart","xField","yFields","yField","forceAbsoluteNumbers","series","isNegative","timeFormat","areaOptions","fill","axis","yAxis","min","max","shape","areaShape","legends","tooltip","marker","stroke","lineWidth","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","domStyles","boxShadow","borderRadius","border","backdropFilter","padding","fontSize","fontWeight","marginBottom","flexDirection","lineColor","showArea","convertDashboard","convertButton","convertForm","alignItems","confirmText","cancelText","modalTitle","keyboard","convertModal","convertText","inApp","app","appType","convertLink","fontFamily","direction","textAlign","whiteSpace","wordSpacing","wordBreak","lineHeight","tabSize","hyphens","margin","overflowX","convertOutput","convertTag","convertAvatar","convertAvatarGroup","convertCodeBlock","convertFormItem","convertForEach","convertIf","allowAnyBricks","replaceAll","_refPart","refPart","imported","modules","namedExports","defaultExport","internals","part","_part$component$id","tplName","_brick","_brick$properties","_brick$properties2","_brick$properties2$da","slot","events","event","_component$events","click","search","convertEvents","flat","parseModulePart","_children","_component$id","context","binding","bindingMap","kind","initialValue","view","isOfficialComponent","bricks","helperFunctions","fixFunctionSource","withBox","convertView","_convertedEntry","entry","Error","convertedEntry","convertedModules","functions","templates","filePath","converted","helper","sourceModule","convertModule","function","helpers","mergeTexts","getLatestMetricValue","extractList","groupMetricData","getMetricDisplayNames","typescript","withoutWrapper","every","withContexts"],"sourceRoot":""}
|