@next-bricks/vb-experiment 1.3.16 → 1.3.17
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 +1 -1
- package/dist/chunks/1469.1099f419.js +2 -0
- package/dist/chunks/1469.1099f419.js.map +1 -0
- package/dist/chunks/{2857.bfd7ab6b.js → 2857.da8e603e.js} +2 -2
- package/dist/chunks/2857.da8e603e.js.map +1 -0
- package/dist/chunks/7131.ed1c7310.js +2 -0
- package/dist/chunks/7131.ed1c7310.js.map +1 -0
- package/dist/chunks/app-playground.57f8b0b2.js +2 -0
- package/dist/chunks/app-playground.57f8b0b2.js.map +1 -0
- package/dist/chunks/{main.5eb0373c.js → main.0ecb65a5.js} +2 -2
- package/dist/chunks/{main.5eb0373c.js.map → main.0ecb65a5.js.map} +1 -1
- package/dist/chunks/tsx-playground.afd56710.js +2 -0
- package/dist/chunks/tsx-playground.afd56710.js.map +1 -0
- package/dist/{index.b762a597.js → index.ab859801.js} +2 -2
- package/dist/{index.b762a597.js.map → index.ab859801.js.map} +1 -1
- package/dist/manifest.json +13 -0
- package/dist/types.json +27 -0
- package/dist-types/tsx-playground/index.d.ts +7 -0
- package/package.json +2 -2
- package/dist/chunks/1469.083be8f8.js +0 -2
- package/dist/chunks/1469.083be8f8.js.map +0 -1
- package/dist/chunks/2857.bfd7ab6b.js.map +0 -1
- package/dist/chunks/4154.371b28c0.js +0 -2
- package/dist/chunks/4154.371b28c0.js.map +0 -1
- package/dist/chunks/app-playground.0745e311.js +0 -2
- package/dist/chunks/app-playground.0745e311.js.map +0 -1
- package/dist/chunks/tsx-playground.edb19559.js +0 -2
- package/dist/chunks/tsx-playground.edb19559.js.map +0 -1
package/dist/bricks.json
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_next_bricks_vb_experiment=globalThis.webpackChunk_next_bricks_vb_experiment||[]).push([[1469],{1469:(e,t,n)=>{var r=n(7019),i=n(2461),o=n.n(i),s=n(5060),a=n(2408),l=n(1914),c=n(3242),u=n(77),p=n(4437),d=n(6337),m=n(1672),f=n(743),h=n(7577),g=n(2582),w=n(535),x=n(4215),y=n(1330),v=n(3812),b=n(1259),A=n(1895),k=n(6414),E=n(7585),_=n(6357),j=n(7837);async function N(e){let{typescript:t,semi:n=!0,printWidth:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await(0,a.GP)(e,{parser:t?"babel-ts":"babel",plugins:[l,c],semi:n,printWidth:r,trailingComma:"es5"})}async function S(e,t,n){for(const r of e){const e=[...n,r.name];if("folder"===r.type){const n=t.folder(r.name);await S(r.items,n,e)}else t.file(`${r.name}.js${"routes"===r.nodeType||"bricks"===r.nodeType||"template"===r.nodeType?"x":""}`,await N((0,m.c)(r.node,r.nodeType,e)))}}function L(e){for(const[t,n]of Object.entries(e))switch(t){case"items":if(Array.isArray(n))for(const e of n)$(e);break;case"type":"main"===n&&delete e[t];break;case"if":break;case"i18n":0===Object.keys(n).length&&delete e[t];break;default:null!==n&&!1!==n||delete e[t]}}function $(e){for(const[t,n]of Object.entries(e))switch(t){case"children":Array.isArray(n)&&n.length>0&&$(n);break;case"if":break;case"activeExcludes":case"activeIncludes":Array.isArray(n)&&0===n.length&&delete e[t];break;default:null!==n&&!1!==n||delete e[t]}}customElements.define("vb-experiment.export-as-source-files",(0,r.createProviderClass)((async function(e){var t,n,r,i,a,l;let{projectDetail:c,storyboard:$}=e;const C=new(o()),M=C.folder("project"),T=M.folder("src"),W={extracts:[],namePool:new Map},P=(0,p.WM)($.routes,[],W),R={id:c.appId,name:c.name,homepage:c.appSetting.homepage,layoutType:c.appSetting.layoutType,theme:c.appSetting.theme,noAuthGuard:c.appSetting.noAuthGuard,locales:c.appSetting.locales,defaultConfig:JSON.parse(c.appSetting.defaultConfig||"{}"),menuIcon:JSON.parse(c.appSetting.icon||"null"),standaloneMode:!0};T.file("app.js",await N(`export default ${JSON.stringify(R,null,2)};`));const I=null!==(t=$.meta)&&void 0!==t?t:{},B=null!==(n=I.customTemplates)&&void 0!==n?n:[],O=null!==(r=I.functions)&&void 0!==r?r:[],F=null!==(i=I.menus)&&void 0!==i?i:[],D=null!==(a=I.contracts)&&void 0!==a?a:[],H=null!==(l=I.i18n)&&void 0!==l?l:{};delete I.customTemplates,delete I.functions,delete I.menus,delete I.contracts,delete I.i18n,delete I.workflows,delete I.mocks,delete I.userGroups;const J=(0,p.pA)(B,["components"],W);W.extracts.push({name:"index",path:["components"],node:J,nodeType:"others"});const V=(0,d._)(W.extracts);T.file("index.js",h),T.file("routes.jsx",await N((0,m.c)(P,"routes",["routes.jsx"])));const z=T.folder("resources"),q=z.folder("functions"),G=[],U=[];for(const e of O){if("index"===e.name)throw new Error('Unexpected function name: "index"');const t=new Set;let{code:n}=(0,u.transform)(e.source,{filename:"expr."+(e.typescript?"ts":"js"),plugins:[...e.typescript?["syntax-typescript"]:[],_.A,[j.A,{imports:t}]]});const r=t.has("FN");r&&t.delete("FN");const i=[];t.size>0&&i.push(`import { ${[...t].join(", ")} } from "next-jsx/runtime";`),r&&i.push('import FN from "./index.js";'),i.length>0&&(n=`${i.join("\n")}\n\n${n}`),q.file(`${e.name}.${e.typescript?"ts":"js"}`,n),U.push(`import ${e.name} from "./${e.name}.js";`),G.push(e.name)}q.file("index.js",await N(`${U.join("\n")}\n\nconst FN = { ${G.join(",")} };\n\nexport default FN;`));const X=z.folder("menus"),Z=[],Y=[];for(const e of F){if(L(e),"index"===e.menuId)throw new Error('Unexpected menu id: "index"');const t=`${e.menuId}.js`;X.file(t,await N((0,m.c)(e,"menu",["resources","menus",t])));let n=e.menuId.replace(/^\d+|[^\w]+/g,"_");E.bB.has(n)&&(n=`${n}__2`),Y.push(`import ${n} from "./${t}";`),Z.push(n)}X.file("index.js",await N(`${Y.join("\n")}\n\nexport default [${Z.join(",")}]`));const K=z.folder("contracts"),Q=[],ee=new Set;for(const e of D){const t=e.name.replace(/^\d+|[^\w]+/g,"_");let n=2,r=t;for(;ee.has(r)||E.bB.has(r)||"index"===r;)r=`${t}_${n++}`;ee.add(r),K.file(`${r}.js`,await N(`export default ${JSON.stringify(e)};`)),Q.push(`import ${r} from "./${r}.js";`)}K.file("index.js",await N(`${Q.join("\n")}\n\nexport default [${[...ee].join(",")}]`)),z.folder("i18n").file("index.js",await N(`export default ${JSON.stringify(H)};`)),z.file("meta.js",await N(`export default ${JSON.stringify(I,null,2)};`)),z.file("index.js",f),await S(V,T,[]),M.folder("mock-micro-apps").folder(c.appId).file(".gitignore","*\n!.gitignore"),M.file(".editorconfig",g),M.file(".gitignore",w),M.file("dev.config.mjs",y),M.file("declarations.d.ts",x),M.file("jsconfig.json",v),M.file("next-jsx.config.js",b.replaceAll("__APP_ID__",c.appId)),M.file("package.json",A.replaceAll("__APP_ID__",c.appId)),M.file("README.md",k.replaceAll("__PROJECT_NAME__",c.name).replaceAll("__PROJECT_HOMEPAGE__",c.appSetting.homepage));const te=await C.generateAsync({type:"blob"});(0,s.saveAs)(te,"project.zip")}))),customElements.define("vb-experiment.export-widgets",(0,r.createProviderClass)((async function(e){let{name:t,files:n}=e;const r=new Map,i=new(o()),a=i.folder("widgets").folder(t);for(const{path:e,content:t}of n){const n=e.split("/"),i=n.pop();let o=a,s=1;for(const e of n){const t=n.slice(0,s).join("/"),i=r.get(t);i?o=i:(o=o.folder(e),r.set(t,o)),s++}o.file(i,t)}const l=await i.generateAsync({type:"blob"});(0,s.saveAs)(l,`${t}.zip`)})));var C=n(4635),M=n(918),T=n(6902),W=n(5536),P=n(6121),R=n(829),I=n(2740),B=n(8769),O=n.n(B),F=n(870),D=n(348),H=n(981),J=n(709),V=n(563),z=n(5146),q=n(2518),G=n(6806);let U;function X(e){return e.replace(/^export /m,"").replace(/^import [^\n]+\n/gm,"")}var Z=n(3808);function Y(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}}n(4419);var K=n(2591),Q=n.n(K),ee=n(1740),te=n.n(ee),ne=n(8128),re=n.n(ne),ie=n(855),oe=n.n(ie),se=n(3051),ae=n.n(se),le=n(3656),ce=n.n(le),ue=n(8957),pe={};pe.styleTagTransform=ce(),pe.setAttributes=oe(),pe.insert=re().bind(null,"head"),pe.domAPI=te(),pe.insertStyleElement=ae(),Q()(ue.A,pe);const de=ue.A&&ue.A.locals?ue.A.locals:void 0;var me,fe=n(1746);let he,ge,we,xe,ye,ve,be,Ae,ke,Ee,_e,je,Ne,Se,Le;const $e=O().lazy((async()=>({default:await(0,J.asyncWrapBrick)("vs.code-editor",{onCodeChange:"code.change"})}))),Ce=[{filePath:"/node_modules/next-tsx/components.d.ts",content:q.replaceAll("export interface","interface")},{filePath:"/node_modules/next-tsx/package.json",content:JSON.stringify({name:"next-tsx",types:"./index.d.ts"})},{filePath:"/node_modules/next-tsx/index.d.ts",content:z}],{defineElement:Me,property:Te,event:We}=(0,F.createDecorators)();let Pe;var Re=new WeakMap,Ie=new WeakMap,Be=new WeakMap,Oe=new WeakMap,Fe=new WeakMap,De=new WeakMap,He=new WeakSet,Je=new WeakMap;class Ve extends H.ReactNextElement{constructor(){super(...arguments),(0,C.A)(this,He),(0,M.A)(this,Re,ge(this)),(0,M.A)(this,Ie,(we(this),xe(this))),(0,M.A)(this,Be,(ye(this),ve(this))),(0,M.A)(this,Oe,(be(this),Ae(this))),(0,M.A)(this,Fe,(ke(this),Ee(this))),(0,M.A)(this,De,(_e(this),je(this))),(0,M.A)(this,Je,(Le(this),e=>{var t;null===(t=(0,W.A)(He,this,Ne))||void 0===t||t.emit(e)}))}get source(){return(0,R.A)(Re,this)}set source(e){(0,P.A)(Re,this,e)}get extraLibs(){return(0,R.A)(Ie,this)}set extraLibs(e){(0,P.A)(Ie,this,e)}get viewLibs(){return(0,R.A)(Be,this)}set viewLibs(e){(0,P.A)(Be,this,e)}get withoutWrapper(){return(0,R.A)(Oe,this)}set withoutWrapper(e){(0,P.A)(Oe,this,e)}get allowAnyBricks(){return(0,R.A)(Fe,this)}set allowAnyBricks(e){(0,P.A)(Fe,this,e)}render(){return O().createElement(qe,{source:this.source,extraLibs:this.extraLibs,viewLibs:this.viewLibs,withoutWrapper:this.withoutWrapper,allowAnyBricks:this.allowAnyBricks,onChange:(0,R.A)(Je,this)})}}function ze(e){switch(e){case"notice":return"Hint";case"warning":return"Warning";case"error":case"fatal":return"Error"}return e}function qe(e){let{source:t,extraLibs:n,withoutWrapper:r,allowAnyBricks:i,viewLibs:o,onChange:s}=e;const[a,l]=(0,B.useState)(null!=t?t:""),c=(0,B.useDeferredValue)(a),[u,p]=(0,B.useState)(),[d,m]=(0,B.useState)(),f=(0,B.useMemo)((()=>[...Ce,...null!=n?n:[],...null!=o?o:[]]),[n,o]),h=(0,B.useCallback)((e=>{l(e.detail),s(e.detail)}),[s]);(0,B.useEffect)((()=>{let e=!1;return async function(){const t=await(0,fe.f)();if(e)return;const n=await t.parseView(c,{libs:o});if(e)return;m(n);const r=n.errors.filter((e=>!!e.node));r.length>0?p(r.map((e=>({message:e.message,severity:ze(e.severity),startLineNumber:e.node.loc.start.line,startColumn:e.node.loc.start.column+1,endLineNumber:e.node.loc.end.line,endColumn:e.node.loc.end.column+1})))):p(void 0)}(),()=>{e=!0}}),[c]);const g=(0,B.useMemo)((()=>(0,V.uniqueId)()),[]),w=(0,B.useRef)(null),x=(0,B.useRef)(null);return(0,B.useEffect)((()=>{const e=w.current;if(!e)return;const t=function(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}(g),n=(0,D.unstable_createRoot)(e,{portal:t,supportsUseChildren:!0});return x.current=n,()=>{n.unmount(),t.remove(),x.current=null}}),[g]),(0,B.useEffect)((()=>{let e=!1;return(async()=>{if(!d)return;let t;try{var n;if(t=await async function(e,t){var n;const{entry:r}=e;if(!r)throw new Error("No entry module found in the view.");let i;const o=new Map,s={usedHelpers:new Set,app:e},a=[],l=[];if(await Promise.all(Array.from(e.modules).map((async e=>{let[n,c]=e;if(c){const e=await(0,G.A)(c,s,t);o.set(n,e),c===r&&(i=e);for(const n of[...e.internals,...e.namedExports.values(),e.defaultExport])switch(null==n?void 0:n.type){case"function":a.push(n.function);break;case"template":l.push({name:(0,Z.$)(n.name,t.rootId),bricks:n.bricks,state:n.context})}}}))),null===(n=i)||void 0===n||!n.defaultExport)throw new Error("No view found in the entry module.");const c=Array.from(s.usedHelpers).map((e=>{const t=(U||(U=new Map([["_helper_mergeTexts",X('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')],["_helper_getLatestMetricValue",X('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')],["_helper_extractList",X("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")],["_helper_groupMetricData",X("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")],["_helper_getMetricDisplayNames",X("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")]])),U).get(e);if(!t)throw new Error(`Helper function ${e} not found`);return{name:e,source:t,typescript:!0}})),{title:u,bricks:p,context:d}=i.defaultExport;return{title:u,brick:t.withoutWrapper?p:{brick:"eo-content-layout",children:p.every((e=>["eo-form","eo-descriptions","eo-button"].includes(e.brick)))?[Y(p,t)]:p},context:[...d,...t.withContexts?Object.entries(t.withContexts).map((e=>{let[t,n]=e;return{name:t,value:n}})):[]],functions:[...a,...c],templates:l}}(d,{rootId:g,expanded:!0,withoutWrapper:r,allowAnyBricks:i}),e)return;const{brick:o,context:s,functions:a,templates:l}=null!=t?t:{};await(null===(n=x.current)||void 0===n?void 0:n.render(null!=o?o:[],{context:s,functions:a,templates:l}))}catch(e){var o;console.error("Failed to render view:",e),null===(o=x.current)||void 0===o||o.render({brick:customElements.get("easyops-default-error")?"easyops-default-error":"div",properties:{errorTitle:"解析失败",dataset:{errorBoundary:""},style:{color:"var(--color-error)"}},children:[{brick:"div",properties:{textContent:(0,D.httpErrorToString)(e)}}]})}})(),()=>{e=!0}}),[g,d,r,i]),O().createElement("div",{className:de.container},O().createElement("div",{className:de.editor},O().createElement(B.Suspense,{fallback:"Loading..."},O().createElement($e,{value:t,onCodeChange:h,language:"typescript",uri:"file:///View.tsx",automaticLayout:"fit-container",theme:"tm-vs-dark",extraLibs:f,extraMarkers:u,"data-override-theme":"dark-v2"}))),O().createElement("div",{className:de.preview},O().createElement("div",{"data-root-id":g,ref:w})))}me=Ve,({e:[ge,we,xe,ye,ve,be,Ae,ke,Ee,_e,je,Ne,Se,Le],c:[Pe,he]}=(0,I.A)(me,[Me("vb-experiment.tsx-playground",{shadowOptions:!1})],[[Te({attribute:!1}),1,"source"],[Te({attribute:!1}),1,"extraLibs"],[Te({attribute:!1}),1,"viewLibs"],[Te({type:Boolean}),1,"withoutWrapper"],[Te({type:Boolean}),1,"allowAnyBricks"],[We({type:"change"}),1,"change",e=>(0,R.A)(De,e),(e,t)=>(0,P.A)(De,e,t)]],0,(e=>Je.has((0,T.A)(e))),H.ReactNextElement)),he();var Ge,Ue=n(4504);let Xe,Ze,Ye;const{defineElement:Ke,property:Qe}=(0,F.createDecorators)();let et;var tt=new WeakMap;class nt extends H.ReactNextElement{constructor(){super(...arguments),(0,M.A)(this,tt,Ze(this)),Ye(this)}get storyboard(){return(0,R.A)(tt,this)}set storyboard(e){(0,P.A)(tt,this,e)}render(){return O().createElement(rt,{storyboard:this.storyboard})}}function rt(e){let{storyboard:t}=e;const n=(0,B.useRef)(null),[r,i]=(0,B.useState)(null),o=(0,B.useCallback)((()=>{const e=()=>{var t;const r=null===(t=n.current)||void 0===t||null===(t=t.contentWindow)||void 0===t?void 0:t._preview_only_appPreviewer;r?i(r):setTimeout(e,100)};e()}),[]),s=(0,B.useRef)(null);return(0,B.useEffect)((()=>{if(!r||!t)return;const e={id:"lab-app-preview",name:"Lab: App Preview",homepage:"/lab-app-preview"};if(s.current){let n=!1;return s.current.then((()=>{n||(r.update(e.id,{...t,app:e}),r.reload())})),()=>{n=!0}}s.current=r.setup({brickPackages:D.__secret_internals.getBrickPackages(),storyboards:[{...t,app:e}]},e.homepage)}),[r,t]),O().createElement("div",{className:"container"},O().createElement("iframe",{ref:n,src:`${(0,D.getBasePath)()}lab/?_experimental_app_preview_=1`,loading:"lazy",onLoad:o}))}Ge=nt,({e:[Ze,Ye],c:[et,Xe]}=(0,I.A)(Ge,[Ke("vb-experiment.app-preview",{styleTexts:[Ue.A]})],[[Qe({attribute:!1}),1,"storyboard"]],0,void 0,H.ReactNextElement)),Xe();var it=n(2826),ot=n(3303),st=n(4373),at={};at.styleTagTransform=ce(),at.setAttributes=oe(),at.insert=re().bind(null,"head"),at.domAPI=te(),at.insertStyleElement=ae(),Q()(st.A,at);const lt=st.A&&st.A.locals?st.A.locals:void 0;var ct;let ut,pt,dt,mt,ft,ht,gt,wt,xt;const yt=O().lazy((async()=>({default:await(0,J.asyncWrapBrick)("vs.code-editor",{onCodeChange:"code.change"})}))),vt=(0,H.wrapBrick)("vb-experiment.app-preview"),bt=[{filePath:"/node_modules/next-tsx/components.d.ts",content:q.replaceAll("export interface","interface")},{filePath:"/node_modules/next-tsx/package.json",content:JSON.stringify({name:"next-tsx",types:"./index.d.ts"})},{filePath:"/node_modules/next-tsx/index.d.ts",content:z}],{defineElement:At,property:kt,event:Et}=(0,F.createDecorators)();let _t;var jt=new WeakMap,Nt=new WeakMap,St=new WeakMap,Lt=new WeakSet,$t=new WeakMap;class Ct extends H.ReactNextElement{constructor(){super(...arguments),(0,C.A)(this,Lt),(0,M.A)(this,jt,pt(this)),(0,M.A)(this,Nt,(dt(this),mt(this))),(0,M.A)(this,St,(ft(this),ht(this))),(0,M.A)(this,$t,(xt(this),e=>{var t;null===(t=(0,W.A)(Lt,this,gt))||void 0===t||t.emit(e)}))}get source(){return(0,R.A)(jt,this)}set source(e){(0,P.A)(jt,this,e)}get extraLibs(){return(0,R.A)(Nt,this)}set extraLibs(e){(0,P.A)(Nt,this,e)}render(){return O().createElement(Tt,{source:this.source,extraLibs:this.extraLibs,onChange:(0,R.A)($t,this)})}}function Mt(e){switch(e){case"notice":return"Hint";case"warning":return"Warning";case"error":case"fatal":return"Error"}return e}function Tt(e){let{source:t,extraLibs:n,onChange:r}=e;const[i,o]=(0,B.useState)(null!=t?t:""),s=(0,B.useDeferredValue)(i),[a,l]=(0,B.useState)(),[c,u]=(0,B.useState)(),p=(0,B.useMemo)((()=>[...bt,...null!=n?n:[]]),[n]),d=(0,B.useCallback)((e=>{o(e.detail),r(e.detail)}),[r]);(0,B.useEffect)((()=>{let e=!1;return async function(){const t=await(0,fe.f)();if(e)return;const n=await t.parseApp([{filePath:"/index.tsx",content:s}]);if(e)return;u(n);const r=n.errors.filter((e=>!!e.node));r.length>0?l(r.map((e=>({message:e.message,severity:Mt(e.severity),startLineNumber:e.node.loc.start.line,startColumn:e.node.loc.start.column+1,endLineNumber:e.node.loc.end.line,endColumn:e.node.loc.end.column+1})))):l(void 0)}(),()=>{e=!0}}),[s]);const m=(0,B.useMemo)((()=>(0,V.uniqueId)()),[]),[f,h]=(0,B.useState)();return(0,B.useEffect)((()=>{let e=!1;return(async()=>{if(!c)return;let t;try{if(t=await async function(e,t){var n,r;const{entry:i}=e;if(!i)throw new Error("No entry module found in the app.");const o=i.render;if(!o)throw new Error("No render call found in the entry module.");const{children:s}=o;if(1!==s.length)throw new Error(`Expects exactly one root component in the render call, but got ${s.length}.`);const a=s[0];if(!(0,it.dN)(a,"Routes"))throw new Error(`The root component must be <Routes> from "${ot.F}".`);let l;const c=new Map,u={usedHelpers:new Set,app:e},p=[],d=[];return await Promise.all(Array.from(e.modules).map((async e=>{let[n,r]=e;if(r){const e=await(0,G.A)(r,u,t);c.set(n,e),r===i&&(l=e);for(const t of[...e.internals,...e.namedExports.values(),e.defaultExport])switch(null==t?void 0:t.type){case"function":p.push(t.function);break;case"template":d.push({name:(0,Z.v)(t.name),bricks:t.bricks,state:t.context})}}}))),{routes:null!==(n=null===(r=a.children)||void 0===r?void 0:r.map((e=>{if(!(0,it.dN)(e,"Route"))throw new Error(`All children of <Routes> must be <Route> from "${ot.F}".`);const{path:t,component:n}=e.properties;if("string"!=typeof t||!t.startsWith("/"))throw new Error('The "path" property of <Route> must be a string starting with "/".');if(!n)throw new Error('The "component" property of <Route> is required.');const{reference:r}=n;let i;if("local"===r.type)i=[...l.internals,...l.namedExports.values()].find((e=>"function"!==e.type&&e.name&&e.name===r.name));else{const e=c.get(r.importSource);if(!e)throw new Error(`Cannot find the module "${r.importSource}" imported by the route "${t}".`);i=r.name?e.namedExports.get(r.name):e.defaultExport}if(!i)throw new Error(`Cannot find the component "${r.name}" used in the route "${t}".`);if("page"!==i.type)throw new Error(`The component "${r.name}" used in the route "${t}" must be a page component.`);return{path:`\${APP.homepage}${"/"===t?"":t}`,bricks:i.bricks,context:i.context}})))&&void 0!==n?n:[],meta:{functions:p,templates:d}}}(c,{rootId:m,expanded:!0}),e)return;h(t)}catch(e){console.error("Failed to render app:",e)}})(),()=>{e=!0}}),[m,c]),O().createElement("div",{className:lt.container},O().createElement("div",{className:lt.editor},O().createElement(B.Suspense,{fallback:"Loading..."},O().createElement(yt,{value:t,onCodeChange:d,language:"typescript",uri:"file:///index.tsx",automaticLayout:"fit-container",theme:"tm-vs-dark",extraLibs:p,extraMarkers:a,"data-override-theme":"dark-v2"}))),O().createElement("div",{className:lt.preview},O().createElement(vt,{storyboard:f})))}ct=Ct,({e:[pt,dt,mt,ft,ht,gt,wt,xt],c:[_t,ut]}=(0,I.A)(ct,[At("vb-experiment.app-playground",{shadowOptions:!1})],[[kt({attribute:!1}),1,"source"],[kt({attribute:!1}),1,"extraLibs"],[Et({type:"change"}),1,"change",e=>(0,R.A)(St,e),(e,t)=>(0,P.A)(St,e,t)]],0,(e=>$t.has((0,T.A)(e))),H.ReactNextElement)),ut()},4373:(e,t,n)=>{n.d(t,{A:()=>a});var r=n(6758),i=n.n(r),o=n(935),s=n.n(o)()(i());s.push([e.id,".container--AW813tLb{display:flex;height:100%}.editor--B5m74LRR,\n.preview--THWZoCIv{flex:1;min-width:0}.preview--THWZoCIv{padding:0;height:100%}",""]),s.locals={container:"container--AW813tLb",editor:"editor--B5m74LRR",preview:"preview--THWZoCIv"};const a=s},4504:(e,t,n)=>{n.d(t,{A:()=>a});var r=n(6758),i=n.n(r),o=n(935),s=n.n(o)()(i());s.push([e.id,":host{display:block;height:100%}:host([hidden]){display:none}*{box-sizing:border-box}.container,\niframe{width:100%;height:100%;border-radius:4px}iframe{display:block;border:none;margin:0;padding:0;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}",""]);const a=s.toString()},8957:(e,t,n)=>{n.d(t,{A:()=>a});var r=n(6758),i=n.n(r),o=n(935),s=n.n(o)()(i());s.push([e.id,".container--M22i1CYq{display:flex;height:100%}.editor--kF8SUoBP,\n.preview--gu5OlS2X{flex:1;min-width:0}.preview--gu5OlS2X{padding:1em;overflow:auto}",""]),s.locals={container:"container--M22i1CYq",editor:"editor--kF8SUoBP",preview:"preview--gu5OlS2X"};const a=s}}]);
|
|
2
|
+
//# sourceMappingURL=1469.1099f419.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks/1469.1099f419.js","mappings":"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","sources":["webpack:///./src/data-providers/export-as-source-files.ts","webpack:///./src/data-providers/export-widgets.ts","webpack:///../../../src/helpers/index.ts","webpack:///../../src/withBox.ts","webpack:///./src/tsx-playground/styles.module.css?e933","webpack:///./src/tsx-playground/index.tsx","webpack:///./src/tsx-playground/createPortal.ts","webpack:///../../../src/modules/convertView.ts","webpack:///./src/app-preview/index.tsx","webpack:///./src/app-playground/styles.module.css?1659","webpack:///./src/app-playground/index.tsx","webpack:///../../../src/modules/convertApp.ts","webpack:///./src/app-playground/styles.module.css","webpack:///./src/app-preview/styles.shadow.css","webpack:///./src/tsx-playground/styles.module.css"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport type { Storyboard, MicroApp, StoryboardMeta } from \"@next-core/types\";\nimport { createProviderClass } from \"@next-core/utils/general\";\nimport JSZip from \"jszip\";\nimport { saveAs } from \"file-saver\";\nimport { format } from \"prettier/standalone\";\nimport * as prettierPluginBabel from \"prettier/plugins/babel\";\nimport * as prettierPluginEstree from \"prettier/plugins/estree\";\nimport { transform } from \"@babel/standalone\";\nimport {\n ExtractState,\n extractRoutes,\n extractTemplates,\n} from \"./utils/extract.js\";\nimport {\n SourceFileOrFolder,\n buildFileStructure,\n} from \"./utils/buildFileStructure.js\";\nimport { generate } from \"./utils/generators/generate.js\";\nimport srcResourcesIndexJs from \"./raws/src/resources/index.js.txt\";\nimport srcIndexJs from \"./raws/src/index.js.txt\";\nimport editorConfig from \"./raws/.editorconfig.txt\";\nimport gitIgnore from \"./raws/.gitignore.txt\";\nimport declarationsDTs from \"./raws/declarations.d.ts.txt\";\nimport devConfigMjs from \"./raws/dev.config.mjs.txt\";\nimport jsconfigJson from \"./raws/jsconfig.json.txt\";\nimport nextJsxConfigJs from \"./raws/next-jsx.config.js.txt\";\nimport packageJson from \"./raws/package.json.txt\";\nimport readmeMd from \"./raws/README.md.txt\";\nimport { JS_RESERVED_WORDS } from \"./utils/constants.js\";\nimport TransformStoryboardFunction from \"./utils/plugins/storyboard-function.js\";\nimport SmartImports from \"./utils/plugins/smart-imports.js\";\n\nexport interface StoryboardAssemblyResult {\n storyboard: Storyboard;\n\n projectDetail: {\n appId: string;\n name: string;\n appSetting: Pick<\n MicroApp,\n \"homepage\" | \"theme\" | \"locales\" | \"noAuthGuard\"\n > & {\n layoutType?: string;\n defaultConfig?: string;\n icon?: string;\n };\n brickNextVersion?: number;\n };\n}\n\nexport async function exportAsSourceFiles({\n projectDetail,\n storyboard,\n}: StoryboardAssemblyResult): Promise<void> {\n const zip = new JSZip();\n const project = zip.folder(\"project\")!;\n const src = project.folder(\"src\")!;\n\n const extractState: ExtractState = {\n extracts: [],\n namePool: new Map(),\n };\n const extractedRoutes = extractRoutes(storyboard.routes, [], extractState);\n\n const app: MicroApp & { layoutType?: string } = {\n id: projectDetail.appId,\n name: projectDetail.name,\n homepage: projectDetail.appSetting.homepage,\n layoutType: projectDetail.appSetting.layoutType,\n theme: projectDetail.appSetting.theme,\n noAuthGuard: projectDetail.appSetting.noAuthGuard,\n locales: projectDetail.appSetting.locales,\n defaultConfig: JSON.parse(projectDetail.appSetting.defaultConfig || \"{}\"),\n menuIcon: JSON.parse(projectDetail.appSetting.icon || \"null\"),\n standaloneMode: true,\n };\n src.file(\n \"app.js\",\n await formatJs(`export default ${JSON.stringify(app, null, 2)};`)\n );\n\n const meta = (storyboard.meta ?? {}) as StoryboardMeta & {\n workflows?: unknown;\n userGroups?: unknown;\n };\n const customTemplates = meta.customTemplates ?? [];\n const functions = meta.functions ?? [];\n const menus = meta.menus ?? [];\n const contracts = meta.contracts ?? [];\n const i18n = meta.i18n ?? {};\n delete meta.customTemplates;\n delete meta.functions;\n delete meta.menus;\n delete meta.contracts;\n delete meta.i18n;\n delete meta.workflows;\n delete meta.mocks;\n delete meta.userGroups;\n\n const extractedTemplates = extractTemplates(\n customTemplates,\n [\"components\"],\n extractState\n );\n extractState.extracts.push({\n name: \"index\",\n path: [\"components\"],\n node: extractedTemplates,\n nodeType: \"others\",\n });\n\n const fileStructure = buildFileStructure(extractState.extracts);\n\n src.file(\"index.js\", srcIndexJs);\n\n src.file(\n \"routes.jsx\",\n await formatJs(generate(extractedRoutes, \"routes\", [\"routes.jsx\"]))\n );\n\n const resources = src.folder(\"resources\")!;\n\n // Functions\n const fnDir = resources.folder(\"functions\")!;\n const fnNames: string[] = [];\n const fnImports: string[] = [];\n for (const fn of functions) {\n if (fn.name === \"index\") {\n throw new Error('Unexpected function name: \"index\"');\n }\n\n // Prepend with `export default` for functions\n const inferredImports = new Set<string>();\n let { code } = transform(fn.source, {\n filename: `expr.${fn.typescript ? \"ts\" : \"js\"}`,\n plugins: [\n ...(fn.typescript ? [\"syntax-typescript\"] : []),\n TransformStoryboardFunction,\n [\n SmartImports,\n {\n imports: inferredImports,\n },\n ],\n ],\n }) as { code: string };\n const hasFN = inferredImports.has(\"FN\");\n if (hasFN) {\n inferredImports.delete(\"FN\");\n }\n const importStrings: string[] = [];\n if (inferredImports.size > 0) {\n importStrings.push(\n `import { ${[...inferredImports].join(\", \")} } from \"next-jsx/runtime\";`\n );\n }\n if (hasFN) {\n importStrings.push(`import FN from \"./index.js\";`);\n }\n if (importStrings.length > 0) {\n code = `${importStrings.join(\"\\n\")}\\n\\n${code}`;\n }\n\n fnDir.file(`${fn.name}.${fn.typescript ? \"ts\" : \"js\"}`, code);\n fnImports.push(`import ${fn.name} from \"./${fn.name}.js\";`);\n fnNames.push(fn.name);\n }\n fnDir.file(\n \"index.js\",\n await formatJs(\n `${fnImports.join(\"\\n\")}\\n\\nconst FN = { ${fnNames.join(\n \",\"\n )} };\\n\\nexport default FN;`\n )\n );\n\n // Menus\n const menusDir = resources.folder(\"menus\")!;\n const menuNames: string[] = [];\n const menuImports: string[] = [];\n for (const menu of menus) {\n cleanMenu(menu);\n if (menu.menuId === \"index\") {\n throw new Error('Unexpected menu id: \"index\"');\n }\n const filename = `${menu.menuId}.js`;\n menusDir.file(\n filename,\n await formatJs(generate(menu, \"menu\", [\"resources\", \"menus\", filename]))\n );\n let name = menu.menuId.replace(/^\\d+|[^\\w]+/g, \"_\");\n if (JS_RESERVED_WORDS.has(name)) {\n name = `${name}__2`;\n }\n menuImports.push(`import ${name} from \"./${filename}\";`);\n menuNames.push(name);\n }\n menusDir.file(\n \"index.js\",\n await formatJs(\n `${menuImports.join(\"\\n\")}\\n\\nexport default [${menuNames.join(\",\")}]`\n )\n );\n\n // Contracts\n const contractsDir = resources.folder(\"contracts\")!;\n const contractImports: string[] = [];\n const contractNames = new Set<string>();\n for (const contract of contracts) {\n const baseName = contract.name.replace(/^\\d+|[^\\w]+/g, \"_\");\n let counter = 2;\n let varName = baseName;\n while (\n contractNames.has(varName) ||\n JS_RESERVED_WORDS.has(varName) ||\n varName === \"index\"\n ) {\n varName = `${baseName}_${counter++}`;\n }\n contractNames.add(varName);\n\n contractsDir.file(\n `${varName}.js`,\n await formatJs(`export default ${JSON.stringify(contract)};`)\n );\n contractImports.push(`import ${varName} from \"./${varName}.js\";`);\n }\n contractsDir.file(\n \"index.js\",\n await formatJs(\n `${contractImports.join(\"\\n\")}\\n\\nexport default [${[\n ...contractNames,\n ].join(\",\")}]`\n )\n );\n\n resources\n .folder(\"i18n\")!\n .file(\n \"index.js\",\n await formatJs(`export default ${JSON.stringify(i18n)};`)\n );\n resources.file(\n \"meta.js\",\n await formatJs(`export default ${JSON.stringify(meta, null, 2)};`)\n );\n resources.file(\"index.js\", srcResourcesIndexJs);\n\n await generateByFileStructure(fileStructure, src, []);\n\n const appDir = project\n .folder(\"mock-micro-apps\")!\n .folder(projectDetail.appId)!;\n appDir.file(\".gitignore\", \"*\\n!.gitignore\");\n\n project.file(\".editorconfig\", editorConfig);\n project.file(\".gitignore\", gitIgnore);\n project.file(\"dev.config.mjs\", devConfigMjs);\n project.file(\"declarations.d.ts\", declarationsDTs);\n project.file(\"jsconfig.json\", jsconfigJson);\n project.file(\n \"next-jsx.config.js\",\n nextJsxConfigJs.replaceAll(\"__APP_ID__\", projectDetail.appId)\n );\n project.file(\n \"package.json\",\n packageJson.replaceAll(\"__APP_ID__\", projectDetail.appId)\n );\n project.file(\n \"README.md\",\n readmeMd\n .replaceAll(\"__PROJECT_NAME__\", projectDetail.name)\n .replaceAll(\"__PROJECT_HOMEPAGE__\", projectDetail.appSetting.homepage)\n );\n\n const blob = await zip.generateAsync({ type: \"blob\" });\n saveAs(blob, \"project.zip\");\n}\n\ninterface FormatJsOptions {\n typescript?: boolean;\n semi?: boolean;\n printWidth?: number;\n}\n\nasync function formatJs(\n source: string,\n { typescript, semi = true, printWidth }: FormatJsOptions = {}\n): Promise<string> {\n return await format(source, {\n parser: typescript ? \"babel-ts\" : \"babel\",\n plugins: [prettierPluginBabel, prettierPluginEstree as any],\n semi,\n printWidth,\n trailingComma: \"es5\",\n });\n}\n\nasync function generateByFileStructure(\n items: SourceFileOrFolder[],\n folder: JSZip,\n path: string[]\n) {\n for (const item of items) {\n const childPath = [...path, item.name];\n if (item.type === \"folder\") {\n const childFolder = folder.folder(item.name)!;\n await generateByFileStructure(item.items, childFolder, childPath);\n } else {\n folder.file(\n `${item.name}.js${\n item.nodeType === \"routes\" ||\n item.nodeType === \"bricks\" ||\n item.nodeType === \"template\"\n ? \"x\"\n : \"\"\n }`,\n await formatJs(generate(item.node, item.nodeType, childPath))\n );\n }\n }\n}\n\nfunction cleanMenu(menu: Record<string, any>) {\n for (const [key, value] of Object.entries(menu)) {\n switch (key) {\n case \"items\":\n if (Array.isArray(value)) {\n for (const item of value) {\n cleanMenuItem(item);\n }\n }\n break;\n case \"type\":\n if (value === \"main\") {\n delete menu[key];\n }\n break;\n case \"if\":\n break;\n case \"i18n\":\n if (Object.keys(value).length === 0) {\n delete menu[key];\n }\n break;\n default:\n if (value === null || value === false) {\n delete menu[key];\n }\n }\n }\n}\n\nfunction cleanMenuItem(menuItem: Record<string, any>) {\n for (const [key, value] of Object.entries(menuItem)) {\n switch (key) {\n case \"children\":\n if (Array.isArray(value) && value.length > 0) {\n cleanMenuItem(value);\n }\n break;\n case \"if\":\n break;\n case \"activeExcludes\":\n case \"activeIncludes\":\n if (Array.isArray(value) && value.length === 0) {\n delete menuItem[key];\n }\n break;\n default:\n if (value === null || value === false) {\n delete menuItem[key];\n }\n }\n }\n}\n\ncustomElements.define(\n \"vb-experiment.export-as-source-files\",\n createProviderClass(exportAsSourceFiles)\n);\n","import { createProviderClass } from \"@next-core/utils/general\";\nimport JSZip from \"jszip\";\nimport { saveAs } from \"file-saver\";\n\ninterface ExportWidgetsParams {\n name: string;\n files: FileInfo[];\n}\n\ninterface FileInfo {\n path: string;\n content: string;\n}\n\nexport async function exportWidgets({\n name,\n files,\n}: ExportWidgetsParams): Promise<void> {\n const fs = new Map<string, JSZip>();\n const zip = new JSZip();\n const widgets = zip.folder(\"widgets\")!;\n const project = widgets.folder(name)!;\n\n for (const { path, content } of files) {\n const segments = path.split(\"/\");\n const filename = segments.pop()!;\n let handle = project;\n let i = 1;\n for (const segment of segments) {\n const current = segments.slice(0, i).join(\"/\");\n const found = fs.get(current);\n if (found) {\n handle = found;\n } else {\n handle = handle.folder(segment)!;\n fs.set(current, handle);\n }\n i++;\n }\n handle.file(filename, content);\n }\n\n const blob = await zip.generateAsync({ type: \"blob\" });\n saveAs(blob, `${name}.zip`);\n}\n\ncustomElements.define(\n \"vb-experiment.export-widgets\",\n createProviderClass(exportWidgets)\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","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n Suspense,\n useCallback,\n useDeferredValue,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { httpErrorToString, unstable_createRoot } from \"@next-core/runtime\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport { uniqueId } from \"lodash\";\nimport type {\n CodeEditor,\n CodeEditorProps,\n ExtraLib,\n ExtraMarker,\n} from \"@next-bricks/vs/code-editor\";\nimport nextTsxDefinition from \"@next-shared/tsx-parser/lib/next-tsx.d.ts?raw\";\nimport componentsDefinition from \"@next-shared/tsx-converter/lib/components.d.ts?raw\";\nimport { convertView, type ConvertResult } from \"@next-shared/tsx-converter\";\nimport type { ParsedApp, SourceFile } from \"@next-shared/tsx-parser\";\nimport \"@next-core/theme\";\nimport styles from \"./styles.module.css\";\nimport { getRemoteTsxParserWorker } from \"./workers/tsxParser.js\";\nimport { createPortal } from \"./createPortal.js\";\n\ninterface CodeEditorEvents {\n \"code.change\": CustomEvent<string>;\n}\n\ninterface CodeEditorMapEvents {\n onCodeChange: \"code.change\";\n}\n\nconst AsyncWrappedCodeEditor = React.lazy(async () => ({\n default: await asyncWrapBrick<\n CodeEditor,\n CodeEditorProps,\n CodeEditorEvents,\n CodeEditorMapEvents\n >(\"vs.code-editor\", {\n onCodeChange: \"code.change\",\n }),\n}));\n\nconst BUILTIN_LIBS: ExtraLib[] = [\n {\n filePath: \"/node_modules/next-tsx/components.d.ts\",\n content: componentsDefinition.replaceAll(\"export interface\", \"interface\"),\n },\n {\n filePath: \"/node_modules/next-tsx/package.json\",\n content: JSON.stringify({\n name: \"next-tsx\",\n types: \"./index.d.ts\",\n }),\n },\n {\n filePath: \"/node_modules/next-tsx/index.d.ts\",\n content: nextTsxDefinition,\n },\n];\n\nconst { defineElement, property, event } = createDecorators();\n\nexport interface TsxPlaygroundProps {\n source?: string;\n extraLibs?: ExtraLib[];\n viewLibs?: SourceFile[];\n withoutWrapper?: boolean;\n allowAnyBricks?: boolean;\n}\n\n/**\n * 构件 `vb-experiment.tsx-playground`\n */\nexport\n@defineElement(\"vb-experiment.tsx-playground\", {\n // Monaco editor does not work well with shadow DOM\n shadowOptions: false,\n})\nclass TsxPlayground extends ReactNextElement implements TsxPlaygroundProps {\n /** 仅初始有效 */\n @property({ attribute: false })\n accessor source: string | undefined;\n\n @property({ attribute: false })\n accessor extraLibs: ExtraLib[] | undefined;\n\n @property({ attribute: false })\n accessor viewLibs: SourceFile[] | undefined;\n\n @property({ type: Boolean })\n accessor withoutWrapper: boolean | undefined;\n\n @property({ type: Boolean })\n accessor allowAnyBricks: boolean | undefined;\n\n @event({ type: \"change\" })\n accessor #change!: EventEmitter<string>;\n\n #handleChange = (value: string) => {\n this.#change?.emit(value);\n };\n\n render() {\n return (\n <TsxPlaygroundComponent\n source={this.source}\n extraLibs={this.extraLibs}\n viewLibs={this.viewLibs}\n withoutWrapper={this.withoutWrapper}\n allowAnyBricks={this.allowAnyBricks}\n onChange={this.#handleChange}\n />\n );\n }\n}\n\ninterface TsxPlaygroundComponentProps extends TsxPlaygroundProps {\n onChange: (value: string) => void;\n}\n\nfunction convertSeverity(\n severity: \"notice\" | \"warning\" | \"error\" | \"fatal\"\n): \"Hint\" | \"Info\" | \"Warning\" | \"Error\" {\n switch (severity) {\n case \"notice\":\n return \"Hint\";\n case \"warning\":\n return \"Warning\";\n case \"error\":\n return \"Error\";\n case \"fatal\":\n return \"Error\";\n }\n return severity;\n}\n\nfunction TsxPlaygroundComponent({\n source,\n extraLibs,\n withoutWrapper,\n allowAnyBricks,\n viewLibs,\n onChange,\n}: TsxPlaygroundComponentProps) {\n const [code, setCode] = useState(source ?? \"\");\n const deferredCode = useDeferredValue(code);\n const [markers, setMarkers] = useState<ExtraMarker[] | undefined>();\n const [view, setView] = useState<ParsedApp | undefined>();\n\n const allLibs = useMemo(\n () => [...BUILTIN_LIBS, ...(extraLibs ?? []), ...(viewLibs ?? [])],\n [extraLibs, viewLibs]\n );\n\n const handleCodeChange = useCallback(\n (e: CustomEvent<string>) => {\n setCode(e.detail);\n onChange(e.detail);\n },\n [onChange]\n );\n useEffect(() => {\n let ignore = false;\n (async function run() {\n const worker = await getRemoteTsxParserWorker();\n if (ignore) {\n return;\n }\n const result = await worker.parseView(deferredCode, { libs: viewLibs });\n if (ignore) {\n return;\n }\n setView(result);\n const withNodeErrors = result.errors.filter((err) => !!err.node);\n if (withNodeErrors.length > 0) {\n setMarkers(\n withNodeErrors.map((error) => ({\n message: error.message,\n severity: convertSeverity(error.severity),\n startLineNumber: error.node!.loc!.start.line,\n startColumn: error.node!.loc!.start.column + 1,\n endLineNumber: error.node!.loc!.end.line,\n endColumn: error.node!.loc!.end.column + 1,\n }))\n );\n } else {\n setMarkers(undefined);\n }\n if (ignore) {\n return;\n }\n })();\n return () => {\n ignore = true;\n };\n }, [deferredCode]);\n\n const rootId = useMemo(() => uniqueId(), []);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n // const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n if (!view) {\n return;\n }\n // setLoading(true);\n let convertedView: ConvertResult | undefined;\n try {\n convertedView = await convertView(view, {\n rootId,\n expanded: true,\n withoutWrapper,\n allowAnyBricks,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView ?? {};\n await rootRef.current?.render(brick ?? [], {\n context,\n functions,\n templates,\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n rootRef.current?.render({\n brick: customElements.get(\"easyops-default-error\")\n ? \"easyops-default-error\"\n : \"div\",\n properties: {\n errorTitle: \"解析失败\",\n dataset: {\n errorBoundary: \"\",\n },\n style: {\n color: \"var(--color-error)\",\n },\n },\n children: [\n {\n brick: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n },\n ],\n });\n }\n // if (!ignore) {\n // setLoading(false);\n // }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, view, withoutWrapper, allowAnyBricks]);\n\n return (\n <div className={styles.container}>\n <div className={styles.editor}>\n <Suspense fallback=\"Loading...\">\n <AsyncWrappedCodeEditor\n value={source}\n onCodeChange={handleCodeChange}\n language=\"typescript\"\n uri=\"file:///View.tsx\"\n automaticLayout=\"fit-container\"\n theme=\"tm-vs-dark\"\n extraLibs={allLibs}\n extraMarkers={markers}\n data-override-theme=\"dark-v2\"\n />\n </Suspense>\n </div>\n <div className={styles.preview}>\n <div data-root-id={rootId} ref={ref} />\n </div>\n </div>\n );\n}\n","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","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","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { __secret_internals, getBasePath } from \"@next-core/runtime\";\nimport type { BootstrapData, MicroApp, Storyboard } from \"@next-core/types\";\nimport \"@next-core/theme\";\nimport styleText from \"./styles.shadow.css\";\n\nconst { defineElement, property } = createDecorators();\n\nexport interface AppPreviewProps {\n storyboard?: Storyboard;\n}\n\n/**\n * 构件 `vb-experiment.app-preview`\n */\nexport\n@defineElement(\"vb-experiment.app-preview\", {\n styleTexts: [styleText],\n})\nclass AppPreview extends ReactNextElement {\n @property({ attribute: false })\n accessor storyboard: Storyboard | undefined;\n\n render() {\n return <AppPreviewComponent storyboard={this.storyboard} />;\n }\n}\n\ninterface PreviewWindow extends Window {\n _preview_only_appPreviewer?: AppPreviewer;\n}\n\ninterface AppPreviewer {\n setup(data: BootstrapData, url: string): Promise<void>;\n update(appId: string, storyboard: Partial<Storyboard>): void;\n reload(): void;\n push(url: string): void;\n replace(url: string): void;\n goBack(): void;\n goForward(): void;\n}\n\nfunction AppPreviewComponent({ storyboard }: AppPreviewProps) {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [appPreviewer, setAppPreviewer] = useState<AppPreviewer | null>(null);\n\n const handleIframeLoad = useCallback(() => {\n const check = () => {\n const previewer = (iframeRef.current?.contentWindow as PreviewWindow)\n ?._preview_only_appPreviewer;\n if (previewer) {\n setAppPreviewer(previewer);\n } else {\n setTimeout(check, 100);\n }\n };\n check();\n }, []);\n\n const setupRef = useRef<Promise<void> | null>(null);\n\n useEffect(() => {\n if (!appPreviewer || !storyboard) {\n return;\n }\n\n const app: MicroApp = {\n id: \"lab-app-preview\",\n name: \"Lab: App Preview\",\n homepage: \"/lab-app-preview\",\n };\n\n if (setupRef.current) {\n let ignore = false;\n setupRef.current.then(() => {\n if (ignore) {\n return;\n }\n appPreviewer.update(app.id, { ...storyboard, app });\n appPreviewer.reload();\n });\n return () => {\n ignore = true;\n };\n } else {\n setupRef.current = appPreviewer.setup(\n {\n brickPackages: (__secret_internals as any).getBrickPackages(),\n storyboards: [\n {\n ...storyboard,\n app,\n },\n ],\n },\n app.homepage\n );\n }\n }, [appPreviewer, storyboard]);\n\n return (\n <div className=\"container\">\n <iframe\n ref={iframeRef}\n src={`${getBasePath()}lab/?_experimental_app_preview_=1`}\n loading=\"lazy\"\n onLoad={handleIframeLoad}\n />\n </div>\n );\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n Suspense,\n useCallback,\n useDeferredValue,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement, wrapBrick } from \"@next-core/react-element\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport type { Storyboard } from \"@next-core/types\";\nimport { uniqueId } from \"lodash\";\nimport type {\n CodeEditor,\n CodeEditorProps,\n ExtraLib,\n ExtraMarker,\n} from \"@next-bricks/vs/code-editor\";\nimport nextTsxDefinition from \"@next-shared/tsx-parser/lib/next-tsx.d.ts?raw\";\nimport componentsDefinition from \"@next-shared/tsx-converter/lib/components.d.ts?raw\";\nimport { convertApp, type ConvertedApp } from \"@next-shared/tsx-converter\";\nimport type { ParsedApp } from \"@next-shared/tsx-parser\";\nimport \"@next-core/theme\";\nimport styles from \"./styles.module.css\";\nimport { getRemoteTsxParserWorker } from \"../tsx-playground/workers/tsxParser.js\";\nimport type { AppPreview, AppPreviewProps } from \"../app-preview/index.js\";\n\ninterface CodeEditorEvents {\n \"code.change\": CustomEvent<string>;\n}\n\ninterface CodeEditorMapEvents {\n onCodeChange: \"code.change\";\n}\n\nconst AsyncWrappedCodeEditor = React.lazy(async () => ({\n default: await asyncWrapBrick<\n CodeEditor,\n CodeEditorProps,\n CodeEditorEvents,\n CodeEditorMapEvents\n >(\"vs.code-editor\", {\n onCodeChange: \"code.change\",\n }),\n}));\n\nconst WrappedAppPreview = wrapBrick<AppPreview, AppPreviewProps>(\n \"vb-experiment.app-preview\"\n);\n\nconst BUILTIN_LIBS: ExtraLib[] = [\n {\n filePath: \"/node_modules/next-tsx/components.d.ts\",\n content: componentsDefinition.replaceAll(\"export interface\", \"interface\"),\n },\n {\n filePath: \"/node_modules/next-tsx/package.json\",\n content: JSON.stringify({\n name: \"next-tsx\",\n types: \"./index.d.ts\",\n }),\n },\n {\n filePath: \"/node_modules/next-tsx/index.d.ts\",\n content: nextTsxDefinition,\n },\n];\n\nconst { defineElement, property, event } = createDecorators();\n\nexport interface AppPlaygroundProps {\n source?: string;\n extraLibs?: ExtraLib[];\n}\n\n/**\n * 构件 `vb-experiment.app-playground`\n */\nexport\n@defineElement(\"vb-experiment.app-playground\", {\n // Monaco editor does not work well with shadow DOM\n shadowOptions: false,\n})\nclass AppPlayground extends ReactNextElement implements AppPlaygroundProps {\n /** 仅初始有效 */\n @property({ attribute: false })\n accessor source: string | undefined;\n\n @property({ attribute: false })\n accessor extraLibs: ExtraLib[] | undefined;\n\n @event({ type: \"change\" })\n accessor #change!: EventEmitter<string>;\n\n #handleChange = (value: string) => {\n this.#change?.emit(value);\n };\n\n render() {\n return (\n <AppPlaygroundComponent\n source={this.source}\n extraLibs={this.extraLibs}\n onChange={this.#handleChange}\n />\n );\n }\n}\n\ninterface AppPlaygroundComponentProps extends AppPlaygroundProps {\n onChange: (value: string) => void;\n}\n\nfunction convertSeverity(\n severity: \"notice\" | \"warning\" | \"error\" | \"fatal\"\n): \"Hint\" | \"Info\" | \"Warning\" | \"Error\" {\n switch (severity) {\n case \"notice\":\n return \"Hint\";\n case \"warning\":\n return \"Warning\";\n case \"error\":\n return \"Error\";\n case \"fatal\":\n return \"Error\";\n }\n return severity;\n}\n\nfunction AppPlaygroundComponent({\n source,\n extraLibs,\n onChange,\n}: AppPlaygroundComponentProps) {\n const [code, setCode] = useState(source ?? \"\");\n const deferredCode = useDeferredValue(code);\n const [markers, setMarkers] = useState<ExtraMarker[] | undefined>();\n const [view, setView] = useState<ParsedApp | undefined>();\n\n const allLibs = useMemo(\n () => [...BUILTIN_LIBS, ...(extraLibs ?? [])],\n [extraLibs]\n );\n\n const handleCodeChange = useCallback(\n (e: CustomEvent<string>) => {\n setCode(e.detail);\n onChange(e.detail);\n },\n [onChange]\n );\n useEffect(() => {\n let ignore = false;\n (async function run() {\n const worker = await getRemoteTsxParserWorker();\n if (ignore) {\n return;\n }\n const result = await worker.parseApp([\n {\n filePath: \"/index.tsx\",\n content: deferredCode,\n },\n ]);\n if (ignore) {\n return;\n }\n setView(result);\n const withNodeErrors = result.errors.filter((err) => !!err.node);\n if (withNodeErrors.length > 0) {\n setMarkers(\n withNodeErrors.map((error) => ({\n message: error.message,\n severity: convertSeverity(error.severity),\n startLineNumber: error.node!.loc!.start.line,\n startColumn: error.node!.loc!.start.column + 1,\n endLineNumber: error.node!.loc!.end.line,\n endColumn: error.node!.loc!.end.column + 1,\n }))\n );\n } else {\n setMarkers(undefined);\n }\n if (ignore) {\n return;\n }\n })();\n return () => {\n ignore = true;\n };\n }, [deferredCode]);\n\n const rootId = useMemo(() => uniqueId(), []);\n\n // const [loading, setLoading] = useState(true);\n\n const [storyboard, setStoryboard] = useState<Storyboard | undefined>();\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n if (!view) {\n return;\n }\n // setLoading(true);\n let convertedApp: ConvertedApp | undefined;\n try {\n convertedApp = await convertApp(view, { rootId, expanded: true });\n if (ignore) {\n return;\n }\n setStoryboard(convertedApp as Partial<Storyboard> as Storyboard);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render app:\", error);\n }\n // if (!ignore) {\n // setLoading(false);\n // }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, view]);\n\n return (\n <div className={styles.container}>\n <div className={styles.editor}>\n <Suspense fallback=\"Loading...\">\n <AsyncWrappedCodeEditor\n value={source}\n onCodeChange={handleCodeChange}\n language=\"typescript\"\n uri=\"file:///index.tsx\"\n automaticLayout=\"fit-container\"\n theme=\"tm-vs-dark\"\n extraLibs={allLibs}\n extraMarkers={markers}\n data-override-theme=\"dark-v2\"\n />\n </Suspense>\n </div>\n <div className={styles.preview}>\n <WrappedAppPreview storyboard={storyboard} />\n </div>\n </div>\n );\n}\n","import type {\n BrickConfInTemplate,\n CustomTemplate,\n RouteConf,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport {\n MODULE_SOURCE,\n type ParsedApp,\n type ComponentChild,\n type ComponentReference,\n isOfficialComponent,\n} from \"@next-shared/tsx-parser\";\nimport convertModule, {\n type ConvertedModule,\n type ConvertedPart,\n} from \"./convertModule.js\";\nimport type {\n ConvertState,\n ConvertOptions,\n ConvertedApp,\n} from \"../interfaces.js\";\nimport { getAppTplName } from \"./getTplName.js\";\n\nexport async function convertApp(\n app: ParsedApp,\n options: ConvertOptions\n): Promise<ConvertedApp> {\n const { entry } = app;\n if (!entry) {\n throw new Error(\"No entry module found in the app.\");\n }\n\n const render = entry.render;\n if (!render) {\n throw new Error(\"No render call found in the entry module.\");\n }\n\n const { children } = render;\n\n if (children.length !== 1) {\n throw new Error(\n `Expects exactly one root component in the render call, but got ${children.length}.`\n );\n }\n\n const routesComponent = children[0];\n if (!isOfficialComponent(routesComponent, \"Routes\")) {\n throw new Error(\n `The root component must be <Routes> from \"${MODULE_SOURCE}\".`\n );\n }\n\n let convertedEntry: ConvertedModule;\n const convertedModules = new Map<string, ConvertedModule>();\n\n const state: ConvertState = {\n usedHelpers: new Set(),\n app,\n };\n\n const functions: StoryboardFunction[] = [];\n const templates: CustomTemplate[] = [];\n\n await Promise.all(\n Array.from(app.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: getAppTplName(part.name!),\n bricks: part.bricks as BrickConfInTemplate[],\n state: part.context,\n });\n break;\n }\n }\n }\n })\n );\n\n const routes: RouteConf[] =\n routesComponent.children?.map((child) => {\n if (!isOfficialComponent(child, \"Route\")) {\n throw new Error(\n `All children of <Routes> must be <Route> from \"${MODULE_SOURCE}\".`\n );\n }\n const { path, component } = child.properties;\n\n if (typeof path !== \"string\" || !path.startsWith(\"/\")) {\n throw new Error(\n `The \"path\" property of <Route> must be a string starting with \"/\".`\n );\n }\n\n if (!component) {\n throw new Error(`The \"component\" property of <Route> is required.`);\n }\n\n const { reference } = component as ComponentChild & {\n reference: ComponentReference;\n };\n let page: ConvertedPart | null | undefined;\n if (reference.type === \"local\") {\n const parts = [\n ...convertedEntry.internals,\n ...convertedEntry.namedExports.values(),\n ];\n page = parts.find(\n (p) => p.type !== \"function\" && p.name && p.name === reference.name\n );\n } else {\n const mod = convertedModules.get(reference.importSource!);\n if (!mod) {\n throw new Error(\n `Cannot find the module \"${reference.importSource}\" imported by the route \"${path}\".`\n );\n }\n page = reference.name\n ? mod.namedExports.get(reference.name)\n : mod.defaultExport;\n }\n\n if (!page) {\n throw new Error(\n `Cannot find the component \"${reference.name}\" used in the route \"${path}\".`\n );\n }\n if (page.type !== \"page\") {\n throw new Error(\n `The component \"${reference.name}\" used in the route \"${path}\" must be a page component.`\n );\n }\n\n return {\n path: `\\${APP.homepage}${path === \"/\" ? \"\" : path}`,\n bricks: page.bricks,\n context: page.context,\n };\n }) ?? [];\n\n return {\n routes,\n meta: {\n functions,\n templates,\n },\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--AW813tLb{display:flex;height:100%}.editor--B5m74LRR,\n.preview--THWZoCIv{flex:1;min-width:0}.preview--THWZoCIv{padding:0;height:100%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--AW813tLb`,\n\t\"editor\": `editor--B5m74LRR`,\n\t\"preview\": `preview--THWZoCIv`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block;height:100%}:host([hidden]){display:none}*{box-sizing:border-box}.container,\niframe{width:100%;height:100%;border-radius:4px}iframe{display:block;border:none;margin:0;padding:0;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--M22i1CYq{display:flex;height:100%}.editor--kF8SUoBP,\n.preview--gu5OlS2X{flex:1;min-width:0}.preview--gu5OlS2X{padding:1em;overflow:auto}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--M22i1CYq`,\n\t\"editor\": `editor--kF8SUoBP`,\n\t\"preview\": `preview--gu5OlS2X`\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["async","formatJs","source","typescript","semi","printWidth","arguments","length","undefined","format","parser","plugins","prettierPluginBabel","prettierPluginEstree","trailingComma","generateByFileStructure","items","folder","path","item","childPath","name","type","childFolder","file","nodeType","generate","node","cleanMenu","menu","key","value","Object","entries","Array","isArray","cleanMenuItem","keys","menuItem","customElements","define","createProviderClass","_ref","_storyboard$meta","_meta$customTemplates","_meta$functions","_meta$menus","_meta$contracts","_meta$i18n","projectDetail","storyboard","zip","JSZip","project","src","extractState","extracts","namePool","Map","extractedRoutes","extractRoutes","routes","app","id","appId","homepage","appSetting","layoutType","theme","noAuthGuard","locales","defaultConfig","JSON","parse","menuIcon","icon","standaloneMode","stringify","meta","customTemplates","functions","menus","contracts","i18n","workflows","mocks","userGroups","extractedTemplates","extractTemplates","push","fileStructure","buildFileStructure","srcIndexJs","resources","fnDir","fnNames","fnImports","fn","Error","inferredImports","Set","code","transform","filename","TransformStoryboardFunction","SmartImports","imports","hasFN","has","delete","importStrings","size","join","menusDir","menuNames","menuImports","menuId","replace","JS_RESERVED_WORDS","contractsDir","contractImports","contractNames","contract","baseName","counter","varName","add","srcResourcesIndexJs","editorConfig","gitIgnore","devConfigMjs","declarationsDTs","jsconfigJson","nextJsxConfigJs","replaceAll","packageJson","readmeMd","blob","generateAsync","saveAs","files","fs","content","segments","split","pop","handle","i","segment","current","slice","found","get","set","helperFunctions","fixFunctionSource","withBox","children","options","brick","properties","style","expanded","background","backdropFilter","borderRadius","padding","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","AsyncWrappedCodeEditor","React","default","asyncWrapBrick","onCodeChange","BUILTIN_LIBS","filePath","componentsDefinition","types","nextTsxDefinition","defineElement","property","event","createDecorators","_TsxPlayground","_A","WeakMap","_B","_C","_D","_E","_F","_TsxPlayground_brand","WeakSet","_handleChange","TsxPlayground","ReactNextElement","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_init_source","_init_extra_source","_init_extraLibs","_init_extra_extraLibs","_init_viewLibs","_init_extra_viewLibs","_init_withoutWrapper","_init_extra_withoutWrapper","_init_allowAnyBricks","_init_extra_allowAnyBricks","_init_change","_init_extra_change","_classPrivateGetter2","_classPrivateGetter","this","_get_change","emit","_classPrivateFieldGet","v","_classPrivateFieldSet","extraLibs","viewLibs","withoutWrapper","allowAnyBricks","render","TsxPlaygroundComponent","onChange","convertSeverity","severity","setCode","useState","deferredCode","useDeferredValue","markers","setMarkers","view","setView","allLibs","useMemo","handleCodeChange","useCallback","e","detail","useEffect","ignore","worker","getRemoteTsxParserWorker","result","parseView","libs","withNodeErrors","errors","filter","err","map","error","message","startLineNumber","loc","start","line","startColumn","column","endLineNumber","end","endColumn","rootId","uniqueId","ref","useRef","rootRef","container","portal","document","createElement","dataset","position","width","height","body","append","createPortal","root","unstable_createRoot","supportsUseChildren","unmount","remove","convertedView","_rootRef$current","_convertedEntry","entry","convertedEntry","convertedModules","state","usedHelpers","templates","Promise","all","from","modules","mod","converted","convertModule","part","internals","namedExports","values","defaultExport","function","getViewTplName","bricks","context","helpers","title","every","includes","withContexts","_ref2","convertView","_rootRef$current2","console","errorTitle","errorBoundary","color","textContent","httpErrorToString","className","styles","editor","Suspense","fallback","language","uri","automaticLayout","extraMarkers","preview","_TsxPlayground2","_set_change","c","_initClass","_applyDecs","shadowOptions","attribute","Boolean","o","_","_checkInRHS","_AppPreview","AppPreview","_init_storyboard","_init_extra_storyboard","AppPreviewComponent","iframeRef","appPreviewer","setAppPreviewer","handleIframeLoad","check","_iframeRef$current","previewer","contentWindow","_preview_only_appPreviewer","setTimeout","setupRef","then","update","reload","setup","brickPackages","__secret_internals","getBrickPackages","storyboards","getBasePath","loading","onLoad","_AppPreview2","styleTexts","styleText","WrappedAppPreview","wrapBrick","_AppPlayground","_AppPlayground_brand","AppPlayground","AppPlaygroundComponent","parseApp","setStoryboard","convertedApp","_routesComponent$chil","_routesComponent$chil2","routesComponent","isOfficialComponent","MODULE_SOURCE","getAppTplName","child","component","startsWith","reference","page","find","p","importSource","convertApp","_AppPlayground2","___CSS_LOADER_EXPORT___","module","toString"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(globalThis.webpackChunk_next_bricks_vb_experiment=globalThis.webpackChunk_next_bricks_vb_experiment||[]).push([[2857],{1746:(e,n,r)=>{r.d(n,{f:()=>s});var t=r(7695);let a,o;function s(){return a||(a=(async()=>{const e=(0,t.LV)((o||(o=new Worker(new URL(r.p+r.u(4154),r.b))),o));return await new e})()),a}},2518:e=>{e.exports='/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n\nexport interface ViewProps {\n title: string;\n}\n\nexport interface BaseProps {\n key?: string | number;\n}\n\nexport interface TableProps<T extends object> extends BaseProps {\n dataSource: {\n list: T[];\n page?: number;\n pageSize?: number;\n total?: number;\n };\n columns: TableColumn<T>[];\n rowKey: string;\n rowSelection?: boolean;\n sort?: TableSort | null;\n pagination?: boolean;\n onSelect?: (event: CustomEvent<T[]>) => void;\n onPaginate?: (event: CustomEvent<{ page: number; pageSize: number }>) => void;\n onSort?: (event: CustomEvent<TableSort | null>) => void;\n}\n\nexport interface ListProps extends BaseProps {\n dataSource: object[];\n fields?: {\n title?: string;\n icon?: string;\n url?: string;\n };\n variant?: "default" | "navigation" | "ranking";\n}\n\nexport interface DescriptionsProps<T extends object> extends BaseProps {\n title?: string;\n dataSource?: T;\n list: Array<\n | {\n label: string;\n text: string;\n }\n | {\n label: string;\n /** 数据字段,多级字段使用点号分隔 */\n field: string;\n }\n | {\n label: string;\n render: (record: T) => any;\n }\n >;\n}\n\nexport interface ButtonProps extends BaseProps {\n type?: "default" | "primary";\n icon?: IconProps;\n onClick?: (e: Event) => void;\n}\n\nexport interface SearchProps extends BaseProps {\n placeholder?: string;\n onSearch?: (e: CustomEvent<string>) => void;\n}\n\nexport interface FormProps<T extends object> extends BaseProps {\n values?: T;\n onValidateSuccess?: (e: CustomEvent<T>) => void;\n ref?: {\n readonly current: FormRef;\n };\n}\n\nexport interface FormRef {\n validate: () => void;\n reset: () => void;\n}\n\nexport interface InputProps extends FormItemProps {\n placeholder?: string;\n}\n\nexport interface NumberInputProps extends InputProps {\n min?: number;\n max?: number;\n}\n\nexport interface TextareaProps extends InputProps {}\n\nexport interface SelectProps extends InputProps {\n options: (FormItemOptions | string)[];\n onChange?: (e: CustomEvent<string | number | boolean | null>) => void;\n}\n\nexport interface RadioProps extends SelectProps {}\n\nexport interface CheckboxProps extends SelectProps {}\n\nexport interface SwitchProps extends FormItemProps {}\n\nexport interface DatePickerProps extends FormItemProps {}\n\nexport interface TimePickerProps extends FormItemProps {}\n\nexport interface DashboardProps extends BaseProps {\n dataSource: Array<object>;\n groupField?: string;\n widgets: Array<DashboardWidget>;\n}\n\nexport interface ModalProps extends BaseProps {\n title: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n ref?: {\n readonly current: ModalRef;\n };\n}\n\nexport interface ModalRef {\n open: () => void;\n close: () => void;\n}\n\nexport interface CardProps extends BaseProps {\n title?: string;\n}\n\nexport interface TagProps extends BaseProps {\n color?: string;\n outline?: boolean;\n}\n\nexport interface LinkProps extends BaseProps {\n /** 站外链接 */\n href?: string;\n\n /** 站内链接 */\n url?: string;\n\n target?: "_blank" | "_self";\n}\n\nexport interface AvatarProps extends BaseProps {\n size?: "large" | "medium" | "small";\n name?: string;\n src?: string;\n}\n\nexport interface AvatarGroupProps extends BaseProps {\n size?: "large" | "medium" | "small";\n}\n\nexport interface CodeBlockProps extends BaseProps {\n source: string;\n language: string;\n}\n\nexport interface PlaintextProps extends BaseProps {\n /** Related advisory information */\n title?: string;\n}\n\nexport interface DashboardWidget {\n widget: "chart";\n type: "line" | "area";\n title?: string;\n metric: {\n id: string;\n unit: string;\n };\n precision?: number;\n}\n\nexport interface FormItemProps extends BaseProps {\n name: string;\n label?: string;\n required?: boolean;\n disabled?: boolean;\n}\n\nexport interface FormItemOptions {\n label: string;\n value: string;\n}\n\nexport interface IconProps {\n lib: "fa";\n prefix: "fas" | "far";\n icon: string;\n}\n\nexport interface TableColumn<T extends object> {\n key: string;\n /** 数据索引,多级索引使用数组 */\n dataIndex: string | string[];\n title: string;\n sortable?: boolean;\n render?: (value: any, record: T) => any;\n}\n\nexport interface TableSort {\n columnKey: string | number;\n order: "ascend" | "descend";\n}\n\ndeclare const View: (props: ViewProps) => any;\ndeclare const Table: <T extends object>(props: TableProps<T>) => any;\ndeclare const List: (props: ListProps) => any;\ndeclare const Descriptions: <T extends object>(\n props: DescriptionsProps<T>\n) => any;\ndeclare const Button: (props: ButtonProps) => any;\ndeclare const Toolbar: (props: BaseProps) => any;\ndeclare const Search: (props: SearchProps) => any;\ndeclare const Form: <T extends object>(props: FormProps<T>) => any;\ndeclare const Input: (props: InputProps) => any;\ndeclare const NumberInput: (props: NumberInputProps) => any;\ndeclare const Textarea: (props: TextareaProps) => any;\ndeclare const Select: (props: SelectProps) => any;\ndeclare const Radio: (props: RadioProps) => any;\ndeclare const Checkbox: (props: CheckboxProps) => any;\ndeclare const Switch: (props: SwitchProps) => any;\ndeclare const DatePicker: (props: DatePickerProps) => any;\ndeclare const TimePicker: (props: TimePickerProps) => any;\ndeclare const Dashboard: (props: DashboardProps) => any;\ndeclare const Modal: (props: ModalProps) => any;\ndeclare const Card: (props: CardProps) => any;\ndeclare const Output: (props: BaseProps) => any;\ndeclare const Tag: (props: TagProps) => any;\ndeclare const Link: (props: LinkProps) => any;\ndeclare const Avatar: (props: AvatarProps) => any;\ndeclare const AvatarGroup: (props: AvatarGroupProps) => any;\ndeclare const CodeBlock: (props: CodeBlockProps) => any;\ndeclare const Plaintext: (props: PlaintextProps) => any;\ndeclare const Fragment: (props: { key?: string | number }) => any;\n'},2826:(e,n,r)=>{r.d(n,{UQ:()=>s,dN:()=>l,zk:()=>i}),r(8135);var t=r(3303);const a=/^<%=?\s/,o=/\s%>$/;function s(e){if("string"!=typeof e)return!1;const n=e.trim();return a.test(n)&&o.test(n)}function i(e){return!e.reference||"imported"===e.reference.type&&e.reference.importSource===t.F}function l(e,n){return i(e)&&(e.reference?e.reference.name===n:e.name===n)}},3303:(e,n,r)=>{r.d(n,{F:()=>t});const t="next-tsx"},3808:(e,n,r)=>{r.d(n,{$:()=>o,v:()=>s});let t=0;const a=new Map;function o(e,n){return`${function(e){return a.has(e)||a.set(e,"isolated-tpl-"+t++),a.get(e)}(n)}${i(e)}`}function s(e){return`tpl-${i(e)}`}function i(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}},5146:e=>{e.exports='/** 返回一个有状态的值和一个更新它的函数。 */\nexport const useState: <T>(\n initialValue?: T\n) => [value: T, setter: (value: T) => void];\n\n/** 异步获取资源,返回获取到的数据、以及一个重新拉取数据的函数 */\nexport const useResource: <T = any>(\n fetcher: () => Promise<T>,\n options?: {\n // 不启用则直接返回 fallback\n enabled?: boolean;\n fallback?: unknown;\n }\n) => [data: T, refetch: () => void];\n\n/** 返回一个可变的 ref 对象,其 `.current` 属性初始化为传入的参数 (`initialValue`) */\nexport const useRef: <T>(initialValue: T) => {\n current: T;\n};\n\n/** 获取当前的 URL search 参数 */\nexport const useQuery: () => {\n readonly [key: string]: string | undefined;\n};\n\n/** 更新当前的 URL search 参数 */\nexport const pushQuery: (\n newQuery: Record<string, string | null>,\n options?: {\n clear?: boolean; // 是否清除已有参数,默认 false\n notify?: boolean; // 是否通知路由变化,默认 true\n }\n) => void;\n\n/** 调用指定的 Provider 接口 */\nexport const callApi: <T extends keyof ContractMap>(\n api: T,\n params: Parameters<ContractMap[T]>[0]\n) => Promise<ReturnType<ContractMap[T]>>;\n\n/** 调用指定的 HTTP 接口 */\nexport const callHttp: <T = any>(url: string, init?: RequestInit) => Promise<T>;\n\n/** 调用指定的工具函数 */\nexport const callTool: <T = any, P = any>(\n conversationId: string,\n stepId: string,\n params: P\n) => Promise<T>;\n\n/** 提示用户操作结果 */\nexport const showMessage: (options: {\n type: "success" | "error";\n content: string;\n}) => void;\n'},6806:(e,n,r)=>{r.d(n,{A:()=>h});var t=r(2826),a=r(7019);function o(e){const{name:n,http:r,api:t,params:o,tool:s,transform:i,rejectTransform:l,config:p,scope:c}=e,d=p&&Object.prototype.hasOwnProperty.call(p,"enabled");return{name:n,resolve:{...r?{useProvider:"basic.http-request",args:[t,o]}:s?{useProvider:"ai-portal.call-tool",args:[s,o]}:{useProvider:`${t}:*`,params:o,..."easyops.api.data_exchange.olap@Query"===t&&(0,a.isObject)(o)?{params:{...o,translate:["#showKey"],limit:void 0,limitBy:void 0,order:void 0,displayName:!0}}:null},...i?{transform:{value:i}}:null,...l?{onReject:{transform:{value:l}}}:null,...d?{if:p.enabled}:null},track:!0,...d?{value:p.fallback}:null,..."template"===c?{expose:!1}:null}}function s(e,n){if(!e)return;const r=(Array.isArray(e)?e:[e]).map((e=>function(e,n){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 t;const{api:r,http:a,tool:o,params:i}=e.payload,l=null!==(t=e.callback)&&void 0!==t&&t.success?s(e.callback.success,n):void 0;return{...a?{useProvider:"basic.http-request",args:[r,i]}:o?{useProvider:"ai-portal.call-tool",args:[o,i]}:{useProvider:`${r}:*`,params:i},callback:{...l&&{success:l},error:{action:"handleHttpError"}}}}case"call_ref":return{..."template"===e.payload.scope?{targetRef:e.payload.ref}:{target:`[data-root-id="${n.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=s(e.payload.consequent,n))&&void 0!==r?r:[],else:s(e.payload.alternate,n)}}}(e,n))).filter(Boolean);return r.length>0?r:void 0}var i=r(9655);const l=/^<%=?\s/,p=/\s%>$/;function c(e){if("string"!=typeof e)return{isString:!1};let n;const r=e.trim();var t;return t=r,l.test(t)&&p.test(t)?n=r.replace(l,"").replace(p,"").trim():(console.warn("Invalid expression:",JSON.stringify(e)),n="null"),{isString:!0,embedded:e,expression:n,usedContexts:(0,i.strictCollectMemberUsage)(e,"CTX")}}var d=r(1321);function u(e,n){return null!=n&&n.size?Array.isArray(e)?e.map((e=>u(e,n))):"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).map((e=>{let[r,t]=e;return[r,u(t,n)]}))):"string"==typeof e&&(0,t.UQ)(e)?function(e,n){if(null==n||!n.size)return e;if([...n.keys()].some((n=>e.includes(n)))){const r=[];let t;try{t=(0,d.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,t){if(n.has(e.name)){var a;const n=null===(a=t[t.length-1])||void 0===a?void 0:a.node;let o;n&&"Property"===n.type&&!n.computed&&n.shorthand&&(o=!0),r.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse expression failed:",e)}if(r.length>0&&t){const{prefix:e,source:a,suffix:o}=t,s=[];let i=0;for(let e=0;e<r.length;e++){const{id:t,shorthand:o}=r[e],{name:l,start:p,end:c}=t;s.push(a.substring(i,p),`${o?`${l}: `:""}${n.get(l)}`),i=c}return s.push(a.substring(i)),`${e}${s.join("")}${o}`}}return e}(e,n):e:e}const m=["cellData","rowData"],f=["#336EF4","#45CAFF","#41CDCF","#8146F3","#F8A075","#94E65E","#57689C","#C285EF","#FAC60B","#E4551F","#8984FF","#2540FF","#08BF33","#F7811C","#AC7CFF","#1BA5DC","#E89716","#76A6F5","#4F69FF"];function g(e,n){const r=e.slice(1),t=parseInt(r,16);return`rgba(${t>>16&255}, ${t>>8&255}, ${255&t}, ${n})`}var b=r(3808);async function x(e,n,r,a,o){var i;let l=null;if((0,t.zk)(e))switch(e.reference?e.reference.name:e.name){case"List":l=await function(e){let{properties:n}=e;const r=n,{dataSource:t,fields:a,variant:o}=r,s=c(t);return{brick:"eo-list",properties:{variant:o,dataSource:s.isString?s.embedded:t,fields:a,themeVariant:"elevo"}}}(e);break;case"Table":l=await async function(e,n,r,t,a){var o;const{properties:s}=e,{dataSource:i,size:l,columns:p,rowKey:d,pagination:f,...g}=s,b=c(i),h=new Map,y=Array.isArray(p)?await Promise.all(p.map((async e=>{let{render:o,...s}=e;if(o){const e=new Map;for(let n=0;n<o.params.length&&n<m.length;n++)e.set(o.params[n],`DATA.${m[n]}`);const i=(await Promise.all(o.children.map((e=>x(e,n,r,t,a))))).flatMap((n=>u(n,e)));return{...s,useBrick:i.map((e=>e.brick.startsWith(":")?{brick:"div",children:[e]}:e))}}return"string"==typeof s.dataIndex&&h.has(s.dataIndex)?{...s,useChildren:`[${s.dataIndex}]`}:s}))):p;return{brick:"eo-next-table",properties:{dataSource:b.isString?b.embedded:i,...g,rowKey:null!=d?d:Array.isArray(p)?null===(o=p[0])||void 0===o?void 0:o.key:void 0,columns:y,themeVariant:"elevo",scrollConfig:{x:"max-content"},...t.expanded?{bordered:!0,pagination:f,size:"large"}:{size:"middle",pagination:!1}},children:h.size>0?Array.from(h.values()):[]}}(e,n,r,a,o);break;case"Descriptions":l=await async function(e,n,r,t,a){let{properties:o}=e;const{dataSource:s,title:i,list:l,columns:p,...d}=o,m=c(s),f=new Map,g=Array.isArray(l)?await Promise.all(l.map((async e=>{let{render:o,...s}=e;if(o){const e=new Map;o.params.length>0&&e.set(o.params[0],"DATA");const i=(await Promise.all(o.children.map((e=>x(e,n,r,t,a))))).flatMap((n=>u(n,e)));return{label:s.label,useBrick:i}}return(s.field?f.get(s.field):void 0)?{label:s.label,useChildren:`[${s.field}]`}:s}))):l;return{brick:"eo-descriptions",properties:{...d,dataSource:m.isString?m.embedded:s,list:g,...null==p?{column:t.expanded?3:1,templateColumns:"repeat(auto-fill,minmax(360px,1fr))"}:{column:p},themeVariant:"elevo"},children:f.size>0?Array.from(f.values()):[]}}(e,n,r,a,o);break;case"Card":l=await function(e){const{properties:n}=e,{title:r,textContent:t}=n;return{brick:"eo-card",properties:{themeVariant:"elevo",cardTitle:r,background:"#fff",outline:"background",...t?{textContent:t}:null}}}(e);break;case"Dashboard":l=await async function(e,n,r,t){let{properties:a}=e;const{dataSource:o,groupField:s,widgets:i}=a;r.usedHelpers.add("_helper_getLatestMetricValue"),r.usedHelpers.add("_helper_extractList"),r.usedHelpers.add("_helper_groupMetricData"),r.usedHelpers.add("_helper_getMetricDisplayNames");const l=s?"#showKey":void 0,{isString:p,expression:d}=c(o),u=p?`<%= FN._helper_extractList((${d})) %>`:o;if(t.expanded){let e=i;const n=[];if(n.length>0){e=[];const r=new Set,t=new Set(i.map((e=>e.metric.id)));for(const a of i){if(r.has(a.metric.id))continue;const o={...a};e.push(o);const s=n.find((e=>e.metrics.includes(a.metric.id)));if(s){const e=s.metrics.filter((e=>t.has(e)));if(e.length>1){o.relevantMetrics=e,o.counterMetric=s.counter,o.groupTitle=s.group;for(const n of e)r.add(n),t.delete(n)}}}}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 n,t;const{title:a,metric:o,size:s,precision:i}=e,p=null!==(n=null===(t=e.relevantMetrics)||void 0===t?void 0:t.length)&&void 0!==n?n:l?2:1,c=Array.from({length:p},((e,n)=>f[(r+n)%f.length]));r+=p;const m="load"===o.unit?"":o.unit,b={brick:"chart-v2.time-series-chart",properties:{data:u,xField:"time",...e.relevantMetrics?{yFields:`<% FN._helper_getMetricDisplayNames((${d}).displayNameList, ${JSON.stringify(e.relevantMetrics)}) %>`}:{yField:`<% FN._helper_getMetricDisplayNames((${d}).displayNameList, [${JSON.stringify(o.id)}])[0] %>`},...e.counterMetric?{forceAbsoluteNumbers:!0,series:{[e.counterMetric]:{isNegative:!0}}}:null,height:"large"===s?230:200,timeFormat:"HH:mm",...e.relevantMetrics||l?null:{areaOptions:{style:{fill:`l(90) 0:${c[0]} 1:#ffffff`}}},axis:{yAxis:{unit:m,precision:i,...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:c,tooltip:{marker:{fill:c[0],stroke:"#fff",lineWidth:2,shadowColor:c[0],shadowBlur:8,shadowOffsetX:0,shadowOffsetY:4},domStyles:{"g2-tooltip":{background:[`radial-gradient( farthest-corner at -20px 150px, ${c[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 ${g(c[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||o.id}},b]}}))}}return l?{brick:"div",properties:{style:{display:"flex",flexDirection:"column",gap:"8px"}},children:[{brick:":forEach",dataSource:`<%= FN._helper_groupMetricData(FN._helper_extractList((${d})), ${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:i.map(((e,n)=>{const{title:r,metric:t,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||t.id,data:"<% ITEM.list %>",xField:"time",yField:t.id,lineColor:f[n%f.length],showArea:!0,..."percent(1)"===t.unit?{min:0,max:1}:"percent(100)"===t.unit||"%"===t.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue(ITEM.list, ${JSON.stringify({metric:t,precision:a})}) %>`}}}))}]}]}:{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px"},dataset:{component:"dashboard"}},children:i.map(((e,n)=>{const{title:r,metric:t,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||t.id,data:u,xField:"time",yField:t.id,lineColor:f[n%f.length],showArea:!0,..."percent(1)"===t.unit?{min:0,max:1}:"percent(100)"===t.unit||"%"===t.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue((${p?`FN._helper_extractList((${d}))`:JSON.stringify(null!=o?o:null)}), ${JSON.stringify({metric:t,precision:a})}) %>`}}}))}}(e,0,r,a);break;case"Button":l=await function(e){const{properties:n}=e;return{brick:"eo-button",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Form":l=await function(e){const{properties:n}=e,{values:r}=null!=n?n:{};return{brick:"eo-form",properties:{values:null!=r?r:{},themeVariant:"elevo"}}}(e);break;case"Toolbar":l=await{brick:"eo-flex-layout",properties:{gap:"0.5em",alignItems:"center"}};break;case"Modal":l=await function(e){const{properties:n}=e,{title:r,confirmText:t,cancelText:a,...o}=n;return{brick:"eo-modal",portal:!0,properties:{themeVariant:"elevo",modalTitle:r,confirmText:t,cancelText:a,keyboard:!0,...o}}}(e);break;case"Plaintext":l=await function(e){const{properties:n}=e;return{brick:"span",properties:{...n}}}(e);break;case"Link":l=await function(e,n,r){const{properties:t}=e;return{brick:"eo-link",properties:{...t,inApp:"app"===r.app.appType,themeVariant:"elevo"}}}(e,0,r);break;case"Output":l=await function(e){const{properties:n}=e,{style:r,...t}=n;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},...t}}}(e);break;case"Tag":l=await function(e){const{properties:n}=e;return{brick:"eo-tag",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Avatar":l=await function(e){const{properties:n}=e;return{brick:"eo-avatar",properties:{...n,themeVariant:"elevo"}}}(e);break;case"AvatarGroup":l=await function(e){const{properties:n}=e;return{brick:"eo-avatar-group",properties:{...n,themeVariant:"elevo"}}}(e);break;case"CodeBlock":l=await function(e){const{properties:n}=e;return{brick:"eo-code-block",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Search":case"Input":case"NumberInput":case"Textarea":case"Select":case"Radio":case"Checkbox":case"Switch":case"DatePicker":case"TimePicker":l=await function(e,n){const{properties:r}=e;let t=n,a={...r,themeVariant:"elevo"};switch(t){case"eo-search":a={...a,trim:!0};break;case"eo-number-input":t="eo-input",a={type:"number",...a}}return{brick:t,properties:a}}(e,(d=e.name,d.includes("-")?d:`eo${d.replace(/([A-Z])/g,"-$1").toLowerCase()}`));break;case"ForEach":l=await function(e){const{properties:n}=e,{dataSource:r}=n;return{brick:":forEach",dataSource:r}}(e);break;case"If":l=await function(e){const{properties:n}=e,{dataSource:r}=n;return{brick:":if",dataSource:r}}(e);break;default:"app"===r.app.appType&&e.name.toLowerCase()===e.name?l={brick:e.name,properties:e.properties}:console.error("Unknown component:",e.name)}else{var p;const{type:t,importSource:o,name:s}=e.reference;let i;if("imported"===t){const e=r.app.modules.get(o);i=s?null==e?void 0:e.namedExports.get(s):null==e?void 0:e.defaultExport}else i=[...n.internals,...n.namedExports.values()].find((e=>{var n;return"template"===e.type&&(null===(n=e.component.id)||void 0===n?void 0:n.name)===s}));if("template"===(null===(p=i)||void 0===p?void 0:p.type)){const n=i.component.id.name;l={brick:"app"===r.app.appType?(0,b.v)(n):(0,b.$)(n,a.rootId),properties:e.properties}}else console.error(`Cannot find the component "${e.reference.name}".`)}var d,h,y,v,k;return l?(e.ref&&("template"===o?l.ref=e.ref:(null!==(y=(h=l).properties)&&void 0!==y||(h.properties={}),null!==(k=(v=l.properties).dataset)&&void 0!==k||(v.dataset={}),l.properties.dataset.ref=e.ref)),e.slot&&(l.slot=e.slot),l.events=function(e,n){const r={};for(const[a,o]of Object.entries(null!==(t=e.events)&&void 0!==t?t:{})){var t;switch(e.name){case"Table":switch(a){case"select":{const e=s(o,n);e&&(r["row.select.v2"]=e);break}case"sort":{const e=s(o,n);e&&(r["sort.change"]=e);break}case"paginate":{const e=s(o,n);e&&(r["page.change"]=e);break}}break;case"Button":if("click"===a){const e=s(o,n);e&&(r.click=e)}break;case"Search":if("search"===a){const e=s(o,n);e&&(r.search=e)}break;case"Select":if("change"===a){const e=s(o,n);e&&(r["change.v2"]=e)}break;default:{const e=s(o,n);e&&(r[a]=e)}}}return Object.keys(r).length>0?r:void 0}(e,a),null!==(i=e.children)&&void 0!==i&&i.length&&(l.children=(await Promise.all(e.children.map((e=>x(e,n,r,a,o))))).flat(),("Card"===e.name||"Modal"===e.name)&&l.children.length>0&&(l.children=[{brick:"eo-content-layout",children:l.children}])),l):[]}async function h(e,n,r){if(e.usedHelpers.size>0)for(const r of e.usedHelpers)n.usedHelpers.add(r);const[t,a,o]=await Promise.all([e.defaultExport?y(e.defaultExport,e,n,r):null,Promise.all(Array.from(e.namedExports.entries()).map((async t=>{let[a,o]=t;return[a,await y(o,e,n,r)]}))).then((e=>new Map(e))),Promise.all(e.internals.map((t=>y(t,e,n,r))))]);return{sourceModule:e,defaultExport:t,namedExports:a,internals:o}}async function y(e,n,r,a){var s,i;if("function"===e.type)return e;const l=[],{component:p}=e;for(const e of p.bindingMap.values())"resource"===e.kind?l.push(o(e.resource)):"state"!==e.kind&&"constant"!==e.kind&&"param"!==e.kind||l.push({name:e.id.name,value:e.initialValue,expose:"param"===e.kind,track:!0});let c;if("view"===e.type){var d;const e=null===(d=p.children)||void 0===d?void 0:d.find((e=>(0,t.dN)(e,"View")));e&&(c=e.children)}else c=p.children;const u=null!==(s=c)&&void 0!==s&&s.length?(await Promise.all(c.map((t=>x(t,n,r,a,e.type))))).flat():[];return{type:e.type,bricks:u,context:l,name:null===(i=p.id)||void 0===i?void 0:i.name,title:e.title}}}}]);
|
|
2
|
-
//# sourceMappingURL=2857.
|
|
1
|
+
"use strict";(globalThis.webpackChunk_next_bricks_vb_experiment=globalThis.webpackChunk_next_bricks_vb_experiment||[]).push([[2857],{1746:(e,n,r)=>{r.d(n,{f:()=>s});var t=r(7695);let a,o;function s(){return a||(a=(async()=>{const e=(0,t.LV)((o||(o=new Worker(new URL(r.p+r.u(7131),r.b))),o));return await new e})()),a}},2518:e=>{e.exports='/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n\nexport interface ViewProps {\n title: string;\n}\n\nexport interface BaseProps {\n key?: string | number;\n}\n\nexport interface TableProps<T extends object> extends BaseProps {\n dataSource: {\n list: T[];\n page?: number;\n pageSize?: number;\n total?: number;\n };\n columns: TableColumn<T>[];\n rowKey: string;\n rowSelection?: boolean;\n sort?: TableSort | null;\n pagination?: boolean;\n onSelect?: (event: CustomEvent<T[]>) => void;\n onPaginate?: (event: CustomEvent<{ page: number; pageSize: number }>) => void;\n onSort?: (event: CustomEvent<TableSort | null>) => void;\n}\n\nexport interface ListProps extends BaseProps {\n dataSource: object[];\n fields?: {\n title?: string;\n icon?: string;\n url?: string;\n };\n variant?: "default" | "navigation" | "ranking";\n}\n\nexport interface DescriptionsProps<T extends object> extends BaseProps {\n title?: string;\n dataSource?: T;\n list: Array<\n | {\n label: string;\n text: string;\n }\n | {\n label: string;\n /** 数据字段,多级字段使用点号分隔 */\n field: string;\n }\n | {\n label: string;\n render: (record: T) => any;\n }\n >;\n}\n\nexport interface ButtonProps extends BaseProps {\n type?: "default" | "primary";\n icon?: IconProps;\n onClick?: (e: Event) => void;\n}\n\nexport interface SearchProps extends BaseProps {\n placeholder?: string;\n onSearch?: (e: CustomEvent<string>) => void;\n}\n\nexport interface FormProps<T extends object> extends BaseProps {\n values?: T;\n onValidateSuccess?: (e: CustomEvent<T>) => void;\n ref?: {\n readonly current: FormRef;\n };\n}\n\nexport interface FormRef {\n validate: () => void;\n reset: () => void;\n}\n\nexport interface InputProps extends FormItemProps {\n placeholder?: string;\n}\n\nexport interface NumberInputProps extends InputProps {\n min?: number;\n max?: number;\n}\n\nexport interface TextareaProps extends InputProps {}\n\nexport interface SelectProps extends InputProps {\n options: (FormItemOptions | string)[];\n onChange?: (e: CustomEvent<string | number | boolean | null>) => void;\n}\n\nexport interface RadioProps extends SelectProps {}\n\nexport interface CheckboxProps extends SelectProps {}\n\nexport interface SwitchProps extends FormItemProps {}\n\nexport interface DatePickerProps extends FormItemProps {}\n\nexport interface TimePickerProps extends FormItemProps {}\n\nexport interface DashboardProps extends BaseProps {\n dataSource: Array<object>;\n groupField?: string;\n widgets: Array<DashboardWidget>;\n}\n\nexport interface ModalProps extends BaseProps {\n title: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n ref?: {\n readonly current: ModalRef;\n };\n}\n\nexport interface ModalRef {\n open: () => void;\n close: () => void;\n}\n\nexport interface CardProps extends BaseProps {\n title?: string;\n}\n\nexport interface TagProps extends BaseProps {\n color?: string;\n outline?: boolean;\n}\n\nexport interface LinkProps extends BaseProps {\n /** 站外链接 */\n href?: string;\n\n /** 站内链接 */\n url?: string;\n\n target?: "_blank" | "_self";\n}\n\nexport interface AvatarProps extends BaseProps {\n size?: "large" | "medium" | "small";\n name?: string;\n src?: string;\n}\n\nexport interface AvatarGroupProps extends BaseProps {\n size?: "large" | "medium" | "small";\n}\n\nexport interface CodeBlockProps extends BaseProps {\n source: string;\n language: string;\n}\n\nexport interface PlaintextProps extends BaseProps {\n /** Related advisory information */\n title?: string;\n}\n\nexport interface DashboardWidget {\n widget: "chart";\n type: "line" | "area";\n title?: string;\n metric: {\n id: string;\n unit: string;\n };\n precision?: number;\n}\n\nexport interface FormItemProps extends BaseProps {\n name: string;\n label?: string;\n required?: boolean;\n disabled?: boolean;\n}\n\nexport interface FormItemOptions {\n label: string;\n value: string;\n}\n\nexport interface IconProps {\n lib: "fa";\n prefix: "fas" | "far";\n icon: string;\n}\n\nexport interface TableColumn<T extends object> {\n key: string;\n /** 数据索引,多级索引使用数组 */\n dataIndex: string | string[];\n title: string;\n sortable?: boolean;\n render?: (value: any, record: T) => any;\n}\n\nexport interface TableSort {\n columnKey: string | number;\n order: "ascend" | "descend";\n}\n\ndeclare const View: (props: ViewProps) => any;\ndeclare const Table: <T extends object>(props: TableProps<T>) => any;\ndeclare const List: (props: ListProps) => any;\ndeclare const Descriptions: <T extends object>(\n props: DescriptionsProps<T>\n) => any;\ndeclare const Button: (props: ButtonProps) => any;\ndeclare const Toolbar: (props: BaseProps) => any;\ndeclare const Search: (props: SearchProps) => any;\ndeclare const Form: <T extends object>(props: FormProps<T>) => any;\ndeclare const Input: (props: InputProps) => any;\ndeclare const NumberInput: (props: NumberInputProps) => any;\ndeclare const Textarea: (props: TextareaProps) => any;\ndeclare const Select: (props: SelectProps) => any;\ndeclare const Radio: (props: RadioProps) => any;\ndeclare const Checkbox: (props: CheckboxProps) => any;\ndeclare const Switch: (props: SwitchProps) => any;\ndeclare const DatePicker: (props: DatePickerProps) => any;\ndeclare const TimePicker: (props: TimePickerProps) => any;\ndeclare const Dashboard: (props: DashboardProps) => any;\ndeclare const Modal: (props: ModalProps) => any;\ndeclare const Card: (props: CardProps) => any;\ndeclare const Output: (props: BaseProps) => any;\ndeclare const Tag: (props: TagProps) => any;\ndeclare const Link: (props: LinkProps) => any;\ndeclare const Avatar: (props: AvatarProps) => any;\ndeclare const AvatarGroup: (props: AvatarGroupProps) => any;\ndeclare const CodeBlock: (props: CodeBlockProps) => any;\ndeclare const Plaintext: (props: PlaintextProps) => any;\ndeclare const Fragment: (props: { key?: string | number }) => any;\n'},2826:(e,n,r)=>{r.d(n,{UQ:()=>s,dN:()=>l,zk:()=>i}),r(8135);var t=r(3303);const a=/^<%=?\s/,o=/\s%>$/;function s(e){if("string"!=typeof e)return!1;const n=e.trim();return a.test(n)&&o.test(n)}function i(e){return!e.reference||"imported"===e.reference.type&&e.reference.importSource===t.F}function l(e,n){return i(e)&&(e.reference?e.reference.name===n:e.name===n)}},3303:(e,n,r)=>{r.d(n,{F:()=>t});const t="next-tsx"},3808:(e,n,r)=>{r.d(n,{$:()=>o,v:()=>s});let t=0;const a=new Map;function o(e,n){return`${function(e){return a.has(e)||a.set(e,"isolated-tpl-"+t++),a.get(e)}(n)}${i(e)}`}function s(e){return`tpl-${i(e)}`}function i(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}},5146:e=>{e.exports='/** 返回一个有状态的值和一个更新它的函数。 */\nexport const useState: <T>(\n initialValue?: T\n) => [value: T, setter: (value: T) => void];\n\n/** 异步获取资源,返回获取到的数据、以及一个重新拉取数据的函数 */\nexport const useResource: <T = any>(\n fetcher: () => Promise<T>,\n options?: {\n // 不启用则直接返回 fallback\n enabled?: boolean;\n fallback?: unknown;\n }\n) => [data: T, refetch: () => void];\n\n/** 返回一个可变的 ref 对象,其 `.current` 属性初始化为传入的参数 (`initialValue`) */\nexport const useRef: <T>(initialValue: T) => {\n current: T;\n};\n\n/** 获取当前的 URL search 参数 */\nexport const useQuery: () => {\n readonly [key: string]: string | undefined;\n};\n\n/** 更新当前的 URL search 参数 */\nexport const pushQuery: (\n newQuery: Record<string, string | null>,\n options?: {\n clear?: boolean; // 是否清除已有参数,默认 false\n notify?: boolean; // 是否通知路由变化,默认 true\n }\n) => void;\n\n/** 调用指定的 Provider 接口 */\nexport const callApi: <T extends keyof ContractMap>(\n api: T,\n params: Parameters<ContractMap[T]>[0]\n) => Promise<ReturnType<ContractMap[T]>>;\n\n/** 调用指定的 HTTP 接口 */\nexport const callHttp: <T = any>(url: string, init?: RequestInit) => Promise<T>;\n\n/** 调用指定的工具函数 */\nexport const callTool: <T = any, P = any>(\n conversationId: string,\n stepId: string,\n params: P\n) => Promise<T>;\n\n/** 提示用户操作结果 */\nexport const showMessage: (options: {\n type: "success" | "error";\n content: string;\n}) => void;\n'},6806:(e,n,r)=>{r.d(n,{A:()=>h});var t=r(2826),a=r(7019);function o(e){const{name:n,http:r,api:t,params:o,tool:s,transform:i,rejectTransform:l,config:p,scope:c}=e,d=p&&Object.prototype.hasOwnProperty.call(p,"enabled");return{name:n,resolve:{...r?{useProvider:"basic.http-request",args:[t,o]}:s?{useProvider:"ai-portal.call-tool",args:[s,o]}:{useProvider:`${t}:*`,params:o,..."easyops.api.data_exchange.olap@Query"===t&&(0,a.isObject)(o)?{params:{...o,translate:["#showKey"],limit:void 0,limitBy:void 0,order:void 0,displayName:!0}}:null},...i?{transform:{value:i}}:null,...l?{onReject:{transform:{value:l}}}:null,...d?{if:p.enabled}:null},track:!0,...d?{value:p.fallback}:null,..."template"===c?{expose:!1}:null}}function s(e,n){if(!e)return;const r=(Array.isArray(e)?e:[e]).map((e=>function(e,n){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 t;const{api:r,http:a,tool:o,params:i}=e.payload,l=null!==(t=e.callback)&&void 0!==t&&t.success?s(e.callback.success,n):void 0;return{...a?{useProvider:"basic.http-request",args:[r,i]}:o?{useProvider:"ai-portal.call-tool",args:[o,i]}:{useProvider:`${r}:*`,params:i},callback:{...l&&{success:l},error:{action:"handleHttpError"}}}}case"call_ref":return{..."template"===e.payload.scope?{targetRef:e.payload.ref}:{target:`[data-root-id="${n.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=s(e.payload.consequent,n))&&void 0!==r?r:[],else:s(e.payload.alternate,n)}}}(e,n))).filter(Boolean);return r.length>0?r:void 0}var i=r(9655);const l=/^<%=?\s/,p=/\s%>$/;function c(e){if("string"!=typeof e)return{isString:!1};let n;const r=e.trim();var t;return t=r,l.test(t)&&p.test(t)?n=r.replace(l,"").replace(p,"").trim():(console.warn("Invalid expression:",JSON.stringify(e)),n="null"),{isString:!0,embedded:e,expression:n,usedContexts:(0,i.strictCollectMemberUsage)(e,"CTX")}}var d=r(1321);function u(e,n){return null!=n&&n.size?Array.isArray(e)?e.map((e=>u(e,n))):"object"==typeof e&&null!==e?Object.fromEntries(Object.entries(e).map((e=>{let[r,t]=e;return[r,u(t,n)]}))):"string"==typeof e&&(0,t.UQ)(e)?function(e,n){if(null==n||!n.size)return e;if([...n.keys()].some((n=>e.includes(n)))){const r=[];let t;try{t=(0,d.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,t){if(n.has(e.name)){var a;const n=null===(a=t[t.length-1])||void 0===a?void 0:a.node;let o;n&&"Property"===n.type&&!n.computed&&n.shorthand&&(o=!0),r.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse expression failed:",e)}if(r.length>0&&t){const{prefix:e,source:a,suffix:o}=t,s=[];let i=0;for(let e=0;e<r.length;e++){const{id:t,shorthand:o}=r[e],{name:l,start:p,end:c}=t;s.push(a.substring(i,p),`${o?`${l}: `:""}${n.get(l)}`),i=c}return s.push(a.substring(i)),`${e}${s.join("")}${o}`}}return e}(e,n):e:e}const m=["cellData","rowData"],f=["#336EF4","#45CAFF","#41CDCF","#8146F3","#F8A075","#94E65E","#57689C","#C285EF","#FAC60B","#E4551F","#8984FF","#2540FF","#08BF33","#F7811C","#AC7CFF","#1BA5DC","#E89716","#76A6F5","#4F69FF"];function g(e,n){const r=e.slice(1),t=parseInt(r,16);return`rgba(${t>>16&255}, ${t>>8&255}, ${255&t}, ${n})`}var b=r(3808);async function x(e,n,r,a,o){var i;let l=null;if((0,t.zk)(e))switch(e.reference?e.reference.name:e.name){case"List":l=await function(e){let{properties:n}=e;const r=n,{dataSource:t,fields:a,variant:o}=r,s=c(t);return{brick:"eo-list",properties:{variant:o,dataSource:s.isString?s.embedded:t,fields:a,themeVariant:"elevo"}}}(e);break;case"Table":l=await async function(e,n,r,t,a){var o;const{properties:s}=e,{dataSource:i,size:l,columns:p,rowKey:d,pagination:f,...g}=s,b=c(i),h=new Map,y=Array.isArray(p)?await Promise.all(p.map((async e=>{let{render:o,...s}=e;if(o){const e=new Map;for(let n=0;n<o.params.length&&n<m.length;n++)e.set(o.params[n],`DATA.${m[n]}`);const i=(await Promise.all(o.children.map((e=>x(e,n,r,t,a))))).flatMap((n=>u(n,e)));return{...s,useBrick:i.map((e=>e.brick.startsWith(":")?{brick:"div",children:[e]}:e))}}return"string"==typeof s.dataIndex&&h.has(s.dataIndex)?{...s,useChildren:`[${s.dataIndex}]`}:s}))):p;return{brick:"eo-next-table",properties:{dataSource:b.isString?b.embedded:i,...g,rowKey:null!=d?d:Array.isArray(p)?null===(o=p[0])||void 0===o?void 0:o.key:void 0,columns:y,themeVariant:"elevo",scrollConfig:{x:"max-content"},...t.expanded?{bordered:!0,pagination:f,size:"large"}:{size:"middle",pagination:!1}},children:h.size>0?Array.from(h.values()):[]}}(e,n,r,a,o);break;case"Descriptions":l=await async function(e,n,r,t,a){let{properties:o}=e;const{dataSource:s,title:i,list:l,columns:p,...d}=o,m=c(s),f=new Map,g=Array.isArray(l)?await Promise.all(l.map((async e=>{let{render:o,...s}=e;if(o){const e=new Map;o.params.length>0&&e.set(o.params[0],"DATA");const i=(await Promise.all(o.children.map((e=>x(e,n,r,t,a))))).flatMap((n=>u(n,e)));return{label:s.label,useBrick:i}}return(s.field?f.get(s.field):void 0)?{label:s.label,useChildren:`[${s.field}]`}:s}))):l;return{brick:"eo-descriptions",properties:{...d,dataSource:m.isString?m.embedded:s,list:g,...null==p?{column:t.expanded?3:1,templateColumns:"repeat(auto-fill,minmax(360px,1fr))"}:{column:p},themeVariant:"elevo"},children:f.size>0?Array.from(f.values()):[]}}(e,n,r,a,o);break;case"Card":l=await function(e){const{properties:n}=e,{title:r,textContent:t}=n;return{brick:"eo-card",properties:{themeVariant:"elevo",cardTitle:r,background:"#fff",outline:"background",...t?{textContent:t}:null}}}(e);break;case"Dashboard":l=await async function(e,n,r,t){let{properties:a}=e;const{dataSource:o,groupField:s,widgets:i}=a;r.usedHelpers.add("_helper_getLatestMetricValue"),r.usedHelpers.add("_helper_extractList"),r.usedHelpers.add("_helper_groupMetricData"),r.usedHelpers.add("_helper_getMetricDisplayNames");const l=s?"#showKey":void 0,{isString:p,expression:d}=c(o),u=p?`<%= FN._helper_extractList((${d})) %>`:o;if(t.expanded){let e=i;const n=[];if(n.length>0){e=[];const r=new Set,t=new Set(i.map((e=>e.metric.id)));for(const a of i){if(r.has(a.metric.id))continue;const o={...a};e.push(o);const s=n.find((e=>e.metrics.includes(a.metric.id)));if(s){const e=s.metrics.filter((e=>t.has(e)));if(e.length>1){o.relevantMetrics=e,o.counterMetric=s.counter,o.groupTitle=s.group;for(const n of e)r.add(n),t.delete(n)}}}}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 n,t;const{title:a,metric:o,size:s,precision:i}=e,p=null!==(n=null===(t=e.relevantMetrics)||void 0===t?void 0:t.length)&&void 0!==n?n:l?2:1,c=Array.from({length:p},((e,n)=>f[(r+n)%f.length]));r+=p;const m="load"===o.unit?"":o.unit,b={brick:"chart-v2.time-series-chart",properties:{data:u,xField:"time",...e.relevantMetrics?{yFields:`<% FN._helper_getMetricDisplayNames((${d}).displayNameList, ${JSON.stringify(e.relevantMetrics)}) %>`}:{yField:`<% FN._helper_getMetricDisplayNames((${d}).displayNameList, [${JSON.stringify(o.id)}])[0] %>`},...e.counterMetric?{forceAbsoluteNumbers:!0,series:{[e.counterMetric]:{isNegative:!0}}}:null,height:"large"===s?230:200,timeFormat:"HH:mm",...e.relevantMetrics||l?null:{areaOptions:{style:{fill:`l(90) 0:${c[0]} 1:#ffffff`}}},axis:{yAxis:{unit:m,precision:i,...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:c,tooltip:{marker:{fill:c[0],stroke:"#fff",lineWidth:2,shadowColor:c[0],shadowBlur:8,shadowOffsetX:0,shadowOffsetY:4},domStyles:{"g2-tooltip":{background:[`radial-gradient( farthest-corner at -20px 150px, ${c[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 ${g(c[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||o.id}},b]}}))}}return l?{brick:"div",properties:{style:{display:"flex",flexDirection:"column",gap:"8px"}},children:[{brick:":forEach",dataSource:`<%= FN._helper_groupMetricData(FN._helper_extractList((${d})), ${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:i.map(((e,n)=>{const{title:r,metric:t,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||t.id,data:"<% ITEM.list %>",xField:"time",yField:t.id,lineColor:f[n%f.length],showArea:!0,..."percent(1)"===t.unit?{min:0,max:1}:"percent(100)"===t.unit||"%"===t.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue(ITEM.list, ${JSON.stringify({metric:t,precision:a})}) %>`}}}))}]}]}:{brick:"div",properties:{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(200px, 1fr))",gap:"10px"},dataset:{component:"dashboard"}},children:i.map(((e,n)=>{const{title:r,metric:t,precision:a}=e;return{brick:"ai-portal.stat-with-mini-chart",properties:{size:"small",label:r||t.id,data:u,xField:"time",yField:t.id,lineColor:f[n%f.length],showArea:!0,..."percent(1)"===t.unit?{min:0,max:1}:"percent(100)"===t.unit||"%"===t.unit?{min:0,max:100}:{min:0},value:`<%= FN._helper_getLatestMetricValue((${p?`FN._helper_extractList((${d}))`:JSON.stringify(null!=o?o:null)}), ${JSON.stringify({metric:t,precision:a})}) %>`}}}))}}(e,0,r,a);break;case"Button":l=await function(e){const{properties:n}=e;return{brick:"eo-button",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Form":l=await function(e){const{properties:n}=e,{values:r}=null!=n?n:{};return{brick:"eo-form",properties:{values:null!=r?r:{},themeVariant:"elevo"}}}(e);break;case"Toolbar":l=await{brick:"eo-flex-layout",properties:{gap:"0.5em",alignItems:"center"}};break;case"Modal":l=await function(e){const{properties:n}=e,{title:r,confirmText:t,cancelText:a,...o}=n;return{brick:"eo-modal",portal:!0,properties:{themeVariant:"elevo",modalTitle:r,confirmText:t,cancelText:a,keyboard:!0,...o}}}(e);break;case"Plaintext":l=await function(e){const{properties:n}=e;return{brick:"span",properties:{...n}}}(e);break;case"Link":l=await function(e,n,r){const{properties:t}=e;return{brick:"eo-link",properties:{...t,inApp:"app"===r.app.appType,themeVariant:"elevo"}}}(e,0,r);break;case"Output":l=await function(e){const{properties:n}=e,{style:r,...t}=n;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},...t}}}(e);break;case"Tag":l=await function(e){const{properties:n}=e;return{brick:"eo-tag",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Avatar":l=await function(e){const{properties:n}=e;return{brick:"eo-avatar",properties:{...n,themeVariant:"elevo"}}}(e);break;case"AvatarGroup":l=await function(e){const{properties:n}=e;return{brick:"eo-avatar-group",properties:{...n,themeVariant:"elevo"}}}(e);break;case"CodeBlock":l=await function(e){const{properties:n}=e;return{brick:"eo-code-block",properties:{...n,themeVariant:"elevo"}}}(e);break;case"Search":case"Input":case"NumberInput":case"Textarea":case"Select":case"Radio":case"Checkbox":case"Switch":case"DatePicker":case"TimePicker":l=await function(e,n){const{properties:r}=e;let t=n,a={...r,themeVariant:"elevo"};switch(t){case"eo-search":a={...a,trim:!0};break;case"eo-number-input":t="eo-input",a={type:"number",...a}}return{brick:t,properties:a}}(e,(d=e.name,d.includes("-")?d:`eo${d.replace(/([A-Z])/g,"-$1").toLowerCase()}`));break;case"ForEach":l=await function(e){const{properties:n}=e,{dataSource:r}=n;return{brick:":forEach",dataSource:r}}(e);break;case"If":l=await function(e){const{properties:n}=e,{dataSource:r}=n;return{brick:":if",dataSource:r}}(e);break;default:"app"!==r.app.appType&&!a.allowAnyBricks||e.name.toLowerCase()!==e.name?console.error("Unknown component:",e.name):l={brick:e.name.replaceAll("_",".").replaceAll("--","."),properties:e.properties}}else{var p;const{type:t,importSource:o,name:s}=e.reference;let i;if("imported"===t){const e=r.app.modules.get(o);i=s?null==e?void 0:e.namedExports.get(s):null==e?void 0:e.defaultExport}else i=[...n.internals,...n.namedExports.values()].find((e=>{var n;return"template"===e.type&&(null===(n=e.component.id)||void 0===n?void 0:n.name)===s}));if("template"===(null===(p=i)||void 0===p?void 0:p.type)){const n=i.component.id.name;l={brick:"app"===r.app.appType?(0,b.v)(n):(0,b.$)(n,a.rootId),properties:e.properties}}else console.error(`Cannot find the component "${e.reference.name}".`)}var d,h,y,v,k;return l?(e.ref&&("template"===o?l.ref=e.ref:(null!==(y=(h=l).properties)&&void 0!==y||(h.properties={}),null!==(k=(v=l.properties).dataset)&&void 0!==k||(v.dataset={}),l.properties.dataset.ref=e.ref)),e.slot&&(l.slot=e.slot),l.events=function(e,n){const r={};for(const[a,o]of Object.entries(null!==(t=e.events)&&void 0!==t?t:{})){var t;switch(e.name){case"Table":switch(a){case"select":{const e=s(o,n);e&&(r["row.select.v2"]=e);break}case"sort":{const e=s(o,n);e&&(r["sort.change"]=e);break}case"paginate":{const e=s(o,n);e&&(r["page.change"]=e);break}}break;case"Button":if("click"===a){const e=s(o,n);e&&(r.click=e)}break;case"Search":if("search"===a){const e=s(o,n);e&&(r.search=e)}break;case"Select":if("change"===a){const e=s(o,n);e&&(r["change.v2"]=e)}break;default:{const e=s(o,n);e&&(r[a]=e)}}}return Object.keys(r).length>0?r:void 0}(e,a),null!==(i=e.children)&&void 0!==i&&i.length&&(l.children=(await Promise.all(e.children.map((e=>x(e,n,r,a,o))))).flat(),("Card"===e.name||"Modal"===e.name)&&l.children.length>0&&(l.children=[{brick:"eo-content-layout",children:l.children}])),l):[]}async function h(e,n,r){if(e.usedHelpers.size>0)for(const r of e.usedHelpers)n.usedHelpers.add(r);const[t,a,o]=await Promise.all([e.defaultExport?y(e.defaultExport,e,n,r):null,Promise.all(Array.from(e.namedExports.entries()).map((async t=>{let[a,o]=t;return[a,await y(o,e,n,r)]}))).then((e=>new Map(e))),Promise.all(e.internals.map((t=>y(t,e,n,r))))]);return{sourceModule:e,defaultExport:t,namedExports:a,internals:o}}async function y(e,n,r,a){var s,i;if("function"===e.type)return e;const l=[],{component:p}=e;for(const e of p.bindingMap.values())"resource"===e.kind?l.push(o(e.resource)):"state"!==e.kind&&"constant"!==e.kind&&"param"!==e.kind||l.push({name:e.id.name,value:e.initialValue,expose:"param"===e.kind,track:!0});let c;if("view"===e.type){var d;const e=null===(d=p.children)||void 0===d?void 0:d.find((e=>(0,t.dN)(e,"View")));e&&(c=e.children)}else c=p.children;const u=null!==(s=c)&&void 0!==s&&s.length?(await Promise.all(c.map((t=>x(t,n,r,a,e.type))))).flat():[];return{type:e.type,bricks:u,context:l,name:null===(i=p.id)||void 0===i?void 0:i.name,title:e.title}}}}]);
|
|
2
|
+
//# sourceMappingURL=2857.da8e603e.js.map
|