diff --git a/app/srv/core/main.js b/app/srv/core/main.js index e0f0c65e..78a02fd1 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -95,7 +95,7 @@ Error generating stack: `+i.message+` ${gy(e,t.mode)} ${ny(e,t.mode)} ${xy(e,t.mode)} - `,(t?.hover||t?.active)&&wy({item:e,hover:t?.hover,active:t?.active}),ty(e,t.mode)])}catch(n){console.log(n)}return cx([])};var ky=O(V()),Ao=(e,t,n,r)=>{let o=t.item,i;o.component?.style&&(i={style:o.component.style,className:lc(o.component.style,{mode:e.mode})});let s={className:lc(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,ky.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(uc());var gr={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function As(e={}){let t={options:e,rootNode:Ly(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)by(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>Kx(t,n(r)),insert:(r,o)=>by(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:Xx,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 Ms=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var Ds=O(ce());var Xe=window;var Yx=Ju("prasi-cache","prasi-cache-store"),Fo={timeout:null,store:Yx},js=(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(Fo.timeout),Fo.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(sc()),An=O(ce());var cc=O(V()),Fy=(e,t,n,r)=>o=>{let[i,s]=(0,An.useState)({});n.item.script||(n.item.script={}),n.item.script.passprop||(n.item.script.passprop={});let l={};if(n.item.script.passprop){let u=!1;for(let[c,d]of Object.entries(o))["children","key"].includes(c)||(u=!0,l[c]=d,n.item.script.passprop[c]={end:0,start:0,value:d})}let a={...r,...l};if(!Array.isArray(o.children)&&(0,An.isValidElement)(o.children)&&typeof o.children=="object"){let u=(0,jy.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(u)){let c=!0;for(let d of u)!(0,An.isValidElement)(d)&&typeof d=="object"||(c=!1);if(c)return u.map(d=>{let y=e.meta[d.id];if(y||(e.meta[d.id]={item:d},y=e.meta[d.id]),y){if(Object.keys(y.item).length<=3&&y.mitem){let h={...y.item},v=y.mitem.toJSON();y.item={...v,...h}}return(0,cc.jsx)(bt,{is_layout:t,meta:y,passprop:a},d.id)}return null})}}if(!Array.isArray(o.children)&&!(0,An.isValidElement)(o.children)&&typeof o.children=="object"){let u=o.children.id;if(u){let c=e.meta[u];if(!c){e.meta[u]={item:o.children},c=e.meta[u];let d=c.item.component?.id;d&&e.comp.load(d).then(y=>{if(y){for(let[h,v]of Object.entries(y)){let S=c.item;S[h]||(S[h]=v)}s({})}})}return(0,cc.jsx)(bt,{is_layout:t,meta:c,passprop:a})}}return fc(o,n.script?.scope)},fc=(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,An.isValidElement)(e)){let r={...t};return delete r.children,{...e,props:{...e.props,passprop:{...n,...r}}}}return e};var wr={},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)(wr[i]?wr[i]:r.value).current;return u.render=n.render,Fs(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,h]of Object.entries(d.instances[n.parent.instance_id]))if(h===n.item.id){i=y;break}}}return!l[i]&&(typeof l=="object"&&(l[i]=!0),(async()=>r.effect&&(await r.effect(u),o&&(wr[i]=u)))()),()=>{}},[location.pathname]),(0,Do.useEffect)(()=>{o&&wr[i]===null&&(async()=>r.effect&&(await r.effect(u),o&&(wr[i]=u)))()},[wr[i]]),fc(s,{...n.script?.scope,[r.name]:u})};var dc=O(V()),zy=(e,t,n,r)=>{let o=Ao(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:Ds.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,dc.jsx)(Ds.Suspense,{children:c})},params,...Ms(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,dc.jsx)(Zx,{fn:y.fn,passprop:r,meta:t})}}!Xe.isEditor&&t.item.adv?.js&&js(e,t.item.adv.js);let a=t.item.adv?.jsBuilt||"",f=mc(a,pc)||"";new Function(...Object.keys(l),`// ${t.item.name}: ${t.item.id} + `,(t?.hover||t?.active)&&wy({item:e,hover:t?.hover,active:t?.active}),ty(e,t.mode)])}catch(n){console.log(n)}return cx([])};var ky=O(V()),Ao=(e,t,n,r)=>{let o=t.item,i;o.component?.style&&(i={style:o.component.style,className:lc(o.component.style,{mode:e.mode})});let s={className:lc(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,ky.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(uc());var gr={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function As(e={}){let t={options:e,rootNode:Ly(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)by(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>Kx(t,n(r)),insert:(r,o)=>by(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:Xx,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 Ms=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var Ds=O(ce());var Xe=window;var Yx=Ju("prasi-cache","prasi-cache-store"),Fo={timeout:null,store:Yx},js=(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(Fo.timeout),Fo.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(sc()),An=O(ce());var cc=O(V()),Fy=(e,t,n,r)=>o=>{let[i,s]=(0,An.useState)({});n.item.script||(n.item.script={}),n.item.script.passprop||(n.item.script.passprop={});let l={};if(n.item.script.passprop){let u=!1;for(let[c,d]of Object.entries(o))["children","key"].includes(c)||(u=!0,l[c]=d,n.item.script.passprop[c]={end:0,start:0,value:d})}let a={...r,...l};if(!Array.isArray(o.children)&&(0,An.isValidElement)(o.children)&&typeof o.children=="object"){let u=(0,jy.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(u)){let c=!0;for(let d of u)!(0,An.isValidElement)(d)&&typeof d=="object"||(c=!1);if(c)return u.map(d=>{let y=e.meta[d.id];if(y||(e.meta[d.id]={item:d},y=e.meta[d.id]),y){if(Object.keys(y.item).length<=3&&y.mitem){let h={...y.item},v=y.mitem.toJSON();y.item={...v,...h}}return(0,cc.jsx)(bt,{is_layout:t,meta:y,passprop:a},d.id)}return null})}}if(!Array.isArray(o.children)&&!(0,An.isValidElement)(o.children)&&typeof o.children=="object"){let u=o.children.id;if(u){let c=e.meta[u];if(!c){e.meta[u]={item:o.children},c=e.meta[u];let d=c.item.component?.id;d&&e.comp.load(d).then(y=>{if(y){for(let[v,S]of Object.entries(y)){let m=c.item;m[v]||(m[v]=S)}let h=c.item.component?.props;for(let[v,S]of Object.entries(y.component?.props||{}))h[v]||(h[v]=S);s({})}})}return(0,cc.jsx)(bt,{is_layout:t,meta:c,passprop:a})}}return fc(o,n.script?.scope)},fc=(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,An.isValidElement)(e)){let r={...t};return delete r.children,{...e,props:{...e.props,passprop:{...n,...r}}}}return e};var wr={},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)(wr[i]?wr[i]:r.value).current;return u.render=n.render,Fs(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,h]of Object.entries(d.instances[n.parent.instance_id]))if(h===n.item.id){i=y;break}}}return!l[i]&&(typeof l=="object"&&(l[i]=!0),(async()=>r.effect&&(await r.effect(u),o&&(wr[i]=u)))()),()=>{}},[location.pathname]),(0,Do.useEffect)(()=>{o&&wr[i]===null&&(async()=>r.effect&&(await r.effect(u),o&&(wr[i]=u)))()},[wr[i]]),fc(s,{...n.script?.scope,[r.name]:u})};var dc=O(V()),zy=(e,t,n,r)=>{let o=Ao(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:Ds.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,dc.jsx)(Ds.Suspense,{children:c})},params,...Ms(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,dc.jsx)(Zx,{fn:y.fn,passprop:r,meta:t})}}!Xe.isEditor&&t.item.adv?.js&&js(e,t.item.adv.js);let a=t.item.adv?.jsBuilt||"",f=mc(a,pc)||"";new Function(...Object.keys(l),`// ${t.item.name}: ${t.item.id} ${f} `)(...Object.values(l)),Fs(e,t,r)},Zx=({fn:e,meta:t,passprop:n})=>e({passprop:n,meta:t}),pc={"stroke-width":"strokeWidth","fill-rule":"fillRule","clip-rule":"clipRule","stroke-linejoin":"strokeLinejoin","stroke-linecap":"strokeLinecap","clip-path":"clipPath"},mc=(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,...Ms(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 h={_jsx:!0,fn:v=>{let S=f.content?.id;if(S){let m=n?e.layout?.meta[S]:e.meta[S];if(!m)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(m.mitem&&(f.jsxCalledBy&&(!f.jsxCalledBy.includes(x)||f.jsxCalledBy.length!==2)||!f.jsxCalledBy)){let E=t.mitem?.get("component")?.get("props")?.get(a);if(E){let R=E.get("jsxCalledBy");!R||typeof R!="object"?E.set("jsxCalledBy",[t.item.id,x]):(!R.includes(x)||R.length!==2||R[0]!==t.item.id||R[1]!==x)&&E.set("jsxCalledBy",[t.item.id,x])}}return(0,Vy.jsx)(bt,{meta:m,passprop:v.passprop,is_layout:n})}return null}};i[a]=h,r&&(r[a]=h);continue}if(f.value&&js(e,f.value),!f.valueBuilt&&f.value&&t.mitem){let h=t.mitem?.get("component")?.get("props")?.get(a);if(h){e_(h,f.value);return}}let u=f.valueBuilt||"",c=mc(u,pc)||"",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/passprop.tsx b/app/web/src/nova/vi/render/script/passprop.tsx index 956fad96..c5f68565 100644 --- a/app/web/src/nova/vi/render/script/passprop.tsx +++ b/app/web/src/nova/vi/render/script/passprop.tsx @@ -107,7 +107,13 @@ export const createViPassProp = ( const item = meta.item as any; if (!item[k]) item[k] = v; } - render({}) + const props = meta.item.component?.props as any; + for (const [k, v] of Object.entries( + comp.component?.props || {} + )) { + if (!props[k]) props[k] = v; + } + render({}); } }); }