diff --git a/app/srv/core/main.js b/app/srv/core/main.js index 3483ddb4..7228501c 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -95,7 +95,7 @@ Error generating stack: `+o.message+` ${Eg(e,t.mode)} `,(t?.hover||t?.active)&&Sg({item:e,hover:t?.hover,active:t?.active}),og(e,t.mode)])}catch(n){console.log(n)}return cx([])};var Cg=P(G()),ko=(e,t,n,r,i)=>{let o=t.item,l;o.component?.style&&(l={style:o.component.style,className:kf(o.component.style,{mode:e.mode})});let s={className:kf(o,{mode:e.mode}),inherit:l},a={},u=t.item.childs,c;return t.item.type==="text"?(c=null,s.dangerouslySetInnerHTML={__html:t.item.html||""}):c=Array.isArray(u)&&u?.map(d=>{if(!d)return null;let{id:f}=d,p=n?e.layout?.meta[f]:e.meta[f];return p?(0,Cg.jsx)(qt,{meta:p,is_layout:n,passprop:{...r},depth:i+1},f):null}),s.children=c,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:a}};var Ty=P(ge());var Iy=P(Hs());var ei={NORMAL:0,WILDCARD:1,PLACEHOLDER:2};function Vs(e={}){let t={options:e,rootNode:ky(),staticRoutesMap:{}},n=r=>e.strictTrailingSlash?r:r.replace(/\/$/,"")||"/";if(e.routes)for(let r in e.routes)xy(t,n(r),e.routes[r]);return{ctx:t,lookup:r=>ZS(t,n(r)),insert:(r,i)=>xy(t,n(r),i),remove:r=>KS(t,n(r))}}function ZS(e,t){let n=e.staticRoutesMap[t];if(n)return n.data;let r=t.split("/"),i={},o=!1,l=null,s=e.rootNode,a=null;for(let u=0;u{},db:null,api:null,init_local_effect:{}},page:{history:{id:"",show:!1},root_id:"root",cur:qS,doc:null,list:{},building:!1,meta:{},entry:[],tree:[],render:()=>{}},comp:{doc:null,item:null,loaded:{},list:{},group:{}},code:{},global_prop:[],ui:{monaco:null,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,rebuilding:!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 Ws=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var ar=P(ge());var ut=window;var JS=ff("prasi-cache","prasi-cache-store"),No={timeout:null,store:JS},Gs=(e,t)=>{let n=[...Sy(t,"navigate(",")"),...Sy(t,"href = ",";")],r=e.page.cur.id;e.page.navs[r]||(e.page.navs[r]=new Set);for(let i of n)e.page.navs[r].add(i);clearTimeout(No.timeout),No.timeout=setTimeout(()=>{e.on_nav_loaded&&e.on_nav_loaded({urls:Array.from(e.page.navs[r])})},100)},Sy=(e,t,n)=>{let r=0,i=0,o=[];for(;;){let l=e.indexOf(t,r);if(i=r,l>=0){let s=e[l+t.length];if(s==='"'||s==="'"||s==="`"){let a=e.indexOf(`${s}${n}`,l+t.length+1),u=e.substring(l+t.length+1,a);r=a+2+n.length,o.push(u)}}if(i===r)break}return o};var sr=P(ge());var Ey=P(xf()),lr=P(ge());var Tf=P(G()),by=(e,t,n,r,i)=>o=>{let[l,s]=(0,lr.useState)({}),a=o.internal_key;n.item.script||(n.item.script={});let u=n.item.script;a&&(n.item.script_keyed||(n.item.script_keyed={}),n.item.script_keyed[a]||(n.item.script_keyed[a]={}),u=n.item.script_keyed[a]),u.passprop||(u.passprop={});let c={};if(u.passprop){let p=!1;for(let[g,_]of Object.entries(o))["children","key"].includes(g)||(p=!0,c[g]=_)}let d={...r,...c};if(!Array.isArray(o.children)&&(0,lr.isValidElement)(o.children)&&typeof o.children=="object"){let p=(0,Ey.default)(o.children,"props.meta.item.component.props.child.content.childs");if(Array.isArray(p)){let g=!0;for(let _ of p)!(0,lr.isValidElement)(_)&&typeof _=="object"||(g=!1);if(g)return p.map(_=>{let w=e.meta[_.id];if(w||(e.meta[_.id]={item:_},w=e.meta[_.id]),w){if(Object.keys(w.item).length<=3&&w.mitem){let h={...w.item},m=w.mitem.toJSON();w.item={...m,...h}}return(0,Tf.jsx)(qt,{is_layout:t,meta:w,passprop:d,parent_key:o.internal_key,depth:i},_.id)}return null})}}if(!Array.isArray(o.children)&&!(0,lr.isValidElement)(o.children)&&typeof o.children=="object"){let p=o.children.id;if(p){let g=e.meta[p];if(!g){e.meta[p]={item:o.children},g=e.meta[p];let _=g.item.component?.id;_&&e.comp.load(_).then(w=>{if(w){for(let[m,y]of Object.entries(w)){let v=g.item;v[m]||(v[m]=y)}let h=g.item.component?.props;for(let[m,y]of Object.entries(w.component?.props||{}))h[m]||(h[m]=y);s({})}})}return(0,Tf.jsx)(qt,{is_layout:t,meta:g,passprop:d,parent_key:o.internal_key,depth:i})}}return Pf(o,d,a?{parent_key:a}:void 0)},Pf=(e,t,n)=>{let r={};if(Array.isArray(e)?r.children=e:r=e,Array.isArray(r.children)){if(r.children.length===1)return Of(r.children[0],r,t,n);let i=[];for(let o of r.children)i.push(Of(o,r,t,n));return i}return Of(r.children,r,t,n)},Of=(e,t,n,r)=>{if((0,lr.isValidElement)(e)){let i={...t};return delete i.children,{...e,props:{...e.props,...r,passprop:{...n,...i}}}}return e};var ni={},Ry=(e,t,n)=>r=>{let i=["localhost","prasi.avolut.com"].includes(location.hostname)&&location.pathname.startsWith("/ed/"),o=n.item.id,{children:l,parent_key:s}=r,a=e.script?.init_local_effect,u=t?e.layout?.meta:e.meta,c=(0,sr.useRef)(ni[o]?ni[o]:r.value),[d,f]=(0,sr.useState)({}),p=c.current;return p.render=()=>{window.prasiContext.render?window.prasiContext.render():f({})},Zs(e,n,n.script?.scope,s),r.hook&&r.hook(p),(0,sr.useEffect)(()=>{if(n.parent?.instance_id&&u){let _=u[n.parent?.instance_id];if(_&&_.instances){for(let[w,h]of Object.entries(_.instances[n.parent.instance_id]))if(h===n.item.id){o=w;break}}}return!a[o]&&(typeof a=="object"&&(a[o]=!0),(async()=>r.effect&&(await r.effect(p),i&&(ni[o]=p)))()),()=>{}},[...r.deps||[],location.pathname]),(0,sr.useEffect)(()=>{i&&ni[o]===null&&(async()=>r.effect&&(await r.effect(p),i&&(ni[o]=p)))()},[ni[o]]),Pf(l,{...n.script?.scope,[r.name]:p})};var Af=P(Hs()),Oo=window,ri=(e,t,n)=>{Oo.prasiEdit||(Oo.prasiEdit={});let r=Oo.prasiEdit[n];r||(Oo.prasiEdit[n]={},r=Oo.prasiEdit[n]);let i=()=>{let l=t.get("id")||"",s=r[l];return s||(r[l]=[],s=r[l]),s},o=t.toJSON();return{...o,edit:{get props(){if(o.component?.props){let l={};for(let[s,a]of Object.entries(o.component.props))if(a.content){let u=t.get("component")?.get("props")?.get(s)?.get("content");u?l[s]={mode:"jsx",value:ri(e,u,n)}:l[s]={mode:"jsx",value:null}}else{let u=typeof a.valueBuilt=="string"?a.valueBuilt.trim():"";if(u.endsWith(`; `)&&(u=u.substring(0,u.length-2)),u&&u===a.value.trim()){let c=new Function(`return ${a.value}`);l[s]={mode:"string",value:c()}}else l[s]={mode:"raw",value:a.value,valueBuilt:a.valueBuilt}}return l}},get pending(){return[]},async commit(){let l={},s={};if(t){for(let[a,u]of Object.entries(r)){let c=e[a];if(!c||!c.mitem)continue;let f=c.mitem.toJSON();if(f&&f.component){let p=f?.component?.props;if(!p){console.log(f,p);return}let g={};for(let w of u)if(w.type==="prop"&&p)p[w.name]&&(w.mode==="string"?(p[w.name].value=JSON.stringify(w.value),p[w.name].valueBuilt=JSON.stringify(w.value)):w.mode==="raw"?(p[w.name].value=w.value,w.valueBuilt?p[w.name].valueBuilt=w.valueBuilt:g[w.name]=w.value):w.mode==="jsx"&&(p[w.name]||(p[w.name]={meta:{type:"content-element"}}),w.value&&(p[w.name].content=ii([w.value],s)[0])));else if(w.type==="set"&&typeof w.value=="object")for(let[h,m]of Object.entries(w.value))f[h]=m;else if(w.type==="child"&&Array.isArray(w.childs))if(f.component?.id)f.component.props||(f.component.props={}),f.component.props.child={meta:{type:"content-element"},content:{type:"item",id:(0,Af.createId)(),name:"child",childs:ii(w.childs.filter(h=>h),s)}};else{let h=ii(w.childs.filter(m=>m),s);f.childs=h}for(let[w,h]of Object.entries(s))g[w]=h.value;let _=await _api.code_build(g);if(p)for(let[w,h]of Object.entries(_))p[w]?p[w].valueBuilt=h:s[w]&&(s[w].valueBuilt=h);l[a]=f}}t.doc?.transact(()=>{for(let[a,u]of Object.entries(l)){let c=e[a];c.mitem&&syncronize(c.mitem,u)}})}},setValue(l,s){let a=i(),u=s;if(l==="childs")throw new Error("Please modify childs via .child");a.push({type:"set",name:l,value:u})},setProp(l,s){let a=i();typeof s=="string"?a.push({type:"prop",mode:"string",name:l,value:s}):s.mode==="string"?a.push({type:"prop",mode:"string",name:l,value:s.value}):s.mode==="raw"?a.push({type:"prop",mode:"raw",name:l,value:s.value,valueBuilt:s.valueBuilt}):s.mode==="jsx"&&a.push({type:"prop",mode:"jsx",name:l,value:s.value})},setChilds(l){i().push({type:"child",childs:l})},get childs(){let l=t?.toJSON();if(l.component?.id){if((l.component?.props.child).content){let a=t.get("component")?.get("props")?.get("child")?.get("content");if(a)return[ri(e,a,n)]}return[]}return l.childs?l.childs.map(s=>{if(s){let a=e[s.id];if(a&&a.mitem)return ri(e,a.mitem,n)}}).filter(s=>s):[]},get parent(){if(t){let l=t.parent.toJSON();if(Array.isArray(l)){let s=(t.parent?.parent).get("id"),a=e[s].mitem;if(a)return{item:ri(e,a,n),child_type:"child",child_idx:l.findIndex(u=>u.id===o.id)}}}return null}}}},YS=(e,t)=>{let n={};for(let[r,i]of Object.entries(e))i.mode?i.mode==="string"?n[r]={value:JSON.stringify(i.value),valueBuilt:JSON.stringify(i.value),meta:{type:"text"}}:i.mode==="jsx"&&i.value?n[r]={value:"",valueBuilt:"",content:ii([i.value],t)[0],meta:{type:"content-element"}}:i.mode==="raw"&&(n[r]={value:i.value,valueBuilt:i.valueBuilt,meta:{type:"text"}}):n[r]=i;return n},ii=(e,t)=>{let n=t||{};return e.map(i=>{let o={...i};if(delete o.edit,o.id||(o.id=(0,Af.createId)()),o.component&&(o.component.instances||(o.component.instances={}),o.component.ref_ids||(o.component.ref_ids={}),o.component?.props)){o.component.props=YS(o.component.props,n);for(let[l,s]of Object.entries(o.component.props))!s.valueBuilt&&s.value&&(n[o.id+"|||"+l]=s),s.content&&(s.content=ii([s.content],n)[0])}return o.childs?o.childs=ii(o.childs,n):o.childs=[],o})};var oi=(e,t,n)=>({...t,edit:{setChilds(r){},get childs(){if(t.component?.id){let r=t.component?.props.child;return r.content?[oi(e,r.content,n)]:[]}return t.childs?t.childs.map(r=>{if(r){let i=e[r.id];if(i&&i.item)return oi(e,i.item,n)}}).filter(r=>r):[]},get props(){if(t.component?.props){let r={};for(let[i,o]of Object.entries(t.component.props))if(o.content){let l=t.component?.props?.[i]?.content;l?r[i]={mode:"jsx",value:oi(e,l,n)}:r[i]={mode:"jsx",value:null}}else{let l=typeof o.valueBuilt=="string"?o.valueBuilt.trim():"";if(l.endsWith(`; -`)&&(l=l.substring(0,l.length-2)),l&&l===o.value.trim()){let s=new Function(`return ${o.value}`);r[i]={mode:"string",value:s()}}else r[i]={mode:"raw",value:o.value,valueBuilt:o.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let i=e[r.parent.id];return oi(e,i.item,n)}return null},pending:[],setProp(r,i){},setValue(r,i){}}});var Lf=P(G()),Cy=(e,t,n,r,i,o)=>{let l=ko(e,t,n,r,i);e.visit&&e.visit(t,l),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:Ry(e,n,t),PassProp:by(e,n,t,r,i)};let s=t.script,a=window.exports,u={useEffect:ar.useEffect,children:l.props.children,props:l.props,Local:s?.Local,db:e.site.db,api:e.site.api,PassProp:s?.PassProp,ErrorBox:Ot,newElement:()=>{},_item:t.mitem?ri(e.meta,t.mitem,e.page.cur.id):oi(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:f=>{let p=f;if((0,ar.isValidElement)(f)&&f.props.children){let g=w=>{let h=!1,m=[];if((0,ar.isValidElement)(w)){if(w.type===t.script?.PassProp)return{should_replace:!0,el:{...w,props:{...w.props,internal_key:w.key}}};if(Array.isArray(w.props?.children))for(let y of w.props?.children)if(Array.isArray(y)){let v=[],S=!1;for(let R of y){let k=g(R);k.should_replace?(v.push(k.el),S=!0):v.push(R)}S?(h=!0,m.push(v)):m.push(y)}else typeof y=="object"&&y?y.type===t.script?.PassProp&&(h=!0,m.push({...y,props:{...y.props,internal_key:y.props.key}})):m.push(y)}return{should_replace:h,el:{...w,props:{...w.props,children:m}}}},_=g(f);_.should_replace&&(p=_.el)}s&&(s.result=(0,Lf.jsx)(ar.Suspense,{children:p}))},params,...Ws(e),...a,...r};if(typeof r=="object"){for(let[f,p]of Object.entries(r))if(typeof p=="object"&&p&&p._jsx){let g=p;u[f]=(0,Lf.jsx)(eE,{fn:g.fn,passprop:{...r},meta:t})}}!ut.isEditor&&t.item.adv?.js&&Gs(e,t.item.adv.js);let c=t.item.adv?.jsBuilt||"",d=zf(c,Mf)||"";try{new Function(...Object.keys(u),"___js",`// ${t.item.name}: ${t.item.id} +`)&&(l=l.substring(0,l.length-2)),l&&l===o.value.trim()){let s=new Function(`return ${o.value}`);r[i]={mode:"string",value:s()}}else r[i]={mode:"raw",value:o.value,valueBuilt:o.valueBuilt}}return r}},async commit(){},get parent(){let r=e[t.id];if(r&&r.parent?.id){let i=e[r.parent.id];return oi(e,i.item,n)}return null},pending:[],setProp(r,i){},setValue(r,i){}}});var Lf=P(G()),Cy=(e,t,n,r,i,o)=>{let l=ko(e,t,n,r,i);e.visit&&e.visit(t,l),t.script?t.script.scope=r:t.script={scope:r,result:null,Local:Ry(e,n,t),PassProp:by(e,n,t,r,i)};let s=t.script,a=window.exports,u={useEffect:ar.useEffect,children:l.props.children,props:l.props,Local:s?.Local,db:e.site.db,api:e.site.api,PassProp:s?.PassProp,ErrorBox:Ot,newElement:()=>{},__props:r,_item:t.mitem?ri(e.meta,t.mitem,e.page.cur.id):oi(e.meta,t.item,e.page.cur.id),_meta:e.meta,render:f=>{let p=f;if((0,ar.isValidElement)(f)&&f.props.children){let g=w=>{let h=!1,m=[];if((0,ar.isValidElement)(w)){if(w.type===t.script?.PassProp)return{should_replace:!0,el:{...w,props:{...w.props,internal_key:w.key}}};if(Array.isArray(w.props?.children))for(let y of w.props?.children)if(Array.isArray(y)){let v=[],S=!1;for(let R of y){let k=g(R);k.should_replace?(v.push(k.el),S=!0):v.push(R)}S?(h=!0,m.push(v)):m.push(y)}else typeof y=="object"&&y?y.type===t.script?.PassProp&&(h=!0,m.push({...y,props:{...y.props,internal_key:y.props.key}})):m.push(y)}return{should_replace:h,el:{...w,props:{...w.props,children:m}}}},_=g(f);_.should_replace&&(p=_.el)}s&&(s.result=(0,Lf.jsx)(ar.Suspense,{children:p}))},params,...Ws(e),...a,...r};if(typeof r=="object"){for(let[f,p]of Object.entries(r))if(typeof p=="object"&&p&&p._jsx){let g=p;u[f]=(0,Lf.jsx)(eE,{fn:g.fn,passprop:{...r},meta:t})}}!ut.isEditor&&t.item.adv?.js&&Gs(e,t.item.adv.js);let c=t.item.adv?.jsBuilt||"",d=zf(c,Mf)||"";try{new Function(...Object.keys(u),"___js",`// ${t.item.name}: ${t.item.id} try { ${d} } catch(e) { diff --git a/app/web/src/nova/prod/base/base.tsx b/app/web/src/nova/prod/base/base.tsx index 0e86127c..7d5867f9 100644 --- a/app/web/src/nova/prod/base/base.tsx +++ b/app/web/src/nova/prod/base/base.tsx @@ -1,8 +1,8 @@ -import { RadixRouter, createRouter } from "radix3"; +import { RadixRouter } from "radix3"; +import { IItem } from "../../../utils/types/item"; import { IRoot } from "../../../utils/types/root"; import { PG } from "../../ed/logic/ed-global"; import { IMeta } from "../../vi/utils/types"; -import { IItem } from "../../../utils/types/item"; const w = window as any; 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 290f1591..6e77f436 100644 --- a/app/web/src/nova/vi/render/script/eval-script.tsx +++ b/app/web/src/nova/vi/render/script/eval-script.tsx @@ -62,6 +62,7 @@ export const viEvalScript = ( PassProp: script?.PassProp, ErrorBox: ErrorBox, newElement: () => {}, + __props: passprop, _item: meta.mitem ? devItem(vi.meta, meta.mitem, vi.page.cur.id) : prodItem(vi.meta, meta.item, vi.page.cur.id), diff --git a/app/web/src/utils/script/types/base.ts b/app/web/src/utils/script/types/base.ts index 30f5dbea..e46e6143 100644 --- a/app/web/src/utils/script/types/base.ts +++ b/app/web/src/utils/script/types/base.ts @@ -14,6 +14,7 @@ export const baseTypings = ` const isLayout: boolean; const isMobile: boolean; const isDesktop: boolean; + const __props: any; const siteurl: (path:string) => string; const preload: (urls: string | string[], opt?: { on_load?: (