diff --git a/app/srv/core/main.js b/app/srv/core/main.js index f418fdc4..39f3ee02 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -95,7 +95,7 @@ Error generating stack: `+i.message+` ${hy(e,t.mode)} ${ey(e,t.mode)} ${vy(e,t.mode)} - `,(t?.hover||t?.active)&&gy({item:e,hover:t?.hover,active:t?.active}),Zh(e,t.mode)])}catch(n){console.log(n)}return cx([])};var _y=O(V()),Lo=(e,t,n,r)=>{let o=t.item,i;o.component?.style&&(i={style:o.component.style,className:nc(o.component.style,{mode:e.mode})});let s={className:nc(o,{mode:e.mode}),inherit:i},l={},a=t.item.childs,f;return t.item.type==="text"?(f=null,s.dangerouslySetInnerHTML={__html:t.item.html||""}):f=Array.isArray(a)&&a?.map(u=>{if(!u)return null;let{id:c}=u,d=n?e.layout?.meta[c]:e.meta[c];return d?(0,_y.jsx)(bt,{meta:d,is_layout:n,passprop:r},c):null}),s.children=f,t.item.adv?.html?(delete s.children,s.dangerouslySetInnerHTML={__html:t.item.adv?.html}):t.item.adv?.js&&!t.item.adv.js.includes("children")&&(delete s.children,delete s.dangerouslySetInnerHTML),{props:s,text_props:l}};var $y=O(ce());var By=O(oc());var yr={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function Ls(e={}){let t={options:e,rootNode:Ty(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)Iy(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>Kx(t,n(r)),insert:(r,o)=>Iy(t,n(r),o),remove:r=>Qx(t,n(r))}}function Kx(e,t){let n=e.staticRoutesMap[t];if(n)return n.data;let r=t.split("/"),o={},i=!1,s=null,l=e.rootNode,a=null;for(let f=0;f{},db:null,api:null,init_local_effect:{}},page:{history:{id:"",show:!1},root_id:"root",cur:Jx,doc:null,list:{},building:!1,meta:{},entry:[],tree:[],render:()=>{}},comp:{doc:null,item:null,loaded:{},list:{},group:{}},code:{},global_prop:[],ui:{comp_editable:localStorage.getItem("prasi-comp-editable")==="yes",zoom:localStorage.zoom||"100%",side:{prop:!0},layout:{left:parseInt(localStorage.getItem("prasi-layout-left")||"250"),right:parseInt(localStorage.getItem("prasi-layout-right")||"250")},prevent_indent_hook:!1,syncing:!1,tree:{item_loading:[],search:"",search_ref:null,search_mode:{Name:!0,JS:!1,HTML:!1,CSS:!1},rename_id:"",open:{}},popup:{file:{enabled:!1,open:!1,picker:{value:"",on_pick:!1,multi:!1},path:"/",expanded:JSON.parse(localStorage.getItem("panel-file-expanded")||"{}"),entry:{},selected:new Set,action:null,file_renaming:"",file_ctx_menu_event:null,tree:[],tree_renaming:"",tree_ctx_path:"",tree_ctx_menu_event:null,preview:!0,upload:{started:!1,progress:{}}},code:{init:!1,open:!1,name:"site",log:"",loading:!1,startup_status:"init",error:!1,show_log:!1,list:{}},page:{open:null,form:null},script:{open:!1,mode:"js",lastMode:"js",type:"item",prop_kind:"",prop_name:"",on_close:()=>{},typings:{status:"ok",err_msg:""},wb_render:()=>{}},site:null,site_form:null,comp:{preview_id:"",open:null,import:!1},comp_group:null,api:{open:!1}}}};var As=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var Fs=O(ce());var Je=window;function sc(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function lc(e,t){let n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);let r=sc(n);return(o,i)=>r.then(s=>i(s.transaction(t,o).objectStore(t)))}var ic;function by(){return ic||(ic=lc("keyval-store","keyval")),ic}function ac(e,t=by()){return t("readonly",n=>sc(n.get(e)))}function Ly(e,t,n=by()){return n("readwrite",r=>(r.put(t,e),sc(r.transaction)))}var Yx=lc("prasi-cache","prasi-cache-store"),jo={timeout:null,store:Yx},Ms=(e,t)=>{let n=[...Ay(t,"navigate(",")"),...Ay(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(jo.timeout),jo.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},Ay=(e,t,n)=>{let r=0,o=0,i=[];for(;;){let s=e.indexOf(t,r);if(o=r,s>=0){let l=e[s+t.length];if(l==='"'||l==="'"||l==="`"){let a=e.indexOf(`${l}${n}`,s+t.length+1),f=e.substring(s+t.length+1,a);r=a+2+n.length,i.push(f)}}if(o===r)break}return i};var Do=O(ce());var jy=O(tc()),Fo=O(ce());var uc=O(V()),Fy=(e,t,n,r)=>o=>{n.item.script||(n.item.script={}),n.item.script.passprop||(n.item.script.passprop={});let i={};if(n.item.script.passprop){let a=!1;for(let[f,u]of Object.entries(o))["children","key"].includes(f)||(a=!0,i[f]=u,n.item.script.passprop[f]={end:0,start:0,value:u})}let s={...r,...i};if(!Array.isArray(o.children)&&(0,Fo.isValidElement)(o.children)&&typeof o.children=="object"){let a=(0,jy.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(a)){let f=!0;for(let u of a)!(0,Fo.isValidElement)(u)&&typeof u=="object"||(f=!1);if(f)return a.map(u=>{let c=e.meta[u.id];if(c||(e.meta[u.id]={item:u},c=e.meta[u.id]),c){if(Object.keys(c.item).length<=3&&c.mitem){let d={...c.item},y=c.mitem.toJSON();c.item={...y,...d}}return(0,uc.jsx)(bt,{is_layout:t,meta:c,passprop:s},u.id)}return null})}}if(!Array.isArray(o.children)&&!(0,Fo.isValidElement)(o.children)&&typeof o.children=="object"){let a=o.children.id;if(a){let f=e.meta[a];return(0,uc.jsx)(bt,{is_layout:t,meta:f,passprop:s})}}return cc(o,n.script?.scope)},cc=(e,t)=>{let n={};if(Array.isArray(e)?n.children=e:n=e,Array.isArray(n.children)){let r=[];for(let o of n.children)r.push(My(o,n,t));return r}return My(n.children,n,t)},My=(e,t,n)=>{if((0,Fo.isValidElement)(e)){let r={...t};return delete r.children,{...e,props:{...e.props,passprop:{...n,...r}}}}return e};var vr={},Dy=(e,t,n)=>r=>{let o=["localhost","prasi.avolut.com"].includes(location.hostname)&&location.pathname.startsWith("/ed/"),i=n.item.id,{children:s}=r,l=e.script?.init_local_effect,a=t?e.layout?.meta:e.meta,u=(0,Do.useRef)(vr[i]?vr[i]:r.value).current;return u.render=n.render,js(e,n,n.script?.scope),r.hook&&r.hook(u),(0,Do.useEffect)(()=>{if(n.parent?.instance_id&&a){let d=a[n.parent?.instance_id];if(d&&d.instances){for(let[y,m]of Object.entries(d.instances[n.parent.instance_id]))if(m===n.item.id){i=y;break}}}return!l[i]&&(typeof l=="object"&&(l[i]=!0),(async()=>r.effect&&(await r.effect(u),o&&(vr[i]=u)))()),()=>{}},[location.pathname]),(0,Do.useEffect)(()=>{o&&vr[i]===null&&(async()=>r.effect&&(await r.effect(u),o&&(vr[i]=u)))()},[vr[i]]),cc(s,{...n.script?.scope,[r.name]:u})};var fc=O(V()),zy=(e,t,n,r)=>{let o=Lo(e,t,n,r);e.visit&&e.visit(t,o),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:Dy(e,n,t),PassProp:Fy(e,n,t,r)};let i=t.script,s=window.exports,l={useEffect:Fs.useEffect,children:o.props.children,props:o.props,Local:i.Local,db:e.site.db,api:e.site.api,PassProp:i?.PassProp,ErrorBox:yt,newElement:()=>{},render:c=>{i.result=(0,fc.jsx)(Fs.Suspense,{children:c})},params,...As(e),...s,...r};if(typeof r=="object"){for(let[c,d]of Object.entries(r))if(typeof d=="object"&&d&&d._jsx){let y=d;l[c]=(0,fc.jsx)(Zx,{fn:y.fn,passprop:r,meta:t})}}!Je.isEditor&&t.item.adv?.js&&Ms(e,t.item.adv.js);let a=t.item.adv?.jsBuilt||"",f=pc(a,dc)||"";new Function(...Object.keys(l),`// ${t.item.name}: ${t.item.id} + `,(t?.hover||t?.active)&&gy({item:e,hover:t?.hover,active:t?.active}),Zh(e,t.mode)])}catch(n){console.log(n)}return cx([])};var _y=O(V()),Lo=(e,t,n,r)=>{let o=t.item,i;o.component?.style&&(i={style:o.component.style,className:nc(o.component.style,{mode:e.mode})});let s={className:nc(o,{mode:e.mode}),inherit:i},l={},a=t.item.childs,f;return t.item.type==="text"?(f=null,s.dangerouslySetInnerHTML={__html:t.item.html||""}):f=Array.isArray(a)&&a?.map(u=>{if(!u)return null;let{id:c}=u,d=n?e.layout?.meta[c]:e.meta[c];return d?(0,_y.jsx)(bt,{meta:d,is_layout:n,passprop:r},c):null}),s.children=f,t.item.adv?.html?(delete s.children,s.dangerouslySetInnerHTML={__html:t.item.adv?.html}):t.item.adv?.js&&!t.item.adv.js.includes("children")&&(delete s.children,delete s.dangerouslySetInnerHTML),{props:s,text_props:l}};var $y=O(ce());var By=O(oc());var yr={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function Ls(e={}){let t={options:e,rootNode:Ty(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)Iy(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>Kx(t,n(r)),insert:(r,o)=>Iy(t,n(r),o),remove:r=>Qx(t,n(r))}}function Kx(e,t){let n=e.staticRoutesMap[t];if(n)return n.data;let r=t.split("/"),o={},i=!1,s=null,l=e.rootNode,a=null;for(let f=0;f{},db:null,api:null,init_local_effect:{}},page:{history:{id:"",show:!1},root_id:"root",cur:Jx,doc:null,list:{},building:!1,meta:{},entry:[],tree:[],render:()=>{}},comp:{doc:null,item:null,loaded:{},list:{},group:{}},code:{},global_prop:[],ui:{comp_editable:localStorage.getItem("prasi-comp-editable")==="yes",zoom:localStorage.zoom||"100%",side:{prop:!0},layout:{left:parseInt(localStorage.getItem("prasi-layout-left")||"250"),right:parseInt(localStorage.getItem("prasi-layout-right")||"250")},prevent_indent_hook:!1,syncing:!1,tree:{item_loading:[],search:"",search_ref:null,search_mode:{Name:!0,JS:!1,HTML:!1,CSS:!1},rename_id:"",open:{}},popup:{file:{enabled:!1,open:!1,picker:{value:"",on_pick:!1,multi:!1},path:"/",expanded:JSON.parse(localStorage.getItem("panel-file-expanded")||"{}"),entry:{},selected:new Set,action:null,file_renaming:"",file_ctx_menu_event:null,tree:[],tree_renaming:"",tree_ctx_path:"",tree_ctx_menu_event:null,preview:!0,upload:{started:!1,progress:{}}},code:{init:!1,open:!1,name:"site",log:"",loading:!1,startup_status:"init",error:!1,show_log:!1,list:{}},page:{open:null,form:null},script:{open:!1,mode:"js",lastMode:"js",type:"item",prop_kind:"",prop_name:"",on_close:()=>{},typings:{status:"ok",err_msg:""},wb_render:()=>{}},site:null,site_form:null,comp:{preview_id:"",open:null,import:!1},comp_group:null,api:{open:!1}}}};var As=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var Fs=O(ce());var Je=window;function sc(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function lc(e,t){let n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);let r=sc(n);return(o,i)=>r.then(s=>i(s.transaction(t,o).objectStore(t)))}var ic;function by(){return ic||(ic=lc("keyval-store","keyval")),ic}function ac(e,t=by()){return t("readonly",n=>sc(n.get(e)))}function Ly(e,t,n=by()){return n("readwrite",r=>(r.put(t,e),sc(r.transaction)))}var Yx=lc("prasi-cache","prasi-cache-store"),jo={timeout:null,store:Yx},Ms=(e,t)=>{let n=[...Ay(t,"navigate(",")"),...Ay(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(jo.timeout),jo.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},Ay=(e,t,n)=>{let r=0,o=0,i=[];for(;;){let s=e.indexOf(t,r);if(o=r,s>=0){let l=e[s+t.length];if(l==='"'||l==="'"||l==="`"){let a=e.indexOf(`${l}${n}`,s+t.length+1),f=e.substring(s+t.length+1,a);r=a+2+n.length,i.push(f)}}if(o===r)break}return i};var Do=O(ce());var jy=O(tc()),Fo=O(ce());var uc=O(V()),Fy=(e,t,n,r)=>o=>{n.item.script||(n.item.script={}),n.item.script.passprop||(n.item.script.passprop={});let i={};if(n.item.script.passprop){let a=!1;for(let[f,u]of Object.entries(o))["children","key"].includes(f)||(a=!0,i[f]=u,n.item.script.passprop[f]={end:0,start:0,value:u})}let s={...r,...i};if(!Array.isArray(o.children)&&(0,Fo.isValidElement)(o.children)&&typeof o.children=="object"){let a=(0,jy.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(a)){let f=!0;for(let u of a)!(0,Fo.isValidElement)(u)&&typeof u=="object"||(f=!1);if(f)return a.map(u=>{let c=e.meta[u.id];if(c||(e.meta[u.id]={item:u},c=e.meta[u.id]),c){if(Object.keys(c.item).length<=3&&c.mitem){let d={...c.item},y=c.mitem.toJSON();c.item={...y,...d}}return(0,uc.jsx)(bt,{is_layout:t,meta:c,passprop:s},u.id)}return null})}}if(!Array.isArray(o.children)&&!(0,Fo.isValidElement)(o.children)&&typeof o.children=="object"){let a=o.children.id;if(a){let f=e.meta[a];return(0,uc.jsx)(bt,{is_layout:t,meta:f,passprop:s})}}return cc(o,n.script?.scope)},cc=(e,t)=>{let n={};if(Array.isArray(e)?n.children=e:n=e,Array.isArray(n.children)){let r=[];for(let o of n.children)r.push(My(o,n,t));return r}return My(n.children,n,t)},My=(e,t,n)=>{if((0,Fo.isValidElement)(e)){let r={...t};return delete r.children,{...e,props:{...e.props,passprop:{...n,...r}}}}return e};var vr={},Dy=(e,t,n)=>r=>{let o=["localhost","prasi.avolut.com"].includes(location.hostname)&&location.pathname.startsWith("/ed/"),i=n.item.id,{children:s}=r,l=e.script?.init_local_effect,a=t?e.layout?.meta:e.meta,u=(0,Do.useRef)(vr[i]?vr[i]:r.value).current;return u.render=n.render,js(e,n,n.script?.scope),r.hook&&r.hook(u),(0,Do.useEffect)(()=>{if(n.parent?.instance_id&&a){let d=a[n.parent?.instance_id];if(d&&d.instances){for(let[y,m]of Object.entries(d.instances[n.parent.instance_id]))if(m===n.item.id){i=y;break}}}return!l[i]&&(typeof l=="object"&&(l[i]=!0),(async()=>r.effect&&(await r.effect(u),o&&(vr[i]=u)))()),()=>{}},[location.pathname]),(0,Do.useEffect)(()=>{o&&vr[i]===null&&(async()=>r.effect&&(await r.effect(u),o&&(vr[i]=u)))()},[vr[i]]),cc(s,{...n.script?.scope,[r.name]:u})};var fc=O(V()),zy=(e,t,n,r)=>{let o=Lo(e,t,n,r);e.visit&&e.visit(t,o),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:Dy(e,n,t),PassProp:Fy(e,n,t,r)};let i=t.script,s=window.exports,l={useEffect:Fs.useEffect,children:o.props.children,props:o.props,Local:i.Local,db:e.site.db,api:e.site.api,PassProp:i?.PassProp,ErrorBox:yt,newElement:()=>{},render:c=>{i.result=(0,fc.jsx)(Fs.Suspense,{children:c})},params,...As(e),...s,...r,_meta:e.meta};if(typeof r=="object"){for(let[c,d]of Object.entries(r))if(typeof d=="object"&&d&&d._jsx){let y=d;l[c]=(0,fc.jsx)(Zx,{fn:y.fn,passprop:r,meta:t})}}!Je.isEditor&&t.item.adv?.js&&Ms(e,t.item.adv.js);let a=t.item.adv?.jsBuilt||"",f=pc(a,dc)||"";new Function(...Object.keys(l),`// ${t.item.name}: ${t.item.id} ${f} `)(...Object.values(l)),js(e,t,r)},Zx=({fn:e,meta:t,passprop:n})=>e({passprop:n,meta:t}),dc={"stroke-width":"strokeWidth","fill-rule":"fillRule","clip-rule":"clipRule","stroke-linejoin":"strokeLinejoin","stroke-linecap":"strokeLinecap","clip-path":"clipPath"},pc=(e,t)=>{let n=e;for(let[r,o]of Object.entries(t))n=n.replaceAll(r,o);return n};var Vy=O(V());var Uy=(e,t,n,r)=>{if(t.item.component?.id){t.item.script||(t.item.script={});let i={...window.exports,db:e.site.db,api:e.site.api,...As(e),...r,params};t.item.script.props={};let s=new Set;if(t.item.component.props){let l={};for(let[a,f]of Object.entries(t.item.component.props))try{if(f.meta?.type==="content-element"){let m={_jsx:!0,fn:v=>{let E=f.content?.id;if(E){let h=n?e.layout?.meta[E]:e.meta[E];if(!h)return null;let p=t.instances;if(!v.meta.item.originalId||!p||!p[t.item.id])return null;let x=v.meta.item.originalId;if(h.mitem&&(f.jsxCalledBy&&(!f.jsxCalledBy.includes(x)||f.jsxCalledBy.length!==2)||!f.jsxCalledBy)){let k=t.mitem?.get("component")?.get("props")?.get(a);if(k){let R=k.get("jsxCalledBy");!R||typeof R!="object"?k.set("jsxCalledBy",[t.item.id,x]):(!R.includes(x)||R.length!==2||R[0]!==t.item.id||R[1]!==x)&&k.set("jsxCalledBy",[t.item.id,x])}}return(0,Vy.jsx)(bt,{meta:h,passprop:v.passprop,is_layout:n})}return null}};i[a]=m,r&&(r[a]=m);continue}if(f.value&&Ms(e,f.value),!f.valueBuilt&&f.value&&t.mitem){let m=t.mitem?.get("component")?.get("props")?.get(a);if(m){e_(m,f.value);return}}let u=f.valueBuilt||"",c=pc(u,dc)||"",d=new Function(...Object.keys(i),`// [${t.item.name}] ${a}: ${t.item.id} return ${c} 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 eefd7b70..8818610a 100644 --- a/app/web/src/nova/vi/render/script/eval-script.tsx +++ b/app/web/src/nova/vi/render/script/eval-script.tsx @@ -59,6 +59,7 @@ export const viEvalScript = ( ...viScriptArg(vi), ...exports, ...passprop, + _meta: vi.meta, }; if (typeof passprop === "object") { diff --git a/app/web/src/nova/vi/render/script/passprop.tsx b/app/web/src/nova/vi/render/script/passprop.tsx index 7cfc26fe..1a10c4e9 100644 --- a/app/web/src/nova/vi/render/script/passprop.tsx +++ b/app/web/src/nova/vi/render/script/passprop.tsx @@ -50,6 +50,7 @@ export const createViPassProp = ( is_meta = false; } } + if (is_meta) { return children.map((item) => { let cmeta = vi.meta[item.id]; diff --git a/app/web/src/utils/script/types/base.ts b/app/web/src/utils/script/types/base.ts index b293b855..28836af8 100644 --- a/app/web/src/utils/script/types/base.ts +++ b/app/web/src/utils/script/types/base.ts @@ -9,6 +9,7 @@ export const baseTypings = ` const useEffect: typeof React.useEffect; const useState: typeof React.useState; + const _meta: Record; const pathname: string; const isEditor: boolean; const isLayout: boolean;