diff --git a/app/srv/core/main.js b/app/srv/core/main.js index c48be846..626b17f9 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -238,7 +238,7 @@ ${n.map(({variableName:r,uniqueLocalName:o})=>` reactHotLoader.register(${r}, " leaveModule(module); })();`}process(){return!1}};h();g();m();h();g();m();var jj=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await","false","null","true"]);function fp(e){if(e.length===0||!wo[e.charCodeAt(0)])return!1;for(let t=1;t` var ${a};`).join("");for(let a of this.transformers)n+=a.getHoistedCode();let r="";for(let a of this.transformers)r+=a.getSuffixCode();let o=this.tokens.finish(),{code:i}=o;if(i.startsWith("#!")){let a=i.indexOf(` `);return a===-1&&(a=i.length,i+=` -`),{code:i.slice(0,a+1)+n+i.slice(a+1)+r,mappings:this.shiftMappings(o.mappings,n.length)}}else return{code:n+i+r,mappings:this.shiftMappings(o.mappings,n.length)}}processBalancedCode(){let t=0,n=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(s.braceL)||this.tokens.matches1(s.dollarBraceL))t++;else if(this.tokens.matches1(s.braceR)){if(t===0)return;t--}if(this.tokens.matches1(s.parenL))n++;else if(this.tokens.matches1(s.parenR)){if(n===0)return;n--}this.processToken()}}processToken(){if(this.tokens.matches1(s._class)){this.processClass();return}for(let t of this.transformers)if(t.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(s._class,s.name))throw new Error("Expected identifier for exported class name.");let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),t}processClass(){let t=xy(this,this.tokens,this.nameManager,this.disableESTransforms),n=(t.headerInfo.isExpression||!t.headerInfo.className)&&t.staticInitializerNames.length+t.instanceInitializerNames.length>0,r=t.headerInfo.className;n&&(r=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(r),this.tokens.appendCode(` (${r} =`));let i=this.tokens.currentToken().contextId;if(i==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(s._class);!this.tokens.matchesContextIdAndLabel(s.braceL,i);)this.processToken();this.processClassBody(t,r);let a=t.staticInitializerNames.map(l=>`${r}.${l}()`);n?this.tokens.appendCode(`, ${a.map(l=>`${l}, `).join("")}${r})`):t.staticInitializerNames.length>0&&this.tokens.appendCode(` ${a.map(l=>`${l};`).join(" ")}`)}processClassBody(t,n){let{headerInfo:r,constructorInsertPos:o,constructorInitializerStatements:i,fields:a,instanceInitializerNames:l,rangesToRemove:u}=t,c=0,p=0,y=this.tokens.currentToken().contextId;if(y==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(s.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let d=i.length+l.length>0;if(o===null&&d){let x=this.makeConstructorInitCode(i,l,n);if(r.hasSuperclass){let w=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${w}) { super(...${w}); ${x}; }`)}else this.tokens.appendCode(`constructor() { ${x}; }`)}for(;!this.tokens.matchesContextIdAndLabel(s.braceR,y);)if(c=u[p].start){for(this.tokens.currentIndex()`${r}.prototype.${o}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(s.parenR,s.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,s.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(I._async)&&!this.tokens.matches1(s._async))return!1;let t=this.tokens.tokenAtRelativeIndex(1);if(t.type!==s.lessThan||!t.isType)return!1;let n=this.tokens.currentIndex()+1;for(;this.tokens.tokens[n].isType;)n++;if(this.tokens.matches1AtIndex(n,s.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex(){let t={};for(let[n,r]of Object.entries(e)){t[n]=nC(r,{transforms:["typescript","imports","jsx"],preserveDynamicImport:!0,disableESTransforms:!0}).code;let o='"use strict";';t[n].startsWith(o)&&(t[n]=t[n].substring(o.length).trim())}return t};h();g();m();var ds=ye($t());h();g();m();var Hj=Lm("prasi-cache","prasi-cache-store"),rC={timeout:null,store:Hj},hp=(e,t)=>{let n=[...oC(t,"navigate(",")"),...oC(t,"href = ",";")],r=e.page.cur.id;e.page.navs[r]||(e.page.navs[r]=new Set);for(let o of n)e.page.navs[r].add(o);clearTimeout(rC.timeout),rC.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},oC=(e,t,n)=>{let r=0,o=0,i=[];for(;;){let a=e.indexOf(t,r);if(o=r,a>=0){let l=e[a+t.length];if(l==='"'||l==="'"||l==="`"){let u=e.indexOf(`${l}${n}`,a+t.length+1),c=e.substring(a+t.length+1,u);r=u+2+n.length,i.push(c)}}if(o===r)break}return i};h();g();m();var ps=ye($t());h();g();m();var iC=ye(ng()),fs=ye($t());var ky=ye(Ze()),sC=(e,t,n,r,o)=>i=>{let[a,l]=(0,fs.useState)({}),u=i.idx||i.internal_key;n.item.script||(n.item.script={});let c=n.item.script;typeof u<"u"&&(n.item.script_keyed||(n.item.script_keyed={}),n.item.script_keyed[u]||(n.item.script_keyed[u]={}),c=n.item.script_keyed[u]),c.passprop||(c.passprop={});let p={},y=!1;for(let[w,T]of Object.entries(i))["children","key"].includes(w)||(y=!0,p[w]=T);let d={...r,...p};if(typeof u<"u"&&((typeof c.passprop.internal_key>"u"||u===c.passprop.internal_key)&&(c.passprop=d),d=c.passprop),n.editor_props=d,!Array.isArray(i.children)&&(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=(0,iC.default)(i.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(w)){let T=!0;for(let S of w)!(0,fs.isValidElement)(S)&&typeof S=="object"||(T=!1);if(T)return w.map(S=>{let _=e.meta[S.id];if(_||(e.meta[S.id]={item:S},_=e.meta[S.id]),_){if(Object.keys(_.item).length<=3&&_.mitem){let k={..._.item},v=_.mitem.toJSON();_.item={...v,...k}}return(0,ky.jsx)(xo,{is_layout:t,meta:_,passprop:d,parent_key:i.internal_key,depth:o},S.id)}return null})}}if(!Array.isArray(i.children)&&!(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=i.children.id;if(w){let T=e.meta[w];if(!T){e.meta[w]={item:i.children},T=e.meta[w];let S=T.item.component?.id;S&&e.comp.load(S).then(_=>{if(_){for(let[v,E]of Object.entries(_)){let P=T.item;P[v]||(P[v]=E)}let k=T.item.component?.props;for(let[v,E]of Object.entries(_.component?.props||{}))k[v]||(k[v]=E);l({})}})}return(0,ky.jsx)(xo,{is_layout:t,meta:T,passprop:d,parent_key:i.internal_key,depth:o})}}return vy(i,d,u?{parent_key:u}:void 0)},vy=(e,t,n)=>{let r={};if(Array.isArray(e)?r.children=e:r=e,Array.isArray(r.children)){if(r.children.length===1)return wy(r.children[0],r,t,n);let o=[];for(let i of r.children)o.push(wy(i,r,t,n));return o}return wy(r.children,r,t,n)},wy=(e,t,n,r)=>{if((0,fs.isValidElement)(e)){let o={...t};return delete o.children,{...e,props:{...e.props,...r,passprop:{...n,...o}}}}return e};var Na={},aC=(e,t,n)=>r=>{let o=(["prasi.avolut.com"].includes(location.hostname)||location.host==="localhost:4550")&&location.pathname.startsWith("/ed/"),i=n.item.id,{children:a,parent_key:l}=r,u=e.script?.init_local_effect,c=t?e.layout?.meta:e.meta,p=(0,ps.useRef)(Na[i]?Na[i]:r.value),[y,d]=(0,ps.useState)({}),x=p.current;return x.render=()=>{window.prasiContext.render?window.prasiContext.render():d({})},mp(e,n,n.script?.scope,l),r.hook&&r.hook(x),(0,ps.useEffect)(()=>{if(n.parent?.instance_id&&c){let T=c[n.parent?.instance_id];if(T&&T.instances){for(let[S,_]of Object.entries(T.instances[n.parent.instance_id]))if(_===n.item.id){i=S;break}}}return!u[i]&&(typeof u=="object"&&(u[i]=!0),(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()),()=>{}},[...r.deps||[],location.pathname]),(0,ps.useEffect)(()=>{o&&Na[i]===null&&(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()},[Na[i]]),vy(a,{...n.script?.scope,[r.name]:x})};h();g();m();var by=ye(v1());var rc=window,Da=(e,t,n,r)=>{let o=r||{},i=t.get("id")||"";rc.prasiEditDevItem||(rc.prasiEditDevItem={});let a=rc.prasiEditDevItem[n];a||(rc.prasiEditDevItem[n]={},a=rc.prasiEditDevItem[n]);let l=()=>{let p=t.get("id")||"",y=a[p];return y||(a[p]=[],y=a[p]),y},u=t.toJSON(),c={...u,edit:{get props(){if(u.component?.props){let p={};for(let[y,d]of Object.entries(u.component.props))if(d.content){let x=t.get("component")?.get("props")?.get(y)?.get("content");if(x){let w=x.get("id")||"";o[w]?p[y]={mode:"jsx",value:o[w]}:p[y]={mode:"jsx",value:Da(e,x,n,o)}}else p[y]={mode:"jsx",value:null}}else{let x=typeof d.valueBuilt=="string"?d.valueBuilt.trim():"";if(x.endsWith(`; +`),{code:i.slice(0,a+1)+n+i.slice(a+1)+r,mappings:this.shiftMappings(o.mappings,n.length)}}else return{code:n+i+r,mappings:this.shiftMappings(o.mappings,n.length)}}processBalancedCode(){let t=0,n=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(s.braceL)||this.tokens.matches1(s.dollarBraceL))t++;else if(this.tokens.matches1(s.braceR)){if(t===0)return;t--}if(this.tokens.matches1(s.parenL))n++;else if(this.tokens.matches1(s.parenR)){if(n===0)return;n--}this.processToken()}}processToken(){if(this.tokens.matches1(s._class)){this.processClass();return}for(let t of this.transformers)if(t.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(s._class,s.name))throw new Error("Expected identifier for exported class name.");let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),t}processClass(){let t=xy(this,this.tokens,this.nameManager,this.disableESTransforms),n=(t.headerInfo.isExpression||!t.headerInfo.className)&&t.staticInitializerNames.length+t.instanceInitializerNames.length>0,r=t.headerInfo.className;n&&(r=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(r),this.tokens.appendCode(` (${r} =`));let i=this.tokens.currentToken().contextId;if(i==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(s._class);!this.tokens.matchesContextIdAndLabel(s.braceL,i);)this.processToken();this.processClassBody(t,r);let a=t.staticInitializerNames.map(l=>`${r}.${l}()`);n?this.tokens.appendCode(`, ${a.map(l=>`${l}, `).join("")}${r})`):t.staticInitializerNames.length>0&&this.tokens.appendCode(` ${a.map(l=>`${l};`).join(" ")}`)}processClassBody(t,n){let{headerInfo:r,constructorInsertPos:o,constructorInitializerStatements:i,fields:a,instanceInitializerNames:l,rangesToRemove:u}=t,c=0,p=0,y=this.tokens.currentToken().contextId;if(y==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(s.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let d=i.length+l.length>0;if(o===null&&d){let x=this.makeConstructorInitCode(i,l,n);if(r.hasSuperclass){let w=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${w}) { super(...${w}); ${x}; }`)}else this.tokens.appendCode(`constructor() { ${x}; }`)}for(;!this.tokens.matchesContextIdAndLabel(s.braceR,y);)if(c=u[p].start){for(this.tokens.currentIndex()`${r}.prototype.${o}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(s.parenR,s.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,s.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(I._async)&&!this.tokens.matches1(s._async))return!1;let t=this.tokens.tokenAtRelativeIndex(1);if(t.type!==s.lessThan||!t.isType)return!1;let n=this.tokens.currentIndex()+1;for(;this.tokens.tokens[n].isType;)n++;if(this.tokens.matches1AtIndex(n,s.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex(){let n={};for(let[r,o]of Object.entries(e)){n[r]=nC(o,{transforms:["typescript","imports","jsx"],preserveDynamicImport:!0,disableESTransforms:!0,filePath:t}).code;let i=['"use strict";'];for(let a of i)n[r].startsWith(a)&&(n[r]=n[r].substring(a.length).trim())}return n};h();g();m();var ds=ye($t());h();g();m();var Hj=Lm("prasi-cache","prasi-cache-store"),rC={timeout:null,store:Hj},hp=(e,t)=>{let n=[...oC(t,"navigate(",")"),...oC(t,"href = ",";")],r=e.page.cur.id;e.page.navs[r]||(e.page.navs[r]=new Set);for(let o of n)e.page.navs[r].add(o);clearTimeout(rC.timeout),rC.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},oC=(e,t,n)=>{let r=0,o=0,i=[];for(;;){let a=e.indexOf(t,r);if(o=r,a>=0){let l=e[a+t.length];if(l==='"'||l==="'"||l==="`"){let u=e.indexOf(`${l}${n}`,a+t.length+1),c=e.substring(a+t.length+1,u);r=u+2+n.length,i.push(c)}}if(o===r)break}return i};h();g();m();var ps=ye($t());h();g();m();var iC=ye(ng()),fs=ye($t());var ky=ye(Ze()),sC=(e,t,n,r,o)=>i=>{let[a,l]=(0,fs.useState)({}),u=i.idx||i.internal_key;n.item.script||(n.item.script={});let c=n.item.script;typeof u<"u"&&(n.item.script_keyed||(n.item.script_keyed={}),n.item.script_keyed[u]||(n.item.script_keyed[u]={}),c=n.item.script_keyed[u]),c.passprop||(c.passprop={});let p={},y=!1;for(let[w,T]of Object.entries(i))["children","key"].includes(w)||(y=!0,p[w]=T);let d={...r,...p};if(typeof u<"u"&&((typeof c.passprop.internal_key>"u"||u===c.passprop.internal_key)&&(c.passprop=d),d=c.passprop),n.editor_props=d,!Array.isArray(i.children)&&(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=(0,iC.default)(i.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(w)){let T=!0;for(let S of w)!(0,fs.isValidElement)(S)&&typeof S=="object"||(T=!1);if(T)return w.map(S=>{let _=e.meta[S.id];if(_||(e.meta[S.id]={item:S},_=e.meta[S.id]),_){if(Object.keys(_.item).length<=3&&_.mitem){let k={..._.item},v=_.mitem.toJSON();_.item={...v,...k}}return(0,ky.jsx)(xo,{is_layout:t,meta:_,passprop:d,parent_key:i.internal_key,depth:o},S.id)}return null})}}if(!Array.isArray(i.children)&&!(0,fs.isValidElement)(i.children)&&typeof i.children=="object"){let w=i.children.id;if(w){let T=e.meta[w];if(!T){e.meta[w]={item:i.children},T=e.meta[w];let S=T.item.component?.id;S&&e.comp.load(S).then(_=>{if(_){for(let[v,E]of Object.entries(_)){let P=T.item;P[v]||(P[v]=E)}let k=T.item.component?.props;for(let[v,E]of Object.entries(_.component?.props||{}))k[v]||(k[v]=E);l({})}})}return(0,ky.jsx)(xo,{is_layout:t,meta:T,passprop:d,parent_key:i.internal_key,depth:o})}}return vy(i,d,u?{parent_key:u}:void 0)},vy=(e,t,n)=>{let r={};if(Array.isArray(e)?r.children=e:r=e,Array.isArray(r.children)){if(r.children.length===1)return wy(r.children[0],r,t,n);let o=[];for(let i of r.children)o.push(wy(i,r,t,n));return o}return wy(r.children,r,t,n)},wy=(e,t,n,r)=>{if((0,fs.isValidElement)(e)){let o={...t};return delete o.children,{...e,props:{...e.props,...r,passprop:{...n,...o}}}}return e};var Na={},aC=(e,t,n)=>r=>{let o=(["prasi.avolut.com"].includes(location.hostname)||location.host==="localhost:4550")&&location.pathname.startsWith("/ed/"),i=n.item.id,{children:a,parent_key:l}=r,u=e.script?.init_local_effect,c=t?e.layout?.meta:e.meta,p=(0,ps.useRef)(Na[i]?Na[i]:r.value),[y,d]=(0,ps.useState)({}),x=p.current;return x.render=()=>{window.prasiContext.render?window.prasiContext.render():d({})},mp(e,n,n.script?.scope,l),r.hook&&r.hook(x),(0,ps.useEffect)(()=>{if(n.parent?.instance_id&&c){let T=c[n.parent?.instance_id];if(T&&T.instances){for(let[S,_]of Object.entries(T.instances[n.parent.instance_id]))if(_===n.item.id){i=S;break}}}return!u[i]&&(typeof u=="object"&&(u[i]=!0),(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()),()=>{}},[...r.deps||[],location.pathname]),(0,ps.useEffect)(()=>{o&&Na[i]===null&&(async()=>r.effect&&(await r.effect(x),o&&(Na[i]=x)))()},[Na[i]]),vy(a,{...n.script?.scope,[r.name]:x})};h();g();m();var by=ye(v1());var rc=window,Da=(e,t,n,r)=>{let o=r||{},i=t.get("id")||"";rc.prasiEditDevItem||(rc.prasiEditDevItem={});let a=rc.prasiEditDevItem[n];a||(rc.prasiEditDevItem[n]={},a=rc.prasiEditDevItem[n]);let l=()=>{let p=t.get("id")||"",y=a[p];return y||(a[p]=[],y=a[p]),y},u=t.toJSON(),c={...u,edit:{get props(){if(u.component?.props){let p={};for(let[y,d]of Object.entries(u.component.props))if(d.content){let x=t.get("component")?.get("props")?.get(y)?.get("content");if(x){let w=x.get("id")||"";o[w]?p[y]={mode:"jsx",value:o[w]}:p[y]={mode:"jsx",value:Da(e,x,n,o)}}else p[y]={mode:"jsx",value:null}}else{let x=typeof d.valueBuilt=="string"?d.valueBuilt.trim():"";if(x.endsWith(`; `)&&(x=x.substring(0,x.length-2)),x&&x===d.value.trim()){let w=new Function(`return ${d.value}`);p[y]={mode:"string",value:w()}}else p[y]={mode:"raw",value:d.value,valueBuilt:d.valueBuilt}}return p}},get pending(){return[]},async commit(){let p={},y={};if(t){for(let[d,x]of Object.entries(a)){let w=e[d];if(!w||!w.mitem)continue;let S=w.mitem.toJSON();if(S&&S.component){let _=S?.component?.props;if(!_){console.log(S,_);return}let k={};for(let E of x)if(E.type==="prop"&&_)_[E.name]&&(E.mode==="string"?(_[E.name].value=JSON.stringify(E.value),_[E.name].valueBuilt=JSON.stringify(E.value)):E.mode==="raw"?(_[E.name].value=E.value,E.valueBuilt?_[E.name].valueBuilt=E.valueBuilt:k[E.name]=E.value):E.mode==="jsx"&&(_[E.name]||(_[E.name]={meta:{type:"content-element"}}),E.value&&(_[E.name].content=La([E.value],y)[0])));else if(E.type==="set"&&typeof E.value=="object")for(let[P,W]of Object.entries(E.value))S[P]=W;else if(E.type==="child"&&Array.isArray(E.childs))if(S.component?.id)S.component.props||(S.component.props={}),S.component.props.child={meta:{type:"content-element"},content:{type:"item",id:(0,by.createId)(),name:"child",childs:La(E.childs.filter(P=>P),y)}};else{let P=La(E.childs.filter(W=>W),y);S.childs=P}for(let[E,P]of Object.entries(y))k[E]=P.value;let v=dp(k);if(await new Promise(E=>{setTimeout(E)}),_)for(let[E,P]of Object.entries(v))_[E]?_[E].valueBuilt=P:y[E]&&(y[E].valueBuilt=P);p[d]=S}}t.doc?.transact(()=>{for(let[d,x]of Object.entries(p)){let w=e[d];w.mitem&&syncronize(w.mitem,x)}})}},setValue(p,y){let d=l(),x=y;if(p==="childs")throw new Error("Please modify childs via .child");d.push({type:"set",name:p,value:x})},setProp(p,y){let d=l();typeof y=="string"?d.push({type:"prop",mode:"string",name:p,value:y}):y.mode==="string"?d.push({type:"prop",mode:"string",name:p,value:y.value}):y.mode==="raw"?d.push({type:"prop",mode:"raw",name:p,value:y.value,valueBuilt:y.valueBuilt}):y.mode==="jsx"&&d.push({type:"prop",mode:"jsx",name:p,value:y.value})},setChilds(p){l().push({type:"child",childs:p})},get childs(){if(u.component?.id){let p=u.component?.props.child;if(p&&p.content){let y=t.get("component")?.get("props")?.get("child")?.get("content");if(y){let d=y.get("id")||"";return o[d]?[o[d]]:[Da(e,y,n,o)]}}return[]}return u.childs?u.childs.map(p=>{if(p){let y=e[p.id];if(o[p.id])return o[p.id];if(y&&y.mitem)return Da(e,y.mitem,n,o)}}).filter(p=>p):[]},get parent(){if(t){let p=t.parent.toJSON(),y=null;if(Array.isArray(p))y=(t.parent?.parent).get("id");else{let x=t.parent?.parent?.parent?.parent;typeof x=="object"&&typeof x.get=="function"&&(y=x.get("id"))}let d=e[y]?.mitem;if(d){let x=o[y]?o[y]:Da(e,d,n,o);return Array.isArray(p)?{item:x,child_type:"child",child_idx:p.findIndex(w=>w.id===x.id)}:{item:x,child_type:"prop"}}}return null}}};return o[i]=c,c},Wj=(e,t)=>{let n={};for(let[r,o]of Object.entries(e))o.mode?o.mode==="string"?n[r]={value:JSON.stringify(o.value),valueBuilt:JSON.stringify(o.value),meta:{type:"text"}}:o.mode==="jsx"&&o.value?n[r]={value:"",valueBuilt:"",content:La([o.value],t)[0],meta:{type:"content-element"}}:o.mode==="raw"&&(n[r]={value:o.value,valueBuilt:o.valueBuilt,meta:{type:"text"}}):n[r]=o;return n},La=(e,t)=>{let n=t||{};return e.map(o=>{let i={...o};if(delete i.edit,i.id||(i.id=(0,by.createId)()),i.component&&(i.component.instances||(i.component.instances={}),i.component.ref_ids||(i.component.ref_ids={}),i.component?.props)){i.component.props=Wj(i.component.props,n);for(let[a,l]of Object.entries(i.component.props))!l.valueBuilt&&l.value&&(n[i.id+"|||"+a]=l),l.content&&(l.content=La([l.content],n)[0])}return i.childs?i.childs=La(i.childs,n):i.childs=[],i})};h();g();m();var Ma=(e,t,n)=>({...t,edit:{setChilds(r){},get childs(){if(t.component?.id){let r=t.component?.props.child;return r.content?[Ma(e,r.content,n)]:[]}return t.childs?t.childs.map(r=>{if(r){let o=e[r.id];if(o&&o.item)return Ma(e,o.item,n)}}).filter(r=>r):[]},get props(){if(t.component?.props){let r={};for(let[o,i]of Object.entries(t.component.props))if(i.content){let a=t.component?.props?.[o]?.content;a?r[o]={mode:"jsx",value:Ma(e,a,n)}:r[o]={mode:"jsx",value:null}}else{let a=typeof i.valueBuilt=="string"?i.valueBuilt.trim():"";if(a.endsWith(`; `)&&(a=a.substring(0,a.length-2)),a&&a===i.value.trim()){let l=new Function(`return ${i.value}`);r[o]={mode:"string",value:l()}}else r[o]={mode:"raw",value:i.value,valueBuilt:i.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let o=e[r.parent.id];return Ma(e,o.item,n)}return null},pending:[],setProp(r,o){},setValue(r,o){}}});var Sy=ye(Ze()),lC=(e,t,n,r,o,i)=>{let a=wu(e,t,n,r,o);e.visit&&e.visit(t,a),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:aC(e,n,t),PassProp:sC(e,n,t,r,o)};let l=t.script,u=window.exports,c={useEffect:ds.useEffect,children:a.props.children,props:a.props,Local:l?.Local,db:e.site.db,api:e.site.api,PassProp:l?.PassProp,ErrorBox:$r,newElement:()=>{},__props:r,_item:t.mitem?Da(e.meta,t.mitem,e.page.cur.id):Ma(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:x=>{let w=x;if((0,ds.isValidElement)(x)&&x.props.children){let T=_=>{let k=!1,v=[];if((0,ds.isValidElement)(_)){if(_.type===t.script?.PassProp)return{should_replace:!0,el:{..._,props:{..._.props,internal_key:_.key}}};if(Array.isArray(_.props?.children))for(let E of _.props?.children)if(Array.isArray(E)){let P=[],W=!1;for(let D of E){let Y=T(D);Y.should_replace?(P.push(Y.el),W=!0):P.push(D)}W?(k=!0,v.push(P)):v.push(E)}else typeof E=="object"&&E?E.type===t.script?.PassProp&&(k=!0,v.push({...E,props:{...E.props,internal_key:E.props.key}})):v.push(E)}return{should_replace:k,el:{..._,props:{..._.props,children:v}}}},S=T(x);S.should_replace&&(w=S.el)}l&&(l.result=(0,Sy.jsx)(ds.Suspense,{children:w}))},params,...T1(e),...u,...r};if(typeof r=="object"){for(let[x,w]of Object.entries(r))if(typeof w=="object"&&w&&w._jsx){let T=w;c[x]=(0,Sy.jsx)(qj,{fn:T.fn,passprop:{...r},meta:t})}}!fn.isEditor&&t.item.adv?.js&&hp(e,t.item.adv.js);let p=t.item.adv?.jsBuilt||"",y=Ty(p,Ey)||"",d=`// ${t.item.name}: ${t.item.id} try { @@ -260,7 +260,7 @@ ERROR: \${e.message} ${d} ${x.message} -`)}mp(e,t,r,i)},qj=({fn:e,meta:t,passprop:n})=>e({passprop:n,meta:t}),Ey={"stroke-width":"strokeWidth","fill-rule":"fillRule","clip-rule":"clipRule","stroke-linejoin":"strokeLinejoin","stroke-linecap":"strokeLinecap","clip-path":"clipPath"},Ty=(e,t)=>{let n=e;for(let[r,o]of Object.entries(t))n=n.replaceAll(r,o);return n};var fC=ye(Ze());var cC=(e,t,n,r,o,i)=>{if(t.item.component?.id){let a=t.item.script;if(i?(t.item.script_keyed||(t.item.script_keyed={}),t.item.script_keyed[i]||(t.item.script_keyed[i]={}),a=t.item.script_keyed[i]):(t.item.script||(t.item.script={}),a=t.item.script),!a)return;let u={...window.exports,db:e.site.db,api:e.site.api,...T1(e),...r,params};a.props={};let c=new Set;if(t.item.component.props){let p={};for(let[y,d]of Object.entries(t.item.component.props))try{if(d.meta?.type==="content-element"){let _={_jsx:!0,fn:k=>{let v=d.content?.id;if(v){let E=n?e.layout?.meta[v]:e.meta[v];if(!E)return null;let P=t.instances;if(!k.meta.item.originalId||!P||!P[t.item.id])return null;let D=k.meta.item.originalId;if(E.mitem&&(d.jsxCalledBy&&(!d.jsxCalledBy.includes(D)||d.jsxCalledBy.length!==2)||!d.jsxCalledBy)){let Y=t.mitem?.get("component")?.get("props")?.get(y);if(Y){let J=Y.get("jsxCalledBy");!J||typeof J!="object"?Y.set("jsxCalledBy",[t.item.id,D]):Array.isArray(J)&&(!J.includes(D)||J.length!==2||J[0]!==t.item.id||J[1]!==D)&&Y.set("jsxCalledBy",[t.item.id,D])}}return(0,fC.jsx)(xo,{meta:E,passprop:k.passprop,is_layout:n,depth:o+1})}return null}};u[y]=_,r&&(r[y]=_);continue}if(d.value&&hp(e,d.value),!d.valueBuilt&&d.value&&t.mitem){let _=t.mitem?.get("component")?.get("props")?.get(y);if(_){Vj(_,d.value);return}}let x=d.valueBuilt||"",w=Ty(x,Ey)||"",T=new Function(...Object.keys(u),`// [${t.item.name}] ${y}: ${t.item.id} +`)}mp(e,t,r,i)},qj=({fn:e,meta:t,passprop:n})=>e({passprop:n,meta:t}),Ey={"stroke-width":"strokeWidth","fill-rule":"fillRule","clip-rule":"clipRule","stroke-linejoin":"strokeLinejoin","stroke-linecap":"strokeLinecap","clip-path":"clipPath","stroke-miterlimit":"strokeMiterlimit"},Ty=(e,t)=>{let n=e;for(let[r,o]of Object.entries(t))n=n.replaceAll(r,o);return n};var fC=ye(Ze());var cC=(e,t,n,r,o,i)=>{if(t.item.component?.id){let a=t.item.script;if(i?(t.item.script_keyed||(t.item.script_keyed={}),t.item.script_keyed[i]||(t.item.script_keyed[i]={}),a=t.item.script_keyed[i]):(t.item.script||(t.item.script={}),a=t.item.script),!a)return;let u={...window.exports,db:e.site.db,api:e.site.api,...T1(e),...r,params};a.props={};let c=new Set;if(t.item.component.props){let p={};for(let[y,d]of Object.entries(t.item.component.props))try{if(d.meta?.type==="content-element"){let _={_jsx:!0,fn:k=>{let v=d.content?.id;if(v){let E=n?e.layout?.meta[v]:e.meta[v];if(!E)return null;let P=t.instances;if(!k.meta.item.originalId||!P||!P[t.item.id])return null;let D=k.meta.item.originalId;if(E.mitem&&(d.jsxCalledBy&&(!d.jsxCalledBy.includes(D)||d.jsxCalledBy.length!==2)||!d.jsxCalledBy)){let Y=t.mitem?.get("component")?.get("props")?.get(y);if(Y){let J=Y.get("jsxCalledBy");!J||typeof J!="object"?Y.set("jsxCalledBy",[t.item.id,D]):Array.isArray(J)&&(!J.includes(D)||J.length!==2||J[0]!==t.item.id||J[1]!==D)&&Y.set("jsxCalledBy",[t.item.id,D])}}return(0,fC.jsx)(xo,{meta:E,passprop:k.passprop,is_layout:n,depth:o+1})}return null}};u[y]=_,r&&(r[y]=_);continue}if(d.value&&hp(e,d.value),!d.valueBuilt&&d.value&&t.mitem){let _=t.mitem?.get("component")?.get("props")?.get(y);if(_){Vj(_,d.value);return}}let x=d.valueBuilt||"",w=Ty(x,Ey)||"",T=new Function(...Object.keys(u),`// [${t.item.name}] ${y}: ${t.item.id} return ${w} `);a.props[y]={value:w,valueBuilt:w};let S=T(...Object.values(u));typeof S=="function"&&(S=(..._)=>new Function(...Object.keys(u),`// [${t.item.name}] ${y}: ${t.item.id} return ${w.trim()} diff --git a/app/web/src/nova/ed/panel/popup/script/code-edit/adv-js.ts b/app/web/src/nova/ed/panel/popup/script/code-edit/adv-js.ts new file mode 100644 index 00000000..4e98f16a --- /dev/null +++ b/app/web/src/nova/ed/panel/popup/script/code-edit/adv-js.ts @@ -0,0 +1,27 @@ +import { codeBuild } from "../../../../../vi/render/script/code-build"; +import { getMetaById } from "../../../../logic/active/get-meta"; +import { active, PG } from "../../../../logic/ed-global"; + +export const codeEditAdvJs = (p: PG, value: string) => { + const meta = getMetaById(p, active.item_id); + + if (meta) { + const mprop = meta.mitem?.get("adv"); + if (mprop) { + try { + const valueBuilt = codeBuild( + { _: `render (${value})` }, + `[item: ${meta.item.name} - ${meta.item.id}]` + )["_"]; + + mprop.doc?.transact(() => { + mprop.set("js", value); + mprop.set("jsBuilt", valueBuilt); + console.log(mprop.toJSON()); + }); + } catch (e: any) { + return e.message; + } + } + } +}; diff --git a/app/web/src/nova/ed/panel/popup/script/code-edit/prop-instance.ts b/app/web/src/nova/ed/panel/popup/script/code-edit/prop-instance.ts new file mode 100644 index 00000000..89052e82 --- /dev/null +++ b/app/web/src/nova/ed/panel/popup/script/code-edit/prop-instance.ts @@ -0,0 +1,20 @@ +import { codeBuild } from "../../../../../vi/render/script/code-build"; +import { getMetaById } from "../../../../logic/active/get-meta"; +import { active, PG } from "../../../../logic/ed-global"; + +export const codeEditPropInstance = (p: PG, value: string) => { + const prop_name = p.ui.popup.script.prop_name; + const meta = getMetaById(p, active.item_id); + + if (meta) { + const mprop = meta.mitem?.get("component")?.get("props")?.get(prop_name); + if (mprop) { + const valueBuilt = codeBuild({ _: value })["_"]; + mprop.doc?.transact(() => { + mprop.set("value", value); + mprop.set("valueBuilt", valueBuilt); + }); + return valueBuilt; + } + } +}; diff --git a/app/web/src/nova/ed/panel/popup/script/code-edit/prop-master.ts b/app/web/src/nova/ed/panel/popup/script/code-edit/prop-master.ts new file mode 100644 index 00000000..965d9d7c --- /dev/null +++ b/app/web/src/nova/ed/panel/popup/script/code-edit/prop-master.ts @@ -0,0 +1,42 @@ +import { codeBuild } from "../../../../../vi/render/script/code-build"; +import { active, PG } from "../../../../logic/ed-global"; + +export const codeEditPropMaster = (p: PG, value: string) => { + const prop_kind = p.ui.popup.script.prop_kind; + const prop_name = p.ui.popup.script.prop_name; + const comp = p.comp.list[active.comp_id]; + + if (comp) { + const mprop = comp.doc + .getMap("map") + .get("root") + ?.get("component") + ?.get("props") + ?.get(prop_name); + if (mprop) { + const valueBuilt = codeBuild({ _: value })["_"]; + mprop.doc?.transact(() => { + if (prop_kind === "value") { + mprop.set("value", value); + mprop.set("valueBuilt", valueBuilt); + } else if (prop_kind === "onChange") { + mprop.set("onChange", value); + mprop.set("onChangeBuilt", valueBuilt); + } else if (prop_kind === "gen") { + mprop.set("gen", value); + mprop.set("genBuilt", valueBuilt); + } else if (prop_kind === "visible") { + mprop.set("visible", value); + } else if (prop_kind === "typings") { + mprop.set("typings", value); + } else if (prop_kind === "option") { + const meta = mprop.get("meta"); + if (meta) { + meta.set("options", value); + meta.set("optionsBuilt", valueBuilt); + } + } + }); + } + } +}; diff --git a/app/web/src/nova/ed/panel/popup/script/monaco.tsx b/app/web/src/nova/ed/panel/popup/script/monaco.tsx index 8c849466..2ac3615a 100644 --- a/app/web/src/nova/ed/panel/popup/script/monaco.tsx +++ b/app/web/src/nova/ed/panel/popup/script/monaco.tsx @@ -18,6 +18,9 @@ import { declareScope } from "./scope/scope"; import { FNCompDef } from "../../../../../utils/types/meta-fn"; import { editorLocalValue } from "../../../../vi/render/script/local"; import { propInstanceOnChange } from "../../side/prop-instance/on-change"; +import { codeEditPropMaster } from "./code-edit/prop-master"; +import { codeEditPropInstance } from "./code-edit/prop-instance"; +import { codeEditAdvJs } from "./code-edit/adv-js"; const scriptEdit = { timeout: null as any, @@ -327,22 +330,9 @@ export const EdScriptMonaco: FC<{}> = () => { p.ui.popup.script.typings.err_msg = ""; if (stype === "prop-master") { - p.sync.code.edit({ - type: "prop-master", - prop_kind: p.ui.popup.script.prop_kind, - prop_name: p.ui.popup.script.prop_name, - value: compress(encode.encode(value || "")), - ...arg, - }); + codeEditPropMaster(p, value); } else if (stype === "prop-instance") { - const code_result = await p.sync.code.edit({ - type: "prop-instance", - mode: mode, - prop_name: p.ui.popup.script.prop_name, - item_id: active.item_id, - value: compress(encode.encode(value || "")), - ...arg, - }); + const code_result = codeEditPropInstance(p, value); if (p.ui.popup.script.prop_kind === "value") { propInstanceOnChange(p, p.ui.popup.script.prop_name, value); @@ -356,13 +346,7 @@ export const EdScriptMonaco: FC<{}> = () => { } } else { editorLocalValue[active.item_id] = null; - const code_result = await p.sync.code.edit({ - type: "adv", - mode: mode, - item_id: active.item_id, - value: compress(encode.encode(value || "")), - ...arg, - }); + const code_result = codeEditAdvJs(p, value); if (typeof code_result === "string") { p.ui.popup.script.typings.status = "error"; diff --git a/app/web/src/nova/vi/render/script/code-build.ts b/app/web/src/nova/vi/render/script/code-build.ts index b910c688..91d0086c 100644 --- a/app/web/src/nova/vi/render/script/code-build.ts +++ b/app/web/src/nova/vi/render/script/code-build.ts @@ -1,17 +1,20 @@ import { transform } from "sucrase"; -export const codeBuild = (codes: Record) => { +export const codeBuild = (codes: Record, filePath?: string) => { const result = {} as Record; for (const [k, v] of Object.entries(codes)) { result[k] = transform(v, { transforms: ["typescript", "imports", "jsx"], preserveDynamicImport: true, disableESTransforms: true, + filePath: filePath, }).code; - const use_strict = `"use strict";`; - if (result[k].startsWith(use_strict)) { - result[k] = result[k].substring(use_strict.length).trim(); + const removes = [`"use strict";`]; + for (const r of removes) { + if (result[k].startsWith(r)) { + result[k] = result[k].substring(r.length).trim(); + } } } return result; diff --git a/app/web/src/nova/vi/render/script/eval-script.tsx b/app/web/src/nova/vi/render/script/eval-script.tsx index c7df34f1..089d7052 100644 --- a/app/web/src/nova/vi/render/script/eval-script.tsx +++ b/app/web/src/nova/vi/render/script/eval-script.tsx @@ -179,7 +179,7 @@ ERROR: $\{e.message} } `; try { - const fn = new Function(...Object.keys(arg), '__js', final_src); + const fn = new Function(...Object.keys(arg), "__js", final_src); fn(...Object.values(arg), meta.item.adv?.js); } catch (e: any) { console.error(`\n @@ -210,6 +210,7 @@ export const replacement = { "stroke-linejoin": "strokeLinejoin", "stroke-linecap": "strokeLinecap", "clip-path": "clipPath", + "stroke-miterlimit": "strokeMiterlimit", }; export const replaceWithObject = (tpl: string, data: any) => {