@improba/page-builder 0.1.3 → 0.2.0
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/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.js +29 -0
- package/dist/core.js.map +1 -0
- package/dist/index-D79WbFRY.cjs +2 -0
- package/dist/index-D79WbFRY.cjs.map +1 -0
- package/dist/index-c6HOrx9r.js +523 -0
- package/dist/index-c6HOrx9r.js.map +1 -0
- package/dist/index.cjs +10 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1757 -2185
- package/dist/index.js.map +1 -1
- package/dist/{index.css → style.css} +1 -1
- package/dist/types/built-in/PbColumn.vue.d.ts +41 -0
- package/dist/types/built-in/PbContainer.vue.d.ts +32 -0
- package/dist/types/built-in/PbImage.vue.d.ts +42 -0
- package/dist/types/built-in/PbRow.vue.d.ts +41 -0
- package/dist/types/built-in/PbSection.vue.d.ts +50 -0
- package/dist/types/built-in/PbText.vue.d.ts +25 -0
- package/dist/types/built-in/PbVideo.vue.d.ts +27 -0
- package/dist/types/built-in/index.d.ts +10 -0
- package/dist/types/components/PageBuilder.vue.d.ts +50 -0
- package/dist/types/components/editor/EditorCanvas.vue.d.ts +67 -0
- package/dist/types/components/editor/EditorToolbar.vue.d.ts +97 -0
- package/dist/types/components/editor/IframeCanvas.vue.d.ts +102 -0
- package/dist/types/components/editor/LeftDrawer.vue.d.ts +46 -0
- package/dist/types/components/editor/NodeContextMenu.vue.d.ts +66 -0
- package/dist/types/components/editor/PageEditor.vue.d.ts +20 -0
- package/dist/types/components/editor/RightDrawer.vue.d.ts +43 -0
- package/dist/types/components/editor/TreePanel.vue.d.ts +28 -0
- package/dist/types/components/editor/prop-editors/MediaPicker.vue.d.ts +20 -0
- package/dist/types/components/editor/prop-editors/PropBooleanEditor.vue.d.ts +18 -0
- package/dist/types/components/editor/prop-editors/PropColorEditor.vue.d.ts +18 -0
- package/dist/types/components/editor/prop-editors/PropNumberEditor.vue.d.ts +36 -0
- package/dist/types/components/editor/prop-editors/PropSelectEditor.vue.d.ts +31 -0
- package/dist/types/components/editor/prop-editors/PropTextEditor.vue.d.ts +27 -0
- package/dist/types/components/editor/prop-editors/RichTextEditor.vue.d.ts +27 -0
- package/dist/types/components/editor/prop-editors/index.d.ts +29 -0
- package/dist/types/components/reader/NodeRenderer.vue.d.ts +33 -0
- package/dist/types/components/reader/PageReader.vue.d.ts +14 -0
- package/dist/types/components/shared/ErrorBoundary.vue.d.ts +21 -0
- package/dist/types/composables/use-drag-drop.d.ts +23 -0
- package/dist/types/composables/use-editor.d.ts +40 -0
- package/dist/types/composables/use-node-tree.d.ts +23 -0
- package/dist/types/composables/use-page-builder.d.ts +28 -0
- package/dist/types/core/drop-slot.d.ts +12 -0
- package/dist/types/core/errors.d.ts +14 -0
- package/dist/types/core/iframe-bridge.d.ts +85 -0
- package/dist/types/core/index.d.ts +18 -0
- package/dist/types/core/registry.d.ts +43 -0
- package/dist/types/core/sanitize.d.ts +3 -0
- package/dist/types/core/tree.d.ts +56 -0
- package/dist/types/core/validation.d.ts +10 -0
- package/dist/types/core/virtual-tree.d.ts +44 -0
- package/dist/types/i18n/context.d.ts +13 -0
- package/dist/types/i18n/index.d.ts +3 -0
- package/dist/types/i18n/messages.d.ts +3 -0
- package/dist/types/i18n/translator.d.ts +14 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/plugin.d.ts +18 -0
- package/dist/types/types/component.d.ts +68 -0
- package/dist/types/types/editor.d.ts +54 -0
- package/dist/types/types/index.d.ts +6 -0
- package/dist/types/types/keys.d.ts +13 -0
- package/dist/types/types/node.d.ts +54 -0
- package/package.json +7 -2
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var Pn=Object.defineProperty;var Vn=(t,o,n)=>o in t?Pn(t,o,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[o]=n;var je=(t,o,n)=>Vn(t,typeof o!="symbol"?o+"":o,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue");class Qe extends Error{constructor(n,r,l={}){super(r);je(this,"code");je(this,"details");this.name="PageBuilderError",this.code=n,this.details=l.details??{},this.cause=l.cause}}function Rn(t){return t instanceof Qe}function j(t,o,n={}){return new Qe(t,o,n)}function Lt(t){return t instanceof Error?t.message:String(t)}const X=new Map;function $n(){const t=[...X.keys()];return t.length>0?t.join(", "):"(none)"}function Ce(t){return t.trim()}function Xe(t,o){return j("DUPLICATE_COMPONENT",o,{details:{componentName:t}})}function et(t,o){const n=Ce(t.name),r=n===t.name?t:{...t,name:n};if(!n)throw j("INVALID_PAGE_DATA",`[PageBuilder] Cannot ${o} a component without a name.`);if(!r.component)throw j("INVALID_PAGE_DATA",`[PageBuilder] Component "${n}" is missing a Vue component instance.`);return r}function Ln(t){const o=et(t,"register"),n=o.name;if(X.has(n))throw Xe(n,`[PageBuilder] Component "${n}" is already registered. Use replaceComponent() to override.`);X.set(n,o)}function At(t){const o=t.map(r=>et(r,"register")),n=new Set;for(const r of o){if(n.has(r.name))throw Xe(r.name,`[PageBuilder] Component "${r.name}" appears multiple times in the registration batch.`);if(n.add(r.name),X.has(r.name))throw Xe(r.name,`[PageBuilder] Component "${r.name}" is already registered. Use replaceComponent() to override.`)}for(const r of o)X.set(r.name,r)}function An(t){const o=et(t,"replace"),n=o.name;X.set(n,o)}function Mn(t){return X.delete(Ce(t))}function de(t){return X.get(Ce(t))}function Mt(t){const o=Ce(t),n=X.get(o);if(!n)throw j("MISSING_COMPONENT",`[PageBuilder] Component "${o}" is not registered. Available: ${$n()}`,{details:{componentName:o,availableComponents:[...X.keys()]}});return n.component}function On(){return[...X.values()]}function Ot(){const t=new Map;for(const o of X.values()){if(o.hidden)continue;const n=t.get(o.category)??[];n.push(o),t.set(o.category,n)}return t}function zn(t){return X.has(Ce(t))}function Un(){X.clear()}const Kn={name:"PbColumn",label:"Column",description:"Vertical flex container for stacking components.",category:"layout",icon:"⬜",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"gap",label:"Gap",type:"text",defaultValue:"16px"},{key:"padding",label:"Padding",type:"text",defaultValue:"0"},{key:"align",label:"Align Items",type:"select",defaultValue:"stretch",options:[{label:"Stretch",value:"stretch"},{label:"Start",value:"flex-start"},{label:"Center",value:"center"},{label:"End",value:"flex-end"}]}],defaultProps:{gap:"16px",padding:"0",align:"stretch"}},zt=e.defineComponent({__name:"PbColumn",props:{gap:{type:String,default:"16px"},padding:{type:String,default:"0"},align:{type:String,default:"stretch"}},setup(t){const o=t,n=e.computed(()=>({display:"flex",flexDirection:"column",gap:o.gap,padding:o.padding,alignItems:o.align,width:"100%"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}}),Hn={name:"PbRow",label:"Row",description:"Horizontal flex container for side-by-side components.",category:"layout",icon:"⬛",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"gap",label:"Gap",type:"text",defaultValue:"16px"},{key:"wrap",label:"Wrap",type:"boolean",defaultValue:!0},{key:"justify",label:"Justify",type:"select",defaultValue:"flex-start",options:[{label:"Start",value:"flex-start"},{label:"Center",value:"center"},{label:"End",value:"flex-end"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"}]}],defaultProps:{gap:"16px",wrap:!0,justify:"flex-start"}},Ut=e.defineComponent({__name:"PbRow",props:{gap:{type:String,default:"16px"},wrap:{type:Boolean,default:!0},justify:{type:String,default:"flex-start"}},setup(t){const o=t,n=e.computed(()=>({display:"flex",flexDirection:"row",gap:o.gap,flexWrap:o.wrap?"wrap":"nowrap",justifyContent:o.justify,width:"100%"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}}),It=new Set(["div","p","span","h1","h2","h3","h4","h5","h6","section","article","blockquote"]),jn=new Set(["a","b","blockquote","br","code","div","em","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","span","strong","u","ul"]),Fn=new Set(["base","embed","form","iframe","input","link","math","meta","noscript","object","script","style","svg","template","textarea"]),Wn=new Set(["_blank","_parent","_self","_top"]),Gn=new Set(["nofollow","noopener","noreferrer","sponsored","ugc"]),Yn=/^data:image\/(?:avif|bmp|gif|jpe?g|png|webp);base64,[a-z0-9+/=\s]+$/i;function tt(t){return t.replace(/[\u0000-\u001F\u007F]/g,"")}function qn(t){return tt(t).replace(/\s+/g,"")}function Kt(t){const o=t.toLowerCase().split(/\s+/).filter(Boolean).filter(n=>Gn.has(n));return Array.from(new Set(o)).join(" ")}function Xn(t){const o=Kt(t??""),n=new Set(o.split(/\s+/).filter(Boolean));return n.add("noopener"),n.add("noreferrer"),Array.from(n).join(" ")}function Zn(){var t;if(typeof document<"u"&&typeof((t=document.implementation)==null?void 0:t.createHTMLDocument)=="function")return document.implementation.createHTMLDocument("");if(typeof DOMParser<"u"){const o=new DOMParser().parseFromString("<!doctype html><html><body></body></html>","text/html");if(o!=null&&o.body)return o}return null}function Jn(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Qn(t,o){const n=o.tagName.toLowerCase();for(const r of Array.from(t.attributes)){const l=r.name.toLowerCase(),a=tt(r.value).trim();if(!(a.length===0||l.startsWith("on"))){if(l==="title"){o.setAttribute("title",a);continue}if(n==="a"){if(l==="href"){const i=Z(a,"link");i.length>0&&o.setAttribute("href",i);continue}if(l==="target"){const i=a.toLowerCase();Wn.has(i)&&o.setAttribute("target",i);continue}if(l==="rel"){const i=Kt(a);i.length>0&&o.setAttribute("rel",i)}}}}n==="a"&&o.getAttribute("target")==="_blank"&&o.setAttribute("rel",Xn(o.getAttribute("rel")))}function Ze(t,o,n){for(const r of Array.from(t.childNodes)){if(r.nodeType===3){o.appendChild(n.createTextNode(r.textContent??""));continue}if(r.nodeType!==1)continue;const l=r,a=l.tagName.toLowerCase();if(Fn.has(a))continue;if(!jn.has(a)){const u=n.createDocumentFragment();Ze(l,u,n),o.appendChild(u);continue}const i=n.createElement(a);if(Qn(l,i),Ze(l,i,n),a==="a"&&!i.getAttribute("href")){const u=n.createDocumentFragment();for(;i.firstChild;)u.appendChild(i.firstChild);o.appendChild(u);continue}o.appendChild(i)}}function nt(t){const o=typeof t=="string"?t:"";if(o.length===0)return"";const n=Zn();if(!n)return Jn(o);const r=n.createElement("div");r.innerHTML=o;const l=n.createElement("div");return Ze(r,l,n),l.innerHTML}function ot(t,o="div"){const n=typeof o=="string"?o.trim().toLowerCase():"div",r=It.has(n)?n:"div";if(typeof t!="string")return r;const l=t.trim().toLowerCase();return It.has(l)?l:r}function Z(t,o){const n=tt(t).trim();if(n.length===0)return"";const r=qn(n).toLowerCase(),l=r.match(/^([a-z][a-z0-9+.-]*):/i),a=l==null?void 0:l[1];return!a||a==="http"||a==="https"||o==="link"&&(a==="mailto"||a==="tel")||o==="media"&&a==="blob"||(o==="media"||o==="background")&&a==="data"&&Yn.test(r)?n:""}const eo={name:"PbText",label:"Text",description:"A text block with HTML support.",category:"content",icon:"T",component:{},slots:[],editableProps:[{key:"content",label:"Content",type:"richtext",defaultValue:"<p>Enter text here</p>"},{key:"tag",label:"HTML Tag",type:"select",defaultValue:"div",options:[{label:"div",value:"div"},{label:"p",value:"p"},{label:"span",value:"span"},{label:"h1",value:"h1"},{label:"h2",value:"h2"},{label:"h3",value:"h3"}]}],defaultProps:{content:"<p>Enter text here</p>",tag:"div"}},Ht=e.defineComponent({__name:"PbText",props:{content:{type:String,default:""},tag:{type:String,default:"div"}},setup(t){const o=t,n=e.computed(()=>ot(o.tag)),r=e.computed(()=>nt(o.content));return(l,a)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.value),{innerHTML:r.value},null,8,["innerHTML"]))}}),to=["src","alt"],no={name:"PbImage",label:"Image",description:"Displays an image with optional alt text.",category:"media",icon:"🖼",component:{},slots:[],editableProps:[{key:"src",label:"Image URL",type:"image",required:!0},{key:"alt",label:"Alt Text",type:"text",defaultValue:""},{key:"width",label:"Width",type:"text",defaultValue:"100%"},{key:"objectFit",label:"Object Fit",type:"select",defaultValue:"cover",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"None",value:"none"}]}],defaultProps:{src:"",alt:"",width:"100%",objectFit:"cover"}},jt=e.defineComponent({__name:"PbImage",props:{src:{type:String,required:!0},alt:{type:String,default:""},width:{type:String,default:"100%"},objectFit:{type:String,default:"cover"}},setup(t){const o=t,n=e.computed(()=>({width:o.width,objectFit:o.objectFit,display:"block",maxWidth:"100%"})),r=e.computed(()=>Z(o.src,"media"));return(l,a)=>r.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:t.alt,style:e.normalizeStyle(n.value),loading:"lazy"},null,12,to)):e.createCommentVNode("",!0)}}),oo=["src","poster","controls","autoplay","muted","loop"],ro={name:"PbVideo",label:"Vidéo",description:"Affiche une vidéo avec URL, poster optionnel et options de lecture.",category:"media",icon:"🎬",component:{},slots:[],editableProps:[{key:"src",label:"URL de la vidéo",type:"url",required:!0},{key:"poster",label:"Image de couverture (poster)",type:"image"},{key:"width",label:"Largeur",type:"text",defaultValue:"100%"},{key:"controls",label:"Afficher les contrôles",type:"boolean",defaultValue:!0},{key:"autoplay",label:"Lecture automatique",type:"boolean",defaultValue:!1},{key:"muted",label:"Muet",type:"boolean",defaultValue:!1},{key:"loop",label:"Boucle",type:"boolean",defaultValue:!1}],defaultProps:{src:"",poster:"",width:"100%",controls:!0,autoplay:!1,muted:!1,loop:!1}},Ft=e.defineComponent({__name:"PbVideo",props:{src:{},poster:{default:""},width:{default:"100%"},controls:{type:Boolean,default:!0},autoplay:{type:Boolean,default:!1},muted:{type:Boolean,default:!1},loop:{type:Boolean,default:!1}},setup(t){const o=t,n=e.computed(()=>({width:o.width,maxWidth:"100%",display:"block"})),r=e.computed(()=>Z(o.src,"media")),l=e.computed(()=>{var a;return(a=o.poster)!=null&&a.trim()?Z(o.poster,"media"):void 0});return(a,i)=>r.value?(e.openBlock(),e.createElementBlock("video",{key:0,src:r.value,poster:l.value,controls:t.controls,autoplay:t.autoplay,muted:t.muted,loop:t.loop,style:e.normalizeStyle(n.value),playsinline:""},null,12,oo)):e.createCommentVNode("",!0)}}),ao={name:"PbSection",label:"Section",description:"A full-width section with optional background.",category:"layout",icon:"▬",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"backgroundColor",label:"Background Color",type:"color",defaultValue:"transparent"},{key:"backgroundImage",label:"Background Image",type:"image"},{key:"padding",label:"Padding",type:"text",defaultValue:"48px 24px"},{key:"maxWidth",label:"Max Content Width",type:"text",defaultValue:"1200px"}],defaultProps:{backgroundColor:"transparent",padding:"48px 24px",maxWidth:"1200px"}},Wt=e.defineComponent({__name:"PbSection",props:{backgroundColor:{type:String,default:"transparent"},backgroundImage:{type:String,default:""},padding:{type:String,default:"48px 24px"},maxWidth:{type:String,default:"1200px"}},setup(t){const o=t,n=e.computed(()=>Z(o.backgroundImage,"background")),r=e.computed(()=>n.value?`url("${n.value.replace(/["\\]/g,"\\$&")}")`:void 0),l=e.computed(()=>({width:"100%",backgroundColor:o.backgroundColor,backgroundImage:r.value,backgroundSize:"cover",backgroundPosition:"center",padding:o.padding})),a=e.computed(()=>({maxWidth:o.maxWidth,margin:"0 auto",width:"100%"}));return(i,u)=>(e.openBlock(),e.createElementBlock("section",{style:e.normalizeStyle(l.value)},[e.createElementVNode("div",{style:e.normalizeStyle(a.value)},[e.renderSlot(i.$slots,"default")],4)],4))}}),lo={name:"PbContainer",label:"Container",description:"A centered container with max width.",category:"layout",icon:"☐",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"maxWidth",label:"Max Width",type:"text",defaultValue:"100%"},{key:"padding",label:"Padding",type:"text",defaultValue:"0 24px"}],defaultProps:{maxWidth:"100%",padding:"0 24px"}},Gt=e.defineComponent({__name:"PbContainer",props:{maxWidth:{type:String,default:"100%"},padding:{type:String,default:"0 24px"}},setup(t){const o=t,n=e.computed(()=>({maxWidth:o.maxWidth,margin:"0 auto",padding:o.padding,width:"100%",boxSizing:"border-box"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}});function pe(t,o){return{...t,component:o}}const Yt=[pe(Kn,zt),pe(Hn,Ut),pe(eo,Ht),pe(no,jt),pe(ro,Ft),pe(ao,Wt),pe(lo,Gt)],io=new Set(["draft","published","archived"]),Dt=200,Ct=5e3;function Ie(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function $(t,o,n){t.errors.push({path:o,message:n})}function so(t,o,n){if(t.tag===void 0)return;if(typeof t.tag!="string"||t.tag.trim()===""){$(n,`${o}.tag`,"PbText props.tag must be a non-empty string.");return}const r=t.tag.trim().toLowerCase();ot(t.tag)!==r&&$(n,`${o}.tag`,"PbText props.tag must be one of: div, p, span, h1, h2, h3, h4, h5, h6, section, article, blockquote.")}function co(t,o,n){if(typeof t.src!="string"||t.src.trim()===""){$(n,`${o}.src`,"PbImage props.src must be a non-empty string.");return}Z(t.src,"media")===""&&$(n,`${o}.src`,"PbImage props.src contains an unsafe URL.")}function uo(t,o,n){if(typeof t.src!="string"||t.src.trim()===""){$(n,`${o}.src`,"PbVideo props.src must be a non-empty string.");return}Z(t.src,"media")===""&&$(n,`${o}.src`,"PbVideo props.src contains an unsafe URL.");const r=t.poster;r!=null&&r!==""&&(typeof r!="string"?$(n,`${o}.poster`,"PbVideo props.poster must be a string."):r.trim()!==""&&Z(r,"media")===""&&$(n,`${o}.poster`,"PbVideo props.poster contains an unsafe URL."))}function fo(t,o,n){const r=t.backgroundImage;if(!(r==null||r==="")){if(typeof r!="string"){$(n,`${o}.backgroundImage`,"PbSection props.backgroundImage must be a string.");return}r.trim()!==""&&Z(r,"background")===""&&$(n,`${o}.backgroundImage`,"PbSection props.backgroundImage contains an unsafe URL.")}}function po(t,o,n,r){if(t==="PbText"){so(o,n,r);return}if(t==="PbImage"){co(o,n,r);return}if(t==="PbVideo"){uo(o,n,r);return}t==="PbSection"&&fo(o,n,r)}function $e(t,o,n,r=0){if(r>Dt){n.depthGuardTriggered||($(n,o,`Maximum node depth (${String(Dt)}) exceeded during validation.`),n.depthGuardTriggered=!0);return}if(n.visitedNodeCount>=Ct){n.sizeGuardTriggered||($(n,o,`Maximum node count (${String(Ct)}) exceeded during validation.`),n.sizeGuardTriggered=!0);return}if(!Ie(t)){$(n,o,"Node must be an object.");return}if(n.seenNodes.has(t)){$(n,o,"Cycle detected in node tree.");return}n.seenNodes.add(t),n.visitedNodeCount++;const l=t.id,a=t.name,i=t.slot,u=t.props,p=t.children,g=t.readonly;if(!(typeof l=="number"&&Number.isInteger(l))||l<=0?$(n,`${o}.id`,"id must be a positive integer."):(n.seenIds.has(l)&&$(n,`${o}.id`,`Duplicate node id "${l}" found.`),n.seenIds.add(l),l>n.maxObservedId&&(n.maxObservedId=l)),(typeof a!="string"||a.trim()==="")&&$(n,`${o}.name`,"name must be a non-empty string."),i===null||typeof i=="string"||$(n,`${o}.slot`,"slot must be a string or null."),Ie(u)?typeof a=="string"&&po(a,u,`${o}.props`,n):$(n,`${o}.props`,"props must be an object."),!Array.isArray(p)){$(n,`${o}.children`,"children must be an array.");return}g===void 0||typeof g=="boolean"||$(n,`${o}.readonly`,"readonly must be a boolean when provided.");for(let k=0;k<p.length&&!n.sizeGuardTriggered;k++)$e(p[k],`${o}.children[${k}]`,n,r+1)}function De(t,o="node"){const n={errors:[],seenIds:new Set,seenNodes:new WeakSet,maxObservedId:0,visitedNodeCount:0,depthGuardTriggered:!1,sizeGuardTriggered:!1};return $e(t,o,n),{isValid:n.errors.length===0,errors:n.errors}}function rt(t){const o={errors:[],seenIds:new Set,seenNodes:new WeakSet,maxObservedId:0,visitedNodeCount:0,depthGuardTriggered:!1,sizeGuardTriggered:!1};if(!Ie(t))return $(o,"pageData","pageData must be an object."),{isValid:!1,errors:o.errors};const{meta:n,content:r,layout:l,maxId:a,variables:i}=t;if(Ie(n)?((typeof n.id!="string"||n.id.trim()==="")&&$(o,"meta.id","meta.id must be a non-empty string."),(typeof n.name!="string"||n.name.trim()==="")&&$(o,"meta.name","meta.name must be a non-empty string."),typeof n.url!="string"||n.url.trim()===""?$(o,"meta.url","meta.url must be a non-empty string."):Z(n.url,"link")===""&&$(o,"meta.url","meta.url contains an unsafe URL."),(typeof n.status!="string"||!io.has(n.status))&&$(o,"meta.status","meta.status must be one of: draft, published, archived."),n.updatedAt===void 0||typeof n.updatedAt=="string"||$(o,"meta.updatedAt","meta.updatedAt must be a string when provided."),n.createdAt===void 0||typeof n.createdAt=="string"||$(o,"meta.createdAt","meta.createdAt must be a string when provided.")):$(o,"meta","meta must be an object."),$e(r,"content",o),$e(l,"layout",o),!(typeof a=="number"&&Number.isInteger(a))||a<0?$(o,"maxId","maxId must be a non-negative integer."):a<o.maxObservedId&&$(o,"maxId",`maxId (${String(a)}) must be greater than or equal to the maximum node id (${String(o.maxObservedId)}).`),!Ie(i))$(o,"variables","variables must be an object.");else for(const[u,p]of Object.entries(i))typeof p!="string"&&$(o,`variables.${u}`,"Variable values must be strings.");return{isValid:o.errors.length===0,errors:o.errors}}const Le="en",at={en:{"toolbar.undo.title":"Undo (Ctrl/Cmd+Z)","toolbar.undo.ariaLabel":"Undo","toolbar.redo.title":"Redo (Ctrl/Cmd+Y or Shift+Ctrl/Cmd+Z)","toolbar.redo.ariaLabel":"Redo","toolbar.save":"Save","toolbar.save.title":"Save (Ctrl/Cmd+S)","toolbar.save.ariaLabel":"Save page","toolbar.aria.toolbar":"Editor toolbar","toolbar.aria.historyControls":"History controls","toolbar.aria.viewportControls":"Viewport controls","toolbar.aria.saveControls":"Save controls","toolbar.aria.unsavedChanges":"Unsaved changes","toolbar.viewport.desktop":"Desktop","toolbar.viewport.tablet":"Tablet","toolbar.viewport.mobile":"Mobile","toolbar.viewport.custom":"Custom","toolbar.viewport.switchAriaLabel":"Switch viewport to {viewport}","toolbar.viewport.width.short":"W","toolbar.viewport.height.short":"H","toolbar.viewport.width.ariaLabel":"Custom viewport width","toolbar.viewport.height.ariaLabel":"Custom viewport height","leftDrawer.title":"Components","leftDrawer.aria.componentPalette":"Component palette","leftDrawer.toggle.ariaLabel":"Toggle component drawer","leftDrawer.section.components":"Components","leftDrawer.search.placeholder":"Search components...","leftDrawer.search.ariaLabel":"Search components","leftDrawer.category.ariaLabel":"{category} components","leftDrawer.component.dragAriaLabel":"Add or drag {label}","leftDrawer.empty":"No matching components","leftDrawer.section.tree":"Tree","leftDrawer.tree.toggle.ariaLabel":"Toggle node tree","rightDrawer.title":"Properties","rightDrawer.aria.componentProperties":"Component properties","rightDrawer.toggle.ariaLabel":"Toggle properties drawer","rightDrawer.section.properties":"Properties","rightDrawer.actions.duplicate":"Duplicate","rightDrawer.actions.duplicate.ariaLabel":"Duplicate selected component","rightDrawer.actions.delete":"Delete","rightDrawer.actions.delete.ariaLabel":"Delete selected component","rightDrawer.empty":"Select a component to edit its properties.","treePanel.ariaLabel":"Node tree","treePanel.readonly":"readonly","contextMenu.ariaLabel":"Node context menu","contextMenu.duplicate":"Duplicate","contextMenu.moveUp":"Move up","contextMenu.moveDown":"Move down","contextMenu.delete":"Delete","iframeCanvas.title":"Editor canvas","propBoolean.enabled":"Enabled","propBoolean.disabled":"Disabled","propSelect.noOptions":"No options","mediaPicker.input.placeholder":"https://example.com/image.jpg","mediaPicker.clear":"Clear","mediaPicker.upload":"Upload","mediaPicker.preview.alt":"Media preview","mediaPicker.empty":"Paste an image URL to preview.","richText.action.link":"Link","richText.action.bold":"Bold","richText.action.italic":"Italic","richText.action.unorderedList":"Bulleted list","richText.action.orderedList":"Numbered list","richText.aria.toolbar":"Rich text formatting toolbar","richText.aria.editor":"Rich text editor","richText.prompt.enterUrl":"Enter URL","richText.prompt.defaultUrl":"https://","pageBuilder.warning.invalidEditMode":"Invalid `pageData` for edit mode. Rendering in read mode."}};function mo(t,o){return o?t.replace(/\{(\w+)\}/g,(n,r)=>{const l=o[r];return l===void 0?n:String(l)}):t}function qt(...t){const o={};for(const n of t)if(n)for(const[r,l]of Object.entries(n))o[r]={...o[r]??{},...l};return o}function Xt(t){const o=t.fallbackLocale??"en",n=t.dictionary[t.locale]??{},r=t.dictionary[o]??{},l=n[t.key]??r[t.key]??t.key;return mo(l,t.params)}function lt(t,o,n="en"){const r=typeof t=="function"?t:()=>t,l=typeof o=="function"?o:()=>o;return(a,i)=>Xt({locale:r(),dictionary:l(),key:a,params:i,fallbackLocale:n})}const Zt=Symbol("pageBuilderI18nOptions"),Jt=Symbol("pageBuilderI18n"),go={locale:e.computed(()=>Le),t:lt(Le,at)};function ee(){return e.inject(Jt,go)}function Me(t){return Array.isArray(t.children)?t.children:[]}function Qt(t,o){const n=Number.isFinite(t)?Math.trunc(t):0;return Math.max(0,Math.min(n,o))}function en(t){try{return structuredClone(t)}catch(o){throw j("INVALID_NODE","[PageBuilder] Failed to clone node tree. Ensure the tree is serializable and acyclic.",{cause:o})}}function A(t,o){if(t.id===o)return t;for(const n of Me(t)){const r=A(n,o);if(r)return r}}function G(t,o){const n=Me(t);for(let r=0;r<n.length;r++){if(n[r].id===o)return{parent:t,index:r};const l=G(n[r],o);if(l)return l}}function tn(t,o){const n=G(t,o);if(n)return n.parent.children.splice(n.index,1)[0]}function it(t,o,n,r,l="default"){const a=A(t,o);if(!a)return!1;Array.isArray(a.children)||(a.children=[]);const i=Qt(r,a.children.length),u={...n,slot:l};return a.children.splice(i,0,u),!0}function nn(t,o,n,r,l="default"){const a=G(t,o);if(!a)return!1;const i=Me(a.parent),[u]=i.splice(a.index,1);if(!u)return!1;if(it(t,n,u,r,l))return!0;const g=Qt(a.index,i.length);return i.splice(g,0,u),!1}function on(t,o,n={}){return{id:t,name:o,slot:n.slot??"default",props:n.props??{},children:n.children??[],readonly:n.readonly}}function st(t,o,n=0){const r=new WeakSet;function l(a,i){if(r.has(a))return!0;if(r.add(a),o(a,i)===!1)return!1;for(const u of Me(a))if(l(u,i+1)===!1)return!1;return!0}return l(t,n)}function vo(t){let o=0;return st(t,()=>{o++}),o}function ve(t){let o=t.id;return st(t,n=>{Number.isFinite(n.id)&&n.id>o&&(o=n.id)}),o}function rn(t,o){if(!t||typeof t!="object"||Array.isArray(t))return{};const n=o&&typeof o=="object"&&!Array.isArray(o)?o:{},r={};for(const[l,a]of Object.entries(t))typeof a=="string"?r[l]=a.replace(/\{\{\s*(\w+)\s*\}\}/g,(i,u)=>n[u]??`{{ ${u} }}`):r[l]=a;return r}const bo={key:1,class:"ipb-error-boundary",role:"alert"},ho={class:"ipb-error-boundary__message"},yo={key:0,class:"ipb-error-boundary__details"},_o=e.defineComponent({__name:"ErrorBoundary",props:{fallbackMessage:{default:"Something went wrong while rendering this section."},showDetailsInDev:{type:Boolean,default:!1},diagnosticContext:{default:"ErrorBoundary"}},setup(t){const o=t,n=e.ref(!1),r=e.ref(null),l=e.ref(""),a=e.computed(()=>!1),i=e.computed(()=>r.value?r.value instanceof Error?r.value.message:String(r.value):""),u=e.computed(()=>[i.value,l.value].filter(p=>!!p).join(`
|
|
2
|
-
`));return e.onErrorCaptured((
|
|
3
|
-
`,1)):e.createCommentVNode("",!0)])):e.renderSlot(p.$slots,"default",{key:0},void 0,!0)}}),H=(t,o)=>{const n=t.__vccOpts||t;for(const[r,l]of o)n[r]=l;return n},an=H(_o,[["__scopeId","data-v-5b429c0c"]]),wo={key:0,class:"ipb-node-renderer__invalid",role:"alert"},ko=e.defineComponent({__name:"NodeRenderer",props:{node:{type:Object,required:!0},variables:{type:Object,default:()=>({})},markNodes:{type:Boolean,default:!1}},setup(t){const o=t,n=new Set;function r(f,b,d){n.has(f)||(n.add(f),j("RENDER_FAILURE",b,{details:d}),void 0)}function l(f){if(typeof f!="object"||f===null||Array.isArray(f))return!1;const b=f;return typeof b.id!="number"||!Number.isFinite(b.id)||typeof b.name!="string"||b.name.trim().length===0||!(b.slot===null||typeof b.slot=="string")||typeof b.props!="object"||b.props===null||Array.isArray(b.props)?!1:Array.isArray(b.children)}function a(f){return!f||typeof f!="object"||Array.isArray(f)?{}:Object.fromEntries(Object.entries(f).filter(b=>typeof b[1]=="string"))}const i=e.computed(()=>l(o.node)?o.node:(r("invalid-node","[PageBuilder] NodeRenderer received an invalid node payload.",{node:o.node}),null)),u=e.computed(()=>a(o.variables)),p=e.defineComponent({name:"NodeRenderCrash",props:{error:{type:null,required:!0}},setup(f){return()=>{throw f.error instanceof Error?f.error:new Error(String(f.error))}}}),g=e.computed(()=>{if(!i.value)return{component:p,error:j("INVALID_NODE","[PageBuilder] Cannot render node because its payload is invalid.")};try{return{component:Mt(i.value.name),error:null}}catch(f){return r(`missing-component:${i.value.name}`,`[PageBuilder] Component "${i.value.name}" could not be resolved.`,{nodeId:i.value.id}),{component:p,error:f}}}),k=e.computed(()=>g.value.component),v=e.computed(()=>{if(g.value.error!==null)return{error:g.value.error};if(!i.value)return{error:j("INVALID_NODE","[PageBuilder] Cannot render props for an invalid node payload.")};try{return rn(i.value.props,u.value)}catch(f){return r(`prop-interpolation:${i.value.id}`,`[PageBuilder] Failed to interpolate props for node "${i.value.name}".`,{nodeId:i.value.id}),{error:f}}}),D=e.computed(()=>!o.markNodes||!i.value?{}:{"data-ipb-node-id":String(i.value.id),"data-ipb-component":i.value.name}),E=e.computed(()=>({...v.value,...D.value})),C=e.computed(()=>{const f={};if(!i.value)return f;for(const b of i.value.children){if(!l(b)){r(`invalid-child:${i.value.id}`,`[PageBuilder] Ignoring invalid child node while rendering "${i.value.name}".`,{parentNodeId:i.value.id});continue}const d=b.slot??"default";f[d]||(f[d]=[]),f[d].push(b)}return f});return(f,b)=>{const d=e.resolveComponent("NodeRenderer",!0);return i.value?(e.openBlock(),e.createBlock(an,{key:1,"fallback-message":"This block could not be rendered.","show-details-in-dev":!0,"diagnostic-context":"NodeRenderer"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k.value),e.normalizeProps(e.guardReactiveProps(E.value)),e.createSlots({_:2},[e.renderList(C.value,(s,y)=>({name:y,fn:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s,x=>(e.openBlock(),e.createBlock(d,{key:x.id,node:x,variables:u.value,"mark-nodes":t.markNodes},null,8,["node","variables","mark-nodes"]))),128))])}))]),1040))]),_:1})):(e.openBlock(),e.createElementBlock("div",wo," This block is invalid and could not be rendered. "))}}}),dt=H(ko,[["__scopeId","data-v-40a28160"]]),No={class:"ipb-page-reader"},Eo={key:1,class:"ipb-page-reader__invalid",role:"alert"},xo=e.defineComponent({__name:"PageReader",props:{pageData:{type:Object,required:!0}},setup(t){const o=t,n=e.computed(()=>rt(o.pageData)),r=e.computed(()=>De(o.pageData.content,"content")),l=e.computed(()=>De(o.pageData.layout,"layout")),a=new Set;function i(k,v,D){a.has(k)||(a.add(k),j("INVALID_PAGE_DATA",v,{details:D}),void 0)}e.watch(n,k=>{k.isValid||i("invalid-page-data","[PageReader] Invalid pageData payload detected. Rendering continues with degraded behavior.",{errors:k.errors})},{immediate:!0});function u(k){return typeof k=="object"&&k!==null&&!Array.isArray(k)}const p=e.computed(()=>{const k=o.pageData.variables;return!k||typeof k!="object"||Array.isArray(k)?(i("invalid-variables-shape","[PageReader] Invalid variables payload. Falling back to an empty variable map."),{}):(Object.values(k).some(D=>typeof D!="string")&&i("invalid-variables-values","[PageReader] Variables payload contains non-string values. Invalid entries were ignored."),Object.fromEntries(Object.entries(k).filter(D=>typeof D[1]=="string")))}),g=e.computed(()=>{if(!u(o.pageData.content)||!r.value.isValid)return i("invalid-content","[PageReader] Invalid content node. Nothing can be rendered.",{errors:r.value.errors}),null;if(!u(o.pageData.layout)||!l.value.isValid)return i("invalid-layout","[PageReader] Invalid layout node. Falling back to content-only rendering.",{errors:l.value.errors}),o.pageData.content;const k={...o.pageData.content,slot:o.pageData.content.slot??"default"},v=Array.isArray(o.pageData.layout.children)?o.pageData.layout.children:[];return{...o.pageData.layout,children:[...v,k]}});return(k,v)=>(e.openBlock(),e.createElementBlock("div",No,[g.value?(e.openBlock(),e.createBlock(an,{key:0,"fallback-message":"This page could not be fully rendered.","show-details-in-dev":!0,"diagnostic-context":"PageReader"},{default:e.withCtx(()=>[e.createVNode(dt,{node:g.value,variables:p.value},null,8,["node","variables"])]),_:1})):(e.openBlock(),e.createElementBlock("div",Eo," This page data is invalid and cannot be rendered safely. "))]))}}),ln=H(xo,[["__scopeId","data-v-d9bf9b29"]]),ke={desktop:{width:1440,height:900,label:"Desktop"},tablet:{width:768,height:1024,label:"Tablet"},mobile:{width:375,height:812,label:"Mobile"},custom:{width:0,height:0,label:"Custom"}},sn=Symbol("pageBuilder"),dn=Symbol("editor"),Oe=Symbol("nodeTree"),ze=Symbol("dragDrop");function Q(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Io(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function Je(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}function St(t,o,n){return{id:t,name:o,slot:n,props:{},children:[]}}function ge(t,o=new WeakSet){return!Q(t)||o.has(t)||(o.add(t),!Io(t.id))||typeof t.name!="string"||t.name.trim().length===0||!(t.slot===null||typeof t.slot=="string")||!Q(t.props)||!Array.isArray(t.children)||typeof t.readonly<"u"&&typeof t.readonly!="boolean"?!1:t.children.every(n=>ge(n,o))}function Do(t){if(!Q(t))return{};const o={};for(const[n,r]of Object.entries(t))typeof r=="string"&&(o[n]=r);return o}function Co(t){const o=[],n=St(1,"PbSection",null),r=St(100,"PbContainer",null),l=Q(t)?t:{};let a=n;ge(l.content)?a=structuredClone(l.content):o.push("content node is invalid");let i=r;ge(l.layout)?i=structuredClone(l.layout):o.push("layout node is invalid");const u=l.maxId,p=Math.max(ve(a),ve(i)),g=Je(u),k=g?Math.max(Math.trunc(u),p):p;g||o.push("maxId is invalid");const v=Do(l.variables);Q(l.variables)||o.push("variables map is invalid");const D=Q(l.meta)?l.meta:{};Q(l.meta)||o.push("meta object is invalid");const E={meta:{id:typeof D.id=="string"?D.id:"unknown-page",name:typeof D.name=="string"?D.name:"Untitled page",url:typeof D.url=="string"?D.url:"/",status:D.status==="draft"||D.status==="published"||D.status==="archived"?D.status:"draft",updatedAt:typeof D.updatedAt=="string"?D.updatedAt:void 0,createdAt:typeof D.createdAt=="string"?D.createdAt:void 0},content:a,layout:i,maxId:k,variables:v};return o.length>0&&(j("INVALID_PAGE_DATA",`[PageBuilder] Invalid page data detected. Falling back to safe defaults for: ${o.join(", ")}.`),void 0),E}function Tt(t){let o;try{o=JSON.parse(t)}catch(r){throw j("INVALID_SNAPSHOT","[PageBuilder] Snapshot JSON is invalid.",{cause:r,details:{snapshotPreview:t.slice(0,200)}})}if(!Q(o)||!ge(o.content)||!ge(o.layout)||!Je(o.maxId))throw j("INVALID_SNAPSHOT","[PageBuilder] Snapshot payload shape is invalid.",{details:{contentValid:Q(o)?ge(o.content):!1,layoutValid:Q(o)?ge(o.layout):!1,maxIdValid:Q(o)?Je(o.maxId):!1}});const n=Math.max(Math.trunc(o.maxId),ve(o.content),ve(o.layout));return{content:o.content,layout:o.layout,maxId:n}}function cn(t){const{initialData:o,mode:n="read"}=t,r=Co(o),l=e.ref(n),a=e.ref(r.meta),i=e.ref(r.content),u=e.ref(r.layout),p=e.ref(r.maxId),g=e.ref(r.variables),k=e.ref(!1),v=e.computed(()=>({meta:a.value,content:i.value,layout:u.value,maxId:p.value,variables:g.value})),D=C({content:r.content,layout:r.layout});function E(I){return JSON.stringify(I)}function C(I){return JSON.stringify(I)}function f(){k.value=C({content:i.value,layout:u.value})!==D}function b(I){l.value=I}function d(I){i.value=I,p.value=Math.max(p.value,ve(I)),f()}function s(I){u.value=I,p.value=Math.max(p.value,ve(I)),f()}function y(){return p.value++,p.value}function x(){return E({content:i.value,layout:u.value,maxId:p.value})}function B(I){try{const L=Tt(I);i.value=L.content,u.value=L.layout,p.value=L.maxId,f()}catch(L){throw j("INVALID_SNAPSHOT","[PageBuilder] Unable to restore snapshot.",{cause:L,details:{reason:Lt(L)}})}}function T(){const I=Tt(JSON.stringify({content:r.content,layout:r.layout,maxId:r.maxId}));i.value=structuredClone(I.content),u.value=structuredClone(I.layout),p.value=I.maxId,g.value=structuredClone(r.variables),k.value=!1}return{mode:l,pageData:v,content:i,layout:u,maxId:p,variables:g,isDirty:k,setMode:b,updateContent:d,updateLayout:s,nextId:y,getSnapshot:x,restoreSnapshot:B,reset:T}}function un(t={}){const{initialSnapshot:o,initialLabel:n="Initial state"}=t,r=o?[{timestamp:Date.now(),label:n,snapshot:o}]:[];let l=o??null;const a=e.reactive({selectedNodeId:null,hoveredNodeId:null,leftDrawerOpen:!0,rightDrawerOpen:!1,history:r,historyIndex:r.length>0?0:-1,isDirty:!1,canvasScale:1,viewport:"desktop"}),i=e.computed(()=>a.historyIndex>0),u=e.computed(()=>a.historyIndex<a.history.length-1);function p(s){a.selectedNodeId=s,s!==null&&(a.rightDrawerOpen=!0)}function g(s){a.hoveredNodeId=s}function k(){a.leftDrawerOpen=!a.leftDrawerOpen}function v(){a.rightDrawerOpen=!a.rightDrawerOpen}function D(s){a.viewport=s}function E(){var y;if(l===null||a.historyIndex<0){a.isDirty=!1;return}const s=(y=a.history[a.historyIndex])==null?void 0:y.snapshot;a.isDirty=s!==l}function C(s,y=n){l=s,a.history=[{timestamp:Date.now(),label:y,snapshot:s}],a.historyIndex=0,a.isDirty=!1}function f(s,y){var B;if(l===null){C(y);return}((B=a.history[a.historyIndex])==null?void 0:B.snapshot)!==y&&(a.historyIndex<a.history.length-1&&a.history.splice(a.historyIndex+1),a.history.push({timestamp:Date.now(),label:s,snapshot:y}),a.historyIndex=a.history.length-1,E())}function b(){var s;if(i.value)return a.historyIndex--,E(),(s=a.history[a.historyIndex])==null?void 0:s.snapshot}function d(){var s;if(u.value)return a.historyIndex++,E(),(s=a.history[a.historyIndex])==null?void 0:s.snapshot}return{...e.toRefs(a),canUndo:i,canRedo:u,selectNode:p,hoverNode:g,toggleLeftDrawer:k,toggleRightDrawer:v,setViewport:D,setHistoryBaseline:C,pushHistory:f,undo:b,redo:d}}function fn({content:t,nextId:o,onUpdate:n,onSnapshot:r}){function l(f,b){const d=e.toRaw(t.value),s=JSON.stringify(d),y=en(d);return b(y)===!1||JSON.stringify(y)===s?!1:(n(y),r==null||r(f),!0)}function a(f,b,d,s="default",y){let x=null;return!l(`Add ${b}`,T=>{if(!A(T,f))return!1;x=o();const L=on(x,b,{slot:s,props:y});return it(T,f,L,d,s)})||x===null?null:x}function i(f){l("Delete node",b=>{tn(b,f)})}function u(f,b,d,s="default"){l("Move node",y=>nn(y,f,b,d,s))}function p(f,b){l("Update props",d=>{const s=A(d,f);s&&(s.props={...s.props,...b})})}function g(f){l("Duplicate node",b=>{const d=A(b,f);if(!d)return;const s=G(b,f);if(!s)return;const y=C(d);s.parent.children.splice(s.index+1,0,y)})}function k(f){const b=A(t.value,f);if(!b||b.readonly)return!1;const d=G(t.value,f);return d?d.index>0:!1}function v(f){const b=A(t.value,f);if(!b||b.readonly)return!1;const d=G(t.value,f);return d?d.index<d.parent.children.length-1:!1}function D(f){k(f)&&l("Move node up",b=>{const d=G(b,f);if(!d||d.index<=0)return;const[s]=d.parent.children.splice(d.index,1);d.parent.children.splice(d.index-1,0,s)})}function E(f){v(f)&&l("Move node down",b=>{const d=G(b,f);if(!d||d.index>=d.parent.children.length-1)return;const[s]=d.parent.children.splice(d.index,1);d.parent.children.splice(d.index+1,0,s)})}function C(f){return{...f,id:o(),props:{...f.props},children:f.children.map(b=>C(b))}}return{addNode:a,deleteNode:i,moveNodeTo:u,updateNodeProps:p,duplicateNode:g,canMoveNodeUp:k,canMoveNodeDown:v,moveNodeUp:D,moveNodeDown:E}}const pn="default";function Pe(){return{isDragging:!1,sourceNodeId:null,sourceComponentName:null,isNewComponent:!1,dropTargetId:null,dropIndex:0,dropSlot:pn}}function mn(){const t=e.ref(Pe());function o(){t.value=Pe()}function n(u){t.value={...Pe(),isDragging:!0,sourceNodeId:u}}function r(u){t.value={...Pe(),isDragging:!0,sourceComponentName:u,isNewComponent:!0}}function l(u,p,g=pn){t.value.isDragging&&(t.value.dropTargetId=u,t.value.dropIndex=p,t.value.dropSlot=g)}function a(){const u={...t.value};return o(),u}function i(){o()}return{dragState:t,startDragExisting:n,startDragNew:r,updateDropTarget:l,endDrag:a,cancelDrag:i}}const So=["aria-label"],To=["aria-label"],Bo=["disabled","aria-label","title"],Po=["disabled","aria-label","title"],Vo=["aria-label"],Ro=["title","aria-label","aria-pressed","data-viewport-preset","onClick","onKeydown"],$o={key:0,class:"ipb-toolbar__custom-size"},Lo={class:"ipb-toolbar__size-control"},Ao=["aria-label","value"],Mo={class:"ipb-toolbar__size-control"},Oo=["aria-label","value"],zo={key:1,class:"ipb-toolbar__viewport-size","aria-live":"polite"},Uo=["aria-label"],Ko=["aria-label"],Ho=["aria-label","title"],Fe=240,We=320,Ge=3840,Ye=4320,jo=e.defineComponent({__name:"EditorToolbar",props:{canUndo:{type:Boolean,default:!1},canRedo:{type:Boolean,default:!1},isDirty:{type:Boolean,default:!1},viewport:{type:String,default:"desktop"},customViewportWidth:{type:Number,default:1024},customViewportHeight:{type:Number,default:768},activeViewportWidth:{type:Number,default:null},activeViewportHeight:{type:Number,default:null}},emits:["undo","redo","save","viewport-change","custom-viewport-change"],setup(t,{emit:o}){const n=t,r=o,{t:l}=ee(),a={desktop:"toolbar.viewport.desktop",tablet:"toolbar.viewport.tablet",mobile:"toolbar.viewport.mobile",custom:"toolbar.viewport.custom"},i=["desktop","tablet","mobile","custom"],u=e.ref(new Map);function p(d){return l(a[d])}function g(d){return l("toolbar.viewport.switchAriaLabel",{viewport:p(d)})}function k(d,s){const y=s instanceof HTMLButtonElement?s:s&&"$el"in s&&s.$el instanceof HTMLButtonElement?s.$el:null;if(y){u.value.set(d,y);return}u.value.delete(d)}function v(d){return i.indexOf(d)}function D(d){var s;(s=u.value.get(d))==null||s.focus()}function E(d,s){const y=v(s);if(y<0||d.key!=="ArrowLeft"&&d.key!=="ArrowRight"&&d.key!=="ArrowUp"&&d.key!=="ArrowDown"&&d.key!=="Home"&&d.key!=="End")return;d.preventDefault();let x=y;d.key==="ArrowLeft"||d.key==="ArrowUp"?x=(y-1+i.length)%i.length:d.key==="ArrowRight"||d.key==="ArrowDown"?x=(y+1)%i.length:d.key==="Home"?x=0:d.key==="End"&&(x=i.length-1);const B=i[x];r("viewport-change",B),e.nextTick(()=>{D(B)})}function C(d,s,y){return Math.max(s,Math.min(y,d))}function f(d){if(!d.trim())return null;const s=Number(d);return Number.isFinite(s)?Math.round(s):null}function b(d,s){const y=f(s);if(y===null)return;const x=C(d==="width"?y:n.customViewportWidth,Fe,Ge),B=C(d==="height"?y:n.customViewportHeight,We,Ye);r("custom-viewport-change",{width:x,height:B})}return(d,s)=>(e.openBlock(),e.createElementBlock("header",{class:"ipb-toolbar",role:"toolbar","aria-label":e.unref(l)("toolbar.aria.toolbar")},[e.createElementVNode("div",{class:"ipb-toolbar__left",role:"group","aria-label":e.unref(l)("toolbar.aria.historyControls")},[e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn",disabled:!t.canUndo,"aria-label":e.unref(l)("toolbar.undo.ariaLabel"),title:e.unref(l)("toolbar.undo.title"),"aria-keyshortcuts":"Control+Z Meta+Z",onClick:s[0]||(s[0]=y=>d.$emit("undo"))}," ↩ ",8,Bo),e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn",disabled:!t.canRedo,"aria-label":e.unref(l)("toolbar.redo.ariaLabel"),title:e.unref(l)("toolbar.redo.title"),"aria-keyshortcuts":"Control+Y Meta+Y Control+Shift+Z Meta+Shift+Z",onClick:s[1]||(s[1]=y=>d.$emit("redo"))}," ↪ ",8,Po)],8,To),e.createElementVNode("div",{class:"ipb-toolbar__center",role:"group","aria-label":e.unref(l)("toolbar.aria.viewportControls")},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(ke),(y,x)=>(e.openBlock(),e.createElementBlock("button",{key:x,ref_for:!0,ref:B=>k(x,B),type:"button",class:e.normalizeClass(["ipb-toolbar__btn",{"ipb-toolbar__btn--active":t.viewport===x}]),title:p(x),"aria-label":g(x),"aria-pressed":t.viewport===x?"true":"false","data-viewport-preset":x,onClick:B=>d.$emit("viewport-change",x),onKeydown:B=>E(B,x)},e.toDisplayString(p(x)),43,Ro))),128)),t.viewport==="custom"?(e.openBlock(),e.createElementBlock("div",$o,[e.createElementVNode("label",Lo,[e.createElementVNode("span",null,e.toDisplayString(e.unref(l)("toolbar.viewport.width.short")),1),e.createElementVNode("input",{class:"ipb-toolbar__size-input",type:"number",inputmode:"numeric","aria-label":e.unref(l)("toolbar.viewport.width.ariaLabel"),min:Fe,max:Ge,value:t.customViewportWidth,onInput:s[2]||(s[2]=y=>b("width",y.target.value))},null,40,Ao)]),e.createElementVNode("label",Mo,[e.createElementVNode("span",null,e.toDisplayString(e.unref(l)("toolbar.viewport.height.short")),1),e.createElementVNode("input",{class:"ipb-toolbar__size-input",type:"number",inputmode:"numeric","aria-label":e.unref(l)("toolbar.viewport.height.ariaLabel"),min:We,max:Ye,value:t.customViewportHeight,onInput:s[3]||(s[3]=y=>b("height",y.target.value))},null,40,Oo)])])):e.createCommentVNode("",!0),t.activeViewportWidth!==null&&t.activeViewportHeight!==null?(e.openBlock(),e.createElementBlock("span",zo,e.toDisplayString(t.activeViewportWidth)+"×"+e.toDisplayString(t.activeViewportHeight),1)):e.createCommentVNode("",!0)],8,Vo),e.createElementVNode("div",{class:"ipb-toolbar__right",role:"group","aria-label":e.unref(l)("toolbar.aria.saveControls")},[t.isDirty?(e.openBlock(),e.createElementBlock("span",{key:0,class:"ipb-toolbar__dirty-indicator",role:"status","aria-label":e.unref(l)("toolbar.aria.unsavedChanges")}," ● ",8,Ko)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn ipb-toolbar__btn--primary","aria-label":e.unref(l)("toolbar.save.ariaLabel"),title:e.unref(l)("toolbar.save.title"),"aria-keyshortcuts":"Control+S Meta+S",onClick:s[4]||(s[4]=y=>d.$emit("save"))},e.toDisplayString(e.unref(l)("toolbar.save")),9,Ho)],8,Uo)],8,So))}}),Fo=H(jo,[["__scopeId","data-v-7086d88b"]]);function Wo(t,o){const n=de(t.name);return!n||n.slots.length===0?[]:n.slots.filter(r=>{const l=r.allowedComponents;return!l||l.length===0||l.includes(o)})}function se(t,o,n){const r=Wo(t,n);if(r.length===0)return null;if(o){const a=r.find(i=>i.name===o);if(a)return a.name}const l=r.find(a=>a.name==="default");return(l==null?void 0:l.name)??r[0].name}function Ve(t){return Number.isFinite(t)?Math.trunc(t):0}function gn(t){return`ipb-node-${t}`}function vn(t,o={}){const n=o.createKey??(a=>gn(a.id)),r=[],l=[{node:t,depth:0,parentId:null}];for(;l.length>0;){const a=l.pop();if(!a)break;const i=r.length;r.push({node:a.node,id:a.node.id,key:n(a.node),depth:a.depth,index:i,parentId:a.parentId});for(let u=a.node.children.length-1;u>=0;u--)l.push({node:a.node.children[u],depth:a.depth+1,parentId:a.node.id})}return r}function bn(t,o,n,r=0){const l=Math.max(0,Ve(t)),a=Math.max(0,Ve(n)),i=Math.max(0,Ve(r));if(l===0||a===0)return{start:0,end:0,size:0,total:l};const u=l-1,p=Math.min(Math.max(Ve(o),0),u),g=Math.max(0,p-i),k=Math.min(l,p+a+i);return{start:g,end:k,size:Math.max(0,k-g),total:l}}function Go(t,o,n,r=0){const l=bn(t.length,o,n,r);return{rows:t.slice(l.start,l.end),range:l}}function Yo(t){const o=[],n=new Map,r=new Map;for(let l=0;l<t.length;l++){const a=t[l];o[l]=a.key,n.has(a.key)||n.set(a.key,l),r.has(a.id)||r.set(a.id,l)}return{keyByIndex:o,indexByKey:n,indexByNodeId:r}}const qo={class:"ipb-tree-panel"},Xo=["aria-label"],Zo=["onDragover","onDrop"],Jo={key:0,class:"ipb-tree-panel__drop-line","data-drop-zone":"above","aria-hidden":"true"},Qo=["data-node-id","draggable","aria-selected","aria-level","aria-readonly","tabindex","onClick","onDragstart"],er={class:"ipb-tree-panel__name"},tr={class:"ipb-tree-panel__id"},nr={key:0,class:"ipb-tree-panel__readonly"},or={key:1,class:"ipb-tree-panel__drop-line","data-drop-zone":"below","aria-hidden":"true"},rr=e.defineComponent({__name:"TreePanel",props:{content:{type:Object,required:!0},selectedNodeId:{type:Number,default:null}},emits:["select"],setup(t,{emit:o}){const n=t,r=o,{t:l}=ee(),a=e.inject(Oe,null),i=e.inject(ze,null),u=e.ref(!1),p=e.ref(null),g=e.ref(null),k=e.computed(()=>n.content.id);function v(m,N,w="on"){var re,ce;const V=(ce=(re=m.target)==null?void 0:re.closest)==null?void 0:ce.call(re,"[data-drop-zone]"),M=V==null?void 0:V.getAttribute("data-drop-zone");if(M==="above")return"above";if(M==="below")return"below";if(!N)return w;const O=N.getBoundingClientRect(),J=m.clientY-O.top,q=O.height/3;return J<q?"above":J>2*q?"below":"on"}function D(m,N){const w=A(n.content,m);if(!w)return null;const V=w.slot??"default",M=G(n.content,m);if(!M){const J=n.content.id,q=N==="above"?0:n.content.children.length;return{parentId:J,index:q,slot:"default"}}const O=N==="above"?M.index:M.index+1;return{parentId:M.parent.id,index:O,slot:V}}function E(m,N){return m.id===N?!0:m.children.some(w=>E(w,N))}function C(m){var N;return m.sourceComponentName?m.sourceComponentName:m.sourceNodeId===null?null:((N=A(n.content,m.sourceNodeId))==null?void 0:N.name)??null}function f(m,N){if(m.sourceNodeId===N)return!1;const w=C(m);if(!w)return!1;const V=A(n.content,N);if(!V||V.readonly)return!1;if(!m.isNewComponent&&m.sourceNodeId!==null){const M=A(n.content,m.sourceNodeId);if(!M||M.readonly||E(M,N))return!1}return se(V,"default",w)!==null}function b(m,N,w){const V=C(m);if(!V)return!1;const M=A(n.content,N);if(!M||M.readonly||se(M,w,V)===null)return!1;if(!m.isNewComponent&&m.sourceNodeId!==null){const O=A(n.content,m.sourceNodeId);if(!O||O.readonly||E(O,N))return!1}return!0}const d=e.computed(()=>vn(n.content).map(m=>({id:m.id,key:m.key,name:m.node.name,depth:m.depth,readonly:!!m.node.readonly}))),s=e.ref(new Map);function y(m,N){const w=N instanceof HTMLButtonElement?N:N&&"$el"in N&&N.$el instanceof HTMLButtonElement?N.$el:null;if(w){s.value.set(m,w);return}s.value.delete(m)}function x(m){if(!(m instanceof HTMLElement))return null;const N=m.dataset.nodeId;if(!N)return null;const w=Number(N);return Number.isInteger(w)?w:null}function B(m=!0){if(d.value.length===0)return-1;if(n.selectedNodeId!==null){const N=d.value.findIndex(w=>w.id===n.selectedNodeId);if(N>=0)return N}return m?0:-1}function T(m){var N;(N=s.value.get(m))==null||N.focus()}function I(m){const N=d.value[m];N&&(r("select",N.id),e.nextTick(()=>{T(N.id)}))}function L(m){var w;const N=B();return((w=d.value[N])==null?void 0:w.id)===m}const Y=e.computed(()=>!!(a&&i)),U=m=>!!(i!=null&&i.dragState.value.isDragging&&p.value===m&&g.value==="on"),F=m=>!!(i!=null&&i.dragState.value.isDragging&&p.value===m&&g.value==="above"),oe=m=>!!(i!=null&&i.dragState.value.isDragging&&p.value===m&&g.value==="below");function te(m){return!Y.value||m.readonly?!1:m.id!==k.value}function Ne(m,N){!i||!te(m)||(u.value=!1,i.startDragExisting(m.id),N.dataTransfer&&(N.dataTransfer.effectAllowed="move",N.dataTransfer.setData("application/x-ipb-node-id",String(m.id)),N.dataTransfer.setData("text/plain",String(m.id))))}function be(m,N){if(!i||!i.dragState.value.isDragging)return;const w=i.dragState.value,V=v(N,s.value.get(m.id));if(V==="on"){if(!f(w,m.id))return;N.preventDefault(),N.dataTransfer&&(N.dataTransfer.dropEffect=w.isNewComponent?"copy":"move"),p.value=m.id,g.value="on",i.updateDropTarget(m.id,0,"default");return}const M=D(m.id,V);!M||!b(w,M.parentId,M.slot)||(N.preventDefault(),N.dataTransfer&&(N.dataTransfer.dropEffect=w.isNewComponent?"copy":"move"),p.value=m.id,g.value=V,i.updateDropTarget(M.parentId,M.index,M.slot))}function he(m,N){var Se,ye;if(N.preventDefault(),!a||!i||!i.dragState.value.isDragging)return;const w=i.dragState.value,M=(p.value===m.id&&g.value?g.value:null)??v(N,s.value.get(m.id),"on");if(M==="on"){const _e=A(n.content,m.id);if(!_e||!f(w,m.id)){i.cancelDrag();return}const le=C(w),Te=le?se(_e,"default",le)??"default":"default";if(w.isNewComponent&&w.sourceComponentName){const Be=(Se=de(w.sourceComponentName))==null?void 0:Se.defaultProps,xe=a.addNode(m.id,w.sourceComponentName,0,Te,Be);u.value=!0,i.endDrag(),xe!==null&&r("select",xe);return}if(w.sourceNodeId===null)return;a.moveNodeTo(w.sourceNodeId,m.id,0,Te),u.value=!0,i.endDrag(),r("select",w.sourceNodeId);return}const O=D(m.id,M);if(!O||!b(w,O.parentId,O.slot)){i.cancelDrag();return}const J=A(n.content,O.parentId),q=C(w),re=J&&q?se(J,O.slot,q)??O.slot:O.slot;if(w.isNewComponent&&w.sourceComponentName){const _e=(ye=de(w.sourceComponentName))==null?void 0:ye.defaultProps,le=a.addNode(O.parentId,w.sourceComponentName,O.index,re,_e);u.value=!0,i.endDrag(),le!==null&&r("select",le);return}if(w.sourceNodeId===null)return;let ce=O.index;const Ee=G(n.content,w.sourceNodeId);Ee&&Ee.parent.id===O.parentId&&Ee.index<O.index&&(ce=O.index-1),a.moveNodeTo(w.sourceNodeId,O.parentId,ce,re),u.value=!0,i.endDrag(),r("select",w.sourceNodeId)}function h(){p.value=null,g.value=null,!u.value&&(i!=null&&i.dragState.value.isDragging)&&i.cancelDrag()}function R(m){if(d.value.length===0)return;const N=x(m.target),w=N===null?B():d.value.findIndex(V=>V.id===N);if(!(w<0)){if(m.key==="ArrowDown"){m.preventDefault();const V=Math.min(d.value.length-1,w+1);I(V);return}if(m.key==="ArrowUp"){m.preventDefault();const V=Math.max(0,w-1);I(V);return}if(m.key==="Home"){m.preventDefault(),I(0);return}if(m.key==="End"){m.preventDefault(),I(d.value.length-1);return}(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),I(w))}}return e.watch(()=>n.selectedNodeId,m=>{m!==null&&e.nextTick(()=>{T(m)})}),(m,N)=>(e.openBlock(),e.createElementBlock("div",qo,[e.createElementVNode("div",{class:"ipb-tree-panel__list",role:"tree","aria-label":e.unref(l)("treePanel.ariaLabel"),onKeydown:R},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,w=>(e.openBlock(),e.createElementBlock("div",{key:w.key,class:"ipb-tree-panel__row-wrapper",onDragover:V=>be(w,V),onDrop:V=>he(w,V)},[F(w.id)?(e.openBlock(),e.createElementBlock("div",Jo)):e.createCommentVNode("",!0),e.createElementVNode("button",{ref_for:!0,ref:V=>y(w.id,V),type:"button",class:e.normalizeClass(["ipb-tree-panel__item",{"ipb-tree-panel__item--selected":t.selectedNodeId===w.id,"ipb-tree-panel__item--readonly":w.readonly,"ipb-tree-panel__item--drop-target":U(w.id),"ipb-tree-panel__item--draggable":te(w)}]),style:e.normalizeStyle({paddingInlineStart:`${w.depth*16+8}px`}),"data-node-id":w.id,draggable:te(w),role:"treeitem","aria-selected":t.selectedNodeId===w.id?"true":"false","aria-level":w.depth+1,"aria-readonly":w.readonly?"true":"false",tabindex:L(w.id)?0:-1,onClick:V=>r("select",w.id),onDragstart:V=>Ne(w,V),onDragend:h},[e.createElementVNode("span",er,e.toDisplayString(w.name),1),e.createElementVNode("span",tr,"#"+e.toDisplayString(w.id),1),w.readonly?(e.openBlock(),e.createElementBlock("span",nr,e.toDisplayString(e.unref(l)("treePanel.readonly")),1)):e.createCommentVNode("",!0)],46,Qo),oe(w.id)?(e.openBlock(),e.createElementBlock("div",or)):e.createCommentVNode("",!0)],40,Zo))),128))],40,Xo)]))}}),ar=H(rr,[["__scopeId","data-v-f50f228d"]]),lr=["aria-label"],ir={class:"ipb-left-drawer__header"},sr={class:"ipb-left-drawer__title",id:"ipb-left-drawer-title"},dr=["aria-label","aria-expanded"],cr={class:"ipb-left-drawer__section"},ur={class:"ipb-left-drawer__section-title",id:"ipb-left-drawer-components-title"},fr={class:"ipb-left-drawer__search",role:"search"},pr=["placeholder","aria-label"],mr={class:"ipb-left-drawer__category-title"},gr=["aria-label"],vr=["title","aria-label","onClick","onDragstart"],br={class:"ipb-left-drawer__component-icon","aria-hidden":"true"},hr={class:"ipb-left-drawer__component-label"},yr={key:0,class:"ipb-left-drawer__empty"},_r={key:0,class:"ipb-left-drawer__section ipb-left-drawer__section--tree"},wr={class:"ipb-left-drawer__section-header"},kr={class:"ipb-left-drawer__section-title"},Nr=["aria-expanded","aria-label"],Er=["aria-label"],me="ipb-left-drawer-content",Bt="ipb-left-drawer-tree-panel",xr=e.defineComponent({__name:"LeftDrawer",props:{open:{type:Boolean,default:!0},content:{type:Object,default:null},selectedNodeId:{type:Number,default:null}},emits:["toggle","dragStart","dragEnd","add","select"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>Ot()),{t:a}=ee(),i=e.ref(""),u=e.ref(!0),p=e.ref(null),g=e.ref(null),k=e.ref(null),v=e.ref(!1),D=e.computed(()=>{const T=i.value.trim().toLowerCase();if(!T)return l.value;const I=new Map;for(const[L,Y]of l.value){const U=Y.filter(F=>[F.name,F.label,F.description??"",L,F.category].some(te=>te.toLowerCase().includes(T)));U.length>0&&I.set(L,U)}return I});function E(T,I){I.dataTransfer&&(I.dataTransfer.effectAllowed="copy",I.dataTransfer.setData("application/x-ipb-component",T),I.dataTransfer.setData("text/plain",T)),r("dragStart",T)}function C(){r("dragEnd")}function f(T){r("add",T)}function b(){u.value=!u.value}function d(){const T=p.value;return T?T.querySelector(`#${me} button:not([disabled]), #${me} input:not([disabled]), #${me} select:not([disabled]), #${me} textarea:not([disabled]), #${me} [tabindex]:not([tabindex="-1"])`):null}function s(){var T,I;(T=k.value)==null||T.focus(),document.activeElement!==k.value&&((I=d())==null||I.focus())}function y(){v.value=!n.open,r("toggle")}function x(T){return a("leftDrawer.category.ariaLabel",{category:T})}function B(T){return a("leftDrawer.component.dragAriaLabel",{label:T})}return e.watch(()=>n.open,(T,I)=>{var L;if(T&&!I&&v.value&&e.nextTick(()=>{s()}),!T&&I){const Y=document.activeElement;Y instanceof HTMLElement&&((L=p.value)!=null&&L.contains(Y))&&e.nextTick(()=>{var U;(U=g.value)==null||U.focus()})}T!==I&&(v.value=!1)}),(T,I)=>(e.openBlock(),e.createElementBlock("aside",{ref_key:"drawerRef",ref:p,class:e.normalizeClass(["ipb-left-drawer",{"ipb-left-drawer--open":t.open}]),"aria-label":e.unref(a)("leftDrawer.aria.componentPalette"),role:"complementary"},[e.createElementVNode("div",ir,[e.createElementVNode("span",sr,e.toDisplayString(e.unref(a)("leftDrawer.title")),1),e.createElementVNode("button",{ref_key:"drawerToggleRef",ref:g,type:"button",class:"ipb-left-drawer__toggle","aria-label":e.unref(a)("leftDrawer.toggle.ariaLabel"),"aria-expanded":t.open?"true":"false","aria-controls":me,onClick:y},e.toDisplayString(t.open?"◀":"▶"),9,dr)]),t.open?(e.openBlock(),e.createElementBlock("div",{key:0,id:me,class:"ipb-left-drawer__content",role:"region","aria-labelledby":"ipb-left-drawer-title"},[e.createElementVNode("div",cr,[e.createElementVNode("h3",ur,e.toDisplayString(e.unref(a)("leftDrawer.section.components")),1),e.createElementVNode("div",fr,[e.withDirectives(e.createElementVNode("input",{ref_key:"searchInputRef",ref:k,"onUpdate:modelValue":I[0]||(I[0]=L=>i.value=L),type:"search",class:"ipb-left-drawer__search-input",placeholder:e.unref(a)("leftDrawer.search.placeholder"),"aria-label":e.unref(a)("leftDrawer.search.ariaLabel")},null,8,pr),[[e.vModelText,i.value]])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(D.value,([L,Y])=>(e.openBlock(),e.createElementBlock("div",{key:L,class:"ipb-left-drawer__category"},[e.createElementVNode("h4",mr,e.toDisplayString(L),1),e.createElementVNode("div",{class:"ipb-left-drawer__component-list",role:"group","aria-label":x(L)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Y,U=>(e.openBlock(),e.createElementBlock("button",{key:U.name,type:"button",class:"ipb-left-drawer__component-item",draggable:"true",title:U.description,"aria-label":B(U.label),"aria-keyshortcuts":"Enter Space",onClick:F=>f(U.name),onDragstart:F=>E(U.name,F),onDragend:C},[e.createElementVNode("span",br,e.toDisplayString(U.icon??"◻"),1),e.createElementVNode("span",hr,e.toDisplayString(U.label),1)],40,vr))),128))],8,gr)]))),128)),D.value.size===0?(e.openBlock(),e.createElementBlock("p",yr,e.toDisplayString(e.unref(a)("leftDrawer.empty")),1)):e.createCommentVNode("",!0)]),t.content?(e.openBlock(),e.createElementBlock("div",_r,[e.createElementVNode("div",wr,[e.createElementVNode("h3",kr,e.toDisplayString(e.unref(a)("leftDrawer.section.tree")),1),e.createElementVNode("button",{type:"button",class:"ipb-left-drawer__section-toggle","aria-expanded":u.value?"true":"false","aria-controls":Bt,"aria-label":e.unref(a)("leftDrawer.tree.toggle.ariaLabel"),onClick:b},e.toDisplayString(u.value?"−":"+"),9,Nr)]),u.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:Bt,role:"region","aria-label":e.unref(a)("treePanel.ariaLabel")},[e.createVNode(ar,{content:t.content,"selected-node-id":t.selectedNodeId,onSelect:I[1]||(I[1]=L=>r("select",L))},null,8,["content","selected-node-id"])],8,Er)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,lr))}}),Ir=H(xr,[["__scopeId","data-v-2bb04ccb"]]),Dr=["value","placeholder"],Cr=e.defineComponent({__name:"PropTextEditor",props:{modelValue:{type:[String,Number,Boolean],default:""},placeholder:{type:String,default:""}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o;function l(a){r("update:modelValue",a.target.value)}return(a,i)=>(e.openBlock(),e.createElementBlock("input",{class:"ipb-prop-editor ipb-prop-editor--text",type:"text",value:String(n.modelValue??""),placeholder:t.placeholder,onInput:l},null,40,Dr))}}),Re=H(Cr,[["__scopeId","data-v-f48156f6"]]),Sr=["value","min","max"],Tr=e.defineComponent({__name:"PropNumberEditor",props:{modelValue:{type:[String,Number],default:void 0},min:{type:Number,default:void 0},max:{type:Number,default:void 0}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>typeof n.modelValue=="number"?String(n.modelValue):typeof n.modelValue=="string"?n.modelValue:"");function a(i){const u=i.target.value.trim();if(u===""){r("update:modelValue",void 0);return}const p=Number(u);r("update:modelValue",Number.isNaN(p)?void 0:p)}return(i,u)=>(e.openBlock(),e.createElementBlock("input",{class:"ipb-prop-editor ipb-prop-editor--number",type:"number",value:l.value,min:t.min,max:t.max,onInput:a},null,40,Sr))}}),Br=H(Tr,[["__scopeId","data-v-11786ace"]]),Pr=["checked"],Vr=e.defineComponent({inheritAttrs:!1,__name:"PropBooleanEditor",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:o}){const n=o;function r(u){n("update:modelValue",u.target.checked)}const{t:l}=ee(),a=e.useAttrs(),i=e.computed(()=>{const{class:u,style:p,...g}=a;return g});return(u,p)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass(["ipb-prop-editor ipb-prop-editor--boolean",e.unref(a).class]),style:e.normalizeStyle(e.unref(a).style)},[e.createElementVNode("input",e.mergeProps(i.value,{type:"checkbox",checked:t.modelValue,onChange:r}),null,16,Pr),e.createElementVNode("span",null,e.toDisplayString(t.modelValue?e.unref(l)("propBoolean.enabled"):e.unref(l)("propBoolean.disabled")),1)],6))}}),Rr=H(Vr,[["__scopeId","data-v-cfba94a9"]]),$r=["value"],Lr={key:0,value:""},Ar=["value"],Mr=e.defineComponent({__name:"PropSelectEditor",props:{modelValue:{type:[String,Number,Boolean],default:void 0},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>{if(!n.options||n.options.length===0)return"";const u=n.options.findIndex(p=>p.value===n.modelValue);return u>=0?String(u):"0"});function a(u){const p=u.target.value;if(p===""||!n.options){r("update:modelValue",void 0);return}const g=n.options[Number(p)];r("update:modelValue",g==null?void 0:g.value)}const{t:i}=ee();return(u,p)=>(e.openBlock(),e.createElementBlock("select",{class:"ipb-prop-editor ipb-prop-editor--select",value:l.value,onChange:a},[!t.options||t.options.length===0?(e.openBlock(),e.createElementBlock("option",Lr,e.toDisplayString(e.unref(i)("propSelect.noOptions")),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options??[],(g,k)=>(e.openBlock(),e.createElementBlock("option",{key:`${g.label}-${k}`,value:String(k)},e.toDisplayString(g.label),9,Ar))),128))],40,$r))}}),Or=H(Mr,[["__scopeId","data-v-8c477cbd"]]),zr=["value"],Ur=["value"],Kr=e.defineComponent({inheritAttrs:!1,__name:"PropColorEditor",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>{const g=n.modelValue.trim();return/^#[0-9a-fA-F]{6}$/.test(g)?g:/^#[0-9a-fA-F]{3}$/.test(g)?`#${g.slice(1).split("").map(v=>`${v}${v}`).join("")}`:"#000000"});function a(g){r("update:modelValue",g.target.value)}function i(g){r("update:modelValue",g.target.value)}const u=e.useAttrs(),p=e.computed(()=>{const{class:g,style:k,...v}=u;return v});return(g,k)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-prop-editor ipb-prop-editor--color",e.unref(u).class]),style:e.normalizeStyle(e.unref(u).style)},[e.createElementVNode("input",e.mergeProps(p.value,{class:"ipb-prop-editor__picker",type:"color",value:l.value,onInput:a}),null,16,zr),e.createElementVNode("input",e.mergeProps(p.value,{class:"ipb-prop-editor__text",type:"text",value:t.modelValue,placeholder:"#000000",onInput:i}),null,16,Ur)],6))}}),Hr=H(Kr,[["__scopeId","data-v-b0f904c5"]]),jr=["aria-label"],Fr=["aria-label","title"],Wr=["aria-label","title"],Gr=["aria-label","title"],Yr=["aria-label","title"],qr=["aria-label","title"],Xr=["aria-label","data-placeholder"],Zr=e.defineComponent({inheritAttrs:!1,__name:"RichTextEditor",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:"Type text..."}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.ref(null),a=e.ref("");function i(d){return typeof d!="string"?"":nt(d)}function u(d){const s=l.value;if(!s)return;const y=i(d);s.innerHTML!==y&&(s.innerHTML=y),a.value=y}function p(){const d=l.value;if(!d)return;const s=i(d.innerHTML);d.innerHTML!==s&&(d.innerHTML=s),s!==a.value&&(a.value=s,r("update:modelValue",s))}function g(){var d;(d=l.value)==null||d.focus()}function k(d,s){typeof document.execCommand=="function"&&document.execCommand(d,!1,s)}function v(d){g(),k(d),p()}function D(){g();const d=window.prompt(E("richText.prompt.enterUrl"),E("richText.prompt.defaultUrl"));if(!d)return;const s=Z(d,"link");s&&(k("createLink",s),p())}e.onMounted(()=>{u(i(n.modelValue))}),e.watch(()=>n.modelValue,d=>{u(i(d))});const{t:E}=ee(),C=e.useAttrs(),f=e.computed(()=>{const{class:d,style:s,...y}=C;return y}),b=e.computed(()=>{const d=C["aria-labelledby"],s=C["aria-label"];if(!(d||s))return E("richText.aria.editor")});return(d,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-richtext-editor",e.unref(C).class]),style:e.normalizeStyle(e.unref(C).style)},[e.createElementVNode("div",{class:"ipb-richtext-editor__toolbar",role:"toolbar","aria-label":e.unref(E)("richText.aria.toolbar")},[e.createElementVNode("button",{type:"button","data-command":"bold","aria-label":e.unref(E)("richText.action.bold"),title:e.unref(E)("richText.action.bold"),onClick:s[0]||(s[0]=y=>v("bold"))},[...s[4]||(s[4]=[e.createElementVNode("strong",null,"B",-1)])],8,Fr),e.createElementVNode("button",{type:"button","data-command":"italic","aria-label":e.unref(E)("richText.action.italic"),title:e.unref(E)("richText.action.italic"),onClick:s[1]||(s[1]=y=>v("italic"))},[...s[5]||(s[5]=[e.createElementVNode("em",null,"I",-1)])],8,Wr),e.createElementVNode("button",{type:"button","data-command":"ul","aria-label":e.unref(E)("richText.action.unorderedList"),title:e.unref(E)("richText.action.unorderedList"),onClick:s[2]||(s[2]=y=>v("insertUnorderedList"))}," UL ",8,Gr),e.createElementVNode("button",{type:"button","data-command":"ol","aria-label":e.unref(E)("richText.action.orderedList"),title:e.unref(E)("richText.action.orderedList"),onClick:s[3]||(s[3]=y=>v("insertOrderedList"))}," OL ",8,Yr),e.createElementVNode("button",{type:"button","data-command":"link","aria-label":e.unref(E)("richText.action.link"),title:e.unref(E)("richText.action.link"),onClick:D},e.toDisplayString(e.unref(E)("richText.action.link")),9,qr)],8,jr),e.createElementVNode("div",e.mergeProps(f.value,{ref_key:"editorRef",ref:l,class:"ipb-richtext-editor__content",contenteditable:"true",role:"textbox","aria-multiline":"true","aria-label":b.value,"data-placeholder":t.placeholder,onInput:p,onBlur:p}),null,16,Xr)],6))}}),Jr=H(Zr,[["__scopeId","data-v-d9cdfb46"]]),Qr={class:"ipb-media-picker__controls"},ea=["value","placeholder"],ta=["disabled"],na={class:"ipb-media-picker__preview"},oa=["src","alt"],ra={key:1,class:"ipb-media-picker__empty"},aa=e.defineComponent({inheritAttrs:!1,__name:"MediaPicker",props:{modelValue:{type:String,default:""}},emits:["update:modelValue","upload"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>n.modelValue.trim()),a=e.computed(()=>Z(l.value,"media")),i=e.computed(()=>l.value.length>0),u=e.computed(()=>a.value.length>0);function p(C){const f=C.target.value;r("update:modelValue",Z(f,"media"))}function g(){r("update:modelValue","")}function k(){r("upload")}const{t:v}=ee(),D=e.useAttrs(),E=e.computed(()=>{const{class:C,style:f,...b}=D;return b});return(C,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-media-picker",e.unref(D).class]),style:e.normalizeStyle(e.unref(D).style)},[e.createElementVNode("div",Qr,[e.createElementVNode("input",e.mergeProps(E.value,{class:"ipb-media-picker__input",type:"url",value:t.modelValue,placeholder:e.unref(v)("mediaPicker.input.placeholder"),onInput:p}),null,16,ea),e.createElementVNode("button",{class:"ipb-media-picker__btn",type:"button",disabled:!i.value,onClick:g},e.toDisplayString(e.unref(v)("mediaPicker.clear")),9,ta),e.createElementVNode("button",{class:"ipb-media-picker__btn",type:"button",onClick:k},e.toDisplayString(e.unref(v)("mediaPicker.upload")),1)]),e.createElementVNode("div",na,[i.value&&u.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"ipb-media-picker__image",src:a.value,alt:e.unref(v)("mediaPicker.preview.alt")},null,8,oa)):(e.openBlock(),e.createElementBlock("p",ra,e.toDisplayString(e.unref(v)("mediaPicker.empty")),1))])],6))}}),Pt=H(aa,[["__scopeId","data-v-743fe73e"]]),la=Re,ia={text:Re,textarea:Re,richtext:Jr,number:Br,boolean:Rr,select:Or,color:Hr,image:Pt,url:Pt,json:Re},sa=["aria-label"],da={class:"ipb-right-drawer__header"},ca={class:"ipb-right-drawer__title",id:"ipb-right-drawer-title"},ua=["aria-label","aria-expanded"],fa={class:"ipb-right-drawer__section"},pa={class:"ipb-right-drawer__section-title"},ma={key:0,class:"ipb-right-drawer__description"},ga={class:"ipb-right-drawer__section"},va={class:"ipb-right-drawer__section-subtitle"},ba=["data-prop-key"],ha=["id"],ya={class:"ipb-right-drawer__actions"},_a=["aria-label"],wa=["disabled","aria-label"],ka={key:1,class:"ipb-right-drawer__empty"},ie="ipb-right-drawer-content",Na=e.defineComponent({__name:"RightDrawer",props:{open:{type:Boolean,default:!1},selectedNodeId:{type:Number,default:null},content:{type:Object,required:!0}},emits:["toggle","update-props","delete","duplicate"],setup(t,{emit:o}){const n=t,r=o,{t:l}=ee(),a=e.ref(null),i=e.ref(null),u=e.ref(!1),p=e.computed(()=>n.selectedNodeId===null?null:A(n.content,n.selectedNodeId)??null),g=e.computed(()=>p.value?de(p.value.name)??null:null);function k(s){return p.value?p.value.props[s.key]??s.defaultValue??"":s.defaultValue??""}function v(s){return ia[s]??la}function D(s){var x,B;const y=k(s);return s.type==="number"?{modelValue:y,min:(x=s.validation)==null?void 0:x.min,max:(B=s.validation)==null?void 0:B.max}:s.type==="select"?{modelValue:y,options:s.options??[]}:s.type==="image"||s.type==="url"?{modelValue:y}:s.type==="text"||s.type==="textarea"||s.type==="richtext"||s.type==="json"?{modelValue:y,placeholder:s.label}:{modelValue:y}}function E(s,y){p.value&&r("update-props",p.value.id,{[s]:y})}function C(s){return`ipb-right-drawer-prop-label-${s}`}function f(){const s=a.value;return s?s.querySelector(`#${ie} input:not([disabled]), #${ie} select:not([disabled]), #${ie} textarea:not([disabled]), #${ie} button:not([disabled]), #${ie} [contenteditable]:not([contenteditable="false"]), #${ie} [tabindex]:not([tabindex="-1"])`):null}function b(){var s;(s=f())==null||s.focus()}function d(){u.value=!n.open,r("toggle")}return e.watch(()=>n.open,(s,y)=>{var x;if(s&&!y&&u.value&&e.nextTick(()=>{b()}),!s&&y){const B=document.activeElement;B instanceof HTMLElement&&((x=a.value)!=null&&x.contains(B))&&e.nextTick(()=>{var T;(T=i.value)==null||T.focus()})}s!==y&&(u.value=!1)}),(s,y)=>(e.openBlock(),e.createElementBlock("aside",{ref_key:"drawerRef",ref:a,class:e.normalizeClass(["ipb-right-drawer",{"ipb-right-drawer--open":t.open}]),role:"complementary","aria-label":e.unref(l)("rightDrawer.aria.componentProperties")},[e.createElementVNode("div",da,[e.createElementVNode("span",ca,e.toDisplayString(e.unref(l)("rightDrawer.title")),1),e.createElementVNode("button",{ref_key:"drawerToggleRef",ref:i,type:"button",class:"ipb-right-drawer__toggle","aria-label":e.unref(l)("rightDrawer.toggle.ariaLabel"),"aria-expanded":t.open?"true":"false","aria-controls":ie,onClick:d},e.toDisplayString(t.open?"▶":"◀"),9,ua)]),t.open&&p.value&&g.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:ie,class:"ipb-right-drawer__content",role:"region","aria-labelledby":"ipb-right-drawer-title"},[e.createElementVNode("div",fa,[e.createElementVNode("h3",pa,e.toDisplayString(g.value.label),1),g.value.description?(e.openBlock(),e.createElementBlock("p",ma,e.toDisplayString(g.value.description),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",ga,[e.createElementVNode("h4",va,e.toDisplayString(e.unref(l)("rightDrawer.section.properties")),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value.editableProps,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"ipb-right-drawer__prop","data-prop-key":x.key},[e.createElementVNode("label",{id:C(x.key),class:"ipb-right-drawer__prop-label"},e.toDisplayString(x.label),9,ha),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(v(x.type)),e.mergeProps({class:"ipb-right-drawer__prop-editor"},{ref_for:!0},D(x),{"aria-labelledby":C(x.key),"onUpdate:modelValue":B=>E(x.key,B)}),null,16,["aria-labelledby","onUpdate:modelValue"]))],8,ba))),128))]),e.createElementVNode("div",ya,[e.createElementVNode("button",{type:"button",class:"ipb-right-drawer__btn","aria-label":e.unref(l)("rightDrawer.actions.duplicate.ariaLabel"),onClick:y[0]||(y[0]=x=>r("duplicate",p.value.id))},e.toDisplayString(e.unref(l)("rightDrawer.actions.duplicate")),9,_a),e.createElementVNode("button",{type:"button",class:"ipb-right-drawer__btn ipb-right-drawer__btn--danger",disabled:p.value.readonly,"aria-label":e.unref(l)("rightDrawer.actions.delete.ariaLabel"),onClick:y[1]||(y[1]=x=>r("delete",p.value.id))},e.toDisplayString(e.unref(l)("rightDrawer.actions.delete")),9,wa)])])):t.open?(e.openBlock(),e.createElementBlock("div",ka,[e.createElementVNode("p",null,e.toDisplayString(e.unref(l)("rightDrawer.empty")),1)])):e.createCommentVNode("",!0)],10,sa))}}),Ea=H(Na,[["__scopeId","data-v-a25cd890"]]),hn="@improba/page-builder/iframe-bridge",yn=1;function ct(t,o,n){return{namespace:hn,version:yn,sessionToken:n,channel:t,payload:o}}function xa(){var t,o;if(typeof((t=globalThis.crypto)==null?void 0:t.randomUUID)=="function")return globalThis.crypto.randomUUID();if(typeof((o=globalThis.crypto)==null?void 0:o.getRandomValues)=="function"){const n=new Uint8Array(16);return globalThis.crypto.getRandomValues(n),Array.from(n,r=>r.toString(16).padStart(2,"0")).join("")}return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function _n(t){return ct("lifecycle",{state:"ready"},t)}function wn(t,o){return ct("pointer",t,o)}function kn(t,o){return ct("keydown",t,o)}function Ae(t){return!!t&&typeof t=="object"}function Ia(t){if(!Ae(t))return null;const o=t.interaction,n=t.nodeId;if(o!=="hover"&&o!=="select"&&o!=="context"||n!==null&&typeof n!="number"||typeof n=="number"&&!Number.isInteger(n))return null;const r=n;if(o==="context"){const l=t.clientX,a=t.clientY;return typeof l!="number"||typeof a!="number"?null:{interaction:o,nodeId:r,clientX:l,clientY:a}}return{interaction:o,nodeId:r}}function Da(t){return!Ae(t)||typeof t.key!="string"||typeof t.code!="string"||typeof t.ctrlKey!="boolean"||typeof t.metaKey!="boolean"||typeof t.shiftKey!="boolean"||typeof t.altKey!="boolean"||typeof t.defaultPrevented!="boolean"||typeof t.isEditable!="boolean"?null:{key:t.key,code:t.code,ctrlKey:t.ctrlKey,metaKey:t.metaKey,shiftKey:t.shiftKey,altKey:t.altKey,defaultPrevented:t.defaultPrevented,isEditable:t.isEditable}}function Ca(t,o={}){if(!Ae(t)||t.namespace!==hn||t.version!==yn||t.channel!=="keydown"&&t.channel!=="pointer"&&t.channel!=="lifecycle")return null;const n=t.sessionToken,r=typeof n=="string"&&n.length>0;if(o.expectedSessionToken){if(!r||n!==o.expectedSessionToken)return null}else if(!r&&!o.allowLegacyNoSessionToken)return null;const l=r?n:"";if(t.channel==="lifecycle")return!Ae(t.payload)||t.payload.state!=="ready"?null:_n(l);if(t.channel==="pointer"){const i=Ia(t.payload);return i?wn(i,l):null}const a=Da(t.payload);return a?kn(a,l):null}function Sa(t){const o=n=>{var l,a,i;if(n.source!==t.expectedSource||n.origin!==t.expectedOrigin)return;const r=Ca(n.data,{expectedSessionToken:t.expectedSessionToken,allowLegacyNoSessionToken:t.allowLegacyNoSessionToken??!t.expectedSessionToken});if(r){if(r.channel==="lifecycle"){(l=t.onReady)==null||l.call(t);return}if(r.channel==="pointer"){(a=t.onPointer)==null||a.call(t,r.payload);return}(i=t.onKeydown)==null||i.call(t,r.payload)}};return t.hostWindow.addEventListener("message",o),{dispose:()=>{t.hostWindow.removeEventListener("message",o)}}}function Ta(t){return{postReady:()=>{t.targetWindow.postMessage(_n(t.sessionToken),t.targetOrigin)},postPointer:o=>{t.targetWindow.postMessage(wn(o,t.sessionToken),t.targetOrigin)},postKeydown:o=>{t.targetWindow.postMessage(kn(o,t.sessionToken),t.targetOrigin)}}}function Ba(t){if(t.defaultPrevented||t.isEditable)return!1;const o=t.ctrlKey||t.metaKey,n=t.key.toLowerCase(),r=t.code.toLowerCase();return o&&(n==="z"||n==="y"||n==="s")?!0:(n==="delete"||n==="backspace"||r==="delete"||r==="backspace")&&!t.ctrlKey&&!t.metaKey&&!t.altKey}function Pa(t){const o=i=>{t.bridge.postPointer({interaction:"select",nodeId:t.resolveNodeId(i.target)})},n=i=>{t.bridge.postPointer({interaction:"hover",nodeId:t.resolveNodeId(i.target)})},r=()=>{t.bridge.postPointer({interaction:"hover",nodeId:null})},l=i=>{i.preventDefault(),t.bridge.postPointer({interaction:"context",nodeId:t.resolveNodeId(i.target),clientX:i.clientX,clientY:i.clientY})},a=i=>{const u={key:i.key,code:i.code,ctrlKey:i.ctrlKey,metaKey:i.metaKey,shiftKey:i.shiftKey,altKey:i.altKey,defaultPrevented:i.defaultPrevented,isEditable:t.isEditableTarget(i.target)||t.isEditableTarget(t.frameDocument.activeElement)};Ba(u)&&i.preventDefault(),t.bridge.postKeydown(u)};return t.contentRoot.addEventListener("click",o),t.contentRoot.addEventListener("mousemove",n),t.contentRoot.addEventListener("mouseleave",r),t.contentRoot.addEventListener("contextmenu",l),t.frameDocument.addEventListener("keydown",a),t.bridge.postReady(),()=>{t.contentRoot.removeEventListener("click",o),t.contentRoot.removeEventListener("mousemove",n),t.contentRoot.removeEventListener("mouseleave",r),t.contentRoot.removeEventListener("contextmenu",l),t.frameDocument.removeEventListener("keydown",a)}}const Va=["aria-label"],Ra=["disabled","data-action","aria-disabled","onClick"],$a=e.defineComponent({__name:"NodeContextMenu",props:{open:{type:Boolean,default:!1},x:{type:Number,default:0},y:{type:Number,default:0},canDelete:{type:Boolean,default:!0},canMoveUp:{type:Boolean,default:!1},canMoveDown:{type:Boolean,default:!1}},emits:["action","close"],setup(t,{emit:o}){const n=t,r=o,{t:l}=ee(),a=e.computed(()=>({top:`${n.y}px`,left:`${n.x}px`})),i=e.computed(()=>[{key:"duplicate",label:l("contextMenu.duplicate")},{key:"move-up",label:l("contextMenu.moveUp"),disabled:!n.canMoveUp},{key:"move-down",label:l("contextMenu.moveDown"),disabled:!n.canMoveDown},{key:"delete",label:l("contextMenu.delete"),danger:!0,disabled:!n.canDelete}]);function u(f,b){b||r("action",f)}const p=e.ref(null),g=e.ref(null);function k(){return p.value?Array.from(p.value.querySelectorAll(".ipb-node-context-menu__item")).filter(f=>!f.disabled):[]}function v(){const[f]=k();f==null||f.focus()}function D(){g.value instanceof HTMLElement&&g.value.focus(),g.value=null}function E(f){var y,x,B,T;if(f.key==="Escape"){f.preventDefault(),r("close");return}if(f.key==="Tab"){f.preventDefault(),r("close");return}const b=k();if(b.length===0)return;const d=document.activeElement instanceof HTMLButtonElement?document.activeElement:null,s=d?b.indexOf(d):-1;if(f.key==="ArrowDown"){f.preventDefault();const I=s<0?0:(s+1)%b.length;(y=b[I])==null||y.focus();return}if(f.key==="ArrowUp"){f.preventDefault();const I=s<0?b.length-1:(s-1+b.length)%b.length;(x=b[I])==null||x.focus();return}if(f.key==="Home"){f.preventDefault(),(B=b[0])==null||B.focus();return}f.key==="End"&&(f.preventDefault(),(T=b[b.length-1])==null||T.focus())}function C(f){var d;const b=f.relatedTarget;if(!(b instanceof Node)){r("close");return}(d=p.value)!=null&&d.contains(b)||r("close")}return e.watch(()=>n.open,f=>{if(f){g.value=document.activeElement instanceof HTMLElement?document.activeElement:null,e.nextTick(()=>{v()});return}D()},{immediate:!0}),e.onBeforeUnmount(()=>{D()}),(f,b)=>t.open?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuRootRef",ref:p,class:"ipb-node-context-menu",style:e.normalizeStyle(a.value),role:"menu","aria-label":e.unref(l)("contextMenu.ariaLabel"),"aria-orientation":"vertical",tabindex:"-1",onClick:b[0]||(b[0]=e.withModifiers(()=>{},["stop"])),onContextmenu:b[1]||(b[1]=e.withModifiers(()=>{},["prevent"])),onKeydown:E,onFocusout:C},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock("button",{key:d.key,type:"button",class:e.normalizeClass(["ipb-node-context-menu__item",{"ipb-node-context-menu__item--danger":d.danger}]),disabled:d.disabled,"data-action":d.key,role:"menuitem","aria-disabled":d.disabled?"true":void 0,onClick:s=>u(d.key,d.disabled)},e.toDisplayString(d.label),11,Ra))),128))],44,Va)):e.createCommentVNode("",!0)}}),La=H($a,[["__scopeId","data-v-7a59845f"]]),Aa=["title"],qe="ipb-iframe-canvas-content",Vt="ipb-iframe-canvas-base-style",Ma=240,Oa=320,za=e.defineComponent({__name:"IframeCanvas",props:{content:{type:Object,required:!0},variables:{type:Object,default:()=>({})},selectedNodeId:{type:Number,default:null},hoveredNodeId:{type:Number,default:null},viewport:{type:String,default:"desktop"},viewportWidth:{type:Number,default:null},viewportHeight:{type:Number,default:null}},emits:["select","hover","context-action","iframe-keydown","viewport-size-change"],setup(t,{emit:o}){const n=t,r=o,l=e.inject(Oe,null),a=e.inject(ze,null),{t:i}=ee(),u=e.ref(null),p=e.ref(null),g=e.ref(null),k=e.ref(!1),v=e.ref(null),D=e.ref(null),E=e.ref(null),C=e.ref(null),f=e.ref(null),b=e.ref(null),d=e.ref({width:0,height:0}),s=e.ref(!1),y=e.ref(null),x=e.ref(null),B=e.ref(null),T=e.ref(!1),I=e.ref(null),L=e.ref(0),Y=e.ref(0),U=e.ref(!1),F=e.ref(!1),oe=e.ref(!1),te=e.computed(()=>{if(n.viewport==="custom")return{width:Math.max(Ma,Math.round(n.viewportWidth??ke.desktop.width)),height:Math.max(Oa,Math.round(n.viewportHeight??ke.desktop.height))};const c=ke[n.viewport];return{width:c.width,height:c.height}}),Ne=e.computed(()=>({width:`min(100%, ${te.value.width}px)`,height:`${te.value.height}px`})),be=e.computed(()=>y.value?{top:`${y.value.top}px`,left:`${y.value.left}px`,width:`${y.value.width}px`,height:`${y.value.height}px`}:null),he=e.computed(()=>x.value&&n.hoveredNodeId!==n.selectedNodeId?{top:`${x.value.top}px`,left:`${x.value.left}px`,width:`${x.value.width}px`,height:`${x.value.height}px`}:null),h=e.computed(()=>B.value?{top:`${B.value.top}px`,left:`${B.value.left}px`,width:`${B.value.width}px`,height:`${B.value.height}px`}:null);function R(c){return!c||typeof c!="object"?!1:c.nodeType===1}function m(c){if(c===null)return null;const _=Number(c);return Number.isInteger(_)?_:null}function N(c){if(!R(c))return null;const _=c.closest("[data-ipb-node-id]");return m((_==null?void 0:_.getAttribute("data-ipb-node-id"))??null)}function w(c){return c===null||!v.value?null:v.value.querySelector(`[data-ipb-node-id="${c}"]`)}function V(c){var z,W;if(!c||!v.value)return null;const _=c.getBoundingClientRect(),S=v.value.getBoundingClientRect(),P=((z=E.value)==null?void 0:z.scrollY)??0,K=((W=E.value)==null?void 0:W.scrollX)??0;return{top:_.top-S.top+P,left:_.left-S.left+K,width:_.width,height:_.height}}function M(c,_){return Math.max(0,Math.min(c,_))}function O(c,_){return c.id===_?!0:c.children.some(S=>O(S,_))}function J(c){var _;return c.sourceComponentName?c.sourceComponentName:c.sourceNodeId===null?null:((_=A(n.content,c.sourceNodeId))==null?void 0:_.name)??null}function q(c,_){const S=J(_);if(!S)return null;const P=c===null?null:A(n.content,c);if(P&&!P.readonly){const z=se(P,"default",S);if(z)return{targetId:P.id,index:P.children.length,slot:z}}if(c!==null){const z=G(n.content,c);if(z&&!z.parent.readonly){const W=z.parent.children[z.index],ae=se(z.parent,(W==null?void 0:W.slot)??"default",S);if(ae)return{targetId:z.parent.id,index:z.index+1,slot:ae}}}if(n.content.readonly)return null;const K=se(n.content,"default",S);return K?{targetId:n.content.id,index:n.content.children.length,slot:K}:null}function re(c,_,S,P){const K=A(n.content,c),z=G(n.content,c),W=A(n.content,_);if(!K||!z||K.readonly)return{valid:!1};if(!W||W.readonly)return{valid:!1};if(c===_)return{valid:!1};if(O(K,_))return{valid:!1};const ae=se(W,S,K.name);if(!ae)return{valid:!1};const xt=W.children.length;return z.parent.id===_&&z.index<P?{valid:!0,index:M(P-1,xt),slot:ae}:{valid:!0,index:M(P,xt),slot:ae}}function ce(c){if(c.getElementById(Vt))return;const _=c.createElement("style");_.id=Vt,_.textContent=`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./index-D79WbFRY.cjs"),e=require("vue"),F=new Map;function Qt(){const t=[...F.keys()];return t.length>0?t.join(", "):"(none)"}function we(t){return t.trim()}function Oe(t,o){return u.createPageBuilderError("DUPLICATE_COMPONENT",o,{details:{componentName:t}})}function Ue(t,o){const n=we(t.name),r=n===t.name?t:{...t,name:n};if(!n)throw u.createPageBuilderError("INVALID_PAGE_DATA",`[PageBuilder] Cannot ${o} a component without a name.`);if(!r.component)throw u.createPageBuilderError("INVALID_PAGE_DATA",`[PageBuilder] Component "${n}" is missing a Vue component instance.`);return r}function en(t){const o=Ue(t,"register"),n=o.name;if(F.has(n))throw Oe(n,`[PageBuilder] Component "${n}" is already registered. Use replaceComponent() to override.`);F.set(n,o)}function vt(t){const o=t.map(r=>Ue(r,"register")),n=new Set;for(const r of o){if(n.has(r.name))throw Oe(r.name,`[PageBuilder] Component "${r.name}" appears multiple times in the registration batch.`);if(n.add(r.name),F.has(r.name))throw Oe(r.name,`[PageBuilder] Component "${r.name}" is already registered. Use replaceComponent() to override.`)}for(const r of o)F.set(r.name,r)}function tn(t){const o=Ue(t,"replace"),n=o.name;F.set(n,o)}function nn(t){return F.delete(we(t))}function le(t){return F.get(we(t))}function gt(t){const o=we(t),n=F.get(o);if(!n)throw u.createPageBuilderError("MISSING_COMPONENT",`[PageBuilder] Component "${o}" is not registered. Available: ${Qt()}`,{details:{componentName:o,availableComponents:[...F.keys()]}});return n.component}function on(){return[...F.values()]}function bt(){const t=new Map;for(const o of F.values()){if(o.hidden)continue;const n=t.get(o.category)??[];n.push(o),t.set(o.category,n)}return t}function rn(t){return F.has(we(t))}function an(){F.clear()}const ln={name:"PbColumn",label:"Column",description:"Vertical flex container for stacking components.",category:"layout",icon:"⬜",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"gap",label:"Gap",type:"text",defaultValue:"16px"},{key:"padding",label:"Padding",type:"text",defaultValue:"0"},{key:"align",label:"Align Items",type:"select",defaultValue:"stretch",options:[{label:"Stretch",value:"stretch"},{label:"Start",value:"flex-start"},{label:"Center",value:"center"},{label:"End",value:"flex-end"}]}],defaultProps:{gap:"16px",padding:"0",align:"stretch"}},ht=e.defineComponent({__name:"PbColumn",props:{gap:{type:String,default:"16px"},padding:{type:String,default:"0"},align:{type:String,default:"stretch"}},setup(t){const o=t,n=e.computed(()=>({display:"flex",flexDirection:"column",gap:o.gap,padding:o.padding,alignItems:o.align,width:"100%"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}}),dn={name:"PbRow",label:"Row",description:"Horizontal flex container for side-by-side components.",category:"layout",icon:"⬛",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"gap",label:"Gap",type:"text",defaultValue:"16px"},{key:"wrap",label:"Wrap",type:"boolean",defaultValue:!0},{key:"justify",label:"Justify",type:"select",defaultValue:"flex-start",options:[{label:"Start",value:"flex-start"},{label:"Center",value:"center"},{label:"End",value:"flex-end"},{label:"Space Between",value:"space-between"},{label:"Space Around",value:"space-around"}]}],defaultProps:{gap:"16px",wrap:!0,justify:"flex-start"}},yt=e.defineComponent({__name:"PbRow",props:{gap:{type:String,default:"16px"},wrap:{type:Boolean,default:!0},justify:{type:String,default:"flex-start"}},setup(t){const o=t,n=e.computed(()=>({display:"flex",flexDirection:"row",gap:o.gap,flexWrap:o.wrap?"wrap":"nowrap",justifyContent:o.justify,width:"100%"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}}),sn={name:"PbText",label:"Text",description:"A text block with HTML support.",category:"content",icon:"T",component:{},slots:[],editableProps:[{key:"content",label:"Content",type:"richtext",defaultValue:"<p>Enter text here</p>"},{key:"tag",label:"HTML Tag",type:"select",defaultValue:"div",options:[{label:"div",value:"div"},{label:"p",value:"p"},{label:"span",value:"span"},{label:"h1",value:"h1"},{label:"h2",value:"h2"},{label:"h3",value:"h3"}]}],defaultProps:{content:"<p>Enter text here</p>",tag:"div"}},_t=e.defineComponent({__name:"PbText",props:{content:{type:String,default:""},tag:{type:String,default:"div"}},setup(t){const o=t,n=e.computed(()=>u.normalizeSafeHtmlTag(o.tag)),r=e.computed(()=>u.sanitizeRichTextHtml(o.content));return(l,a)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.value),{innerHTML:r.value},null,8,["innerHTML"]))}}),cn=["src","alt"],un={name:"PbImage",label:"Image",description:"Displays an image with optional alt text.",category:"media",icon:"🖼",component:{},slots:[],editableProps:[{key:"src",label:"Image URL",type:"image",required:!0},{key:"alt",label:"Alt Text",type:"text",defaultValue:""},{key:"width",label:"Width",type:"text",defaultValue:"100%"},{key:"objectFit",label:"Object Fit",type:"select",defaultValue:"cover",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"None",value:"none"}]}],defaultProps:{src:"",alt:"",width:"100%",objectFit:"cover"}},wt=e.defineComponent({__name:"PbImage",props:{src:{type:String,required:!0},alt:{type:String,default:""},width:{type:String,default:"100%"},objectFit:{type:String,default:"cover"}},setup(t){const o=t,n=e.computed(()=>({width:o.width,objectFit:o.objectFit,display:"block",maxWidth:"100%"})),r=e.computed(()=>u.sanitizeUrlByKind(o.src,"media"));return(l,a)=>r.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:t.alt,style:e.normalizeStyle(n.value),loading:"lazy"},null,12,cn)):e.createCommentVNode("",!0)}}),pn=["src","poster","controls","autoplay","muted","loop"],fn={name:"PbVideo",label:"Vidéo",description:"Affiche une vidéo avec URL, poster optionnel et options de lecture.",category:"media",icon:"🎬",component:{},slots:[],editableProps:[{key:"src",label:"URL de la vidéo",type:"url",required:!0},{key:"poster",label:"Image de couverture (poster)",type:"image"},{key:"width",label:"Largeur",type:"text",defaultValue:"100%"},{key:"controls",label:"Afficher les contrôles",type:"boolean",defaultValue:!0},{key:"autoplay",label:"Lecture automatique",type:"boolean",defaultValue:!1},{key:"muted",label:"Muet",type:"boolean",defaultValue:!1},{key:"loop",label:"Boucle",type:"boolean",defaultValue:!1}],defaultProps:{src:"",poster:"",width:"100%",controls:!0,autoplay:!1,muted:!1,loop:!1}},kt=e.defineComponent({__name:"PbVideo",props:{src:{},poster:{default:""},width:{default:"100%"},controls:{type:Boolean,default:!0},autoplay:{type:Boolean,default:!1},muted:{type:Boolean,default:!1},loop:{type:Boolean,default:!1}},setup(t){const o=t,n=e.computed(()=>({width:o.width,maxWidth:"100%",display:"block"})),r=e.computed(()=>u.sanitizeUrlByKind(o.src,"media")),l=e.computed(()=>{var a;return(a=o.poster)!=null&&a.trim()?u.sanitizeUrlByKind(o.poster,"media"):void 0});return(a,d)=>r.value?(e.openBlock(),e.createElementBlock("video",{key:0,src:r.value,poster:l.value,controls:t.controls,autoplay:t.autoplay,muted:t.muted,loop:t.loop,style:e.normalizeStyle(n.value),playsinline:""},null,12,pn)):e.createCommentVNode("",!0)}}),mn={name:"PbSection",label:"Section",description:"A full-width section with optional background.",category:"layout",icon:"▬",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"backgroundColor",label:"Background Color",type:"color",defaultValue:"transparent"},{key:"backgroundImage",label:"Background Image",type:"image"},{key:"padding",label:"Padding",type:"text",defaultValue:"48px 24px"},{key:"maxWidth",label:"Max Content Width",type:"text",defaultValue:"1200px"}],defaultProps:{backgroundColor:"transparent",padding:"48px 24px",maxWidth:"1200px"}},Nt=e.defineComponent({__name:"PbSection",props:{backgroundColor:{type:String,default:"transparent"},backgroundImage:{type:String,default:""},padding:{type:String,default:"48px 24px"},maxWidth:{type:String,default:"1200px"}},setup(t){const o=t,n=e.computed(()=>u.sanitizeUrlByKind(o.backgroundImage,"background")),r=e.computed(()=>n.value?`url("${n.value.replace(/["\\]/g,"\\$&")}")`:void 0),l=e.computed(()=>({width:"100%",backgroundColor:o.backgroundColor,backgroundImage:r.value,backgroundSize:"cover",backgroundPosition:"center",padding:o.padding})),a=e.computed(()=>({maxWidth:o.maxWidth,margin:"0 auto",width:"100%"}));return(d,v)=>(e.openBlock(),e.createElementBlock("section",{style:e.normalizeStyle(l.value)},[e.createElementVNode("div",{style:e.normalizeStyle(a.value)},[e.renderSlot(d.$slots,"default")],4)],4))}}),vn={name:"PbContainer",label:"Container",description:"A centered container with max width.",category:"layout",icon:"☐",component:{},slots:[{name:"default",label:"Content"}],editableProps:[{key:"maxWidth",label:"Max Width",type:"text",defaultValue:"100%"},{key:"padding",label:"Padding",type:"text",defaultValue:"0 24px"}],defaultProps:{maxWidth:"100%",padding:"0 24px"}},xt=e.defineComponent({__name:"PbContainer",props:{maxWidth:{type:String,default:"100%"},padding:{type:String,default:"0 24px"}},setup(t){const o=t,n=e.computed(()=>({maxWidth:o.maxWidth,margin:"0 auto",padding:o.padding,width:"100%",boxSizing:"border-box"}));return(r,l)=>(e.openBlock(),e.createElementBlock("div",{style:e.normalizeStyle(n.value)},[e.renderSlot(r.$slots,"default")],4))}});function ce(t,o){return{...t,component:o}}const Et=[ce(ln,ht),ce(dn,yt),ce(sn,_t),ce(un,wt),ce(fn,kt),ce(mn,Nt),ce(vn,xt)],Ie="en",Ke={en:{"toolbar.undo.title":"Undo (Ctrl/Cmd+Z)","toolbar.undo.ariaLabel":"Undo","toolbar.redo.title":"Redo (Ctrl/Cmd+Y or Shift+Ctrl/Cmd+Z)","toolbar.redo.ariaLabel":"Redo","toolbar.save":"Save","toolbar.save.title":"Save (Ctrl/Cmd+S)","toolbar.save.ariaLabel":"Save page","toolbar.aria.toolbar":"Editor toolbar","toolbar.aria.historyControls":"History controls","toolbar.aria.viewportControls":"Viewport controls","toolbar.aria.saveControls":"Save controls","toolbar.aria.unsavedChanges":"Unsaved changes","toolbar.viewport.desktop":"Desktop","toolbar.viewport.tablet":"Tablet","toolbar.viewport.mobile":"Mobile","toolbar.viewport.custom":"Custom","toolbar.viewport.switchAriaLabel":"Switch viewport to {viewport}","toolbar.viewport.width.short":"W","toolbar.viewport.height.short":"H","toolbar.viewport.width.ariaLabel":"Custom viewport width","toolbar.viewport.height.ariaLabel":"Custom viewport height","leftDrawer.title":"Components","leftDrawer.aria.componentPalette":"Component palette","leftDrawer.toggle.ariaLabel":"Toggle component drawer","leftDrawer.section.components":"Components","leftDrawer.search.placeholder":"Search components...","leftDrawer.search.ariaLabel":"Search components","leftDrawer.category.ariaLabel":"{category} components","leftDrawer.component.dragAriaLabel":"Add or drag {label}","leftDrawer.empty":"No matching components","leftDrawer.section.tree":"Tree","leftDrawer.tree.toggle.ariaLabel":"Toggle node tree","rightDrawer.title":"Properties","rightDrawer.aria.componentProperties":"Component properties","rightDrawer.toggle.ariaLabel":"Toggle properties drawer","rightDrawer.section.properties":"Properties","rightDrawer.actions.duplicate":"Duplicate","rightDrawer.actions.duplicate.ariaLabel":"Duplicate selected component","rightDrawer.actions.delete":"Delete","rightDrawer.actions.delete.ariaLabel":"Delete selected component","rightDrawer.empty":"Select a component to edit its properties.","treePanel.ariaLabel":"Node tree","treePanel.readonly":"readonly","contextMenu.ariaLabel":"Node context menu","contextMenu.duplicate":"Duplicate","contextMenu.moveUp":"Move up","contextMenu.moveDown":"Move down","contextMenu.delete":"Delete","iframeCanvas.title":"Editor canvas","propBoolean.enabled":"Enabled","propBoolean.disabled":"Disabled","propSelect.noOptions":"No options","mediaPicker.input.placeholder":"https://example.com/image.jpg","mediaPicker.clear":"Clear","mediaPicker.upload":"Upload","mediaPicker.preview.alt":"Media preview","mediaPicker.empty":"Paste an image URL to preview.","richText.action.link":"Link","richText.action.bold":"Bold","richText.action.italic":"Italic","richText.action.unorderedList":"Bulleted list","richText.action.orderedList":"Numbered list","richText.aria.toolbar":"Rich text formatting toolbar","richText.aria.editor":"Rich text editor","richText.prompt.enterUrl":"Enter URL","richText.prompt.defaultUrl":"https://","pageBuilder.warning.invalidEditMode":"Invalid `pageData` for edit mode. Rendering in read mode."}};function gn(t,o){return o?t.replace(/\{(\w+)\}/g,(n,r)=>{const l=o[r];return l===void 0?n:String(l)}):t}function It(...t){const o={};for(const n of t)if(n)for(const[r,l]of Object.entries(n))o[r]={...o[r]??{},...l};return o}function Dt(t){const o=t.fallbackLocale??"en",n=t.dictionary[t.locale]??{},r=t.dictionary[o]??{},l=n[t.key]??r[t.key]??t.key;return gn(l,t.params)}function He(t,o,n="en"){const r=typeof t=="function"?t:()=>t,l=typeof o=="function"?o:()=>o;return(a,d)=>Dt({locale:r(),dictionary:l(),key:a,params:d,fallbackLocale:n})}const Bt=Symbol("pageBuilderI18nOptions"),Ct=Symbol("pageBuilderI18n"),bn={locale:e.computed(()=>Ie),t:He(Ie,Ke)};function X(){return e.inject(Ct,bn)}const hn={key:1,class:"ipb-error-boundary",role:"alert"},yn={class:"ipb-error-boundary__message"},_n={key:0,class:"ipb-error-boundary__details"},wn=e.defineComponent({__name:"ErrorBoundary",props:{fallbackMessage:{default:"Something went wrong while rendering this section."},showDetailsInDev:{type:Boolean,default:!1},diagnosticContext:{default:"ErrorBoundary"}},setup(t){const o=t,n=e.ref(!1),r=e.ref(null),l=e.ref(""),a=e.computed(()=>!1),d=e.computed(()=>r.value?r.value instanceof Error?r.value.message:String(r.value):""),v=e.computed(()=>[d.value,l.value].filter(m=>!!m).join(`
|
|
2
|
+
`));return e.onErrorCaptured((m,_,x)=>(n.value=!0,r.value=m,l.value=x,u.reportDevDiagnostic(o.diagnosticContext,u.createPageBuilderError("RENDER_FAILURE",`[PageBuilder] ${o.diagnosticContext} captured a render error: ${u.toErrorMessage(m)}`,{cause:m,details:{info:x}})),!1)),(m,_)=>n.value?(e.openBlock(),e.createElementBlock("div",hn,[e.createElementVNode("p",yn,e.toDisplayString(t.fallbackMessage),1),a.value&&v.value?(e.openBlock(),e.createElementBlock("pre",_n," "+e.toDisplayString(v.value)+`
|
|
3
|
+
`,1)):e.createCommentVNode("",!0)])):e.renderSlot(m.$slots,"default",{key:0},void 0,!0)}}),K=(t,o)=>{const n=t.__vccOpts||t;for(const[r,l]of o)n[r]=l;return n},St=K(wn,[["__scopeId","data-v-5b429c0c"]]),kn={key:0,class:"ipb-node-renderer__invalid",role:"alert"},Nn=e.defineComponent({__name:"NodeRenderer",props:{node:{type:Object,required:!0},variables:{type:Object,default:()=>({})},markNodes:{type:Boolean,default:!1}},setup(t){const o=t,n=new Set;function r(p,b,c){n.has(p)||(n.add(p),u.reportDevDiagnostic("NodeRenderer",u.createPageBuilderError("RENDER_FAILURE",b,{details:c})))}function l(p){if(typeof p!="object"||p===null||Array.isArray(p))return!1;const b=p;return typeof b.id!="number"||!Number.isFinite(b.id)||typeof b.name!="string"||b.name.trim().length===0||!(b.slot===null||typeof b.slot=="string")||typeof b.props!="object"||b.props===null||Array.isArray(b.props)?!1:Array.isArray(b.children)}function a(p){return!p||typeof p!="object"||Array.isArray(p)?{}:Object.fromEntries(Object.entries(p).filter(b=>typeof b[1]=="string"))}const d=e.computed(()=>l(o.node)?o.node:(r("invalid-node","[PageBuilder] NodeRenderer received an invalid node payload.",{node:o.node}),null)),v=e.computed(()=>a(o.variables)),m=e.defineComponent({name:"NodeRenderCrash",props:{error:{type:null,required:!0}},setup(p){return()=>{throw p.error instanceof Error?p.error:new Error(String(p.error))}}}),_=e.computed(()=>{if(!d.value)return{component:m,error:u.createPageBuilderError("INVALID_NODE","[PageBuilder] Cannot render node because its payload is invalid.")};try{return{component:gt(d.value.name),error:null}}catch(p){return r(`missing-component:${d.value.name}`,`[PageBuilder] Component "${d.value.name}" could not be resolved.`,{nodeId:d.value.id}),{component:m,error:p}}}),x=e.computed(()=>_.value.component),g=e.computed(()=>{if(_.value.error!==null)return{error:_.value.error};if(!d.value)return{error:u.createPageBuilderError("INVALID_NODE","[PageBuilder] Cannot render props for an invalid node payload.")};try{return u.interpolateProps(d.value.props,v.value)}catch(p){return r(`prop-interpolation:${d.value.id}`,`[PageBuilder] Failed to interpolate props for node "${d.value.name}".`,{nodeId:d.value.id}),{error:p}}}),B=e.computed(()=>!o.markNodes||!d.value?{}:{"data-ipb-node-id":String(d.value.id),"data-ipb-component":d.value.name,...d.value.readonly?{"data-ipb-readonly":"true"}:{}}),E=e.computed(()=>({...g.value,...B.value})),C=e.computed(()=>{const p={};if(!d.value)return p;for(const b of d.value.children){if(!l(b)){r(`invalid-child:${d.value.id}`,`[PageBuilder] Ignoring invalid child node while rendering "${d.value.name}".`,{parentNodeId:d.value.id});continue}const c=b.slot??"default";p[c]||(p[c]=[]),p[c].push(b)}return p});return(p,b)=>{const c=e.resolveComponent("NodeRenderer",!0);return d.value?(e.openBlock(),e.createBlock(St,{key:1,"fallback-message":"This block could not be rendered.","show-details-in-dev":!0,"diagnostic-context":"NodeRenderer"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x.value),e.normalizeProps(e.guardReactiveProps(E.value)),e.createSlots({_:2},[e.renderList(C.value,(i,w)=>({name:w,fn:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i,I=>(e.openBlock(),e.createBlock(c,{key:I.id,node:I,variables:v.value,"mark-nodes":t.markNodes},null,8,["node","variables","mark-nodes"]))),128))])}))]),1040))]),_:1})):(e.openBlock(),e.createElementBlock("div",kn," This block is invalid and could not be rendered. "))}}}),We=K(Nn,[["__scopeId","data-v-f60d41e1"]]),xn={class:"ipb-page-reader"},En={key:1,class:"ipb-page-reader__invalid",role:"alert"},In=e.defineComponent({__name:"PageReader",props:{pageData:{type:Object,required:!0}},setup(t){const o=t,n=e.computed(()=>u.validatePageData(o.pageData)),r=e.computed(()=>u.validateNode(o.pageData.content,"content")),l=e.computed(()=>u.validateNode(o.pageData.layout,"layout")),a=new Set;function d(x,g,B){a.has(x)||(a.add(x),u.reportDevDiagnostic("PageReader",u.createPageBuilderError("INVALID_PAGE_DATA",g,{details:B})))}e.watch(n,x=>{x.isValid||d("invalid-page-data","[PageReader] Invalid pageData payload detected. Rendering continues with degraded behavior.",{errors:x.errors})},{immediate:!0});function v(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}const m=e.computed(()=>{const x=o.pageData.variables;return!x||typeof x!="object"||Array.isArray(x)?(d("invalid-variables-shape","[PageReader] Invalid variables payload. Falling back to an empty variable map."),{}):(Object.values(x).some(B=>typeof B!="string")&&d("invalid-variables-values","[PageReader] Variables payload contains non-string values. Invalid entries were ignored."),Object.fromEntries(Object.entries(x).filter(B=>typeof B[1]=="string")))}),_=e.computed(()=>{if(!v(o.pageData.content)||!r.value.isValid)return d("invalid-content","[PageReader] Invalid content node. Nothing can be rendered.",{errors:r.value.errors}),null;if(!v(o.pageData.layout)||!l.value.isValid)return d("invalid-layout","[PageReader] Invalid layout node. Falling back to content-only rendering.",{errors:l.value.errors}),o.pageData.content;const x={...o.pageData.content,slot:o.pageData.content.slot??"default"},g=Array.isArray(o.pageData.layout.children)?o.pageData.layout.children:[];return{...o.pageData.layout,children:[...g,x]}});return(x,g)=>(e.openBlock(),e.createElementBlock("div",xn,[_.value?(e.openBlock(),e.createBlock(St,{key:0,"fallback-message":"This page could not be fully rendered.","show-details-in-dev":!0,"diagnostic-context":"PageReader"},{default:e.withCtx(()=>[e.createVNode(We,{node:_.value,variables:m.value},null,8,["node","variables"])]),_:1})):(e.openBlock(),e.createElementBlock("div",En," This page data is invalid and cannot be rendered safely. "))]))}}),Pt=K(In,[["__scopeId","data-v-d9bf9b29"]]),ge={desktop:{width:1440,height:900,label:"Desktop"},tablet:{width:768,height:1024,label:"Tablet"},mobile:{width:375,height:812,label:"Mobile"},custom:{width:0,height:0,label:"Custom"}},Tt=Symbol("pageBuilder"),Vt=Symbol("editor"),Be=Symbol("nodeTree"),Ce=Symbol("dragDrop");function q(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Dn(t){return typeof t=="number"&&Number.isInteger(t)&&t>0}function ze(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}function dt(t,o,n){return{id:t,name:o,slot:n,props:{},children:[]}}function pe(t,o=new WeakSet){return!q(t)||o.has(t)||(o.add(t),!Dn(t.id))||typeof t.name!="string"||t.name.trim().length===0||!(t.slot===null||typeof t.slot=="string")||!q(t.props)||!Array.isArray(t.children)||typeof t.readonly<"u"&&typeof t.readonly!="boolean"?!1:t.children.every(n=>pe(n,o))}function Bn(t){if(!q(t))return{};const o={};for(const[n,r]of Object.entries(t))typeof r=="string"&&(o[n]=r);return o}function Cn(t){const o=[],n=dt(1,"PbSection",null),r=dt(100,"PbContainer",null),l=q(t)?t:{};let a=n;pe(l.content)?a=structuredClone(l.content):o.push("content node is invalid");let d=r;pe(l.layout)?d=structuredClone(l.layout):o.push("layout node is invalid");const v=l.maxId,m=Math.max(u.getMaxId(a),u.getMaxId(d)),_=ze(v),x=_?Math.max(Math.trunc(v),m):m;_||o.push("maxId is invalid");const g=Bn(l.variables);q(l.variables)||o.push("variables map is invalid");const B=q(l.meta)?l.meta:{};q(l.meta)||o.push("meta object is invalid");const E={meta:{id:typeof B.id=="string"?B.id:"unknown-page",name:typeof B.name=="string"?B.name:"Untitled page",url:typeof B.url=="string"?B.url:"/",status:B.status==="draft"||B.status==="published"||B.status==="archived"?B.status:"draft",updatedAt:typeof B.updatedAt=="string"?B.updatedAt:void 0,createdAt:typeof B.createdAt=="string"?B.createdAt:void 0},content:a,layout:d,maxId:x,variables:g};return o.length>0&&u.reportDevDiagnostic("usePageBuilder.sanitizeInitialData",u.createPageBuilderError("INVALID_PAGE_DATA",`[PageBuilder] Invalid page data detected. Falling back to safe defaults for: ${o.join(", ")}.`)),E}function st(t){let o;try{o=JSON.parse(t)}catch(r){throw u.createPageBuilderError("INVALID_SNAPSHOT","[PageBuilder] Snapshot JSON is invalid.",{cause:r,details:{snapshotPreview:t.slice(0,200)}})}if(!q(o)||!pe(o.content)||!pe(o.layout)||!ze(o.maxId))throw u.createPageBuilderError("INVALID_SNAPSHOT","[PageBuilder] Snapshot payload shape is invalid.",{details:{contentValid:q(o)?pe(o.content):!1,layoutValid:q(o)?pe(o.layout):!1,maxIdValid:q(o)?ze(o.maxId):!1}});const n=Math.max(Math.trunc(o.maxId),u.getMaxId(o.content),u.getMaxId(o.layout));return{content:o.content,layout:o.layout,maxId:n}}function Rt(t){const{initialData:o,mode:n="read"}=t,r=Cn(o),l=e.ref(n),a=e.ref(r.meta),d=e.ref(r.content),v=e.ref(r.layout),m=e.ref(r.maxId),_=e.ref(r.variables),x=e.ref(!1),g=e.computed(()=>({meta:a.value,content:d.value,layout:v.value,maxId:m.value,variables:_.value})),B=C({content:r.content,layout:r.layout});function E(D){return JSON.stringify(D)}function C(D){return JSON.stringify(D)}function p(){x.value=C({content:d.value,layout:v.value})!==B}function b(D){l.value=D}function c(D){d.value=D,m.value=Math.max(m.value,u.getMaxId(D)),p()}function i(D){v.value=D,m.value=Math.max(m.value,u.getMaxId(D)),p()}function w(){return m.value++,m.value}function I(){return E({content:d.value,layout:v.value,maxId:m.value})}function T(D){try{const M=st(D);d.value=M.content,v.value=M.layout,m.value=M.maxId,p()}catch(M){throw u.createPageBuilderError("INVALID_SNAPSHOT","[PageBuilder] Unable to restore snapshot.",{cause:M,details:{reason:u.toErrorMessage(M)}})}}function P(){const D=st(JSON.stringify({content:r.content,layout:r.layout,maxId:r.maxId}));d.value=structuredClone(D.content),v.value=structuredClone(D.layout),m.value=D.maxId,_.value=structuredClone(r.variables),x.value=!1}return{mode:l,pageData:g,content:d,layout:v,maxId:m,variables:_,isDirty:x,setMode:b,updateContent:c,updateLayout:i,nextId:w,getSnapshot:I,restoreSnapshot:T,reset:P}}function Lt(t={}){const{initialSnapshot:o,initialLabel:n="Initial state"}=t,r=o?[{timestamp:Date.now(),label:n,snapshot:o}]:[];let l=o??null;const a=e.reactive({selectedNodeId:null,hoveredNodeId:null,leftDrawerOpen:!0,rightDrawerOpen:!1,history:r,historyIndex:r.length>0?0:-1,isDirty:!1,canvasScale:1,viewport:"desktop"}),d=e.computed(()=>a.historyIndex>0),v=e.computed(()=>a.historyIndex<a.history.length-1);function m(i){a.selectedNodeId=i,i!==null&&(a.rightDrawerOpen=!0)}function _(i){a.hoveredNodeId=i}function x(){a.leftDrawerOpen=!a.leftDrawerOpen}function g(){a.rightDrawerOpen=!a.rightDrawerOpen}function B(i){a.viewport=i}function E(){var w;if(l===null||a.historyIndex<0){a.isDirty=!1;return}const i=(w=a.history[a.historyIndex])==null?void 0:w.snapshot;a.isDirty=i!==l}function C(i,w=n){l=i,a.history=[{timestamp:Date.now(),label:w,snapshot:i}],a.historyIndex=0,a.isDirty=!1}function p(i,w){var T;if(l===null){C(w);return}((T=a.history[a.historyIndex])==null?void 0:T.snapshot)!==w&&(a.historyIndex<a.history.length-1&&a.history.splice(a.historyIndex+1),a.history.push({timestamp:Date.now(),label:i,snapshot:w}),a.historyIndex=a.history.length-1,E())}function b(){var i;if(d.value)return a.historyIndex--,E(),(i=a.history[a.historyIndex])==null?void 0:i.snapshot}function c(){var i;if(v.value)return a.historyIndex++,E(),(i=a.history[a.historyIndex])==null?void 0:i.snapshot}return{...e.toRefs(a),canUndo:d,canRedo:v,selectNode:m,hoverNode:_,toggleLeftDrawer:x,toggleRightDrawer:g,setViewport:B,setHistoryBaseline:C,pushHistory:p,undo:b,redo:c}}function $t({content:t,nextId:o,onUpdate:n,onSnapshot:r}){function l(p,b){const c=e.toRaw(t.value),i=JSON.stringify(c),w=u.cloneTree(c);return b(w)===!1||JSON.stringify(w)===i?!1:(n(w),r==null||r(p),!0)}function a(p,b,c,i="default",w){let I=null;return!l(`Add ${b}`,P=>{if(!u.findNodeById(P,p))return!1;I=o();const M=u.createNode(I,b,{slot:i,props:w});return u.insertNode(P,p,M,c,i)})||I===null?null:I}function d(p){l("Delete node",b=>{u.removeNode(b,p)})}function v(p,b,c,i="default"){l("Move node",w=>u.moveNode(w,p,b,c,i))}function m(p,b){l("Update props",c=>{const i=u.findNodeById(c,p);i&&(i.props={...i.props,...b})})}function _(p){l("Duplicate node",b=>{const c=u.findNodeById(b,p);if(!c)return;const i=u.findParent(b,p);if(!i)return;const w=C(c);i.parent.children.splice(i.index+1,0,w)})}function x(p){const b=u.findNodeById(t.value,p);if(!b||b.readonly)return!1;const c=u.findParent(t.value,p);return c?c.index>0:!1}function g(p){const b=u.findNodeById(t.value,p);if(!b||b.readonly)return!1;const c=u.findParent(t.value,p);return c?c.index<c.parent.children.length-1:!1}function B(p){x(p)&&l("Move node up",b=>{const c=u.findParent(b,p);if(!c||c.index<=0)return;const[i]=c.parent.children.splice(c.index,1);c.parent.children.splice(c.index-1,0,i)})}function E(p){g(p)&&l("Move node down",b=>{const c=u.findParent(b,p);if(!c||c.index>=c.parent.children.length-1)return;const[i]=c.parent.children.splice(c.index,1);c.parent.children.splice(c.index+1,0,i)})}function C(p){return{...p,id:o(),props:{...p.props},children:p.children.map(b=>C(b))}}return{addNode:a,deleteNode:d,moveNodeTo:v,updateNodeProps:m,duplicateNode:_,canMoveNodeUp:x,canMoveNodeDown:g,moveNodeUp:B,moveNodeDown:E}}const Mt="default";function xe(){return{isDragging:!1,sourceNodeId:null,sourceComponentName:null,isNewComponent:!1,dropTargetId:null,dropIndex:0,dropSlot:Mt}}function At(){const t=e.ref(xe());function o(){t.value=xe()}function n(v){t.value={...xe(),isDragging:!0,sourceNodeId:v}}function r(v){t.value={...xe(),isDragging:!0,sourceComponentName:v,isNewComponent:!0}}function l(v,m,_=Mt){t.value.isDragging&&(t.value.dropTargetId=v,t.value.dropIndex=m,t.value.dropSlot=_)}function a(){const v={...t.value};return o(),v}function d(){o()}return{dragState:t,startDragExisting:n,startDragNew:r,updateDropTarget:l,endDrag:a,cancelDrag:d}}const Sn=["aria-label"],Pn=["aria-label"],Tn=["disabled","aria-label","title"],Vn=["disabled","aria-label","title"],Rn=["aria-label"],Ln=["title","aria-label","aria-pressed","data-viewport-preset","onClick","onKeydown"],$n={key:0,class:"ipb-toolbar__custom-size"},Mn={class:"ipb-toolbar__size-control"},An=["aria-label","value"],On={class:"ipb-toolbar__size-control"},zn=["aria-label","value"],Un={key:1,class:"ipb-toolbar__viewport-size","aria-live":"polite"},Kn=["aria-label"],Hn=["aria-label"],Wn=["aria-label","title"],Re=240,Le=320,$e=3840,Me=4320,jn=e.defineComponent({__name:"EditorToolbar",props:{canUndo:{type:Boolean,default:!1},canRedo:{type:Boolean,default:!1},isDirty:{type:Boolean,default:!1},viewport:{type:String,default:"desktop"},customViewportWidth:{type:Number,default:1024},customViewportHeight:{type:Number,default:768},activeViewportWidth:{type:Number,default:null},activeViewportHeight:{type:Number,default:null}},emits:["undo","redo","save","viewport-change","custom-viewport-change"],setup(t,{emit:o}){const n=t,r=o,{t:l}=X(),a={desktop:"toolbar.viewport.desktop",tablet:"toolbar.viewport.tablet",mobile:"toolbar.viewport.mobile",custom:"toolbar.viewport.custom"},d=["desktop","tablet","mobile","custom"],v=e.ref(new Map);function m(c){return l(a[c])}function _(c){return l("toolbar.viewport.switchAriaLabel",{viewport:m(c)})}function x(c,i){const w=i instanceof HTMLButtonElement?i:i&&"$el"in i&&i.$el instanceof HTMLButtonElement?i.$el:null;if(w){v.value.set(c,w);return}v.value.delete(c)}function g(c){return d.indexOf(c)}function B(c){var i;(i=v.value.get(c))==null||i.focus()}function E(c,i){const w=g(i);if(w<0||c.key!=="ArrowLeft"&&c.key!=="ArrowRight"&&c.key!=="ArrowUp"&&c.key!=="ArrowDown"&&c.key!=="Home"&&c.key!=="End")return;c.preventDefault();let I=w;c.key==="ArrowLeft"||c.key==="ArrowUp"?I=(w-1+d.length)%d.length:c.key==="ArrowRight"||c.key==="ArrowDown"?I=(w+1)%d.length:c.key==="Home"?I=0:c.key==="End"&&(I=d.length-1);const T=d[I];r("viewport-change",T),e.nextTick(()=>{B(T)})}function C(c,i,w){return Math.max(i,Math.min(w,c))}function p(c){if(!c.trim())return null;const i=Number(c);return Number.isFinite(i)?Math.round(i):null}function b(c,i){const w=p(i);if(w===null)return;const I=C(c==="width"?w:n.customViewportWidth,Re,$e),T=C(c==="height"?w:n.customViewportHeight,Le,Me);r("custom-viewport-change",{width:I,height:T})}return(c,i)=>(e.openBlock(),e.createElementBlock("header",{class:"ipb-toolbar",role:"toolbar","aria-label":e.unref(l)("toolbar.aria.toolbar")},[e.createElementVNode("div",{class:"ipb-toolbar__left",role:"group","aria-label":e.unref(l)("toolbar.aria.historyControls")},[e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn",disabled:!t.canUndo,"aria-label":e.unref(l)("toolbar.undo.ariaLabel"),title:e.unref(l)("toolbar.undo.title"),"aria-keyshortcuts":"Control+Z Meta+Z",onClick:i[0]||(i[0]=w=>c.$emit("undo"))}," ↩ ",8,Tn),e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn",disabled:!t.canRedo,"aria-label":e.unref(l)("toolbar.redo.ariaLabel"),title:e.unref(l)("toolbar.redo.title"),"aria-keyshortcuts":"Control+Y Meta+Y Control+Shift+Z Meta+Shift+Z",onClick:i[1]||(i[1]=w=>c.$emit("redo"))}," ↪ ",8,Vn)],8,Pn),e.createElementVNode("div",{class:"ipb-toolbar__center",role:"group","aria-label":e.unref(l)("toolbar.aria.viewportControls")},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(ge),(w,I)=>(e.openBlock(),e.createElementBlock("button",{key:I,ref_for:!0,ref:T=>x(I,T),type:"button",class:e.normalizeClass(["ipb-toolbar__btn",{"ipb-toolbar__btn--active":t.viewport===I}]),title:m(I),"aria-label":_(I),"aria-pressed":t.viewport===I?"true":"false","data-viewport-preset":I,onClick:T=>c.$emit("viewport-change",I),onKeydown:T=>E(T,I)},e.toDisplayString(m(I)),43,Ln))),128)),t.viewport==="custom"?(e.openBlock(),e.createElementBlock("div",$n,[e.createElementVNode("label",Mn,[e.createElementVNode("span",null,e.toDisplayString(e.unref(l)("toolbar.viewport.width.short")),1),e.createElementVNode("input",{class:"ipb-toolbar__size-input",type:"number",inputmode:"numeric","aria-label":e.unref(l)("toolbar.viewport.width.ariaLabel"),min:Re,max:$e,value:t.customViewportWidth,onInput:i[2]||(i[2]=w=>b("width",w.target.value))},null,40,An)]),e.createElementVNode("label",On,[e.createElementVNode("span",null,e.toDisplayString(e.unref(l)("toolbar.viewport.height.short")),1),e.createElementVNode("input",{class:"ipb-toolbar__size-input",type:"number",inputmode:"numeric","aria-label":e.unref(l)("toolbar.viewport.height.ariaLabel"),min:Le,max:Me,value:t.customViewportHeight,onInput:i[3]||(i[3]=w=>b("height",w.target.value))},null,40,zn)])])):e.createCommentVNode("",!0),t.activeViewportWidth!==null&&t.activeViewportHeight!==null?(e.openBlock(),e.createElementBlock("span",Un,e.toDisplayString(t.activeViewportWidth)+"×"+e.toDisplayString(t.activeViewportHeight),1)):e.createCommentVNode("",!0)],8,Rn),e.createElementVNode("div",{class:"ipb-toolbar__right",role:"group","aria-label":e.unref(l)("toolbar.aria.saveControls")},[t.isDirty?(e.openBlock(),e.createElementBlock("span",{key:0,class:"ipb-toolbar__dirty-indicator",role:"status","aria-label":e.unref(l)("toolbar.aria.unsavedChanges")}," ● ",8,Hn)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"ipb-toolbar__btn ipb-toolbar__btn--primary","aria-label":e.unref(l)("toolbar.save.ariaLabel"),title:e.unref(l)("toolbar.save.title"),"aria-keyshortcuts":"Control+S Meta+S",onClick:i[4]||(i[4]=w=>c.$emit("save"))},e.toDisplayString(e.unref(l)("toolbar.save")),9,Wn)],8,Kn)],8,Sn))}}),Fn=K(jn,[["__scopeId","data-v-7086d88b"]]);function Yn(t,o){const n=le(t.name);return!n||n.slots.length===0?[]:n.slots.filter(r=>{const l=r.allowedComponents;return!l||l.length===0||l.includes(o)})}function ae(t,o,n){const r=Yn(t,n);if(r.length===0)return null;if(o){const a=r.find(d=>d.name===o);if(a)return a.name}const l=r.find(a=>a.name==="default");return(l==null?void 0:l.name)??r[0].name}const Gn={class:"ipb-tree-panel"},qn=["aria-label"],Xn=["onDragover","onDrop"],Zn={key:0,class:"ipb-tree-panel__drop-line","data-drop-zone":"above","aria-hidden":"true"},Jn=["data-node-id","draggable","aria-selected","aria-level","aria-readonly","tabindex","onClick","onDragstart"],Qn={class:"ipb-tree-panel__name"},eo={class:"ipb-tree-panel__id"},to={key:0,class:"ipb-tree-panel__readonly"},no={key:1,class:"ipb-tree-panel__drop-line","data-drop-zone":"below","aria-hidden":"true"},oo=e.defineComponent({__name:"TreePanel",props:{content:{type:Object,required:!0},selectedNodeId:{type:Number,default:null}},emits:["select"],setup(t,{emit:o}){const n=t,r=o,{t:l}=X(),a=e.inject(Be,null),d=e.inject(Ce,null),v=e.ref(!1),m=e.ref(null),_=e.ref(null),x=e.computed(()=>n.content.id);function g(f,N,k="on"){var J,ie;const R=(ie=(J=f.target)==null?void 0:J.closest)==null?void 0:ie.call(J,"[data-drop-zone]"),$=R==null?void 0:R.getAttribute("data-drop-zone");if($==="above")return"above";if($==="below")return"below";if(!N)return k;const A=N.getBoundingClientRect(),Y=f.clientY-A.top,G=A.height/3;return Y<G?"above":Y>2*G?"below":"on"}function B(f,N){const k=u.findNodeById(n.content,f);if(!k)return null;const R=k.slot??"default",$=u.findParent(n.content,f);if(!$){const Y=n.content.id,G=N==="above"?0:n.content.children.length;return{parentId:Y,index:G,slot:"default"}}const A=N==="above"?$.index:$.index+1;return{parentId:$.parent.id,index:A,slot:R}}function E(f,N){return f.id===N?!0:f.children.some(k=>E(k,N))}function C(f){var N;return f.sourceComponentName?f.sourceComponentName:f.sourceNodeId===null?null:((N=u.findNodeById(n.content,f.sourceNodeId))==null?void 0:N.name)??null}function p(f,N){if(f.sourceNodeId===N)return!1;const k=C(f);if(!k)return!1;const R=u.findNodeById(n.content,N);if(!R||R.readonly)return!1;if(!f.isNewComponent&&f.sourceNodeId!==null){const $=u.findNodeById(n.content,f.sourceNodeId);if(!$||$.readonly||E($,N))return!1}return ae(R,"default",k)!==null}function b(f,N,k){const R=C(f);if(!R)return!1;const $=u.findNodeById(n.content,N);if(!$||$.readonly||ae($,k,R)===null)return!1;if(!f.isNewComponent&&f.sourceNodeId!==null){const A=u.findNodeById(n.content,f.sourceNodeId);if(!A||A.readonly||E(A,N))return!1}return!0}const c=e.computed(()=>u.flattenTree(n.content).map(f=>({id:f.id,key:f.key,name:f.node.name,depth:f.depth,readonly:!!f.node.readonly}))),i=e.ref(new Map);function w(f,N){const k=N instanceof HTMLButtonElement?N:N&&"$el"in N&&N.$el instanceof HTMLButtonElement?N.$el:null;if(k){i.value.set(f,k);return}i.value.delete(f)}function I(f){if(!(f instanceof HTMLElement))return null;const N=f.dataset.nodeId;if(!N)return null;const k=Number(N);return Number.isInteger(k)?k:null}function T(f=!0){if(c.value.length===0)return-1;if(n.selectedNodeId!==null){const N=c.value.findIndex(k=>k.id===n.selectedNodeId);if(N>=0)return N}return f?0:-1}function P(f){var N;(N=i.value.get(f))==null||N.focus()}function D(f){const N=c.value[f];N&&(r("select",N.id),e.nextTick(()=>{P(N.id)}))}function M(f){var k;const N=T();return((k=c.value[N])==null?void 0:k.id)===f}const j=e.computed(()=>!!(a&&d)),z=f=>!!(d!=null&&d.dragState.value.isDragging&&m.value===f&&_.value==="on"),H=f=>!!(d!=null&&d.dragState.value.isDragging&&m.value===f&&_.value==="above"),ee=f=>!!(d!=null&&d.dragState.value.isDragging&&m.value===f&&_.value==="below");function Z(f){return!j.value||f.readonly?!1:f.id!==x.value}function be(f,N){!d||!Z(f)||(v.value=!1,d.startDragExisting(f.id),N.dataTransfer&&(N.dataTransfer.effectAllowed="move",N.dataTransfer.setData("application/x-ipb-node-id",String(f.id)),N.dataTransfer.setData("text/plain",String(f.id))))}function fe(f,N){if(!d||!d.dragState.value.isDragging)return;const k=d.dragState.value,R=g(N,i.value.get(f.id));if(R==="on"){if(!p(k,f.id))return;N.preventDefault(),N.dataTransfer&&(N.dataTransfer.dropEffect=k.isNewComponent?"copy":"move"),m.value=f.id,_.value="on",d.updateDropTarget(f.id,0,"default");return}const $=B(f.id,R);!$||!b(k,$.parentId,$.slot)||(N.preventDefault(),N.dataTransfer&&(N.dataTransfer.dropEffect=k.isNewComponent?"copy":"move"),m.value=f.id,_.value=R,d.updateDropTarget($.parentId,$.index,$.slot))}function me(f,N){var ke,Ne;if(N.preventDefault(),!a||!d||!d.dragState.value.isDragging)return;const k=d.dragState.value,$=(m.value===f.id&&_.value?_.value:null)??g(N,i.value.get(f.id),"on");if($==="on"){const ne=u.findNodeById(n.content,f.id);if(!ne||!p(k,f.id)){d.cancelDrag();return}const de=C(k),ye=de?ae(ne,"default",de)??"default":"default";if(k.isNewComponent&&k.sourceComponentName){const Se=(ke=le(k.sourceComponentName))==null?void 0:ke.defaultProps,_e=a.addNode(f.id,k.sourceComponentName,0,ye,Se);v.value=!0,d.endDrag(),_e!==null&&r("select",_e);return}if(k.sourceNodeId===null)return;a.moveNodeTo(k.sourceNodeId,f.id,0,ye),v.value=!0,d.endDrag(),r("select",k.sourceNodeId);return}const A=B(f.id,$);if(!A||!b(k,A.parentId,A.slot)){d.cancelDrag();return}const Y=u.findNodeById(n.content,A.parentId),G=C(k),J=Y&&G?ae(Y,A.slot,G)??A.slot:A.slot;if(k.isNewComponent&&k.sourceComponentName){const ne=(Ne=le(k.sourceComponentName))==null?void 0:Ne.defaultProps,de=a.addNode(A.parentId,k.sourceComponentName,A.index,J,ne);v.value=!0,d.endDrag(),de!==null&&r("select",de);return}if(k.sourceNodeId===null)return;let ie=A.index;const he=u.findParent(n.content,k.sourceNodeId);he&&he.parent.id===A.parentId&&he.index<A.index&&(ie=A.index-1),a.moveNodeTo(k.sourceNodeId,A.parentId,ie,J),v.value=!0,d.endDrag(),r("select",k.sourceNodeId)}function y(){m.value=null,_.value=null,!v.value&&(d!=null&&d.dragState.value.isDragging)&&d.cancelDrag()}function L(f){if(c.value.length===0)return;const N=I(f.target),k=N===null?T():c.value.findIndex(R=>R.id===N);if(!(k<0)){if(f.key==="ArrowDown"){f.preventDefault();const R=Math.min(c.value.length-1,k+1);D(R);return}if(f.key==="ArrowUp"){f.preventDefault();const R=Math.max(0,k-1);D(R);return}if(f.key==="Home"){f.preventDefault(),D(0);return}if(f.key==="End"){f.preventDefault(),D(c.value.length-1);return}(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),D(k))}}return e.watch(()=>n.selectedNodeId,f=>{f!==null&&e.nextTick(()=>{P(f)})}),(f,N)=>(e.openBlock(),e.createElementBlock("div",Gn,[e.createElementVNode("div",{class:"ipb-tree-panel__list",role:"tree","aria-label":e.unref(l)("treePanel.ariaLabel"),onKeydown:L},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,k=>(e.openBlock(),e.createElementBlock("div",{key:k.key,class:"ipb-tree-panel__row-wrapper",onDragover:R=>fe(k,R),onDrop:R=>me(k,R)},[H(k.id)?(e.openBlock(),e.createElementBlock("div",Zn)):e.createCommentVNode("",!0),e.createElementVNode("button",{ref_for:!0,ref:R=>w(k.id,R),type:"button",class:e.normalizeClass(["ipb-tree-panel__item",{"ipb-tree-panel__item--selected":t.selectedNodeId===k.id,"ipb-tree-panel__item--readonly":k.readonly,"ipb-tree-panel__item--drop-target":z(k.id),"ipb-tree-panel__item--draggable":Z(k)}]),style:e.normalizeStyle({paddingInlineStart:`${k.depth*16+8}px`}),"data-node-id":k.id,draggable:Z(k),role:"treeitem","aria-selected":t.selectedNodeId===k.id?"true":"false","aria-level":k.depth+1,"aria-readonly":k.readonly?"true":"false",tabindex:M(k.id)?0:-1,onClick:R=>r("select",k.id),onDragstart:R=>be(k,R),onDragend:y},[e.createElementVNode("span",Qn,e.toDisplayString(k.name),1),e.createElementVNode("span",eo,"#"+e.toDisplayString(k.id),1),k.readonly?(e.openBlock(),e.createElementBlock("span",to,e.toDisplayString(e.unref(l)("treePanel.readonly")),1)):e.createCommentVNode("",!0)],46,Jn),ee(k.id)?(e.openBlock(),e.createElementBlock("div",no)):e.createCommentVNode("",!0)],40,Xn))),128))],40,qn)]))}}),ro=K(oo,[["__scopeId","data-v-f50f228d"]]),ao=["aria-label"],lo={class:"ipb-left-drawer__header"},io={class:"ipb-left-drawer__title",id:"ipb-left-drawer-title"},so=["aria-label","aria-expanded"],co={class:"ipb-left-drawer__section"},uo={class:"ipb-left-drawer__section-title",id:"ipb-left-drawer-components-title"},po={class:"ipb-left-drawer__search",role:"search"},fo=["placeholder","aria-label"],mo={class:"ipb-left-drawer__category-title"},vo=["aria-label"],go=["title","aria-label","onClick","onDragstart"],bo={class:"ipb-left-drawer__component-icon","aria-hidden":"true"},ho={class:"ipb-left-drawer__component-label"},yo={key:0,class:"ipb-left-drawer__empty"},_o={key:0,class:"ipb-left-drawer__section ipb-left-drawer__section--tree"},wo={class:"ipb-left-drawer__section-header"},ko={class:"ipb-left-drawer__section-title"},No=["aria-expanded","aria-label"],xo=["aria-label"],ue="ipb-left-drawer-content",ct="ipb-left-drawer-tree-panel",Eo=e.defineComponent({__name:"LeftDrawer",props:{open:{type:Boolean,default:!0},content:{type:Object,default:null},selectedNodeId:{type:Number,default:null}},emits:["toggle","dragStart","dragEnd","add","select"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>bt()),{t:a}=X(),d=e.ref(""),v=e.ref(!0),m=e.ref(null),_=e.ref(null),x=e.ref(null),g=e.ref(!1),B=e.computed(()=>{const P=d.value.trim().toLowerCase();if(!P)return l.value;const D=new Map;for(const[M,j]of l.value){const z=j.filter(H=>[H.name,H.label,H.description??"",M,H.category].some(Z=>Z.toLowerCase().includes(P)));z.length>0&&D.set(M,z)}return D});function E(P,D){D.dataTransfer&&(D.dataTransfer.effectAllowed="copy",D.dataTransfer.setData("application/x-ipb-component",P),D.dataTransfer.setData("text/plain",P)),r("dragStart",P)}function C(){r("dragEnd")}function p(P){r("add",P)}function b(){v.value=!v.value}function c(){const P=m.value;return P?P.querySelector(`#${ue} button:not([disabled]), #${ue} input:not([disabled]), #${ue} select:not([disabled]), #${ue} textarea:not([disabled]), #${ue} [tabindex]:not([tabindex="-1"])`):null}function i(){var P,D;(P=x.value)==null||P.focus(),document.activeElement!==x.value&&((D=c())==null||D.focus())}function w(){g.value=!n.open,r("toggle")}function I(P){return a("leftDrawer.category.ariaLabel",{category:P})}function T(P){return a("leftDrawer.component.dragAriaLabel",{label:P})}return e.watch(()=>n.open,(P,D)=>{var M;if(P&&!D&&g.value&&e.nextTick(()=>{i()}),!P&&D){const j=document.activeElement;j instanceof HTMLElement&&((M=m.value)!=null&&M.contains(j))&&e.nextTick(()=>{var z;(z=_.value)==null||z.focus()})}P!==D&&(g.value=!1)}),(P,D)=>(e.openBlock(),e.createElementBlock("aside",{ref_key:"drawerRef",ref:m,class:e.normalizeClass(["ipb-left-drawer",{"ipb-left-drawer--open":t.open}]),"aria-label":e.unref(a)("leftDrawer.aria.componentPalette"),role:"complementary"},[e.createElementVNode("div",lo,[e.createElementVNode("span",io,e.toDisplayString(e.unref(a)("leftDrawer.title")),1),e.createElementVNode("button",{ref_key:"drawerToggleRef",ref:_,type:"button",class:"ipb-left-drawer__toggle","aria-label":e.unref(a)("leftDrawer.toggle.ariaLabel"),"aria-expanded":t.open?"true":"false","aria-controls":ue,onClick:w},e.toDisplayString(t.open?"◀":"▶"),9,so)]),t.open?(e.openBlock(),e.createElementBlock("div",{key:0,id:ue,class:"ipb-left-drawer__content",role:"region","aria-labelledby":"ipb-left-drawer-title"},[e.createElementVNode("div",co,[e.createElementVNode("h3",uo,e.toDisplayString(e.unref(a)("leftDrawer.section.components")),1),e.createElementVNode("div",po,[e.withDirectives(e.createElementVNode("input",{ref_key:"searchInputRef",ref:x,"onUpdate:modelValue":D[0]||(D[0]=M=>d.value=M),type:"search",class:"ipb-left-drawer__search-input",placeholder:e.unref(a)("leftDrawer.search.placeholder"),"aria-label":e.unref(a)("leftDrawer.search.ariaLabel")},null,8,fo),[[e.vModelText,d.value]])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,([M,j])=>(e.openBlock(),e.createElementBlock("div",{key:M,class:"ipb-left-drawer__category"},[e.createElementVNode("h4",mo,e.toDisplayString(M),1),e.createElementVNode("div",{class:"ipb-left-drawer__component-list",role:"group","aria-label":I(M)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j,z=>(e.openBlock(),e.createElementBlock("button",{key:z.name,type:"button",class:"ipb-left-drawer__component-item",draggable:"true",title:z.description,"aria-label":T(z.label),"aria-keyshortcuts":"Enter Space",onClick:H=>p(z.name),onDragstart:H=>E(z.name,H),onDragend:C},[e.createElementVNode("span",bo,e.toDisplayString(z.icon??"◻"),1),e.createElementVNode("span",ho,e.toDisplayString(z.label),1)],40,go))),128))],8,vo)]))),128)),B.value.size===0?(e.openBlock(),e.createElementBlock("p",yo,e.toDisplayString(e.unref(a)("leftDrawer.empty")),1)):e.createCommentVNode("",!0)]),t.content?(e.openBlock(),e.createElementBlock("div",_o,[e.createElementVNode("div",wo,[e.createElementVNode("h3",ko,e.toDisplayString(e.unref(a)("leftDrawer.section.tree")),1),e.createElementVNode("button",{type:"button",class:"ipb-left-drawer__section-toggle","aria-expanded":v.value?"true":"false","aria-controls":ct,"aria-label":e.unref(a)("leftDrawer.tree.toggle.ariaLabel"),onClick:b},e.toDisplayString(v.value?"−":"+"),9,No)]),v.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:ct,role:"region","aria-label":e.unref(a)("treePanel.ariaLabel")},[e.createVNode(ro,{content:t.content,"selected-node-id":t.selectedNodeId,onSelect:D[1]||(D[1]=M=>r("select",M))},null,8,["content","selected-node-id"])],8,xo)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,ao))}}),Io=K(Eo,[["__scopeId","data-v-2bb04ccb"]]),Do=["value","placeholder"],Bo=e.defineComponent({__name:"PropTextEditor",props:{modelValue:{type:[String,Number,Boolean],default:""},placeholder:{type:String,default:""}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o;function l(a){r("update:modelValue",a.target.value)}return(a,d)=>(e.openBlock(),e.createElementBlock("input",{class:"ipb-prop-editor ipb-prop-editor--text",type:"text",value:String(n.modelValue??""),placeholder:t.placeholder,onInput:l},null,40,Do))}}),Ee=K(Bo,[["__scopeId","data-v-f48156f6"]]),Co=["value","min","max"],So=e.defineComponent({__name:"PropNumberEditor",props:{modelValue:{type:[String,Number],default:void 0},min:{type:Number,default:void 0},max:{type:Number,default:void 0}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>typeof n.modelValue=="number"?String(n.modelValue):typeof n.modelValue=="string"?n.modelValue:"");function a(d){const v=d.target.value.trim();if(v===""){r("update:modelValue",void 0);return}const m=Number(v);r("update:modelValue",Number.isNaN(m)?void 0:m)}return(d,v)=>(e.openBlock(),e.createElementBlock("input",{class:"ipb-prop-editor ipb-prop-editor--number",type:"number",value:l.value,min:t.min,max:t.max,onInput:a},null,40,Co))}}),Po=K(So,[["__scopeId","data-v-11786ace"]]),To=["checked"],Vo=e.defineComponent({inheritAttrs:!1,__name:"PropBooleanEditor",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:o}){const n=o;function r(v){n("update:modelValue",v.target.checked)}const{t:l}=X(),a=e.useAttrs(),d=e.computed(()=>{const{class:v,style:m,..._}=a;return _});return(v,m)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass(["ipb-prop-editor ipb-prop-editor--boolean",e.unref(a).class]),style:e.normalizeStyle(e.unref(a).style)},[e.createElementVNode("input",e.mergeProps(d.value,{type:"checkbox",checked:t.modelValue,onChange:r}),null,16,To),e.createElementVNode("span",null,e.toDisplayString(t.modelValue?e.unref(l)("propBoolean.enabled"):e.unref(l)("propBoolean.disabled")),1)],6))}}),Ro=K(Vo,[["__scopeId","data-v-cfba94a9"]]),Lo=["value"],$o={key:0,value:""},Mo=["value"],Ao=e.defineComponent({__name:"PropSelectEditor",props:{modelValue:{type:[String,Number,Boolean],default:void 0},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>{if(!n.options||n.options.length===0)return"";const v=n.options.findIndex(m=>m.value===n.modelValue);return v>=0?String(v):"0"});function a(v){const m=v.target.value;if(m===""||!n.options){r("update:modelValue",void 0);return}const _=n.options[Number(m)];r("update:modelValue",_==null?void 0:_.value)}const{t:d}=X();return(v,m)=>(e.openBlock(),e.createElementBlock("select",{class:"ipb-prop-editor ipb-prop-editor--select",value:l.value,onChange:a},[!t.options||t.options.length===0?(e.openBlock(),e.createElementBlock("option",$o,e.toDisplayString(e.unref(d)("propSelect.noOptions")),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options??[],(_,x)=>(e.openBlock(),e.createElementBlock("option",{key:`${_.label}-${x}`,value:String(x)},e.toDisplayString(_.label),9,Mo))),128))],40,Lo))}}),Oo=K(Ao,[["__scopeId","data-v-8c477cbd"]]),zo=["value"],Uo=["value"],Ko=e.defineComponent({inheritAttrs:!1,__name:"PropColorEditor",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>{const _=n.modelValue.trim();return/^#[0-9a-fA-F]{6}$/.test(_)?_:/^#[0-9a-fA-F]{3}$/.test(_)?`#${_.slice(1).split("").map(g=>`${g}${g}`).join("")}`:"#000000"});function a(_){r("update:modelValue",_.target.value)}function d(_){r("update:modelValue",_.target.value)}const v=e.useAttrs(),m=e.computed(()=>{const{class:_,style:x,...g}=v;return g});return(_,x)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-prop-editor ipb-prop-editor--color",e.unref(v).class]),style:e.normalizeStyle(e.unref(v).style)},[e.createElementVNode("input",e.mergeProps(m.value,{class:"ipb-prop-editor__picker",type:"color",value:l.value,onInput:a}),null,16,zo),e.createElementVNode("input",e.mergeProps(m.value,{class:"ipb-prop-editor__text",type:"text",value:t.modelValue,placeholder:"#000000",onInput:d}),null,16,Uo)],6))}}),Ho=K(Ko,[["__scopeId","data-v-b0f904c5"]]),Wo=["aria-label"],jo=["aria-label","title"],Fo=["aria-label","title"],Yo=["aria-label","title"],Go=["aria-label","title"],qo=["aria-label","title"],Xo=["aria-label","data-placeholder"],Zo=e.defineComponent({inheritAttrs:!1,__name:"RichTextEditor",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:"Type text..."}},emits:["update:modelValue"],setup(t,{emit:o}){const n=t,r=o,l=e.ref(null),a=e.ref("");function d(c){return typeof c!="string"?"":u.sanitizeRichTextHtml(c)}function v(c){const i=l.value;if(!i)return;const w=d(c);i.innerHTML!==w&&(i.innerHTML=w),a.value=w}function m(){const c=l.value;if(!c)return;const i=d(c.innerHTML);c.innerHTML!==i&&(c.innerHTML=i),i!==a.value&&(a.value=i,r("update:modelValue",i))}function _(){var c;(c=l.value)==null||c.focus()}function x(c,i){typeof document.execCommand=="function"&&document.execCommand(c,!1,i)}function g(c){_(),x(c),m()}function B(){_();const c=window.prompt(E("richText.prompt.enterUrl"),E("richText.prompt.defaultUrl"));if(!c)return;const i=u.sanitizeUrlByKind(c,"link");i&&(x("createLink",i),m())}e.onMounted(()=>{v(d(n.modelValue))}),e.watch(()=>n.modelValue,c=>{v(d(c))});const{t:E}=X(),C=e.useAttrs(),p=e.computed(()=>{const{class:c,style:i,...w}=C;return w}),b=e.computed(()=>{const c=C["aria-labelledby"],i=C["aria-label"];if(!(c||i))return E("richText.aria.editor")});return(c,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-richtext-editor",e.unref(C).class]),style:e.normalizeStyle(e.unref(C).style)},[e.createElementVNode("div",{class:"ipb-richtext-editor__toolbar",role:"toolbar","aria-label":e.unref(E)("richText.aria.toolbar")},[e.createElementVNode("button",{type:"button","data-command":"bold","aria-label":e.unref(E)("richText.action.bold"),title:e.unref(E)("richText.action.bold"),onClick:i[0]||(i[0]=w=>g("bold"))},[...i[4]||(i[4]=[e.createElementVNode("strong",null,"B",-1)])],8,jo),e.createElementVNode("button",{type:"button","data-command":"italic","aria-label":e.unref(E)("richText.action.italic"),title:e.unref(E)("richText.action.italic"),onClick:i[1]||(i[1]=w=>g("italic"))},[...i[5]||(i[5]=[e.createElementVNode("em",null,"I",-1)])],8,Fo),e.createElementVNode("button",{type:"button","data-command":"ul","aria-label":e.unref(E)("richText.action.unorderedList"),title:e.unref(E)("richText.action.unorderedList"),onClick:i[2]||(i[2]=w=>g("insertUnorderedList"))}," UL ",8,Yo),e.createElementVNode("button",{type:"button","data-command":"ol","aria-label":e.unref(E)("richText.action.orderedList"),title:e.unref(E)("richText.action.orderedList"),onClick:i[3]||(i[3]=w=>g("insertOrderedList"))}," OL ",8,Go),e.createElementVNode("button",{type:"button","data-command":"link","aria-label":e.unref(E)("richText.action.link"),title:e.unref(E)("richText.action.link"),onClick:B},e.toDisplayString(e.unref(E)("richText.action.link")),9,qo)],8,Wo),e.createElementVNode("div",e.mergeProps(p.value,{ref_key:"editorRef",ref:l,class:"ipb-richtext-editor__content",contenteditable:"true",role:"textbox","aria-multiline":"true","aria-label":b.value,"data-placeholder":t.placeholder,onInput:m,onBlur:m}),null,16,Xo)],6))}}),Jo=K(Zo,[["__scopeId","data-v-d9cdfb46"]]),Qo={class:"ipb-media-picker__controls"},er=["value","placeholder"],tr=["disabled"],nr={class:"ipb-media-picker__preview"},or=["src","alt"],rr={key:1,class:"ipb-media-picker__empty"},ar=e.defineComponent({inheritAttrs:!1,__name:"MediaPicker",props:{modelValue:{type:String,default:""}},emits:["update:modelValue","upload"],setup(t,{emit:o}){const n=t,r=o,l=e.computed(()=>n.modelValue.trim()),a=e.computed(()=>u.sanitizeUrlByKind(l.value,"media")),d=e.computed(()=>l.value.length>0),v=e.computed(()=>a.value.length>0);function m(C){const p=C.target.value;r("update:modelValue",u.sanitizeUrlByKind(p,"media"))}function _(){r("update:modelValue","")}function x(){r("upload")}const{t:g}=X(),B=e.useAttrs(),E=e.computed(()=>{const{class:C,style:p,...b}=B;return b});return(C,p)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ipb-media-picker",e.unref(B).class]),style:e.normalizeStyle(e.unref(B).style)},[e.createElementVNode("div",Qo,[e.createElementVNode("input",e.mergeProps(E.value,{class:"ipb-media-picker__input",type:"url",value:t.modelValue,placeholder:e.unref(g)("mediaPicker.input.placeholder"),onInput:m}),null,16,er),e.createElementVNode("button",{class:"ipb-media-picker__btn",type:"button",disabled:!d.value,onClick:_},e.toDisplayString(e.unref(g)("mediaPicker.clear")),9,tr),e.createElementVNode("button",{class:"ipb-media-picker__btn",type:"button",onClick:x},e.toDisplayString(e.unref(g)("mediaPicker.upload")),1)]),e.createElementVNode("div",nr,[d.value&&v.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"ipb-media-picker__image",src:a.value,alt:e.unref(g)("mediaPicker.preview.alt")},null,8,or)):(e.openBlock(),e.createElementBlock("p",rr,e.toDisplayString(e.unref(g)("mediaPicker.empty")),1))])],6))}}),ut=K(ar,[["__scopeId","data-v-743fe73e"]]),lr=Ee,ir={text:Ee,textarea:Ee,richtext:Jo,number:Po,boolean:Ro,select:Oo,color:Ho,image:ut,url:ut,json:Ee},dr=["aria-label"],sr={class:"ipb-right-drawer__header"},cr={class:"ipb-right-drawer__title",id:"ipb-right-drawer-title"},ur=["aria-label","aria-expanded"],pr={class:"ipb-right-drawer__section"},fr={class:"ipb-right-drawer__section-title"},mr={key:0,class:"ipb-right-drawer__description"},vr={class:"ipb-right-drawer__section"},gr={class:"ipb-right-drawer__section-subtitle"},br=["data-prop-key"],hr=["id"],yr={class:"ipb-right-drawer__actions"},_r=["aria-label"],wr=["disabled","aria-label"],kr={key:1,class:"ipb-right-drawer__empty"},re="ipb-right-drawer-content",Nr=e.defineComponent({__name:"RightDrawer",props:{open:{type:Boolean,default:!1},selectedNodeId:{type:Number,default:null},content:{type:Object,required:!0}},emits:["toggle","update-props","delete","duplicate"],setup(t,{emit:o}){const n=t,r=o,{t:l}=X(),a=e.ref(null),d=e.ref(null),v=e.ref(!1),m=e.computed(()=>n.selectedNodeId===null?null:u.findNodeById(n.content,n.selectedNodeId)??null),_=e.computed(()=>m.value?le(m.value.name)??null:null);function x(i){return m.value?m.value.props[i.key]??i.defaultValue??"":i.defaultValue??""}function g(i){return ir[i]??lr}function B(i){var I,T;const w=x(i);return i.type==="number"?{modelValue:w,min:(I=i.validation)==null?void 0:I.min,max:(T=i.validation)==null?void 0:T.max}:i.type==="select"?{modelValue:w,options:i.options??[]}:i.type==="image"||i.type==="url"?{modelValue:w}:i.type==="text"||i.type==="textarea"||i.type==="richtext"||i.type==="json"?{modelValue:w,placeholder:i.label}:{modelValue:w}}function E(i,w){m.value&&r("update-props",m.value.id,{[i]:w})}function C(i){return`ipb-right-drawer-prop-label-${i}`}function p(){const i=a.value;return i?i.querySelector(`#${re} input:not([disabled]), #${re} select:not([disabled]), #${re} textarea:not([disabled]), #${re} button:not([disabled]), #${re} [contenteditable]:not([contenteditable="false"]), #${re} [tabindex]:not([tabindex="-1"])`):null}function b(){var i;(i=p())==null||i.focus()}function c(){v.value=!n.open,r("toggle")}return e.watch(()=>n.open,(i,w)=>{var I;if(i&&!w&&v.value&&e.nextTick(()=>{b()}),!i&&w){const T=document.activeElement;T instanceof HTMLElement&&((I=a.value)!=null&&I.contains(T))&&e.nextTick(()=>{var P;(P=d.value)==null||P.focus()})}i!==w&&(v.value=!1)}),(i,w)=>(e.openBlock(),e.createElementBlock("aside",{ref_key:"drawerRef",ref:a,class:e.normalizeClass(["ipb-right-drawer",{"ipb-right-drawer--open":t.open}]),role:"complementary","aria-label":e.unref(l)("rightDrawer.aria.componentProperties")},[e.createElementVNode("div",sr,[e.createElementVNode("span",cr,e.toDisplayString(e.unref(l)("rightDrawer.title")),1),e.createElementVNode("button",{ref_key:"drawerToggleRef",ref:d,type:"button",class:"ipb-right-drawer__toggle","aria-label":e.unref(l)("rightDrawer.toggle.ariaLabel"),"aria-expanded":t.open?"true":"false","aria-controls":re,onClick:c},e.toDisplayString(t.open?"▶":"◀"),9,ur)]),t.open&&m.value&&_.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:re,class:"ipb-right-drawer__content",role:"region","aria-labelledby":"ipb-right-drawer-title"},[e.createElementVNode("div",pr,[e.createElementVNode("h3",fr,e.toDisplayString(_.value.label),1),_.value.description?(e.openBlock(),e.createElementBlock("p",mr,e.toDisplayString(_.value.description),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",vr,[e.createElementVNode("h4",gr,e.toDisplayString(e.unref(l)("rightDrawer.section.properties")),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value.editableProps,I=>(e.openBlock(),e.createElementBlock("div",{key:I.key,class:"ipb-right-drawer__prop","data-prop-key":I.key},[e.createElementVNode("label",{id:C(I.key),class:"ipb-right-drawer__prop-label"},e.toDisplayString(I.label),9,hr),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g(I.type)),e.mergeProps({class:"ipb-right-drawer__prop-editor"},{ref_for:!0},B(I),{"aria-labelledby":C(I.key),"onUpdate:modelValue":T=>E(I.key,T)}),null,16,["aria-labelledby","onUpdate:modelValue"]))],8,br))),128))]),e.createElementVNode("div",yr,[e.createElementVNode("button",{type:"button",class:"ipb-right-drawer__btn","aria-label":e.unref(l)("rightDrawer.actions.duplicate.ariaLabel"),onClick:w[0]||(w[0]=I=>r("duplicate",m.value.id))},e.toDisplayString(e.unref(l)("rightDrawer.actions.duplicate")),9,_r),e.createElementVNode("button",{type:"button",class:"ipb-right-drawer__btn ipb-right-drawer__btn--danger",disabled:m.value.readonly,"aria-label":e.unref(l)("rightDrawer.actions.delete.ariaLabel"),onClick:w[1]||(w[1]=I=>r("delete",m.value.id))},e.toDisplayString(e.unref(l)("rightDrawer.actions.delete")),9,wr)])])):t.open?(e.openBlock(),e.createElementBlock("div",kr,[e.createElementVNode("p",null,e.toDisplayString(e.unref(l)("rightDrawer.empty")),1)])):e.createCommentVNode("",!0)],10,dr))}}),xr=K(Nr,[["__scopeId","data-v-a25cd890"]]),Ot="@improba/page-builder/iframe-bridge",zt=1;function je(t,o,n){return{namespace:Ot,version:zt,sessionToken:n,channel:t,payload:o}}function Er(){var t,o;if(typeof((t=globalThis.crypto)==null?void 0:t.randomUUID)=="function")return globalThis.crypto.randomUUID();if(typeof((o=globalThis.crypto)==null?void 0:o.getRandomValues)=="function"){const n=new Uint8Array(16);return globalThis.crypto.getRandomValues(n),Array.from(n,r=>r.toString(16).padStart(2,"0")).join("")}return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function Ut(t){return je("lifecycle",{state:"ready"},t)}function Kt(t,o){return je("pointer",t,o)}function Ht(t,o){return je("keydown",t,o)}function De(t){return!!t&&typeof t=="object"}function Ir(t){if(!De(t))return null;const o=t.interaction,n=t.nodeId;if(o!=="hover"&&o!=="select"&&o!=="context"||n!==null&&typeof n!="number"||typeof n=="number"&&!Number.isInteger(n))return null;const r=n;if(o==="context"){const l=t.clientX,a=t.clientY;return typeof l!="number"||typeof a!="number"?null:{interaction:o,nodeId:r,clientX:l,clientY:a}}return{interaction:o,nodeId:r}}function Dr(t){return!De(t)||typeof t.key!="string"||typeof t.code!="string"||typeof t.ctrlKey!="boolean"||typeof t.metaKey!="boolean"||typeof t.shiftKey!="boolean"||typeof t.altKey!="boolean"||typeof t.defaultPrevented!="boolean"||typeof t.isEditable!="boolean"?null:{key:t.key,code:t.code,ctrlKey:t.ctrlKey,metaKey:t.metaKey,shiftKey:t.shiftKey,altKey:t.altKey,defaultPrevented:t.defaultPrevented,isEditable:t.isEditable}}function Br(t,o={}){if(!De(t)||t.namespace!==Ot||t.version!==zt||t.channel!=="keydown"&&t.channel!=="pointer"&&t.channel!=="lifecycle")return null;const n=t.sessionToken,r=typeof n=="string"&&n.length>0;if(o.expectedSessionToken){if(!r||n!==o.expectedSessionToken)return null}else if(!r&&!o.allowLegacyNoSessionToken)return null;const l=r?n:"";if(t.channel==="lifecycle")return!De(t.payload)||t.payload.state!=="ready"?null:Ut(l);if(t.channel==="pointer"){const d=Ir(t.payload);return d?Kt(d,l):null}const a=Dr(t.payload);return a?Ht(a,l):null}function Cr(t){const o=n=>{var l,a,d;if(n.source!==t.expectedSource||n.origin!==t.expectedOrigin)return;const r=Br(n.data,{expectedSessionToken:t.expectedSessionToken,allowLegacyNoSessionToken:t.allowLegacyNoSessionToken??!t.expectedSessionToken});if(r){if(r.channel==="lifecycle"){(l=t.onReady)==null||l.call(t);return}if(r.channel==="pointer"){(a=t.onPointer)==null||a.call(t,r.payload);return}(d=t.onKeydown)==null||d.call(t,r.payload)}};return t.hostWindow.addEventListener("message",o),{dispose:()=>{t.hostWindow.removeEventListener("message",o)}}}function Sr(t){return{postReady:()=>{t.targetWindow.postMessage(Ut(t.sessionToken),t.targetOrigin)},postPointer:o=>{t.targetWindow.postMessage(Kt(o,t.sessionToken),t.targetOrigin)},postKeydown:o=>{t.targetWindow.postMessage(Ht(o,t.sessionToken),t.targetOrigin)}}}function Pr(t){if(t.defaultPrevented||t.isEditable)return!1;const o=t.ctrlKey||t.metaKey,n=t.key.toLowerCase(),r=t.code.toLowerCase();return o&&(n==="z"||n==="y"||n==="s")?!0:(n==="delete"||n==="backspace"||r==="delete"||r==="backspace")&&!t.ctrlKey&&!t.metaKey&&!t.altKey}function Tr(t){const o=d=>{t.bridge.postPointer({interaction:"select",nodeId:t.resolveNodeId(d.target)})},n=d=>{t.bridge.postPointer({interaction:"hover",nodeId:t.resolveNodeId(d.target)})},r=()=>{t.bridge.postPointer({interaction:"hover",nodeId:null})},l=d=>{d.preventDefault(),t.bridge.postPointer({interaction:"context",nodeId:t.resolveNodeId(d.target),clientX:d.clientX,clientY:d.clientY})},a=d=>{const v={key:d.key,code:d.code,ctrlKey:d.ctrlKey,metaKey:d.metaKey,shiftKey:d.shiftKey,altKey:d.altKey,defaultPrevented:d.defaultPrevented,isEditable:t.isEditableTarget(d.target)||t.isEditableTarget(t.frameDocument.activeElement)};Pr(v)&&d.preventDefault(),t.bridge.postKeydown(v)};return t.contentRoot.addEventListener("click",o),t.contentRoot.addEventListener("mousemove",n),t.contentRoot.addEventListener("mouseleave",r),t.contentRoot.addEventListener("contextmenu",l),t.frameDocument.addEventListener("keydown",a),t.bridge.postReady(),()=>{t.contentRoot.removeEventListener("click",o),t.contentRoot.removeEventListener("mousemove",n),t.contentRoot.removeEventListener("mouseleave",r),t.contentRoot.removeEventListener("contextmenu",l),t.frameDocument.removeEventListener("keydown",a)}}const Vr=["aria-label"],Rr=["disabled","data-action","aria-disabled","onClick"],Lr=e.defineComponent({__name:"NodeContextMenu",props:{open:{type:Boolean,default:!1},x:{type:Number,default:0},y:{type:Number,default:0},canDelete:{type:Boolean,default:!0},canMoveUp:{type:Boolean,default:!1},canMoveDown:{type:Boolean,default:!1}},emits:["action","close"],setup(t,{emit:o}){const n=t,r=o,{t:l}=X(),a=e.computed(()=>({top:`${n.y}px`,left:`${n.x}px`})),d=e.computed(()=>[{key:"duplicate",label:l("contextMenu.duplicate")},{key:"move-up",label:l("contextMenu.moveUp"),disabled:!n.canMoveUp},{key:"move-down",label:l("contextMenu.moveDown"),disabled:!n.canMoveDown},{key:"delete",label:l("contextMenu.delete"),danger:!0,disabled:!n.canDelete}]);function v(p,b){b||r("action",p)}const m=e.ref(null),_=e.ref(null);function x(){return m.value?Array.from(m.value.querySelectorAll(".ipb-node-context-menu__item")).filter(p=>!p.disabled):[]}function g(){const[p]=x();p==null||p.focus()}function B(){_.value instanceof HTMLElement&&_.value.focus(),_.value=null}function E(p){var w,I,T,P;if(p.key==="Escape"){p.preventDefault(),r("close");return}if(p.key==="Tab"){p.preventDefault(),r("close");return}const b=x();if(b.length===0)return;const c=document.activeElement instanceof HTMLButtonElement?document.activeElement:null,i=c?b.indexOf(c):-1;if(p.key==="ArrowDown"){p.preventDefault();const D=i<0?0:(i+1)%b.length;(w=b[D])==null||w.focus();return}if(p.key==="ArrowUp"){p.preventDefault();const D=i<0?b.length-1:(i-1+b.length)%b.length;(I=b[D])==null||I.focus();return}if(p.key==="Home"){p.preventDefault(),(T=b[0])==null||T.focus();return}p.key==="End"&&(p.preventDefault(),(P=b[b.length-1])==null||P.focus())}function C(p){var c;const b=p.relatedTarget;if(!(b instanceof Node)){r("close");return}(c=m.value)!=null&&c.contains(b)||r("close")}return e.watch(()=>n.open,p=>{if(p){_.value=document.activeElement instanceof HTMLElement?document.activeElement:null,e.nextTick(()=>{g()});return}B()},{immediate:!0}),e.onBeforeUnmount(()=>{B()}),(p,b)=>t.open?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuRootRef",ref:m,class:"ipb-node-context-menu",style:e.normalizeStyle(a.value),role:"menu","aria-label":e.unref(l)("contextMenu.ariaLabel"),"aria-orientation":"vertical",tabindex:"-1",onClick:b[0]||(b[0]=e.withModifiers(()=>{},["stop"])),onContextmenu:b[1]||(b[1]=e.withModifiers(()=>{},["prevent"])),onKeydown:E,onFocusout:C},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,c=>(e.openBlock(),e.createElementBlock("button",{key:c.key,type:"button",class:e.normalizeClass(["ipb-node-context-menu__item",{"ipb-node-context-menu__item--danger":c.danger}]),disabled:c.disabled,"data-action":c.key,role:"menuitem","aria-disabled":c.disabled?"true":void 0,onClick:i=>v(c.key,c.disabled)},e.toDisplayString(c.label),11,Rr))),128))],44,Vr)):e.createCommentVNode("",!0)}}),$r=K(Lr,[["__scopeId","data-v-7a59845f"]]),Mr=["title"],Ae="ipb-iframe-canvas-content",pt="ipb-iframe-canvas-base-style",Ar=240,Or=320,zr=e.defineComponent({__name:"IframeCanvas",props:{content:{type:Object,required:!0},layout:{type:Object,default:null},variables:{type:Object,default:()=>({})},selectedNodeId:{type:Number,default:null},hoveredNodeId:{type:Number,default:null},viewport:{type:String,default:"desktop"},viewportWidth:{type:Number,default:null},viewportHeight:{type:Number,default:null}},emits:["select","hover","context-action","iframe-keydown","viewport-size-change"],setup(t,{emit:o}){const n=t,r=o,l=e.inject(Be,null),a=e.inject(Ce,null),{t:d}=X(),v=e.ref(null),m=e.ref(null),_=e.ref(null),x=e.ref(!1),g=e.ref(null),B=e.ref(null),E=e.ref(null),C=e.ref(null),p=e.ref(null),b=e.ref(null),c=e.ref({width:0,height:0}),i=e.ref(!1),w=e.ref(null),I=e.ref(null),T=e.ref(null),P=e.ref(!1),D=e.ref(null),M=e.ref(0),j=e.ref(0),z=e.ref(!1),H=e.ref(!1),ee=e.ref(!1),Z=e.computed(()=>{if(n.viewport==="custom")return{width:Math.max(Ar,Math.round(n.viewportWidth??ge.desktop.width)),height:Math.max(Or,Math.round(n.viewportHeight??ge.desktop.height))};const s=ge[n.viewport];return{width:s.width,height:s.height}}),be=e.computed(()=>({width:`min(100%, ${Z.value.width}px)`,height:`${Z.value.height}px`})),fe=e.computed(()=>w.value?{top:`${w.value.top}px`,left:`${w.value.left}px`,width:`${w.value.width}px`,height:`${w.value.height}px`}:null),me=e.computed(()=>I.value&&n.hoveredNodeId!==n.selectedNodeId?{top:`${I.value.top}px`,left:`${I.value.left}px`,width:`${I.value.width}px`,height:`${I.value.height}px`}:null),y=e.computed(()=>T.value?{top:`${T.value.top}px`,left:`${T.value.left}px`,width:`${T.value.width}px`,height:`${T.value.height}px`}:null);function L(s){return!s||typeof s!="object"?!1:s.nodeType===1}function f(s){if(s===null)return null;const h=Number(s);return Number.isInteger(h)?h:null}function N(s){if(!L(s))return null;const h=s.closest("[data-ipb-node-id]");return f((h==null?void 0:h.getAttribute("data-ipb-node-id"))??null)}function k(s,h){const S={...h,slot:h.slot??"default"};return{...s,children:[...s.children??[],S]}}function R(s){return s===null||!g.value?null:g.value.querySelector(`[data-ipb-node-id="${s}"]`)}function $(s){var O,W;if(!s||!g.value)return null;const h=s.getBoundingClientRect(),S=g.value.getBoundingClientRect(),V=((O=E.value)==null?void 0:O.scrollY)??0,U=((W=E.value)==null?void 0:W.scrollX)??0;return{top:h.top-S.top+V,left:h.left-S.left+U,width:h.width,height:h.height}}function A(s,h){return Math.max(0,Math.min(s,h))}function Y(s,h){return s.id===h?!0:s.children.some(S=>Y(S,h))}function G(s){var h;return s.sourceComponentName?s.sourceComponentName:s.sourceNodeId===null?null:((h=u.findNodeById(n.content,s.sourceNodeId))==null?void 0:h.name)??null}function J(s,h){const S=G(h);if(!S)return null;const V=s===null?null:u.findNodeById(n.content,s);if(V&&!V.readonly){const O=ae(V,"default",S);if(O)return{targetId:V.id,index:V.children.length,slot:O}}if(s!==null){const O=u.findParent(n.content,s);if(O&&!O.parent.readonly){const W=O.parent.children[O.index],te=ae(O.parent,(W==null?void 0:W.slot)??"default",S);if(te)return{targetId:O.parent.id,index:O.index+1,slot:te}}}if(n.content.readonly)return null;const U=ae(n.content,"default",S);return U?{targetId:n.content.id,index:n.content.children.length,slot:U}:null}function ie(s,h,S,V){const U=u.findNodeById(n.content,s),O=u.findParent(n.content,s),W=u.findNodeById(n.content,h);if(!U||!O||U.readonly)return{valid:!1};if(!W||W.readonly)return{valid:!1};if(s===h)return{valid:!1};if(Y(U,h))return{valid:!1};const te=ae(W,S,U.name);if(!te)return{valid:!1};const it=W.children.length;return O.parent.id===h&&O.index<V?{valid:!0,index:A(V-1,it),slot:te}:{valid:!0,index:A(V,it),slot:te}}function he(s){if(s.getElementById(pt))return;const h=s.createElement("style");h.id=pt,h.textContent=`
|
|
4
4
|
html, body {
|
|
5
5
|
margin: 0;
|
|
6
6
|
padding: 0;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
background: #fff;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
#${
|
|
15
|
+
#${Ae} {
|
|
16
16
|
position: relative;
|
|
17
17
|
width: 100%;
|
|
18
18
|
max-width: 100%;
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
[data-ipb-component="PbRow"] {
|
|
30
30
|
min-height: 80px;
|
|
31
31
|
}
|
|
32
|
-
`,c.head.appendChild(_)}function Ee(c){if(!c.body)return null;ce(c);let _=c.getElementById(qe);return _||(_=c.createElement("div"),_.id=qe,c.body.innerHTML="",c.body.appendChild(_)),_}function Se(){v.value&&e.render(e.h(dt,{node:n.content,variables:n.variables,markNodes:!0}),v.value)}function ye(){v.value&&e.render(null,v.value)}function _e(){if(!v.value)return;v.value.querySelectorAll("[data-ipb-node-id]").forEach(_=>{const S=m(_.getAttribute("data-ipb-node-id")),P=S===null?null:A(n.content,S);_.draggable=!!(P&&!P.readonly&&P.id!==n.content.id)})}function le(){y.value=V(w(n.selectedNodeId)),x.value=V(w(n.hoveredNodeId));const c=a?a.dragState.value.dropTargetId:null;B.value=c===null?null:V(w(c))}function Te(){return p.value?{width:Math.round(p.value.clientWidth),height:Math.round(p.value.clientHeight)}:{width:0,height:0}}function Be(){const c=Te();s.value&&c.width===d.value.width&&c.height===d.value.height||(d.value=c,s.value=!0,r("viewport-size-change",c))}function xe(){le(),Be()}function ut(){var c;(c=b.value)==null||c.disconnect(),b.value=null}function xn(){if(ut(),typeof ResizeObserver>"u"||!p.value||!v.value)return;const c=new ResizeObserver(()=>{xe()});c.observe(p.value),c.observe(v.value),b.value=c}async function ue(){await e.nextTick(),Se(),await e.nextTick(),_e(),le(),Be()}function fe(){B.value=null}function ne(){T.value=!1,I.value=null}function In(){ne(),r("select",null),r("hover",null)}function ft(c){c.stopPropagation(),ne();const _=N(c.target);r("select",_)}function pt(c){const _=N(c.target);_!==n.hoveredNodeId&&r("hover",_)}function mt(){r("hover",null)}function gt(c){if(!a)return;const _=N(c.target);if(_===null)return;const S=A(n.content,_);if(!S||S.readonly||S.id===n.content.id){c.preventDefault();return}a.startDragExisting(_),c.dataTransfer&&(c.dataTransfer.effectAllowed="move",c.dataTransfer.setData("text/plain",String(_)))}function vt(c){if(!a||!a.dragState.value.isDragging)return;const _=N(c.target),S=q(_,a.dragState.value);if(!S){fe();return}c.preventDefault(),a.updateDropTarget(S.targetId,S.index,S.slot),B.value=V(w(S.targetId)),c.dataTransfer&&(c.dataTransfer.dropEffect=a.dragState.value.isNewComponent?"copy":"move")}function bt(c){if(!v.value)return;const _=c.relatedTarget;_&&typeof _=="object"&&"nodeType"in _&&v.value.contains(_)||fe()}function ht(c){var z;if(c.preventDefault(),!a||!l||!a.dragState.value.isDragging){fe();return}const _=N(c.target),S=q(_,a.dragState.value);if(!S){a.cancelDrag(),fe();return}a.updateDropTarget(S.targetId,S.index,S.slot);const P=a.endDrag();if(fe(),P.dropTargetId===null)return;if(P.isNewComponent&&P.sourceComponentName){const W=(z=de(P.sourceComponentName))==null?void 0:z.defaultProps,ae=l.addNode(P.dropTargetId,P.sourceComponentName,P.dropIndex,P.dropSlot,W);ae!==null&&r("select",ae);return}if(P.sourceNodeId===null)return;const K=re(P.sourceNodeId,P.dropTargetId,P.dropSlot,P.dropIndex);K.valid&&(l.moveNodeTo(P.sourceNodeId,P.dropTargetId,K.index,K.slot),r("select",P.sourceNodeId))}function yt(){a!=null&&a.dragState.value.isDragging&&a.cancelDrag(),fe()}function _t(c){const _=A(n.content,c);if(_!=null&&_.readonly){U.value=!1,F.value=!1,oe.value=!1;return}const S=G(n.content,c);if(!S){U.value=!1,F.value=!1,oe.value=!1;return}U.value=!0,F.value=S.index>0,oe.value=S.index<S.parent.children.length-1}function wt(c){var z,W;c.preventDefault(),c.stopPropagation();const _=N(c.target);if(_===null||!v.value){ne();return}const S=v.value.getBoundingClientRect(),P=((z=E.value)==null?void 0:z.scrollY)??0,K=((W=E.value)==null?void 0:W.scrollX)??0;L.value=c.clientX-S.left+K,Y.value=c.clientY-S.top+P,I.value=_,_t(_),T.value=!0,r("select",_)}function Dn(c){I.value!==null&&(r("context-action",{action:c,nodeId:I.value}),ne())}function Cn(c){if(!R(c))return!1;const _=c.tagName.toLowerCase();return _==="input"||_==="textarea"||_==="select"?!0:!!c.closest('[contenteditable]:not([contenteditable="false"])')}function Sn(c){var K,z;if(c.interaction==="hover"){c.nodeId!==n.hoveredNodeId&&r("hover",c.nodeId);return}if(c.interaction==="select"){ne(),r("select",c.nodeId);return}if(c.interaction!=="context")return;if(c.nodeId===null||!v.value){ne();return}const _=v.value.getBoundingClientRect(),S=((K=E.value)==null?void 0:K.scrollY)??0,P=((z=E.value)==null?void 0:z.scrollX)??0;L.value=c.clientX-_.left+P,Y.value=c.clientY-_.top+S,I.value=c.nodeId,_t(c.nodeId),T.value=!0,r("select",c.nodeId)}function Tn(c){c.key==="Escape"&&ne(),r("iframe-keydown",{...c,preventDefault:()=>{}})}function kt(c){try{return c.location.origin}catch{return window.location.origin}}function Nt(){var c,_;(c=C.value)==null||c.call(C),C.value=null,(_=f.value)==null||_.call(f),f.value=null}function Bn(){const c=E.value,_=D.value,S=v.value;if(!c||!_||!S)return;Nt();const P=xa(),K=Sa({hostWindow:window,expectedSource:window,expectedOrigin:kt(window),expectedSessionToken:P,onReady:()=>{ue()},onPointer:Sn,onKeydown:Tn}),z=Ta({targetWindow:window,targetOrigin:kt(window),sessionToken:P});C.value=()=>K.dispose(),f.value=Pa({frameDocument:_,contentRoot:S,bridge:z,resolveNodeId:N,isEditableTarget:Cn})}function we(){xe()}function Ue(){ut(),Nt(),v.value&&(v.value.removeEventListener("click",ft),v.value.removeEventListener("contextmenu",wt),v.value.removeEventListener("mousemove",pt),v.value.removeEventListener("mouseleave",mt),v.value.removeEventListener("dragstart",gt),v.value.removeEventListener("dragover",vt),v.value.removeEventListener("dragleave",bt),v.value.removeEventListener("drop",ht),v.value.removeEventListener("dragend",yt)),!k.value&&E.value&&(E.value.removeEventListener("scroll",we),E.value.removeEventListener("resize",we))}function Et(){v.value&&(k.value?(v.value.addEventListener("click",ft),v.value.addEventListener("contextmenu",wt),v.value.addEventListener("mousemove",pt),v.value.addEventListener("mouseleave",mt)):Bn(),v.value.addEventListener("dragstart",gt),v.value.addEventListener("dragover",vt),v.value.addEventListener("dragleave",bt),v.value.addEventListener("drop",ht),v.value.addEventListener("dragend",yt),!k.value&&E.value&&(E.value.addEventListener("scroll",we),E.value.addEventListener("resize",we)),xn())}function Ke(){k.value=!0,e.nextTick().then(()=>{g.value&&(Ue(),ye(),D.value=null,E.value=null,v.value=g.value,Et(),ue())})}function He(){const c=u.value;if(!c){Ke();return}const _=c.contentDocument,S=c.contentWindow;if(!_||!S){Ke();return}const P=Ee(_);if(!P){Ke();return}Ue(),ye(),k.value=!1,D.value=_,E.value=S,v.value=P,Et(),ue()}return e.watch(()=>[n.selectedNodeId,n.hoveredNodeId],()=>{ue()},{immediate:!0}),e.watch(()=>[n.viewport,n.viewportWidth,n.viewportHeight],()=>{ue()}),e.watch(()=>n.content,()=>{I.value!==null&&!A(n.content,I.value)&&ne(),ue()},{deep:!0}),e.watch(()=>n.variables,()=>{ue()},{deep:!0}),e.watch(()=>(a==null?void 0:a.dragState.value.isDragging)??!1,c=>{c||fe()}),e.onMounted(()=>{var c;window.addEventListener("resize",we),(c=u.value)==null||c.addEventListener("load",He),He()}),e.onBeforeUnmount(()=>{var c;window.removeEventListener("resize",we),(c=u.value)==null||c.removeEventListener("load",He),Ue(),ye()}),(c,_)=>(e.openBlock(),e.createElementBlock("main",{class:"ipb-canvas",onClick:In,onContextmenu:e.withModifiers(ne,["prevent"])},[e.createElementVNode("div",{class:"ipb-canvas__viewport",style:e.normalizeStyle(Ne.value)},[e.createElementVNode("div",{ref_key:"stageRef",ref:p,class:"ipb-iframe-canvas__stage"},[k.value?(e.openBlock(),e.createElementBlock("div",{key:1,ref_key:"fallbackContentRef",ref:g,id:"ipb-iframe-canvas-content",class:"ipb-iframe-canvas__fallback"},null,512)):(e.openBlock(),e.createElementBlock("iframe",{key:0,ref_key:"iframeRef",ref:u,class:"ipb-iframe-canvas__frame",title:e.unref(i)("iframeCanvas.title"),sandbox:"allow-same-origin"},null,8,Aa)),h.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"ipb-canvas__overlay ipb-canvas__overlay--drop",style:e.normalizeStyle(h.value)},null,4)):e.createCommentVNode("",!0),he.value?(e.openBlock(),e.createElementBlock("div",{key:3,class:"ipb-canvas__overlay ipb-canvas__overlay--hovered",style:e.normalizeStyle(he.value)},null,4)):e.createCommentVNode("",!0),be.value?(e.openBlock(),e.createElementBlock("div",{key:4,class:"ipb-canvas__overlay ipb-canvas__overlay--selected",style:e.normalizeStyle(be.value)},null,4)):e.createCommentVNode("",!0),e.createVNode(La,{open:T.value,x:L.value,y:Y.value,"can-delete":U.value,"can-move-up":F.value,"can-move-down":oe.value,onAction:Dn,onClose:ne},null,8,["open","x","y","can-delete","can-move-up","can-move-down"])],512)],4)],32))}}),Ua=H(za,[["__scopeId","data-v-3d599a49"]]),Ka={class:"ipb-page-editor"},Ha={class:"ipb-page-editor__body"},ja=e.defineComponent({__name:"PageEditor",props:{pageData:{type:Object,required:!0}},emits:["save","change"],setup(t,{emit:o}){const n=t,r=o,l=cn({initialData:n.pageData,mode:"edit"}),a=un({initialSnapshot:l.getSnapshot()}),i=mn(),u=fn({content:l.content,nextId:l.nextId,onUpdate:h=>{l.updateContent(h),r("change",h)},onSnapshot:h=>{a.pushHistory(h,l.getSnapshot())}}),p=e.ref(1024),g=e.ref(768),k=e.ref(null),v=e.ref(null);function D(){r("save",{content:l.content.value,layout:l.layout.value,maxId:l.maxId.value})}function E(h){if(!h)return!1;try{l.restoreSnapshot(h);const R=a.selectedNodeId.value;return R!==null&&!A(l.content.value,R)&&a.selectNode(null),r("change",l.content.value),!0}catch(R){return j("INVALID_SNAPSHOT","[PageBuilder] Failed to apply history snapshot. Undo/redo step was skipped.",{cause:R,details:{snapshotPreview:h.slice(0,200)}}),!1}}function C(){E(a.undo())}function f(){E(a.redo())}function b(h){const R=A(l.content.value,h);!R||R.readonly||u.deleteNode(h)}function d(h){A(l.content.value,h)&&u.duplicateNode(h)}function s(h){const R=A(l.content.value,h);!R||R.readonly||u.canMoveNodeUp(h)&&u.moveNodeUp(h)}function y(h){const R=A(l.content.value,h);!R||R.readonly||u.canMoveNodeDown(h)&&u.moveNodeDown(h)}function x(h){if(h.action==="duplicate"){d(h.nodeId);return}if(h.action==="delete"){b(h.nodeId);return}if(h.action==="move-up"){s(h.nodeId);return}h.action==="move-down"&&y(h.nodeId)}function B(h){if(!h||typeof h!="object"||!("nodeType"in h)||h.nodeType!==1)return!1;const R=h,m=R.tagName.toLowerCase();return m==="input"||m==="textarea"||m==="select"?!0:!!R.closest('[contenteditable]:not([contenteditable="false"])')}function T(){const h=a.selectedNodeId.value;h!==null&&b(h)}function I(h){if(h.defaultPrevented||h.isEditable)return;const R=h.ctrlKey||h.metaKey,m=h.key.toLowerCase(),N=h.code.toLowerCase();if(R&&m==="z"){h.preventDefault(),h.shiftKey?f():C();return}if(R&&m==="y"){h.preventDefault(),f();return}if(R&&m==="s"){h.preventDefault(),D();return}(m==="delete"||m==="backspace"||N==="delete"||N==="backspace")&&!h.ctrlKey&&!h.metaKey&&!h.altKey&&(h.preventDefault(),T())}function L(h){I({key:h.key,code:h.code,ctrlKey:h.ctrlKey,metaKey:h.metaKey,shiftKey:h.shiftKey,altKey:h.altKey,defaultPrevented:h.defaultPrevented,isEditable:B(h.target)||B(document.activeElement),preventDefault:()=>h.preventDefault()})}function Y(h){I(h)}function U(h){const R=ke[h];return h==="custom"?{width:p.value,height:g.value}:{width:R.width,height:R.height}}function F(h){if(h==="custom"&&a.viewport.value!=="custom")if(k.value!==null&&v.value!==null)p.value=k.value,g.value=v.value;else{const R=U(a.viewport.value);p.value=R.width,g.value=R.height}a.setViewport(h)}function oe(h){p.value=h.width,g.value=h.height,a.viewport.value!=="custom"&&a.setViewport("custom")}function te(h){k.value=h.width,v.value=h.height}function Ne(h){i.startDragNew(h)}function be(){i.cancelDrag()}function he(h){var J;const R=a.selectedNodeId.value,m=R!==null?A(l.content.value,R):void 0;let N=l.content.value.id,w=l.content.value.children.length,V="default";if(R!==null&&m){const q=G(l.content.value,R);q?(N=q.parent.id,w=q.index+1,V=m.slot??"default"):(N=m.id,w=m.children.length)}const M=(J=de(h))==null?void 0:J.defaultProps,O=u.addNode(N,h,w,V,M);O!==null&&a.selectNode(O)}return e.onMounted(()=>{window.addEventListener("keydown",L)}),e.onUnmounted(()=>{window.removeEventListener("keydown",L)}),e.provide(sn,l),e.provide(dn,a),e.provide(Oe,u),e.provide(ze,i),(h,R)=>(e.openBlock(),e.createElementBlock("div",Ka,[e.createVNode(Fo,{"can-undo":e.unref(a).canUndo.value,"can-redo":e.unref(a).canRedo.value,"is-dirty":e.unref(l).isDirty.value,viewport:e.unref(a).viewport.value,"custom-viewport-width":p.value,"custom-viewport-height":g.value,"active-viewport-width":k.value,"active-viewport-height":v.value,onUndo:C,onRedo:f,onSave:D,onViewportChange:F,onCustomViewportChange:oe},null,8,["can-undo","can-redo","is-dirty","viewport","custom-viewport-width","custom-viewport-height","active-viewport-width","active-viewport-height"]),e.createElementVNode("div",Ha,[e.createVNode(Ir,{open:e.unref(a).leftDrawerOpen.value,content:e.unref(l).content.value,"selected-node-id":e.unref(a).selectedNodeId.value,onToggle:e.unref(a).toggleLeftDrawer,onSelect:e.unref(a).selectNode,onAdd:he,onDragStart:Ne,onDragEnd:be},null,8,["open","content","selected-node-id","onToggle","onSelect"]),e.createVNode(Ua,{content:e.unref(l).content.value,variables:e.unref(l).variables.value,"selected-node-id":e.unref(a).selectedNodeId.value,"hovered-node-id":e.unref(a).hoveredNodeId.value,viewport:e.unref(a).viewport.value,"viewport-width":e.unref(a).viewport.value==="custom"?p.value:null,"viewport-height":e.unref(a).viewport.value==="custom"?g.value:null,onSelect:e.unref(a).selectNode,onHover:e.unref(a).hoverNode,onContextAction:x,onIframeKeydown:Y,onViewportSizeChange:te},null,8,["content","variables","selected-node-id","hovered-node-id","viewport","viewport-width","viewport-height","onSelect","onHover"]),e.createVNode(Ea,{open:e.unref(a).rightDrawerOpen.value,"selected-node-id":e.unref(a).selectedNodeId.value,content:e.unref(l).content.value,onToggle:e.unref(a).toggleRightDrawer,onUpdateProps:e.unref(u).updateNodeProps,onDelete:b,onDuplicate:d},null,8,["open","selected-node-id","content","onToggle","onUpdateProps"])])]))}}),Nn=H(ja,[["__scopeId","data-v-2a96c483"]]),Fa={key:0,class:"ipb-page-builder__warning",role:"alert"},Wa=e.defineComponent({__name:"PageBuilder",props:{pageData:{type:Object,required:!0},mode:{type:String,default:"read"},locale:{type:String,default:void 0},messages:{type:Object,default:void 0}},emits:["save","change"],setup(t){const o=t,n=new Set;function r(E,C,f){n.has(E)||(n.add(E),j("INVALID_PAGE_DATA",C,{details:f}),void 0)}const l=e.computed(()=>o.pageData),a=e.computed(()=>o.mode==="read"||o.mode==="edit"?o.mode:(r("invalid-mode",`[PageBuilder] Unknown mode "${String(o.mode)}". Falling back to "read".`,{mode:o.mode}),"read")),i=e.computed(()=>rt(l.value)),u=e.computed(()=>{const E=De(l.value.content,"content"),C=De(l.value.layout,"layout");return E.isValid&&C.isValid}),p=e.computed(()=>a.value==="edit"&&!u.value),g=e.inject(Zt,null),k=e.computed(()=>o.locale??(g==null?void 0:g.locale)??Le),v=e.computed(()=>qt(at,g==null?void 0:g.messages,o.messages)),D=lt(()=>k.value,()=>v.value);return e.watch(i,E=>{E.isValid||r("invalid-page-data","[PageBuilder] Invalid pageData payload detected. Rendering continues with degraded behavior.",{errors:E.errors})},{immediate:!0}),e.provide(Jt,{locale:k,t:D}),(E,C)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[p.value?(e.openBlock(),e.createElementBlock("div",Fa,e.toDisplayString(e.unref(D)("pageBuilder.warning.invalidEditMode")),1)):e.createCommentVNode("",!0),a.value==="read"||p.value?(e.openBlock(),e.createBlock(ln,{key:1,"page-data":l.value},null,8,["page-data"])):(e.openBlock(),e.createBlock(Nn,{key:2,"page-data":l.value,onSave:C[0]||(C[0]=f=>E.$emit("save",f)),onChange:C[1]||(C[1]=f=>E.$emit("change",f))},null,8,["page-data"]))],64))}}),En=H(Wa,[["__scopeId","data-v-84b8d079"]]),Rt=new WeakSet;function $t(t){const o=[];for(const n of t){const r=n.name.trim(),l=de(r);if(!l){o.push(n);continue}if(l.component!==n.component)throw j("DUPLICATE_COMPONENT",`[PageBuilder] Component "${r}" is already registered with a different implementation.`,{details:{componentName:r}})}o.length>0&&At(o)}const Ga={install(t,o={}){if(Rt.has(t))return;Rt.add(t);const{components:n=[],registerBuiltIn:r=!0,globalName:l="PageBuilder",locale:a,messages:i}=o;t.provide(Zt,{locale:a,messages:i}),r&&$t(Yt),n.length>0&&$t(n),l!==!1&&t.component(l,En)}},Ya={type:Object};exports.DEFAULT_LOCALE=Le;exports.DRAG_DROP_KEY=ze;exports.EDITOR_KEY=dn;exports.NODE_TREE_KEY=Oe;exports.NodeRenderer=dt;exports.PAGE_BUILDER_KEY=sn;exports.PageBuilder=En;exports.PageBuilderError=Qe;exports.PageBuilderPlugin=Ga;exports.PageEditor=Nn;exports.PageReader=ln;exports.PbColumn=zt;exports.PbContainer=Gt;exports.PbImage=jt;exports.PbRow=Ut;exports.PbSection=Wt;exports.PbText=Ht;exports.PbVideo=Ft;exports.VIEWPORT_PRESETS=ke;exports.builderOptionsPropType=Ya;exports.builtInComponents=Yt;exports.clearRegistry=Un;exports.cloneTree=en;exports.computeWindowRange=bn;exports.countNodes=vo;exports.createNode=on;exports.createStableNodeKey=gn;exports.createTranslator=lt;exports.createVirtualTreeIndexMaps=Yo;exports.defaultTranslations=at;exports.findNodeById=A;exports.findParent=G;exports.flattenTree=vn;exports.getComponent=de;exports.getComponentsByCategory=Ot;exports.getMaxId=ve;exports.getRegisteredComponents=On;exports.hasComponent=zn;exports.insertNode=it;exports.interpolateProps=rn;exports.isPageBuilderError=Rn;exports.mergeTranslations=qt;exports.moveNode=nn;exports.normalizeSafeHtmlTag=ot;exports.registerComponent=Ln;exports.registerComponents=At;exports.removeNode=tn;exports.replaceComponent=An;exports.resolveComponent=Mt;exports.sanitizeRichTextHtml=nt;exports.sanitizeUrlByKind=Z;exports.sliceWindow=Go;exports.translate=Xt;exports.unregisterComponent=Mn;exports.useDragDrop=mn;exports.useEditor=un;exports.useNodeTree=fn;exports.usePageBuilder=cn;exports.usePageBuilderI18n=ee;exports.validateNode=De;exports.validatePageData=rt;exports.walkTree=st;
|
|
32
|
+
|
|
33
|
+
[data-ipb-readonly="true"] {
|
|
34
|
+
opacity: 0.6;
|
|
35
|
+
user-select: none;
|
|
36
|
+
}
|
|
37
|
+
`,s.head.appendChild(h)}function ke(s){if(!s.body)return null;he(s);let h=s.getElementById(Ae);return h||(h=s.createElement("div"),h.id=Ae,s.body.innerHTML="",s.body.appendChild(h)),h}function Ne(){if(!g.value)return;const s=n.layout?k(n.layout,n.content):n.content;e.render(e.h(We,{node:s,variables:n.variables,markNodes:!0}),g.value)}function ne(){g.value&&e.render(null,g.value)}function de(){if(!g.value)return;g.value.querySelectorAll("[data-ipb-node-id]").forEach(h=>{const S=f(h.getAttribute("data-ipb-node-id")),V=S===null?null:u.findNodeById(n.content,S);h.draggable=!!(V&&!V.readonly&&V.id!==n.content.id)})}function ye(){w.value=$(R(n.selectedNodeId)),I.value=$(R(n.hoveredNodeId));const s=a?a.dragState.value.dropTargetId:null;T.value=s===null?null:$(R(s))}function Se(){return m.value?{width:Math.round(m.value.clientWidth),height:Math.round(m.value.clientHeight)}:{width:0,height:0}}function _e(){const s=Se();i.value&&s.width===c.value.width&&s.height===c.value.height||(c.value=s,i.value=!0,r("viewport-size-change",s))}function Fe(){ye(),_e()}function Ye(){var s;(s=b.value)==null||s.disconnect(),b.value=null}function Ft(){if(Ye(),typeof ResizeObserver>"u"||!m.value||!g.value)return;const s=new ResizeObserver(()=>{Fe()});s.observe(m.value),s.observe(g.value),b.value=s}async function oe(){await e.nextTick(),Ne(),await e.nextTick(),de(),ye(),_e()}function se(){T.value=null}function Q(){P.value=!1,D.value=null}function Yt(){Q(),r("select",null),r("hover",null)}function Ge(s){s.stopPropagation(),Q();const h=N(s.target);if(h!==null&&!u.findNodeById(n.content,h)){r("select",null);return}r("select",h)}function qe(s){const h=N(s.target);if(h!==null&&!u.findNodeById(n.content,h)){n.hoveredNodeId!==null&&r("hover",null);return}h!==n.hoveredNodeId&&r("hover",h)}function Xe(){r("hover",null)}function Ze(s){if(!a)return;const h=N(s.target);if(h===null)return;const S=u.findNodeById(n.content,h);if(!S||S.readonly||S.id===n.content.id){s.preventDefault();return}a.startDragExisting(h),s.dataTransfer&&(s.dataTransfer.effectAllowed="move",s.dataTransfer.setData("text/plain",String(h)))}function Je(s){if(!a||!a.dragState.value.isDragging)return;const h=N(s.target),S=J(h,a.dragState.value);if(!S){se();return}s.preventDefault(),a.updateDropTarget(S.targetId,S.index,S.slot),T.value=$(R(S.targetId)),s.dataTransfer&&(s.dataTransfer.dropEffect=a.dragState.value.isNewComponent?"copy":"move")}function Qe(s){if(!g.value)return;const h=s.relatedTarget;h&&typeof h=="object"&&"nodeType"in h&&g.value.contains(h)||se()}function et(s){var O;if(s.preventDefault(),!a||!l||!a.dragState.value.isDragging){se();return}const h=N(s.target),S=J(h,a.dragState.value);if(!S){a.cancelDrag(),se();return}a.updateDropTarget(S.targetId,S.index,S.slot);const V=a.endDrag();if(se(),V.dropTargetId===null)return;if(V.isNewComponent&&V.sourceComponentName){const W=(O=le(V.sourceComponentName))==null?void 0:O.defaultProps,te=l.addNode(V.dropTargetId,V.sourceComponentName,V.dropIndex,V.dropSlot,W);te!==null&&r("select",te);return}if(V.sourceNodeId===null)return;const U=ie(V.sourceNodeId,V.dropTargetId,V.dropSlot,V.dropIndex);U.valid&&(l.moveNodeTo(V.sourceNodeId,V.dropTargetId,U.index,U.slot),r("select",V.sourceNodeId))}function tt(){a!=null&&a.dragState.value.isDragging&&a.cancelDrag(),se()}function nt(s){const h=u.findNodeById(n.content,s);if(h!=null&&h.readonly){z.value=!1,H.value=!1,ee.value=!1;return}const S=u.findParent(n.content,s);if(!S){z.value=!1,H.value=!1,ee.value=!1;return}z.value=!0,H.value=S.index>0,ee.value=S.index<S.parent.children.length-1}function ot(s){var O,W;s.preventDefault(),s.stopPropagation();const h=N(s.target);if(h===null||!g.value||!u.findNodeById(n.content,h)){Q();return}const S=g.value.getBoundingClientRect(),V=((O=E.value)==null?void 0:O.scrollY)??0,U=((W=E.value)==null?void 0:W.scrollX)??0;M.value=s.clientX-S.left+U,j.value=s.clientY-S.top+V,D.value=h,nt(h),P.value=!0,r("select",h)}function Gt(s){D.value!==null&&(r("context-action",{action:s,nodeId:D.value}),Q())}function qt(s){if(!L(s))return!1;const h=s.tagName.toLowerCase();return h==="input"||h==="textarea"||h==="select"?!0:!!s.closest('[contenteditable]:not([contenteditable="false"])')}function Xt(s){var U,O;if(s.interaction==="hover"){if(s.nodeId!==null&&!u.findNodeById(n.content,s.nodeId)){n.hoveredNodeId!==null&&r("hover",null);return}s.nodeId!==n.hoveredNodeId&&r("hover",s.nodeId);return}if(s.interaction==="select"){if(Q(),s.nodeId!==null&&!u.findNodeById(n.content,s.nodeId)){r("select",null);return}r("select",s.nodeId);return}if(s.interaction!=="context")return;if(s.nodeId===null||!g.value||!u.findNodeById(n.content,s.nodeId)){Q();return}const h=g.value.getBoundingClientRect(),S=((U=E.value)==null?void 0:U.scrollY)??0,V=((O=E.value)==null?void 0:O.scrollX)??0;M.value=s.clientX-h.left+V,j.value=s.clientY-h.top+S,D.value=s.nodeId,nt(s.nodeId),P.value=!0,r("select",s.nodeId)}function Zt(s){s.key==="Escape"&&Q(),r("iframe-keydown",{...s,preventDefault:()=>{}})}function rt(s){try{return s.location.origin}catch{return window.location.origin}}function at(){var s,h;(s=C.value)==null||s.call(C),C.value=null,(h=p.value)==null||h.call(p),p.value=null}function Jt(){const s=E.value,h=B.value,S=g.value;if(!s||!h||!S)return;at();const V=Er(),U=Cr({hostWindow:window,expectedSource:window,expectedOrigin:rt(window),expectedSessionToken:V,onReady:()=>{oe()},onPointer:Xt,onKeydown:Zt}),O=Sr({targetWindow:window,targetOrigin:rt(window),sessionToken:V});C.value=()=>U.dispose(),p.value=Tr({frameDocument:h,contentRoot:S,bridge:O,resolveNodeId:N,isEditableTarget:qt})}function ve(){Fe()}function Pe(){Ye(),at(),g.value&&(g.value.removeEventListener("click",Ge),g.value.removeEventListener("contextmenu",ot),g.value.removeEventListener("mousemove",qe),g.value.removeEventListener("mouseleave",Xe),g.value.removeEventListener("dragstart",Ze),g.value.removeEventListener("dragover",Je),g.value.removeEventListener("dragleave",Qe),g.value.removeEventListener("drop",et),g.value.removeEventListener("dragend",tt)),!x.value&&E.value&&(E.value.removeEventListener("scroll",ve),E.value.removeEventListener("resize",ve))}function lt(){g.value&&(x.value?(g.value.addEventListener("click",Ge),g.value.addEventListener("contextmenu",ot),g.value.addEventListener("mousemove",qe),g.value.addEventListener("mouseleave",Xe)):Jt(),g.value.addEventListener("dragstart",Ze),g.value.addEventListener("dragover",Je),g.value.addEventListener("dragleave",Qe),g.value.addEventListener("drop",et),g.value.addEventListener("dragend",tt),!x.value&&E.value&&(E.value.addEventListener("scroll",ve),E.value.addEventListener("resize",ve)),Ft())}function Te(){x.value=!0,e.nextTick().then(()=>{_.value&&(Pe(),ne(),B.value=null,E.value=null,g.value=_.value,lt(),oe())})}function Ve(){const s=v.value;if(!s){Te();return}const h=s.contentDocument,S=s.contentWindow;if(!h||!S){Te();return}const V=ke(h);if(!V){Te();return}Pe(),ne(),x.value=!1,B.value=h,E.value=S,g.value=V,lt(),oe()}return e.watch(()=>[n.selectedNodeId,n.hoveredNodeId],()=>{oe()},{immediate:!0}),e.watch(()=>[n.viewport,n.viewportWidth,n.viewportHeight],()=>{oe()}),e.watch(()=>n.content,()=>{D.value!==null&&!u.findNodeById(n.content,D.value)&&Q(),oe()},{deep:!0}),e.watch(()=>n.variables,()=>{oe()},{deep:!0}),e.watch(()=>n.layout,()=>{oe()},{deep:!0}),e.watch(()=>(a==null?void 0:a.dragState.value.isDragging)??!1,s=>{s||se()}),e.onMounted(()=>{var s;window.addEventListener("resize",ve),(s=v.value)==null||s.addEventListener("load",Ve),Ve()}),e.onBeforeUnmount(()=>{var s;window.removeEventListener("resize",ve),(s=v.value)==null||s.removeEventListener("load",Ve),Pe(),ne()}),(s,h)=>(e.openBlock(),e.createElementBlock("main",{class:"ipb-canvas",onClick:Yt,onContextmenu:e.withModifiers(Q,["prevent"])},[e.createElementVNode("div",{class:"ipb-canvas__viewport",style:e.normalizeStyle(be.value)},[e.createElementVNode("div",{ref_key:"stageRef",ref:m,class:"ipb-iframe-canvas__stage"},[x.value?(e.openBlock(),e.createElementBlock("div",{key:1,ref_key:"fallbackContentRef",ref:_,id:"ipb-iframe-canvas-content",class:"ipb-iframe-canvas__fallback"},null,512)):(e.openBlock(),e.createElementBlock("iframe",{key:0,ref_key:"iframeRef",ref:v,class:"ipb-iframe-canvas__frame",title:e.unref(d)("iframeCanvas.title"),sandbox:"allow-same-origin"},null,8,Mr)),y.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"ipb-canvas__overlay ipb-canvas__overlay--drop",style:e.normalizeStyle(y.value)},null,4)):e.createCommentVNode("",!0),me.value?(e.openBlock(),e.createElementBlock("div",{key:3,class:"ipb-canvas__overlay ipb-canvas__overlay--hovered",style:e.normalizeStyle(me.value)},null,4)):e.createCommentVNode("",!0),fe.value?(e.openBlock(),e.createElementBlock("div",{key:4,class:"ipb-canvas__overlay ipb-canvas__overlay--selected",style:e.normalizeStyle(fe.value)},null,4)):e.createCommentVNode("",!0),e.createVNode($r,{open:P.value,x:M.value,y:j.value,"can-delete":z.value,"can-move-up":H.value,"can-move-down":ee.value,onAction:Gt,onClose:Q},null,8,["open","x","y","can-delete","can-move-up","can-move-down"])],512)],4)],32))}}),Ur=K(zr,[["__scopeId","data-v-866e17d3"]]),Kr={class:"ipb-page-editor"},Hr={class:"ipb-page-editor__body"},Wr=e.defineComponent({__name:"PageEditor",props:{pageData:{type:Object,required:!0}},emits:["save","change"],setup(t,{emit:o}){const n=t,r=o,l=Rt({initialData:n.pageData,mode:"edit"}),a=Lt({initialSnapshot:l.getSnapshot()}),d=At(),v=$t({content:l.content,nextId:l.nextId,onUpdate:y=>{l.updateContent(y),r("change",y)},onSnapshot:y=>{a.pushHistory(y,l.getSnapshot())}}),m=e.ref(1024),_=e.ref(768),x=e.ref(null),g=e.ref(null);function B(){r("save",{content:l.content.value,layout:l.layout.value,maxId:l.maxId.value})}function E(y){if(!y)return!1;try{l.restoreSnapshot(y);const L=a.selectedNodeId.value;return L!==null&&!u.findNodeById(l.content.value,L)&&a.selectNode(null),r("change",l.content.value),!0}catch(L){return u.reportDevDiagnostic("PageEditor.restoreSnapshotAndEmit",u.createPageBuilderError("INVALID_SNAPSHOT","[PageBuilder] Failed to apply history snapshot. Undo/redo step was skipped.",{cause:L,details:{snapshotPreview:y.slice(0,200)}})),!1}}function C(){E(a.undo())}function p(){E(a.redo())}function b(y){const L=u.findNodeById(l.content.value,y);!L||L.readonly||v.deleteNode(y)}function c(y){u.findNodeById(l.content.value,y)&&v.duplicateNode(y)}function i(y){const L=u.findNodeById(l.content.value,y);!L||L.readonly||v.canMoveNodeUp(y)&&v.moveNodeUp(y)}function w(y){const L=u.findNodeById(l.content.value,y);!L||L.readonly||v.canMoveNodeDown(y)&&v.moveNodeDown(y)}function I(y){if(y.action==="duplicate"){c(y.nodeId);return}if(y.action==="delete"){b(y.nodeId);return}if(y.action==="move-up"){i(y.nodeId);return}y.action==="move-down"&&w(y.nodeId)}function T(y){if(!y||typeof y!="object"||!("nodeType"in y)||y.nodeType!==1)return!1;const L=y,f=L.tagName.toLowerCase();return f==="input"||f==="textarea"||f==="select"?!0:!!L.closest('[contenteditable]:not([contenteditable="false"])')}function P(){const y=a.selectedNodeId.value;y!==null&&b(y)}function D(y){if(y.defaultPrevented||y.isEditable)return;const L=y.ctrlKey||y.metaKey,f=y.key.toLowerCase(),N=y.code.toLowerCase();if(L&&f==="z"){y.preventDefault(),y.shiftKey?p():C();return}if(L&&f==="y"){y.preventDefault(),p();return}if(L&&f==="s"){y.preventDefault(),B();return}(f==="delete"||f==="backspace"||N==="delete"||N==="backspace")&&!y.ctrlKey&&!y.metaKey&&!y.altKey&&(y.preventDefault(),P())}function M(y){D({key:y.key,code:y.code,ctrlKey:y.ctrlKey,metaKey:y.metaKey,shiftKey:y.shiftKey,altKey:y.altKey,defaultPrevented:y.defaultPrevented,isEditable:T(y.target)||T(document.activeElement),preventDefault:()=>y.preventDefault()})}function j(y){D(y)}function z(y){const L=ge[y];return y==="custom"?{width:m.value,height:_.value}:{width:L.width,height:L.height}}function H(y){if(y==="custom"&&a.viewport.value!=="custom")if(x.value!==null&&g.value!==null)m.value=x.value,_.value=g.value;else{const L=z(a.viewport.value);m.value=L.width,_.value=L.height}a.setViewport(y)}function ee(y){m.value=y.width,_.value=y.height,a.viewport.value!=="custom"&&a.setViewport("custom")}function Z(y){x.value=y.width,g.value=y.height}function be(y){d.startDragNew(y)}function fe(){d.cancelDrag()}function me(y){var Y;const L=a.selectedNodeId.value,f=L!==null?u.findNodeById(l.content.value,L):void 0;let N=l.content.value.id,k=l.content.value.children.length,R="default";if(L!==null&&f){const G=u.findParent(l.content.value,L);G?(N=G.parent.id,k=G.index+1,R=f.slot??"default"):(N=f.id,k=f.children.length)}const $=(Y=le(y))==null?void 0:Y.defaultProps,A=v.addNode(N,y,k,R,$);A!==null&&a.selectNode(A)}return e.onMounted(()=>{window.addEventListener("keydown",M)}),e.onUnmounted(()=>{window.removeEventListener("keydown",M)}),e.provide(Tt,l),e.provide(Vt,a),e.provide(Be,v),e.provide(Ce,d),(y,L)=>(e.openBlock(),e.createElementBlock("div",Kr,[e.createVNode(Fn,{"can-undo":e.unref(a).canUndo.value,"can-redo":e.unref(a).canRedo.value,"is-dirty":e.unref(l).isDirty.value,viewport:e.unref(a).viewport.value,"custom-viewport-width":m.value,"custom-viewport-height":_.value,"active-viewport-width":x.value,"active-viewport-height":g.value,onUndo:C,onRedo:p,onSave:B,onViewportChange:H,onCustomViewportChange:ee},null,8,["can-undo","can-redo","is-dirty","viewport","custom-viewport-width","custom-viewport-height","active-viewport-width","active-viewport-height"]),e.createElementVNode("div",Hr,[e.createVNode(Io,{open:e.unref(a).leftDrawerOpen.value,content:e.unref(l).content.value,"selected-node-id":e.unref(a).selectedNodeId.value,onToggle:e.unref(a).toggleLeftDrawer,onSelect:e.unref(a).selectNode,onAdd:me,onDragStart:be,onDragEnd:fe},null,8,["open","content","selected-node-id","onToggle","onSelect"]),e.createVNode(Ur,{content:e.unref(l).content.value,layout:e.unref(l).layout.value,variables:e.unref(l).variables.value,"selected-node-id":e.unref(a).selectedNodeId.value,"hovered-node-id":e.unref(a).hoveredNodeId.value,viewport:e.unref(a).viewport.value,"viewport-width":e.unref(a).viewport.value==="custom"?m.value:null,"viewport-height":e.unref(a).viewport.value==="custom"?_.value:null,onSelect:e.unref(a).selectNode,onHover:e.unref(a).hoverNode,onContextAction:I,onIframeKeydown:j,onViewportSizeChange:Z},null,8,["content","layout","variables","selected-node-id","hovered-node-id","viewport","viewport-width","viewport-height","onSelect","onHover"]),e.createVNode(xr,{open:e.unref(a).rightDrawerOpen.value,"selected-node-id":e.unref(a).selectedNodeId.value,content:e.unref(l).content.value,onToggle:e.unref(a).toggleRightDrawer,onUpdateProps:e.unref(v).updateNodeProps,onDelete:b,onDuplicate:c},null,8,["open","selected-node-id","content","onToggle","onUpdateProps"])])]))}}),Wt=K(Wr,[["__scopeId","data-v-5fd2d41f"]]),jr={key:0,class:"ipb-page-builder__warning",role:"alert"},Fr=e.defineComponent({__name:"PageBuilder",props:{pageData:{type:Object,required:!0},mode:{type:String,default:"read"},locale:{type:String,default:void 0},messages:{type:Object,default:void 0}},emits:["save","change"],setup(t){const o=t,n=new Set;function r(E,C,p){n.has(E)||(n.add(E),u.reportDevDiagnostic("PageBuilder",u.createPageBuilderError("INVALID_PAGE_DATA",C,{details:p})))}const l=e.computed(()=>o.pageData),a=e.computed(()=>o.mode==="read"||o.mode==="edit"?o.mode:(r("invalid-mode",`[PageBuilder] Unknown mode "${String(o.mode)}". Falling back to "read".`,{mode:o.mode}),"read")),d=e.computed(()=>u.validatePageData(l.value)),v=e.computed(()=>{const E=u.validateNode(l.value.content,"content"),C=u.validateNode(l.value.layout,"layout");return E.isValid&&C.isValid}),m=e.computed(()=>a.value==="edit"&&!v.value),_=e.inject(Bt,null),x=e.computed(()=>o.locale??(_==null?void 0:_.locale)??Ie),g=e.computed(()=>It(Ke,_==null?void 0:_.messages,o.messages)),B=He(()=>x.value,()=>g.value);return e.watch(d,E=>{E.isValid||r("invalid-page-data","[PageBuilder] Invalid pageData payload detected. Rendering continues with degraded behavior.",{errors:E.errors})},{immediate:!0}),e.provide(Ct,{locale:x,t:B}),(E,C)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[m.value?(e.openBlock(),e.createElementBlock("div",jr,e.toDisplayString(e.unref(B)("pageBuilder.warning.invalidEditMode")),1)):e.createCommentVNode("",!0),a.value==="read"||m.value?(e.openBlock(),e.createBlock(Pt,{key:1,"page-data":l.value},null,8,["page-data"])):(e.openBlock(),e.createBlock(Wt,{key:2,"page-data":l.value,onSave:C[0]||(C[0]=p=>E.$emit("save",p)),onChange:C[1]||(C[1]=p=>E.$emit("change",p))},null,8,["page-data"]))],64))}}),jt=K(Fr,[["__scopeId","data-v-84b8d079"]]),ft=new WeakSet;function mt(t){const o=[];for(const n of t){const r=n.name.trim(),l=le(r);if(!l){o.push(n);continue}if(l.component!==n.component)throw u.createPageBuilderError("DUPLICATE_COMPONENT",`[PageBuilder] Component "${r}" is already registered with a different implementation.`,{details:{componentName:r}})}o.length>0&&vt(o)}const Yr={install(t,o={}){if(ft.has(t))return;ft.add(t);const{components:n=[],registerBuiltIn:r=!0,globalName:l="PageBuilder",locale:a,messages:d}=o;t.provide(Bt,{locale:a,messages:d}),r&&mt(Et),n.length>0&&mt(n),l!==!1&&t.component(l,jt)}},Gr={type:Object};exports.PageBuilderError=u.PageBuilderError;exports.cloneTree=u.cloneTree;exports.computeWindowRange=u.computeWindowRange;exports.countNodes=u.countNodes;exports.createNode=u.createNode;exports.createStableNodeKey=u.createStableNodeKey;exports.createVirtualTreeIndexMaps=u.createVirtualTreeIndexMaps;exports.extractPlainText=u.extractPlainText;exports.findNodeById=u.findNodeById;exports.findParent=u.findParent;exports.flattenTree=u.flattenTree;exports.getMaxId=u.getMaxId;exports.insertNode=u.insertNode;exports.interpolateProps=u.interpolateProps;exports.isPageBuilderError=u.isPageBuilderError;exports.moveNode=u.moveNode;exports.normalizeSafeHtmlTag=u.normalizeSafeHtmlTag;exports.removeNode=u.removeNode;exports.sanitizeRichTextHtml=u.sanitizeRichTextHtml;exports.sanitizeUrlByKind=u.sanitizeUrlByKind;exports.sliceWindow=u.sliceWindow;exports.validateNode=u.validateNode;exports.validatePageData=u.validatePageData;exports.walkTree=u.walkTree;exports.DEFAULT_LOCALE=Ie;exports.DRAG_DROP_KEY=Ce;exports.EDITOR_KEY=Vt;exports.NODE_TREE_KEY=Be;exports.NodeRenderer=We;exports.PAGE_BUILDER_KEY=Tt;exports.PageBuilder=jt;exports.PageBuilderPlugin=Yr;exports.PageEditor=Wt;exports.PageReader=Pt;exports.PbColumn=ht;exports.PbContainer=xt;exports.PbImage=wt;exports.PbRow=yt;exports.PbSection=Nt;exports.PbText=_t;exports.PbVideo=kt;exports.VIEWPORT_PRESETS=ge;exports.builderOptionsPropType=Gr;exports.builtInComponents=Et;exports.clearRegistry=an;exports.createTranslator=He;exports.defaultTranslations=Ke;exports.getComponent=le;exports.getComponentsByCategory=bt;exports.getRegisteredComponents=on;exports.hasComponent=rn;exports.mergeTranslations=It;exports.registerComponent=en;exports.registerComponents=vt;exports.replaceComponent=tn;exports.resolveComponent=gt;exports.translate=Dt;exports.unregisterComponent=nn;exports.useDragDrop=At;exports.useEditor=Lt;exports.useNodeTree=$t;exports.usePageBuilder=Rt;exports.usePageBuilderI18n=X;
|
|
33
38
|
//# sourceMappingURL=index.cjs.map
|